目标检测网络之 Mask R-CNN
Mask R-CNN
论文Mask R-CNN(ICCV 2017, Kaiming He,Georgia Gkioxari,Piotr Dollár,Ross Girshick, arXiv:1703.06870)
这篇论文提出了一个概念简单,灵活,通用的目标实例分割框架,能够同时检测目标并进行实例分割.在原Faster R-CNN基础上添加了object mask分支与原目标检测任务分支并列.速度大约5 fps.另外,Mask R-CNN也很容易扩展到其它的任务,比如人体姿态评估.
原Faster R-CNN输出两类值:class label和bounding-box offset.Mask R-CNN加入一路object mask分支输出.object mask要求比前两个具有更精细的空间布局特征.mask分支作用于Fast R-CNN,而RPN保持不变.
多任务损失定义为: L = Lcls+ Lbox+ Lmask.
Lcls+ Lbox保持不变,mask分支输出K个二值mask矩阵(每个像素经过sigmoid,限制到(0,1)区间,使用阈值0.5二值化),Lmask定义为平均交叉熵损失(average binary cross-entropy loss).这种Lmask定义方式与FCN等语义分割网络的损失定义有所不同.FCN使用per-pixel softmax 和 multinomial cross-entropy loss,会在类间产生竞争.
与FCN一样,采用转置卷积产生和原图中ROI大小相同的mask图.由于是像素到像素的映射,所以原来的fc层的特征向量的形式不能够被使用,并且RoIPool层缺失一些特征空间对应关系.因此作者提出了RoIPool层的改进版RoIAlign层.
RoIAlign
RoIPooling将大小不同的RoI对应的特征图划分为7×7的bins,每个bin采用max pooling,这样每个RoI都得到了相同尺度的特征.由于RoI对应到特征图上的区域时对坐标值做除法并取整([x/16]),并且划分7x7网格时也有除法操作.如果不能整除,带来不对齐的问题. 比如由于量化操作将2.4量化为2,那么这0.4的偏差放大到输入原图大小, 如放大32倍,那么偏差变为12.8像素. 偏差较大,对小目标的检测不利.
论文提出的RoIAlign避免了对RoI边界的处理,采用了双线性差值(采用Spatial transformer networks中的方法)计算每个RoI bin中若干个采样点(相比于RoIPooling,这里的采样点是浮点型)的特征值. 浮点型的采样点像素值的计算通过与该点最近邻的四个整数点的像素值差值得到.距离越近的值贡献越高,如下图所示:

线性差值与双线性差值
线性差值: 已知数据 (x0, y0) 与 (x1, y1),要计算 [x0, x1] 区间内某一位置 x 在直线上的 y 值:
\[
\begin{equation}
\frac{y - y_0}{x - x_0} = \frac{y_1 - y_0}{x_1 - x_0} \\
y = \frac{x_1 - x}{x_1 - x_0}y_0 +\frac{x - x_0}{x_1 - x_0}y_1
\end{equation}
\]
双线性插值: 相继在x和y两个方向上做线性差值. 如下图所示, 先在x方向上插值得到R1, R2, 再由R1, R2在y方向上插值得到点P的结果:

如果选择一个坐标系统使得 f 的四个已知点坐标分别为 (0, 0)、(0, 1)、(1, 0) 和 (1, 1),那么插值公式就可以化简为
\({\displaystyle f(x,y)\approx f(0,0)\,(1-x)(1-y)+f(1,0)\,x(1-y)+f(0,1)\,(1-x)y+f(1,1)xy}\)
实验结果也表明RoIAlign可以提高COCO数据集上的准确率,而在VOC上提升不明显,而COCO包含较多的小目标. 因此 RoIAlign 在COCO数据集上的提升比较明显,见下表:

作者与之前采用的RoIWarp方法(Instance-aware semantic segmen-
tation via multi-task network cascades. CVPR2016)做了对比.
RoIWarp是在RoIPool基础上用双线性差值,与RoIPool同样存在不对齐的问题,与RoIAlign的结果对比表明align在其中起到关键作用.

ROI Align 反向传播:
反向传播: ROI Pooling与max pooling类似,只在选择的点上进行梯度回传.
\[
\frac{\partial L}{\partial x_i}=\sum_r\sum_j [i=i^*(r,j)]\frac{\partial L}{\partial y_{rj}}
\]
\(x_i\) 代表池化前特征图上的像素点; \(y_{rj}\) 代表池化后的第r个候选区域的第j个点; \(i^*(r,j)\) 代表点 \(y_{rj}\) 像素值的来源.
ROI Align 中特征图上的像素点 \(i^*(r,j)\)被选择作为池化结果的计算时用到了相邻的若干个点(论文取4个点),因此梯度反向传播如下:
\[
{\partial L\over \partial x_i}=\sum_r\sum_j [d(i,i^*(r,j))<1](1-\Delta h)(1-\Delta w){\partial L\over \partial y_{rj}}
\]
Inference测试阶段
测试时只计算top-100的目标框对应的mask,每个目标框对应K个类别的mask.将目标框的分类类别(置信度最大的)对应的mask作为最终的结果. mask分支仅加重了原网络~20%的计算量.

在COCO数据集上的检测结果对比:

可以看出,仅替换RoIPool就在FPN的结果上提高了1%,使用Mask分支后又提高了约1%,加入Mask分支使检测任务的结果得以提升的原因可能是因为分割任务的训练使特征提取更好,毕竟数据集标签中多了mask这种更加详细的像素类别信息.
应用分析
制作mask标记可能比较费时费力,如果不需要实例分割功能的话,我们可以不使用mask分支,仅使用其提出的RoIAlign方法对原网络进行提升.
参考:
- PSROI-Pooling 源码
- 详解 ROI Align 的基本原理和实现细节: http://blog.leanote.com/post/afanti/b5f4f526490b
- 双线性插值: https://zh.wikipedia.org/wiki/%E5%8F%8C%E7%BA%BF%E6%80%A7%E6%8F%92%E5%80%BC
目标检测网络之 Mask R-CNN的更多相关文章
- 目标检测网络之 R-FCN
R-FCN 原理 R-FCN作者指出在图片分类网络中具有平移不变性(translation invariance),而目标在图片中的位置也并不影响分类结果;但是检测网络对目标的位置比较敏感.因此Fas ...
- 目标检测网络之 YOLOv2
YOLOv1基本思想 YOLO将输入图像分成SxS个格子,若某个物体 Ground truth 的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这个物体. 每个格子预测B个bounding b ...
- 目标检测网络之 YOLOv3
本文逐步介绍YOLO v1~v3的设计历程. YOLOv1基本思想 YOLO将输入图像分成SxS个格子,若某个物体 Ground truth 的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这 ...
- 使用Caffe完成图像目标检测 和 caffe 全卷积网络
一.[用Python学习Caffe]2. 使用Caffe完成图像目标检测 标签: pythoncaffe深度学习目标检测ssd 2017-06-22 22:08 207人阅读 评论(0) 收藏 举报 ...
- CVPR2020:三维实例分割与目标检测
CVPR2020:三维实例分割与目标检测 Joint 3D Instance Segmentation and Object Detection for Autonomous Driving 论文地址 ...
- 目标检测之R-CNN系列
Object Detection,在给定的图像中,找到目标图像的位置,并标注出来. 或者是,图像中有那些目标,目标的位置在那.这个目标,是限定在数据集中包含的目标种类,比如数据集中有两种目标:狗,猫. ...
- AI佳作解读系列(二)——目标检测AI算法集杂谈:R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3
1 引言 深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理.本文着重与分析目标检测领域的深度学习方法,对其中的经典模型框架进行深入分析. 目标检测可以理解为是物 ...
- 目标检测-Faster R-CNN
[目标检测]Faster RCNN算法详解 Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with r ...
- 深度学习笔记之目标检测算法系列(包括RCNN、Fast RCNN、Faster RCNN和SSD)
不多说,直接上干货! 本文一系列目标检测算法:RCNN, Fast RCNN, Faster RCNN代表当下目标检测的前沿水平,在github都给出了基于Caffe的源码. • RCNN RCN ...
随机推荐
- Mongo 开发笔记
时间 程序的时间是本地时间 ,数据库中的时间是 ISO 标准时间 . ISO时间 + 8 小时 = 本地时间(北京时间 ) Java驱动会自动做转化. 语法 数组查询 数据查询使用 elemMatch ...
- linux第三次读书笔记
第七章:链接 一.编译器驱动程序 编译系统提供的调用预处理器.编译器.汇编器和链接器来构造目标文件的程序. 二.静态链接 三.目标文件 三种形式: 1.可重定位目标文件: 2.可执行目标文件: 3.共 ...
- HTML编码规则
<!DOCTYPE html><!-- 为每一个HTML页面的第一行添加标准模式 --> <html lang="en-us"> <!-- ...
- git使用命令记录
一,两个概念:1.工作区:你电脑里能看见的目录,比如一个项目文件夹就是一个工作区2.版本库工作区(该项目的文件夹)中有一个隐藏文件 .git ,就是git的版本库.(这个文件默认是隐藏,Ctrl+h ...
- Mind Manager X 10 registry backup key under windows XP
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Mindjet\MindManager\10] [HKEY_CURRE ...
- Java WebDriver 使用经验
0x00 背景 WebDriver作为Selenium项目的工具之一,可以高效的操作各类主流浏览器包括诸如:chrome.IE.Firefox.Safari,并同时支持windows和*nux系统.W ...
- node的读写流
let http = require('http'); http.createServer((req,res)=>{ res.end(); }).listen(,()=>{ console ...
- vue 路由传参 params 与 query两种方式的区别
初学vue的时候,不知道如何在方法中跳转界面并传参,百度过后,了解到两种方式,params 与 query.然后,错误就这么来了: router文件下index.js里面,是这么定义路由的: { p ...
- [工作相关] GS产品使用LInux下Oracle数据库以及ASM存储时的数据文件路径写法.
1. 自从公司的GS5版本就已经支持Linux下的oracle数据库通过安装工具自动安装注册了, 只不过路径需要使用linux的命名规则, 如图: /home/oracle/ 注意 最后是有一个 斜线 ...
- MidoNet 安装(Kilo RDO)(最老版)
一.初始化(Kilo RDO)版(最老版) 环境介绍 系统 CentOS 7.3 主机ip 10.211.55.5 主机名 midonet 1.配置yum源 ###OpenStack源 yum ins ...