0
点赞
收藏
分享

微信扫一扫

pytorch快速入门与实战——二、深度学习经典网络发展

飞进科技 2022-03-14 阅读 138

续上文2.4章节
由于如果给网络内分模块的话,四级结构太过于庞大,而且本身篇幅太长,不便编写与阅读。

可以只看ResNet和Unet。
也可以只看Unet。

深度学习经典网络发展

参考:晓强DL 专栏文章汇总
通过以下参考跳过机器学习对计算机视觉方面进行了解(我做图像处理肯定只关注CV啦!)
下面会描述一些比较重要的论文:AlexNet,VGG,GoogLe-1:Going Deeper with Convolutions, GoogLe-2:Batch Normalization,GoogLeNet-3,ResNet,FCN,UNet
建议先上手网络再回来看这些比较好懂一些,比如我就是直接杀到ResNet再复现一个UNet的结构直接跑通然后再回来看这个发展历程的)反正就是卷积(邻近像素值分布)提取图像特征嘛。

1 AlexNet

必读论文AlexNet

1.1 意义

1.2 结构

5个卷积层+3个全连接层
在这里插入图片描述
便于实现的网络图在VGG章节一同展示

2 VGG

必读论文VGG

2.1 意义

2.2 结构:

将5*5卷积层换成3*3卷积层
在这里插入图片描述

2.3 演变过程:

在这里插入图片描述

其中AlexNet与VGG16和19的实现网络图(从下往上看):
在这里插入图片描述

2.4 特点

增大感受野,2个3*3堆叠等价于1个5*5,3个3*3堆叠等价于1个7*7。
等价的原因自己推导或者参考上述文章

3 GoogleNet

Going Deeper with Convolutions
深入理解GoogLeNet结构
同为2014年与VGG齐头并进,联手冠亚。

4 GoogLe Net 2(BN网络层)

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
就是前面提到过的BN层。

4.1 意义

4.2 优点

也如Batch Normalization 学习笔记所说:

5 GoogleNet-V3

这个我没细看,只是搬运过来
Rethinking the Inception Architecture for Computer Vision

5.1 简介VGG和GoogleV1和V2

5.2 对比V2

5.3 创新点

关键点&创新点

6 ResNet

终于到了ResNet,其实本人学习截止目前只看了ResNet和UNet。前面那些网络我也是写文章的时候才看的。

6.1 意义

个人理解:拐杖!
能够撑起所有网络一样的拐杖,让深度学习名副其实
和BN层一样,能够加强其他网络的效果,个人理解BN层是一种拨乱反正,训练着训练着分布歪了可怎么办,标准化矫正过来。

6.2 背景

6.3 问题与分析

但更深的网络并不总能带来好的结果。

而且过拟合有很多种解决方法,比如:数据增强,dropout(剪枝),正则等。
除了过拟合之外,深度网络还会带来梯度消失和梯度爆炸问题,但是这个问题也可以通过BN层来解决。而且若使用常用的激活函数ReLu的话,导数部分在正数是恒等于1,即梯度不变,所以不会导致梯度消失和爆炸。
即使加入了BN层,由于非线性激活函数Relu的存在,每次输入到输出的过程都几乎是不可逆的,这也造成了许多不可逆的信息损失,深度网络依然会出现退化问题(Degradation problem)。
导致这个原因也可能是因为随机梯度下降的策略,往往解到的并不是全局最优解,而是局部最优解,由于深层网络的结构更加复杂,所以梯度下降算法得到局部最优解的可能性就会更大。

6.4 解决思路

为了解决退化问题:我们需要在加深网络的同时,至少能保证深层网络的表现至少和浅层网络持平。也就是恒等映射:

6.5 解决方案

基于此,何博士提出残差学习的思想:
如果将深层网络的后面若干层学习成恒等映射h(x)=x,那么模型就退化成浅层网络。但是直接去学习这个恒等映射是很困难的,那么就换一种方式,把网络设计成:
H(x)=F(x)+x => F(x)=H(x)-x
只要 F(x)=0 就构成了一个恒等映射H(x) = x,这里 F(x) 为残差。
在这里插入图片描述

其实相比原图就是加了个恒等映射。

引入shortcut connection,让网络信息有效传播,梯度反传顺畅,使得数千层卷积神经网络都可以收敛。
在这里插入图片描述
如图:残差网络可以表示成H(x)=F(x)+x,这就说明了在求输出H(x)对输入x的倒数(梯度),也就是在反向传播的时候,H’(x)=F’(x)+1残差结构的这个常数1也能保证在求梯度的时候梯度不会消失

6.6 网络结构:

我认为的残差就是输入与输出的再结合,让输出不要太过于偏离输入。get到这个思想其实也就可以了。
在这里插入图片描述

6.7 实现细节

在这里插入图片描述

注意计算左图参数的时候是假设通道数为256的所以是乘256而不是64,因为低通道用左,高通道用右

你必须要知道CNN模型:ResNet
图像处理必读论文之六 ResNet
深度学习之16——残差网络(ResNet)
CVPR2016:ResNet 从根本上解决深度网络退化问题

7 FCN

(不要问为什么不放网络结构图,这玩意不就是给UNet铺路)

7.1 背景

从AlexNet开始的CNN卷积网络在图像的分类定位任务中都有不错的成绩,基本都是在李飞飞等人于2010年创办的ImageNet Large Scale Visual Recognition Challenge (ILSVRC:大规模图像识别挑战赛)的背景下。
比赛项目涵盖:图像分类(Classification)、目标定位(Object localization)、目标检测(Object detection)、视频目标检测(Object detection from video)、场景分类(Scene classification)、场景解析(Scene parsing)
但随着深度学习的应用拓展,无论是NLP(自然语言理解)领域的语义分割还是CV(计算机视觉)领域图像分割,原始的CNN都无法解决。对于一般的分类CNN网络,如VGG和Resnet,都会在网络的最后加入一些全连接层,经过softmax后就可以获得类别概率信息。但是这个概率信息是1维的,即只能标识整个图片的类别,不能标识每个像素点的类别,所以这种全连接方法不适用于图像分割。
全卷积网络(Fully Convolution Network, FCN)提出可以把后面几个全连接都换成卷积,这样就可以获得一张2维的feature map,后接softmax获得每个像素点的分类信息进行像素级的预测(pixelwise prediction),从而解决了分割问题。

7.2 技术实现:

关于这三点(或者对于某些概念和原因),如果不太懂的话建议看完Unet再回来看这一点,Unet已经完美体现了这些。如果在这里解释显得太过冗余和乱。

  1. 全卷积化(Fully Convolutional)

把传统CNN最后的全连接层换成了卷积层。

  • 可适应任意尺寸输入和输出(通过修改卷积的kernel,padding和stride能改变size和channels)
  1. 反卷积(Deconvolution)
  • 利用反卷积能够输出精细的结果(卷积的权重可都是参与反向传播的!)

个人觉得:反卷积这名字取的就不太好,但是转置卷积就很合适,为什么呢?其实转置卷积还是一种卷积,只是一种参数不同的卷积罢了。所以在pytorch里面函数名也是transposed2d。
让我想想怎么描述这个不同:stride (反卷积的步长永恒为1,其参数stride不表示步长)
一般卷积的参数stride=n表示步长为n,
转置卷积的参数stride=n表示每两个像素点中间插n-1个,那其步长呢?永远是1。OK,看例子:
当参数stride=1时,反卷积与卷积无异。
如下图反卷积:蓝色input=2x2,移动的灰色kernels_size=3x3,边缘白色padding=2,stride=1,此时绿色output为4x4.
在这里插入图片描述
那参数stride!=1的时候呢?如上所说,表示中间插几个。
如下图反卷积:input=3x3,kernels_size=3x3,padding=1,stride=?,绿色output=5x5
答案是2,如图所示蓝色input每两个像素点中间都插入了1个白色像素,所以参数stride=1+1=2.
kernel移动的步长永恒是1.
在这里插入图片描述

  1. 跃层结构(Skip Layer)

(本人理解:时刻提醒网络向实际靠拢,不要跑偏)和残差类似,现阶段不要过多想。

  • 能够增强网络的鲁棒性和准确性。

参考:
图像分割:语义分割中的全卷积网络(FCN)
FCN的学习及理解
全卷积网络(FCN)详解

7.3 历史意义:

• 语义分割领域的开山之作
• 端到端训练为后续语义分割算法的发展铺平了道路

7.4 其他相关概念

7.4.1 局部信息

  • 提取位置:浅层网络中提取局部信息
  • 特点:物体的几何信息比较丰富,对应的感受野较小
  • 目的:有助于分割尺寸较小的目标,有利于提高分割的精确程度

7.4.2 全局信息

  1. 提取位置:深层网络中提取全局信息
  2. 特点:物体的空间信息比较丰富,对应的感受野较大
  3. 目的:有助于分割尺寸较大的目标,有利于提高分割的精度

7.4.3 感受野

7.4.4 端到端

降维和特征提取过程就是下采样,恢复尺寸的过程就是上采样
看Unet就懂了。

8 UNet

8.1 研究成果及意义:

基本上所有的分割问题,都可以拿U-Net先看一下基本的结果,然后进行“魔改”。

8.2 网络结构

先放结构图:百度找到的图,感觉比官方图更香,主要是有个与分类的对比,对于萌新更友好一些。
在这里插入图片描述
说一下这个图,右下角那个框里的部分是分类模型的结构图,U-net是不包括这部分的,放出来只是体现出一个区别出来。
先借用知乎@陈亦新的说法,简单说下这个图:

OK,开始解析。

  • 首先整体来看,是一个U型对称结构。拆开之后是与FCN相同的结构思路:
    左边是下采样(编码Encoder),右边是上采样(解码Decoder)。
  • 从最顶层开始分层看,左边蓝色矩形是输入,经过两个block得到一个输出(channel=64的矩形),接下来往下走,看到是一个2*2的最大池化maxpool(就是把2*2矩形内的最大值挑出来,这样2*2就变成了1个数,size的长和宽都变成一半),然后进行下一层的block+maxpool
    【上图是3次下采样,一共4层。Unet原文是4次下采样一共5层,但这个没有定数,无伤大雅。】
  • 循环到最底层之后下采样结束,准备上采样。
  • 上采样如图结构是block+反卷积(反卷积过程在FCN里说了,上采样是反卷积替代了最大池化)。
    3次上采样回去,得到与原输入size一样的输出。
  • 结束!
  • 值得注意的是,左边与右边是通过一个灰色的线连接起来的,这个线是Skip connection,原Unet论文中叫做copy and crop。其实就是个残差思想:将左边的输出下边的输出拼接起来作为右边这一层的输入

关于add 和concat操作可以参考:深度特征融合—理解add和concat之多层特征融合这篇文章来了解。

8.3 模块作用

  • 卷积(Conv)用于特征提取;
  • 池化(maxpool)用于降低维度;
  • 拼接(skip-connection)用于特征融合;【所以通道就是特征】
  • 上采样(Upsample)用于恢复维度;

从更大的角度来看:

  • 下采样(编码Encoder):使得模型理解了图像的内容,但是丢弃了图像的位置信息。
  • 上采样(解码Decoder):使模型结合Encoder对图像内容的理解,恢复图像的位置信息。

那么我们就知道不同层的区别:

  • 浅层主要是几何信息,图像内容是什么,看到的是小视野的东西(就是你放大能看到啥,比如猫的眼睛啥颜色)
  • 深层主要是位置信息,图像位置有什么,看到的是大视野的东西(就是你缩小能看到啥,比如猫在图片的什么位置)

8.4 代码实现

嘿嘿,终于到了这一步,虽然……但是,其实还是有很多细节的。单开一篇,一起加油吧。

举报

相关推荐

0 条评论