【AI理论】浅谈Anchor-Free based目标检测(一)

举报
HWCloudAI 发表于 2019/08/07 17:00:17 2019/08/07
【摘要】 single-stage典型方法有SSD系列、YOLO系列、RetinaNet等,two-stage方法有RCNN系列、Mask-RCNN、R-FCN。其他各种各样的SOAT方法基本是这两类方法的拓展和延伸。这两类方法的共同点就是anchor-based,在检测过程中都需要先生成anchor,基于这些先验区域分别做分类和位置回归

目前主流的目标检测方法大体分为两类:single-stage和two-stage。

single-stage典型方法有SSD系列、YOLO系列、RetinaNet等,two-stage方法有RCNN系列、Mask-RCNN、R-FCN。其他各种各样的SOAT方法基本是这两类方法的拓展和延伸。这两类方法的共同点就是anchor-based,在检测过程中都需要先生成anchor,基于这些先验区域分别做分类和位置回归。anchor-based方法近年来在工业界取得了巨大成功,目标检测算法在很多领域发挥出了不可替代的作用。然而还有另一类方法,虽然不是主流,但依然能取得SOTA的性能,这就是anchor-free的方法,代表算法有CornerNet、ExtremeNet、FSAF(CVPR2019)等。

最近又重新细读了CornerNet和ExtremeNet,梳理了一下逻辑和思路。

先来看看CornerNet是怎么做的。CornerNet顾名思义,预测左上角和右下角来得到最后的bounding boxes。所以最基本的需要两个feature map表示对应的Corner,文中称为heatmap。如下图所示,两个heatmap分别表示top-left(左上角)和bottom-right(右下角)的corner,作者借鉴Associative Embedding method(NIPS2017)利用了两个embedding层做grouping操作,将属于同一个object的corner聚合都一起得到最后的bounding box。

image.png

模型的整体结构如下图,backbone采用hourglass network以得到高质量的feature map,接两个分支分别预测top-left Corner 和bottom-right Corner,两个分支的结构完全一样。

image.png

Heatmap分支的设计

heatmap的尺寸大小为(H,W,C),C是类别数,一个channel对应一类物体。H和W和输入图片 [公式]一般满足关系: [公式] ,文中Stride为4。

ground-truth corner 在heatmap上会有一个对应的位置,按常理,这个位置是负责预测这个gt最好的点,然而需要注意的是,偏离这个位置附近的点也对预测gt有贡献,即使不是百分之百重合,但围成的框和gt有较大的IoU,这些点不应该被忽视。但偏离距离不同的点却有不同的“重要度”,作者加入了一项penalty reduction,合理地对gt进行reweight。

heatmap对应的loss函数如下,采用了focal loss的变体形式,其中 [公式] 是位置为(i,j)的输出类别为c的scores, [公式] 是对应的gt值,这个gt值被penalty reduction进行惩罚。

image.png

Offset分支的设计

由上面的介绍,heatmap和原图输入有一个stride大小的比例关系,在将heatmap上的点映射到原图尺寸上时会有位置误差。假设原图上位置为(i,j)的点,在heatmap上对应的位置变为 [公式] ,n是下采样stride。这样在映射的过程中会产生 [公式] 的误差。因此,模型除了预测heatmap,还同时预测了弥补映射过程中带来的误差offset分支

[公式] , [公式] 是offset, [公式] , [公式] 是object k对应的corner。并且offset分支对所有类别共享,采用smooth l1函数进行训练。

image.png

Grouping Corner的设计

文章设计的出发点是:来自同一个object的Corner距离应该尽可能接近。为了表示Corner的距离,作者引入了一个embedding分支,该分支在空间上的尺寸和heatmap保持一样,通道数可以自己设定,即heatmap上每一个位置的Corner由一个embedding vector表示,这个vector隐式地表示了和其他Corner的距离。来自同一个object的Corner其对应的embedding vector之前的距离应该尽可能小。基于embedding vector之间距离就可以对Corner进行grouping操作。距离的具体的数值并不重要,这是一个相对概念,只要能区分不同object即可。

假设object k的top-left Corner对应的embedding vector是 [公式] ,bottom-rightCorner对应的embedding vector是 [公式] ,embedding vector的训练目的就是使得同一个object的距离越来越近,不同object的距离越来越远,即类似于“类间间距大,类内间距小”,因此最后的loss函数如下:

image.png

Corner Pooling 的设计

ground-truth对应的Corner必然会存在不在物体上面的情况,这种情况下,Corner周围都是背景区域,对Corner的预测很不利。从本质上来说,左上角和右下角的Corner其实根据object的边界信息得到,ExtremeNet就很好的利用了这一点。为了利用物体边界信息,需要一个操作可以将物体边界信息聚合到Corner点上,因此就有了pooling操作。

pooling操作很简单,对每个点,向水平和垂直方向进行pooling操作,这样同一个水平和垂直方向上就包含了该方向的物体边界信息。

以top-left Corner为例

image.png

实验效果

CornerNet在COCO上达到了SOTA效果。同时作者还在Corner polling、penalty reduction、error analysis上面进行了对比实验。

image.png


基于CornerNet预测bounding box的一对左上角-右下角Corner思路,ExtremeNet直接预测object的左-下-右-上边界,再通过预测的边界点得到bounding box,思路更加直接。

ExtremeNet的思路很简单,首先预测5个边界点(extreme point),分别对应左-下-右-上4个点和位置中心点。然后对每一类边界点根据score进行排序,取最大的k个(文中k=40),这样就得到了40x40x40x40个组合排列,遍历每一个排列方式,计算其中心点的位置,然后得到中心点的score,若这个score值大于阈值,则接受这个组合下的边界点得到一个bounding box。

image.png

Center grouping
ExtremeNet的center grouping相对于CornerNet的Corner grouping操作更加简单直接,就是采用遍历的思路逐个判断边界点组合是否符合条件。

image.png

ExtremeNet的loss函数设计也参考了CornerNet

image.pngimage.png

Ghost box suppression 
所谓ghost box就是一个大的False positive box包含多个小的True positive box,由于在center grouping的过程中,这个False positive box的位置中心点有可能落在True positive box的中心点或附近,因为比较大的score,导致False positive box。

作者采用类似NMS的思想来抑制False Positive box,具体做法是计算小的True positive box的score之和,若超过了False Positive box的score的3倍,则将False Positive box的score除以2来降低分类置信度。

Ghost box suppression 
对于边界比较水平或垂直的物体,很容易出现很多边界点水平或者垂直排列的情况,这种情况对检测有不利的影响:这些边界点的score值都比较低,得到的中心点的score也比较低,就会出现漏检的情况。为解决这个问题,作者采用水平和垂直方向取极值的做法来提高某些extreme point的响应值。

Deep Extreme Cut 
文章的思路是首先得到物体的边界点,由这些边界点经过水平和垂直方向延伸从而得到bounding box,那么自然这个bounding box可以是多边形也可是矩形的。作者还做了对比试验,将extreme point作为输入DeepExtremeCut的输入得到class-agnostic的mask,其效果和mask-rcnn的instance segmentation进行对比。

实验效果
ExtremeNet在COCO上取得了新的SOTA效果,在同样的backbone和input resolution下,single-scale比CornerNet略差,但multi-scale比CornerNet要好。

image.png


总结

Anchor free based method一般采用bottom-up的思路,先生成带有类别信息和位置信息的feature map,再根据这些feature map得到最后的bounding boxes。总结起来,其关键部分包含一下几方面:

  1. 如何生成高质量的feature map,这是得到精准的bounding boxes的前提,主要是backbone的设计。众所周知,CNN的多层stride会损失很多位置信息,而这些信息对于pixel-level的任务至关重要。

  2. 因为没有提前设定feature map上哪些points负责预测哪个ground-truth box,需要一个grouping操作将属于同一个object的points划分到一起。

  3. 训练过程loss的设计。loss函数既需要考虑预测的feature map能学到discriminative的类别置信度,还需要输出准确的位置信息。

CornerNet和extremeNet都尝试从keypoint的角度做detection,摆脱了anchor的繁琐设置,以及先验anchor带来的bias。从标注成本的角度来讲,CornerNet只需要bounding box标注,ExtremeNet需要instance segmentation mask的标注,标注成本相对较高。同时,keypoint需要更细节的位置信息,对backbone的要求较高,所以hourglass network这类对keypoint较友好的网络成为了第一选择,带来的问题是检测速度较慢。

另外CVPR2019的Feature Selective Anchor-Free Module for Single-Shot Object Detection也从anchor-free的角度改进了RetinaNet,取得了不错效果,具体的解读可以参考我的另一篇ywsun:[CVPR2019]:FSAF for Single-Shot Object Detection

目前anchor-free的文章越来越多,很多人开始考虑从keypoint、segmentation的角度入手做detection,但想要取得像Faster R-CNN、SSD、RetinaNet的实用性和效果还有很长的路要走。

参考文献:

  • Associative embedding: End-to-end learning for joint detection and grouping

  • Deep extreme cut: From extreme points to object segmentation




转自:https://zhuanlan.zhihu.com/p/58183628

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200