您当前的位置:首页 > 发表论文>论文发表

关键点检测论文

2023-03-03 13:18 来源:学术参考网 作者:未知

关键点检测论文

什么是人体骨骼关键点检测?

应用

挑战

人体骨骼关键点检测方法主要分两周:自上而下和自下而上。

coordinate :坐标 直接将关键点坐标作为最后网络需要回归的目标,这样可以得到每个坐标点的直接位置信息

heatmap :热图 每一类坐标用一个概率图来表示,对图片中的每个像素位置都给一个概率,表示该点属于对应类别关键点的概率。距离关键点位置越近的像素点的概率越接近于1,距离关键点越远的像素点的概率越接近于0。具体的一般使用高斯函数来模拟。

offset :偏移量 表示距离目标关键点一定范围内的像素位置与目标关键点之间的关系。

Convolutional Pose Machines :本论文将深度学习应用于人体姿态分析,同时用卷积图层表达纹理信息和空间信息。主要网络结构分为多个stage,其中第一个stage会产生初步的关键点的检测效果,接下来的几个stage均以前一个stage的预测输出和从原图提取的特征作为输入,进一步提高关键点的检测效果。具体的流程图如下图(摘自论文[1])所示。

Cascaded Pyramid Network for Multi-Person Pose Estimation :本论文将深度学习应用于人体姿态分析,同时用卷积图层表达纹理信息和空间信息。主要网络结构分为多个stage,其中第一个stage会产生初步的关键点的检测效果,接下来的几个stage均以前一个stage的预测输出和从原图提取的特征作为输入,进一步提高关键点的检测效果。具体的流程图如下图(摘自论文[2])所示。

RMPE :本论文主要考虑的是自上而下的关键点检测算法在目标检测产生Proposals的过程中,可能会出现检测框定位误差、对同一个物体重复检测等问题。检测框定位误差,会出现裁剪出来的区域没有包含整个人活着目标人体在框内的比例较小,造成接下来的单人人体骨骼关键点检测错误;对同一个物体重复检测,虽然目标人体是一样的,但是由于裁剪区域的差异可能会造成对同一个人会生成不同的关键点定位结果。本文提出了一种方法来解决目标检测产生的Proposals所存在的问题,即通过空间变换网络将同一个人体的产生的不同裁剪区域(Proposals)都变换到一个较好的结果,如人体在裁剪区域的正中央,这样就不会产生对于一个人体的产生的不同Proposals有不同关键点检测效果。具体Pipeline如下图(摘自论文[14])所示。

Part Segmentation :即对人体进行不同部位分割,而关键点都落在分割区域的特定位置,通过部位分割对关键点之间的关系进行建模,既可以显式的提供人体关键点的空间先验知识,指导网络的学习,同时在最后对不同人体关键点进行聚类时也能起到相应的连接关键点的作用。如下图(论文[4])所示。

Part Affinity Fields :

网络分为两路结构,一路是上面的卷积层,用来获得置信图;一路是下面的卷积层,用来获得PAFs。网络分为多个stage,每一个stage结束的时候都有中继监督。每一个stage结束之后,S以及L都和stage1中的F合并。上下两路的loss都是计算预测和理想值之间的L2 loss。

personlab是一个自下而上的人体检测和姿态估计算法。包括两个步骤:

关键点检测阶段的目标是检测属于图像(可能不止一个人)中任何人体的关键点。该阶段生成一个热图和一个偏移量:

假设 是图像中二维位置中的一个,其中 是图像的位置索引, 是像素点的个数。

使用Hough投票集合热图和偏移量,聚合成hough分数映射 , 其中 为图像的每个位置, 为双线性插值核。

的局部最大值作为关键点的候选位置点,但是 没有与个体相关的信息,当图像中有多个个体存在时,我们需要一个机制将关键点聚合在其对应的个体上。 Mid-range pairwise offsets 为了达到以上目的,在网络上加入一个分离的成对中射程2-D偏移域输出 用来连接成对的关键点。训练集中 ,表示对于同一个个体 从第 个关键点到第 个关键点。

对于具有大量个体的情况,很难准确的回归 ,使用更准确的短射程偏移来递归的修正:

[1] Convolutional Pose Machines [2] Cascaded Pyramid Network for Multi-Person Pose Estimation [3] RMPE: Regional Multi-Person Pose Estimation

目标检测Anchor-free分支:基于关键点的目标检测

cornerNer论文链接:
github:
CenterNet论文链接:
github:
CornerNe-Lite论文链接:
github:

所谓基于关键点进行目标检测,其实就是使用one-stage网络将目标边界框检测为一对关键点(即边界框的左上角和右下角)。通过将目标检测为成对关键点,就可消除现有的one-stage检测网络中对一组anchors的需要,这个最近火热的anchor-free也是不谋而合。接下来,先简单介绍下CornetNet和CenterNet这两个基于特征点的目标检测网络。最后对CornerNet-Squeeze做个简单介绍!

CornerNet网络的整体思路是,首先通过Hourglass Network网络进行特征提取,紧接着将网络得到的特征输入到两个模块: Top-left Corner pooling 和 Bottom-right Corner pooling 提取关键点的特征,对于每个Corner Pooling模块都会进行目标框的左上角关键点和右下角关键点的类别分类( Heatmaps ),并找到每个目标的一对关键点( Embeddings ),以及减少基于坐标回算目标目标位置时的偏置( offsets )。网络的整体结构图如下:

很显然,CornerNet的核心是四个部分:

最终,如下图所示,上半支路的网络结果如下所示,网络最终是由两条支路组成的。

CenterNet网络主要是基于CornerNet网络存在的问题,而提出的基于关键点目标检测的网络。其实现了目前为止在one-stage系类算法中最高的MAP。CenterNet的作者发现,CornerNet是通过检测物体的左上角点和右下角点来确定目标,但在此过程中CornetNet使用corner pooling仅仅能够提取到目标边缘的特征,而导致CornetNet会产生很多的误检。基于此,CenterNet利用关键点 三元组 即 中心点、左上角关键点和右下角关键点 三个关键点而不是两个点来确定一个目标,使得网络能够获取到目标内部的特征。而CornerNet在论文中也说道了,约束其网络性能最重要的部分是关键点的提取,因此CenterNet提出了 Center Pooling 和 cascade corner Pooling 用来更好的提取本文提出的三个关键点。

作者基于Corner Pooling的系列思想,提出了Center Pooling的思想,使得网络提取到的中心点特征能够更好的表征目标物体。

最终,CenterNet在CornerNet的基础上增加了中心点的预测,以及修改了关键点特征的提取方式,大大减小了网络的误检,并且实现了one-stage系列算法中的最好效果。

普林斯顿大学在4月19号提出了两种更高效的基于关键点的目标检测算法,分别为: CornetNet-Saccade 和 CornetNet-Squeeze ,若将两种策略结合则称为 CornerNet-Lite 。

以下是Cver对这两个网络的介绍,个人感觉写的很好,我就不造轮子了:

最终我最感兴趣的网络CornerNet-Squeeze和YOLOv3进行对比,达到了如下图所示的效果。

然而,就在我学习并总结这篇文章的过程中,我发现CornerNet-Squeeze是基于CornerNet改进的,但正如上文中介绍CenterNet的时候提到过的CornerNet所具有的那些弊端,我总觉得CornerNet-Squeeze在误检的部分不一定会很优秀,所以接下来就是看源码阶段了,希望CornerNet-Squeeze能够不负我望哈~

DenseBox: Unifying Landmark Localization with End to End Object Detection

在Cver上看到一篇推文,总结了多篇类似anchor-free论文:
1.DenseBox: Unifying Landmark Localization with End to End Object Detection
2.You Only Look Once: Unified, Real-Time Object Detection
3.CornerNet: Detecting Objects as Paired Keypoints
4.Bottom-up Object Detection by Grouping Extreme and Center Points
5.Feature Selective Anchor-Free Module for Single-Shot Object Detection
6.FCOS: Fully Convolutional One-Stage Object Detection
7.An Anchor-Free Region Proposal Network for Faster R-CNN based Text Detection Approaches
8.FoveaBox: Beyond Anchor-based Object Detector

DenseBox, 这是一篇百度2016年挂出来的论文,距离现在比较早的文章了,现在又被拿出来重提了,因为其中anchor-free的特点,我把它找出来了。发现这是一篇百度的神作,有很多极其超前的思路。出现了特征融合,多任务训练,多尺度,通过添加任务分支进行关键点检测(直到2017年mask-rcnn才公布通过添加掩码在Faster-rcnn进行上进行分割任务)。

对于分类{0,1},这个模型使用L2损失,并没使用hinge loss or cross-entropy loss,按照作者说法这个简单的L2损失也能工作的很好。

坐标也是l2损失

网络添加Conv5_2_landmark和Conv6_3_det输出,对于检测N个关键点的任务,Conv5_2_landmark有N个热图,热图中的每个像素点表示改点为对应位置关键点的置信度。对于标签集中的第i个关键点(x,y) ,在第i个feature map在(x,y) 处的值是1,其它位置为0.Conv6_3_det就是关键点的分数热力图。

参考:
目标检测:Anchor-Free时代
那些酷炫的深度学习网络图怎么画出来的?
CVPR2019-Code
人脸检测之DenseBox

anchorfree只有一个输出吗

热门频道

首页

博客

研修院

VIP

APP

问答

下载

社区

推荐频道

活动

招聘

专题

打开CSDN APP
Copyright © 1999-2020, CSDN.NET, All Rights Reserved

打开APP

Anchor-free之CenterNet 原创
2020-07-09 22:39:58

有点方

码龄7年

关注
anchor-base VS Anchor-free
Anchor-base存在的问题:

•与锚点框相关超参 (scale、aspect ratio、IoU Threshold) 会较明显的影响最终预测效果;

•预置的锚点大小、比例在检测差异较大物体时不够灵活;

•大量的锚点会导致运算复杂度增大,产生的参数较多;

•容易导致训练时negative与positive的比例失衡。

Anchor-free算法的优点:

•使用类似分割的思想来解决目标检测问题;

•不需要调优与anchor相关的超参数;

•避免大量计算GT boxes和anchor boxes 之间的IoU,使得训练过程占用内存更低。

由于物体的中心区域是远小于其他背景区域的,整个分类的正负样本和难易样本是极不均衡的。直接训练这样的分类问题很难收敛到一个满意的结果。Base anchor对于正负样本比例失调的解决方式一般为focal loss 和OHEM。前者在损失函数上优化,对正负样本已经困难样本进行不同程度的惩罚;后者将原来的ROI网络扩充为两个ROI,一个ROI只有前向传播,用于计算损失,一个ROI正常前向后向传播,以hard example作为输入,计算损失并传递梯度,根据损失进行筛选,选出对分类和检测影响大的样本。

Base anchor检测差异较大物体的策略主要是FPN,如果没有引入FPN,feature map的每个位置只能输出一个框,并且下采样的倍数是8或者16,那么可能会有很多物体的中心点落在同一格子中,这样就会导致训练的时候有多框重叠现象。FPN这种多层级的表示有效解决了这种冲突的现象,可以在一定程度上解决检测物体差异较大的现象。Anchor free没有使用FPN, feature map的每个位置只能输出一个框,下采样的倍数是8或者16,随着FPN的引入,不同尺寸的物体被分配到了不同的层级上,冲突的概率大大降低。

CenterNet VS CornerNet等
CornerNet将bbox的两个角作为关键点;ExtremeNet 检测所有目标的 最上,最下,最左,最右,中心点。它们都需要经过一个关键点grouping阶段,这会降低算法整体速度。CenterNet针对CornerNet对内部语义缺失和grouping耗时的问题,提出了对中心点进行估计的方法,找到目标的中心,回归出他们的尺寸。仅仅提取每个目标的中心点,无需对关键点进行grouping 或者是后处理。

网络结构
论文中CenterNet提到了三种用于目标检测的网络,这三种网络都是编码解码(encoder-decoder)的结构:

1. Resnet-18 with up-convolutional layers : 28.1% coco and 142 FPS

2. DLA-34 : 37.4% COCOAP and 52 FPS

3. Hourglass-104 : 45.1% COCOAP and 1.4 FPS

每个网络内部的结构不同,但是在模型的最后输出部分都是加了三个网络构造来输出预测值,默认是80个类、2个预测的中心点坐标、2个中心点的偏置。

确立中心点
在整个训练的流程中,CenterNet学习了CornerNet的方法。对于每个标签图(ground truth)中的某一类,我们要将真实关键点(true keypoint) 计算出来用于训练,中心点的计算方式如下

对于下采样后的坐标,我们设为

其中 R 是文中提到的下采样因子4。所以我们最终计算出来的中心点是对应低分辨率的中心点。然后我们对图像进行标记,在下采样的[128,128]图像中将ground truth point以下采样的形式,用一个高斯滤波来将关键点分布到特征图上。

损失函数

1.中心点的损失函数

其中 α 和 β 是Focal Loss的超参数, N 是图像 I 的的关键点数量,用于将所有的positive focal loss标准化为1。在这篇论文中 α 和 β 分别是2和4。这个损失函数是Focal Loss的修改版,适用于CenterNet。

2.目标中心的偏置损失
图像进行了 R=4 的下采样,这样的特征图重新映射到原始图像上的时候会带来精度误差,因此对于每一个中心点,额外采用了一个local offset 去补偿它。所有类 c 的中心点共享同一个offset prediction,这个偏置值(offset)用L1 loss来训练:

这个偏置损失是可选的,我们不使用它也可以,只不过精度会下降一些。

3.目标大小的损失
假设 (X1(k),Y1(k),X2(k),Y2(k)) 为为目标 k,所属类别为c,它的中心点为

我们使用关键点预测 Y^ 去预测所有的中心点。然后对每个目标 K 的size进行回归,最终回归到Sk=(X2(k)-X1(k), Y2(k)-Y1(k)),这个值是在训练前提前计算出来的,是进行了下采样之后的长宽值。作者采用L1 loss 监督w,h的回归

4.总损失函数
整体的损失函数为物体损失、大小损失与偏置损失的和,每个损失都有相应的权重。

论文中 size 和 off的系数分别为0.1和1 ,论文中所使用的backbone都有三个head layer,分别产生[1,80,128,128]、[1,2,128,128]、[1,2,128,128],也就是每个坐标点产生 C+4 个数据,分别是类别以及、长宽、以及偏置。

推理阶段
在预测阶段,首先针对一张图像进行下采样,随后对下采样后的图像进行预测,对于每个类在下采样的特征图中预测中心点,然后将输出图中的每个类的热点单独地提取出来。就是检测当前热点的值是否比周围的八个近邻点(八方位)都大(或者等于),然后取100个这样的点,采用的方式是一个3x3的MaxPool。代码中设置的阈值为0.3,也就是从上面选出的100个结果中调出大于该阈值的中心点,最后经过soft nms得到最终的结果。

CenterNet的缺点
1.当两个不同的object完美的对齐,可能具有相同的center,这个时候只能检测出来它们其中的一个object。

2.有一个需要注意的点,CenterNet在训练过程中,如果同一个类的不同物体的高斯分布点互相有重叠,那么则在重叠的范围内选取较大的高斯点。

附:

DCN:

文章知识点与官方知识档案匹配
OpenCV技能树OpenCV中的深度学习图像分类
12101 人正在系统学习中
打开CSDN APP,看更多技术内容

CenterNet(Objects as Points)学习笔记
论文: Objects as Points Code: CenterNer的提出 一般的detection方法将object识别成(无旋转的)矩形框。大部分成功的object检测器会枚举出很多object的位置和尺寸,对每一个候选框进行分类。这是浪费的、低效的。 常规方法中的后处理方法(nms等)是很难微分(diff...
继续访问

『深度应用』对CenterNet的一些思考与质疑·对比与U版YoloV3速度与精度
0.引子 笔者很喜欢CenterNet极简的网络结构,CenterNet只通过FCN(全卷积)的方法实现了对于目标的检测与分类,无需anchor与nms等复杂的操作高效的同时精度也不差。同时也可以很将此结构简单的修改就可以应用到人体姿态估计与三维目标检测之中。 后面一些针对CenterNet结构应用于其他任务,也取得不错的效果,比如人脸检测CenterFace以及目标追踪CenterTrack与FairMot。这些内容后面等笔者研习过后再补充,后面应该会做一个类CenterNet结构总结对比,感兴.
继续访问

最新发布 目标检测 | Anchor free之CenterNet深度解析
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达1 前言本文接着上一讲对CornerNet的网络结构和损失函数的解析,链接如下本文来聊一聊Anchor-Free领域耳熟能详的CenterNet。原论文...
继续访问

CenterNet遇到的问题
问题总结 参考pillow报错 conda install 'pillow<7.0.0' 报错参考THCG改main中 conda创建环境相关操作 conda相关操作2 urllib.error.HTTPError: HTTP Error 404: Not Found网络问题 AttributeError: Can't pickle local objec...
继续访问
目标检测:使用mmdetection对比centernet与yolov3的性能
前情概要 上一篇博客,我通过mmdetection实现的源码解释了centernet的原理,并分析了该算法的一些优缺点,本篇博客我将讲解如何通过mmdetection运行centernet,并基于一个x光数据集对比centernet与yolov3的性能。 本文使用数据集介绍 本文使用的数据集是安检x光的数据集,数据集大小为3600张图片和对应标注,样例图片如下 而需要检测的物体label有10个:knife、scissors、lighter、zippooil、pressure、slingshot、han
继续访问

关于CenterNet移动端部署的思考(for ncnn)
参考 腾讯技术工程 公众号: 本文主要是参考 arlencai 大佬的博文,对于cneternet在ncnn平台移植的实操和分析,先mark一下,准备后续有空闲尝试将这一思路在nvidia的jetson平台上尝试部署,并进行系列优化(如硬件方面框架的tensorrt量化优化、网络层面的移动端部署替代,或者类似yolov5的CSP结构等方法改良尝试等) 一、背景 原文中,大佬主要是针对微信的“扫一扫”功能进行阐述
继续访问

CenterNet
原文: 扔掉anchor!真正的CenterNet——Objects as Points论文解读 Oldpan 2019年5月16日 0条评论137次阅读0人点赞 anchor-free目标检测属于anchor-free系列的目标检测,相比于CornerNet做出了改进,...
继续访问

Anchor Free,框即是点,CenterNet
论文:Objects as Points Github: CVPR 2019 CenterNet,一个anchor free的新的检测算法,算是对cornerNet的改进,在cornerNet基础上,引入了中心点的概念,因此,称为CenterNet。 算法亮点, anchor free,大大减少了a...
继续访问

深度学习(三十七)——CenterNet, Anchor-Free, NN Quantization
CenterNet CenterNet是中科院、牛津、Huawei Noah’s Ark Lab的一个联合团队的作品。(2019.4) 论文: 《CenterNet: Keypoint Triplets for Object Detection》 上图是CenterNet的网络结构图。 正如之前提到的,框对于物体来说不是一个最好的表示。同理,Corner也不是什么特别好的表示:绝大多数情况下,C...
继续访问

anchor-free目标检测之centernet
自从anchor-free方法实现目标检测的Cornernet提出后,对其进行改进的方法也出现了许多。centernet是一篇对其进行改进的论文,将原来的二元组角点检测扩展为三元组检测,加入了中心点的检测。 为了克服需要手动设计anchor的超参数的问题,Cornernet提出基于关键点检测的方法。但是,基于关键点的方法经常会产生大量不正确的对象边界框,可以说是由于缺少对裁剪区域的额外观察。 ...
继续访问

目标检测深度学习方法综述(二)
0.前言 本来准备将一些模型汇总成一篇博客的,但是不知道为啥写了一万多字之后这博客草稿就保存不了了,所以我将剩下的部分放到这篇博客中来(奇怪的BUG )前文地址: 我们接着上篇文章的章节来好吧。 4.4 SSD算法 SSD 算法是 Faster RCNN 和 YOLO 的结合: 采...
继续访问

配置和运行CenterNet时踩过的坑
在运行CenterNet时遇到的一些问题
继续访问

简单聊聊centerNet:将目标当成点-1.论文
CenterNet:将目标视为点 《Objects as Points》 Date:20190417 Author:德克萨斯大学奥斯汀分校 和 UC 伯克利 ariXiv: https://arxiv.org/abs/1904.07850​arxiv.org github: https://github.com/xingyizhou/CenterNet​github.com ...
继续访问
CenterNet配置及问题详解
作者原版github: Install 按照readme文件夹中的INSTALL.md操作: 0.创建一个虚拟环境 conda create --name CenterNet python=3.6#创建一个名为CenterNet的python3.6虚拟环境 source activate CenterNet #激活...
继续访问
热门推荐 CenterNet算法笔记
论文:Objects as Points 论文链接: 代码链接: 这篇CenterNet算法也是anchor-free类型的目标检测算法,基于点的思想和CornerNet是相似的,方法上做了较大的调整,整体上给人一种非常清爽的感觉,算法思想很朴素、直接,而且...
继续访问

论文阅读笔记 | 目标检测算法——CenterNet算法
如有错误,恳请指出 文章目录1. Introduction2. Preliminary2.1 keypoint detection loss2.2 offset loss2.3 size loss2.4 overall loss3. Objects as Points4. Result paper:Objects as Points Source code: 思想: 目标检测将对象识别为图像中与轴对齐的框。大多数成功的物体检测.
继续访问

目标检测Anchor free方法总结:YOLOv1、CornerNet、CenterNet、FCOS
YOLOv1(2016): CornerNet(2018): CenterNet(2019): FCOS(2019): 什么是Anchor free方法?   Anchor free是相对于Anchor base而言的一种目
继续访问

Anchor-free目标检测系列3:CenterNet Object as points
​​​​​​CenterNet(一个中心点) CenterNet: Objects as Points (2019.4.17) 论文是由德克萨斯大学奥斯汀分校和UC 伯克利学者共同提出的真正意义上anchor-free的算法。与之前介绍的CornerNet系列算法不同,CenterNet仅仅检测目标中心点,没有后续的角点配对及NMS后处理操作,检测速度和精度相比于one-stage和two...
继续访问

扔掉anchor!真正的CenterNet——Objects as Points论文解读
前言 anchor-free目标检测属于anchor-free系列的目标检测,相比于CornerNet做出了改进,使得检测速度和精度相比于one-stage和two-stage的框架都有不小的提高,尤其是与YOLOv3作比较,在相同速度的条件下,CenterNet的精度比YOLOv3提高了4个左右的点。 CenterNet不仅可以用于目标检测,还可以用于其他的一些任务,如肢体识别或者...
继续访问
深度学习
计算机视觉
机器学习
写评论

评论

收藏

点赞



分享

【CV论文笔记】Mask R-CNN之RoIAlign理解

本文主要用于介绍Kaiming He, rbg等大神于2017年提出的Mask R-CNN网络,该网络架构是在其前作Fast R-CNN上的升级改进版可以用于实例分割。本笔记主要为自我温习回顾,以备后用。

论文链接: github主页: rbg大神个人主页: 恺明大神的演讲视频:

为更好的理解该论文,建议先行阅读Faster R-CNN网络的相关论文,这里也附上本菇之前写的1篇论文笔记供大家参考~ Faster R-CNN理解

基本目录如下:

------------------第一菇 - 摘要------------------

我们从概念上提出了一种简单,易变和通用的框架用于目标实例分割。我们的方法能够高效的在一张图片中检测出物体同时对于该物体生成高质量的分割蒙版(segmentation mask),我们称此方法为,“Mask R-CNN”,其本质也是由Faster R-CNN衍化而来的,就是在Faster R-CNN后面多加了一个分支用于预测目标的蒙版,跟预测目标的识别和位置的分支是平行的。Mask R-CNN也易于去训练,仅仅只比Faster R-CNN慢一点,运行效率达到5fps。另外,Mask R-CNN也能够十分简单的被转移去训练其他的任务,比如去预测人体的姿态关键点。我们在COCO数据集上运用该模型训练了多个任务,包括实例分割,目标框预测和人体关键点检测,均取得不错的成绩。我们希望Mask R-CNN能够成为业界新的标杆,并能被广泛运用于新领域的研究。

------------------第二菇 - 核心思想------------------

整体架构十分容易理解,就是在RPN之后新添了一个分支用于预测mask的。网上其他的讲解资料也很多,这里我只记录一下Mask R-CNN中的重点,RoIAlign。不过我们还是先来温习一下,什么是RoIPool的实现原理。

为了搞明白原理,我们先问一个问题,为什么需要RoIPool? 原因就是经过RPN生成的候选区域大小不一样,无法直接连接全连接层进行后续的分类及定位处理,因此需要RoIPool层将其转为固定维度大小的特征。当然这是很明确的一个原因,不过还有一个潜在的原因可以理解为特征的二次提取。因为在RPN中,特征只被共享卷积层提取过一次,而为了提升后续的定位及分类准确率,对于每一个候选区域进一步提取特征也是符合逻辑的,贴一张示意图,方便理解,

原理很简单,我们再来看具体的细节处理,会产生的像素偏差。

第一个就是从输入图上的RoI到特征图上的RoI Feature,

假如现在我们输入了一张 的图像,图像中有2个目标(狗和猫),其中狗的识别框为 ,经过VGG16网络后,图像得到对应的feature map为 (5次池化操作),而对应的狗的识别框就变为 了,因此这里就会有一个误差,于是这里就有了第一个量化操作,即取整,使其结果变为 ,如下所示(右图中未能重叠的部分就是误差了~)

第二个误差就是将每个特征转化为固定大小维度的时候所产生的。比如现在要将 的特征映射到 上,对应的大小就是 了,因此同上这里又会有一个误差,于是就有了第二个量化操作,也是取整。即原先由 大小生成的值,现在只由 的大小生成了~虽然看起来这是一个很小很小的误差,但是要知道,这时候我们的感受野已经是32倍了,相当于原图 的像素差了~

这里也贴一张网上流行的RoIPool的示意图,帮助理解,

因此以上两种取整的量化操作,对于分类问题来说可能影响不大,但是对于实例分割这种像素级别的,细微的像素误差可能就会导致最终结果的崩坏。因此,本文才会提出了RoIAlign,其主要目的就是为了消除这种误差的。

简单来讲,RoIAlign的作用就是用双线性插值的办法取代了之前的取整操作,从而使得每个RoI取得的特征能更好的对齐原图上的RoI区域。具体来讲,双线性插值是一种比较理想的图像缩放算法,他通过拟合一个虚拟的点(该点的值由其周围4个确定点的像素值决定),从而将那些浮点数的点的值给表达出来,如下图所示,

作者同时也强调了一件事情,即,

We note that the results are not sensitive to the exact sampling locations, or how many points are sampled, as long as no quantization is performed.

也就是说该方法对采样点的个数和位置并不是十分敏感在意的~而且采用了这种方法以后,准确率有了很大的提升~!

至此,整一个新的RoIAlign层的作用及原理算是讲明白了。

剩下的网络架构类的,实现细节等不再多记录了。

------------------第三菇 - 总结------------------

本文主要是记录了Mask R-CNN中的一个创新难点,ROIAlign的作用及实现方法,其他有关Mask R-CNN的相信不难理解。

参考文献: 【1】

相关文章
学术参考网 · 手机版
https://m.lw881.com/
首页