深度学习语义分割篇——DeepLabV1原理详解篇

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题

🍊专栏推荐:深度学习网络原理与实战

🍊近期目标:写好专栏的每一篇文章

🍊支持小苏:点赞👍🏼、收藏⭐、留言📩

 

深度学习语义分割篇——DeepLabV1原理详解篇

写在前面

Hello,大家好,我是小苏👦🏽👦🏽👦🏽

​ 之前我已经为大家介绍过最基础的一种语义分割网络——FCN啦🍭🍭🍭,如果你对FCN还不了解的话,可以点击如下链接了解详情,这对你入门语义分割会非常有帮助:

  • 深度学习语义分割篇——FCN原理详解篇🍁🍁🍁
  • 深度学习语义分割篇——FCN源码解析篇🍁🍁🍁

今天为大家带来的是DeepLab系列的第一篇文章,目前此Deeplab系列的更新计划如下:

  • DeepLabV1原理详解篇,详细介绍DeepLabV1的网络结构和关键创新点。
  • DeepLabV2原理详解篇,详细介绍DeepLabV2的网络结构和关键创新点。
  • DeepLabV3原理详解篇,详细介绍DeepLabV3的网络结构和关键创新点。
  • DeepLabV3源码实战篇,带大家阅读源码,对DeepLabV3有更深入的了解。

在此DeepLab系列中没有对DeepLabV1和DeepLabV2做源码解读,我觉得没啥必要,感兴趣的可以去看一看。🥗🥗🥗

论文链接:DeepLabV1论文🍵🍵🍵

 

语义分割存在的问题及解决方法

在论文中,作者提出了将DCNN运用到语义分割任务中存在的两个技术障碍,如下图所示:

image-20230711151155097

翻译过来什么意思呢,即存在信号下采样和空间不变性这两个问题,那么为什么会出现这样的现象呢?又该怎么解决呢?论文中也给出了相关解释:

为什么?🔐🔐🔐

  • 信号下采样:这是指卷积神经网络重复的使用下采样max-pooling,从而导致图像分辨率不断降低。🍊🍊🍊
  • 空间不变性:论文中解释为与从分类器中获得以物体为中心的决策需要空间转换的不变性有关,这本质上限制了DCNN模型的空间精度。说实话,听不懂。🎄🎄🎄其实啊,这里就是说像图像分类、目标检测这些High-Level的视觉任务(以获取图像中物体为核心的任务)需要空间不变性,也就是说对目标检测这类任务而言,对于同一张图片进行空间变换其图像分类的结果是不变的;而像语义分割这些Low-Level视觉任务,对于一张图片进行空间变换后,其结果就会发生变化,这就导致DCNN做语义分割时定位精准度不够。🍉🍉🍉

怎么办?🔑🔑🔑

  • 信号下采样:既然重复使用了下采样max-pooling,那么我们自然会想到少使用几次下采样或者降低stride步长,但是这样会使得感受野变小,这是我们不希望看到的。那么是否有什么方法可以既不用不断下采样降低分辨率,又能保持感受野不变呢?这就要我们的空洞卷积上场了,它可以增大我们的感受野。关于空洞卷积的细节不了解的可以阅读我的这篇博客:Dilated Convolution(空洞卷积、膨胀卷积)详解🧨🧨🧨
  • 空间不变性:为了解决这个问题,作者采用了fully-connected CRF(全连接条件随机场)方法,对DCNN得到的分割结果进行细节上的调整。这个方法在DeepLabV1和DeepLabV2中都使用了,但是在DeepLabV3中就不在使用了,自己看了看,公式怪多的,有点头大,后面也用不到,就没有深入学习了,大家感兴趣的可以去看一下,也推荐一篇博文叭:DenseCRF🧨🧨🧨

 

DeepLabV1网络优势

论文中给出了DeepLabV1网络的三点优势,如下图所示:

image-20230711163858592

  • 速度更快:借助atrous算法(空洞卷积算法),密集的DCNN运行速度为8帧/秒。
  • 准确率更高:在PASCAL语义分割挑战上获得了最先进的结果,比Mostajabi等人的次优方法高出7.2%。
  • 模型结构简单:系统由两个相当完善的模块级联组成,即DCNN和CRF。

 

DeepLabV1网络结构

前面已经为大家简单介绍了一下DeepLabV1网络的一些模块和优势,下面就来为大家来讲讲DeepLabV1的网络结构。我打算采用总-分结构为大家叙述,先和大家唠唠DeepLabV1中几个关键模块,然后再为大家介绍DeepLabV1的整体网络结构。

LargeFOV模块

首先需要说明的是DeepLabV1的框架是基于VGG16实现的,对VGG16不熟悉的可以看一下我的这篇博客:深度学习经典网络模型汇总2——VGGNet🩸🩸🩸,为了方便大家阅读,这里贴出VGG16的网络结构图,如下:

经典CNN网络:VGG16-输入和输出_呆呆珝的博客-程序员宝宝- 程序员宝宝

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-py1kqSVE-1643041241886)(https://media5.datahacker.rs/2019/02/vgg.png)]

那么这个LargeFOV模块是什么呢?又作用在什么位置呢?其实呀,这个LargeFOV模块就是我们在前面说到的空洞卷积,作者将VGG16的第一个全连接层换成了空洞卷积,保证了网络在mIOU不降低的前提下,减少参数量,加快速度。

全连接层换成了空洞卷积?怎么换的呢?或许你会有这样的疑问,我们一起来学习一下。首先将全连接层换成普通卷积这种操作大家是否了解呢,比如在FCN中就将VGG16的第一个全连接层换成了卷积核大小为7×7,卷积核个数为4096的卷积层,对此不了解的可以点击☞☞☞了解详情。🌱🌱🌱知道了如何将全连接层转换成普通卷积,那剩下的就是将普通卷积变成空洞卷积了,这就没什么好说的了,不了解空洞卷积的点击☞☞☞为自己赋能喔。🥗🥗🥗

论文中也做了一系列不同kernel size和input stride(膨胀因子)的对比实验,如下图所示:

image-20230712103020759

根据实验效果,最终作者选择了采用卷积核大小为3×3,input strede为12的空洞卷积。【最后一行感受野大,参数量小,mean IOU高,速度快🥂🥂🥂】


这里其实我是有一些疑惑的,就是不知道这个感受野224是怎么计算得到的,按照我的理解,怎么算感受野也不是这么多,如果有大佬知道,麻烦告诉小弟一声,不胜感激 !!!🤞🏽🤞🏽🤞🏽


fully-connected CRF模块

fully-connected CRF中文翻译为全连接条件随机场,哈哈哈哈,我是一脸懵逼,在前文中我也说到了,这一部分我不会介绍这个模块是怎么实现的,只会说说这个模块的作用。其实啊,这个模块就是让分割更加精细,它相当于我们对得到的粗略的分割图又进行了进一步的细化操作,过程如下:

            image-20230712105940721

网络结构

话不多说,直接上图:

在这里插入图片描述

                  图片来自B站霹雳吧啦Wz

这个结构是基于VGG16的,因此大家需要对比着VGG16来看,让我们来看看它相较于VGG16做了哪些改变叭~~~🍦🍦🍦

  • VGG16所使用的所有Maxpool采用的keenel_size=2,stride=2,padding=0;🍚🍚🍚而在DeepLabV1中,前三个Maxpool采用的keenel_size=3,stride=2,padding=1,此参数配置的Maxpool同样起到下采样的作用,每次下采样2倍,经过3次Maxpool讲原始图像下采样8倍,在语义分割任务中我们不希望图像被过度的下采样,这样会丢失部分信息,因此后面两次Maxpool不再进行下采样,采用keenel_size=3,stride=1,padding=1的参数配置。此外在第五次Maxpool后DeepLabV1还接了一个keenel_size=3,stride=1,padding=1的Avgpool层,同样这层也没有再进行下采样 。🍪🍪🍪
  • 将VGG16模型最后三个卷积层改成了空洞卷积,其中keenel_size=3,r=2,stride=1,padding=2。【r为膨胀因子】【注:什么这里要使用空洞卷积腻,这是因为在DeepLabV1中我们只下采样了8倍,感受野较低,使用空洞卷积能够增大感受野🥝🥝🥝】 image-20230712152303468
  • 将VGG16模型的第一个全连接层换成空洞卷积,其中keenel_size=3,r=12,stride=1,padding=12,这就是上文提到的LargeFOV模块。🍅🍅🍅
  • 将VGG16模型的第二个和第三个全连接层都换成了卷积操作,需要注意一下经过最后一个全连接层(DeepLabV1中的最后一个卷积层)后的输出大小为 28 × 28 × n u m _ c l a s s e s 28×28×num\_classes 28×28×num_classes。🍀🍀🍀

带Multi-Scale的网络结构

论文中还提到了使用了多尺度(Multi-Scale)的结构,即融合了原始图片和前四个Maxpool层的输出,我们直接看下图会更清晰:

在这里插入图片描述

                  图片来自B站霹雳吧啦Wz

这个结构似乎没什么么好说的,现在看来是比较常规的一个多尺度方法,不过还是需要大家注意一下这里原始图片和前四个Maxpool层的输出尺寸的都是 28 × 28 × n u m _ c l a s s e s 28×28×num\_classes 28×28×num_classes,最后将这些特征图进行ad操作。

我们可以来看看是否添加多尺度实验的对照结果,如下图所示:

在这里插入图片描述

第一行为没有添加MSC的效果,第二行为添加了MSC的效果,怎么样,还是挺明显的叭。🍸🍸🍸

 

DeepLabV1实验对比

其实在上文已经展示了相关的对照实验,这里我们再从直观上来感受一下DeepLabV1和其它算法的比较,如下图所示:

image-20230712160854890

第一行表示原图,第二行为ground truths,第三行是最近提出的模型,左边为FCN-8s,右边为TTI-Zoomout-16,第四行为DeepLabV1。从上图可以很明显的看出DeepLabV1的结果更加精细,对图像边缘的处理效果更好。🍵🍵🍵

 

小结

DeepLabV1到这里就差不多为大家介绍完啦,希望大家都有所收获喔~~~🌷🌷🌷最后我想在稍微提一下DeepLabV1是怎么计算损失的。我们知道,FCN是用GT和网络输出结果计算交叉熵损失(cross_entropy)的,不知道的点击☞☞☞补课去,里面介绍的很详细。但是在DeepLabV1中我们会先将GT下采样8倍,然后再与 28 × 28 × n u m _ c l a s s e s 28×28×num\_classes 28×28×num_classes【28×28相较于原图224×224下采样了8倍🍡🍡🍡】的输出特征图计算交叉熵损失。论文中也有相关的表述,如下图所示,大家这里注意一下就好。🌼🌼🌼

image-20230712163713928

 

参考链接

DeepLabV1网络简析🍁🍁🍁

DeepLabV1论文🍁🍁🍁

[论文笔记]DeepLabv1🍁🍁🍁

 
 

如若文章对你有所帮助,那就🛴🛴🛴

一键三连 (1).gif

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UMEDITOR – 支持WORD上传的富文本编辑器

1.下载代码 https://gitee.com/xproer/zyoffice-umeditor1x 2.引入组件 3.配置接口 效果

使用yolov9来实现人体姿态识别估计(定位图像或视频中人体的关键部位)教程+代码

yolov9人体姿态识别: 相较于之前的YOLO版本,YOLOv9可能会进一步提升处理速度和精度,特别是在姿态估计场景中,通过改进网络结构、利用更高效的特征提取器以及优化损失函数等手段来提升对复杂人体姿态变化的捕捉能力。由于YOLOv9的…

出口落叶就能获取暴利,他却要断了这条财路!学会人生算法重启装置应用!——早读(逆天打工人爬取热门微信文章解读)

重启装置的应用,你学会了吗? 引言Python 代码第一篇 人民日报 出口落叶就能获取暴利,他却要断了这条财路!第二篇 人民日报 来啦 早班车新闻要闻社会政策 结尾 昨日之覆辙 非明日之方向 泰戈尔曾言 你不能拽着自己的头发离开地面 因…

电商企业如何用数据打造破局利器:电商API数据采集实时接口助力企业618双十一各大活动

在电商行业中,618大促无疑是一场引爆商机的盛宴。 随着市场环境的变更,如何在这样高强度的活动期间脱颖而出,成为每个品牌都需要面对的重要问题。 大促期间,实时、准确的数据是核心竞争力。因为在大促中,核心渠道、核…

HBase的Python API(happybase)操作

一、Windows下安装Python库:happybase pip install happybase -i https://pypi.tuna.tsinghua.edu.cn/simple 二、 开启HBase的Thrift服务 想要使用Python API连接HBase,需要开启HBase的Thrift服务。所以,在Linux服务器上,执行如…

PCL 彩色点云RGB转灰度并显示

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、原理概述 不同要素之间的灰度差异较为明显。点云灰度值与RGB属性的关系为:

Mysql数据库:高级SQL语言详解

目录 前言 一、按关键字排序查询 1、单字段排序 1.1 按某一字段升序排序 1.2 按某一字段降序排序 1.3 结合where进行条件进行排序 2、多字段排序 2.1 按多字段升序排序 2.2 按多字段降序排序 2.3 案例操作 3、区间判断及查询不重复记录 3.1 区间判断 3.1.1 AND/OR…

【数据结构】链表习题之反转链表和删除链表中等于给定值 val 的所有节点

👑个人主页:啊Q闻 🎇收录专栏:《数据结构》 🎉道阻且长,行则将至 前言 今天的博客是关于链表的题目,力扣上的题目之反转链表和删除链表中等于给定值 val 的所有节点 一.反转…

PMP考试难不难,通过率怎样?

PMP考试自从新考纲调整后有几次考试难度是非常高的,那段时间我也看网上好多机构通过率都不咋地,当时也是因为官方的出题难度稍高,还组织了免费的重考,也是后来逐渐开始归于平常了吧,直到现在都是我认为比较简单的选择题…

Go通道机制与应用详解

目录 一、概述二、Go通道基础通道(Channel)简介创建和初始化通道通道与协程(Goroutine)的关联nil通道的特性 三、通道类型与操作通道类型1. 无缓冲通道 (Unbuffered Channels)2. 有缓冲通道 (Buffered Channels) 通道操作1. 发送操…

杂货铺 | 使用 Github Pages 和 Hexo 搭建自己的独立博客

文章目录 📚Step1:安装Node.js和Git📚Step2:安装并初始化配置Hexo📚Step3:本地查看效果📚Step4:将博客部署到Github Pages上🐇创建项目代码库🐇配置SSH密钥&a…

VUE 支持 超大上G,多附件上传

代码:https://gitee.com/xproer/up6-vue-cli 1.引入up6组件 2.配置接口地址 接口地址分别对应:文件初始化,文件数据上传,文件进度,文件上传完毕,文件删除,文件夹初始化,文件夹删除&…

应急 | BuleHero挖矿蠕虫最新变种分析

背 景 挖矿蠕虫病毒BuleHero擅长利用各类漏洞攻击、弱密码爆破攻击。病毒作者不断更新变种,是近期最活跃的挖矿蠕虫病毒之一。攻击者最新的BuleHero挖矿蠕虫实现入侵后,还会释放挖矿程序,使服务器的资源被消耗挖矿,极大影响正常业…

【蓝桥杯】蓝桥杯算法复习(三)

😀大家好,我是白晨,一个不是很能熬夜😫,但是也想日更的人✈。如果喜欢这篇文章,点个赞👍,关注一下👀白晨吧!你的支持就是我最大的动力!&#x1f4…

Elasticsearch:虚拟形象辅助和对话驱动的语音到 RAG 搜索

作者:来自 Elastic Sunile Manjee 搜索的演变 搜索已经从产生简单结果的简单文本查询发展成为容纳文本、图像、视频和问题等各种格式的复杂系统。 如今的搜索结果通过生成式人工智能、机器学习和交互式聊天功能得到增强,提供更丰富、更动态且与上下文相…

Linux 注入依赖环境

文章目录 配置依赖程序安装 JDK安装 Tomcat安装 mysql 配置依赖程序 下面配置依赖程序都以CentOS为例。 安装 JDK 可以直接使用 yum(CentOS) 直接进行安装。 先搜索,确定软件包的完整名称。 yum list | grep jdk再进行安装 进行安装的时候一定要先确保处在“管理…

循环神经网络之语言模型和数据集

总结重要知识点 在给定这样的文本序列时,语言模型(language model)的目标是估计序列的联合概率 语言模型是自然语言处理的关键。 元语法通过截断相关性,为处理长序列提供了一种实用的模型。 长序列存在一个问题:它们…

JS new Array.fill(new Array()) 创建二维数组 fill方法的坑

我们通常会通过如下方式来创建一个二维数据: const arr new Array(5).fill(new Array(2).fill(0))我们如果想要修改其中一个元素的值 arr[0][0] 1输出:   我们只想给arr[0][0]赋值,但是每一行数组为0的下标元素的值全部改变了&#xf…

循序渐进丨MogDB 对 Oracle DBLink兼容性增强

本特性自 MogDB 5.0.0版本开始引入,支持 Oracle DBLink语法,可以使用符号访问 Oracle 数据库中的表。 示 例 01 环境准备 MogDB 环境 已安装 MogDB 数据库。已安装oracle_fdw插件,具体安装方法参见oracle_fdw安装文档https://docs.mogdb.io/…

[Linux_IMX6ULL驱动开发]-基础驱动

驱动的含义 如何理解嵌入式的驱动呢,我个人认为,驱动就是嵌入式上层应用操控底层硬件的桥梁。因为上层应用是在用户态,是无法直接操控底层的硬件的。我们需要利用系统调用(open、read、write等),进入内核态…