deeplab系列总结(deeplab v1& v2 & v3 & v3+)

摘要:
事实上,在了解了以下v3和v3+之后,我们可以忽略它们(我的拙见)。在使用s=2之后在低分辨率特征图上执行标准对流的效果与在原始特征图上使用速率=2的增量对流的效果相同。在实践中,使用s=2+标准conv和rate=2的分化conv仅具有相同的相应感受野。

deeplab系列总结(deeplab v1& v2 & v3 & v3+)


Deeplab v1&v2
paper: deeplab v1 && deeplab v2

远古版本的deeplab系列,就像RCNN一样,其实了解了后面的v3和v3+就可以不太管这些了(个人拙见)。但是为了完整性和连贯性,所以读了这两篇paper。

Astrous conv

参考deeplab v2的插图。其实这个图经常可以看到,想说明什么呢?该图是一维卷积示意图。对于使用了s=2后的low resolution feature map再进行standard conv的效果和在原feature map上使用rate=2 的dilation conv是一模一样的。实际中使用s=2+standard conv和rate = 2的dilation conv仅仅是对应的感受野相同,并不是使用的像素点一样,这张图个人觉得有点障眼法的感觉。作者用了sparse/dense feature map的概念,其实就是low/high resolution feature map,直观上看起来分辨率低的当然稀疏啊。

ASPP结构

图右的结构,作者对比了单独的rate(左边结构),有不小的提升。多尺度进行dilation conv,其实RFBnet(2017 CVPR )对SSD的改进就是参考这个思路,inception + aspp。Receptive Field Block Net for Accurate and Fast Object Detection

v2用Resnet 101作为backbone,有一定提升,v1和v2都用了CRF。关于CRF的不再赘述了,其实后面的版本都没有用这个了。训练用的poly策略。

Deeplab v3
paper: Rethinking Atrous Convolution for Semantic Image Segmentation

implementation:  github

v3的创新点一是改进了ASPP模块;二是参考了图森组的Understanding Convolution for Semantic Segmentation中HDC的思想。其实就是对应纵横两种结构。backbone还是resnet 101.

论文中Fig2画了几种常见的捕获multi-scale context的方法。

(a)图像金字塔。输入图像进行尺度变换得到不同分辨率input,然后将所有尺度的图像放入CNN中得到不同尺度的分割结果,最后将不同分辨率的分割结果融合得到原始分辨率的分割结果,类似的方法为DeepMedic;

(b)编码-解码。FCN和UNet等结构;

(c)本文提出的串联结构。

(d)本文提出的Deeplab v3结构。最后两个结构右边其实还需要8×/16×的upsample,在deeplab v3+中有所体现。当然论文的Sec 4.1也有提到,下采样GT容易在反向传播中丢失细节,因此上采样feature map效果更好。

ASPP的改进

改进后的aspp长下图那个样子,多了个1*1的conv和global avg pool。关于1*1卷积,论文中3.3第一段解释的有点意思,当rate=feature map size时,dilation conv就变成了1*1 conv,所以这个1*1conv相当于rate很大的空洞卷积。此外引入了全局池化这个branch,这个思想是来源于PSPnet(参考博客),简言之就是spp在分割上的应用,多尺度pooling。根据代码实现来看,每个branch后面都没有relu,其实有没有BN,个人觉得不是很要紧,毕竟BN是线性操作,可以合并到conv里面,论文的Sec 4.1 说明了V3的所有层是用了BN的,BN可以加速训练还有弱正则,所以一般都会用。针对ASPP,作者设计了一种“纵式”的结构,如下图fig5。

"串联"结构

如下图所示,复制conv4的结构3次,后面的每个block都有一个基准dilation Rate,在每一个block里面参考HDC的思想,又设置了[1,2,1]的rate,所以每个conv的rate = Rate*rate.在论文4.2的Multi-grid部分详细进行了解释对比。

两种方法的结构合并并不会带来提升,相比较来说,aspp的纵式结构要好一点。所以deeplab v3一般也是指aspp的结构。

Deeplab v3+
paper:Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation

Implementation:github

在deeplab v3中说到了需要8×/16×的upsample 最终的feature map,很明显这是一个很粗糙的做法。

v3+的创新点一是设计基于v3的decode module,二是用modify xception作为backbone。

论文中同样给出了一幅对比图,(a)是v3的纵式结构,(b)是常见的编码—解码结构,(c)是本文提出的基于deeplab v3的encode-decode结构。

论文中介绍了两种backbone,一是Resnet101,二是改进后的xception。xception效果好于resnet,所以我只关注了xception,毕竟v3+主打也是xception backbone。下面从backbone和decode来简要概括v3+的结构。

Modify Xception

具体结构参照下图。和原来的xception不一样的地方有三,一是Middle flow重复了16次,ori xception是8次,也就是用了more layers;二是pooling均换为了dw+pw+s=2,本人在很多网络也实验过,把pool换成conv或者合并到现有的卷积层,均能提高一定的map。在Entry flow中stride =16,所以训练的时候需要把Exit flow的stride=2换为rate=2的dilation conv(Middle不改变resolution)(train_os=16),因此后面的层也都是rate=2,这又导致The Gridding Effect,然而论文4.3中说明了这个地方用HDC思想并不会带来提升,因此保留了一系列的rate=2;三是在所有的dw层后面加上了BN和relu,加BN无可厚非,线性操作而已,但是重新加relu是真的玄学啊。

Decoded module

xception的输出2048维特征接到ASPP上得到256维multi-scale context feature map(一般s=16),再4×上采样,和backbone上的同分辨率的low-level feature map concat(一般是entry flow的第一个shortcut block的输出,刚好s=4)。这个时候要让low-level feature map在concat后的总特征图中占比小,因为它的语义信息太少了,所以接了1*1的低维conv,这个地方可不是为了降低计算量,关于这个conv的channel选取,论文给出了对比试验Table 1。concat后再接3*3 conv block,它的channel和block个数,论文中也进行了实验验证Table 2.最后再进行4×上采样,达到原图的分辨率。此外,作者还实验了将aspp和decode中的卷积替换为depthwise conv,mIOU没有明显降低,flops大大降低了。

本人简绘了一下deeplab v3和v3+的ASPP模块结构,如下图所示:参照我贴的重实现的代码来看,ASPP每个部分后面均有relu。

官方给出过一个PPT,内容是关于deeplab v1,2.3的主要区别,链接: https://download.csdn.net/download/dlyldxwl/10557350
————————————————
版权声明:本文为CSDN博主「Dlyldxwl」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Dlyldxwl/article/details/81148810

免责声明:文章转载自《deeplab系列总结(deeplab v1& v2 & v3 & v3+)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vue 移动端添加 时间日期选择器Jmeter实践:一粒云项目—Jmeter获取文件列表与下载接口串联测试及上传文件与下载接口之间的串联测试(二十四)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

BIBTeX制作参考文献 [转]

LaTeX 对参考文献的处理有这么一些优点:1. 可以维护一个 bib 文件,在你的整个研究生涯可以只维护这样一个文件,就象一个数据库,每个参考文献是一个记录,由一个唯一的 ID (例如下面的 MartinDSP00)描述。比如我的 myreference.bib 文件里一条典型的文献是这样的:@article{MartinDSP00,author = "...

SQL Server 2008禁止修改表结构的解决办法

  近日在使用SQL Server 2008 Management Studio时遇到一个奇怪的问题,之前的数据库是用SQL Server 2005创建的,我将数据库文件复制到另外一台机器上,这台机器上安装的是SQL Server 2008,将数据库文件附加进来没有任何问题,但是当我打开SQL Server 2008的Management Studio,修...

koa的脚手架

1.什么是脚手架? 脚手架建成cli,koa的脚手架就是koa-cli 咱们之前在做koa框架开发的时候,会发现在一个项目中咱们的目录结构是非常清晰的,第三方包,模板,路由都会被规范到对应的文件夹中,但是在最后做项目的时候如果所有的文件和文件夹都需要自己创建,就会非常的麻烦,这时候koa中给咱们提供了一个叫做脚手架的东西; 什么是脚手架呢? 大家都知道盖...

Oracle(创建、修改、删除表)

1、数据类型(ROWID):行地址 rowid: 根据rowid获取某一元组:   2、表的创建 (1)方式一:create table  (2) 方式二: 当as后面的语句能够查询到数据的时候,不仅创建了表的结构而且查询到的数据也会自动添加到新创建的表内部: 查询表中是否有数据:  当as后面的语句不能查询到数据的时候,只创建表的结构,不会向表中添...

使用bee自动生成api文档

beego中的bee工具可以方便的自动生成api文档,基于数据库字段,自动生成golang版基于beego的crud代码,方法如下: 1、进入到gopath目录的src下执行命令: bee api api_user -conn=root:root@tcp(127.0.0.1:3306)/api api_user为api项目的名称,-conn指定链接的数据库...

QQ群web前端分析二——第一印象

对QQ群WEB进行前端分析 入口是 http://qun.qzone.qq.com/ 以下为第一印象,主要是从我的理解上找问题。 ---------------------------------------------------------------------------   一、页面响应时间,有点长, 从2,5,8原则上考虑还有优化空间, 功能跳...