《AutoFocus: Efficient Multi-Scale Inference》论文笔记
1. Motivation
这是一篇讨论如何 “from coarse to fine” 进行目标检测的论文。进行多尺度目标检测一般都会用到金字塔网络,有的是利用特征金字塔如FPN(Feature Pyramid Network)在大尺度特征图(深层)上检测大目标,在小尺度特征图(浅层)上检测小目标;也有的用图像金字塔如本文。但是对不含目标的区域进行检测会消耗不必要的计算资源,所以通常会采用逐步精细化的检测策略。在本文中,是通过在coarse scale上定位可疑目标,返回区域切片,再在fine scale的切片上进行小目标检测,最后合并各尺度检测结果实现的。
2. Method
AutoFocus的架构
AutoFocus = FocusPixels + FocusChips + Focus Stacking
1. 生成FocusPixels:
- 定义:在特征图(如Resnet的Conv5)的某个像素点上,如果该像素点在对应原图的区域上有小物体存在(即感受野上有小物体),这个像素点就被定义成FocusPixels。
- 训练:网络训练时标记FocusPixels为正样本(标签为1),其他像素被定义成无效样本(标签为-1)或者负样本(标签为0),网络学习在这些标签为1的位置产生高的激活值。
- 标签定义:
- 正样本(l = 1):有小物体覆盖的像素。
- 无效样本(l = -1):有中等大小物体或极小物体覆盖的像素。
- 负样本(l = 0):不符合上述条件的像素。
- 打标签的过程:
下面用论文中给出的图讨论打标签的过程
首先,,上图非推理过程,这里的多尺度不是推理时的:原始尺度上找到可能包含小物体的区域——> 将该区域的图像放大作为scale2进行检测——>再放大到scale3进行检测。
事实上,这个图反映的是训练过程中的标签标注过程,对于上图三个尺度来说,都在做同一件事:找到图像中的小目标。
- 对于scale1来说,红色框的两个小物体尺寸属于小目标,被标注为正类,而黄色框的因为属于中间大小的物体,从而被标注为无效样本。
- 对于scale2来说,红色框表示小物体,被标注为正类,黄色框属于中间尺寸被标注为无效样本,在scale1中被标注为无效样本的大象因为在scale2中尺寸符合了大目标的定义,所以被定义成负样本。
- 对于scale3,原来在scale2中的小目标在scale3中因为尺寸变大,被定义成无效样本。
如果还不理解,可以参考论文中的标注数学表达式,如下所示:
l = { 1 , if IoU ( GT , l ) > 0 and a < GT Area < b − 1 , if IoU ( GT , l ) > 0 and GT Area < a or b < GT Area < c 0 , otherwise l = \begin{cases} 1, & \text{if } \text{IoU}(\text{GT}, l) > 0 \text{ and } a < \sqrt{\text{GT Area}} < b \\-1, & \text{if } \text{IoU}(\text{GT}, l) > 0 \text{ and } \sqrt{\text{GT Area}} < a \text{ or } b < \sqrt{\text{GT Area}} < c \\0, & \text{otherwise}\end{cases} l=⎩ ⎨ ⎧1,−1,0,if IoU(GT,l)>0 and a<GT Area<bif IoU(GT,l)>0 and GT Area<a or b<GT Area<cotherwise
其中的 G T A r e a GTArea GTArea是原始的GT框,经过不同尺度的变换得到的,即如果输入图片变大了,那么 G T A r e a GTArea GTArea也变大了,而上面公式中的 a , b , c a,b,c a,b,c是不变的,这样必然会引起同一个目标在不同尺度的图像中被打成不一样的标签。
2. 生成FocusChips:
- 过程:
- 使用阈值 t t t从特征图中标记 FocusPixels,激活值大于阈值的像素被标注为1(目标),小于的被标注为0(背景)
- 使用膨胀卷积对这些像素进行膨胀处理以增加上下文信息。
- 前面两步会得到一个个的像素块,下面使用FocusChip Generator算法,将属于同一目标的块合并,并生成一个大的矩形框作为新的像素块
- 确保框的尺寸大于预定义的K,小于的话,就多覆盖一些周围的像素,作为context。
3. 执行Focus Stacking:
- 步骤:
- 通过尺度变换合并来自各个尺度的检测结果
- 如果在边界上检测到目标,删除掉这个框
- 执行非极大值抑制