提交 a4ee2f2c 编写于 作者: W wqz960

fix format

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