出自普林斯顿大学,论文原文《CornerNet-Lite: Efficient Keypoint Based Object Detection》。号称在速度和精度上都吊打YOLOv3,来一探究竟。
先上图。
两个网络,CornerNet-Saccade 在COCO上的AP远高于YOLOv3,速度较YOLOv3慢许多,CornerNet-Squeeze在COCO上的AP也比YOLOv3高,并且速度上也有一些优势。
作者将这两种结构统称为CornerNet-Lite,CornerNet-Saccade在追求高准确率的同时,尽可能提高速度,以准确率优先,Corner-Squeeze在追求高实时性的同时,尽可能提高准确率,以速度优先。
CornerNet-Lite从作者的上篇文件CornerNet衍生,是基于关键点的目标检测方法,减少对anchor boxes机制的依赖。CornerNet-Saccade,基于attention机制,从而并不需要对图片中的每个像素做处理。CornerNet-Squeeze,引入了更加紧凑的主干网络。
作者认为,任何一个目标检测器的效率都可以从 2 个方向去改进:
1. 降低要处理像素的数量
2. 减少每个像素点上要处理的步骤
基于这两个方向的研究,衍生出了CornerNet的两个变体CornerNet-Saccade和CornerNet-Squeeze。
一、CornerNet-Saccade
CornerNet-Saccade在图像中可能的目标位置的小区域内检测物体。它使用缩小后的图片来预测 attention maps以及粗略的bounding boxes,两者都能提供物体可能的位置,然后在高分辨率的图像中,在位置中心附近区域内检测物体。通过调节每张图片上物体位置的最大个数来平衡精度和速度。
首先,将输入图像的长边下采样至255像素或者192像素,将长边为192像素的图填充0至255像素,这样便于并行处理。使用这样低分辨率图有2个原因:
1. 这一步不应该成为前向推理时的瓶颈
2. 网络应该很容易就可以利用图像的全局信息预测attention maps。
对于下采样的图像,CornerNet-Saccade预测3个attention maps,一个针对小物体,一个针对中等物体,一个针对大物体。
- 小物体:bounding box的长边 < 32个像素
- 中等大小的物体: 32个像素 < bounding box的长边 < 96个像素
- 大物体: bounding box的长边 > 96个像素
对不同大小的物体分开预测其位置,这样能更好地控制 CornerNet-Saccade 在每个位置应该放大多少。在小物体位置可以放大的多一些,在大物体位置可以放大的少一些。
在预测attention maps时使用不同尺度下的feature maps,这些feature maps是从CornerNet-Saccade 的主干网络hourglass中得到的。每个hourglass模块都使用了多个卷积和下采样层来降低输入feature maps的大小。然后再将feature maps通过多个上采样层和卷积层上采样至原始输入的分辨率。上采样层输出的feature maps用于预测attention maps。尺度较精细的feature maps用于预测小物体,而尺度较粗糙的用于预测大物体。在每个特征图上应用一个 3×3卷积-ReLU 模块,后面跟着一个1×1卷积-Sigmoid 模块,以此来预测 attention maps。作者说明在它们的实验中,仅处理得分高于阈值0.3的位置。
当 CornerNet-Saccade处理缩小后的图像,它就可能会检测到图像中的物体并生成bounding boxes,但是从缩小后的图像上获取的bounding boxes可能不够精确。因此,作者在高分辨率的图像上再检测一次,来获得更准确的bounding boxes。
在训练时,作者将attention map上每个bounding box对应的中心位置设为正样本,其余都为负样本,然后再使用Focal Loss,其中alpha设置为2。
CornerNet-Saccade 使用缩小后图像上得到的位置来决定到底在哪个位置进行处理。为了获得更好的准确度,则在更高分辨率的图像上进行检测。对于从 attention maps 上获得的位置,对不同的物体大小设置不同的放大比例,小、中、大物体的缩放比例分别为Ss、Sm、Sl。通常来说,三者的关系是Ss > Sm > Sl,因为小物体需要放大更多。作者设置的是Ss = 4, Sm = 2, Sl = 1。在每一个可能的位置(x, y)上,就根据物体大小以相应的放大比例来放大缩小后的图片,将 CornerNet-Saccade 应用在一个 255×255的窗口上,窗口的中心就是该位置。
从bounding boxes预测得到的位置能给出物体大小的更多信息。可以根据边框的大小来决定放大的比例,对于一个小物体,放大后bounding box的长边是24,中等物体的bounding box长边是64,大物体bounding box长边是192。
在每个可能存在物体的位置检测完毕后,通过Soft-NMS将bounding boxes融合起来,去除多余的bounding boxes。同时去掉那些触碰到裁剪区边界的bounding boxes。训练时,使用和 CornerNet 中一样的损失函数来预测corner heatmaps,embeddings和offsets。
当物体之间距离很近时,可能会得到高度重叠的裁剪框。作者使用了一个类似于 NMS 的方法,去除多余的位置。首先,将目标物体的位置进行排序,优先处理bounding boxes内的位置,然后再处理 attention maps上的位置。保留最佳的物体位置,去除那些距离最佳位置过于近的位置。重复以上操作,直到没有物体位置剩余。
作者设计的新的主干网络称之为hourglass network,用于CornerNet-Saccade中使其表现更好。Hourglass 网络由3个 hourglass 模块组成,深度是54层,称之为Hourglass-54。而原 CornerNet 中的 Hourglass-104 由2个 hourglass 模块组成,深度是104层。
Hourglass-54 中每一个hourglass 模块的参数量更少,也更浅。以步长2来缩小feature maps,在每个下采样层后面使用了一个残差模块。每个hourglass 模块将输入特征尺寸降低3倍,增加它的通道数(384,384,512)。在模块的中间位置有一个512通道的残差模块,在每个上采样层后面有一个残差模块。在 hourglass 模块之前将图像的尺寸缩小2倍。
二、CornerNet-Squeeze
CornerNet-Squeeze 降低每个像素点上要处理的成本。它吸取了SqueezeNet和MobileNet的思想,设计了一个轻量级的hourglass结构。
SqueezeNet有三个策略来降低网络的复杂性:
1. 将3 x 3的卷积替换为1 x 1的卷积
2. 减少3 x 3卷积的输入通道数
3. 将降采样延后
基于 SqueezeNet 的想法,在 CornerNet-Squeeze 中使用了fire module,没有用残差模块。而且,受 MobileNet 的启发,将第二层中的标准 3×3卷积替换为 3×3的深度可分离卷积,这进一步加快了推理速度。
在 hourglass模块之前增加了一个下采样层,以此降低 hourglass模块feature map的最大分辨率,并且在每个hourglass模块内去掉了一个下采样层。CornerNet-Squeeze 在hourglass模块前相应地将图像尺寸缩小了 3 倍,但是 CornerNet 仅将图像尺寸缩小了 2 倍。在 CornerNet的预测模块中,将 3×3卷积替换为 1×1卷积。最后,将hourglass 网络中的nearest neighbor上采样替换为了 4×4卷积核的反卷积 (transpose convolution)。