目标检测

  • 1. 目标检测算法
  • 2. 重点概念
  • 3. 位置回归的损失函数
  • 4. 评估方法
  • 5. 重难点
  • 6. 参考


1. 目标检测算法


1. 时间线

时间

2015 NIPS

2016.5 CVPR

2016 ECCV

2016.12

算法

Faster R-CNN

YOLO v1

SSD

YOLO v2

  Faster R-CNN 和 YOLO v1 先后出现,两者没有相互借鉴。Faster R-CNN 提出的锚点、使用边界偏移回归算法定位等思想被后来的 SSD 和 YOLO v2 采用。而且 Faster R-CNN 是第一个端到端的目标检测算法。

2. 方法与性能

  Faster R-CNN 先从主干网络提取的公共特征图中检测包含目标的特征,得到包含目标的特征在公共特征图上的坐标。再使用 ROIPooling 把包含目标的特征从公共特征图上提取出来,接着从提取的特征中检测和分类。
  YOLO 除了主干网络外,还使用称为 neck 的网络继续提取高维特征,然后在 3 个尺度上分别检测和分类。
  SSD 把主干网络提取的特征分为 6 个尺度,在各尺度上分别检测和分类。

  Faster R-CNN 需要两步且没有从多个尺度的特征图上检测,所以速度和结果都比 SSD 差。SSD 把主干网络提取的特征分为 6 个尺度后直接检测,原理简单且速度快。YOLO4 除主干网络外,还使用 neck 部分提取更高维度的特征,使用 CIoU、Mish 激活函数等更先进的技术,所以比 SSD 速度慢但结果更好。

  检测和分类时,Faster R-CNN 和 SSD 把特征分别输入检测网络获取位置、输入分类网络获取类别。YOLO 把特征输入一个网络,输出一个包含位置结果和分类结果的向量。比如 VOC 数据集有 20 类目标,YOLO 预测的结果是一个长度为 25 的向量:前 4 个数是位置信息,第 5 个数代表该检测结果是目标(或背景)的置信度,后 20 个数代表归为某一类的置信度。
  Faster R-CNN 的每个锚点产生 9 个候选框,YOLO 的每个锚点产生 3 个候选框,SSD 的每个锚点产生 4 或 6 个候选框。
  位置检测方法:Faster R-CNN 使用边界偏移回归算法。YOLO v1 直接预测中心位置和宽高。SSD 和 YOLO v2 开始都用边界偏移回归算法。

2. 重点概念


1. 锚点与栅格

KITTI 目标检测_深度学习 个栅格,每个栅格的大小是 KITTI 目标检测_算法_02。原图上每个栅格的中心称为锚点。
  对检测位置的网络来说,就是从每个栅格的区域内检测目标的坐标。特征图包含 KITTI 目标检测_深度学习

2. 候选框

KITTI 目标检测_算法_04

[(anc1_loc1, anc1_loc2, ..., anc1_locx), (anc2_loc1, anc2_loc2, ..., anc2_locx), ..., (ancm_loc1, ancm_loc2, ..., ancm_locx)]

  设计锚点和候选区时要考虑与网络输出的顺序问题。以 SSD 算法为例,网络输出的检测位置顺序是:尺度1、尺度2、尺度3、尺度4、尺度5、尺度6;每个尺度上的卷积结果按从左到右、从上到下排列。也就是说 8732 个检测结果是这样排列的:

尺度1上(0, 0)锚点的四个检测结果, 尺度1上的(1, 0)锚点的四个检测结果, ..., 尺度1的(38, 38锚点检测结果)

尺度2

3. 定位网络的输出

  因为候选区设定为 n 个,所以一般情况下定位网络的输出 shape = [n, 4],或者通过 reshape 等手段总是可以转换到这个维度。shape = [n, 4] 代表网络在 n 个候选区检测到的目标的位置。
  候选区也是按不同尺度产生的。对某个尺度:第一个锚点在图像左上方产生了 4 个候选框;这个尺度上,定位网络输出的维度为 KITTI 目标检测_KITTI 目标检测_05 的特征的左上角那个 KITTI 目标检测_深度学习_06

4. 坐标回归

  代表坐标的 4 个数可以是绝对坐标也可以是相对候选区的坐标,边界偏移回归算法就是针对后者的损失函数。

5. 标注区

  标注的目标区域。

6. 正负样本

  因为候选区有 n 个,所以网络最多在一张图像上检测出 n 个目标。n 一般被设置得很大,比如 SSD 算法中 n 为 8732,而通常一张图上只有几个目标,所以候选区数量远大于训练集中每张图像上的标注区个数。与标注区重合程度好的候选区是正样本,与背景重合程度好的候选区是负样本。

7. 正负样本选择

  根据候选区与标注区的重合情况,可以把候选区分为 4 类:

  1. 候选区不与标注区重叠,都是背景。
  2. 候选区与一个或多个标注区重叠,但重叠面积都很小,意味着有其它候选区可以与这一个或多个标注区更好地重叠。
  3. 候选区与某个标注区的重合程度较好,交并比大于阈值,比如 0.6。
  4. 与其它候选区相比,该候选区与某个标注区的交并比最大,意味着这个候选区不很大也不很小,与标注区重合得最好。

  这 4 类候选区中,前两类合称为负样本空间,后两类合称为正样本空间。通常负样本空间远大于正样本空间,所以一般先从正样本空间选择样本,再根据正样本的个数,从负样本空间选择一定数量的样本作为负样本。选择正样本时优先选择与标注区重合程度最好的候选区,比如第四类候选区最适合作为正样本。选择负样本时,优先选择交并比小的样本,比如第一类候选区最适合作为负样本。

8. 训练与学习

  选择正负样本的同时也为每个正负样本匹配了标注区。比如对于每个正样本,我们都能知道它对应的标注区坐标。正负样本是候选区,因为候选区与网络检测区一一对应,所以我们也就能知道网络预测的(部分)坐标的标注坐标,对两者使用 L1、L2 等回归的损失函数就可以学习了。可以看出,候选区只是起一个桥梁作用,它把网络的预测坐标与标注坐标连系起来。

3. 位置回归的损失函数


  位置回归的损失函数一直都使用 L1 损失或 smooth L1 损失,但评价时却使用 IoU 指标。因为 L1 损失和 IoU 指标并不等价,所以 L1 损失优化的方向并不一定是 IoU 增大的方向。下图是 GIoU 论文中给出的图:

  上图说明,L1 损失相同时 IoU 和 GIoU 损失还有好坏之分。下面我们来看一系列 IoU 损失。

4. 评估方法


1.精确率与召回率

KITTI 目标检测_算法_07

KITTI 目标检测_KITTI 目标检测_08;查全率,又称召回率(recall),是真正例与真实正例的比率:KITTI 目标检测_算法_09。查准率和查全率都是越大越好,但它们是一对矛盾的度量:一般来说,它们一个高时另一个往往偏低,只有在一些简单任务中,才可能使它们都很高。

2.平均精确率与平均召回率

  AP 全称 average precision,即平均精确率,相对应的平均召回率称为 AR。AP 是最常见的用于评价分类结果准确性的指标,它的计算方式是:

  1. 选择评估样本:n 张图像及标注信息。
  2. 用评估样本统计类别 x 的精确率。
  3. 类似第 2 步,统计其它类别的精确率。
  4. 对所有类别的精确率求平均值得到 mAP。

3.同时评估分类与检测

  目标检测的论文中使用的评估指标称为 AP、AP50、AP75,它们即是对分类结果的度量,也是对检测结果的度量。

  1. AP50 指的是 IoU 取 0.5 时计算出的 mAP,AP75 指的是 IoU 取 0.75 时计算出的 mAP。
  2. AP 也写成 AP[50:05:95],指的是 IoU 从 0.5 取到 0.95,步长为 0.05 计算出来的 mAP 的均值。即 AP50、AP55、…、AP95 的平均值。

5. 重难点


  平滑标签的交叉熵和困难样本问题见 focal loss。

6. 参考


  1. 边界偏移回归算法
  2. GIoU 论文
  3. CIoU 和 DIoU 论文
  4. COCO 数据集评价指标的计算,简书。