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

相关文章

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

Java Stream的distinct去重原理分析

《JavaStream的distinct去重原理分析》Javastream中的distinct方法用于去除流中的重复元素,它返回一个包含过滤后唯一元素的新流,该方法会根据元素的hashcode和eq... 目录一、distinct 的基础用法与核心特性二、distinct 的底层实现原理1. 顺序流中的去重

Spring @Scheduled注解及工作原理

《Spring@Scheduled注解及工作原理》Spring的@Scheduled注解用于标记定时任务,无需额外库,需配置@EnableScheduling,设置fixedRate、fixedDe... 目录1.@Scheduled注解定义2.配置 @Scheduled2.1 开启定时任务支持2.2 创建

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意