前面这一段是我写的关于卷积和转置卷积的一些总结https://mp.csdn.net/editor/html/116109041。接下来我们讨论以下膨胀卷积。这个链接是老师关于膨胀卷积的一些讨论:https://zhuanlan.zhihu.com/p/372753977。

膨胀卷积和普通卷积不一样,膨胀卷积是对kernel元素之间进行空间插入。膨胀率往往是一个超参数d,然后有d-1个空格被插入kernel元素中。d=1的时候就对应我们的常规卷积操作。膨胀卷积用来在不增大kernelsize的情况下简单的扩大感受野,这在多个扩展卷积一个接一个堆叠时特别有效。

使用了膨胀卷积之后的输入尺寸和输入尺寸的关系还是比较好理解的。我们可以先把他想象成普通的kernel并计算出对应普通kernel的大小然后把kernelsize带进去就能够算出他们之间的关系了。(我们知道膨胀实际上是kernel之间插入d-1个空格。那么对应的传统kernel大小可以写成k+(k-1)*(d-1))

最后带入传统的卷积计算公式得到如下关系。

那么膨胀卷积在图像分割如何使用呢。我们知道像fcn和unet那种模型。都是要先通过pooling降低分辨率(pooling的实际作用是降低了分辨率减小了计算量同时扩大了感受野),然后在用transconv上采样回来原来的大小。这种做法实际上会损失一部分信息降低定位精度(pooling相当于认为设定在4个点中取一个点肯定会损失一些信息)。而deeplab模型是直接用膨胀卷积来代替pooling+transconv的操作,进行padding能够保证分辨率大小不变同时达到了pooling扩大感受野和pooling的减少计算量提速的效果。

那么deeplab中如何使用膨胀卷积呢。我们以vgg基础上使用为例(为什么不直接用ac->ac->ac多个膨胀卷积串联呢理论上可以但是实际效果不是很好,我们传统网络如vgg有预训练的参数所以直接拿过来用训练效果比较好)。

如图这个是一个传统的vgg模型。传统的vgg模型经过过了8次 pooling然后接全链接层,进行分类的。deeplab在次基础上做了一些调整。如图28*28尺度的时候也就是缩小了8倍的时候,deeplab的做法是不在进行缩小了,因为如果继续缩小会丢失更多的细节信息。而是使用膨胀卷积来代替。把原来14*14那里的换成dialation=2的膨胀卷积,把原来7*7那里的换成dialation=4的膨胀卷积,这里注意一下maxpooling并没有被移除掉,而是把原来的maxpooling的stride=2改成了stride=1。

我认为这里第3个第4个还是原来的conv?(没有确认,后面确认后在改下这里),然后接一个d=4的conv。最后把相应的全链接改成全卷积。最终得到28*28的特征图,直接进行双线性插值上采样8倍(这里和fcn相比28*28的特征图是更加精细的所以可以直接上采样8倍)。最后将上采样8倍后的结果利用条件随机场CRF进行处理得到最终结果。

那么CRF该如何理解呢。(虽然CRF在deeplab++后就被取消掉了。我的理解是CRF是传统的机器学习的过程,而前面的DCNN+双线性插值是我们提取特征的过程,先提取出特征再用CRF左处理得到最终比较精细的分割结果)

E(x)是一个能量场。表示的是指取groudtruth的时候各个像素取对应类别的时候的联合概率的一个能量,能量越小越接近真实。我们发现E(x)由两部分组成。前一项是theta的一个累加值,一个thetai是指在i位置取对应类别的概率(这个概率是前面dcnn求得的特征图得到的,特征图是一个w*h*类别的tensor),根据log的加法实际上是将里面的值进行连乘,所以就是所有像素取对应类别同时发生的一种概率情况。(这里有个问题待讨论:这里的dcnn是训练好了的?我们直接拿求得的特征值来用的?还是在求这个能量的时候要同时进行优化的?)。这个公式还有第二项,第二项里面是求不同像素点直接建立的一种关系(i=j的时候是取0的),这里的w1,w2也是可训练的,然后我们看到公式里面有pi-pj这个是考虑进两个像素点之间的位置距离,Ii-Ij是考虑进两个像素点之间的灰度值差距。(所以我们这里公式要求的是不是只是w1,w2呢?关于crf的理解也可以参考老师的这个链接https://zhuanlan.zhihu.com/p/372759285)

作者在deeplabv1的时候已经做了一系列的实验,实验结果如下图

我们发现使用MSC(多尺度融合)以及dcnn的时候使用7*7(这里是指没有用4*4或3*3加速)的卷积以及使用largefov(大感受野,其实就是用更大的膨胀卷积)能够取得更好的性能。其中更大的膨胀卷积能够取得和7*7一样的效果(这里直接inputstride=12了)。所以作者在做v2的时候结合了这样的实验结论做了优化。总结来说做了以下几点

  1. aspp,采用了多个尺寸的膨胀卷积进行融合操作(参考了spp),集合了上面结论(largeFov和Msc的效果)
  2. 将vgg改成用resnet来代替
  3. 训练策略改变。使用的学习率下降公式做了调整

如图在用膨胀卷积的时候用了不同的rate,输入是一个m*m*c的特征图,最后输出也是一个m*m*c的特征图

训练策略上对学习率的公式做了调整。学习率的更新每次乘以这个系数

我们发现在deeplabv2的时候作者依然没有舍弃掉crf这一步操作。到deeplabv3的时候则彻底舍弃了这一步

先截一个栅格化的图,这个是膨胀的时候直接2,2,2串联导致的。我们前面提到膨胀卷积d=2的时候前面必定要有一个d=1的,这样在d=2的那一层才不会出现空洞。所以这里引入了multigrid概念。v3和v2的变化主要是充分利用了resnet,然后用了multigrid概念,不在用crf

如图使用的是v3,如图block实际对应的是resnet的block,分别对应resnet的block1,block2,block3,block4,block4,block4,block4.因为resnet没有block5哈哈。这里的rate和我们的multi-grid有关,mutigrid的设计,比如用resnet101他对应的layer4层是3个block原来用dialation=【2,2,2】我们发现容易出现栅格化(这个前面将过,dialation变大前最好有比较小的来组合),所以我们用mutigrid=【1,2,4】,然后乘以rate。比如下图【2,4,8】远远好于之前【2,2,2】那种格式缓解了栅格问题

Modified aspp 在原来aspp基础上增加了1x1和imagepooling最后将他们给concat。

最后移除了crf,发现用了crf已经没有提升了,所以干脆将crf可以移除掉了

对于v3+,作者借鉴了fcn之前的思想,把浅层的特征与深层的特征图进行了融合,然后在上采样的操作。同时使用了深度可分离卷积进行了加速操作(深度可分离卷积主要作用是减少了训练参数量,可以参考下mobilenet的思想)

deeplab相关理解相关推荐

  1. Pytorch的backward()相关理解

    Pytorch的backward()相关理解 最近一直在用pytorch做GAN相关的实验,pytorch 框架灵活易用,很适合学术界开展研究工作.  这两天遇到了一些模型参数寻优的问题,才发现自己对 ...

  2. Henry前端笔记之 UI组件库中table与slot相关理解

    Henry前端笔记之 UI组件库中table与slot相关理解 作用域插槽: 解构赋值基础:https://developer.mozilla.org/zh-CN/docs/Web/JavaScrip ...

  3. Android:Window相关理解

    文章目录 一.Window概述 Window概念 Window和DecorView 二.Window属性和类型 Window的类型 应用窗口 子窗口 系统窗口 Window的属性 type参数 Fla ...

  4. 【学习点滴】网络相关理解与http协议

    目录 http的连接: http报文格式: http请求方法 cookie和session referer: 长连接和短连接 http状态码 https建立连接的过程: http缓存 1. 优点 2. ...

  5. SAP MDG简介相关理解

    文章目录 MDM(Master Data Management)和MDG(Master Data Governance)的区别是什么? 从技术角度看SAP MDG是一个怎样的系统? SAP MDG是一 ...

  6. [7]云计算相关-理解云计算|角色与边界|云使能技术|unit4云安全|云安全威胁|威胁作用者

    目录 一.云计算与边缘计算 二.商业驱动力 2.1容量规划 容量 过度配置 配置不足 重点 2.2降低成本 2.3组织灵活性 三.云计算的技术创新 四.一些云特性 五.角色 5.1云提供者(cloud ...

  7. linux 用户文件字段解释,0220自学Linux_逻辑理解用户进程权限相关+理解文件内各字段(passwd,shadow,group)(示例代码)...

    11 内核是真正意义上的操作系统 库有动态库也有静态库,Linux的动态库是.so后缀的,也称为共享库 库是不能够独立运行的,只能被调用 Window的动态库是.dll后缀的 我们平时所谓的安装操作系 ...

  8. 关于IP、子网掩码、网关、和DNS相关理解

       在internet中!为了能够识别通信中的电脑主机,Internet中的每一太主机都分配有一个唯一的32位地址,即为-IP地址.亦为网际地址.IP地址由4部分组成,每个数可以取值0~255,各数 ...

  9. 解决问题的经验-javaweb-第一次-已掌握技术栈大致总结(部分),和相关理解,总结,以及对未来学习方向的规划

    学习Javaweb的相关总结以及对未来学习方向的规划:{这很重要} 技术性总结 ** 后端方面 ** 1,基础的jsp+servlet 基础中的基础,但不完全推荐jsp,需要视情况而定 .jsp的九大 ...

最新文章

  1. git 拉新项目_git上拉取项目
  2. 混沌模型时间序列预测
  3. 数学--数论--HDU 12151七夕节
  4. java ant war包_java利用Ant脚本生成war包全过程
  5. 链表简单实现(增删查改)
  6. Python入门方法--简单总结+学习方式思考
  7. shell命令一览表
  8. 明年起Polkascan不再为Kulupu提供服务
  9. UEditor 实现新增“转换简体”和“转换繁体字”按钮功能
  10. csol永恒python使用技巧大全_小甲鱼Python第028讲集合:因为懂你,所以永恒 | 课后测试题及参考答案...
  11. php ci CodeIgniter框架图片缩略图处理类优化 缩放到固定大小
  12. 设计模式:里氏替换原则(详解)
  13. 一款对话网页游戏-对话部分
  14. 每个互联网人才都应该知道的SQL注入
  15. 如何选择适合自己的研究方法?定性vs定量vs混合方法研究
  16. Allegro学习进行时
  17. 【Linux】修改文件或文件夹权限的命令
  18. asp.net分页查询
  19. React中使用useState数据异步问题解决方法
  20. 还在为仓库杂乱发愁?教你ABC仓库管理分类法!

热门文章

  1. 2019地理科学大会上的演讲稿(节选):空间大数据下的智慧地理信息
  2. 如何通过origin压缩进行压缩图片
  3. 嵌入式linux之按键驱动(platform)
  4. 湖南省计算机二级考试 程序题填空题 百钱百鸡,09年计算机二级辅导:C++百钱百鸡问题的解决方法...
  5. Oracle Trace File Analyzer 介绍及简单使用
  6. 华阳车机DNB417的不开机故障修理
  7. 拉普拉斯(Laplace)分布
  8. 在ubuntu中 播放rmvb格式电影
  9. 汇编语言期末重点知识点总结
  10. 编程思想-模块化-模块化设计:模块化设计