前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《DeepLab V2》论文阅读

《DeepLab V2》论文阅读

作者头像
BBuf
发布2019-12-09 10:10:41
8210
发布2019-12-09 10:10:41
举报
文章被收录于专栏:GiantPandaCVGiantPandaCV

前言

昨天的推文《DeepLab V2》组织方式很不清晰,没有将关键结论以及空洞卷积这种方法的优点讲出来,所以重新组织了一下这篇论文的解读,希望可以带来不一样的体验。

背景

作者提到DeepLab系列面临三大挑战:

挑战一:为分类任务设计的DCNN中的多次Max-Pooling和全连接层会导致空间信息的丢失。在DeepLabV1中引入了空洞卷积来增加输出的分辨率,以保留更多的空间信息。

挑战二:图像存在多尺度问题,有大有小。一种常见的处理方法是图像金字塔,即将原图resize到不同尺度,输入到相同的网络,获得不同的feature map,然后做融合,这种方法的确可以提升准确率,然而带来的另外一个问题就是速度太慢。DeepLab v2为了解决这一问题,引入了ASPP(atrous spatial pyramid pooling)模块,即是将feature map通过并联的采用不同膨胀速率的空洞卷积层,并将输出结果融合来得到图像的分割结果。

挑战三:分割结果不够精细的问题。这个和DeepLabV1的处理方式一样,在后处理过程使用全连接CRF精细化分割结果。

同时,相比于DeepLabV1,DeepLabV2的backbone由V1的VGG16变成了ResNet,并带来了效果提升。最后DeepLabV2在PASCAL VOC 2012获得了SOAT结果。代码开源在http://liangchiehchen.com/projects。

网络结构

相比于DeepLabV1的输出步幅是16,需要双线性插值上采样16倍才可以得到预测结果,DeepLabV2的输出步幅是8,只需要上采样8倍,结果清晰了很多。

空洞/(膨胀)卷积

空洞卷积作用在一维信号时可以用公式1表示,其中x代表输入信号,w是卷积核系数,y是输出,其中k是输入信号维度,r是膨胀速率,如果r等于就退化为标准卷积。Fig.2表示空洞卷积的一维示意图:

其中Fig.2(a)表示表示标准卷积在低分辨率图上提取稀疏特征的示意图,底部为输入为3维向量,zeropadding=1,经kenel_size=3,stride=1的卷积后输出为3维。而Fig.2(b)在高分辨率输入5维图片上,zeropadding=2,膨胀速率2的膨胀卷积来采集密集特征的示意图,使用空洞卷积能提取到更多的密集特征,计算量较常规卷积基本保持不变。

在二维图像上的空洞卷积,论文给了另外一张图Fig3:

Fig.3中上分支是将输入图片下采样1/2后使用卷积核大小为7的标注卷积得到feature map后再上采样2倍得到结果。下分支是将原卷积函数中每个系数中间都插入0(rate=2),用空洞卷积在原图上直接进行卷积操作,这样省去了下采样和上采样的操作,而且计算量不变的情况下(卷积核中那些为0的系数在反向梯度计算中没有传递性),能得到更大的感受野,也就是说能获取到更多的密集特征,尤其是像素的边界信息,对比两个分支的输出可以得到印证。

从上面可以看到我们可以通过膨胀卷积的膨胀速率,随意控制特征图的感受野(FOV)大小。

ASPP模块

传统方法是把图像强行resize成相同的尺寸,但是这样会导致某些特征扭曲或者消失,这里联想到SIFT特征提取的时候用到过图像金字塔,将图像放缩到不同的尺度,再提取的SIFT特征点具有旋转,平移不变性。因此这里也是借鉴这种方式使用空间金字塔的方法,来实现对图像大小和不同长宽比的处理。这样产生的新的网络,叫做SPP-Net,可以不论图像的大小产生相同大小长度的表示特征。ASPP(多孔金字塔池化)就是通过不同的空洞卷积来对图像进行不同程度的缩放,得到不同大小的输入特征图,因为DeepLab的ASPP拥有不同rate的滤波器,再把子窗口的特征进行池化就生成了固定长度的特征表示。之前需要固定大小的输入图像的原因是全连接层需要固定大小。现在将SPP层接到最后一个卷积层后面,SPP层池化特征并且产生固定大小的输出,它的输出再送到全连接层,这样就可以避免在网络的入口处就要求图像大小相同。ASPP模块可以用下图表示:

训练细节

论文在ImageNet预训练的VGG-16和ResNet-101网络上进行finetune,将输出的1000类改成语义分割数据集的分类数,COCO和VOC都是21类,损失函数是CNN的输出(原图1/8大小)特征图和GT(同样下采样到1/8)的交叉熵损失和,每个位置在损失函数中的权重是相等的,并且使用SGD优化算法,后处理过程仍然使用和DeepLab V1一样的全连接CRF来进一步确定像素边界和分割结果。在训练时,作者分享了三个关键技术。

一,数据增强,参考Semantic contours from inverse detectors》将VOC 2012的训练集由1464扩增到10582张。

二,初始学习率、动量以及CRF参数的选取都类似于DeepLabv1,通过调整膨胀速率来控制FOV(field-of-view),在DeepLab-LargeFOV上,作者对学习率下降策略进行了不同的尝试,相对step的测试,poly在Batch_size=30,迭代20000次时能在VOC2012验证集上达到65.88%的mIOU(未做CRF后处理)。

三,二提到了LargeFOV,LargeFOV是指采用膨胀速率r=12的膨胀卷积策略,作者在VGG-16的fc6采用该膨胀卷积,并将fc7和fc8改为1x1的全卷积,命名为DeepLab-LargeFOV,作为对比,同时在VGG-16的fc6-fc8层用四路采用不同膨胀速率的膨胀卷积作用于各自的fc6,在fc7和fc8同样采用全卷积策略,命名为DeepLab-ASPP,根据膨胀卷积r的不同组合,r={2,4,8,12}的称为DeepLab-ASPP-S,r={6,12,18,24}的称为DeepLab-ASPP-L,如下图分别为VGG16上的DeepLab-LargeFOV和DeepLab-ASPP示意图:

如果不经过CRF,DeepLab-ASPP-S的效果会比DeepLab-LargeFOV mIOU超1.22%,经过CRF后两个的准确率相似,而ASPP-L则经过CRF前和后都超过LargeFOV大概2-3个百分点,具体数据如表3。

除了这些工作,论文还尝试了在COCO数据集上进行了测试,mIOU可以达到77.69%,具体可以参考原文,这个算法也是达到了当时的SOAT。

后记

可以看到DeepLabv2仍然存在两个阶段,即DCNN+CRF,后面我们会介绍DeepLabV3扔掉CRF并且精度更高,请期待一下。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GiantPandaCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档