PaddlePaddle复现ResNeXt,如何应用于识别?

摘要:import paddle.nn as nn import paddle class BN_Conv2D(nn.Layer): """ BN_CONV_RELU
import paddle.nn as nn import paddle class BN_Conv2D(nn.Layer): """ BN_CONV_RELU """ def __init__(self, in_channels, out_channels, kernel_size, stride, padding, dilation=1, groups=1, bias=False): super(BN_Conv2D, self).__init__() self.seq = nn.Sequential( nn.Conv2D(in_channels, out_channels, kernel_size=kernel_size, stride=stride, padding=padding, dilation=dilation, groups=groups, bias_attr=bias), nn.BatchNorm2D(out_channels) ) def forward(self, x): return F.relu(self.seq(x)) class ResNeXt_Block(nn.Layer): """ ResNeXt block with group convolutions """ def __init__(self, in_chnls, cardinality, group_depth, stride): super(ResNeXt_Block, self).__init__() self.group_chnls = cardinality * group_depth self.conv1 = BN_Conv2D(in_chnls, self.group_chnls, 1, stride=1, padding=0) self.conv2 = BN_Conv2D(self.group_chnls, self.group_chnls, 3, stride=stride, padding=1, groups=cardinality) self.conv3 = nn.Conv2D(self.group_chnls, self.group_chnls*2, 1, stride=1, padding=0) self.bn = nn.BatchNorm2D(self.group_chnls*2) self.short_cut = nn.Sequential( nn.Conv2D(in_chnls, self.group_chnls*2, 1, stride, 0, bias_attr=False), nn.BatchNorm2D(self.group_chnls*2) ) def forward(self, x): out = self.conv1(x) out = self.conv2(out) out = self.bn(self.conv3(out)) out += self.short_cut(x) return F.relu(out) class ResNeXt(nn.Layer): """ ResNeXt builder """ def __init__(self, layers: object, cardinality, group_depth, num_classes) -> object: super(ResNeXt, self).__init__() self.cardinality = cardinality self.channels = 64 self.conv1 = BN_Conv2D(3, self.channels, 7, stride=2, padding=3) d1 = group_depth self.conv2 = self.___make_layers(d1, layers[0], stride=1) d2 = d1 * 2
阅读全文