CornerNet-Lite: Efficient Keypoi

2019-05-06  本文已影响0人  斯文攸归

普林斯顿大学

CornerNet-Saccade在追求高准确率的同时,尽可能提高速度,以准确率优先,对标于CornerNet。

Corner-Squeeze在追求高实时性的同时,尽可能提高准确率,以速度优先,对标于YOLOv3。

https://github.com/princeton-vl/CornerNet-Lite

摘要

基于关键点检测的方法在目标检测中是比较新颖的,不需要anchor boxes,让模型框架更简洁。CornerNet在单阶段检测器中的性能是state of art的,但是需要大量的预处理才能得到较高的准确率,消耗较多的计算资源。本文提出CornerNet的两种变形:CornerNet-Saccade,基于attention机制,从而并不需要对图片中的每个像素做处理。另一个是CornerNet-Squeeze,引入了更加紧凑的主干网络。CornerNet 的这俩变体解决了目标检测领域的两个问题:提升速度而不牺牲准确率,提升准确性而不牺牲速度。CornerNet-Saccade 可以用于线下处理,将 CornerNet 的速度提升 6 倍,将 COCO 上的 AP 值提升1.0 1.0%1.0。CornerNet-Squeeze 适合用于实时检测,提升 YOLOv3 的准确率和速度(CornerNet-Squeenze 的 COCO AP 值是34.4,速度是34ms,而 YOLOv3 的 COCO AP 值是33.0,速度是39ms)。

准确率和速度比较

介绍

基于关键点的目标检测方法通过检测和组合关键点产生目标物体的边框,CornerNet 检测物体左上角点和右下角点并将其组合起来,它使用一组 Hourglass networks 预测角点的热力图,然后将它们组合起来。CornerNet 无需使用 anchor boxes,在 COCO 上的准确率在单阶段检测器中是 state of art 的。

但是,CornerNet 的主要问题就是推理速度太慢。在COCO上它的平均精度COCO AP 有42.2,而它的前向速度要每张图片 1.147s,这对视频应用来说太慢了。尽管我们可以减少要处理的像素个数来提升推理速度(从多尺度变为单尺度处理,降低图像分辨率等),但这样准确率会下降很多。比如,我们采用单尺度处理,然后降低输入的分辨率,这可以将CornerNet 的推理速度提升至 42ms每张图片,YOLOv3 的处理速度也不过39ms,但是它的 AP会降到25.6,而YOLOv3 的AP 是33.0 。这样看,CornerNet 就没那么成功了。

这篇论文提升了 CornerNet 的推理速度。任何一个目标检测器的效率都可以从 2 个方向去改进:(1) 降低要处理像素的数量,(2) 减少每个像素点上要处理的步骤。我们对这两个方向都进行了探索,提出了 CornerNet 的两个变体:CornerNet-Squeeze, CornerNet-Saccade,统称为 CornerNet-Lite。

CornerNet-Saccade通过减少像素的个数来加速前向速度,使用注意力机制,首先缩小一幅图像,产生一个attention map,再进行放大和后续处理,原始的CornerNet在多个尺度上进行全卷积操作,而CornerNet-Saccade选取若干个分辨率的裁剪区域来检测,在COCO数据集上达到43.2的AP,速度是190ms一张图片,相比于原来速度提升了6倍。

CornerNet-Squeeze 减少每个像素点上需要处理的步骤,以此来加速前向,它融合了 SqueezeNet 和MobileNet 的思想,引入了一个紧凑的主干网络,这个主干网络中大量使用了 1×1的卷积,bottleneck层,以及深度可分离卷积。有了新的主干网络,CornerNet-Squeeze 在 COCO上的AP是34.4,速度是30ms每张图片。

是否能将CornerNet-Squeeze和Saccade网络结合起来使用?实验证明不太行,CornerNet-Squeeze-Saccade速度和准确率都要比 CornerNet-Squeeze差。原因在于,使用Saccade,网络应当产生足够准确的attention maps,但是Squeeze模型的主干网络过于紧凑,不具备这样的能力。此外,原来的CornerNet应用在多个不同尺度的图像上,有足够的冗余像素来进行Saccade操作,但是CornerNet-Squeeze由于推理成本的限制,只能用在单尺度上,可供Saccade 操作的空间就很小。

Related Work

人眼睛的 Saccades 是指一系列的眼球快速运动,然后关注在不同的图像区域上。在目标检测算法中这个词主要意思就是在前向推理中,选择性地裁剪并处理不同的图像区域(连续或并行,像素点或特征)。

在R-CNN, Fast R-CNN, Faster R-CNN 中,Saccdes 就是每个裁剪区域所代表的可能物体。处理完后,通过分类和回归操作,每个裁剪区域要么被丢掉,要么成为一个带标签的边框。Cascade R-CNN 扩展了 Faster R-CNN,通过一组分类器和回归器丢掉或修正候选框。这些基于 R-CNN 的方法都是“单类型”和“单目标”检测器,因为裁剪区域的类型只有一个,每个裁剪区域最多只有一个目标物体。

AutoFocus 基于SNIPER 改进了 R-CNN 训练,在 Faster R-CNN 里增加了一个分支,预测那些可能包含小物体的区域。然后再进行裁剪,对每个裁剪区域都使用 Faster R-CNN。在 AutoFOcus中,有两种裁剪方式,一个是输出多个物体(调用 Faster R-CNN),另一个是输出至多一个物体(在Faster R-CNN中进行裁剪)。AutoFocus 中的Saccades 因此是“多类型”和“混合式”的。

然而,CornerNet-Saccade 中的Saccade 是“单类型”和“多目标”的,因为它只有一种裁剪处理,每个裁剪区域可以输出多个物体,而不需要额外的子裁剪。也就是说,CornerNet-Saccade 中裁剪区域的个数会小于目标物体的个数,而 R-CNN 和 AutoFocus 中裁剪区域的个数会和目标物体的个数至少相等。

自 R-CNN 之后,检测器的速度得到了很大提升。R-CNN 中,对 RoIs 重复应用卷积网络会带来许多冗余的计算。SPP 和 Fast R-CNN 在图像上进行全卷积操作,在特征图上对每个 RoI 直接提取特征。Faster R-CNN 进一步提升了效率,使用RPN产生候选区域。R-FCN 将全连接子检测网络替换为全卷积网络。Light-head R-CNN 通过可分离卷积进一步降低了 R-FCN 的计算成本,在 RoI 池化前减少特征图的通道数。另一方面,单阶段检测器去除了双阶段检测器中的区域池化步骤。

SqueezeNet 提出了一个 fire module,将 AlexNet 中的参数个数降低了至少 50倍,但是性能类似。MobileNets 使用深度可分离卷积搭建轻量级网络,并提出了平衡精度和速度的策略。PeleeNet通过引入DenseNet 的变体证明了标准卷积的有效性,DenseNet 的变体由two-way dense layers和stem 模块组成。

也有不少网络专门为了实时检测进行设计。YOLOv2 设计了一个新的VGG变体网络,参考了 NIN 的想法。YOLOv3 进一步改进了 DarkNet-19,让网络变得更深,增加了 skip 连接。RFBNet 提出了一个新的模块,模仿人眼系统的感受野来搜集不同尺度的信息。

CornerNet-Saccade

CornerNet-Saccade 在较小的区域范围内检测物体。它利用缩小后的图片来预测 attention maps以及大概的边框,两者都能提供物体可能的位置。CornerNet-Saccade然后在高分辨率的图像中,在位置中心附近区域内检测物体。它也可以通过调节每张图片上物体位置的最大个数来平衡精度和速度。

CornerNet-Saccade网络结构

Estimating Object Locations

CornerNet-Saccade 的第一步就是获取图像中可能的物体位置。使用缩小的图像预测 attention maps,它能指出物体的位置以及物体大致的尺寸。给定输入图像,我们将图像缩小至长边为 255 像素或者192 像素。对于长边为192像素的图像,在边缘位置填充0,使得它的大小能到255像素,这样它们就可以并行处理。使用这样的低分辨率图有2个原因:首先,这一步不应该成为前向推理时的瓶颈;其次,网络应该很容易就可以利用图像的全局信息预测attention maps。

对每一个缩小后的图片,CornerNet-Saccade预测3个attention maps,一个针对小物体,一个针对中等物体,一个针对大物体。如果一个物体边框的长边小于32像素,它就被认为是小物体,超过96像素的就被认为是大物体,中间的就是中等物体。对不同大小的物体分开预测位置,让我们能更好地控制 CornerNet-Saccade 在每个位置应该放大多少。我们在小物体位置可以放大的多一些,在大物体位置可以放大的少一些。

我们利用不同比例的特征图来预测attention maps。从CornerNet-Saccade 的主干网络中获取特征图。每一个Hourglass 模块都使用了多个卷积和下采样层来降低输入特征图的大小。然后再将特征图通过多个上采样层和卷积层上采样至原始输入的分辨率。上采样层输出的特征图用于预测attention maps。尺度较精细的特征图用于预测小物体,而尺度较粗糙的用于预测大物体。我们在每个特征图上应用一个 3×3卷积-ReLU 模块,后面跟着一个1×1卷积-Sigmoid 模块,以此来预测 attention maps。在测试时,仅处理得分高于阈值0.3的位置。

当 CornerNet-Saccade处理缩小后的图像,它就可能会检测到图像中的物体并生成边框。从缩小后的图像上获取的边框可能不那么准确。因此,我们需要在高分辨率的图像上再检测一次,来获得更准确的边框。

在训练时,我们将attention map上每个边框对应的中心位置设为正样本,其余都为负样本,然后再使用Focal Loss,其中\alpha =2

Detecting Objects

CornerNet-Saccade 使用缩小后图像上得到的位置来决定到底在哪个位置进行处理。如果直接在缩小后的图像上进行裁剪,有一些物体可能就会变得很小,使检测变得不准确。因此,应该在更高分辨率的图像上进行检测。

对于从 attention maps 上获得的位置,对不同的物体大小设置不同的放大比例,对小物体,设置放大比例为S_{s} ,对中等大小物体,设置放大比例为S_{m} ,对大物体,设置放大比例为S_{l} ,三者应该满足:S_{s} >S_{m} >S_{l} ,实际上,S_{s} =4,S_{m}=2,S_{l}=1,在每一个可能的位置(x,y)上,就根据物体大小以相应的放大比例来放大缩小后的图片,将 CornerNet-Saccade 应用在一个 255×255的窗口上,窗口的中心就是该位置。

从边框预测得到的位置能给出物体大小的更多信息。我们可以根据边框的大小来决定放大的比例,这样对于一个小物体,放大后边框的长边是24,中等物体的边框长边是64,大物体边框长边是192。

为了让处理更加地高效,首先,我们以批次来处理所有区域,这样能更好地利用GPU。其次,将原始图片保存在GPU 显存里,在GPU里面进行缩放和裁剪,降低CPU 和 GPU 之间转移图像数据带来的消耗。

在每个可能存在物体的位置检测完毕后,通过Soft-NMS将边框融合起来,去除多余的边框。同时去掉那些触碰到裁剪区边界的边框。训练时,使用和 CornerNet 中一样的损失函数来预测角点热力图,embeddings和偏移。

去掉碰到边界的检测框

通过控制每张图片上物体位置的最大个数,可以平衡效率和准确率。优先处理那些更可能包含物体的位置。因此,当我们得到了物体的位置后,根据它们的得分将它们排序,然后优先处理那些从边框中得到的位置。给定要处理的最大裁剪个数k_{max},在这些位置上进行物体检测。

当物体之间距离很近时,可能会得到高度重叠的裁剪框。我们并不想把这两个框都检测一遍,因为检测其中一个框时就可能会检测到另一个框中的物体,采取了一个类似于 NMS 的方法,去除多余的位置。首先,我们将目标物体的位置进行排序,优先处理边框内的位置,然后再处理 attention maps上的位置。保留最佳的物体位置,去除那些距离最佳位置过于近的位置。重复以上操作,直到没有物体位置剩余。

抑制重叠的位置

Backbone Network

设计了一个新的 Hourglass 主干网络,更适合用在 CornerNet-Saccade。新的 Hourglass 网络由3个 Hourglass 模块组成,深度是54层,而原 CornerNet 中的 Hourglass-104 由2个 Hourglass 模块组成,深度是104层。新的主干网络称为 Hourglass-54。

Hourglass-54 中每一个 Hourglass 模块的参数量更少,也要更浅。以步长2来缩小特征图,在每个下采样层后面使用了一个残差模块。每个 Hourglass 模块将输入特征尺寸降低3倍,增加它的通道数(384,384,512)。在模块的中间位置有一个512通道的残差模块,在每个上采样层后面有一个残差模块。在 Hourglass 模块之前将图像的尺寸缩小2倍。

CornerNet-Squeeze

CornerNet-Saccade 是减少要处理像素的数量,而CornerNet-Squeeze 则是研究了一个替换方案,降低每个像素点上要处理的成本。在CornerNet 中,绝大多数的计算资源都耗费在 Hourglass-104 上。Hourglass-104 由残差模块组成,每个残差模块由 2 个 3×3 的卷积层外加一个 skip 连接构成。尽管 Hourglass-104 获得了不错的效果,但是就它的参数数量和前向时间来说,它是非常昂贵的。为了降低 Hourglass-104的复杂度,引入了 SqueezeNet 和 MobileNet中的思想,设计一个轻量级 Hourglass 架构。

Ideas from SqueezeNet and MobileNets

SqueezeNet 提出了3个降低网络复杂度的策略:

1、将3*3的卷积替换为1*1的卷积;

2、降低3*3卷积的输入通道数;

3、将降采样延后。

SqueezeNet中的fire module封装了前两个策略,fire module首先通过由 1×1卷积组成的 squeeze 层降低输入通道数,然后经过 1×1 和3×3 卷积混合组成的expand层。基于 SqueezeNet 的想法,在 CornerNet-Squeeze 中使用了fire module,没有用残差模块。而且,受 MobileNet 的启发,我们将第二层中的标准 3×3卷积替换为 3×3的深度可分离卷积,这进一步加快了推理速度。

在 Hourglass模块之前增加了一个下采样层,以此降低 Hourglass模块特征图的最大分辨率,并且在每个Hourglass模块内去掉了一个下采样层。CornerNet-Squeeze 在Hourglass模块前相应地将图像尺寸缩小了 3 倍,但是 CornerNet 仅将图像尺寸缩小了 2 倍。在 CornerNet的预测模块中,将 3×3卷积替换为 1×1卷积。最后,将Hourglass 网络中的nearest neighbor上采样替换为了 4×4卷积核的反卷积 (transpose convolution)。

Experiments

实验结果
上一篇下一篇

猜你喜欢

热点阅读