1.deeplabv3+网络结构及原理

2024-02-23 13:20

本文主要是介绍1.deeplabv3+网络结构及原理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

         这里的网络结构及原理可以看这篇博客,DeepLabV3+: 在DeepLabV3基础上引入了Decoder_matlab deeplabv3+resnet101-CSDN博客该博客翻译原论文解释得很清楚。

一、引言

       语义分割的目标是为图像中的每个像素分配语义标签。在这项研究中,考虑了两种类型的神经网络:使用了空间金字塔池化的模块、编解码器结构;前者可以通过在不同分辨率下汇集特性来获取丰富的上下文信息,后者能够获得清晰的物体边界。

       为了在不同尺度下获得上下文信息,DeepLabv3使用了几个并行的不同速率的空洞卷积(空洞空间金字塔池化,ASPP);而PSPNet则是在不同网格尺度上执行池化操作。尽管在最后一个feature map上编码了丰富的语义信息,但由于在网络backbone中使用了带有步长的池化或者卷积操作,与物体边界相关的细节信息却丢失了。这个问题,可以通过使用空洞卷积提取密集的feature maps来改善。

         DeepLabv3+,通过增加一个简单有效的解码器模块扩展了DeepLabv3,以恢复物体边界。在DeepLabv3的输出中,已经编码了丰富的语义信息,其使用空洞卷积来控制编码特征的密度,这取决于计算资源。此外,解码器模块可以恢复详细的物体边界。本质上deeplabv3+就是deeplabv3加上一个decoder.

        总体来讲,贡献如下:

  1. 在DeepLabv3基础上,加了一个解码器;
  2. 可以通过控制空洞卷积速率来任意改变编码器输出的feature map分辨率;
  3. 使用Xception作为backbone(也可使用ResNet101等),并在ASPP和解码器模块中使用了深度可分离卷积,从而产生了一个更快、更强的编解码网络;
  4. 该模型达到了新的SOTA;
  5. 开源了代码;

二、网络结构

       DeepLabV3+的网络结构如下图所示,主要为Encoder-Decoder结构。

        Encoder-decoder: 编解码结构已经被用于多种计算机视觉任务,如人体姿态估计、目标检测、语义分割。通常,编码器-解码器网络包含(1)一个编码器模块(Encoder),逐步减少特征映射并捕获更高的语义信息,(2)一个解码器模块(Decoder),逐步恢复空间信息。在此基础上,我们提出了使用DeepLabv3作为编码器模块,并添加一个简单而有效的解码器模块,以获得更清晰的分割。

1.Encoder

       在encoder部分,主要包括了backbone(DCNN)、ASPP两大部分。encoder中连接的第一个模块是DCNN, 他代表的是用于提取图片特征的主干网络,DCNN右边是一个ASPP网络,他用一个1*1的卷积、3个3*3的 空洞卷积和一个全局池化来对主干网络的输出进行处理。然后再将其结果都连接起来并用一个1*1的卷积 来缩减通道数。具体如下:

  • 其中backbone有两种网络结构:将layer4改为空洞卷积的Resnet系列、改进的Xception。从backbone出来的feature map分两部分:一部分是最后一层卷积输出的feature maps,另一部分是中间的低级特征的feature maps;backbone输出的第一部分送入ASPP模块,第二部分则送入Decoder模块。
  • ASPP模块接受backbone的第一部分输出作为输入,使用了四种不同膨胀率的空洞卷积块(包括卷积、BN、激活层)和一个全局平均池化块(包括池化、卷积、BN、激活层)得到一共五组feature maps,将其concat起来之后,经过一个1*1卷积块(包括卷积、BN、激活、dropout层),最后送入Decoder模块。

       可分离空洞卷积的优点:

  • 减小计算量,是普通卷积计算量的1/9;
  • 扩大感受野:神经网络加深,单个像素感受野扩大,但特征图尺寸缩小,空间分辨率降低,为此,空洞卷积出现了,一方面感受野大了可以检测分割大目标,另一方面分辨率高了可以精确定位目标。
  • 捕获多尺度上下文信息:两列之间填充 (r-1) 个0,这个 r 可自己设置,不同 r 可得到不同尺度信息。
2.Decoder

      在Decoder部分,接收来自backbone中间层的低级feature maps和来自ASPP模块的输出作为输入。

  • 首先,对低级feature maps使用1*1卷积进行通道降维,从256降到48(之所以需要降采样到48,是因为太多的通道会掩盖ASPP输出的feature maps的重要性,且实验验证48最佳);
  • 然后,对来自ASPP的feature maps进行插值上采样,得到与低级featuremaps尺寸相同的feature maps;
  • 接着,将通道降维的低级feature maps和线性插值上采样得到的feature maps使用concat拼接起来,并送入一组3*3卷积块进行处理;
  • 最后,再次进行线性插值上采样,得到与原图分辨率大小一样的预测图。
3.Xception

Xception网络结构如下:

        Xception网络是由inception结构加上depthwise separable convlution,再加上残差网络结构改进而来。Xception结构由36层卷积层组成网络的特征提取基础,分为Entry flow,Middle flow,Exit flow;被分成了14个模块,除了第一个和最后一个外,其余模块间均有线性残差连接。

        Xception结构演变:(轻量化网络结构——Xception_xception网络结构-CSDN博客

        Xception 并不是真正意义上的轻量化模型,是Google继Inception后提出的对Inception v3的另一种改进,主要是采用depthwise separable convolution来替代原来的Inception v3中的卷积操作,这种性能的提升是来自于更有效的使用模型参数而不是提高容量。

        既然是在Inception v3上进行改进的,那么Xception是如何一步一步的从Inception v3演变而来。Inception v3结构如下图1(这个网络结构是最基础的google提出的inceptuon网络结构的改进,大家可以查找资料进一步了解)

注:1x1卷积的作用: 1)降维:较少计算量 2)升维:小型网络,通道越多,效果会更好 3)1x1是有一个参数学习的卷积层,可以增加跨通道的相关性。

下图简化了上图的inception module(就只考虑1x1的那条支路,不包含Avg pool)如下:

       下图把上图的第一部分的3个1x1卷积核统一起来,变成1个1x1的卷积核,然后连接3个3x3的卷积,这3个卷积操作只将前面1x1卷积结果中的一部分作为自己的输入(只负责一部分通道)。

       下图An“extreme” version of Inception module,先用1x1卷积核对各通道之间(cross-channel)进行卷积,之后使用3x3的卷积对每个输出通道进行卷积操作,也就是3x3卷积的个数和1x1卷积的输出channel个数相同。

        在Xception中主要采用depthwise separable convolution,和原版的相比有两个不同之处:
(1)原版的Depthwise convolution,先是逐通道卷积,再1x1卷积;而Xception是反过来,先1x1卷积,再逐通道卷积。
(2)原版Depthwise convolution的两个卷积之间是不带激活函数的,而Xception再经过1x1卷积之后会带上一个Relu的非线性激活函数。

三、结论

        我们提出的模型“DeepLabv3+”采用了编码器-解码器结构,其中使用DeepLabv3对丰富的上下文信息进行编码,采用简单有效的解码器模块恢复对象边界。也可以根据可用的计算资源,应用空洞卷积以任意分辨率提取编码器特征。还对Xception模型和空洞可分离卷积进行了研究,使所提出的模型更快、更强。最后,我们的实验结果表明,所提出的模型在PASCAL VOC 2012和Cityscapes数据集达到SOTA。

        一句话总结DeepLabV3+:

        DeepLabv3作为Encoder提取特征,上采样后与backbone中间的低级特征以concat的方式融合,然后利用3*3卷积获得细化的特征,最后再进行上采样恢复到原始分辨率;在backbone部分,使用可分离卷积改进了Xception。

       本质上,DeepLabV3+就是DeepLabV3加上一个decoder。

这篇关于1.deeplabv3+网络结构及原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/738781

相关文章

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

hdu4407容斥原理

题意: 有一个元素为 1~n 的数列{An},有2种操作(1000次): 1、求某段区间 [a,b] 中与 p 互质的数的和。 2、将数列中某个位置元素的值改变。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.Inpu

hdu4059容斥原理

求1-n中与n互质的数的4次方之和 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWrit

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类

TL-Tomcat中长连接的底层源码原理实现

长连接:浏览器告诉tomcat不要将请求关掉。  如果不是长连接,tomcat响应后会告诉浏览器把这个连接关掉。    tomcat中有一个缓冲区  如果发送大批量数据后 又不处理  那么会堆积缓冲区 后面的请求会越来越慢。

PHP原理之内存管理中难懂的几个点

PHP的内存管理, 分为俩大部分, 第一部分是PHP自身的内存管理, 这部分主要的内容就是引用计数, 写时复制, 等等面向应用的层面的管理. 而第二部分就是今天我要介绍的, zend_alloc中描写的关于PHP自身的内存管理, 包括它是如何管理可用内存, 如何分配内存等. 另外, 为什么要写这个呢, 因为之前并没有任何资料来介绍PHP内存管理中使用的策略, 数据结构, 或者算法. 而在我们

Smarty模板执行原理

为了实现程序的业务逻辑和内容表现页面的分离从而提高开发速度,php 引入了模板引擎的概念,php 模板引擎里面最流行的可以说是smarty了,smarty因其功能强大而且速度快而被广大php web开发者所认可。本文将记录一下smarty模板引擎的工作执行原理,算是加深一下理解。 其实所有的模板引擎的工作原理是差不多的,无非就是在php程序里面用正则匹配将模板里面的标签替换为php代码从而将两者

Restful API 原理以及实现

先说说API 再说啥是RESRFUL API之前,咱先说说啥是API吧。API大家应该都知道吧,简称接口嘛。随着现在移动互联网的火爆,手机软件,也就是APP几乎快爆棚了。几乎任何一个网站或者应用都会出一款iOS或者Android APP,相比网页版的体验,APP确实各方面性能要好很多。 那么现在问题来了。比如QQ空间网站,如果我想获取一个用户发的说说列表。 QQ空间网站里面需要这个功能。

laravel框架实现redis分布式集群原理

在app/config/database.php中配置如下: 'redis' => array('cluster' => true,'default' => array('host' => '172.21.107.247','port' => 6379,),'redis1' => array('host' => '172.21.107.248','port' => 6379,),) 其中cl