文章目录
论文学习
AlexNet 2012
《ImageNet Classification with Deep Convolutional Neural Networks》
-
受限计算机算力,双GPU运行
-
卷积核:11 * 11, 5 * 5, 3 * 3,3 * 3 大卷积核 (后来的网络都是3 * 3卷积核进行级联代替大卷积核)
-
池化核:3 * 3
-
优点:
1.RELU函数
解决Sigmod
逻辑回归在网络深度较深时的梯度弥散问题
2.重叠池化
,步长小于kernel-size,提升特征丰富性
3.Drouptput
随机忽略神经元,避免过拟合
4. LRN(局部响应归一化)的使用(VGG证明这用处不大) -
缺点:
1. 最后几层全连接层
所带来的参数过多
2. 网络模型还有很大改进空间 -
收获:
1. Relu函数作为激活函数
2. Droupout随机忽略神经元
Inception v1 2014
《ImageNet Classification with Deep Convolutional Neural Networks》
理论依据:
改进网络模型的主要方向是将网络变得更深更宽
(二者的调整会带来计算量的增加)具体实现:
- 使用3 *3 和5 * 5的卷积核是为了捕捉稀疏的和稠密的信息
- 使用1 * 1的卷积核是为了降低维度来减少参数量(这里1 * 1卷积核的目的很简单,就是降低维度,减少计算量)
- 将其卷积池化得到的特征层concat起来显然是为了增加宽度(理论依据指示)
- 为啥这里又用1 * 1卷积核减低维度(减少计算量),又用1 *1 ,3 * 3,5 * 5,pooling得到的特征层concat(增加计算量),应该是尽可能的捕捉多尺度的信息。
VGG 2015
《VERY DEEP CONVOLUTIONAL NETWORKSFOR LARGE-SCALIMAGE RECOGNITION》
-
理论依据
小卷积核级联代替大卷积核在可以减少计算量的参数量的情况下增加深度 -
具体实现
- 池化核:2 * 2 ; 卷积核:3 * 3(可以同时捕捉像素的上下左右位置信息)
- 图像预处理:求取所有图片每个通道的均值,每张图片的通道均减去对应均值
- VGG-16和VGG-19效果差不多,一般使用
VGG-16预训练模型
- VGG结构是很优美的,就是卷积卷积池化,卷积卷积池化,卷积卷积卷积池化这样
-
优点:
1. 小卷积核代替大卷积核(AlexNet) ,不仅计算量、参数量下降,网络深度也增加**
2. 结构清晰,清一色的3 * 3的卷积核和2 * 2的池化核**
3. 证明LRN
对神经网络用处不大
4. 在VGGNet的卷积结构中,引入1*1卷积核
,在不影响输入输出维度的情况下,引入非线性变换,增加网络的表达能力,降低计算量** -
缺点
:
1. VGG实验证明网络深度对神经网络影响不大,这是不对的
2. 全连接层所带来的的参数较多
FCN 2015
《Fully Convolutional Networks for Semantic Segmentation》语义分割开山之作
动机
:分类卷积神经网络的发展,作者很自然的就想到将分类网络迁移到语义分割网络(上帝视角)理论依据:
:将深层的和浅层的特征结合起来可以更好的分类具体实现
- 用VGG或者GooLeNet作为主干网络提取特征,得到pool1~pool5
- FCN-8s:pool5 2倍上采样得到与pool4相同大小,再与pool4
对应元素相加
(融合的方式是对应元素值相加
,这点区别于U-Net的通道数相加)之后2倍上采样与pool3相同大小,再融合,再2倍上采样得到FCN-8s
优点:
- 将之前的CNN的全连接层替换成卷积层
deep jet(跳跃连接)
,也就是将浅层的粗的信息与深层的精细的信息相融合
缺点:
- 独立像素分类,没有考虑像素之间的关联(PSPNet模型就以此改进)
ResNet 2015
《Deep Residual Learning for Image Recognition》
理论依据:
提出了residual残差
的思想,防止模型因为深度增加而带来的网络退化问题
- F(x)+x=Output,当学习不到什么有用的东西的时候,F(x)被学习为0,这样就能防止网络退化
- ReLu非线性激活函数跟在每层卷积后(如果根据MobileNet v2的理论,在低维空间下使用非线性激活函数会损失信息,那么bottleneck的设计就存在问题,但使用残差连接,在不考虑计算量的情况下显得无所谓)
- 第一个只有3 * 3的叫做
BasicBlock
;第二个有1 * 1的叫做Bottleneck
(瓶颈,两端大,中间小,因为进入bottleneck之前会用1 * 1卷积核降低通道 ,显得还是很形象的)
- conv2_X conv3_X 等下采样的时候1 * 1卷积核是stride=1,但3 * 3卷积核strid=2(仅限于第一次进入下一layer的时候)
- 在进行残差连接的时候,需要考虑x的通道数是否需要进行下采样,因为通道数时变化的(需要注意的是ResNet的残差无论是通道数是否一样都会使用残差连接)
- 源码中有一个
expansion
。expansion=1表示输出通道和输入通道一样;expansion=4表示输出通道是输入通道的4倍;这也是BasicBLock
和Bottleneck
二者最大的区别 - 源码解析
U-Net 2015
《U-Net: Convolutional Networks for Biomedical Image Segmentation》
- 参考链接
- 德国团队研究,专门针对医学图像,能很好的分割
图像大、数量少的医学图像
3. 医学图像VS自然图像:①医学图片大②误差不一样,一般认为医学图像是泊松误差,自然图像是高斯分布的误差③医学图像的病灶往往是图像细节,信噪比低(一张图片含有的关键信息相对噪声来说可能很少)
参考链接
4. U-Net结构优美,每次卷积图像大小减少2 * 2(因为是0-padding 1-stride 2 * 2的keneral-size),特征层融合是concat(特征通道相加,区别与FCN的对应元素值相加
)
5. 因为图像的边缘缺少位置信息,U-Net使用Overlap-tile
,也就是镜像填充的策略(对图像的边缘进行镜像翻转,来扩大图片尺寸,所以输入图像大小为572 * 572,并且带有tile标志,这样之后图像的输出特征就很原图一样大))
,来对图像的边缘进行填充,这区别与FCN的0padding填充
6. 因为图像太大,U-Net还是用了patch
的策略,从左上角按序列对图像无缝裁剪,裁剪的碎片会有重叠部分,一直恰巧裁剪到右下角(需要事先进行计算,从而完美分割)
这也间接对图像数据增强
,解决了图片少的问题
7. 优点: ① 一套完整的encoder-decoder卷积网络 ② 使用了镜像翻转解决图像边缘位置信息缺少 ③ patch对大图片无缝分割,减少了内存的依赖,间接对大图片进行了数据增强④在30张图片上进行训练,取得了2015年细胞追踪大赛的第一名
8. 收获:① 编码器-解码器提供了提取特征的新思路 ② 针对大图片可以使用碎片(patch)进行数据增强 ③ 图片边缘位置的信息可以使用镜像翻转的方式填充
9. 问题:原图应该很大,patch的大小应该为388 * 388
Inception v3 2015
《Rethinking the Inception Architecture for Computer Vision》
理论依据:
- 避免特征性瓶颈,尤其在网络浅层。featuremap的尺寸应该是逐渐下降的(这也解释了为什么现在很多神经网络都是1/2 ,1/4, 1/8的下采样)
- 高维特征可以在网络中局部处理。增加每个卷积块的激活有利于更多解耦特征,这样能够加快网络的训练(增加高维特征激活块的耦合,感觉应该就是增加高维特征的通道数)
- 在低维特征中进行空间聚合嵌入不会对模型的特征表达构成大的影响,例如在进行3x3卷积之前可以使用1x1卷积进行降维(空间聚合),这样做可以降低计算量却不会对特征表达造成影响。关于这一点,作者的推断是相邻神经元之间的强相关性可以使得执行降维操作时信息丢失较少(给人的感觉就是可以在网络的浅层,也就是低维特征,不需要太多的通道数,可以使用1 *1 进行降维,这也是论文所做的)
- 平衡好网络的深度和宽度
- 论文探索了几种卷积分解
1. 小卷积核级联代替大卷积核 figure5 (1个3 * 3局卷积核可以用2个2 * 2卷积核代替,参数下降11%)
2. 非对称卷积分解,并在实践中发现,非对称卷积分解在网路的12~20层效果较好 figure6(1个3 * 3卷积核可以用1个3 * 1和1个1 * 3代替,参数下降33.3%) 也探索了非对称卷积的并联模式(这里不是很清楚原因 前面串联那种分解有博客说是深度上分解,并联这种是宽度上分解) figure 7
- 论文还探索了figure 9这种情况,左图先池化再Inception,表征信息会遇到瓶颈(像素点损失,信息不够全面),违反了准则一,右图先Inception,再池化,计算量增加。作者结合了二者优缺点,构建了figure 10 这种结构。池化核卷积并行,之后进行通道数concat
- 论文根据以上准则,改进了Inception ,并构建了新的网络结构Inception v3
在《Rethinking the Inception Architecture for Computer Vision》中,作者将增加了卷积核因式分解的Inception命名为Inception v2,在Inception v2增加了辅助分类还有一些其他乱七八糟的东西叫做Inception v3。
这之后又在《Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning》说Inception v1就是GooLeNet这篇文章,Inceptionv2来自于 《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》Inceptionv3来自于《Rethinking the Inception Architecture for Computer Vision》
怪不得博客上有不一样的意见。这里为了方便,我就以最后发表的文章为准
deeplab v1 2015
《SEMANTIC IMAGE SEGMENTATION WITH DEEP CONVOLUTIONAL NETS AND FULLY CONNECTED CRFS》
- 两个问题:
1. 频繁的pooling
和down-sampling
使分辨率下降
2.invariance 平移不变性
invariance会对图形的边界定位产生影响 - 对应解决办法:
1.空洞卷积
atrous-Conv
2.条件随机场
CRF - 主干网络:VGG
deeplab v2 2017
《DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution,and Fully Connected CRFs》
-
三个问题:
1. 频繁的pooling
和down-sampling
使分辨率下降
2.invariance
平移不变性 invariance会对图形的边界定位产生影响
3. 多尺度目标的存在 multiple scale暂时认为多尺度是指目标物体有大有小
-
对应解决办法(理论依据):
1.空洞卷积
atrous-Conv -
空洞卷积的弊端:1. 空洞卷积不是扩张系数越大越好 2.由于空洞卷积的补零操作,无法确保会利用到每一个像素点。会产生网格效应(Gridding Effect)
2.条件随机场
CRF
3.第一种解决办法
:标准的多尺度处理 将featuremap缩放成不同尺寸,融合不同尺度的特征进行预测(我觉得类似fcn的上采样)
第二种解决办法 多尺度的空洞卷积
固定的特征图上使用并行的空洞卷积提取特征ASPP
-
主干网络 ResNet
deeplab v3 2017
《Rethinking Atrous Convolution for Semantic Image Segmentation》
- 捕捉多尺度信息的几种方式
- 因为空间分辨率的不断下降,信息损失会越来越严重,不利于语义分割,所有运用了空洞卷积
block 5 6 7 是对block4的复制,不用空洞卷积的话,分辨率会不断下降
使用的网路主要是ResNet,bottleneck中的三层卷积层有一个基础的 multi-grid=(1,2,4) , 在进行block操作时,需要rate*multi-grid 作为bottlekeneck的扩张系数
- 因为
空洞卷积
在极端情况下,比如在65 * 65的featuremap中使用扩张系数接近featuremap大小的卷积核
,卷积核只有一个数在featuremap里面
,其他卷积参数都在featuremap外面,这样空洞卷积就退化为了1 * 1的卷积
扩张系数不是越大越好 - 为了克服上述问题,论文提出的网络模型为
得到最后的特征层又经过全局平局池化,BN,1 * 1卷积,最后插值上采样恢复到原图
Xception 2017
《Xception: Deep Learning with Depthwise Separable Convolutions》
理论依据:
- 深度可分离卷积和残差连接
- 之前Inception由于模块累加,为避免通道数太多,会先使用1 * 1卷积核进行降维,映射到一个新的空间(无论是升维还是降维,总归是学习到了空间相关性),然后使用3 * 3或者5 * 5卷积核提取特征(这里使用的卷积核是有厚度的)这种模式等价于先学习了通道的相关性,又学习了空间相关性和通道相关性(3 * 3卷积核是有厚度的),考虑将二者分开,先学习通道相关性再学习空间相关性。
- 去掉池化后的Inception模块
- 对简化的Inception进行重新描述
具体实现:
不断增加3 * 3卷积块(这里的3 * 3卷积块是卷积片,维度为1),直到数量和output通道数一样多,这样不就相当于可分离卷积- xception的可分离卷积与普通的可分离卷积有些不一样,普通的可分离卷积是先学习
空间相关性
,再学习通道相关性
,xception的可分离卷积是先学习通道相关性
再学习空间相关性
。(二者效果应该是一样的) - Inception v3和Xception参数差不多,论文说是参数利用率更高才带来的分类性能提升
Inception v4 2017
《Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning》
- 根据Inception本身的结构出发,改善Inception v3并提出Inception v4又将Inception结合残差思想,提出来Inception-ResNet-v1,Inception-ResNet v2 。
- Inception-ResNet-v1和Inception v3计算量相当, Inception-ResNet-v2和Inception v4计算量相当
- Inception-ResNet-v1与Inception-ResNet-v2二者网络结构一样,只是部分模块不一样
- 文章还指出不用残差连接也可以将网络做的很深,但使用残差连接后可以加快网络收敛
- 这篇文章就是图特别多。目前感觉设计的有点不够优美
PSPNet 2017
《Pyramid Scene Parsing Network》
-
流程:
-
ResNet(CNN)特征提取得到Feature Map,Feature Map大小为原图的1/8
-
将Feature Map以1 * 1 , 2 * 2 , 3 * 3 , 6 * 6分别进行池化,通道数不变,这里的的意思是将图片通过自适应池化,池化后输出的池化特征层大小为1 * 1 , 2 * 2 , 3 * 3
6 *6,(在pytroch有一个函数nn.torch.nn.AdaptiveAvgPool2d(),参考链接) -
在通过1 * 1的卷积调整通道数为原来的1/N,N为分成的池化次数,这里为4
-
双线性差值法上采样还原到Feature Map大小
-
concat 四个调整过通道数的池化层与原始Feature Map concat通道数拼接
-
再次调整通道数(resnet提取的FeatureMap通道数时2048)需要调整通道数至分类个数
-
还需要再次双线性差值上采样
还原到原图大小
-
-
双线性差值法:
- 先对x轴插值 再对y轴插值,根据距离来判断权重,离谁近,该点的权重就更大
-
自适应池化:
- 给定一张图片,分别输出为1 * 1 , 2 * 2 , 3 * 3 , 6 * 6的池化层,1 * 1意思为对全局进行池化,2 * 2将图片分为四个部分,分别池化输出池化特征为2 * 2 其他类似
-
优缺点及收获
优点:①结合了全局先验的语义信息,比FCN更近一步
缺点:目前为止,是不是没有很好的考虑边缘像素点的信息
- 收获:①结合全局先验语义信息
- 问题:①为什么说是全局先验语义信息
- 解决: 因为PSPNet它提取了feature map四个维度的全局特征,然后说这是全局先验的语义信息,并证明这是行之有效的
MobileNet v1 2017
《MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications》
- 动机:为满足移动设备或者嵌入式设备对准确率和速度的要求,作者提出了一个小但是准确率依然不错的网络MobileNet v1
- MobileNet v1主要是利用
深度可分离卷积
来减少参数量和计算量,从而实现网络的轻量化。作者也提出了两个超参数:α
,ρ
。α
是指每层的featuremap的原来的通道数乘上α
(一般设置为1,0.75,0.5,0.25),ρ
则是隐式的控制featuremap的大小,来设置ρ
。作者分别作了对比实验。 - 论文的深度可分离卷积,无论是
depthwise convolution
或者是pointwise convolution
都带有BN和ReLu激活函数
- 用
CONV/s2(步进2的卷积)
代替MaxPool+CONV
:使得参数数量不变,计算量变为原来的 1/4 左右,且省去了MaxPool
的计算量(这一点没怎么仔细看,在其他博客上看到的,可以参考,用stride=2卷积代替池化还挺不错的) - 网络结构第一层没有使用
深度可分离卷积
deeplab v3 + 2018
《Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation》
- 结合了encoder-decoder,deeplabv3,深度可分离卷积,空间金字塔池化,以deeplabv3为编码器,重新设计了一个解码器,并使用深度可分离卷积构建了一个新的网络 deeplabv3+
- 论文使用ResNet-101和Xception分别作为主干网络进行了实验
DenseNet 2018
Densely Connected Convolutional Networks
- 动机:???从特征层本身出发,提高特征的利用率
- 理论依据:???包含输入和输出的短连接可以带来准确率的提升
- 相比ResNet的更深,和Inception的更宽(多种卷积核或者池化核),DenseNet从特征本身出发,提高特征利用率,不断的特征重用,缓解梯度损失,提高参数利用率(
ResNet虽然很深,但是有很多层是没什么用的
) DenseNet B
:在卷积之前模仿Inception模块先用1 * 1卷积降低通道数DenseNet C
:在过渡层使用一个θ超参数来降低通道数
MobileNet v2 2019
《MobileNetV2: Inverted Residuals and Linear Bottlenecks》
- 动机:为满足移动设备或者嵌入式设备对准确率和速度的要求,改进MobileNet v1,设计了MobileNet v2
- 模型设计准则
- 对低通道下的
presentation
使用ReLu
非线性激活函数,会损失数据(ReLu是单向抑制,会将小于0的数全transform为0);在高通道下使用非线性激活函数,因为manifold of interest
会存在于其他通道中,这样的话ReLu
即使会损失一些信息,但是必要信息会存在于其他通道数中,当通道数足够多,那么这个损失就忽略不计 - 深度可分离卷积带来的计算量的大大减少
- 对低通道下的
- 根据以上设计准则,设计了
invert bottleneck
,invert bottleneck是与ResNet的bottleneck相反的结构。在ResNet中,是先降维,在低维空间进行特征提取,之后再升维(是一种类似瓶颈的结构,即中间小,两端大)。invert bottleneck是先升维,在高维空间进行特征提取,之后降维,并且使用线性激活函数。