diff --git a/ppcls/modeling/architectures/res2net_vd.py b/ppcls/modeling/architectures/res2net_vd.py index 21c4397d98c26bc2100b6e07605df2184120c6f8..694edd877b7f352ed277c158d3daf89d7ac53ea0 100644 --- a/ppcls/modeling/architectures/res2net_vd.py +++ b/ppcls/modeling/architectures/res2net_vd.py @@ -18,9 +18,12 @@ from __future__ import print_function import numpy as np import paddle -import paddle.fluid as fluid -from paddle.fluid.param_attr import ParamAttr -from paddle.fluid.dygraph.nn import Conv2D, Pool2D, BatchNorm, Linear, Dropout +from paddle import ParamAttr +import paddle.nn as nn +import paddle.nn.functional as F +from paddle.nn import Conv2d, BatchNorm, Linear, Dropout +from paddle.nn import AdaptiveAvgPool2d, MaxPool2d, AvgPool2d +from paddle.nn.initializer import Uniform import math @@ -31,7 +34,7 @@ __all__ = [ ] -class ConvBNLayer(fluid.dygraph.Layer): +class ConvBNLayer(nn.Layer): def __init__( self, num_channels, @@ -45,21 +48,17 @@ class ConvBNLayer(fluid.dygraph.Layer): super(ConvBNLayer, self).__init__() self.is_vd_mode = is_vd_mode - self._pool2d_avg = Pool2D( - pool_size=2, - pool_stride=2, - pool_padding=0, - pool_type='avg', - ceil_mode=True) - self._conv = Conv2D( - num_channels=num_channels, - num_filters=num_filters, - filter_size=filter_size, + self._pool2d_avg = AvgPool2d( + kernel_size=2, stride=2, padding=0, ceil_mode=True) + self._conv = Conv2d( + in_channels=num_channels, + out_channels=num_filters, + kernel_size=filter_size, stride=stride, padding=(filter_size - 1) // 2, groups=groups, act=None, - param_attr=ParamAttr(name=name + "_weights"), + weight_attr=ParamAttr(name=name + "_weights"), bias_attr=False) if name == "conv1": bn_name = "bn_" + name @@ -81,7 +80,7 @@ class ConvBNLayer(fluid.dygraph.Layer): return y -class BottleneckBlock(fluid.dygraph.Layer): +class BottleneckBlock(nn.Layer): def __init__(self, num_channels1, num_channels2, @@ -112,8 +111,8 @@ class BottleneckBlock(fluid.dygraph.Layer): act='relu', name=name + '_branch2b_' + str(s + 1))) self.conv1_list.append(conv1) - self.pool2d_avg = Pool2D( - pool_size=3, pool_stride=stride, pool_padding=1, pool_type='avg') + self.pool2d_avg = AvgPool2d( + kernel_size=3, stride=stride, padding=1, ceil_mode=True) self.conv2 = ConvBNLayer( num_channels=num_filters, @@ -135,7 +134,7 @@ class BottleneckBlock(fluid.dygraph.Layer): def forward(self, inputs): y = self.conv0(inputs) - xs = fluid.layers.split(y, self.scales, 1) + xs = paddle.split(y, self.scales, 1) ys = [] for s, conv1 in enumerate(self.conv1_list): if s == 0 or self.stride == 2: @@ -146,18 +145,18 @@ class BottleneckBlock(fluid.dygraph.Layer): ys.append(xs[-1]) else: ys.append(self.pool2d_avg(xs[-1])) - conv1 = fluid.layers.concat(ys, axis=1) + conv1 = paddle.concat(ys, axis=1) conv2 = self.conv2(conv1) if self.shortcut: short = inputs else: short = self.short(inputs) - y = fluid.layers.elementwise_add(x=short, y=conv2, act='relu') + y = paddle.elementwise_add(x=short, y=conv2, act='relu') return y -class Res2Net_vd(fluid.dygraph.Layer): +class Res2Net_vd(nn.Layer): def __init__(self, layers=50, scales=4, width=26, class_dim=1000): super(Res2Net_vd, self).__init__() @@ -203,8 +202,8 @@ class Res2Net_vd(fluid.dygraph.Layer): stride=1, act='relu', name="conv1_3") - self.pool2d_max = Pool2D( - pool_size=3, pool_stride=2, pool_padding=1, pool_type='max') + self.pool2d_max = MaxPool2d( + kernel_size=3, stride=2, padding=1, ceil_mode=True) self.block_list = [] for block in range(len(depth)): @@ -232,8 +231,7 @@ class Res2Net_vd(fluid.dygraph.Layer): self.block_list.append(bottleneck_block) shortcut = True - self.pool2d_avg = Pool2D( - pool_size=7, pool_type='avg', global_pooling=True) + self.pool2d_avg = AdaptiveAvgPool2d(1) self.pool2d_avg_channels = num_channels[-1] * 2 @@ -242,9 +240,8 @@ class Res2Net_vd(fluid.dygraph.Layer): self.out = Linear( self.pool2d_avg_channels, class_dim, - param_attr=ParamAttr( - initializer=fluid.initializer.Uniform(-stdv, stdv), - name="fc_weights"), + weight_attr=ParamAttr( + initializer=Uniform(-stdv, stdv), name="fc_weights"), bias_attr=ParamAttr(name="fc_offset")) def forward(self, inputs): @@ -255,7 +252,7 @@ class Res2Net_vd(fluid.dygraph.Layer): for block in self.block_list: y = block(y) y = self.pool2d_avg(y) - y = fluid.layers.reshape(y, shape=[-1, self.pool2d_avg_channels]) + y = paddle.reshape(y, shape=[-1, self.pool2d_avg_channels]) y = self.out(y) return y