目标检测与MMDetection
目标检测的基本范式
什么是目标检测
目标检测是在给定的图片中用矩形框框出所有感兴趣物体同时预测物体类别的过程。
- 图像分类和目标检测的异同
目标检测在生活中有非常广泛的应用,例如人脸识别、智慧城市、自动驾驶等。也可作为其他下游视觉任务的基础,例如OCR、姿态识别等等。
发展
早期是传统方法DPM,在进入深度学习阶段之后就有了更多算法。
- 根据算法阶段来划分。 首先出现的是两阶段算法,以R-CNN和Faster R-CNN为代表;此后是单阶段算法,以YOLO和SSD为代表。
- 根据是否使用Transformer。 2020年左右,涌现了诸多基于Transformer的方法,例如DETR、ViT等等。
- 如今基于CNN和TR的方法日趋成熟,学术界开始在探讨Open Vocabulary Detection,希望目标检测算法能够不局限在有标注的数据集中。
目标检测技术的演进
基础知识
框
是横平竖直的框,如果是旋转的是旋转目标检测这一小类。
交并比IoU
如果存在多个框,那么就需要考虑框之间的关系。最常用的方法就是交并比。
IoU是介于[0,1]的数值。后续也有很多新的IoU方式,例如CIoU、DIoU等等
目标检测的基本思路
滑窗
如上述图片所示:滑窗法首先是通过设定一个固定大小的窗口,然后按照一定规律遍历图像所有位置。在遍历的时候根据滑窗对图像进行一个裁剪,然后对滑窗内的图片进行分类,根据分类分数来判断属于前景还是背景。
但是滑窗方法的效率是非常低的。
为了减少不同滑窗中被同一卷积计算的冗余,可以用卷积对全图进行计算,然后通过卷积的位置一致性取出对应位置的特征。
感受野
感受野的计算
有效感受野(感受野的大小)
使用卷积实现密集预测
不同感受野自然形成了一系列等距离分布的滑窗。本来在每个滑窗的部分都有线性分类的过程,可以对其进行维度上的转置,得到一个
1
×
1
×
C
i
n
×
C
o
u
t
1 \times 1 \times C_{in} \times C_{out}
1×1×Cin×Cout的卷积,实现特征图的密集预测。这样就可以一次性计算出所有位置上包含物体的概率。
边界框回归
神经网络对于回归比起分类任务还是比较困难的,所以设置一个锚框还是能降低难度。当然锚框也不是纯粹为了回归任务,也可以检测出不同大小的物体还有重叠物体。
非极大值抑制
预测结果中,可能多个预测结果间存在重叠部分,需要保留交并比最大的、去掉非最大的预测结果,这就是非极大值抑制(Non-Maximum Suppression,简写作NMS)。
密集预测的流程
- 图像输入到卷积网络里产生一个特征图,然后用 1 × 1 1 \times 1 1×1的卷积去卷特征图,得到类别概率和预测结果
- 把不是背景的框保留
- 基于框的位置,加上预测的边界
- NMS
密集预测模型的训练
GT怎么映射到密集预测中呢?因为标注的时候只会标出物体,那么如何用这个稀疏的标注去产生一个密集的GT,这个过程就是匹配。
采样:自然的想,存在以下两种情况
- 背景较多,不能训练成一个预测背景的检测器
- 前景周围的模糊边界,也不该被预测到,删去,因为作为前景和背景都不太好。
密集检测的思路
这是一个抽象的基本范式。