CNN的几个经典BackBone:AlexNet / VGGNet / ResNet / DenseNet

AlexNet

  AlexNet虽然如今在实践中并不常用,但是很具有历史意义,它是第一个在ImageNet比赛中获奖的CNN结构。



AlexNet 结构


  
在ImageNet中获奖

VGG

  VGGNet实际上和AlexNet一样都是对CNN进行堆叠,只不过层数更多一些。常用的有Vgga(11层),Vgg16和Vgg19。结构如下图所示:


  

Vgg的结构

  PyTorch表示的结构如下:

ResNet

  Arxiv https://arxiv.org/abs/1512.03385
  VGG将卷积层的层数加深了,那么是不是卷积层数越多,网络的效果一定越好呢?
  随着网络的加深,在反向传播的过程中会出现梯度消失梯度爆炸的问题。使用正态分布进行参数初始化和Batch Normalization可以略微缓解这样的问题,但是准确率却无法再提高了。ResNet解决的问题是如何在加深网络的同时还能继续提高准确率(至少保证准确率不降低)。
  为此作者提出了残差映射的概念:令H(x) = F(x)+x 。如下图所示,其中F(x)表示权重层的简单堆叠,在文中使用两层或三层的堆叠(只使用1层没有明显的效果),F(x)与x相加实现了“快捷连接”。


  理想情况下,较深的网络不应该比较浅的网络效果更差(实际上却会出现这样的情况,如下图所示),ResNet将网络的处理与输入相加,如果网络的效果已经达到了饱和,那么再增加层数时,优化中会使F(x)——>0,这样更深的层数就不会降低网络的表现了。事实上,ResNet在深度大幅增加后能够很容易地获得准确率的提升。
  ResNet的层数大大加深,常用的有Res50(50层)和Res101(101层)。ResNet的参数个数比VGG更少,但是能够取得更好的效果。

DenseNet

  DenseNet借鉴了ResNet的思想,每一层都和之前的所有层有连接,既增加了特征的利用率,又减少了深度的冗余性。



DenseNet示意图



DenseNet结构

  以DenseNet121为例,第一个DenseBlock有6层,每层分别有一个1×1的卷积和3×3的卷积,先增大再减少channel的个数。每层都将之前的所有层作为输入,通道个数为(64+32×i)->32。PyTorch表示的结构如下:

参数比较

CNN的几个经典BackBone:AlexNet / VGGNet / ResNet / DenseNet》有1个想法

评论已关闭。