在imagenet2012图像分类challenge上赢得了冠军。
论文:论文
详细解析
论文
VGG是在ILSVRC 2014上的相关工作,主要工作是证明了增加网络的深度能够在一定程度上影响网络最终的性能。VGG有两种结构,分别是VGG16和VGG19,两者并没有本质上的区别,只是网络深度不一样.
指出对于给定的感受野,采用堆积的小卷积核是优于采用大的卷积核,因为多层非线性层可以增加网络深度来保证学习更复杂的模式,而且代价还比较小(参数更少)。
两个33卷积堆叠的感受野等价于一个55卷积的感受野,三个33卷积堆叠的感受野等价于一个77卷积的感受野
vgg结构简单,整个网络采用连续的33卷积堆叠和22最大池化层。但vgg有三个全连接层,耗费更多计算资源。
论文
参考、摘自:https://zhuanlan.zhihu.com/p/32702031
inception(也称GoogLeNet)是2014年Christian Szegedy提出的一种全新的深度学习结构,在这之前的AlexNet、VGG等结构都是通过增大网络的深度(层数)来获得更好的训练效果,但层数的增加会带来很多负作用,比如过拟合、梯度消失、梯度爆炸等。inception的提出则从另一种角度来提升训练结果:能更高效的利用计算资源,在相同的计算量下能提取到更多的特征,从而提升训练结果。
整个inception结构就是由多个这样的inception模块串联起来的。inception结构的主要贡献有两个:一是使用1x1的卷积来进行升降维;二是在多个尺寸上同时进行卷积再聚合。
11卷积的作用:1)在相同尺寸的感受野中叠加更多的卷积,能提取到更丰富的特征.11的卷积会重组前一层的通道并再经过一次非线性激活,能提取更强的非线性特征
2)使用1*1卷积可进行通道降维,降低计算复杂度。
在多个尺度上分别进行卷积再聚合:1)在多个尺度上同时进行卷积,能提取不同尺度的特征。
随着网络的深度加大,有效的梯度回传能力变弱。因此在网络的中间阶段添加辅助分类器,可以期望在分类器的较低阶段鼓励区分,增加传播回来的梯度信号,并提供额外的正则化。
inception v1—(使用BN层,使用2个33卷积替代一个55卷积,使用1n和n1的非对称卷积替代n*n的对称卷积)—>inception v2—>(先pool再inception会造成特征图大小急剧衰减,会丢失大量信息,会造成表达瓶颈问题,对模型的训练造成困难,inceptionv3提出一种并行的降维结构)—>inception v3—(提出stem模块)—>inception v4—(引入残差连接)—>inception_Resnet
人们发现随着网络深度的增加,模型精度并不总是提升,这可能是因为更深的网络会伴随梯度消失/爆炸问题,从而阻碍了网络的收敛,出现了退化,故加入恒等映射。
整个ResNet不使用dropout,全部使用BN
两种block结构:
贴一个https://zhuanlan.zhihu.com/p/54289848上总结的Resnet常见改进
论文
2017年何凯明团队提出Resnext,基于Inception分析了神经网络的标准范式split-transform-merge模式。
Resnext网络结构如下表所示,其中C=32,表示分成32组,324d中的4表示每组4个通道。
下图中a是resnext的基本结构单元,把输出的11合并就等价于b了,再把输入的1*1也合并就等价于c了。
如下图是resnet中另一种基础block的结构对应的renext变形结构及其等价结构
论文
2018年提出,在同等规模下比resnet效果好一丢丢,但显存占用较大。
相比ResNet,Densenet中每个层都会与前面的所有层在channel维度上concat,这可以实现特征重用,提升效率。
DenseNet的网络结构主要由DenseBlock和Transition组成.DenseBlock如下图所示。Transition层包括一个1x1的卷积和2x2的AvgPooling,结构为BN+ReLU+1x1 Conv+2x2 AvgPooling,Transition层一方面降低特征图分辨率,一方面降低特征图通道数
Densenet结构:
2017年Google提出mobilenetv1.
mobilenetv1的创新点:1)提出了深度可分离卷积
2)使用relu6作为激活函数,这个激活函数在嵌入设备中效果更好,在低精度计算下具有更强的鲁棒性。
relu(6)=min(max(0,x),6)
2018年在v1的基础上提出了v2
1)引入倒残差模块
残差模块:在resnet中,输入先经过11卷积进行压缩,然后使用33卷积进行特征提取,最后再使用11卷积把通道数变换回去。整个过程是压缩->卷积->扩张,这样做的目的是减少33模块的计算量,提高残差模块的计算效率。
倒残差模块:输入首先经过11卷积进行通道扩张,然后使用33的depthwise卷积,最后使用11的pointwise卷积将通道数压缩回去。这个过程是扩张->卷积->压缩。因为dw和pw的卷积减少了参数量,但会损失特征。depthwise卷积不能改变通道数,因此特征提取受限于输入的通道数,所以将通道数先提升上去,通道越多保留的特征越多。
2)将block中最后一个11卷积的激活函数改为线性激活函数。
对低维做Relu运算,容易造成信息丢失。而如果在高维进行Relu运算,则信息丢失会很少
如图mobilenetv1与mobilenetv2的比较(来自https://zhuanlan.zhihu.com/p/70703846中的图片)
2019年提出v3(来自https://zhuanlan.zhihu.com/p/70703846)
1)网络的架构基于NAS实现的MnasNet
2)引入V1的深度可分离卷积
3)引入v2的具有线性瓶颈的倒残差结构
4)引入SE模块
5)使用了一种新的激活函数h-swish(x)
6)修改了v2网络端部最后阶段
提出两个新操作:逐点群卷积(point group convolution)和通道混洗(channel shuffle)。
因为大量的1*1卷积会耗费很多计算资源,论文提出了逐点群卷积帮助降低计算复杂度。但是使用逐点群卷积会有副作用,即某个通道输出仅从一小部分输入通道中导出。这样会降低通道组之间的信息流通,降低了信息表示能力。故在此基础上,论文提出通道混洗帮助信息流通。
如图为shuffle net unit结构:
vovnet_v1(2019): 论文
vovnet_v2(2020): 论文
代码https://github.com/youngwanLEE/vovnet-detectron2
vovnet是在Densenet的基础上改进来的。Densenet通过密集连接将不同感受域的中间特征聚合在一起,因此在目标检测任务中表现出良好的性能。尽管Densenet相比于Resnet有更少的模型参数和FLOPs但其推理速度比Resnet慢,是低能耗的。Densnet中由于密集连接,channel数线性增长,导致内存访问开销大,计算和能耗也过大。为了改善这一问题,vovnet提出one-shot-aggregation(OSA)模块。OSA模块仅在模块最后一个特征层处一次聚合之前的特征层。
除了模型参数量和FLOPs还有内存访问成本(memory access cost,MAC),GPU并行计算利用率等因素影响能耗和时间消耗。
Densnet中大量的密集连接导致更多的内存消耗,同时由于密集连接导致channel数增加,为了降channel数,会用到11卷积,但对于11的卷积GPU并行利用率下降。
vovnet_v1的几种网络结构及与其他网络结构的比较
vovnet_v2 在vovnet_v1的基础上加入了残差结构和se模块,由于随着vovnet的深度加深,其表现有所退化,这是由于过多的叠加OSA模块,conv等变换函数的增加,使得梯度的反向传播逐渐困难所以借鉴resnet加入残差结构。同时为了进一步提升效果加入了SE模块。
代码:https://github.com/huawei-noah/CV-Backbones#other-versions
论文:https://arxiv.org/pdf/1911.11907.pdf
通过对比分析,发现传统卷积输出的特征图高度相似,这些相似的特征图与CNN强大的特征提取能力正相关。如是为了节约计算,本文提出利用简单的线性操作来获得更多的相似特征图。
1.首先用常规卷积得到本征特征图,然后将得到的特征图用一系列线性运算(包括恒等映射)生成更多的相似特征图
论文
代码:https://github.com/lukemelas/EfficientNet-PyTorch
解读参考:https://zhuanlan.zhihu.com/p/70369784
文中主要验证了网络深度、宽度和分辨率之间的平衡可以导致更好的性能表现。提出了一种新的缩放方法,使用一个简单高效的复合系数来完成对深度、宽度、分辨率所有维度的统一缩放。以优化模型精度和计算量为目标,搜索得到一种基于移动应用的高效baseline模型efficientnet
https://github.com/Cadene/pretrained-models.pytorch
https://github.com/open-mmlab/mmclassification/blob/master/README_zh-CN.md
https://github.com/pytorch/vision/tree/master/torchvision/models