Backbone之ResNeXt介绍

Res2Net

论文地址:https://arxiv.org/pdf/1512.03385.pdf

resnext在各大检测/分割任务中可以说是常客了,Faster Rcnn/cascade rcnn+xt101+FPN+DCN这一整套可以说是检测分割任务做baseline最好的选择之一了,基本上都不会让人失望,作为特征提取网络的核心,backbone的性能直接决定了检测或者分割网络的精度,下面就是对resnext的介绍:

早在AlexNet时代,为了解决显存不够大的问题,提出了分组卷积的概念,通过相同网络拓扑结构进行一个堆叠来控制参数,resnext更简单直接,对原来resnet的1x1->3x3->1x1结构动刀,减少了单一分支3x3卷积核个数,同时采用多通道的形式将3x3卷积变的更加细粒度,如下图所示

Backbone之ResNeXt介绍

这张图可以说就是整个resnext的核心思想,相比resnet增加了一个新参数cardinality,其实就是分组的个数

对于Inception结构,虽然也是多路卷积,但是人工的构造太深了,Inception的本质其实也是split-transform-merge,输入通过split将channel分成多路,每一路做卷积特征转换,最后融合所有结果,

Backbone之ResNeXt介绍

如上图所示,Inception过于复杂,同时人工设计的痕迹太重,其实split-transform-merge模式在fc层就得到了应用

Backbone之ResNeXt介绍

对输入的x1,x2等元素,一对一进行权重加权计算,然后merge求和,最后经过**层。

所以一个神经网络的通用单元其实就可以如以下所示:

Backbone之ResNeXt介绍

上面的C其实就是resnext的超参cardinality

考虑到ResNet的残差映射,改写上面公式:

Backbone之ResNeXt介绍

在pytroch中,普通的卷积api Conv2d其实就已经把组卷积放进去了:
torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True)

当groups=1时就是

普通卷积,当groups不等于1时就是对输入channel进行分组,这个时候输出的维度out_channel就必须是in_channel 的整数倍

Backbone之ResNeXt介绍
Backbone之ResNeXt介绍
两种网络结构对比,可以很明显的看出来resnext的参数基本上没有增加,可以说相比resnet有一个硬提升。