CenterMask paper笔记

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

CenterMask是一个anchor free的实例分割模型,
来自paper: CenterMask: Real-Time Anchor-Free Instance Segmentation

提起anchor free, 会想到FCOS模型,是用来目标检测的,
那么这里就用到了FCOS, 不过换了backbone,

在FCOS检测出目标框后,提取目标框内的特征,用了一个SAG Mask, 这是一个spatial attention module,
这个attention的输出会和输入端相乘,再上采样,过1x1 conv, 就得到了每个class的mask,

具体见下面的结构图:

在这里插入图片描述

backbone的改进

backbone用的是VoVNetV2, 改进自VoVNet(paper),这篇paper没有看,就不在这里展开了,但是有几个改进的点如下。

1.OSA模块添加residual connection

把OSA模块叠加之后,发现效果是下降的,比如VoVNetV1-99, 作者联想到和ResNet的原理有关,于是在每个OSA模块中都添加了residual connection, 提升了效果。

2.eSE channel attention

VoVNet中用的是SE(Squeeze-Excitation)channel attention, 作者发现FC layer会减少channel size, 引起channel信息的损失。所以将两个FC layer换成了一个,保持了channel的维度,防止信息的损失,提升了效果。
改进后成为effective SE (eSE).

在这里插入图片描述

前面说了,CenterMask是在FCOS预测的目标框基础上提取mask,
类似Mask R-CNN,
ROI是根据FPN中不同层的feature中预测的,所以ROI Align也应该从FPN的不同层中提取特征。
至于在哪个层中提取,有一个函数。

Adaptive RoI Assignment Function的改进

直觉上来说,大尺寸的ROI对应的感受野大,应该从FPN的高层中提取feature,反之同样。
在Mask R-CNN中,FPN的层数是这样指定的:
在这里插入图片描述
k0是4,w,h是每个ROI的宽和高。
224是imageNet的输入,这个是写S的。
也就是说,看ROI和input size的比例,以4层为中心移动,
如果刚好w和h都是224, 那么log项为0,就从第4层提取,如果w和h都是112,log项为-1,k=3。

但是这个公式不适用于FCOS,想必你们也能看出来,首先224写S的这一项就不符合,
如果input size变了呢。
另外,公式(1)中中心层设的是4,以第4层为中心移动,这个是two-stage detector适用的,
因为two-stage用的是P2~P5层。
但是one-stage用的是P3~P7层。

所以作者做了如下改进:
在这里插入图片描述
直接用了input size和ROI size的比例,用最大层去减,就不存在几个写S的问题。
这样做可以提高小目标的AP。
作者设 k m a x k_{max} kmax为P5, k m i n k_{min} kmin为P3.

SAG Mask

这个是从ROI region中提取attention feature的部分。
再来看下结构图。

在这里插入图片描述
在object detection领域,attention被广泛应用,其中,
channel attention强调了注意哪个channel, 强调的是"what",
而spatial attention强调的是"where", 注意哪个region.

所以这里用的是spatial attention. 强调的是注意哪些pixel.

上面图中,ROI区域内的feature被ROI Align (14x14)提取,然后送给4个conv和SAG Mask。
设SAM的输入为 X i X_i Xi, size为C x W x H,
可以看到SAM结构中,先把Xi分别过max pooling 和 avg pooling, 注意是沿channel进行pooling,
所以它们得到的结果都是1 x W x H, 把它们concatenate到一起,
再过一个3x3 conv, 再过一个sigmoid.
对应paper的如下部分:

在这里插入图片描述
当然了,现在得到的是一个attention map, 相当于一个权重map.
还需要和input的Xi相乘,会得到一个attention guided feature map.
在这里插入图片描述
然后这个feature map 会过一个2x2的deconv, 上采样到28x28.
最后过一个1x1 conv得到每个class对应的mask.

实现细节

FCOS的超参调整,positive score 阈值从0.05降到0.03, 因为在初始训练时positive ROI产生不是太好。
还用了mask score来进一步过滤mask。

Lite版本把FPN的channel从256降到128以提升效率。
centerness branch是被box branch shared.
conv layer 和 channel的削减。

训练

FCOS的detection box个数设为100个,其中score最高的放进SAG mask branch作为训练.
mask target选择和gt mask的ROI较大的。

损失函数加上 L m a s k L_{mask} Lmask, 也就是BCE loss。
在这里插入图片描述

Ablation study

SAM和Mask score.
在这里插入图片描述
Feature level的选取,
所以前面的 k m a x k_{max} kmax取5, k m i n k_{min} kmin取3。
在这里插入图片描述

各种method比较

在这里插入图片描述


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

相关文章

华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】

使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:https://blog.csdn.net/hihell/category_12201821.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 分糖果 小明从糖果…

dubbo整合nacos进行远程调用

doubbo是什么? Apache Dubbo 最初在 2008 年由 Alibaba 捐献开源,很快成为了国内开源服务框架选型的事实标准框架 ,得到了各行各业的广泛应用。在 2017 年,Dubbo 正式捐献到 Apache 软件基金会并成为 Apache 顶级项目&#xff0c…

[C++][ubuntu]MNN在ubuntu18.04源码编译流程

1、先编译protobuf 安装依赖 sudo apt update sudo apt install libprotobuf-dev protobuf-compiler cmake git -y 下载源码: wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protobuf-all-3.19.4.tar.gz tar -zxvf protobuf-al…

nginx基础篇

文章目录前言一、nginx介绍二、nginx应用场合Nginx 作为 web 服务器正向代理反向代理负载均衡动静分离三、nginx的源码安装编译1.引入库2.读入数据总结前言 一、nginx介绍 传统的 Web 服务器,每个客户端连接作为一个单独的进程或线程处理,需在切换任务时…

springbatch设置throttle-limit参数不生效

背景描述 当springbatch任务处理缓慢时,就需要使用多线程并行处理任务。 参数throttle-limit用于控制当前任务能够使用的线程数的最大值。 调整throttle-limit为10时,处理线程只有8,再次增大throttle-limit值为20,处理线程依旧为…

总结:电容在电路35个基本常识

1 电压源正负端接了一个电容,与电路并联,用于整流电路时,具有很好的滤波作用,当电压交变时,由于电容的充电作用,两端的电压不能突变,就保证了电压的平稳。 当用于电池电源时,具有交流…

【微信小程序】使用页面跳转并携带多个特定参数

前言在我们项目的搭建时常常会用到页面跳转,在微信小程序中也支持多个跳转类型。如(wx.switchTab\wx.reLauch\wx.redirectTo\wx.navigateTo\wx.navigateBack)等等,每一个路由API都是有相对应的特定跳转功能,在这里我就不赘述了。微信开发者文…

本地代码推送到Coding

话不多说,开门见山 一、coding准备 注册啊,建项目,这些就不用多说了。 1.创建一个代码仓库 填一下名称和描述就行,其他先不用填,然后点最下面完成创建就行。 2.保存代码仓库地址 二、本地代码仓库准备 已经是在…