摘要:CornerNet发表在2018年ECCV,是使用关键点方法进行目标检测的开山之作。CornerNet一个 明显的缺点 是使用Embeddings进行角点匹配的效果并不太好,可能导致某个物体的左上角匹配到另一个物体的右下角。

目标检测是计算机视觉的几个基本方向之一,主要目的是:识别出图片中前景物体的位置和类别,在自动驾驶、安防监控、工业检测等领域有着广泛应用。自从深度学习方法被引入目标检测领域后,新的方法层出不穷,检测效果也不断提升。本文主要介绍近两年来较为流行的基于关键点的目标检测方法。
 
图1 目标检测

0 1

前言:基于锚点的目标检测方法

在基于关键点(key points)的目标检测方法出现之前,主流目标检测方法一般先设置一些预先定义好的 锚点 (anchor boxes)。 作为预测物体框的参考,神经网络只需要预测实际的物体框相对于这些锚点的偏移。 这样模型就能在一个位置预测多个不同尺寸的物体框,并且预测相对偏移比预测绝对值要容易一些。

最初,这些锚点的大小是人工设置的,如Faster R-CNN [1]和SSD [2]中使用的锚点。 由于模型预测的是相对偏移,一般来说比较接近锚点的物体框预测要更为准确一些,因此YOLOv2[3]中使用了k-means聚类的方法来选择与训练集样本最为匹配的锚点。

基于锚点的目标检测方法 缺点 在于需要生成大量的锚点以更好的覆盖整个图片中的物体,并且需要人工设计一些参数,比如锚点的数量、大小等。

 

图2  SSD中使用的锚点

0 2

基于关键点的目标检测方法

1. CornerNet [4]

CornerNet发表在2018年ECCV,是使用关键点方法进行目标检测的开山之作。CornerNet通过预测物体框左上角和右下角两个角点,来组成最终的物体框,避免了锚点的使用。

物体的特征一般集中在物体内部,比如一个人的身体、头部,其左上角和右下角两个点的特征并不明显,而且不容易确定位置。

为了解决这个问题,文章引入了 Corner pooling 的结构。

在输出层之前的特征图上,针对左上角点,取其右边和下边的最大值之和,针对右下角点,取其左边和上边的最大值之和。

直观上理解,就是我们在左上角处往右下方向看,在右下角处往左上方向看,这样就能看到整个物体。

如果不使用Corner pooling,相当于看的是角点周围,这样对于比较大的物体就很难获得整个物体的特征,会导致大物体的检测效果差。

网络针对左上角和右下角分别输出 三个结果

a. Heatmaps,表示某位置是角点的概率;

b. Offsets,表示实际角点相对于该位置的偏移;

c. Embeddings, 嵌入向量,用于将左上角和右下角进行配对。

生成最终物体框时,取概率最高的k个角点,加上Offsets得到实际位置,再使用Embeddings对左上角和右下角进行配对,取嵌入向量距离超过一定阈值的两个点来组成最终物体框。

损失函数的选择上Heatmaps使用分类损失函数focal loss的变种,Offsets使用回归损失函数smooth L1 loss,Embeddings使用衡量相似度的"pull" loss和"push" loss,损失函数细节可查阅原文。

图3  CornerNet结构示意图

 

图4  Corner pooling

CornerNet一个 明显的缺点 是使用Embeddings进行角点匹配的效果并不太好,可能导致某个物体的左上角匹配到另一个物体的右下角。后续的ExtremeNet、CenterNet等论文都设法修复或避免这一问题。

  图5  CornerNet角点配对错误的例子

2. CornerNet-Lite[5]

针对CornerNet速度较慢的问题,CornerNet的研究团队对网络结构进行了优化。

主要从 两方面 入手,分别提出了一个方案。

一:减少处理的像素数量。也就是先用一个轻量的网络确定物体的大概位置,然后再从这个大概的裁切区域上检测物体的具体位置,该网络被称为CornerNet-Saccade。

二:减少每个像素的处理次数。参考了SqueezeNet和MobileNets,使用深度可分离卷积等方法对网络主干进行轻量化,该网络被命名为CornerNet-Squeeze。

CornerNet-Saccade相比CornerNet 速度 上有较大提升而准确率相当;CornerNet-Squeeze则达到与YOLOv3相当的 速度准确率

CornerNet-Lite依然受限于CornerNet角点匹配 错误较多 的缺点。比如CornerNet-Squeeze虽然从文章中给出的结果上看与YOLOv3相当,但是实际使用中容易出现角点匹配错误情况,效果不佳。

图6  CornerNet-Lite作者给出的优化效果

3. CenterNet [6]

CenterNet在CornerNet基础上加入了一个关键点—— 中心点 ,通过检查CornerNet预测框的中心区域是否存在中心关键点,来决定是否保留这个预测框。

中心关键点在pooling阶段使用了Center pooling,同时取上下左右四个方向的最大值。

此外,还对原有的Corner pooling进行了 优化 确定中心区域时,对于较大的物体取5*5分割的中间区域,较小物体取3*3分割的中心区域。中心区域的选择过于依赖人工设计的参数,也是该方法的一个缺点。

图7  CenterNet结 构示意图

4. Objects as Points [7]

这篇文章和上一篇CenterNet一样是19年4月份放到网上的,而且也把自己的网络起名为CenterNet...不同于上一篇CenterNet对CornerNet进行修补。 该方法直接抛弃了右上角和右上角两个关键点,只预测一个中心关键点,再加上物体的宽高,构成最终的物体框。

该文章提出的方法 简洁明了 ,在 速度精度 的权衡上也做的比较好,因此比较被看好。 缺点 在于如果两个物体的中心重合只能预测一个,不过这种情况概率很低。

 

图8  Objects as Points效果示意图

0 3

小结

基于关键点的目标检测方法或多或少都还存在一些缺点,在实际应用中相比基于锚点的方法也 没有绝对优势 。但是作为近两年目标检测方法的新趋势,我们期待在不远的将来这类方案能有进一步的 突破

参考文献

[1] Faster R-CNN Towards Real-Time Object Detection with Region Proposal Networks.

[2] SSD Single Shot MultiBox Detector.

[3] YOLO9000 Better, Faster, Stronger.

[4] CornerNet: Detecting Objects as Paired Keypoints.

[5] CornerNet-Lite Efficient Keypoint Based Object Detection.

[6] CenterNet Keypoint Triplets for Object Detection.

[7] Objects as Points.

投稿 | 内容标签团队

编辑 | sea

排版 | sea

在看点一下 大家都知道

相关文章