基于SegFormer的改进语义分割该网络

news2024/10/7 6:30:54

摘要

        场景解析是无人驾驶领域的一个关键任务,但是传统的语义分割网络往往只关注于提取更深层次的图像语义信息而忽略了全局信息对图像分割任务的重要性。另外随着图像在深层次卷积网络中的传递,卷积核天然的滤波作用会使得图像的边缘趋于平滑而丢失细节特征。本文基于以上两点考虑设计了融合全局特征的自注意力模块和图像纹理增强模块,使得语义分割网络在在更好的关注全局信息的同时保留了大量的细节信息,使得分割网络的精度得到了明显的提升。

第一章 绪论

1.1 研究背景与意义

        随着无人驾驶领域的迅猛发展,以及无人机和卫星的普及,图像的获取变得更加便捷。图像分割技术开始在各个领域大显身手。在无人驾驶领率,车辆需要对摄像头或激光传感器获取的街景图象进行分割处理,将分割结果传递给车辆作为车辆自主决策的重要依据。无人机和高空卫星获取的大量高分辨率图片经过语义分割后能够为自然资源信息的统计以及灾害的检测提供重要的依据。在日常生活中,一键换衣功能为我们网购衣物提供了重要的参考价值。

(1)自动驾驶领域

(2)精准农业

(3)自然灾害监控

(4)医疗领域

(5)网购衣物

1.2 语义分割的发展与现状

        从FCN网络开始,语义分割开始向深层神经网络发展。人们希望通过搭建更深的神经网络以提取更加有效的语义信息。但是随着神经网络深度的增加,又出现了梯度消失和梯度爆炸等问题,这使得深层网络的分割结果还不及较浅层的神经网络,为了解决这一问题,不少学者尝试探索正则化的方法优化与激活函数的改进,这一时期出现了层归一化、批次归一化,ReLU、LeakyReLU、ELU等激活函数,但直到Resnet的出现引入了残差结构,这一问题才得以根本性的改善,深度网络也因此开始进入了大模型时代。这一时期学者们的主要研究是探索具有强特征提取能力的主干网络结构,因此涌现了大批优秀的骨干网络架构,例如:Xception、Vgg、GoogleNet等强有力的主干网络。当人们意识到语义分割中上下文信息的重要性后,后期的工作主要集中于如何更加有效的提取网络的上下文信息,在这期间涌现了许都奇思妙想。例如大家熟知的Unet和U2Net的跳跃连结结构,PSPnet的空间金字塔池化模块,DeepLabV3_plus的改进的带有空洞卷积的空间金字塔池化模块。人们尝试通过引入图像目标的多尺度信息来改善语义分割网络的分割结果,在这一段时间,语义分割结构取得了明显的提升。同时该时期也出现了许多种类的注意力模块来更好的提取图像的上下文信息。例如:EcnNet的Context Encoding Module、Danet中引入的Position Attention Module和Channel Attetion Module、APCNet的自适应上下文模块ACM和CCNet的交叉注意力模块,实验证明这也注意力模块的引入确实给语义分割网络带来了明显的性能提升。

       随着Transformer在NLP领域的大放异彩,有学者尝试将Transformer引入图像处理领域,首先诞生的VisionTransformer就出现了一鸣惊人的效果,在这之后既有对纯Transfomer结构的探索如SegFormer、SwinTransformer也有将Transformer与传统CNN网络的结合诞生了如SETR、TransUNet等优秀的语义分割网络。但是Transformer结构虽然有很好的模型表达能力,但其对于输入N的平方复杂度却对实验的硬件设备提出了更大的挑战,而且Transformer优秀的特征表达能力需要依赖于庞大的数据集和更多的迭代次数,对于普通学者来说这些训练成本无疑是昂贵的。因此,许多学者的研究工作致力于对Transformer的注意力模块进行改进,提出了线性注意力结构。此外,SegNexT通过引入可变性卷积结构构建的超大语义分割网络架构,在较少的参数数量情况下也取得了不输于Transformer结构的语义分割效果,证明了多尺度信息对于语义分割网络的重要性。

1.3 注意力机制的发展与现状

(1) PSANet

(2)DANet

(3)OCNet

(4)CCNet

(5)SANet

(6)Vision Transformer

(7)Swin Transformer

(8)SegFomer

1.4 课题研究内容

(1)自注意力模块

(2)纹理增强模块

(3)Hambergure解码器模块

1.5 文章组织架构

第二章 语义分割基本知识

2.1 语义分割目标

        语义分割为给定的图像的每个像素分别进行类别预测,从而提供了包括对象类别、位置和形状信息的全场景描述。

2.2 语义分割评价标准

         评价一个语义分割模型的性能大致可以从准确度、帧率和模型复杂度三个方面。准确度的衡量有平均像素准确率(Mean Pixel Accuracy,MPA)和平均交并比(Mean Intersection Union,MIOU)两个方面。MPA是所有目标中判断正确的数量占总数据量百分比的均值,MIOU是将所有图像的标签和网络预测区域的交集与并集之比求均值。相比于MPA,MIOU更具有捕获数据集细节的能力,是主流的准确度评价指标。

(1)准确度

        MPA和MIOU的计算都是建立在混淆矩阵的基础上,因此了解混淆矩阵的相关知识是非常有必要的。混淆矩阵是统计分类模型的分类结果,即统计归对类,归错类的样本个数,然后将结果放在一个表里展示出来,这个表就是混淆矩阵。这里以二分类混淆矩阵为例进行介绍,多分类混淆矩阵是以二分类混淆矩阵为基础作为延伸的。

        对于二分类问题,将类别1称为正例(Positive),类别2称为反例(Negative),分类器预测正确记作真(True),预测错误记作假(False),由这4个基础元素相互组合,构成混淆矩阵的4个基础元素分别为TP、FP、FN、TN,下面分别解释这4个元素的具体含义:

TP(True Positive):真正例,模型预测为正例,实际为正例。

FP(False Positive):假正例,模型预测为正例,实际是反例。

TN(True Negative):真反例,模型预测为反例,实际为反例。

FN(False Negative):假反例,模型预测为反例,实际为正例。

二分类混淆矩阵示意图如下:

真实情况预测结果
正例反例
正例TP(真正例)FN(假反例)
反例FP(假正例)TN(真反例)

        混淆矩阵对角元素全是预测正确的,数字值表示各类别预测正确的个数;行的数字求和表示某类别真实值的个数,列的数字求和表示模型预测为该类别的数目。

语义分割的像素准确率PA=(TP+TN)/(TP+TN+FP+FN)

CPA:类别像素准确率,对应精确率。在类别i的预测中,真实属于i类的像素准确率,换言之:模型对类别i的预测值有很多,其中有对有错,预测对的值占预测总值的比例。混淆矩阵计算。

P1 = TP / (TP+FP)

P32 = TN / (TN + FN)

MPA分别计算每个类别被正确分类像素的比例,即CPA,然后累加求平均。

每个类别像素的准确率为Pi,MPA=sum(Pi)/类别数。IOU = TP / (TP + FP + FN)

以二分类的的MIOU为例,MIOU = (IOU正例P+IOU反例n) / 2 = [TP / (TP + FP + FN) + TN / (TN + FN + FP)] / 2

交并比IOU是模型对某一类别预测结果和真实值的交集与并集的比值

 在分割任务中,假设类别总数为k,加上背景就是k+1,Pmm是将原数据中目标m的像素判断成目标m的数量,Pmn是将原数据中目标m的像素判断成目标n的数量。

IOU=\frac{Pmm}{\sum_{n=0}^{k}Pmn+\sum_{n=0}^{k}nm-Pmm}

MIOU就是对所有类的IOU求平均值,计算公式如下所示

MIOU=\tfrac{1}{k+1}\sum_{i=0}^{k}IOUi

(2)帧率

        帧率(Frame Per Second,FPS)指的是语义分割模型在以秒为单位的时间内完成的预测图片的数量,用来衡量分割算法处理数据的耗时程度。其值越大表示算法处理一张图片的时间越短,速度越快。

(3)模型复杂度

语义分割网络模型复杂度的衡量指标主要有以下几个:

        1. 参数数量(number of parameters):指模型中需要学习的参数数量。通常情况下,参数数量越多,模型复杂度越高。

        2. 浮点操作数(number of floating-point operations):指模型计算中的乘法和加法运算数量。通常情况下,浮点操作数越多,模型复杂度越高。

        3. FLOPs(floating-point operations per second):指模型在单位时间内可以进行的浮点运算次数。它综合考虑了模型的参数数量和浮点操作数。

        4. 模型输出图像的分辨率(resolution of output image):指模型输出的分割图像的像素数量。通常情况下,输出图像的分辨率越高,模型复杂度越高。

        这些指标不是孤立的,通常需要综合考虑。比如在计算 FLOPs 时,需要同时考虑模型的参数数量和浮点操作数。

FPS

2.3 激活函数简介

2.4 损失函数

(1)交叉熵损失函数(CE_Loss : Cross Entropy Loss Function)

交叉熵损失(Cross-Entropy Loss,CE Loss)能够衡量同一个随机变量中的两个不同概率分布的差异程度,当两个概率分布越接近时,交叉熵损失越小,表示模型预测结果越准确

(2)Focal Loss

        虽然CE Loss能够衡量同一个随机变量中的两个不同概率分布的差异程度,但无法解决一下两个问题:

  1. 正负样本分布不平衡的问题(如centernet的分类分支,它只将目标的中心点作为正样本,而把特征图上的其它像素作为负样本,可想而知正负样本的数量差距之大);
  2. 无法区分难易样本的问题(易分类的样本的分类错误率的损失占了整体损失的绝大部分,并主导梯度)

        为了解决以上问题,Focal Loss在CE Loss的基础上改进,引入了:

  1. 正负样本数量调节因子以解决正负样本数量不平衡的问题;
  2. 难易样本分类调节因子以聚焦难分类的样本。

(3)GHMC Loss

        Focal Loss在CE Loss的基础上改进后,解决了正负样本不平衡以及无法区分难易样本的问题,但也会过分关注难分类的样本(离群点),导致模型学歪。

        为了解决这个问题,GHMC(Gradient Harmonizing mechanism-C)定义了梯度模长,该梯度模长正比于分类的难易程度,目的是让模型不要关注那些容易学的样本,也不要关注那些特别难分的样本。

(4)Dice Loss

        Dice Loss来自于dice coefficient,是一种用于评估两个样本的相似度的度量函数,取值范围在0到1之间,取值越大表示越相似。Dice Loss是一种区域相关的的Loss。意味着某像素的loss以及梯度值不仅和该点的label以及预测值相关,和其它的label以及预测值也相关。Dice Loss对正负样本严重不平衡的场景有着不错的性能,训练过程中更侧重于对前景区域的挖掘。但训练Loss容易不稳定,尤其是小目标的情况下。另外极端情况会导致梯度饱和的现象,因此有一些改进操作主要是结合CE_Loss等的改进,比如Dice + CE Loss , Dice + Focal loss等。

2.5 优化算法介绍

(1)优化器

        梯度下降的基本思想是先设定一个参数η,参数沿着梯度的反方向进行更新。假设需要更新的参数为ω,梯度为ɡ,那么权重的更新策略可以表示为:

                                          w\leftarrow w-\eta \ast g          

梯度下降有三种不同的形式:

  1. BGD(Batch Gradient Descent):批量梯度下降,每次参数更新使用所有样本
  2. SGD(Stochastic Gradient Descent):随机梯度下降,每次参数更新仅使用一个样本。
  3. MBGD(Mini-Batch Gradient Descent):小批量梯度下降,每次参数更新仅使用小部分梯度样本(mini_batch)

这三个优化算法的训练方法是相同的,区别是训练时使用的训练数据量。

Step1:

                                        g = \frac{\partial loss}{\partial w}=f\left ( loss \right )

Step2:求梯度的平均值

Step3:更新权重: w\leftarrow w-\eta \ast g

梯度下降算法虽然算法简洁,但对超参数学习率比较敏感,学历率过小会导致模型收敛缓慢,学习率过大这可能导致模型越过极值点。在较为平坦的区域,优化算法会误判,在还未到达极值点时就提前结束迭代,陷入局部极小值。

(2)动量(Momentum)

        思想:让参数的更新具有惯性,每一步更新都是由前面梯度的累积υ和当前梯度ɡ组合而成。

公式:

        累计梯度更新:

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        v\leftarrow \alpha v+\left ( 1-\alpha \right )g

        其中α为动量参数,υ为当前梯度,η为学习率。

        梯度更新:

                                                    \chi \leftarrow \chi -\eta \ast v                                  

        通过添加动量参数能够帮助参数在正确的方向上加速前进,也可以帮助模型跳出局部最优解。

3.Adagrad

Adagrad优化算法被称为自适应学习率优化算法。之前我们讲的梯度下降方法是对所有的参数使用相同的,固定的学习率进行优化的,但是不同参数的梯度差异可能很大,使用相同的学习率效果可能不会很好。

Adagrad思想时对于不同的参数设置不同的学习率。具体做法是对于每个参数初始化一个累计平方梯度r=0,然后每次将该参数的梯度平方和累加到这个变量r上:然后,再更新这个参数的时候学习率就变成了:

                                                       \gamma \leftarrow \gamma +g^{2}

然后,在更新这个参数的时候,学习率就变成了                                        

                                                   w\leftarrow w-\frac{\eta }{\sqrt{\gamma +\delta }}\ast g

权重更新为:

        其中,ɡ为梯度,γ为累计平方梯度(初始值为0);η为学习率,σ为小参数,避免分母为0,一般取值为10-10

        这样不同的参数由于梯度不同对应的学习率大小也会不同,这也就实现了自适应的学习率。

        Adagrad的核心思想就是对于根据参数的梯度自适应的调整学习率大小以使学习率大的参数的学习率减小达到防止震荡的目的,同时对于学习率小的参数也能通过增大学习率使参数更新的数度加快,能够加快收敛速度。

Adam

在Grandient Descent的基础上,做了如下几个方面的改进:

  1. 梯度方面增加了momentum,使用累计梯度:v\leftarrow \alpha v+\left ( 1-\alpha \right )g
  2. 同RMSProp优化算法一样,对学习率进行优化,使用累计平方梯度:\gamma \leftarrow \lambda \gamma +\left ( 1-\lambda \right )g^{2}
  3. 偏差纠正: 
  4. 权重更新为:

2.6 数据集介绍

(1)PASCAL VOC2012 + SBD

(2)CityScapes

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

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

相关文章

2015年408真题复盘

紫色标记是认为有一定的思维难度或重点总结 红色标记是这次刷真题做错的 记录自己对题目的一些想法与联系,可能并不太关注题目本身。 分数用时 选择部分10/21 78/8036min大题部分总分 摘自知乎老哥:“我做历年真题时,绝大部分是130~139&#…

LVS负载均衡集群 (NAT模式)

LVS集群 集群的概念: 为解决某个特定的问题,将多个计算机组合起来形成一个单个系统 集群的水平扩展: 增加设备,并行运行多个服务,通过网路连接和算法来调度服务分配的问题 集群的类型: 负载均衡集群&#…

【斗罗二】冰帝两次险些杀死雨浩,天梦哥求助伊老遭拒绝,霍云儿现身救儿子

Hello,小伙伴们,我是小郑继续为大家深度解析绝世唐门。 斗罗大陆动画第二部绝世唐门已经更新了,霍雨浩与冰帝完美融合,成功觉醒了第二武魂,霍挂的时代正式到来。只是在整个第19集中,官方做了大量的改编,不但…

有湖有仓,如何升级到湖仓一体

很多企业在过去的 IT 基础建设过程中,都已经搭建了数据仓库或数据湖,或者两者都有。其中数据仓库一般使用的是传统 Oracle 或者传统 MPP 数据库,如 Teradata 和 Greenplum,数据湖使用 Hadoop 大数据平台。所以在考虑湖仓一体升级改…

ps插件Coolorus for Mac中文激活版

Coolorus是一款非常实用的Photoshop插件,它为Photoshop增加了色环配色面板,让设计师可以更直观地选择颜色。同时,Coolorus还提供了多种专业配色方案,如鲜艳色、复古色、日常色等,设计师可以直接套用这些方案&#xff0…

Power BI 傻瓜入门 1. 数据分析术语:Power BI风格

本章内容包括: 了解Power BI可以处理的不同类型的数据了解您的商业智能工具选项熟悉Power BI术语 数据无处不在。从你醒来的那一刻到你睡觉的时候,某个系统会代表你收集数据。即使在你睡觉的时候,也会产生与你生活的某些方面相关的数据。如…

计算机网络的七层结构、五层结构和四层结构

为什么要分层: 这个就和我们平常写程序一样,高内聚、低耦合。将网络进行分层我们就可以根据每一层的功能分开开发设计,将复杂的网络问题分解为更简单和清晰的小问题,方便设计、实现和标准化。无需在意其他层是如何实现的&#xff…

【框架源码篇 04】Spring源码手写篇-Bean定义配置化

Spring源码手写篇-Bean定义配置化 一、Bean定义配置分析 我们前面实现了手写IoC和AOP的功能,但是我们在使用的时候发现我们的调用代码还是非常的繁琐,会给应用者很不好的体验。 上面的代码很直观的看到重复代码很多,要用户设置的内容也很多&…

基于springboot实现学生综合测评系统项目【项目源码+论文说明】

基于springboot实现学生综合测评系统演示 摘要 随着信息化时代的到来,管理系统都趋向于智能化、系统化,学生综合测评系统也不例外,但目前国内仍都使用人工管理,学校规模越来越大,同时信息量也越来越庞大,人…

运营商大数据精准营销,击碎你的固化营销思维

大数据精准营销服务是大数据应用的典型场景之一,也是依托大数据和互联网提升企业效率的一种有效手段。但是,在选择大数据服务的很多时候,企业往往要考虑法律与合规的问题,其中比较重要的是数据获取渠道与数据是否脱敏。在所有大数…

CSS 两栏布局

目录 CSS两栏布局(左列定宽,右列自适应宽) 方法一:浮动margin 方法二:定位margin 方法三:浮动BFC 方法四:Flex布局 方法五:able布局 CSS两栏布局(左列不定宽&#…

一、Qt简介

1. 什么是Qt? Qt是一个基于C的图形用户界面(GUI)开发框架,但图形用户界面并不是Qt的全部,因为Qt还包含了很多非图形化的开发功能:多线程、数据库、图像图形处理、音视频处理、网络通信、文件IO等。 一方面…

【智慧工地源码】基于AI视觉技术赋能智慧工地

伴随着技术的不断发展,信息化手段、移动技术、智能穿戴及工具在工程施工阶段的应用不断提升,智慧工地概念应运而生,庞大的建设规模催生着智慧工地的探索和研发。 建筑施工具有周期长、环境复杂、工序繁杂、人员流动性大等特点,所以…

10个基于.Net开发的Windows开源软件项目

分享10个适合程序员的神器,都是基于.Net开发的,可以用来学习,日常工作也可以使用。(点击标题,查看详情) 1、基于.NET的强大文件格式开源转换工具 一个基于.NET平台的开源文件格式转换工具,可以…

仿写el-upload组件,彻底搞懂文件上传

用了那么久的Upload组件,你知道是怎么实现的么,今天就来仿写一个饿了么el-upload vue组件,彻底搞懂前端的文件上传相关知识! 要实现的props 参数说明action必选参数,上传的地址headers设置上传的请求头部multiple是否…

Linux内存管理(2):memblock

一、memblock分配器初始化 在内核初始化过程中也需要分配内存,使用的页帧分配器叫memblock(早期的内核版本使用BootMem,新版本内核已不再用)。 memblock是系统启动过程中的一个中间阶段的内存管理, 负责在系统上电到内核内存管理模型初始化之前这段时间的物理内存分配、预留…

mac 升级node到指定版本

node版本14.15.1升级到最新稳定版18.18.2 mac系统 先查看一下自己的node版本 node -v开始升级 第一步 清除node的缓存 sudo npm cache clean -f第二步 安装n模块【管理模块 n是管理 nodejs版本】 sudo npm install -g n第三步升级node sudo n stable // 把当前系统的 Node…

C++初阶(五)类和对象

文章目录 一、C两大类型二、类的6个默认成员函数三、构造函数1、概念2、特性1、构造函数自动调用特性演示2、无参有参调用两种情况演示3、函数重载演示4、默认构造函数组成及演示5、内置类型成员不初始化的补丁演示 3、析构函数1、概念2、特性1、代码演示2、析构两种情况 4、构…

Android MQTT连接阿里云使用Json解析数据

Android Studio 连接阿里云订阅主题然后使用JSON解析数据非常好用 导入MQTT的JAR包1、在项目中添加依赖然后使用Studio 去下载库2、直接下载JAR包,然后作为库进行导入 环境验证:给程序进行联网权限XML布局文件效果如下: MainActitive.java 主…

PTrade财务数据获取函数的问题

前文介绍了PTrade的get_fundamentals函数,可以用于获取股票的财务数据。但在实际应用中,会遇到如下的问题。 前文我们通过将回测时间设置为2023-05-05进行回测调用get_fundamentals,得到如下查询结果: secu_codepubl_dateend_da…