019:什么是 Resnet50 神经网络
本文为合集收录,欢迎查看合集/专栏链接进行全部合集的系统学习。
合集完整版请查看这里。
在上一节中,使用了一个简单的神经网络进行识别数字。
这个网络结构非常简单,一是因为层数少,二是因为结构是顺序的,没有其他分支结构。
这类神经网络的结构表示起来大概就像是:conv -> relu -> conv -> relu -> maxpool -> fc 这种,一层连接着一层,这种神经网络结构可以被称为顺序结构的神经网络,也是最简单的一种结构。
现在介绍一个相对来说更加复杂,但我认为在计算机视觉领域非常重要的一个神经网络结构——Resnet50 模型结构。
本专栏后面所有的算法解析、代码实战以及模型的性能调优,也都是基于该神经网络模型来进行的。
什么是 Resnet50 神经网络
Resnet 神经网络是何凯明在《Deep Residual Learning for Image Recognition》论文中首次提出的。
Resnet50 模型之所以叫这个名字,是因为模型的核心思想就藏在名字里。
名字可以拆分为:Res + net + 50,Res 是 Residual (残差)的缩写,50 指的是整个网络中有 50 个卷积层。
Resnet 有很多系列,比如 Resnet18, Resnet101等,后面跟的数字代表的是神经网络中的卷积层的数量。
基本上你可以这么理解:数字越大,卷积层越多,网络的深度越深,神经网络提取的特征越多。
下图是 Resnet 各系列的网络结构汇总表。可以看到在 Resnet50 的那一列中,从第一层到最后一层,总共50个卷积算法,这里把最后一层的全连接层也看做了卷积,至于为什么可以这么看,是因为两者有算法等价关系。
残差
那么 Res(Residual)残差又是个什么东西呢?
所谓残差,其实就是在顺序连接的神经网络中,增加了一个 short cut 分支结构,俗称为高速公路。
比如,在上一节手写数字识别那个里子中,模型是一层一层往下传的,这种顺序的神经网络如果层数不多,是完全可以使用的的,但是如果层数很深(比如50层或者几百层),数据这么一层一层往下传,在训练时就会发现神经网络很难被训练出来。
训练不出来的原因有很多,其中一个可能是由于反向传播时梯度消失的问题。
而残差结构就是为了解决这个问题。
如下图所示,左侧是正常的神经网络层,一层层往下传,在右侧增加一条连线,使得整个网络结构形成了一个残差结构。这样,网络的输出不再是单纯卷积的输出 F(x),而是原来的输出和输入的叠加 F(x) + X。
右侧的连线也被叫做高速公路:输入数据X不经过任何运算,可以快速到达输出的地方。
正是由于这个高速公路的存在,使得数据(无论是正向传播还是反向传播时传递梯度),数据都可以“无损”的通过,避免了上面说到的梯度消失的问题。
这种结构就是残差结构,在很多CV任务中,几乎都可以看到这种结构的存在,不论是图像识别的网络,还是目标检测的网络。
总结一下
Resnet50 是一个经典的图像分类网络,并且在图像分类任务上表现出色,它的创新就是引入了残差结构来确保网络深度可以搭建的很深。
很多工业项目中,会以 resnet50 为 back bone(骨干网络)来构建自己的神经网络。
也就说,不少CV网络中的骨干结构就是 resnet 结构,算法的层数不一定是50层,但是算法、原理几乎是一样的,在这个骨干结构的前后,在加一些模型自有的算法,从而来完成自己的特定任务。
为什么可以这样?
是因为resnet这种结构,包括卷积参数的设计,被证实有很强的图像特征提取能力,只要是图像任务,即使不是识别也需要提取特征,因此将 resnet 结构作为一种特征提取器来使用。
除此之外,几乎每一家做 AI 芯片的公司,都会以 resnet50 这个神经网络在自家芯片上跑出来的性能数据来作为宣传手段,这是因为只要这个网络性能好,就说明这家芯片至少在计算机视觉这个大领域内,性能都会有较好的泛化性,可见该模型的重要性。