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. 锚点与栅格
输入图像 [3, 224, 224] 经过卷积得到 [24, 7, 7] 的特征图。从这个特征图来看,我们相当于把输入图像划分成
7
×
7
7 \times 7
7×7 个栅格,每个栅格的大小是
32
×
32
32 \times 32
32×32。原图上每个栅格的中心称为锚点。
对检测位置的网络来说,就是从每个栅格的区域内检测目标的坐标。特征图包含
7
×
7
7 \times 7
7×7 个长度为 24 的向量,每个长度为 24 的向量正是从对应栅格提取的特征,所以这 24 个数就是从某个栅格中检测到的坐标。因为 4 个数可以确定一个矩形的位置,所以这 24 个数可以检测 6 个目标,相当于我们在每个栅格以锚点为中心产生 6 个候选框。
2. 候选框
候选框就是一系列矩形的坐标。一张图上有 m 个锚点,每个锚点产生 x 个候选区,下面就是这 n = m × x n = m \times x n=m×x 个候选区的存放形式。小括号只起分割作用,表示一个锚点产生的候选区,实际存放时不需要。其中 anc1_loc1 代表 4 个坐标,所以候选区的 shape = [n, 4]。锚点按坐标从左向右、从上到下排列,候选区自然也是这样排列,比如前 x 个候选区在图像左上角,后 x 个候选区在图像右下角。
[(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 个候选框;这个尺度上,定位网络输出的维度为
n
×
n
×
16
n \times n \times 16
n×n×16 的特征的左上角那个
1
×
1
×
16
1 \times 1 \times 16
1×1×16 的检测结果也代表从图像左上方检测的结果。而且锚点按坐标从左向右、从上向下排列,卷积操作从左向右、从上到下进行,所以网络的检测区域与候选区一一对应。当我们知道了候选区与标注区的匹配关系,也就知道了网络的定位结果与标注区的匹配关系。
4. 坐标回归
代表坐标的 4 个数可以是绝对坐标也可以是相对候选区的坐标,边界偏移回归算法就是针对后者的损失函数。
5. 标注区
标注的目标区域。
6. 正负样本
因为候选区有 n 个,所以网络最多在一张图像上检测出 n 个目标。n 一般被设置得很大,比如 SSD 算法中 n 为 8732,而通常一张图上只有几个目标,所以候选区数量远大于训练集中每张图像上的标注区个数。与标注区重合程度好的候选区是正样本,与背景重合程度好的候选区是负样本。
7. 正负样本选择
根据候选区与标注区的重合情况,可以把候选区分为 4 类:
- 候选区不与标注区重叠,都是背景。
- 候选区与一个或多个标注区重叠,但重叠面积都很小,意味着有其它候选区可以与这一个或多个标注区更好地重叠。
- 候选区与某个标注区的重合程度较好,交并比大于阈值,比如 0.6。
- 与其它候选区相比,该候选区与某个标注区的交并比最大,意味着这个候选区不很大也不很小,与标注区重合得最好。
这 4 类候选区中,前两类合称为负样本空间,后两类合称为正样本空间。通常负样本空间远大于正样本空间,所以一般先从正样本空间选择样本,再根据正样本的个数,从负样本空间选择一定数量的样本作为负样本。选择正样本时优先选择与标注区重合程度最好的候选区,比如第四类候选区最适合作为正样本。选择负样本时,优先选择交并比小的样本,比如第一类候选区最适合作为负样本。
8. 训练与学习
选择正负样本的同时也为每个正负样本匹配了标注区。比如对于每个正样本,我们都能知道它对应的标注区坐标。正负样本是候选区,因为候选区与网络检测区一一对应,所以我们也就能知道网络预测的(部分)坐标的标注坐标,对两者使用 L1、L2 等回归的损失函数就可以学习了。可以看出,候选区只是起一个桥梁作用,它把网络的预测坐标与标注坐标连系起来。
3. 位置回归的损失函数
位置回归的损失函数一直都使用 L1 损失或 smooth L1 损失,但评价时却使用 IoU 指标。因为 L1 损失和 IoU 指标并不等价,所以 L1 损失优化的方向并不一定是 IoU 增大的方向。下图是 GIoU 论文中给出的图:
上图说明,L1 损失相同时 IoU 和 GIoU 损失还有好坏之分。下面我们来看一系列 IoU 损失。
4. 评估方法
1.精确率与召回率
查准率,又称精确率(precision),是真正例与预测正例的比率: P = T P ÷ ( T P + F P ) P = TP \div (TP + FP) P=TP÷(TP+FP);查全率,又称召回率(recall),是真正例与真实正例的比率: R = T P ÷ ( T P + F N ) R = TP \div (TP + FN) R=TP÷(TP+FN)。查准率和查全率都是越大越好,但它们是一对矛盾的度量:一般来说,它们一个高时另一个往往偏低,只有在一些简单任务中,才可能使它们都很高。
2.平均精确率与平均召回率
AP 全称 average precision,即平均精确率,相对应的平均召回率称为 AR。AP 是最常见的用于评价分类结果准确性的指标,它的计算方式是:
- 选择评估样本:n 张图像及标注信息。
- 用评估样本统计类别 x 的精确率。
- 类似第 2 步,统计其它类别的精确率。
- 对所有类别的精确率求平均值得到 mAP。
3.同时评估分类与检测
目标检测的论文中使用的评估指标称为 AP、AP50、AP75,它们即是对分类结果的度量,也是对检测结果的度量。
- AP50 指的是 IoU 取 0.5 时计算出的 mAP,AP75 指的是 IoU 取 0.75 时计算出的 mAP。
- AP 也写成 AP[50:05:95],指的是 IoU 从 0.5 取到 0.95,步长为 0.05 计算出来的 mAP 的均值。即 AP50、AP55、…、AP95 的平均值。
5. 重难点
平滑标签的交叉熵和困难样本问题见 focal loss。