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

news/2024/5/7 20:25:19/文章来源:https://blog.csdn.net/qq_47233366/article/details/137103529

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

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

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

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

 

深度学习语义分割篇——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

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

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

相关文章

ssm小区车库停车系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 ssm小区车库停车系统是一套完善的信息系统,结合springMVC框架完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模…

Excel 导入指定分隔符的 csv 文件

原文:https://blog.iyatt.com/?p14373 基于 Excel 2024 预览版测试 csv 文件本身是纯文本的,同行数据之间通过一定的分隔符打断识别为不同的列,常用的分隔符是英文逗号,使用逗号分隔符的 csv 文件直接用 Excel 打开能正常识别单…

python之(19)CPU性能分析常见工具

Python之(19)CPU性能分析常见工具 Author: Once Day Date: 2024年3月24日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏:Python开发_Once-Day的博客…

迁移android studio 模拟器位置

android studio 初始位置是安装在c盘,若是要迁移需 1创建一个目标位置如我的F:/avd 2在系统环境变量里面设置新的地址 变量名:ANDROID_SDK_HOME 变量值:F:/avd 3最重要的是文件复制,将C盘里面avd的上层目录.android的目录整体…

机器学习——聚类算法-层次聚类算法

机器学习——聚类算法-层次聚类算法 在机器学习中,聚类是一种将数据集划分为具有相似特征的组或簇的无监督学习方法。聚类算法有许多种,其中一种常用的算法是层次聚类算法。本文将介绍聚类问题、层次聚类算法的原理、算法流程以及用Python实现层次聚类算…

SpringCloudAlibaba之Nacos Config

1、服务配置中心介绍 首先我们来看一下,微服务架构下关于配置文件的一些问题: 配置文件相对分散。在一个微服务架构下,配置文件会随着微服务的增多变的越来越多,而且分散在各个微服务中,不好统一配置和管理。配置文件无法区分环境…

ETL数据倾斜与资源优化

1.数据倾斜实例 数据倾斜在MapReduce编程模型中比较常见,由于key值分布不均,大量的相同key被存储分配到一个分区里,出现只有少量的机器在计算,其他机器等待的情况。主要分为JOIN数据倾斜和GROUP BY数据倾斜。 1.1GROUP BY数据倾…

蓝桥杯嵌入式学习笔记(6):IIC程序设计

目录 前言 1. IIC基本原理 2. 电路原理 3. 代码编程 3.1 预备工作 3.2 AT24C02写读功能编写 3.2.1 AT24C02写操作实现 3.2.2 AT24C02读操作实现 3.3 MCP4017写读功能编写 3.3.1 MCP4017写操作实现 3.3.2 MCP4017读操作实现 3.4 main.c编写 3.4.1 头文件引用 3.4.…

FASTAPI系列 16-其他响应类型

FASTAPI系列 16-其他响应类型 文章目录 FASTAPI系列 16-其他响应类型前言一、HTMLResponse 响应 HTML二、纯文本响应三、另外的JSON 响应四、FileResponse文件五、StreamingResponse六、RedirectResponse 重定向请求总结更多内容,请关注公众号, 发送666 更可以得到免…

面试算法-92-不同的二叉搜索树 II

题目 给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。 示例 1: 输入:n 3 输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],…

移动硬盘盒结合PD技术为电脑供电:一种便携高效的供电新方案

在数字化时代,电脑已经成为我们生活和工作中不可或缺的工具。而在电脑的使用过程中,供电问题一直是我们需要关注的重要方面。近年来,随着技术的不断进步,移动硬盘盒子与PD(Power Delivery)技术的结合&#…

pnpm :无法加载文件 D:\nodejs\node_global\pnpm.ps1,因为在此系统上禁止运行脚本

一、问题描述 pnpm : 无法加载文件 D:\zyt\work\soft\node\node_global\pnpm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies。 所在位置 行:1 字符: 1pnpm --ver…

UOS、Linux下的redis的详细部署流程(适用于内网)

提示:适用于Linux以及UOS等内外网系统服务器部署。 文章目录 一.上传离线包二.部署基本环境三.解压并安装redis四.后台运行redis五.uos系统可能遇到的问题六.总结 一.上传离线包 1.自己去Redis官网下载适配自己部署系统的redis安装包。 2.通过文件传输工具&#xf…

『Apisix进阶篇』动态负载均衡:APISIX的实战演练与策略应用

🚀『Apisix系列文章』探索新一代微服务体系下的API管理新范式与最佳实践 【点击此跳转】 📣读完这篇文章里你能收获到 🎯 掌握APISIX中多种负载均衡策略的原理及其适用场景。📈 学习如何通过APISIX的Admin API和Dashboard进行负…

Redis - list 列表

前言 列表类似于 Java 中的数组或者顺序表,在 Redis 中,可以对列表两端插⼊(push)和弹出(pop),还可以获取指定范围的元素列表、 获取指定索引下标的元素等。列表是⼀种⽐较灵活的数据结构&#…

16、OpenFeign和Sentinel集成实现fallback服务降级

注:本篇文章主要参考周阳老师讲解的cloud进行整理的! 1、需求说明 cloudalibaba-consumer-nacos-order83 通过OpenFeign调用 cloudalibaba-provider-payment9001 1、 83 通过OpenFeign调用 9001微服务,正常访问OK 2、 83 通过OpenFeign调用 …

【Redis教程0x01】入门:Windows下安装和启动Redis

什么是Redis? Redis 是互联网技术领域中使用最广泛的存储中间件,它是 Remote Dictionary Service 三个单词中加粗字母的组合。 Redis 以超高的性能、完美的文档、简洁的源码著称,国内外很多大型互联网公司都在用。它的版本更新非常的快&…

腾讯云2核2G服务器CVM S5和轻量应用服务器优惠价格

腾讯云2核2G服务器多少钱一年?轻量服务器61元一年,CVM 2核2G S5服务器313.2元15个月,腾讯云2核2G服务器优惠活动 txyfwq.com/go/txy 链接打开如下图: 腾讯云2核2G服务器价格 轻量61元一年:轻量2核2G3M、3M带宽、200GB月…

力扣-20 有效的括号详解 Java

目录 1.题目分析 2.基础知识储备 2.1 哈希表 2.2 栈的存取 3. 逻辑概要 4.源码 示例 1.题目分析 为了对比都是从内而外,一个个匹配,全部匹配成功即为有效字符 2.基础知识储备 2.1 哈希表 简单来说,keyvalue存储 ,通过key…

Go打造REST Server【二】:用路由的三方库来实现

前言 在之前的文章中,我们用Go的标准库来实现了服务器,JSON渲染重构为辅助函数,使特定的路由处理程序相当简洁。 我们剩下的问题是路径路由逻辑,这是所有编写无依赖HTTP服务器的人都会遇到的问题,除非服务器只处理一到…