CornerNet-Lite论文阅读笔记

(一)Title

image-20201030150352755

(二)Summary

基于关键点的方法是目标检测中相对较新的范例,消除了对 anchor boxes 的需求并提供了简化的检测框架。基于Keypoint的CornerNet在单级(single-stage)检测器中实现了最先进的精度。

然而,这种准确性来自高处理代价。在这项工作中,我们解决了基于关键点的高效目标检测问题,并引入了CornerNet-Lite。
CornerNet-Lite是CornerNet的两种有效变体的组合CornerNet-Saccade,它使用注意机制消除了对图像的所有像素进行彻底处理的需要,以及引入新的紧凑backbone架构CornerNet-Squeeze
这两种变体共同解决了有效目标检测中的两个关键用例:在不牺牲精度的情况下提高效率,以及保证实时性的前提下提升准确性。

CornerNet-Saccade在不牺牲准确性的情况下提高效率,CornerNet-Squeeze在不牺牲效率的情况下提升精度

CornerNet-Saccade通过减少要处理的像素数量来加速inference。它使用一种类似于人类视觉中扫视的注意力机制,利用完整图像的下采样生成一个attention map,然后放大进行接下来的处理。这与最初的CornerNet不同,因为它是在多个尺度上进行全卷积应用的,通过对高分辨率图像进行裁剪用于检测,将检测结果融合来提升检测准确度,性能表现:每幅图像190毫秒时实现了43.2%的AP,相比于最初的CornerNet,AP提高了1%,速度提高了6.0倍。

CornerNet-Squeeze通过减少每个像素的处理量来加速推理,结合了 SqueezeNet以及 MobileNets 的观点,引入了一个改进后的hourglass backbone,广泛使用1×1 convolution, bottleneck layer, and depth-wise separable convolution.性能提升:在30ms速度下,AP值可以达到34.4% ,速度上要优于YOLOv3(33%,39ms)

这样一个很显然的问题就是:结合CornerNet-Saccade和CornerNet-Squeeze能不能实现比CornerNet-Saccade更高的速度,同时比CornerNet-Squeeze更优的准确率呢?实验结果是:不能,因为CornerNet-Saccade需要生成足够精确的attention map,CornerNet-Squeeze的超紧凑架构没有这种额外的能力。

本文的贡献:

  • CornerNet-Saccade CornerNet-Squeeze两种提升效率的新网络

  • COCO上,我们将最先进的基于关键点的检测效率提高了6倍,AP从42.2%提高到43.2%

  • COCO上,实时目标检测的效率提升从(从39毫秒时的33.0%提高到30毫秒时的34.4%)


(三)Research Objective

本文从在保证检测精度前提下,提升检测准确率角度出发,作者提出提升任何目标检测器的效率通常有两个方向:

  • 减少处理的像素数量
  • 减少处理每个像素处理的过程

从而衍生出本文的两种CornerNet的两种变体:CornerNet-Saccade以及CornerNet-Squeeze。统称为CornerNet-Lite

CornerNet主要思路是基于关键点检测,不需要anchor boxes。CornerNet在单阶段检测器中的性能是state of art的,但是需要大量的预处理才能得到较高的准确率,消耗较多的计算资源。

(四)Problem Statement

在目标检测领域,基于关键点的方法是非常新的,它不再需要 anchor boxes,让模型框架更加简洁。基于关键点的 CornerNet 在单阶段检测器中性能是 state of the art 的。但是,它为了获取高精度,消耗了很多的计算资源

CornerNet的推理速度是其一个缺点,怎么在保证精度的前提下,提升效率是本论文需要解决的问题。

(五)Method

1. CornerNet-Saccade

image-20201031112938612

利用一种类似于人眼扫视的注意力机制,首先经过一个下采样后的输入图片,生成一个attention map,然后再将其进行放大处理,接着进行后续模型的处理。这与之前原始的CornerNet在不同尺寸上使用全卷积是有区别的,CornerNet-Saccade通过选择一系列高分辨率的裁剪图来提高效率及准确率。

​ 采用人眼的注意力机制,先对下采样的完整图像预测一个attention map以及coarse bounding box,这两个都可以得到一个可能的物体位置,然后通过通过在高分辨率图片上检测该区域的中心进而检测到目标物,效率和性能的权衡是通过控制每张图片处理的最大数量的目标物的位置来达到准确率及效率

backbone使用简化后的Hourglass,成为Hourglass-54

CornerNet-Saccades的实现步骤:

  1. 将图像的长边resize到255和192,其中192零填充到255(使用其他填充方式会有什么不同吗?)
  2. 利用下采样后的图像在backbone的上采样阶段不同粒度的特征图上预测大、中、小三个尺度的目标位置,对于不同大小的目标,可以更好地"针对性处理(放大)",对于不同尺度的目标采用不同的放大倍数,

由于使用了下采样,对于一些小目标可能无法准确检测,因此,我们应该基于在第一步中获得的尺度(scale)信息在更高的分辨率上检查区域。

  1. 在生成attention map的同时,会在图像中给大目标预测boxes,但是这些boxes不是很准确,同样需要放大来获取更好的boxes。

  2. 在完成可能目标位置的目标检测之后,crop图像中的bounding boxes进行NMS,同时手动删除掉由于裁剪而导致的只有一部分的目标的boxes。

  3. NMS处理的一些内容:

    image-20201031200129896

在训练期间,使用和CornerNet中应用相同的训练损失来训练网络,以预测corner heatmaps、embeddings和offsets。

训练的细节

优化方法:Adam,inputSize:255x255,batchsize:48,利用在目标中心随机裁剪区域实现数据的增强!

2. CornerNet-Squeeze

CornerNet-Saccade通过关注子区域的像素来减少处理量。CornerNet-Squeeze减少每个像素处理过程中的计算量。CornerNet中,计算量主要消耗在Hourglass-104上,虽然Hourglass-104的性能好,但是,其参数量大,而且inference时间长。本文借鉴了SqueezeNet及MobileNet的思想来设计一个轻量级的Hourglass结构。

使用SqueezeNet中的fire module代替残差模块,并借助MobileNet的思想利用深度可分离卷积代替标准卷积。

网络的其他变动

  • Hourglass Module之前增加一个下采样层来降低Hourglass Module特征图的最大分辨率
  • 移除每个hourglass模型中的一个下采样层
  • CornerNet-Squeeze在hourglass 模型之前下采样3次,而CornerNet只下采样两次。
  • 将CornerNet预测模块中的3x3卷积替换为1x1的卷积
  • 将hourglass网络中最相邻的上采样层替换为4x4的转置卷积。

训练细节

​ 我们使用了 CornerNet 中同样的损失函数和超参数来训练 CornerNet-Squeeze。唯一的改变就是 batch size。CornerNet-Squeeze 面对同样的图像分辨率,在 Hourglass模块之前缩小图像大小可以降低内存消耗4倍。我们在4个 1080ti 1080ti1080ti GPU上以 batch size 55来训练网络,在主GPU上训练13张图片,剩余的GPU 每个训练14张图片。

(六)实验

One-stage 算法性能比较

在这里插入图片描述

我发现网上大家的笔记中关于实验部分的内容写的很不详细,我也是这样子的,不给我自己最近的感受是实验对于我们看论文来说也是很重要的,能够提供给我们一些改进思路,或者说我们怎么去设计实验的思路,就像做工艺器件的,实验的设计想法至关重要,次次实验下去都是钱,我们次次下去都是时间。

1.实验一

我们的网络在inference时间上有了提升,那在训练时间上呢?我们采用的参数少,是不是训练时间以及对GPU的消耗也会很短呢?因此我们设计实验,我觉得这里也不算设计实验吧,只是将自己的训练使用的GPU以及显存展示了下,好有钱啊啊 啊啊啊

image-20201031211052987

我觉得再放一个loss曲线变化会不会更好一些呢?而且我发现训练网络挺吃经验的啊,可惜我只是纯小白。

2.实验二

我们提出了新的Hourglass Network-54,它除了比104简单外,和104在性能上有得比较吗?因此,”我们“设计了实验二,要是用我们的网络训练CornerNet,性能上会比用104训练的差多少呢?或者说用104作为我们backbone在性能上会不会又提升呢?

我们还提出了attention map这样的东西,那么104和54谁产生的attention map更好呢?,也就是和我们使用真正的ground truth attention map作为天花板,我们越接近这个,说明我们预测attention map的能力就越强。

image-20201031211949736

这里在我们的CornerNet-Saccade中,54要好,在CornerNet中,104要好一些,其实这里104和54在预测attention map上是差不多的,因为到天花板的距离是差不多的,只不过使用54的天花板更高一些,为什么54的天花板会比104的高一些呢?我觉得这个,我很是迷惑啊??按道理讲104在提取高层语义信息的能力更好,但是为什么从小目标到大目标的AP值,104和54的距离越来越大呢,搞不明白。只能说Saccade配54是老搭档,104初来乍到,不太熟悉。不会吧不会吧,不可能是没训练好吧

3. 实验三

细看我们网络中的一些小小改动,是否是真正的提升,从CornerNet一步步到CornerNet-Squeeze,然后我们再用现有的网络试试,看看训练效果怎么样?

image-20201031213307242

每个网络都训练了250K次迭代,+ w/o flipped image应该是不翻转图像的话,AP会有损失,GPU带给我们的时间成本实在是太高了。

4. 实验四

我们设计两个网络,加在一起使用会不会有奇效呢 ?

image-20201031213755637

实验告诉我们,但是这个不能更好地预测注意力图,我有点看不懂啊,使用了ground truth attention的天花板比之前近了一些吧,只能说着整体搞下来对于任务来说有些不协调。

5. 实验五

为了展示我们的power,当然要跟几个大佬比比。

image-20201031214324732

看数据就行了,我们小目标不行啊啊啊 啊啊啊啊啊 啊啊啊 啊,其他的都挺好,推断时间也短啊。要是小目标也行的话多好啊啊啊啊啊 啊啊啊 啊啊 啊啊 啊啊啊啊啊啊啊 啊啊啊啊啊 啊啊啊啊,好气啊!!!!!!!!!!!!!!!!!!

结论部分大家可以看看Summary

(七)Notes

1.目标检测中的Saccades是什么?

在inference阶段有选择性地裁剪和处理裁剪后的图像(顺序或者并行地进行处理)。论文中CornerNet-Saccade就是采用的扫视方式,并且这种扫视是单类型,多对象的,只有一种类型的裁剪,使用single-stage detector产生的crop,并且一种裁剪可以同时生成多个对象,大大减少了进行目标检测所需要的裁剪的数量,

2. CornerNet-Saccades怎么估计目标的位置?

本文在一张下采样后的图片上得到attention maps,用于代表目标物的位置以及对应位置上目标物的大致大小。对于给定的一个图,将图像长边resize到255和192像素这两个尺度上,对于192像素的图像,我们将其零填充到255像素大小上,实现并行处理。

使用低分辨率图片的原因有两个

  • 这样操作会减少inference时间上的消耗
  • 网络可以很容易得到图片中的上下文信息进而进行attention maps的预测。

对于大、中、小目标预测3个注意力图(应该利用的是不同程度的上下文信息,也就是不同位置的特征图比较合理吧),如果一个目标物的较长边的像素小于32,则被视为小目标,32到96的视为中等目标,大于96的是大目标。针对不同尺寸的物体的位置进行独立的预测,可以更好的控制CornerNet-Saccade对每个位置的重视程度。同时根据目标的大小,也可以调整how much CornerNet-Saccade should zoom in at each location.小目标需要多放大一些,目标越大,放大程度的越小。

通过在不同尺寸的feature maps上预测出attention maps。

​ 论文中关于3个尺度注意力图的获取方式和我们考虑的一样,使用的是backbone网络(hourglass network)的上采样过程中的feature maps,小目标的注意力图使用的是细粒度(finer scales)的特征图,大目标使用的粗粒度(coarser scales)的特征图。在特征图之后我们使用3×3 Conv-ReLU module+1×1 Conv-Sigmoid module得到3个attention maps。在测试过程中,只处理分数大于0.3的位置

3. CornerNet-Saccades处理思路

采用注意力机制的corse to fine的思路,第一步,根据我们第一步得到的粗略的位置信息也就是bounding box的信息,我们接下来直接从下采样后的图像上对应bounding box的位置不太好,因为图像细节信息不够,(这里我自己的想法是我们可以考虑采用类似于faster_rcnn的想法,将bounding box映射到原图上,利用这些高分辨率的图进行检测,同时这些图的大小较小。

4. Detecting Objects又是怎么实现的呢?

对于不同的目标采取不同的放大倍数, s s s_s ss用于小目标, s m s_m sm用于中目标, s l s_l sl用于大目标。通常情况下是 s s > s m > s l s_s>s_m>s_l ss>sm>sl也就是小目标需要放大更大的倍数。对于可能存在的位置(x,y),根据大致的目标尺寸,按照Si的比例对downsized图片进行放大,然后,将CornerNet-Saccade应用到255x255窗口的中心位置处。这里的这个放大过程是怎么实现的呢?

之前提到的两种方式确定目标的位置和大致大小,上面的attention map是一种方式,另一种方式就是:在CornerNet-Saccade处理缩小的图像以预测attention map时,它可能已经预测了图像中一些较大对象的方框。但是这些boxes可能不准确。我们也放大这些目标来得到更好的boxes。

在可能的物体位置检测到物体后,我们合并边界框,并通过应用soft NMS去除冗余的边界框。但是在裁剪的图像中只包含部分的目标时,由于这些框和伞的框没有交叠,因此,做soft NMS不会删除掉这些框,我们不希望在cropped的图像中预测这些目标,因此需要手动删除掉,这些接触到crop边界的边界框。如下图所示:

image-20201031195138215

当对象彼此靠近时,他们可以生成彼此高度重叠的区域,处理两个区域中的任何一个都会检测到另一个区域中的对象,这里同样采用NMS的思路,首先对对象的位置进行一个排序:这里的对象位置包括两部分(一部分是来自attention map的,另一部分是来自bounding boxes的)这里排序时优先排序bounding boxes的位置,按照排序顺序对boxes进行NMS,直到所有boxes都满足条件,如下图所示,红色和蓝色框是两个彼此高度重叠的区域,需要对boxes位置进行排序。然后做NMS。

image-20201031195956736

5. 为了提升效率,你能怎么做?

主要思路就是充分利用GPU的资源:

  • process the regions in batch,这里的regions指的是什么?
  • 将原始图像存到GPU内存中,在GPU上进行resize和裁剪,从而减少图像数据在GPU和CPU之间的传输
  • 并行处理裁剪图像(255和192大小的同时处理,对192大小的图像进行零填充到255大小)

6. backbone的介绍

​ 本文设计了一个新的hourglass网络,包含三个hourglass module,深度一共为54层,称为Hourglass-54。每个hourglass模型的参数较少而且网络较浅。本文将采用 stride为2的下采样方式。在每个下采样层的后面用了一个参差层及跳跃结构。每个hourglass模型将feature map减小3次,同时通道数分别为(384,384,512),在hourglass模型的中部有一个通道数为512的残差模块,同时,在上采样的每一层后面都有一个残差模块。在Hourglass模型前对输入图片进行2倍的downsize。

7. 从SqueezeNet和MobileNets中得到的启发

SqueezeNet的做法

  • 3 × 3 3\times 3 3×3的卷积核替换为 1 × 1 1\times 1 1×1的卷积核
  • 减少 3 × 3 3\times 3 3×3的卷积核的输入通道
  • 延迟下采样

MobileNet的做法

  • 标准 3 × 3 3\times 3 3×3的卷积使用深度可分离卷积(depth-wise separable convolution)代替

SqueezeNet中的fire module 采用了前两个想法,Fire module 首先通过由 1×1 滤波器组成的 squeeze 层降低输入通道数。然后将结果通过由 1×1 和3×3滤波器混合组成的 expand 层。

基于 SqueezeNet 的想法,我们在 CornerNet-Squeeze 中使用了 fire module,没有用残差模块。而且,受 MobileNet 的启发,我们将第二层中的标准 3×3卷积替换为 3×3深度可分离卷积,这进一步加快了推理速度。

上述Squeeze的第三条特点,并未考虑,因为,hourglass为沙漏型对称结构。后续的下采样的结果会在上采样过程中得到更高的分辨率,而在高分辨率的feature map上进行卷积操作会占用大量的计算资源,不利于实时检测

8. 使用fire module代替残差模块,提升速度

CornerNet 的残差模块和 CornerNet-Squeeze 中的 fire module 对比细节:

image-20201031202459601

(八 )问题

问题1:attention maps会吃图像的上下文信息,高分辨率图像提取的特征图和低分辨率图像提取的特征图之间有什么区别吗?我使用高分辨率图像不是也可以得到图片的上下文信息吗?还是说高分辨率图像提取的特征图包含了更多的上下文信息呢?或者说我使用低分辨率图像得到特征图和使用高分辨率图像得到特征图然后下采样到和低分辨率图像一样的尺度上,这样两个特征图上会有差别吗?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值