文章: CornerNet-Lite: Efficient Keypoint Based Object Detection
作者: Hei Law, Yun Teng, Olga Russakovsky, Jia Deng
机构: Princeton University
摘要
saccade: [sæ’kɑd]
基于关键点的方法是对象检测中相对较新的尝试,消除了对 anchor 的需求并提供了简化的检测框架。基于 Keypoint 的 CornerNet 在 One-Stage 检测器中实现了 SOTA 的精度。然而,这种准确性来自 高处理成本。在这项工作中,作者解决了基于关键点的 高效 对象检测问题,并了介绍 CornerNet-Lite。 CornerNet-Lite 是 CornerNet 的两种有效变体的组合:
- CornerNet-Saccade,它使用注意机制消除了对图像的所有像素进行彻底处理的必要性
- CornerNet-Squeeze, 它引入了一种新的紧凑 backbone architecture。
这两种变体共同解决了有效物体检测中的两个关键用例:在不牺牲精度的情况下提高效率(速度),以及在确保实时效率的情况下提高准确性。 CornerNet-Saccade 适用于离线处理,可以将 CornerNet 在 COCO 上的效率提高 6.0 倍,同时将 AP 提高 1.0%。 CornerNet-Squeeze 适用于实时检测,可以提高目前主流的实时检测器 YOLOv3 的效率和准确性(CornerNet-Squeeze 为 34ms, 34.4%AP,YOLOv3 为 39ms,AP 33.0%)。这些贡献首次共同揭示了基于关键点的检测的潜力对于需要处理效率的应用是有用的。
Introduction
基于关键点的对象检测[53,56,26]是一类通过检测和分组其关键点来生成对象边界框的方法。 CornerNet [26]是其中最先进的技术,可以检测并分组边界框的左上角和右下角; 它使用堆叠 HourGlass 网络[39]来预测角落的热图,然后使用 associate embeddings [38]对它们进行分组。 CornerNet 允许简化设计,无需使用 anchor box[46],并且在 One-Stage 检测器中实现了COCO [32]的 SOTA 精度。
但是,CornerNet 的一个 主要缺点 是它的 Inference 速度。 它在 COCO 上的平均精度(AP)为42.2%,每张图像的 Inference 成本为 1.147s,这对于需要实时或交互速率的视频应用来说太慢了。尽管可以通过减少处理的像素数量(例如,通过减少处理的比例数或图像分辨率)来轻易地加速 Inference,但是这会导致大的精度下降。 例如,使用单一尺度处理与降低输入分辨率相结合可以让 CornerNet 对每张图像的 Inference 时间降低到 42ms,相当于流行的快速检测器 YOLOv3 的39ms,但会将 AP 降低到 25.6%, 低于 YOLOv3 的33.0%。 这使得 CornerNet 在准确性-效率权衡方面的竞争力降低。
在本文中,作者寻求提高 CornerNet Inference 效率的方法。可以沿两个正交方向改善物体检测器的效率: 减少处理的像素数量 以及 减少每个像素的处理量。 作者探索这两个方向并介绍两种有效的 CornerNet 变种: CornerNet-Saccade 和 CornerNet-Squeeze,作者将其统称为 CornerNet-Lite。
CornerNet-Saccade 通过 减少要处理的像素数 来加速推理。 它在人类视觉中使用类似于 saccade 的 注意机制[58,1]。 它从 缩小的完整图像 开始并生成注意力图,然后放大并由模型进一步处理。这与原始的 CornerNet 不同之处在于它是在多个尺度上被完全卷积地应用的。 通过选择要以高分辨率检查的 crops 子集,CornerNet-Saccade 可提高速度,同时提高准确性。 COCO上的实验表明,CornerNet-Saccade在每张图像耗时 190ms 时实现了 43.2% 的AP,AP增加了1%,速度比原始 CornerNet 提高了6.0倍。
CornerNet-Squeeze 通过 减少每个像素的处理量 来加速 Inference。 它结合了 SqueezeNet 和 MobileNets 的思想,并引入了一种新的紧凑型 hourglass backbone,广泛的使用了 1×1 卷积,bottleneck 层和深度可分离卷积。使用新的 hourglass backbone,CornerNet-Squeeze 用了 34ms 内在COCO上实现了34.4%的AP,同时比YOLOv3更准确和更快(39.0%时为33.0%)。
一个很自然的问题是 CornerNet-Squeeze 是否可以与 saccades 结合以进一步提高其效率。 有些令人惊讶的是,作者的实验给出了一个 否定的答案: CornerNet-Squeeze-Saccade 比 CornerNet-Squeeze 更慢,更不准确。这是因为对于 saccades 来说,网络需要能够生成足够准确的注意力图,但 CornerNet-Squeeze 的超紧凑架构没有这种额外的容量。 此外,原始的 CornerNet 应用于多个尺度,为 saccades 提供了足够的空间来减少要处理的像素数量。 相比之下,由于超紧密的推理预算,CornerNet-Squeeze 已经应用于 single-scale,这为 saccades 提供了更少的空间。
Significance and novelty: 总的来说,CornerNet-Lite的这两种变体使得基于关键点的方法更加具有竞争力,涵盖了两个流行的用例:用于离线处理的 CornerNet-Saccade,在不牺牲精度的情况下提高效率,以及用于实时处理的 CornerNet-Squeeze,在不牺牲效率的情况下提高准确性。
CornerNet-Lite 的两种变体在技术上都是新颖的。 CornerNet-Saccade是第一个将 saccade 与基于关键点的对象检测集成在一起的。 它与先前工作的主要区别在于 如何处理每个 crops(处理 crops 对应的像素或特征图)。 使用 saccade 式机制的先前工作要么检测每个 crops 的单个物体(例如 Faster R-CNN [46]),要么每个 crops 产生多个检测,其中包含额外的 sub-crops 的两阶段网络(例如AutoFocus)。 相比之下,CornerNet-Saccade 通过 One-Stage 网络为每个 crops 生成多个检测。
CornerNet-Squeeze 是第一个将 SqueezeNet 与 stacked hourglass 架构集成并将这种组合应用于对象检测的网络。采用 hourglass 的先前工作在实现准确性方面表现出色,但不清楚 hourglass 架构是否以及如何在效率方面具有竞争力。
Contributions:
- 作者提出了 CornerNet-Saccade 和 CornerNet-Squeeze,这两种新方法可以提高基于关键点的物体检测效率;
- 在COCO上,作者将最先进的基于关键点的检测效率提高了6倍,AP从42.2%提高到43.2%。
- 在COCO上,作者同时提高了准确性和效率, 使之超过了 SOTA 的实时目标检测系统的准确率和速度(30毫秒时34.4%,YOLOv3 39毫秒时33.0%)。
Related Work
Saccades in Object Detection: 略…
R-CNN, Cascade R-CNN
Efficient Object Detectors: R-FCN
Efficient Network Architectures: SqueezeNet, MobileNets, PeleeNet, YOLO, RFBNet
CornerNet-Saccade
CornerNet-Saccade 会检测图像中可能出现物体位置周围的小区域内的对象。它使用 缩小的完整图像 来预测 attention maps 以及粗糙的 bounding boxes; 这两者都会提出可能出现对象的位置. 然后,CornerNet-Saccade通过检查以高分辨率为中心的区域来检测物体。 它还可以通过控制每个图像处理的最大对象位置数来提高效率。 Overview of pipeline 如图2所示。在本节中,作者将详细描述每个步骤。
Estimating Object Locations
CornerNet-Saccade 的第一步是获取图像中可能的对象位置。 作者使用 缩小的完整图像 来预测 attention map,其指示某处对象的 locations 和 coarse scales。 给定一个图像,作者通过将图像的长边调整为 255 和 192 像素,将其缩小到两个比例。 大小为 192 的图像用零填充到 255 的大小,以便它们可以并行处理。在如此低的分辨率下使用图像有两个原因。 首先,这一步不应成为 inference 时间的瓶颈。 其次,网络应该能够容易的利用图像中的上下文信息来预测 attention map。
对于缩小尺寸的图像,CornerNet-Saccade 会预测 3 个 attention maps,一个用于小物体,一个用于中等物体,一个用于大物体。如果对象较长的边长小于 32 像素,则该对象被认为是小物体,如果它在 32 到 96 像素之间则认为是中等物体,如果大于 96 像素,则该对象被认为是大物体。针对不同的物体尺寸单独预测 location,可以更好地控制 CornerNet-Saccade 在每个位置放大的程度。作者可以在小对象位置的放大程度更大一些,而在中等对象位置放大幅度相对小一些。
作者通过使用不同尺度的 feature maps 来预测 attention maps。特征图来自 CornerNet-Saccade 中的 backbone 网络,这是一个 hourglass 网络。网络中的每个 hourglass 模块都应用几个卷积和下采样层来缩小输入 feature maps 的尺寸。然后,它通过多个卷积和上采样层将 feature maps 上采样回原始的输入分辨率。 来自上采样层的 feature maps 将会用于预测注意力图。 较精细(高分辨率)尺度的特征图用于较小的对象,而较粗尺度的特征图用于较大的对象。作者 通过在每个特征图上应用 $3×3$ 的 Conv-ReLU 模块,然后应用 $1×1$ 的 Conv-Sigmoid 模块来预测注意力图。在 testing 过程中,作者只处理分数高于阈值 $t$ 的位置,作者在实验中设置 $t=0.3$。
当 CornerNet-Saccade 处理缩小尺寸的图像时,它可能会检测到图像中的某些对象并为它们生成 bounding box。从缩小尺寸的图像获得的边界框可能不准确。因此,作者还会检查高分辨率的区域以获得更好的边界框。
在训练期间,作者将相应 attention maps 上每个边界框的中心位置设置为正,其余为负。 然后作者应用 $\alpha = 2$ 的 Focal Loss。根据 Focal Loss 中的选择设置预测 attention maps 的卷积层中的偏差。
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)$,作者通过 $s_i$ 放大缩小的图像 ,其中 $i\in \{s,m,l\}$, 具体的比例取决于 coarse object 的 scale。然后作者将 CornerNet-Saccade 应用于以该位置为中心的 $255×255$ 的窗口。
从 bounding box 预测中获得的位置提供了有关对象大小的更多信息。作者可以使用 bounding box 的大小来确定放大比例。 确保比例能够使得放大后 bounding box 的较长边对于小物体是 24,对于中等物体是 64, 而对于大物体192。
有一些重要的实现细节可以提高处理效率。 首先,作者批量处理这些区域以更好地利用GPU。 其次,作者将原始图像保留在GPU内存中,并在GPU上执行调整大小和裁剪,以减少在CPU和GPU之间传输图像数据的开销。
在检测到可能出现物体的位置处的物体之后,作者通过应用 Soft-NMS 合并边界框并删除冗余框。当作者裁剪区域时,区域可能包括触及或超出裁剪边界处的部分对象,如图3所示。检测器可能会为这些对象生成边界框,这些边界框可能无法被 Soft-NMS 移除,因为它们可能与完整对象的边界框有较低的重叠. 因此,作者删除了触及 crop 边界的边界框(如图3所示)。在训练期间,作者在 CornerNet 中应用相同的训练损失来训练网络以预测 corner heatmaps, embeddings 和 offsets.
Trading Accuracy with Efficiency
作者可以通过控制每个图像处理的最大的 object locations 数量来提高效率。为了实现良好的准确性和效率的权衡,作者 优先考虑更可能包含对象的位置。 因此,在作者获得对象位置之后,作者按它们的分数对它们进行排名,并优先考虑从边界框获得的位置。 给定 $k_{max}$ 作为最大的 crops 处理数量,作者检测 top $k_{max}$ 个 object locations 中的 object。
Suppressing Redundant Object Locations
当物体彼此靠近时,作者可能会产生彼此高度重叠的区域,如图4所示。五门不希望对这两个区域都进行,因为处理它们中的任何一个都可能检测到另一个中的物体。
作者采用类似于 NMS 的过程来删除冗余位置。 首先,作者对对象位置进行排名,优先考虑来自 attention maps 的位置上的边界框的位置。 然后,作者保留最佳对象位置并删除靠近最佳位置的位置。 作者重复该过程,直到没有任何对象位置。
Backbone Network
作者设计了一个新的 hourglass 骨干网络,在 CornerNet-Saccade 中运行得更好。 新的 hourglass 网络由 3 个 hourglass 模块组成,深度为 54 层,尽管 CornerNet 中的 hourglass-104由2个 hourglass 模块组成,深度为104.作者将新骨干称为 Hourglass-54
hourglass-54 中的每个 hourglass 模块具有较少的参数并且比 hourglass-104中的 hourglass 模块浅。 按照 Hourglass-104 中的缩小策略,作者按步幅 2 缩小了特征。作者在每个下采样层之后和每个 shortcut 连接中应用一个残差模块[14]。 每个 hourglass 模块将 input feature 缩小3倍,并增加沿途的通道数量(384,384,512)。 模块中间有一个残留模块,512个通道,每个上采样层后有一个残余模块。 作者还在 hourglass 模块之前将图像缩小了两倍。
遵循训练 hourglass 网络的通用做法,作者还在训练期间添加中间监督。 在测试期间,作者仅使用网络中最后一个 hourglass 模块的预测。
Training Details
作者使用 Adam [22]来优化注意力图和对象检测的损失,并使用 CornerNet 中的相同训练超参数。 网络的输入大小为255×255,这也是推理期间的输入分辨率。 作者在四个1080Ti GPU上训练批量大小为48的网络。 为了避免过度拟合,作者采用了Corner-Net中使用的数据增强技术。 当作者随机裁剪对象周围的区域时,对象可以随机放置,也可以放在中心,并带有一些随机偏移。 这确保了训练和测试是一致的,因为网络检测以对象位置为中心的作物内的对象。
CornerNet-Squeeze
Overview
CornerNet-Saccade专注于像素的一个子集以减少处理量,与 CornerNet-Saccade 相比,而 CornerNet-Squeeze 探索了一种 减少每个像素处理量的替代方法。 在 Corner-Net 中,大部分计算资源都花在了 Hourglass-104 上。 hourglass 104 由残差块构成,其由两个3×3卷积层和跳过连接组成。 尽管 Hourglass-104 有一定竞争性能,但在参数数量和推理时间方面却有很高的成本。为了降低 Hourglass-104 的复杂性,作者将 SqueezeNet 和 MobileNets 的想法融入到轻量级 hourglass 的架构设计中。
Ideas from SqueezeNet and MobileNets
SqueezeNet提出了三种降低网络复杂度的策略:(1)用1×1内核替换3×3内核; (2)减少3×3内核的通道数; (3)延迟下采样。 SqueezeNet的构建块,即消 fire module,封装了前两个想法。fire 模块首先通过由1×1滤波器组成的 squeeze 层来减少输入通道的数量。 然后,它通过由1×1和3×3滤波器的混合物组成的 expand 层来提供结果。
根据SqueezeNet提供的见解,作者在 CornerNet-Squeeze 中使用 fire 模块而不是残余块。 此外,受MobileNets成功的启发,作者用3×3深度可分离卷积替换第二层中的3×3标准卷积,这进一步改善了推理时间。 标签。 表1显示了CornerNet中的残差块与CornerNet-Squeeze中的 fire 模块之间的详细比较。
作者没有采用 SqueezeNet 中的第三个想法。 由于 hourglass 网络具有对称结构,因此延迟下采样会在上采样期间产生更高分辨率的特征图。 在高分辨率特征图上执行卷积在计算上是昂贵的,这将不利于作者实现实时检测。
除了替换剩余块之外,作者还进行了一些修改。 作者通过在 hourglass 模块之前添加一个下采样层来减少 hourglass 模块的最大特征图分辨率,并在每个 hourglass 模块中删除一个下采样层。 CornerNet-Squeeze 相应地在 hourglass 模块之前将图像缩小三次,而CornerNet将图像缩小两次。 作者在CornerNet的预测模块中用1×1滤波器替换3×3滤波器。 最后,作者用4×4内核的转置卷积替换 hourglass 网络中最近邻居的上采样。
Training Details
作者使用相同的训练损失和CornerNet的超参数来训练CornerNet-Squeeze。 唯一的变化是批量大小。 在 hourglass 模块之前再次缩小图像会在CornerNet-Squeeze中的相同图像分辨率下将内存使用量减少4倍。 作者能够在四个1080Ti GPU上训练批量大小为55的网络(主GPU上有13个图像,其余GPU上有每个GPU 14个图像)。
Experiments
Implementation Details
CornerNet-Lite在PyTorch [40]中实现。 作者使用COCO [32]来评估CornerNet-Lite并将其与其他检测器进行比较。 在COCO中,有80个对象类别,115k用于训练的图像,用于验证的5k图像和用于测试的20k图像。
为了测量推理时间,对于每个检测器,作者在完成读取图像后立即启动计时器,并在获得最终边界框后立即停止计时器。 硬件配置可能会影响推理时间。 为了在不同的检测器之间提供公平的比较,作者使用1080Ti GPU和Intel Core i7-7700k CPU测量同一台机器上的推理时间。
Accuracy and Efficiency Trade-offs
作者在验证集上比较了CornerNet-Lite与三种最先进的物体检测器的准确性 - 效率权衡,包括YOLOv3,RetinaNet 和 Corner-Net。 精度和速度权衡曲线如图6所示。
作者在不同的 $k_max$ 下评估 CornerNet-Saccade,范围从1到30.对于 RetinaNet,作者评估不同的 single-scale 设置,包括 300,400,500,600,700和800(默认比例)。 对于 CornerNet,作者在原始图像分辨率的不同 single-scale 下进行评估,包括0.5,0.6,0.7,0.8,0.9和1(原始图像分辨率)。 作者还在默认的 multi-scale 设置下测试它,并且没有翻转图像。 CornerNet-Saccade实现了比 RetinaNet(在190ms时为39.8%)和 CornerNet(在213ms时为40.6%)更好的准确性和效率权衡(在190ms时为42.6%)。 图5显示了一些比较 CornerNet-Saccade 和 CornerNet 的示例。
遵循YOLOv3的默认设置,作者在 3 个 single image scale(320,416和608)下评估YOLOv3。 同样,作者还评估了不同 sginle scale (0.5, 0.6, 0.7, 0.8, 0.9, 1)的 CornerNet-Squeeze。 CornerNet-Squeeze 实现了比 YOLOv3 更好的准确性和效率(前者 30ms时为34.4%, 后者 39ms时为32.4%)。 作者通过在翻转图像和原始图像上运行它来进一步提高 CornerNet-Squeeze 的准确性,在50ms时将其AP提高到36.5%,并且仍然实现了良好的折衷。 当作者在多尺度设置下测试CornerNet-Squeeze时,作者观察到AP仅有 0.6% 的改善但是 Inference 时间增加到170ms。
CornerNet-Saccade Results
Training Efficiency: CornerNet-Saccade 不仅提高了测试效率,还提高了训练效率。 作者能够仅在四个1080Ti GPU上训练 CornerNet-Saccade,总共 44GB GPU内存,而CornerNet需要十个Titan X(PASCAL)GPU,总共120GB GPU内存。 作者将内存使用量减少了60%以上。CornerNet 和 CornerNet-Saccade都没有使用混合精确训练(mixed precision training)[36]。 如表2所示
Error Analysis: 注意图对CornerNet-Saccade很重要。 如果注意力图不准确,CornerNet-Saccade将错过图像中的对象。 为了更好地理解注意力图质量,作者将预测的注意力图替换为真实的注意力图。 这在验证集上将CornerNet-Saccade的AP从42.6%提高到50.3%,表明有足够的空间来改进注意力图。如下面表3所示
Performance Analysis of Hourglass-54: 作者在CornerNet-Saccade中引入了一个新的 hourglass ,Hourglass-54,并进行了两次实验,以更好地理解 hourglass-54 的性能贡献。 首先,作者使用Hourglass-104而不是Hourglass-54训练CornerNet-Saccade。 其次,作者使用Hourglass-54而不是Hourglass-104训练CornerNet。 对于第二个实验,由于资源有限,作者在四个1080Ti GPU上训练两个批量大小为15的网络,作者遵循CornerNet [26]中的培训细节。
表4显示具有 hourglass-54(42.6%AP)的CornerNet-Saccade比使用 hourglass-104(41.4%)更准确。 为了研究性能差异,作者评估了注意力图和边界框的质量。 首先,预测注意力图可以被视为二元分类问题,其中对象位置是正数,其余是负数。 作者通过平均精度来衡量注意力图的质量,表示为APatt。 Hourglass-54的APatt达到42.7%,而Hourglass-104达到40.1%,这表明Hourglass-54在预测注意力图方面表现更好。
其次,为了研究每个网络的边界框的质量,作者用地面实况注意力图代替预测的注意力图,并用 hourglass-54 训练 Corner-Net。 通过 GT 注意力图,带有 hourglass-54 的 CornerNet-Saccade 实现了50.3%的AP,而具有 hourglass-104 的 CornerNet-Saccade 实现了48.9%的AP。 使用 Hourglass-54 的CornerNet实现了 37.2% 的AP,而 hourglass 104 达到了38.2%。 结果表明 hourglass-54与 saccade 结合时可以产生更好的边界框。
CornerNet-Squeeze Results
Comparison with YOLOv3: 作者将 CornerNet-Squeeze 与一个广泛使用的实时探测器YOLOv3 [45]进行比较, 如表5所示. YOLOv3在 C语言中实现,并且还提供了一个Python API,它使得 Inference 时间增加了 10ms 的开销。 另一方面,CornerNet-Squeeze在Python中实现,并且仍然比YOLOv3的C版本更快。 如果作者纯粹用 C 实现 CornerNet-Squeeze,那么可能会更快。
Ablation Study: 作者研究了CornerNet-Squeeze的每个主要变化,以了解它对推理时间和AP的贡献。 为了节省GPU资源,每个模型仅针对250k次迭代进行训练,遵循 Sec 4.3 中的详细信息。通过 hourglass 模块之前的额外缩小,作者能够训练批量大小为55(第4.3节)的网络,而作者只能在四个1080Ti GPU上训练批量大小为15的CornerNet。 作者只在Tab中提供250k的CornerNet AP。 具体如表6所示。
在 CornerNet 中, hourglass 模块之前有两个下采样层。 如果作者再添加一个下采样层,作者可以将推理时间从114ms减少到46ms。 用 fire 模块替换残差块可以节省11ms,并且在预测层中使用1×1内核可以节省另外2ms而不会有任何性能损失。 最后,作者使用反卷积(Transpose Convolution),因为它将AP提高了0.5%,Inference 时间略有增加
CornerNet-Squeeze-Saccade Results
作者尝试将CornerNet-Squeeze与saccades结合使用,以进一步提高效率。 但是,作者发现CornerNet-Squeeze-Saccade的性能并不优于CornerNet-Squeeze。 在验证集上,CornerNet-Squeeze实现了34.4%的AP,而 $k_{max} = 30$ 的CornerNet-Squeeze-Saccade实现了32.7%。 如果作者用 GT 注意力图(即物体位置已知)替换预测的注意力图,作者将CornerNet-Squeeze-Saccade的AP提高到38.0%,优于CornerNet-Squeeze。
结果表明,如果注意力图足够准确,Saccade 只能有所帮助。 由于其超紧凑的架构,CornerNet-Squeeze-Saccade没有足够的容量来检测物体并同时预测注意力图。 此外,CornerNet-Squeeze仅对 single-scale 图像进行操作,这为CornerNet-Squeeze-Saccade节省的空间提供了更少的空间。 CornerNet-Squeeze-Saccade可以处理比CornerNet-Squeeze更多的像素,从而减慢 Inference 时间。
COCO Test AP
作者还在COCO测试集上比较了CornerNet-Lite和CornerNet以及YOLOv3。如表8所示. CornerNet-Squeeze比YOLOv3更快,更准确。 CornerNet-Saccade 在 multi-scale testing 上比 CornerNet 更准确,且速度提高了 6 倍。
Conclusion
作者推荐使用 CornerNet-Lite,它是CornerNet的两种有效变体的组合:CornerNet-Saccade和CornerNet-Squeeze。 本文的实验揭示了基于关键点的检测对于需要同时考虑精度和速度的任务来说, 是具有一定优势的.