fix format
parent
f85ced3627
commit
a4ee2f2cdf
|
@ -1,360 +1,103 @@
|
|||
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']
|
||||
__all__ = ["AlexNet"]
|
||||
|
||||
|
||||
class ConvBNLayer(fluid.dygraph.Layer):
|
||||
class ConvPoolLayer(fluid.dygraph.Layer):
|
||||
def __init__(self,
|
||||
num_channels,
|
||||
num_filters,
|
||||
filter_size,
|
||||
stride=1,
|
||||
groups=1,
|
||||
act=None,
|
||||
name=None):
|
||||
super(ConvBNLayer, self).__init__()
|
||||
inputc_channels,
|
||||
output_channels,
|
||||
filter_size,
|
||||
stride,
|
||||
padding,
|
||||
stdv,
|
||||
groups=1,
|
||||
act=None,
|
||||
name=None):
|
||||
super(ConvPoolLayer, 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')
|
||||
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
|
||||
class AlexNetDY(fluid.dygraph.Layer):
|
||||
def __init__(self, class_dim=1000):
|
||||
super(AlexNetDY, self).__init__()
|
||||
|
||||
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")
|
||||
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)
|
||||
|
||||
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)
|
||||
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")
|
||||
|
||||
|
||||
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)
|
||||
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
|
||||
|
|
|
@ -1,14 +1,7 @@
|
|||
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)
|
||||
|
||||
|
|
|
@ -1,15 +1,8 @@
|
|||
# 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)
|
||||
use_se=use_se,
|
||||
**args)
|
||||
return model
|
||||
|
||||
|
|
@ -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()
|
||||
def GoogLeNet(**args):
|
||||
model = GoogleNetDY(**args)
|
||||
return model
|
|
@ -1,18 +1,11 @@
|
|||
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()
|
||||
def InceptionV4(**args):
|
||||
model = InceptionV4DY(**args)
|
||||
return model
|
|
@ -1,17 +1,7 @@
|
|||
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
|
|
@ -1,17 +1,7 @@
|
|||
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
|
|
@ -1,28 +1,17 @@
|
|||
#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
|
|
@ -1,17 +1,9 @@
|
|||
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)
|
||||
def Xception71(**args):
|
||||
model = Xception(entry_flow_block_num=5, middle_flow_block_num=16, **args)
|
||||
return model
|
|
@ -1,17 +1,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 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")
|
||||
def Xception71_deeplab(**args):
|
||||
model = XceptionDeeplab("xception_71", **args)
|
||||
return model
|
Loading…
Reference in New Issue