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

article/2025/10/23 17:18:23

最近花了几天时间把deeplab系列撸了一遍,直观感受是不如当初看RCNN系列来的激动啊......像RPN这种划时代的改变没有看到--直奔主题。

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


http://chatgpt.dhexx.cn/article/GNPQ4Qn0.shtml

相关文章

我对DeepLab V3的理解(基于V1和V2)

一、概述 1.前言 1.1 DeepLab v1 创新点&#xff1a; 空洞卷积&#xff08;Atrous Conv&#xff09;; <解决编码过程中信号不断被下采样&#xff0c;细节丢失的问题> 全连接条件随机场&#xff08;Fully-connected Conditional Random Field&#xff09;。 <由于co…

deeplab介绍

■ 论文 | Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation ■ 链接 | https://www.paperweekly.site/papers/1676 DeepLab 是结合了深度卷积神经网络&#xff08;DCNNs&#xff09;和概率图模型&#xff08;DenseCRFs&#xff09;的方法…

DeepLab一家

DeepLab是谷歌为了语义分割又做的一系列工作&#xff0c;在多个开源数据集中都取得了不错的成果&#xff0c;DeepLabv1发表于2014年&#xff0c;后于2016、2017、2018分别提出了V2&#xff0c;V3以及V3的版本&#xff0c;在mmsegmentation里面主要集成了V3以及V3的版本&#xf…

深度学习论文精读[13]:Deeplab v3+

Deeplab v3是Deeplab系列最后一个网络结构&#xff0c;也是基于空洞卷积和多尺度系列模型的集大成者。相较于Deeplab v3&#xff0c;v3版本参考了UNet系列网络&#xff0c;对基于空洞卷积的Deeplab网络引入了编解码结构&#xff0c;一定程度上来讲&#xff0c;Deeplab v3是编解…

语义分割网络系列3——DeepLab

DeepLab 1 介绍1.1 背景1.2 Deeplab V1介绍1.3 结构1.4 特点1.4.1 空洞卷积的使用1.4.2 CRF的应用 1.5 DeepLab系列总结 2 代码3 总结参考资料 1 介绍 相比于传统的视觉算法(SIFT或HOG)&#xff0c;Deep-CNN以其end-to-end方式获得了很好的效果。这样的成功部分可以归功于Deep…

DeepLabV3网络简析

论文名称&#xff1a;Rethinking Atrous Convolution for Semantic Image Segmentation 论文下载地址&#xff1a;https://arxiv.org/abs/1706.05587 非官方Pytorch实现代码&#xff1a;pytorch_segmentation/deeplab_v3 视频讲解&#xff1a;https://www.bilibili.com/video/…

DeepLab系列(v1,v2,v3,v3+)总结

U-net: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation 语义分割面临的挑战1. DeepLab v1——《Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs》&#xff08;ICLR 2015&#xff0c;谷歌&#xff09;2. Deep…

一文理解DeepLab V1到DeepLab V3+(超系统、超详细)

文章目录 预备知识空洞卷积 1、DeepLab V11.1 基于VGG模型1.2 总体架构1.2.1 Fully Connected CRF&#xff08;条件随机场&#xff09; 1.3 DeepLab V1模型实验 2、DeepLab V22.1 整体架构2.2 训练策略2.2.1 学习率的调整 3、DeepLab V33.1 cascade形式的DeepLab V33.2 paralle…

微信小程序+SpringBoot接入后台服务,接口数据来自后端

文章底部有个人公众号&#xff1a;小兔教你学编程。主要目的是方便阅读。主要分享一些前后端初中级知识、开发实战案例、问题解决等知识。 前言 前两天开发了一个微信小程序项目&#xff0c;只不过接口数据是自己设置的假数据。然后我就想将这些假数据替换掉。这些数据来自接口…

Python3 - 三天学会微信小程序(Python后端研习)

文章目录 一、day01微信小程序1. 问题2. 环境的搭建2.1 Python环境2.2 小程序环境2.2.1 申请一个微信公众平台2.2.2 保存自己的appid2.2.3 下载开发者工具2.2.4 创建项目 3. 开发小程序3.1 全局配置3.2 组件3.2.1 text3.2.2 view3.2.3 image 3.3 样式3.3.1 4. flex布局5. 实战 …

微信小程序快速搭建

1 1. 申请账号 申请账号 1. 进入小程序注册页根据指引填写信息和提交相应的资料&#xff0c;完成账号申请。 说明&#xff1a; 如果跳转后页面出现错误&#xff0c;请刷新访问。 2. 使用申请的微信公众平台账号登录小程序后台&#xff0c;单击开发 > 开发设置&#xff0c;…

【微信小程序】前端+后端 :第一篇(基于javaweb 案例)

博主&#xff1a;&#x1f44d;不许代码码上红 欢迎&#xff1a;&#x1f40b;点赞、收藏、关注、评论。 文章目录 一、创建javaweb&#xff08;idea&#xff09;二、servlet代码三、配置tomcat四、微信小程序端4.1、创建一个新的页面pages4.2、demo2.js4.3、demo2.wxml 五、运…

怎样创建微信小程序?创建小程序难不难?

小程序现在为众多的企业商家提供了营销上的巨大帮助&#xff0c;小程序也已经成为了这些企业商家的标配&#xff0c;即使是初创的企业商家都会先去了解怎样创建微信小程序&#xff0c;创建小程序难不难等问题&#xff0c;那么下面就给大家分享怎样创建微信小程序&#xff0c;创…

uniapp和springboot微信小程序开发实战:后端架构搭建之创建springboot项目

文章目录 使用STS创建boot项目引入项目依赖配置相关信息配置tomcat配置redis配置mysql数据库6.启动服务验证搭建环境使用STS创建boot项目 打开STS,新建Spring Starter Project项目,出现如下所示界面,根据提示填写图片上需要填写的内容。 引入项目依赖 <!-- redis -->…

微信小程序商城搭建小程序服装购物商城+后台

&#x1f345;文末获取联系&#x1f345; 目录 一、项目介绍 5.2.1 小程序端总体框架 二、项目相关截图 三、源码获取 一、项目介绍 计算机毕业设计微信小程序毕设项目之微信小程序服装商城后台管理系统_哔哩哔哩_bilibili计算机毕业设计微信小程序毕设项目之微信小程序服…

微信小程序搭建怎么做?流程是怎么样?【小程序搭建】

随着微信的日益普及&#xff0c;小程序成为了企业必备的营销工具。而在这个过程中&#xff0c;企业也需要搭建一个自己的小程序来进行推广和销售产品或服务。那么微信小程序搭建怎么做呢&#xff1f; 流程一&#xff1a;小程序账号的注册 注册小程序账号有两种方式&#xff1…

基于Python Django框架后端的微信小程序开发

刚做完一个股票信息服务类的微信小程序&#xff08;小程序名字“博股论基”&#xff0c;大家有兴趣可以搜一下&#xff09;&#xff0c;也有一些心得&#xff0c;在这里记录一下开发过程&#xff0c;算是个开发笔记&#xff0c;同时也希望能给需要的同学一些帮助。 ----------…

非常曲折的新手小白微信小程序springboot后端部署阿里云ESC服务器经历

最近因为参加了大学生“互联网”大赛&#xff0c;需要搭建微信小程序&#xff0c;但发现小程序云开发环境居然收费了&#xff01;于是转战springboot完成后端搭建&#xff0c;再用阿里云送的7个月学生免费服务器部署代码&#xff08;高校计划 - 免费学生云服务器&#xff09; 领…

微信小程序登录注册--python搭建后端

这个程序不连数据库&#xff0c;所以一旦python程序重启前面的注册就没用了 这个程序不连数据库&#xff0c;所以一旦python程序重启前面的注册就没用了 这个程序不连数据库&#xff0c;所以一旦python程序重启前面的注册就没用了 这里无脑简单介绍一下这个low到爆炸的小程序…

微信小程序入门04-后端脚手架搭建

我们上一篇已经介绍了权限系统的库表搭建&#xff0c;光有表还是不够的&#xff0c;我们还需要有一个后台系统和数据库进行交互。搭建后台的时候既需要选择使用什么语言&#xff0c;也需要选择框架。 框架分为前端框架和后端框架。在第一篇微信开发者工具搭建的时候我们其实前…