DeepLab V3学习笔记

news2024/11/18 3:42:21

DeepLab V3

  • 遇到的问题和解决方法
    • 相关工作
  • DeepLab V3中的两种模型结构
    • cascaded model
    • ASPP model
  • 相对于DeepLab V2的优化
    • Multi-grid Method
    • ASPP的改进
  • 消融实验
    • cascaded model消融实验
    • ASPP model消融实验
    • 和其他网络的对比
  • 实验总结
  • 网络模型图

遇到的问题和解决方法

对于DeepLab系列的文章它们想解决的问题都是一致的

分辨率被降低(主要由于下采样stride>1的层导致)
目标的多尺度问题

相关工作

针对于上边的问题,在DeepLab V3出现了一些相较于V2的一些优化,比如去掉了CRF,因为CRF虽然是有提升,但是提升已经是非常小了,但是它的花费相对于其他的不是一个数量级,下边讲对于模型和优化进行详细的说明。

在这里插入图片描述
作者整理了目前已经出现的几种多尺度的方法:

  • 第一种:图像金字塔,即将输入图像缩放成不同比例,将预测结果融合得到最后输出。
  • 第二种:Encoder-Decoder:类似于U-Net,即将Encoder阶段的多尺度特征运用到Decoder阶段上来恢复空间分辨率。
  • 第三种:在原始模型的顶端叠加额外的模块,利用空洞卷积以捕捉像素间长距离信息。
  • 第四种:多尺度捕获信息。用不同的采样率捕获信息,在多个尺度上进行空洞卷积/池化。起到了提取多尺度特征的作用。

DeepLab V3中的两种模型结构

在本文中作者提出了两种不同的结构,而且在后边进行的实验的结果中也会有两种不同模型的一个性能对比,第一种模型叫做cascaded model,第二种叫ASPP model,目前在github复现的代码中,主要还是ASPP model,而且作者对于两个网络的评价也是ASPP model的性能要比cascaded model效果更佳的好。
在这里插入图片描述

cascaded model

在这篇文章中,大部分实验都是围绕这个模型来做的,如下图所示(文章中的model指的是b),对于下图的Block1,2,3,4都是ResNet网络中原始的模块(Block4 中第一个残差结构里的3 * 3的卷积层和捷径分支上的1 * 1的卷积层的 stride从2变成了1这样图片就不会下采样,后续是额外新增加的一些模块,不过对于Block5,6,7它们的结构都是Block是一样的,不过它们的卷积都换成了膨胀卷积。另外说明一下,图中的rate=2并不代表最后的膨胀系数是2, 真正采用的膨胀系数应该是图中的rate乘上Multi-Grid参数,比如Block4中rate=2,Multi-Grid=(1, 2, 4)那么真正采用的膨胀系数是2 x (1, 2, 4)=(2, 4, 8)。关于Multi-Grid参数后面会提到。
在这里插入图片描述

作者将output_stride从8到256都设置,但是将output_stride设置太大,效果就会变差,但是可能是当时的显存不足,原论文中将output_stride设置为16(训练设置为16,测试是8),但是目前Github复现都将output_stride设置为8(训练和测试都是8)。

在这里插入图片描述

ASPP model

在这里插入图片描述
对于ASPP model和上边那个模型同样的问题,对于output_stirde都是设置为8。
对于ASPP的改进详情参考下边。

相对于DeepLab V2的优化

Multi-grid Method

在这里插入图片描述
作者测试了不同的Multi-Grid,看看如何设置更加的合理(炼丹),上表是以cascaded model(ResNet101作为Backbone为例)为实验对象,研究采用不同的Multi-Grid参数的效果。注意,刚刚在讲cascaded model时有提到,blocks中真正采用的膨胀系数应该是图中的rate乘上这里的Multi-Grid参数。通过实验发现,当采用三个额外的Block时(即额外添加Block5,Block6和Block7)将Multi-Grid设置成(1, 2, 1)效果最好。另外如果不添加任何额外Block(即没有Block5,Block6和Block7)将Multi-Grid设置成(1, 2, 4)效果最好,因为在ASPP model中是没有额外添加Block层的,后面讲ASPP model的消融实验时采用的就是Multi-Grid等于(1, 2, 4)的情况。

ASPP的改进

在这里插入图片描述
对比V2和V3中的ASPP结构。V3中的ASPP结构有5个并行分支,分别是一个1x1的卷积层,三个3x3的膨胀卷积层,以及一个全局平均池化层(后面还跟有一个1x1的卷积层,然后通过双线性插值的方法还原回输入的W和H)。关于最后一个全局池化分支作者说是为了增加一个全局上下文信息global context information。然后通过Concat的方式将这5个分支的输出进行拼接(沿着channels方向),最后在通过一个1x1的卷积层进一步融合信息。

消融实验

cascaded model消融实验

在这里插入图片描述

  • OS代表上文中讲到的output_stride,从图中可以发现8比16高了接近1.5个点
  • MS代表多尺度,和DeepLabV2中类似,不过在DeepLab V3中采用的尺度更多scales = {0.5, 0.75, 1.0, 1.25, 1.5, 1.75}。
  • Flip代表增加一个水平翻转后的图像输入。

ASPP model消融实验

在这里插入图片描述

  • MG代表Multi-Grid,刚刚在上面也有说在ASPP model中采用MG(1, 2, 4)是最好的。
  • Image Pooling代表在ASPP中加入全局平均池化层分支(本来就属于那个ASPP中的一个分支)。
  • OS代表output_stride,刚刚在上面也有提到将output_stride设置成8效果会更好
  • MS代表多尺度,和DeepLabV2中类似,不过在DeepLab V3中采用的尺度更多scales = {0.5, 0.75, 1.0, 1.25, 1.5, 1.75}。
  • Flip代表增加一个水平翻转后的图像输入。
  • COCO代表在COCO数据集上进行预训练。

和其他网络的对比

在这里插入图片描述

实验总结

对于上图中发现DeepLab V3比V2提高了接近6个点,在论文中的 Effect of hyper-parameters 部分中提到了一些询问的小细节:

  • 在训练过程中增大了训练输入图片的尺寸(论文中有个观点大家需要注意下,即采用大的膨胀系数时,输入的图像尺寸不能太小,否则3x3的膨胀卷积可能退化成1x1的普通卷积。)
  • 计算损失时,是将预测的结果通过上采样还原回原尺度后(即网络最后的双线性插值上采样8倍)再和真实标签图像计算损失。而之前在V1和V2中是将真实标签图像下采用8倍然后和没有进行上采样的预测结果计算损失(当时这么做的目的是为了加快训练)。根据Table 8中的实验可以提升一个多点。
  • 训练后,冻结bn层的参数然后在fine-turn下网络,根据Table 8中的实验可以提升一个多点。

在这里插入图片描述

网络模型图

在这里插入图片描述

推荐视频讲解: 霹雳

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/70328.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nginx使用配置(亲测自用)

文章目录一、作用二、案例1.动静分离将静态资源放入Nginx目录下2.负载均衡常见的几种负载均衡方式1) 轮询(默认)2)weight3)ip_hash4)fair(第三方)5)url_hash(第三方&…

Flutter - Button样式及参数

Material 组件库中提供了多种按钮组件如ElevatedButton、TextButton、OutlineButton等,它们都是集成于ButtonStyleButton,所以他们大多数属性都和ButtonStyleButton一样。在介绍各个按钮时我们先介绍其默认外观,而按钮的外观大都可以通过属性…

基于萤火虫算法优化的lssvm回归预测-附代码

基于萤火虫算法优化的lssvm回归预测 - 附代码 文章目录基于萤火虫算法优化的lssvm回归预测 - 附代码1.数据集2.lssvm模型3.基于萤火虫算法优化的LSSVM4.测试结果5.Matlab代码摘要:为了提高最小二乘支持向量机(lssvm)的回归预测准确率&#xf…

通信原理 | CRC循环冗余校验码

CRC循环冗余码 CRC校验的手算演示异或运算和多项式步骤一、展开多项式得到CRC除数步骤二、原数据串末端加0(多项式最高是几次就加几个0)步骤三、从左往右,按位异或(所得结果如果不够长,前面的0别忘了添加)CRC(Cyclic Redundancy Check )循环冗余校验码 CRC校验的手算演…

MQ高级(二)死信交换机

一、初识死信交换机(P159) 当一个队列中的消息满足下列情况之一时,可以成为死信(dead letter): (1)消费者使用basic.reject或 basic.nack声明消费失败,并且消息的requeue…

使用opencv截取旋转框目标

使用opencv截取旋转框目标1、第一种方法2、第二种方法3、两种方法的简单对比4、opencv 最小面积矩形返回角度的理解4.1、version4.2之前4.1、version4.2之后本文列举了两种方法,使用的数据如图,用的是改版rolabelimg标注的标注文件有四个点的坐标: 1、…

mybatis详述

文章目录一、引言1.1 什么是框架?1.2 什么是ORM框架?1.3使用JDBC完成ORM操作的缺点?二、MyBatis框架2.1概念2.2 MyBatis开发步骤2.3 如何编写mybatis映射文件(规范)三、mybatis-config.xml 配置补充四、mybatis接口与映射文件指令间 传递参数4.1 传递…

安卓APP源码和设计报告——北京旅游系统

目 录 一、概述11 1.1 课题描述11 1.2 需求分析22 1.3 开发环境33 二、系统分析与概要设计55 2.1 系统功能分析55 2.2 系统模块结构图66 2.3 数据库表的设计66 三、北京旅游系统的登录功能模块的详细设计88 3.1 登录模块的功能描述88 3.2 登录模块的界面布局的设计9…

185: vue+openlayers 引用hover插件,展示各种鼠标cursor样式

第185个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers中使用hover效果,这里是引用了一个hover插件。鼠标对应到相应的feature中时候,获取其类型,并且设定不同的鼠标样式。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果Ope…

一篇知晓-内存竟被”无意“破坏,真相究竟如何?

内存是C/C程序员的好帮手,我们通常说C/C程序性能更高其原因之一就在于可以自己来管理内存,然而计算机科学中没有任何一项技术可以包治百病,内存问题也给C/C程序员带来无尽的烦恼。 野指针、数组越界、错误的内存分配或者释放、多线程读写导致…

kotlin之hello world

如果你想一个人写全栈的话,Kotlin Multiplatform (以下简称MPP)是目前这个星球上最好的选择,没有之一。 Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrain…

CTFSHOW web入门 java反序列化篇(更新中)

在做这部分题前,推荐大家先去学习下java反序列化,尤其是CC链 可以看下两个系列视频,收获颇多 https://space.bilibili.com/2142877265/channel/collectiondetail?sid29805&ctype0 https://www.bilibili.com/video/BV16h411z7o9/?spm_i…

手写Spring2(实现 Bean 的定义、注册、获取)

文章目录前言本章目标一、实现1、项目结构2、BeanFactory-bean工厂3、BeanDefinition -bean定义4、单例注册接口定义和实现-SingletonBeanRegistry 、DefaultSingletonBeanRegistry5、AbstractBeanFactory-抽象bean工厂类(定义模板方法)6、AbstractAutowireCapableBeanFactory-…

python配置环境问题记录------2022/12/07

python配置问题记录1、版本匹配的问题2、指令安装相关依赖包3、pycharm指定解释器4、运行网络模块5、总结1、版本匹配的问题 到官网下载合适的版本(注意位数,我这里选的是64位),pycharm选的是21年版本的,太新的话会有…

【C++】异常exception

目录 一.C语言错误处理方式 1.assert(断言) 2.返回/设置错误码 二.C异常的概念与使用 1.异常的概念 2.异常的使用 三.自定义异常体系MyException 四.异常的重新抛出 五.异常安全问题 六.异常规范 七.异常的优缺点对比 一.C语言错误处理方式 一个C语言程序, 在运行期…

回归分析与相关分析的区别和联系

在本节中,我们将首先讨论相关性分析,它用于量化两个连续变量之间的关联(例如,独立变量与因变量之间或两个独立变量之间)。 最近我们被客户要求撰写关于回归分析与相关分析的研究报告,包括一些图形和统计输…

软件测试经验与教训

下面精选出10条,和大家分享。 01 测试人员是项目的前灯 一个项目就像是一次陆上旅行。有些项目很简单、很平常,就像是大白天开车去商店买东西。但是大多数值得开发的项目更像是夜间在山里开越野卡车,这些项目需要前灯,而测试员要照…

直播带货行业如何入局?先了解一下直播商城源码吧

直播行业的爆火已经持续了多个年头,直到今天,在人们的生活中依然有着举足轻重的地位,它通过多元化的方案为许多行业带来了新的思路,特别是与传统商业所结合的“直播电商”、“直播商城”的卖货新形式,让多方因此而受益…

数理化解题研究杂志社数理化解题研究编辑部2022年第30期目录

教学改革探索 信息技术下中职数学“翻转课堂”教学创新策略研究 李宇仙; 2-4《数理化解题研究》投稿:cn7kantougao163.com 基于高中数学核心素养的错题讲评课之探索与实践 施浩妹; 17-20 高中数学“问题导学”模式的实践研究 吴金桥; 21-23 立于神而…

【测试沉思录】21. 如何用 JMeter 编写性能测试脚本?

作者:宋赟 编辑:毕小烦 Apache JMeter 应该是应用最广泛的性能测试工具。怎么用 JMeter 编写性能测试脚本? 1. 编写 HTTP 性能测试脚本 STEP 1. 添加 HTTP 请求 STEP 2. 了解配置信息 HTTP 请求各项信息说明(以 JMeter 5.1 为例…