MaskRCNN与注意力机制

news/2024/7/10 2:47:50 标签: 计算机视觉, 深度学习, 目标检测

Mask RCNN---two stage

mask rcnn是一个分割算法(实例分割),可用于:

本质上,mask R-CNN是在faster rcnn的基础上,加入了FCN模块,得到最终的分割结果。

先检测,再分割。不是对整张feature map进行fcn,而是通过faster rcnn得到不同的region proposal,通过roi pooling将小特征图变为相同大小,对其进行fcn。

模型框架

改进1: ROI Pooling → ROI Align

ROI Pooling的过程较为粗糙,存在两次量化过程,导致最终的定位精度不够精确。

给定一个feature map,得到了若干个Region Proposal

经过筛选后,这些proposal需要映射到feature map上,统一池化成7×7的尺寸

然而,该过程会发生两次量化误差。

第一次: 原图映射到feature map上产生误差。

假设一个region尺寸为665,映射到feature map上的时候缩小了32倍<2^5>(5次卷积)。

那么roi pooling选择的就是20×20的区域。

实际上,理论的尺寸为665/32=20.78, roi pooling将其约等于20,造成了0.78的误差。

0.78×32=24.96,因此造成的bbox的误差约为25个像素。

这对于小目标的尺寸会造成较大误差。

第二次 第二次误差来自于池化过程。

roi pooling在池化过程中,将feature按整数切割成若干个同等大小的块,然后分别取max。

也就是说按照整数坐标对图像进行池化。显然,这存在问题。

例如,20×20的feature进行池化,得到7×7,每个格子的坐标为2.86×2.86

这里取整数显然存在问题

ROI Align

roi align则采用了浮点坐标的方式,来尽量减小量化误差

其核心思想为:通过浮点数坐标的方式进行计算。虽然在浮点数上没有数值,也可以通过(双)线性插值的方式来得到像素值

从大图中,找到region的四个角坐标(浮点数)

然后,在此区域将region划分成相等大小的7×7块

在这些块内,每个块产生4个坐标点,通过线性插值的方式来得到像素值。

然后对这些像素值进行池化处理。

改进2: FPN

加入了FPN分支

右侧模型输出了更大的尺寸,从而能够获得更加精细的结果。

损失函数

 效果展示

注意力机制的语义分割

什么是注意力机制?

早期人们对注意力的认知,主要是上下文的关联,或者说是全局性的关联。

往往,一张图像中像素的语义,不仅仅和周围像素相关,也可能和较远的像素相关。

然而,受限于卷积的特性,无法从全局层面去观察图像,从而使得像素之间的上下文关联较为薄弱。

从另一个角度讲,注意力机制的存在一个重要作用,是为了更好的扩大感受野。

因此,空洞卷积(位置固定),从某种程度上来说,可以认为是注意力机制的萌芽

同时需要注意的是,注意力机制不仅仅是扩大感受野。同时,包括:

扩大感受野:为了考虑到相隔较远的像素的关系

  • 过滤不相干信息

  • 建模长距离依赖性

基于注意力机制的模型--PSANet

psanet是较早使用注意力机制的模型。

在该模型之前,语义分割所面临的主要痛点在于:

  1. 感受野问题。堆叠卷积效果一般,空洞卷积位置固定,难以灵活建模和过滤信息

  2. 上下文信息难以结合。相距较远的像素区域存在强关联,但无法有效的关联起来

PSANet针对上述问题的解决方案是:

利用自注意力机制,学习一个注意力掩膜mask,从而在特征层面关联建模,来解决局部特征的约束。

网络结构

input为特征,通过卷积得到两两之间注意力值<变长>(2h*2w),每一长条即:当前点与其他点的相关性;

其中,粉红色的块即得到的注意力特征;X为backbone的输出,经过上路(collect)和下路(distribute)两个分支融合后,得到最终输出。

以上内容即为注意力模块。

总体结构

代码

注意力模型2--DANet

DANet创新性地将注意力划分成两种类型

1. 通道间的注意力(蓝色的块)
2. 通道内的注意力(绿色的块)

以通道内注意力为例,其基本计算过程如下图所示

首先,给定A如下

B经过reshape之后,得到

再转置,得到

那么B C矩阵相乘的结果为

最后,再乘以D,得到

这样,可以看出将同一个通道内的不同位置的信息,融合到了一起

而通道间的注意力map经过类似的处理,得到了下图的结果

显然,他可以融合不同通道间的内容

代码

CCNET:一种十字形的attention模块

non-block:非局部(即全局)

attention与原始特征相乘:即加权

(a)太慢了

一种简化计算的注意力机制。

与级联操作 ( 3*3先经过1*3,在经过3*1:可以加速 ) 类似

经过两次十字attention,即可求解全局下的注意力。

网络结构

reducation:减小channels(为了减小计算量)

加入attention后,就不用加CRF就可以比较好的分割出边缘细节


http://www.niftyadmin.cn/n/412525.html

相关文章

chatgpt赋能python:Python图片裁剪:让您的图片变得更完美

Python 图片裁剪&#xff1a;让您的图片变得更完美 无论您是一名摄影师、设计师、或是一名开发者&#xff0c;一张完美的图片是至关重要的。然而&#xff0c;有时候您拍摄的图片或者设计的图形可能有一些缺陷&#xff0c;例如画面不够清晰、不需要的元素等等&#xff0c;这时候…

excel转xmind

有如下excel&#xff0c;我们想把它转为xmind&#xff1b; 一、主流程 先说一下主要的流程&#xff1a; 需要把excel数据复制出来&#xff0c;放到文本编辑器&#xff08;如notepad&#xff09;中&#xff0c;比较乱哈&#xff0c;如下&#xff1a; 然后需要调整成如下格式…

OSG三维渲染引擎编程学习之七十八:“第七章:OSG场景图形交互” 之 “7.9 场景漫游”

目录 第七章 OSG场景图形交互 7.9 场景漫游 7.9.1 场景漫游描述 第七章 OSG场景图形交互 作为一个成熟的三维渲染引擎,需要提供场景图形管理能力,具备视图与相机操作功能,实现与三维场景的交互,具有场景漫游、交运算,以及要素对象的选择等功能。 OSG三维渲染引擎能较好…

(五)CSharp-结构

一、结构定义 使用类的这种方式来封装数据和功能&#xff0c;在性能方面会有一些损失。&#xff08;由于托管堆的优化&#xff0c;性能损失比较小&#xff09;如果有时只需要一个小的数据结构&#xff0c;不需要类的全部功能&#xff0c;最好使用结构。 所以&#xff0c;结构主…

【Python基础】Python数据容器(列表)

文章目录 Python数据容器1、数据容器入门2、数据容器&#xff1a;list&#xff08;列表&#xff09;列表的定义列表的下标索引小结&#xff1a; 列表的常用操作列表的查询功能&#xff08;方法&#xff09;(1)查找某元素的下标(2&#xff09;修改特定位置&#xff08;索引&…

LVS负载均衡群集及VS/NAT部署

一、企业群集应用概述 1.群集的含义 群集&#xff08;Cluster&#xff09;&#xff0c;又称集群。由多台主机构成&#xff0c;但对外只表现为一个整体&#xff0c;只提供一个访问入口&#xff08;域名或IP地址&#xff09;&#xff0c;相当于一台大型计算机。 但是在互联网应…

Android系统的启动流程(二):SystemServer处理过程

Android系统的启动流程&#xff08;二&#xff09;&#xff1a;SystemServer处理过程 摘要 在上篇文章中&#xff0c;我们已经将启动的进程推进到了ZygoteInit的main中&#xff0c;在ZygoteInit中我们已经知道它的main方法中的forkSystemServer方法将会启动系统服务&#xff0…

企业架构顶层设计TOGAF 9.2架构最佳实践培训课程

一、课程目标 本课程为《企业架构顶层设计TOGAF 9.2架构最佳实践》视频课程&#xff0c;全面介绍了企业数字化转型下IT治理、顶层设计、架构规划TOGAF 9.2标准指南&#xff08;The Open Group ArchitectureFramework&#xff09;最佳实践方法。本课程主要内容涉及&#xff1a;…