QueryDet论文解析(2022 CVPR oral paper)

思路

本文提出了QueryDet,使用一种新颖的查询机制来加速基于特征金字塔的目标检测器的推理速度,整体思路分为两步:

i)首先在低分辨率的特征图上预测小目标的粗略位置;

ii)然后使用由粗略位置稀疏引导的高分辨率特征计算准确的检测结果

优点+创新点

既充分利用了高分辨率特征图,又避免了背景区域的无效计算。因此与其他小目标检测器相比,QueryDet在提升小目标检测精度的同时,也保持了较快的推理速度。

①引入更高分辨率的特征图

②引入额外的查询头来监督训练小目标(※)

③引入级联查询机制CSQ(※)

内容

要解决的问题——>小目标检测的精度和计算成本的平衡(trade-off)

提升小目标检测的精度可以通过放大输入图像或者减小网络的下采样率来实现,不过会造成计算量激增。虽然目前FPN范式降低了保有高分辨率特征图时的计算成本,但是对于处理底层特征,检测头的计算量还是巨大的,比如:在RetinaNet中增加额外的层数P2会带来300%的额外计算量(FLOPs),因此会极大的降低推理速度(from 13.6 FPS to 4.85 FPS on NVIDIA 2080Ti GPU)。

 

解决办法:

其动机来自于两点核心观察:

i)低层特征十分冗余,因为小目标的空间分布非常稀疏,它们只占据高分辨率特征图的很小一部分,因此很大一部分计算量被浪费了;

ii)FPN高度结构化。在低分辨特征图上,即使无法准确定位小目标,我们仍然可以以较高置信度知道小目标的大致位置。

本文提出CSQ机制(Cascade Sparse Query),即使用低分辨率特征图来初步定位小目标的大致位置(query keys),然后使用这些位置的高分辨率特征构建稀疏特征图(query values),最后用稀疏检测头(稀疏卷积)来预测。整个过程采用的级联形式。

具体实现:

在RetinaNet的基础上设计的(但不限于RetinaNet)

1)RetinaNet的简单回顾

2)QueryDet 

为了预测小目标的粗略位置,添加了一个与分类和回归头并行的查询头,这个查询头输入特征图,输出热图,表示网格(i,j)包含小目标的概率。

在训练的时候,将尺寸小于阈值sl的目标定义为第l层的小目标,这里sl取Pl上最小的anchor尺寸。小目标o的中心坐标表示为(xo,yo),计算特征图Pl上每个位置到该层上所有小目标的中心的距离,选取最小的距离作为该位置的值:

 设置距离小于sl的为1,其他为0

 从而得到查询头的二值目标图。查询头通过FocalLoss来训练。对于每层Pl,损失函数为:

 分别是分类输出、回归输出和查询分数输出。所有层加起来的总损失函数为:

 \beta l为每层的损失权重,这个权重很重要,因为加入P2层后,P2层的训练样本数比P3层到P7层的训练样本总数还要大,如果不减少P2层的损失权重,网络就会倾向于去训练小目标而忽略其他尺寸的目标。所以的引入能够重新平衡各层损失,达到每层都能训练到的目的。

在推理的时候,选择查询分数大于阈值σ的位置作为query,然后将其映射到Pl-1上的四个邻近位置作为关键位置:

 Pl-1上所有关键位置的归为集合{k-1},利用{k-1}为索引从Pl-1上提取特征,构建稀疏张量(query value features),然后输入3个检测头(4个稀疏卷积)进行预测。

为了最大化推理的速度,queries采用级联形式,P4作为使用query的起始层。

 实验及结果

 ①Querynet和Retinanet在COCO和VisDrone数据集上的对比

②消融实验

③探究查询阈值σ的影响

最左边的三角形标记:没有应用CSQ的情况

将一条曲线中相邻的数据标记依次σ增加0.05,可以看到即使是很低的阈值(0.05)也能获得显著的速度提升

④探究query的起始层

将第四层作为起始层是最佳选择。

⑤探究用什么方式使用query最好

 CQ(crop query):将queries索引的对应区域从高分辨率特征图上取出来进行后续操作

CCQ(complete convolution query):使用常规的卷积去计算每层的完整特征图,但是只选取查询位置的结果进行后处理

⑥探究多少上下文是我们所需要的

这里的上下文指查询位置周围的patch

⑦将本文的方法运用到轻量级网络和anchor-free网络中:

 缺点

1.即使查询头正确提取了小物体的粗略位置,检测头也可能无法对其进行定位(VisDrone的第二张图像);

2.大物体位置被错误激活,导致检测头处理无用位置,速度变慢(COCO第一张图)

启发:

①增加小目标位置标签来增加网络的约束条件,使网络更好的预测小目标;(除了分类回归头还可以设计别的头)

②引用小目标位置分布的空间稀疏性,先粗筛后精选来减少检测头的计算量,提高推理速度(类比找钥匙)

代码细节:

训练的时候:检测头用的普通卷积

推理的时候:检测头用的稀疏卷积->稀疏卷积初始化的参数是训练好后的普通卷积的参数

稀疏卷积:本质上就是通过建立哈希表,保存特定位置的计算结果,pytorch有spconv包可直接调用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值