Res2Net 算法的介绍
博客:使用pytorch搭建自己的網(wǎng)絡之Res2Net_綠柳山莊趙公子的博客-CSDN博客
官方:Res2Net — PaddleEdu documentation
1. 模型介紹?
2020年,南開大學程明明組提出了一種面向目標檢測任務的新模塊Res2Net。并且其論文已被TPAMI2020錄用。Res2Net和ResNeXt一樣,是ResNet的變體形式,只不過Res2Net不止提高了分類任務的準確率,還提高了檢測任務的精度。Res2Net的新模塊可以和現(xiàn)有其他優(yōu)秀模塊輕松整合,在不增加計算負載量的情況下,在ImageNet、CIFAR-100等數(shù)據(jù)集上的測試性能超過了ResNet。因為模型的殘差塊里又有殘差連接,所以取名為Res2Net。
2. 模型結構?
模型結構看起來很簡單,將輸入的特征x,split為k個特征,第i+1(i = 0, 1, 2,…,k-1) 個特征經(jīng)過3×3卷積后以殘差連接的方式融合到第 i+2 個特征中。這就是Res2Net的主要結構。那么這樣做的目的是為什么呢?能夠有什么好處呢? 答案就是多尺度卷積。多尺度特征在檢測任務中一直是很重要的,自從空洞卷積提出以來,基于空洞卷積搭建的多尺度金字塔模型在檢測任務上取得里程碑式的效果。不同感受野下獲取的物體的信息是不同的,小的感受野可能會看到更多的物體細節(jié),對于檢測小目標也有很大的好處,而大的感受野可以感受物體的整體結構,方便網(wǎng)絡定位物體的位置,細節(jié)與位置的結合可以更好地得到具有清晰邊界的物體信息,因此,結合了多尺度金字塔的模型往往能獲得很好地效果。在Res2Net中,特征k2經(jīng)過3×3卷積后被送入x3所在的處理流中,k2再次被3×3的卷積優(yōu)化信息,兩個3×3的卷積相當于一個5×5的卷積。那么,k3就想當然與融合了3×3的感受野和5×5的感受野處理后的特征。以此類推,7×7的感受野被應用在k4中。就這樣,Res2Net提取多尺度特征用于檢測任務,以提高模型的準確率。在這篇論文中,s是比例尺寸的控制參數(shù),也就是可以將輸入通道數(shù)平均等分為多個特征通道。s越大表明多尺度能力越強,此外一些額外的計算開銷也可以忽略。
3. 模型實現(xiàn)?
Res2Net與ResNet的模型結構一致,主要差別在于block的搭建,因此這里用paddle框架來實現(xiàn)block的代碼
class ConvBNLayer(nn.Layer):def __init__(self,num_channels,num_filters,filter_size,stride=1,groups=1,is_vd_mode=False,act=None,name=None, ):super(ConvBNLayer, self).__init__()self.is_vd_mode = is_vd_modeself._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,weight_attr=ParamAttr(name=name + "_weights"),bias_attr=False)if name == "conv1":bn_name = "bn_" + nameelse:bn_name = "bn" + name[3:]self._batch_norm = BatchNorm(num_filters,act=act,param_attr=ParamAttr(name=bn_name + '_scale'),bias_attr=ParamAttr(bn_name + '_offset'),moving_mean_name=bn_name + '_mean',moving_variance_name=bn_name + '_variance')def forward(self, inputs):if self.is_vd_mode:inputs = self._pool2d_avg(inputs)y = self._conv(inputs)y = self._batch_norm(y)return yclass BottleneckBlock(nn.Layer):def __init__(self,num_channels1,num_channels2,num_filters,stride,scales,shortcut=True,if_first=False,name=None):super(BottleneckBlock, self).__init__()self.stride = strideself.scales = scalesself.conv0 = ConvBNLayer(num_channels=num_channels1,num_filters=num_filters,filter_size=1,act='relu',name=name + "_branch2a")self.conv1_list = []for s in range(scales - 1):conv1 = self.add_sublayer(name + '_branch2b_' + str(s + 1),ConvBNLayer(num_channels=num_filters // scales,num_filters=num_filters // scales,filter_size=3,stride=stride,act='relu',name=name + '_branch2b_' + str(s + 1)))self.conv1_list.append(conv1)self.pool2d_avg = AvgPool2D(kernel_size=3, stride=stride, padding=1)self.conv2 = ConvBNLayer(num_channels=num_filters,num_filters=num_channels2,filter_size=1,act=None,name=name + "_branch2c")if not shortcut:self.short = ConvBNLayer(num_channels=num_channels1,num_filters=num_channels2,filter_size=1,stride=1,is_vd_mode=False if if_first else True,name=name + "_branch1")self.shortcut = shortcutdef forward(self, inputs):y = self.conv0(inputs)xs = paddle.split(y, self.scales, 1)ys = []for s, conv1 in enumerate(self.conv1_list):if s == 0 or self.stride == 2:ys.append(conv1(xs[s]))else:ys.append(conv1(xs[s] + ys[-1]))if self.stride == 1:ys.append(xs[-1])else:ys.append(self.pool2d_avg(xs[-1]))conv1 = paddle.concat(ys, axis=1)conv2 = self.conv2(conv1)if self.shortcut:short = inputselse:short = self.short(inputs)y = paddle.add(x=short, y=conv2)y = F.relu(y)return y4. 模型特點?
可與其他結構整合,如SENEt, ResNeXt, DLA等,從而增加準確率。
計算負載不增加,特征提取能力更強大。
5. 模型指標?
ImageNet分類效果如下圖
Res2Net-50就是對標ResNet50的版本。
Res2Net-50-299指的是將輸入圖片裁剪到299×299進行預測的Res2Net-50,因為一般都是裁剪或者resize到224×224。
Res2NeXt-50為融合了ResNeXt的Res2Net-50。
Res2Net-DLA-60指的是融合了DLA-60的Res2Net-50。
Res2NeXt-DLA-60為融合了ResNeXt和DLA-60的Res2Net-50。
SE-Res2Net-50 為融合了SENet的Res2Net-50。
blRes2Net-50為融合了Big-Little Net的Res2Net-50。
Res2Net-v1b-50為采取和ResNet-vd-50一樣的處理方法的Res2Net-50。
Res2Net-200-SSLD為Paddle使用簡單的半監(jiān)督標簽知識蒸餾(SSLD,Simple Semi-supervised Label Distillation)的方法來提升模型效果得到的。具體詳情可以見半監(jiān)督知識蒸餾
可見,Res2Net都取得了十分不錯的成績。
COCO數(shù)據(jù)集效果如下圖
Res2Net-50的各種配置都比ResNet-50高。
顯著目標檢測數(shù)據(jù)集指標效果如下圖
ECSSD、PASCAL-S、DUT-OMRON、HKU-IS都是顯著目標檢測任務中現(xiàn)在最為常用的測試集,顯著目標檢測任務的目的就是分割出圖片中的顯著物體,并用白色像素點表示,其他背景用黑色像素點表示。從圖中可以看出來,使用Res2Net作為骨干網(wǎng)絡,效果比ResNet有了很大的提升
總結
以上是生活随笔為你收集整理的Res2Net 算法的介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java按回车键继续代码
- 下一篇: mac 查看本地php 版本,Mac系统