提交 a4ee2f2c 编写于 作者: W wqz960

fix format

上级 f85ced36
import numpy as np
import argparse
import paddle
import paddle.fluid as fluid
from paddle.fluid.param_attr import ParamAttr
from paddle.fluid.layer_helper import LayerHelper
from paddle.fluid.dygraph.nn import Conv2D, Pool2D, BatchNorm, Linear
from paddle.fluid.dygraph.base import to_variable
from paddle.fluid import framework
from paddle.fluid.dygraph.nn import Conv2D, Pool2D, BatchNorm, Linear, Dropout
import math
import sys
import time
__all__ = ['Xception41', 'Xception65', 'Xception71']
class ConvBNLayer(fluid.dygraph.Layer):
def __init__(self,
num_channels,
num_filters,
filter_size,
stride=1,
groups=1,
act=None,
name=None):
super(ConvBNLayer, self).__init__()
self._conv = Conv2D(
num_channels=num_channels,
num_filters=num_filters,
filter_size=filter_size,
stride=stride,
padding=(filter_size - 1) // 2,
groups=groups,
act=None,
param_attr=ParamAttr(name=name + "_weights"),
bias_attr=False)
bn_name = "bn_" + name
self._batch_norm = BatchNorm(
num_filters,
act=act,
param_attr=ParamAttr(name=bn_name + "_scale"),
bias_attr=ParamAttr(name=bn_name + "_offset"),
moving_mean_name=bn_name + '_mean',
moving_variance_name=bn_name + '_variance')
__all__ = ["AlexNet"]
class ConvPoolLayer(fluid.dygraph.Layer):
def __init__(self,
inputc_channels,
output_channels,
filter_size,
stride,
padding,
stdv,
groups=1,
act=None,
name=None):
super(ConvPoolLayer, self).__init__()
self._conv = Conv2D(num_channels=inputc_channels,
num_filters=output_channels,
filter_size=filter_size,
stride=stride,
padding=padding,
groups=groups,
param_attr=ParamAttr(name=name + "_weights",
initializer=fluid.initializer.Uniform(-stdv, stdv)),
bias_attr=ParamAttr(name=name + "_offset",
initializer=fluid.initializer.Uniform(-stdv, stdv)),
act=act)
self._pool = Pool2D(pool_size=3,
pool_stride=2,
pool_padding=0,
pool_type="max")
def forward(self, inputs):
y = self._conv(inputs)
y = self._batch_norm(y)
return y
class Separable_Conv(fluid.dygraph.Layer):
def __init__(self, input_channels, output_channels, stride=1, name=None):
super(Separable_Conv, self).__init__()
self._pointwise_conv = ConvBNLayer(
input_channels, output_channels, 1, name=name + "_sep")
self._depthwise_conv = ConvBNLayer(
output_channels,
output_channels,
3,
stride=stride,
groups=output_channels,
name=name + "_dw")
def forward(self, inputs):
x = self._pointwise_conv(inputs)
x = self._depthwise_conv(x)
x = self._conv(inputs)
x = self._pool(x)
return x
class Entry_Flow_Bottleneck_Block(fluid.dygraph.Layer):
def __init__(self,
input_channels,
output_channels,
stride=2,
name=None,
relu_first=False):
super(Entry_Flow_Bottleneck_Block, self).__init__()
self.relu_first = relu_first
self._short = Conv2D(
num_channels=input_channels,
num_filters=output_channels,
filter_size=1,
stride=stride,
padding=0,
act=None,
param_attr=ParamAttr(name + "_branch1_weights"),
bias_attr=False)
self._conv1 = Separable_Conv(
input_channels,
output_channels,
stride=1,
name=name + "_branch2a_weights")
self._conv2 = Separable_Conv(
output_channels,
output_channels,
stride=1,
name=name + "_branch2b_weights")
self._pool = Pool2D(
pool_size=3, pool_stride=stride, pool_padding=1, pool_type="max")
def forward(self, inputs):
conv0 = inputs
short = self._short(inputs)
layer_helper = LayerHelper(self.full_name(), act="relu")
if self.relu_first:
conv0 = layer_helper.append_activation(conv0)
conv1 = self._conv1(conv0)
conv2 = layer_helper.append_activation(conv1)
conv2 = self._conv2(conv2)
pool = self._pool(conv2)
return fluid.layers.elementwise_add(x=short, y=pool)
class Entry_Flow(fluid.dygraph.Layer):
def __init__(self, block_num=3):
super(Entry_Flow, self).__init__()
name = "entry_flow"
self.block_num = block_num
self._conv1 = ConvBNLayer(
3, 32, 3, stride=2, act="relu", name=name + "_conv1")
self._conv2 = ConvBNLayer(32, 64, 3, act="relu", name=name + "_conv2")
if block_num == 3:
self._conv_0 = Entry_Flow_Bottleneck_Block(
64, 128, stride=2, name=name + "_0", relu_first=False)
self._conv_1 = Entry_Flow_Bottleneck_Block(
128, 256, stride=2, name=name + "_1", relu_first=True)
self._conv_2 = Entry_Flow_Bottleneck_Block(
256, 728, stride=2, name=name + "_2", relu_first=True)
elif block_num == 5:
self._conv_0 = Entry_Flow_Bottleneck_Block(
64, 128, stride=2, name=name + "_0", relu_first=False)
self._conv_1 = Entry_Flow_Bottleneck_Block(
128, 256, stride=1, name=name + "_1", relu_first=True)
self._conv_2 = Entry_Flow_Bottleneck_Block(
256, 256, stride=2, name=name + "_2", relu_first=True)
self._conv_3 = Entry_Flow_Bottleneck_Block(
256, 728, stride=1, name=name + "_3", relu_first=True)
self._conv_4 = Entry_Flow_Bottleneck_Block(
728, 728, stride=2, name=name + "_4", relu_first=True)
else:
sys.exit(-1)
class AlexNetDY(fluid.dygraph.Layer):
def __init__(self, class_dim=1000):
super(AlexNetDY, self).__init__()
stdv = 1.0/math.sqrt(3*11*11)
self._conv1 = ConvPoolLayer(
3, 64, 11, 4, 2, stdv, act="relu", name="conv1")
stdv = 1.0/math.sqrt(64*5*5)
self._conv2 = ConvPoolLayer(
64, 192, 5, 1, 2, stdv, act="relu", name="conv2")
stdv = 1.0/math.sqrt(192*3*3)
self._conv3 = Conv2D(192, 384, 3, stride=1, padding=1,
param_attr=ParamAttr(name="conv3_weights", initializer=fluid.initializer.Uniform(-stdv, stdv)),
bias_attr=ParamAttr(name="conv3_offset", initializer=fluid.initializer.Uniform(-stdv, stdv)),
act="relu")
stdv = 1.0/math.sqrt(384*3*3)
self._conv4 = Conv2D(384, 256, 3, stride=1, padding=1,
param_attr=ParamAttr(name="conv4_weights", initializer=fluid.initializer.Uniform(-stdv, stdv)),
bias_attr=ParamAttr(name="conv4_offset", initializer=fluid.initializer.Uniform(-stdv, stdv)),
act="relu")
stdv = 1.0/math.sqrt(256*3*3)
self._conv5 = ConvPoolLayer(
256, 256, 3, 1, 1, stdv, act="relu", name="conv5")
stdv = 1.0/math.sqrt(256*6*6)
self._drop1 = Dropout(p=0.5)
self._fc6 = Linear(input_dim=256*6*6,
output_dim=4096,
param_attr=ParamAttr(name="fc6_weights", initializer=fluid.initializer.Uniform(-stdv, stdv)),
bias_attr=ParamAttr(name="fc6_offset", initializer=fluid.initializer.Uniform(-stdv, stdv)),
act="relu")
self._drop2 = Dropout(p=0.5)
self._fc7 = Linear(input_dim=4096,
output_dim=4096,
param_attr=ParamAttr(name="fc7_weights", initializer=fluid.initializer.Uniform(-stdv, stdv)),
bias_attr=ParamAttr(name="fc7_offset", initializer=fluid.initializer.Uniform(-stdv, stdv)),
act="relu")
self._fc8 = Linear(input_dim=4096,
output_dim=class_dim,
param_attr=ParamAttr(name="fc8_weights", initializer=fluid.initializer.Uniform(-stdv, stdv)),
bias_attr=ParamAttr(name="fc8_offset", initializer=fluid.initializer.Uniform(-stdv, stdv)))
def forward(self, inputs):
x = self._conv1(inputs)
x = self._conv2(x)
if self.block_num == 3:
x = self._conv_0(x)
x = self._conv_1(x)
x = self._conv_2(x)
elif self.block_num == 5:
x = self._conv_0(x)
x = self._conv_1(x)
x = self._conv_2(x)
x = self._conv_3(x)
x = self._conv_4(x)
x = self._conv3(x)
x = self._conv4(x)
x = self._conv5(x)
x = fluid.layers.flatten(x, axis=0)
x = self._drop1(x)
x = self._fc6(x)
x = self._drop2(x)
x = self._fc7(x)
x = self._fc8(x)
return x
class Middle_Flow_Bottleneck_Block(fluid.dygraph.Layer):
def __init__(self, input_channels, output_channels, name):
super(Middle_Flow_Bottleneck_Block, self).__init__()
self._conv_0 = Separable_Conv(
input_channels,
output_channels,
stride=1,
name=name + "_branch2a_weights")
self._conv_1 = Separable_Conv(
output_channels,
output_channels,
stride=1,
name=name + "_branch2b_weights")
self._conv_2 = Separable_Conv(
output_channels,
output_channels,
stride=1,
name=name + "_branch2c_weights")
def forward(self, inputs):
layer_helper = LayerHelper(self.full_name(), act="relu")
conv0 = layer_helper.append_activation(inputs)
conv0 = self._conv_0(conv0)
conv1 = layer_helper.append_activation(conv0)
conv1 = self._conv_1(conv1)
conv2 = layer_helper.append_activation(conv1)
conv2 = self._conv_2(conv2)
return fluid.layers.elementwise_add(x=inputs, y=conv2)
class Middle_Flow(fluid.dygraph.Layer):
def __init__(self, block_num=8):
super(Middle_Flow, self).__init__()
self.block_num = block_num
self._conv_0 = Middle_Flow_Bottleneck_Block(
728, 728, name="middle_flow_0")
self._conv_1 = Middle_Flow_Bottleneck_Block(
728, 728, name="middle_flow_1")
self._conv_2 = Middle_Flow_Bottleneck_Block(
728, 728, name="middle_flow_2")
self._conv_3 = Middle_Flow_Bottleneck_Block(
728, 728, name="middle_flow_3")
self._conv_4 = Middle_Flow_Bottleneck_Block(
728, 728, name="middle_flow_4")
self._conv_5 = Middle_Flow_Bottleneck_Block(
728, 728, name="middle_flow_5")
self._conv_6 = Middle_Flow_Bottleneck_Block(
728, 728, name="middle_flow_6")
self._conv_7 = Middle_Flow_Bottleneck_Block(
728, 728, name="middle_flow_7")
if block_num == 16:
self._conv_8 = Middle_Flow_Bottleneck_Block(
728, 728, name="middle_flow_8")
self._conv_9 = Middle_Flow_Bottleneck_Block(
728, 728, name="middle_flow_9")
self._conv_10 = Middle_Flow_Bottleneck_Block(
728, 728, name="middle_flow_10")
self._conv_11 = Middle_Flow_Bottleneck_Block(
728, 728, name="middle_flow_11")
self._conv_12 = Middle_Flow_Bottleneck_Block(
728, 728, name="middle_flow_12")
self._conv_13 = Middle_Flow_Bottleneck_Block(
728, 728, name="middle_flow_13")
self._conv_14 = Middle_Flow_Bottleneck_Block(
728, 728, name="middle_flow_14")
self._conv_15 = Middle_Flow_Bottleneck_Block(
728, 728, name="middle_flow_15")
def forward(self, inputs):
x = self._conv_0(inputs)
x = self._conv_1(x)
x = self._conv_2(x)
x = self._conv_3(x)
x = self._conv_4(x)
x = self._conv_5(x)
x = self._conv_6(x)
x = self._conv_7(x)
if self.block_num == 16:
x = self._conv_8(x)
x = self._conv_9(x)
x = self._conv_10(x)
x = self._conv_11(x)
x = self._conv_12(x)
x = self._conv_13(x)
x = self._conv_14(x)
x = self._conv_15(x)
return x
class Exit_Flow_Bottleneck_Block(fluid.dygraph.Layer):
def __init__(self, input_channels, output_channels1, output_channels2,
name):
super(Exit_Flow_Bottleneck_Block, self).__init__()
self._short = Conv2D(
num_channels=input_channels,
num_filters=output_channels2,
filter_size=1,
stride=2,
padding=0,
act=None,
param_attr=ParamAttr(name + "_branch1_weights"),
bias_attr=False)
self._conv_1 = Separable_Conv(
input_channels,
output_channels1,
stride=1,
name=name + "_branch2a_weights")
self._conv_2 = Separable_Conv(
output_channels1,
output_channels2,
stride=1,
name=name + "_branch2b_weights")
self._pool = Pool2D(
pool_size=3, pool_stride=2, pool_padding=1, pool_type="max")
def forward(self, inputs):
short = self._short(inputs)
layer_helper = LayerHelper(self.full_name(), act="relu")
conv0 = layer_helper.append_activation(inputs)
conv1 = self._conv_1(conv0)
conv2 = layer_helper.append_activation(conv1)
conv2 = self._conv_2(conv2)
pool = self._pool(conv2)
return fluid.layers.elementwise_add(x=short, y=pool)
class Exit_Flow(fluid.dygraph.Layer):
def __init__(self, class_dim):
super(Exit_Flow, self).__init__()
name = "exit_flow"
self._conv_0 = Exit_Flow_Bottleneck_Block(
728, 728, 1024, name=name + "_1")
self._conv_1 = Separable_Conv(1024, 1536, stride=1, name=name + "_2")
self._conv_2 = Separable_Conv(1536, 2048, stride=1, name=name + "_3")
self._pool = Pool2D(pool_type="avg", global_pooling=True)
stdv = 1.0 / math.sqrt(2048 * 1.0)
self._out = Linear(
2048,
class_dim,
param_attr=ParamAttr(
name="fc_weights",
initializer=fluid.initializer.Uniform(-stdv, stdv)),
bias_attr=ParamAttr(name="fc_offset"))
def forward(self, inputs):
layer_helper = LayerHelper(self.full_name(), act="relu")
conv0 = self._conv_0(inputs)
conv1 = self._conv_1(conv0)
conv1 = layer_helper.append_activation(conv1)
conv2 = self._conv_2(conv1)
conv2 = layer_helper.append_activation(conv2)
pool = self._pool(conv2)
pool = fluid.layers.reshape(pool, [0, -1])
out = self._out(pool)
return out
class Xception(fluid.dygraph.Layer):
def __init__(self,
entry_flow_block_num=3,
middle_flow_block_num=8,
class_dim=1000):
super(Xception, self).__init__()
self.entry_flow_block_num = entry_flow_block_num
self.middle_flow_block_num = middle_flow_block_num
self._entry_flow = Entry_Flow(entry_flow_block_num)
self._middle_flow = Middle_Flow(middle_flow_block_num)
self._exit_flow = Exit_Flow(class_dim)
def forward(self, inputs):
x = self._entry_flow(inputs)
x = self._middle_flow(x)
x = self._exit_flow(x)
return x
def Xception41():
model = Xception(entry_flow_block_num=3, middle_flow_block_num=8)
return model
def Xception65():
model = Xception(entry_flow_block_num=3, middle_flow_block_num=16)
return model
def Xception71():
model = Xception(entry_flow_block_num=5, middle_flow_block_num=16)
def AlexNet(**args):
model = AlexNetDY(**args)
return model
import numpy as np
import argparse
import paddle
import paddle.fluid as fluid
from paddle.fluid.param_attr import ParamAttr
from paddle.fluid.layer_helper import LayerHelper
from paddle.fluid.dygraph.nn import Conv2D, Pool2D, BatchNorm, Linear
from paddle.fluid.dygraph.base import to_variable
from paddle.fluid import framework
import math
__all__ = ["DarkNet53"]
......@@ -49,9 +42,9 @@ class ConvBNLayer(fluid.dygraph.Layer):
return x
class Basic_Block(fluid.dygraph.Layer):
class BasicBlock(fluid.dygraph.Layer):
def __init__(self, input_channels, output_channels, name=None):
super(Basic_Block, self).__init__()
super(BasicBlock, self).__init__()
self._conv1 = ConvBNLayer(
input_channels, output_channels, 1, 1, 0, name=name + ".0")
......@@ -66,48 +59,48 @@ class Basic_Block(fluid.dygraph.Layer):
class DarkNet(fluid.dygraph.Layer):
def __init__(self, class_dim=1000):
super(DarkNet53, self).__init__()
super(DarkNet, self).__init__()
self.stages = [1, 2, 8, 8, 4]
self._conv1 = ConvBNLayer(3, 32, 3, 1, 1, name="yolo_input")
self._conv2 = ConvBNLayer(
32, 64, 3, 2, 1, name="yolo_input.downsample")
self._basic_block_01 = Basic_Block(64, 32, name="stage.0.0")
self._basic_block_01 = BasicBlock(64, 32, name="stage.0.0")
self._downsample_0 = ConvBNLayer(
64, 128, 3, 2, 1, name="stage.0.downsample")
self._basic_block_11 = Basic_Block(128, 64, name="stage.1.0")
self._basic_block_12 = Basic_Block(128, 64, name="stage.1.1")
self._basic_block_11 = BasicBlock(128, 64, name="stage.1.0")
self._basic_block_12 = BasicBlock(128, 64, name="stage.1.1")
self._downsample_1 = ConvBNLayer(
128, 256, 3, 2, 1, name="stage.1.downsample")
self._basic_block_21 = Basic_Block(256, 128, name="stage.2.0")
self._basic_block_22 = Basic_Block(256, 128, name="stage.2.1")
self._basic_block_23 = Basic_Block(256, 128, name="stage.2.2")
self._basic_block_24 = Basic_Block(256, 128, name="stage.2.3")
self._basic_block_25 = Basic_Block(256, 128, name="stage.2.4")
self._basic_block_26 = Basic_Block(256, 128, name="stage.2.5")
self._basic_block_27 = Basic_Block(256, 128, name="stage.2.6")
self._basic_block_28 = Basic_Block(256, 128, name="stage.2.7")
self._basic_block_21 = BasicBlock(256, 128, name="stage.2.0")
self._basic_block_22 = BasicBlock(256, 128, name="stage.2.1")
self._basic_block_23 = BasicBlock(256, 128, name="stage.2.2")
self._basic_block_24 = BasicBlock(256, 128, name="stage.2.3")
self._basic_block_25 = BasicBlock(256, 128, name="stage.2.4")
self._basic_block_26 = BasicBlock(256, 128, name="stage.2.5")
self._basic_block_27 = BasicBlock(256, 128, name="stage.2.6")
self._basic_block_28 = BasicBlock(256, 128, name="stage.2.7")
self._downsample_2 = ConvBNLayer(
256, 512, 3, 2, 1, name="stage.2.downsample")
self._basic_block_31 = Basic_Block(512, 256, name="stage.3.0")
self._basic_block_32 = Basic_Block(512, 256, name="stage.3.1")
self._basic_block_33 = Basic_Block(512, 256, name="stage.3.2")
self._basic_block_34 = Basic_Block(512, 256, name="stage.3.3")
self._basic_block_35 = Basic_Block(512, 256, name="stage.3.4")
self._basic_block_36 = Basic_Block(512, 256, name="stage.3.5")
self._basic_block_37 = Basic_Block(512, 256, name="stage.3.6")
self._basic_block_38 = Basic_Block(512, 256, name="stage.3.7")
self._basic_block_31 = BasicBlock(512, 256, name="stage.3.0")
self._basic_block_32 = BasicBlock(512, 256, name="stage.3.1")
self._basic_block_33 = BasicBlock(512, 256, name="stage.3.2")
self._basic_block_34 = BasicBlock(512, 256, name="stage.3.3")
self._basic_block_35 = BasicBlock(512, 256, name="stage.3.4")
self._basic_block_36 = BasicBlock(512, 256, name="stage.3.5")
self._basic_block_37 = BasicBlock(512, 256, name="stage.3.6")
self._basic_block_38 = BasicBlock(512, 256, name="stage.3.7")
self._downsample_3 = ConvBNLayer(
512, 1024, 3, 2, 1, name="stage.3.downsample")
self._basic_block_41 = Basic_Block(1024, 512, name="stage.4.0")
self._basic_block_42 = Basic_Block(1024, 512, name="stage.4.1")
self._basic_block_43 = Basic_Block(1024, 512, name="stage.4.2")
self._basic_block_44 = Basic_Block(1024, 512, name="stage.4.3")
self._basic_block_41 = BasicBlock(1024, 512, name="stage.4.0")
self._basic_block_42 = BasicBlock(1024, 512, name="stage.4.1")
self._basic_block_43 = BasicBlock(1024, 512, name="stage.4.2")
self._basic_block_44 = BasicBlock(1024, 512, name="stage.4.3")
self._pool = Pool2D(pool_type="avg", global_pooling=True)
......@@ -164,4 +157,4 @@ class DarkNet(fluid.dygraph.Layer):
def DarkNet53(**args):
model = DarkNet(**args)
return model
return model
\ No newline at end of file
# coding:utf-8
import numpy as np
import argparse
import paddle
import paddle.fluid as fluid
from paddle.fluid.param_attr import ParamAttr
from paddle.fluid.layer_helper import LayerHelper
from paddle.fluid.dygraph.nn import Conv2D, Pool2D, BatchNorm, Linear, Dropout
from paddle.fluid.dygraph.base import to_variable
from paddle.fluid import framework
import math
import collections
import re
......@@ -410,7 +403,7 @@ class ExpandConvNorm(fluid.dygraph.Layer):
return inputs
class Depthwise_Conv_Norm(fluid.dygraph.Layer):
class DepthwiseConvNorm(fluid.dygraph.Layer):
def __init__(self,
input_channels,
block_args,
......@@ -418,7 +411,7 @@ class Depthwise_Conv_Norm(fluid.dygraph.Layer):
name=None,
model_name=None,
cur_stage=None):
super(Depthwise_Conv_Norm, self).__init__()
super(DepthwiseConvNorm, self).__init__()
self.k = block_args.kernel_size
self.s = block_args.stride
......@@ -444,7 +437,7 @@ class Depthwise_Conv_Norm(fluid.dygraph.Layer):
return self._conv(inputs)
class Project_Conv_Norm(fluid.dygraph.Layer):
class ProjectConvNorm(fluid.dygraph.Layer):
def __init__(self,
input_channels,
block_args,
......@@ -452,7 +445,7 @@ class Project_Conv_Norm(fluid.dygraph.Layer):
name=None,
model_name=None,
cur_stage=None):
super(Project_Conv_Norm, self).__init__()
super(ProjectConvNorm, self).__init__()
final_oup = block_args.output_filters
......@@ -542,7 +535,7 @@ class MbConvBlock(fluid.dygraph.Layer):
model_name=model_name,
cur_stage=cur_stage)
self._dcn = Depthwise_Conv_Norm(
self._dcn = DepthwiseConvNorm(
input_channels * block_args.expand_ratio,
block_args,
padding_type=padding_type,
......@@ -562,7 +555,7 @@ class MbConvBlock(fluid.dygraph.Layer):
model_name=model_name,
cur_stage=cur_stage)
self._pcn = Project_Conv_Norm(
self._pcn = ProjectConvNorm(
input_channels * block_args.expand_ratio,
block_args,
padding_type=padding_type,
......@@ -792,117 +785,133 @@ class EfficientNet(fluid.dygraph.Layer):
def EfficientNetB0_small(is_test=True,
padding_type='DYNAMIC',
override_params=None,
use_se=False):
use_se=False,
**args):
model = EfficientNet(
name='b0',
is_test=is_test,
padding_type=padding_type,
override_params=override_params,
use_se=use_se)
use_se=use_se,
**args)
return model
def EfficientNetB0(is_test=False,
padding_type='SAME',
override_params=None,
use_se=True):
use_se=True,
**args):
model = EfficientNet(
name='b0',
is_test=is_test,
padding_type=padding_type,
override_params=override_params,
use_se=use_se)
use_se=use_se,
**args)
return model
def EfficientNetB1(is_test=False,
padding_type='SAME',
override_params=None,
use_se=True):
use_se=True,
**args):
model = EfficientNet(
name='b1',
is_test=is_test,
padding_type=padding_type,
override_params=override_params,
use_se=use_se)
use_se=use_se,
**args)
return model
def EfficientNetB2(is_test=False,
padding_type='SAME',
override_params=None,
use_se=True):
use_se=True,
**args):
model = EfficientNet(
name='b2',
is_test=is_test,
padding_type=padding_type,
override_params=override_params,
use_se=use_se)
use_se=use_se,
**args)
return model
def EfficientNetB3(is_test=False,
padding_type='SAME',
override_params=None,
use_se=True):
use_se=True,
**args):
model = EfficientNet(
name='b3',
is_test=is_test,
padding_type=padding_type,
override_params=override_params,
use_se=use_se)
use_se=use_se,
**args)
return model
def EfficientNetB4(is_test=False,
padding_type='SAME',
override_params=None,
use_se=True):
use_se=True,
**args):
model = EfficientNet(
name='b4',
is_test=is_test,
padding_type=padding_type,
override_params=override_params,
use_se=use_se)
use_se=use_se,
**args)
return model
def EfficientNetB5(is_test=False,
padding_type='SAME',
override_params=None,
use_se=True):
use_se=True,
**args):
model = EfficientNet(
name='b5',
is_test=is_test,
padding_type=padding_type,
override_params=override_params,
use_se=use_se)
use_se=use_se,
**args)
return model
def EfficientNetB6(is_test=False,
padding_type='SAME',
override_params=None,
use_se=True):
use_se=True,
**args):
model = EfficientNet(
name='b6',
is_test=is_test,
padding_type=padding_type,
override_params=override_params,
use_se=use_se)
use_se=use_se,
**args)
return model
def EfficientNetB7(is_test=False,
padding_type='SAME',
override_params=None,
use_se=True):
use_se=True,
**args):
model = EfficientNet(
name='b7',
is_test=is_test,
padding_type=padding_type,
override_params=override_params,
use_se=use_se)
return model
\ No newline at end of file
use_se=use_se,
**args)
return model
\ No newline at end of file
......@@ -3,17 +3,10 @@ import paddle.fluid as fluid
from paddle.fluid.param_attr import ParamAttr
from paddle.fluid.layer_helper import LayerHelper
from paddle.fluid.dygraph.nn import Conv2D, Pool2D, BatchNorm, Linear
from paddle.fluid.dygraph.base import to_variable
from paddle.fluid import framework
import math
import sys
import time
__all__ = ['GoogLeNet_DY']
def xavier(channels, filter_size, name):
stdv = (3.0 / (filter_size**2 * channels))**0.5
param_attr = ParamAttr(
......@@ -101,9 +94,9 @@ class Inception(fluid.dygraph.Layer):
return layer_helper.append_activation(cat)
class GoogleNet_DY(fluid.dygraph.Layer):
class GoogleNetDY(fluid.dygraph.Layer):
def __init__(self, class_dim=1000):
super(GoogleNet_DY, self).__init__()
super(GoogleNetDY, self).__init__()
self._conv = ConvLayer(3, 64, 7, 2, name="conv1")
self._pool = Pool2D(pool_size=3, pool_type="max", pool_stride=2)
self._conv_1 = ConvLayer(64, 64, 1, name="conv2_1x1")
......@@ -210,6 +203,6 @@ class GoogleNet_DY(fluid.dygraph.Layer):
return [out, out1, out2]
def GoogLeNet():
model = GoogleNet_DY()
return model
def GoogLeNet(**args):
model = GoogleNetDY(**args)
return model
\ No newline at end of file
import numpy as np
import argparse
import paddle
import paddle.fluid as fluid
from paddle.fluid.param_attr import ParamAttr
from paddle.fluid.layer_helper import LayerHelper
from paddle.fluid.dygraph.nn import Conv2D, Pool2D, BatchNorm, Linear, Dropout
from paddle.fluid.dygraph.base import to_variable
from paddle.fluid import framework
import math
__all__ = ["InceptionV4"]
class ConvBNLayer(fluid.dygraph.Layer):
def __init__(self,
num_channels,
......@@ -50,9 +43,9 @@ class ConvBNLayer(fluid.dygraph.Layer):
return y
class Inception_Stem(fluid.dygraph.Layer):
class InceptionStem(fluid.dygraph.Layer):
def __init__(self):
super(Inception_Stem, self).__init__()
super(InceptionStem, self).__init__()
self._conv_1 = ConvBNLayer(
3, 32, 3, stride=2, act="relu", name="conv1_3x3_s2")
self._conv_2 = ConvBNLayer(32, 32, 3, act="relu", name="conv2_3x3_s1")
......@@ -380,7 +373,7 @@ class InceptionC(fluid.dygraph.Layer):
class InceptionV4DY(fluid.dygraph.Layer):
def __init__(self, class_dim=1000):
super(InceptionV4DY, self).__init__()
self._inception_stem = Inception_Stem()
self._inception_stem = InceptionStem()
self._inceptionA_1 = InceptionA(name="1")
self._inceptionA_2 = InceptionA(name="2")
......@@ -441,6 +434,6 @@ class InceptionV4DY(fluid.dygraph.Layer):
return x
def InceptionV4():
model = InceptionV4DY()
return model
def InceptionV4(**args):
model = InceptionV4DY(**args)
return model
\ No newline at end of file
import numpy as np
import argparse
import paddle
import paddle.fluid as fluid
from paddle.fluid.param_attr import ParamAttr
from paddle.fluid.layer_helper import LayerHelper
from paddle.fluid.dygraph.nn import Conv2D, Pool2D, BatchNorm, Linear
from paddle.fluid.dygraph.base import to_variable
from paddle.fluid import framework
import math
import sys
import time
__all__ = ["ResNeXt101_32x8d_wsl",
"ResNeXt101_wsl_32x16d_wsl",
......@@ -60,9 +50,9 @@ class ConvBNLayer(fluid.dygraph.Layer):
x = self._bn(x)
return x
class Short_Cut(fluid.dygraph.Layer):
class ShortCut(fluid.dygraph.Layer):
def __init__(self, input_channels, output_channels, stride, name=None):
super(Short_Cut, self).__init__()
super(ShortCut, self).__init__()
self.input_channels = input_channels
self.output_channels = output_channels
......@@ -76,9 +66,9 @@ class Short_Cut(fluid.dygraph.Layer):
return self._conv(inputs)
return inputs
class Bottleneck_Block(fluid.dygraph.Layer):
class BottleneckBlock(fluid.dygraph.Layer):
def __init__(self, input_channels, output_channels, stride, cardinality, width, name):
super(Bottleneck_Block, self).__init__()
super(BottleneckBlock, self).__init__()
self._conv0 = ConvBNLayer(
input_channels, output_channels, filter_size=1, act="relu", name=name + ".conv1")
......@@ -86,7 +76,7 @@ class Bottleneck_Block(fluid.dygraph.Layer):
output_channels, output_channels, filter_size=3, act="relu", stride=stride, groups=cardinality, name=name + ".conv2")
self._conv2 = ConvBNLayer(
output_channels, output_channels//(width//8), filter_size=1, act=None, name=name + ".conv3")
self._short = Short_Cut(
self._short = ShortCut(
input_channels, output_channels//(width//8), stride=stride, name=name + ".downsample")
def forward(self, inputs):
......@@ -117,74 +107,74 @@ class ResNeXt101WSL(fluid.dygraph.Layer):
pool_padding=1,
pool_type="max")
self._conv1_0 = Bottleneck_Block(
self._conv1_0 = BottleneckBlock(
64, num_filters[0], stride=1, cardinality=self.cardinality, width=self.width, name="layer1.0")
self._conv1_1 = Bottleneck_Block(
self._conv1_1 = BottleneckBlock(
num_filters[0]//(width//8), num_filters[0], stride=1, cardinality=self.cardinality, width=self.width, name="layer1.1")
self._conv1_2 = Bottleneck_Block(
self._conv1_2 = BottleneckBlock(
num_filters[0]//(width//8), num_filters[0], stride=1, cardinality=self.cardinality, width=self.width, name="layer1.2")
self._conv2_0 = Bottleneck_Block(
self._conv2_0 = BottleneckBlock(
num_filters[0]//(width//8), num_filters[1], stride=2, cardinality=self.cardinality, width=self.width, name="layer2.0")
self._conv2_1 = Bottleneck_Block(
self._conv2_1 = BottleneckBlock(
num_filters[1]//(width//8), num_filters[1], stride=1, cardinality=self.cardinality, width=self.width, name="layer2.1")
self._conv2_2 = Bottleneck_Block(
self._conv2_2 = BottleneckBlock(
num_filters[1]//(width//8), num_filters[1], stride=1, cardinality=self.cardinality, width=self.width, name="layer2.2")
self._conv2_3 = Bottleneck_Block(
self._conv2_3 = BottleneckBlock(
num_filters[1]//(width//8), num_filters[1], stride=1, cardinality=self.cardinality, width=self.width, name="layer2.3")
self._conv3_0 = Bottleneck_Block(
self._conv3_0 = BottleneckBlock(
num_filters[1]//(width//8), num_filters[2], stride=2, cardinality=self.cardinality, width=self.width, name="layer3.0")
self._conv3_1 = Bottleneck_Block(
self._conv3_1 = BottleneckBlock(
num_filters[2]//(width//8), num_filters[2], stride=1, cardinality=self.cardinality, width=self.width, name="layer3.1")
self._conv3_2 = Bottleneck_Block(
self._conv3_2 = BottleneckBlock(
num_filters[2]//(width//8), num_filters[2], stride=1, cardinality=self.cardinality, width=self.width, name="layer3.2")
self._conv3_3 = Bottleneck_Block(
self._conv3_3 = BottleneckBlock(
num_filters[2]//(width//8), num_filters[2], stride=1, cardinality=self.cardinality, width=self.width, name="layer3.3")
self._conv3_4 = Bottleneck_Block(
self._conv3_4 = BottleneckBlock(
num_filters[2]//(width//8), num_filters[2], stride=1, cardinality=self.cardinality, width=self.width, name="layer3.4")
self._conv3_5 = Bottleneck_Block(
self._conv3_5 = BottleneckBlock(
num_filters[2]//(width//8), num_filters[2], stride=1, cardinality=self.cardinality, width=self.width, name="layer3.5")
self._conv3_6 = Bottleneck_Block(
self._conv3_6 = BottleneckBlock(
num_filters[2]//(width//8), num_filters[2], stride=1, cardinality=self.cardinality, width=self.width, name="layer3.6")
self._conv3_7 = Bottleneck_Block(
self._conv3_7 = BottleneckBlock(
num_filters[2]//(width//8), num_filters[2], stride=1, cardinality=self.cardinality, width=self.width, name="layer3.7")
self._conv3_8 = Bottleneck_Block(
self._conv3_8 = BottleneckBlock(
num_filters[2]//(width//8), num_filters[2], stride=1, cardinality=self.cardinality, width=self.width, name="layer3.8")
self._conv3_9 = Bottleneck_Block(
self._conv3_9 = BottleneckBlock(
num_filters[2]//(width//8), num_filters[2], stride=1, cardinality=self.cardinality, width=self.width, name="layer3.9")
self._conv3_10 = Bottleneck_Block(
self._conv3_10 = BottleneckBlock(
num_filters[2]//(width//8), num_filters[2], stride=1, cardinality=self.cardinality, width=self.width, name="layer3.10")
self._conv3_11 = Bottleneck_Block(
self._conv3_11 = BottleneckBlock(
num_filters[2]//(width//8), num_filters[2], stride=1, cardinality=self.cardinality, width=self.width, name="layer3.11")
self._conv3_12 = Bottleneck_Block(
self._conv3_12 = BottleneckBlock(
num_filters[2]//(width//8), num_filters[2], stride=1, cardinality=self.cardinality, width=self.width, name="layer3.12")
self._conv3_13 = Bottleneck_Block(
self._conv3_13 = BottleneckBlock(
num_filters[2]//(width//8), num_filters[2], stride=1, cardinality=self.cardinality, width=self.width, name="layer3.13")
self._conv3_14 = Bottleneck_Block(
self._conv3_14 = BottleneckBlock(
num_filters[2]//(width//8), num_filters[2], stride=1, cardinality=self.cardinality, width=self.width, name="layer3.14")
self._conv3_15 = Bottleneck_Block(
self._conv3_15 = BottleneckBlock(
num_filters[2]//(width//8), num_filters[2], stride=1, cardinality=self.cardinality, width=self.width, name="layer3.15")
self._conv3_16 = Bottleneck_Block(
self._conv3_16 = BottleneckBlock(
num_filters[2]//(width//8), num_filters[2], stride=1, cardinality=self.cardinality, width=self.width, name="layer3.16")
self._conv3_17 = Bottleneck_Block(
self._conv3_17 = BottleneckBlock(
num_filters[2]//(width//8), num_filters[2], stride=1, cardinality=self.cardinality, width=self.width, name="layer3.17")
self._conv3_18 = Bottleneck_Block(
self._conv3_18 = BottleneckBlock(
num_filters[2]//(width//8), num_filters[2], stride=1, cardinality=self.cardinality, width=self.width, name="layer3.18")
self._conv3_19 = Bottleneck_Block(
self._conv3_19 = BottleneckBlock(
num_filters[2]//(width//8), num_filters[2], stride=1, cardinality=self.cardinality, width=self.width, name="layer3.19")
self._conv3_20 = Bottleneck_Block(
self._conv3_20 = BottleneckBlock(
num_filters[2]//(width//8), num_filters[2], stride=1, cardinality=self.cardinality, width=self.width, name="layer3.20")
self._conv3_21 = Bottleneck_Block(
self._conv3_21 = BottleneckBlock(
num_filters[2]//(width//8), num_filters[2], stride=1, cardinality=self.cardinality, width=self.width, name="layer3.21")
self._conv3_22 = Bottleneck_Block(
self._conv3_22 = BottleneckBlock(
num_filters[2]//(width//8), num_filters[2], stride=1, cardinality=self.cardinality, width=self.width, name="layer3.22")
self._conv4_0 = Bottleneck_Block(
self._conv4_0 = BottleneckBlock(
num_filters[2]//(width//8), num_filters[3], stride=2, cardinality=self.cardinality, width=self.width, name="layer4.0")
self._conv4_1 = Bottleneck_Block(
self._conv4_1 = BottleneckBlock(
num_filters[3]//(width//8), num_filters[3], stride=1, cardinality=self.cardinality, width=self.width, name="layer4.1")
self._conv4_2 = Bottleneck_Block(
self._conv4_2 = BottleneckBlock(
num_filters[3]//(width//8), num_filters[3], stride=1, cardinality=self.cardinality, width=self.width, name="layer4.2")
self._avg_pool = Pool2D(pool_type="avg", global_pooling=True)
......@@ -239,18 +229,18 @@ class ResNeXt101WSL(fluid.dygraph.Layer):
x = self._out(x)
return x
def ResNeXt101_32x8d_wsl():
model = ResNeXt101WSL(cardinality=32, width=8)
def ResNeXt101_32x8d_wsl(**args):
model = ResNeXt101WSL(cardinality=32, width=8, **args)
return model
def ResNeXt101_32x16d_wsl():
model = ResNeXt101WSL(cardinality=32, width=16)
def ResNeXt101_32x16d_wsl(**args):
model = ResNeXt101WSL(cardinality=32, width=16, **args)
return model
def ResNeXt101_32x32d_wsl():
model = ResNeXt101WSL(cardinality=32, width=32)
def ResNeXt101_32x32d_wsl(**args):
model = ResNeXt101WSL(cardinality=32, width=32, **args)
return model
def ResNeXt101_32x48d_wsl():
model = ResNeXt101WSL(cardinality=32, width=48)
def ResNeXt101_32x48d_wsl(**args):
model = ResNeXt101WSL(cardinality=32, width=48, **args)
return model
\ No newline at end of file
import numpy as np
import argparse
import paddle
import paddle.fluid as fluid
from paddle.fluid.param_attr import ParamAttr
from paddle.fluid.layer_helper import LayerHelper
from paddle.fluid.dygraph.nn import Conv2D, Pool2D, BatchNorm, Linear, Dropout
from paddle.fluid.dygraph.base import to_variable
from paddle.fluid import framework
import math
import sys
import time
__all__ = ["SqueezeNet1_0", "SqueezeNet1_1"]
......@@ -152,10 +142,10 @@ class SqueezeNet(fluid.dygraph.Layer):
x = fluid.layers.squeeze(x, axes=[2,3])
return x
def SqueezeNet1_0():
model = SqueezeNet(version="1.0")
def SqueezeNet1_0(**args):
model = SqueezeNet(version="1.0", **args)
return model
def SqueezeNet1_1():
model = SqueezeNet(version="1.1")
def SqueezeNet1_1(**args):
model = SqueezeNet(version="1.1", **args)
return model
\ No newline at end of file
#coding:utf-8
import numpy as np
import argparse
import paddle
import paddle.fluid as fluid
from paddle.fluid.param_attr import ParamAttr
from paddle.fluid.layer_helper import LayerHelper
from paddle.fluid.dygraph.nn import Conv2D, Pool2D, BatchNorm, Linear
from paddle.fluid.dygraph.base import to_variable
from paddle.fluid import framework
import math
import sys
import time
__all__ = ["VGG11", "VGG13", "VGG16", "VGG19"]
class Conv_Block(fluid.dygraph.Layer):
class ConvBlock(fluid.dygraph.Layer):
def __init__(self,
input_channels,
output_channels,
groups,
name=None):
super(Conv_Block, self).__init__()
super(ConvBlock, self).__init__()
self.groups = groups
self._conv_1 = Conv2D(num_channels=input_channels,
......@@ -52,8 +41,8 @@ class Conv_Block(fluid.dygraph.Layer):
param_attr=ParamAttr(name=name + "3_weights"),
bias_attr=False)
if groups == 4:
self._conv_4 = Conv2D(number_channels=output_channels,
number_filters=output_channels,
self._conv_4 = Conv2D(num_channels=output_channels,
num_filters=output_channels,
filter_size=3,
stride=1,
padding=1,
......@@ -88,13 +77,13 @@ class VGGNet(fluid.dygraph.Layer):
"supported layers are {} but input layer is {}".format(vgg_configure.keys(), layers)
self.groups = self.vgg_configure[self.layers]
self._conv_block_1 = Conv_Block(3, 64, self.groups[0], name="conv1_")
self._conv_block_2 = Conv_Block(64, 128, self.groups[1], name="conv2_")
self._conv_block_3 = Conv_Block(128, 256, self.groups[2], name="conv3_")
self._conv_block_4 = Conv_Block(256, 512, self.groups[3], name="conv4_")
self._conv_block_5 = Conv_Block(512, 512, self.groups[4], name="conv5_")
self._conv_block_1 = ConvBlock(3, 64, self.groups[0], name="conv1_")
self._conv_block_2 = ConvBlock(64, 128, self.groups[1], name="conv2_")
self._conv_block_3 = ConvBlock(128, 256, self.groups[2], name="conv3_")
self._conv_block_4 = ConvBlock(256, 512, self.groups[3], name="conv4_")
self._conv_block_5 = ConvBlock(512, 512, self.groups[4], name="conv5_")
#self._drop = fluid.dygraph.nn.Dropout(p=0.5)
self._drop = fluid.dygraph.Dropout(p=0.5)
self._fc1 = Linear(input_dim=7*7*512,
output_dim=4096,
act="relu",
......@@ -119,24 +108,24 @@ class VGGNet(fluid.dygraph.Layer):
x = fluid.layers.flatten(x, axis=0)
x = self._fc1(x)
# x = self._drop(x)
x = self._drop(x)
x = self._fc2(x)
# x = self._drop(x)
x = self._drop(x)
x = self._out(x)
return x
def VGG11():
model = VGGNet(layers=11)
def VGG11(**args):
model = VGGNet(layers=11, **args)
return model
def VGG13():
model = VGGNet(layers=13)
def VGG13(**args):
model = VGGNet(layers=13, **args)
return model
def VGG16():
model = VGGNet(layers=16)
def VGG16(**args):
model = VGGNet(layers=16, **args)
return model
def VGG19():
model = VGGNet(layers=19)
def VGG19(**args):
model = VGGNet(layers=19, **args)
return model
\ No newline at end of file
import numpy as np
import argparse
import paddle
import paddle.fluid as fluid
from paddle.fluid.param_attr import ParamAttr
from paddle.fluid.layer_helper import LayerHelper
from paddle.fluid.dygraph.nn import Conv2D, Pool2D, BatchNorm, Linear
from paddle.fluid.dygraph.base import to_variable
from paddle.fluid import framework
import math
import sys
import time
__all__ = ['Xception41', 'Xception65', 'Xception71']
......@@ -52,9 +44,9 @@ class ConvBNLayer(fluid.dygraph.Layer):
return y
class Separable_Conv(fluid.dygraph.Layer):
class SeparableConv(fluid.dygraph.Layer):
def __init__(self, input_channels, output_channels, stride=1, name=None):
super(Separable_Conv, self).__init__()
super(SeparableConv, self).__init__()
self._pointwise_conv = ConvBNLayer(
input_channels, output_channels, 1, name=name + "_sep")
......@@ -72,14 +64,14 @@ class Separable_Conv(fluid.dygraph.Layer):
return x
class Entry_Flow_Bottleneck_Block(fluid.dygraph.Layer):
class EntryFlowBottleneckBlock(fluid.dygraph.Layer):
def __init__(self,
input_channels,
output_channels,
stride=2,
name=None,
relu_first=False):
super(Entry_Flow_Bottleneck_Block, self).__init__()
super(EntryFlowBottleneckBlock, self).__init__()
self.relu_first = relu_first
self._short = Conv2D(
......@@ -91,12 +83,12 @@ class Entry_Flow_Bottleneck_Block(fluid.dygraph.Layer):
act=None,
param_attr=ParamAttr(name + "_branch1_weights"),
bias_attr=False)
self._conv1 = Separable_Conv(
self._conv1 = SeparableConv(
input_channels,
output_channels,
stride=1,
name=name + "_branch2a_weights")
self._conv2 = Separable_Conv(
self._conv2 = SeparableConv(
output_channels,
output_channels,
stride=1,
......@@ -117,9 +109,9 @@ class Entry_Flow_Bottleneck_Block(fluid.dygraph.Layer):
return fluid.layers.elementwise_add(x=short, y=pool)
class Entry_Flow(fluid.dygraph.Layer):
class EntryFlow(fluid.dygraph.Layer):
def __init__(self, block_num=3):
super(Entry_Flow, self).__init__()
super(EntryFlow, self).__init__()
name = "entry_flow"
self.block_num = block_num
......@@ -127,22 +119,22 @@ class Entry_Flow(fluid.dygraph.Layer):
3, 32, 3, stride=2, act="relu", name=name + "_conv1")
self._conv2 = ConvBNLayer(32, 64, 3, act="relu", name=name + "_conv2")
if block_num == 3:
self._conv_0 = Entry_Flow_Bottleneck_Block(
self._conv_0 = EntryFlowBottleneckBlock(
64, 128, stride=2, name=name + "_0", relu_first=False)
self._conv_1 = Entry_Flow_Bottleneck_Block(
self._conv_1 = EntryFlowBottleneckBlock(
128, 256, stride=2, name=name + "_1", relu_first=True)
self._conv_2 = Entry_Flow_Bottleneck_Block(
self._conv_2 = EntryFlowBottleneckBlock(
256, 728, stride=2, name=name + "_2", relu_first=True)
elif block_num == 5:
self._conv_0 = Entry_Flow_Bottleneck_Block(
self._conv_0 = EntryFlowBottleneckBlock(
64, 128, stride=2, name=name + "_0", relu_first=False)
self._conv_1 = Entry_Flow_Bottleneck_Block(
self._conv_1 = EntryFlowBottleneckBlock(
128, 256, stride=1, name=name + "_1", relu_first=True)
self._conv_2 = Entry_Flow_Bottleneck_Block(
self._conv_2 = EntryFlowBottleneckBlock(
256, 256, stride=2, name=name + "_2", relu_first=True)
self._conv_3 = Entry_Flow_Bottleneck_Block(
self._conv_3 = EntryFlowBottleneckBlock(
256, 728, stride=1, name=name + "_3", relu_first=True)
self._conv_4 = Entry_Flow_Bottleneck_Block(
self._conv_4 = EntryFlowBottleneckBlock(
728, 728, stride=2, name=name + "_4", relu_first=True)
else:
sys.exit(-1)
......@@ -164,21 +156,21 @@ class Entry_Flow(fluid.dygraph.Layer):
return x
class Middle_Flow_Bottleneck_Block(fluid.dygraph.Layer):
class MiddleFlowBottleneckBlock(fluid.dygraph.Layer):
def __init__(self, input_channels, output_channels, name):
super(Middle_Flow_Bottleneck_Block, self).__init__()
super(MiddleFlowBottleneckBlock, self).__init__()
self._conv_0 = Separable_Conv(
self._conv_0 = SeparableConv(
input_channels,
output_channels,
stride=1,
name=name + "_branch2a_weights")
self._conv_1 = Separable_Conv(
self._conv_1 = SeparableConv(
output_channels,
output_channels,
stride=1,
name=name + "_branch2b_weights")
self._conv_2 = Separable_Conv(
self._conv_2 = SeparableConv(
output_channels,
output_channels,
stride=1,
......@@ -195,43 +187,43 @@ class Middle_Flow_Bottleneck_Block(fluid.dygraph.Layer):
return fluid.layers.elementwise_add(x=inputs, y=conv2)
class Middle_Flow(fluid.dygraph.Layer):
class MiddleFlow(fluid.dygraph.Layer):
def __init__(self, block_num=8):
super(Middle_Flow, self).__init__()
super(MiddleFlow, self).__init__()
self.block_num = block_num
self._conv_0 = Middle_Flow_Bottleneck_Block(
self._conv_0 = MiddleFlowBottleneckBlock(
728, 728, name="middle_flow_0")
self._conv_1 = Middle_Flow_Bottleneck_Block(
self._conv_1 = MiddleFlowBottleneckBlock(
728, 728, name="middle_flow_1")
self._conv_2 = Middle_Flow_Bottleneck_Block(
self._conv_2 = MiddleFlowBottleneckBlock(
728, 728, name="middle_flow_2")
self._conv_3 = Middle_Flow_Bottleneck_Block(
self._conv_3 = MiddleFlowBottleneckBlock(
728, 728, name="middle_flow_3")
self._conv_4 = Middle_Flow_Bottleneck_Block(
self._conv_4 = MiddleFlowBottleneckBlock(
728, 728, name="middle_flow_4")
self._conv_5 = Middle_Flow_Bottleneck_Block(
self._conv_5 = MiddleFlowBottleneckBlock(
728, 728, name="middle_flow_5")
self._conv_6 = Middle_Flow_Bottleneck_Block(
self._conv_6 = MiddleFlowBottleneckBlock(
728, 728, name="middle_flow_6")
self._conv_7 = Middle_Flow_Bottleneck_Block(
self._conv_7 = MiddleFlowBottleneckBlock(
728, 728, name="middle_flow_7")
if block_num == 16:
self._conv_8 = Middle_Flow_Bottleneck_Block(
self._conv_8 = MiddleFlowBottleneckBlock(
728, 728, name="middle_flow_8")
self._conv_9 = Middle_Flow_Bottleneck_Block(
self._conv_9 = MiddleFlowBottleneckBlock(
728, 728, name="middle_flow_9")
self._conv_10 = Middle_Flow_Bottleneck_Block(
self._conv_10 = MiddleFlowBottleneckBlock(
728, 728, name="middle_flow_10")
self._conv_11 = Middle_Flow_Bottleneck_Block(
self._conv_11 = MiddleFlowBottleneckBlock(
728, 728, name="middle_flow_11")
self._conv_12 = Middle_Flow_Bottleneck_Block(
self._conv_12 = MiddleFlowBottleneckBlock(
728, 728, name="middle_flow_12")
self._conv_13 = Middle_Flow_Bottleneck_Block(
self._conv_13 = MiddleFlowBottleneckBlock(
728, 728, name="middle_flow_13")
self._conv_14 = Middle_Flow_Bottleneck_Block(
self._conv_14 = MiddleFlowBottleneckBlock(
728, 728, name="middle_flow_14")
self._conv_15 = Middle_Flow_Bottleneck_Block(
self._conv_15 = MiddleFlowBottleneckBlock(
728, 728, name="middle_flow_15")
def forward(self, inputs):
......@@ -255,10 +247,10 @@ class Middle_Flow(fluid.dygraph.Layer):
return x
class Exit_Flow_Bottleneck_Block(fluid.dygraph.Layer):
class ExitFlowBottleneckBlock(fluid.dygraph.Layer):
def __init__(self, input_channels, output_channels1, output_channels2,
name):
super(Exit_Flow_Bottleneck_Block, self).__init__()
super(ExitFlowBottleneckBlock, self).__init__()
self._short = Conv2D(
num_channels=input_channels,
......@@ -269,12 +261,12 @@ class Exit_Flow_Bottleneck_Block(fluid.dygraph.Layer):
act=None,
param_attr=ParamAttr(name + "_branch1_weights"),
bias_attr=False)
self._conv_1 = Separable_Conv(
self._conv_1 = SeparableConv(
input_channels,
output_channels1,
stride=1,
name=name + "_branch2a_weights")
self._conv_2 = Separable_Conv(
self._conv_2 = SeparableConv(
output_channels1,
output_channels2,
stride=1,
......@@ -293,16 +285,16 @@ class Exit_Flow_Bottleneck_Block(fluid.dygraph.Layer):
return fluid.layers.elementwise_add(x=short, y=pool)
class Exit_Flow(fluid.dygraph.Layer):
class ExitFlow(fluid.dygraph.Layer):
def __init__(self, class_dim):
super(Exit_Flow, self).__init__()
super(ExitFlow, self).__init__()
name = "exit_flow"
self._conv_0 = Exit_Flow_Bottleneck_Block(
self._conv_0 = ExitFlowBottleneckBlock(
728, 728, 1024, name=name + "_1")
self._conv_1 = Separable_Conv(1024, 1536, stride=1, name=name + "_2")
self._conv_2 = Separable_Conv(1536, 2048, stride=1, name=name + "_3")
self._conv_1 = SeparableConv(1024, 1536, stride=1, name=name + "_2")
self._conv_2 = SeparableConv(1536, 2048, stride=1, name=name + "_3")
self._pool = Pool2D(pool_type="avg", global_pooling=True)
stdv = 1.0 / math.sqrt(2048 * 1.0)
self._out = Linear(
......@@ -334,9 +326,9 @@ class Xception(fluid.dygraph.Layer):
super(Xception, self).__init__()
self.entry_flow_block_num = entry_flow_block_num
self.middle_flow_block_num = middle_flow_block_num
self._entry_flow = Entry_Flow(entry_flow_block_num)
self._middle_flow = Middle_Flow(middle_flow_block_num)
self._exit_flow = Exit_Flow(class_dim)
self._entry_flow = EntryFlow(entry_flow_block_num)
self._middle_flow = MiddleFlow(middle_flow_block_num)
self._exit_flow = ExitFlow(class_dim)
def forward(self, inputs):
x = self._entry_flow(inputs)
......@@ -345,16 +337,16 @@ class Xception(fluid.dygraph.Layer):
return x
def Xception41():
model = Xception(entry_flow_block_num=3, middle_flow_block_num=8)
def Xception41(**args):
model = Xception(entry_flow_block_num=3, middle_flow_block_num=8, **args)
return model
def Xception65():
model = Xception(entry_flow_block_num=3, middle_flow_block_num=16)
def Xception65(**args):
model = Xception(entry_flow_block_num=3, middle_flow_block_num=16, **args)
return model
def Xception71():
model = Xception(entry_flow_block_num=5, middle_flow_block_num=16)
return model
def Xception71(**args):
model = Xception(entry_flow_block_num=5, middle_flow_block_num=16, **args)
return model
\ No newline at end of file
import numpy as np
import argparse
import paddle
import paddle.fluid as fluid
from paddle.fluid.param_attr import ParamAttr
from paddle.fluid.layer_helper import LayerHelper
from paddle.fluid.dygraph.nn import Conv2D, Pool2D, BatchNorm, Linear, Dropout
from paddle.fluid.dygraph.base import to_variable
from paddle.fluid import framework
import math
import sys
import time
__all__ = ["Xception41_deeplab", "Xception65_deeplab", "Xception71_deeplab"]
......@@ -256,9 +247,9 @@ class Xception_Block(fluid.dygraph.Layer):
return fluid.layers.elementwise_add(x, skip)
class Xception_deeplab(fluid.dygraph.Layer):
class XceptionDeeplab(fluid.dygraph.Layer):
def __init__(self, backbone, class_dim=1000):
super(Xception_deeplab, self).__init__()
super(XceptionDeeplab, self).__init__()
bottleneck_params = gen_bottleneck_params(backbone)
self.backbone = backbone
......@@ -379,16 +370,16 @@ class Xception_deeplab(fluid.dygraph.Layer):
return x
def Xception41_deeplab():
model = Xception_deeplab('xception_41')
def Xception41_deeplab(**args):
model = XceptionDeeplab('xception_41', **args)
return model
def Xception65_deeplab():
model = Xception_deeplab("xception_65")
def Xception65_deeplab(**args):
model = XceptionDeeplab("xception_65", **args)
return model
def Xception71_deeplab():
model = Xception_deeplab("xception_71")
return model
def Xception71_deeplab(**args):
model = XceptionDeeplab("xception_71", **args)
return model
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册