深度学习(11)——DeepLab v1

DeepLab v1

DeepLab 由谷歌团队提出的,至今有了四个版本,也就是v1-v4。其结合了深度卷积神经网络(DCNNs)和概率图模型。

在论文《Semantic image segmentation with deep convolutional nets and fully connected CRFs》中提出,发表在 ICLR 2015 。

论文的写作时间是2014年,当时深度卷积神经网络在高级视觉研究领域取得了突破。其卷积和池化操作保证了其不变性,能够提取高级抽象特征。不变性指的是平移不变性,卷积层扩大感知野,池化层的pooling操作,即使图像有小的位移、缩放、扭曲等,提取到的特征依然会保持不变,减小了相对空间位置的影响。这在高级特征提取中作用重大,但在一些低级视觉研究,如语义分割任务中效果是不理想的。我们希望获取具体的空间信息,而这些信息随着网络的加深慢慢丢失掉。

于是对于语义分割任务,DCNN存在两个问题。

第一,最大池化和下采样操作压缩了图像分辨率。一般语义分割通过将网络的全连接层改为卷积层,获取得分图(或称为概率图、热图),然后对其上采样、反卷积等操作还原与输入图像同样大小。如果压缩太厉害,还原后分辨率就会比较低,因此我们希望获得更为稠密(dense)或尺寸更大的得分图;第二,对空间变换的不变性限制了模型的精度,网络丢失了很多细节,获得的概率图会比较模糊,我们希望获得更多的细节。在该文章中,提出使用空洞算法和全连接CRF分别解决这两个问题。

DeeplabV1方法分为两步走,第一步仍然采用了DCNNs得到 coarse score map并插值到原图像大小,然后第二步借用fully connected CRF对从FCN得到的分割结果进行细节上的refine。
1

该方法的创新之处在于将DCNNs的特征图与全连接CRF结合,并将Hole(空洞卷积)应用在DCNNs中。

DCNNs基于VGG16模型,网络结构图如下:
2

在VGG16中,卷积层的卷积核大小统一为 33 ,步长为 1,最大池化层的池化窗口为 2 * 2 ,步长为2 。
3
在这基础上做的改进是使用 1
1 的卷积层代替FC层,那么就变成了全卷积网络,输出得到的是得分图,也可以理解成概率图。将pool4和pool5的步长由2改为1, 这样在原本FC7的位置,VGG网络总的步长由原来的32变为8(总步长=输入size/特征图size)。一般来说,池化层的步长为2,池化后输出大小变为输入大小的一半。原VGG16模型有5次池化,缩小 2 5 = 32 2^5=32 25=32 倍,修改后的VGG16有3次补步长为2的池化,缩小 2 3 = 8 2^3=8 23=8 倍,两次步长为1的池化,输出大小基本不变,所以说VGG网络总的步长由原来的32变为8。

这样改的原因是为了获得更为稠密(dense)的score map。

一旦修改了网络结构,就会面临一个问题,如何既想使用预训练好的网络模型进行微调,又能改变网络结构获得更为稠密的得分图。

感知也(RF)改变,这对使用预训练的网络有何影响?

感知野计算

感知野就是当前这一层的节点往前能看到多少前些层的节点,

4
由上图所示,左侧(a)(b)图表示一维卷积层的步长由2变为1后,感知野的变化。(a)输出4个节点,0-3,每个节点的感知野为3;(b)输出7个节点,0-6 ,每个节点的感知野为3。图a的输出0123对于图b输出的0246,感知野相同,但又多了其他节点,使得得分图变得更加稠密。

这里解释一下padding为什么不算在感知野里面,一种直观的方式是,一层的padding一般只有两三个节点,而深度神经网络中每一层的输出有几百上千的节点,而padding只能影响到4-6个节点,这对于一层的输出节点来说是微不足道的。
5

©的下一层采用hole算法,(d)的第三个2输出来自©的0,2,4,这对应(a)中输出的123,所以d层有b层的所有内容,同时又增加到7个输出(相比与b层的2个输出),所以输出变得稠密了。

很明显,为了保证感知野不变,我们对卷积层滤波器进行了扩张,这就是空洞算法。

使用hole算法后,滤波器 k k k 大小变化为
k = k + ( k − 1 ) ( h l o e   s i z e − 1 ) k = k + (k-1)(hloe\,size -1) k=k+(k1)(hloesize1)
如图,假设原始滤波器大小为3,hole 大小为2,那么扩张后滤波器大小为 5 。扩张部分用0填充。

6

感知野计算由输入层后的第一层开始依次往后计算

第一层卷积层的输出特征图像素的感受野的大小等于滤波器的大小

感受野计算公式
S n = S n − 1 ∗ s R F n = R F n − 1 + ( k n − 1 ) ∗ S n − 1 S_{n} = S_{n-1} * s \\ RF_{n} = RF_{n-1} + (k_n-1) * S_{n-1} Sn=Sn1sRFn=RFn1+(kn1)Sn1
其中, S n S_{n} Sn 是网络前 n n n 层strides, s s s 是这一层的strides。 R F n RF_{n} RFn 是上一层的RF, R F n − 1 RF_{n-1} RFn1 是这一层的RF, k n k_n kn 表示卷积核大小,padding对感受野无影响。

使用hole算法后,卷积核大小变化
k = k + ( k − 1 ) ( h l o e   s i z e − 1 ) k = k + (k-1)(hloe\,size -1) k=k+(k1)(hloesize1)
以VGG16为例,计算感知野。
C o n v 1.1 R 1 = 3 , S 1 = 1 C o n v 1.2 R 2 = R 1 + ( 3 − 1 ) ∗ S 1 = 5 , S 2 = S 1 ∗ 1 = 1 P o o l 1 R 3 = R 2 + ( 2 − 1 ) ∗ S 2 = 6 , S 3 = S 2 ∗ 2 = 2 C o n v 2.1 R 4 = R 3 + ( 3 − 1 ) ∗ S 3 = 10 , S 4 = S 3 ∗ 1 = 2 C o n v 2.2 R 5 = R 4 + ( 3 − 1 ) ∗ S 4 = 14 , S 5 = S 4 ∗ 1 = 2 P o o l 2 R 6 = R 5 + ( 2 − 1 ) ∗ S 5 = 16 , S 6 = S 5 ∗ 2 = 4 C o n v 3.1 R 7 = R 6 + ( 3 − 1 ) ∗ S 6 = 24 , S 7 = S 6 ∗ 1 = 4 C o n v 3.2 R 8 = R 7 + ( 3 − 1 ) ∗ S 7 = 32 , S 8 = S 7 ∗ 1 = 4 C o n v 3.3 R 9 = R 8 + ( 3 − 1 ) ∗ S 8 = 40 , S 9 = S 8 ∗ 1 = 4 P o o l 3 R 10 = R 9 + ( 2 − 1 ) ∗ S 9 = 44 , S 10 = S 9 ∗ 2 = 8 C o n v 4.1 R 11 = R 10 + ( 3 − 1 ) ∗ S 10 = 60 , S 11 = S 10 ∗ 1 = 8 C o n v 4.2 R 12 = R 11 + ( 3 − 1 ) ∗ S 11 = 76 , S 12 = S 11 ∗ 1 = 8 C o n v 4.3 R 13 = R 12 + ( 3 − 1 ) ∗ S 12 = 92 , S 13 = S 12 ∗ 1 = 8 P o o l 4 R 14 = R 13 + ( 2 − 1 ) ∗ S 13 = 100 , S 14 = S 13 ∗ 2 = 16 C o n v 5.1 R 15 = R 14 + ( 3 − 1 ) ∗ S 14 = 132 , S 15 = S 14 ∗ 1 = 16 C o n v 5.2 R 16 = R 15 + ( 3 − 1 ) ∗ S 15 = 164 , S 16 = S 15 ∗ 1 = 16 C o n v 5.3 R 17 = R 16 + ( 3 − 1 ) ∗ S 16 = 196 , S 17 = S 16 ∗ 1 = 16 P o o l 5 R 18 = R 17 + ( 2 − 1 ) ∗ S 17 = 212 , S 18 = S 17 ∗ 2 = 32 f c 6 R 19 = R 18 + ( 1 − 1 ) ∗ S 18 = 212 , S 19 = S 18 ∗ 1 = 32 f c 7 R 20 = R 19 + ( 1 − 1 ) ∗ S 19 = 212 , S 20 = S 19 ∗ 1 = 32 Conv1.1\quad R_1 = 3,\quad S_1=1 \\ Conv1.2\quad R_2 = R_1 + (3-1)*S_1 = 5,\quad S_2=S_1 * 1 = 1 \\ Pool1\qquad R_3 = R_2 + (2-1)*S_2 = 6,\quad S_3=S_2 * 2 = 2 \\ Conv2.1\quad R_4 = R_3 + (3-1)*S_3 = 10,\quad S_4=S_3 * 1 = 2 \\ Conv2.2\quad R_5 = R_4 + (3-1)*S_4 = 14,\quad S_5=S_4 * 1 = 2 \\ Pool2\qquad R_6 = R_5 + (2-1)*S_5 = 16,\quad S_6=S_5 * 2 = 4 \\ Conv3.1\quad R_7 = R_6 + (3-1)*S_6 = 24,\quad S_7=S_6 * 1 = 4 \\ Conv3.2\quad R_8 = R_7 + (3-1)*S_7 = 32,\quad S_8=S_7 * 1 = 4 \\ Conv3.3\quad R_9 = R_8 + (3-1)*S_8 = 40,\quad S_9=S_8 * 1 = 4 \\ Pool3\qquad R_{10} = R_9 + (2-1)*S_9 = 44,\quad S_{10}=S_9 * 2 = 8 \\ Conv4.1\quad R_{11} = R_{10} + (3-1)*S_{10} = 60,\quad S_{11}=S_{10} * 1 = 8 \\ Conv4.2\quad R_{12} = R_{11} + (3-1)*S_{11} = 76,\quad S_{12}=S_{11} * 1 = 8 \\ Conv4.3\quad R_{13} = R_{12} + (3-1)*S_{12} = 92,\quad S_{13}=S_{12} * 1 = 8 \\ Pool4\qquad R_{14} = R_{13} + (2-1)*S_{13} = 100,\quad S_{14}=S_{13} * 2 = 16 \\ Conv5.1\quad R_{15} = R_{14} + (3-1)*S_{14} = 132,\quad S_{15}=S_{14} * 1 = 16 \\ Conv5.2\quad R_{16} = R_{15} + (3-1)*S_{15} = 164,\quad S_{16}=S_{15} * 1 = 16 \\ Conv5.3\quad R_{17} = R_{16} + (3-1)*S_{16} = 196,\quad S_{17}=S_{16} * 1 = 16 \\ Pool5\qquad R_{18} = R_{17} + (2-1)*S_{17} = 212,\quad S_{18}=S_{17} * 2 = 32 \\ fc6\qquad\quad R_{19} = R_{18} + (1-1)*S_{18} = 212,\quad S_{19}=S_{18} * 1 = 32 \\ fc7\qquad\quad R_{20} = R_{19} + (1-1)*S_{19} = 212,\quad S_{20}=S_{19} * 1 = 32 \\ Conv1.1R1=3,S1=1Conv1.2R2=R1+(31)S1=5,S2=S11=1Pool1R3=R2

  • 17
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值