论文信息:
论文链接:https://arxiv.org/pdf/1904.08189v3.pdf
Github:https://github.com/Duankaiwen/CenterNet
Blog介绍:https://zhuanlan.zhihu.com/p/62789701 //作者写的挺详细
论文作者团队:中科院、牛津大学、华为诺亚方舟实验室
阅读中大部分总结思路跟着一个论文试听课的带读,不过该视频并没有完整讲完:https://appuaAoe86p4947.h5.xeknow.com/st/1MuOQs7v4 (微信打开)
笔者花了几天时间阅读该篇论文,仍旧会觉得有些地方难以理解,但是希望通过记录阅读过程中的理解、总结,方便以后复习查看。
该篇文章
1.基于CornerNet改进的One-stage目标检测方法
2.针对CornerNet通过左上和右下两个关键点来检测目标物体,而感知物体内部信息相对较弱的问题,提出了使用三个keypoint(左上、右下、中心)来进行目标检测,并有效降低假阳率。
3.论文中提出了两种pooling机制:Center pooling和Cascade corner pooling,分别用来提取中心点和边角点的特征。
论文背景:Object detection目标检测
什么是Anchor-based方法?——检测物体时需要预定义一系列bbox框(Anchor框),最后在预测输出时对bbox框进行回归以修正位置坐标。
存在问题:1.需要大量的anchor框以保证有足够的高IOU的框作为正样本进行模型训练。2.anchor 的设定需要人为设定大量的参数(长宽比、大小、数量等),且离散的 anchor 尺度设定会导致一些物体无法很好的匹配到。
代表性:cornerNet
存在问题:1.感知物体全局信息能力相对偏弱。每个物体由一对边角点构建,对物体的边界敏感,而稍微忽略了物体内部信息,即look inside的能力较差。2。假阳率较高,即检测出错误bbox的数量较多。
参考:https://mp.weixin.qq.com/s/7lwEn49G-3RDnBKBv5c7Ag
回到论文——论文大框架大致如下:
看上图,红色框为conerNet检测的出的框,蓝色部分为真实框。图片中显示很多红色框(即错误框)
论文作者在实验中对cornerNet错误发现率(假阳率)做了一个统计,表中显示假阳率在37.8,小物体的FDs时60.3。坐镇认为CornerNet不能较好的感知bbox的内部区域信息所以导致预测出的bbox的假阳率较高。
所以作者基于这个问题提出一个解决思路:
--预测三个关键点:左上、右下、中心。
--每个预测框(由边角点构建)定义一个中心区域,通过判断每个目标框的中心区域是否含有中心点,若有则保留。
左图为CornerNet检测出3个预测框,可以看到大框中心区域不含有中心点(加上检测中心点的话),加入这种方法后,可以有效消除误检的目标框。
如上图的网络架构所示,用一个中心点和一对角来表示一个对象。
1.图片进入后通过一个backbone提取特征,输出两个分支:上分支主要是去预测一对CornerNet Heatmaps(热图)、Embedding和offsets,下分支预测Center Heatmaps、offsets 。
2.使用在CornerNet中提出的方法来生成top-k个bbox。
3.根据得分选择top-k个中心关键点;使用相应的offset信息将这些中心关键点重新映射到输入图像;
4.为每个bbox定义一个中心区域(central region),检查中心区域是否包含中心关键点。注意,选中的中心关键字的类标签应该与包围框的类标签相同;
5.如果在中心区域检测到中心关键点,我们将保留bounding box。bbox的socre将被三个关键点的score平均值代替,即,左上角,右下角和中心关键点。如果在其中心区域没有检测到中心关键字,则将删除bbox。并且此时框的 confidence 为中心点、左上角点和右下角点的confidence的平均,若无则去除,使得网络具备感知目标区域内部信息的能力,能够有效除错误的目标框。
与CornerNet的区别在于CenterNet添加了一个分支,做了一个后处理提高了检测准确率。
一个物体的中心并不一定含有很强的,易于区分于其他类别的语义信息。例如,一个人的头部含有很强的,易于区分于其他类别的语义信息,但是其中心往往位于人的中部。作者提出了center pooling 来丰富中心点特征。图(a)为该方法原理,center pooling提取中心点水平方向和垂直方向的最大值并相加,以此给中心点提供所处位置以外的信息。这一操作使中心点有机会获得更易于区分于其他类别的语义信息。在实际操作时,可以由不同方向上的corner pooling的组合实现。
一般情况下角点位于物体外部,所处位置并不含有关联物体的语义信息,这为角点的检测带来了困难。图(b) 为传统做法,称为 corner pooling。它提取物体边界最大值并相加,该方法只能提取物体边缘语义信息,很难提取出物体内部的语义信息。图(c)为cascade corner pooling 原理,它首先提取物体边界最大值,然后在边界最大值处继续向内部(图中沿虚线方向)提取提最大值,并与边界最大值相加,以此给角点特征提供更加丰富的关联物体语义信息。这样的机制及可以提取物体边缘语义信息又可以感知物体内部的语义信息。
作者发现中心区域的尺度会影响错误框去除效果。中心区域过小导致很多准确的小尺度的目标也会被去除,而中心区域过大导致很多大尺度的错误目标框无法被去除。因此作者提出了尺度可调节的中心区域定义法(公式如下) 。该方法可以在预测框的尺度较大时定义一个相对较小的中心区域,在预测框的尺度较小时预测一个相对较大的中心区域。
原理:将bbox的长宽分成n份,其中中心区域时最中心的那一份,由此可计算出中心区域坐标。(n越大中心区域越小)在实验中:若bbox的像素大小>150*150则n设为5,否则设为3.
作者在blog中写的挺详细(地址在文章开头)
第一行为 CornerNet 结果。
CRE,Center region exploration,中心关键点使用普通的Conv层
结果:中心点的加入 (CRE) 使得网络提(AP)升了2.3% (37.6% vs 39.9%)。对于中心点的检测,实验使用传统的卷积操作进行。其中小尺度目标(APs)提升的最多,提升了4.6% (18.5% vs 23.1%), 而大尺度目标几乎没有发生变化。这说明小尺度的错误目标框被去除的最多,这是因为从概率上讲,小尺度目标框由于面积小更容易确定其中心点,因此那些错误的小目标框不在中心点附近的概率更大,因此去除的最多。
CTP,Center pooling ,增加Center pooling 到网络中:
结果:使网络进一步提升了0.9%。值得注意的是,大尺度目标提升了1.4% (52.2% vs 53.6%),小目标和中等目标也得到了一定的提升,这表明 center pooling 能够使中心点获得更易于区分于其他类别的语义信息。
CCP,Cascade corner pooling,替换corner pooling为CCP:
结果:使得使网络性能进一步提升。第二行的单独试验中,我们将 CornerNet 的corner pooling 替换成了 cascade corner pooling,性能提升了0.7% (37.6% vs 38.3%)。可以观察到大目标的 AP 没有发生变化,AR 却提升了1.8% (74.0% vs 75.8%), 这说明 cascade corner pooling 通过加入了物体内部信息能够感知更多的物体,但是由于大目标由于面积过大,使其容易获得较明显的内部特征而干扰了边缘特征,因此使得预测出的目标框位置不精确。当结合了 CRE 后,由于 CRE 能够有效去除错误目标框,因此使大目标框的AP得到了提升 (53.6% vs 55.8%).
由于在一张图片中一般会有多个物体,可以检测出多个corner对,因此需要一种机制曲判断哪两个左上和右下的corner是同时属于一个物体的。论文中应用到了embedding机制。
如何做到呢:
A. 每个corner预测一个对应的embedding向量,这个向量具有如下效果:
B. 设计损失函数:
embedding损失,包括pull,push损失,Lpull损失使属于同一个bounding box的两个point的距离尽量小(bbox内部的距离),push损失使属于不同bounding box的两个point的距离尽量大(不同bbox之间的距离)
和分别指物体k的左上和右下corner的一维embedding向量
其中在实验中
需要优化的训练损失
论文——