文章目录
一、评价指标
1.1 算法评估相关概念
- TP: 被正确地划分为正例的个数,即实际为正例且被分类器划分为正例的实例数
- FP: 被错误地划分为正例的个数,即实际为负例但被分类器划分为正例的实例数
- FN:被错误地划分为负例的个数,即实际为正例但被分类器划分为负例的实例数
- TN: 被正确地划分为负例的个数,即实际为负例且被分类器划分为负例的实例数
P(精确率):TP/(TP+FP)
R(召回率):TP/(TP+FN)。召回率越高,准确度越低
1.2 AP计算
mAP:均值平均准确率
A
P
=
∑
k
=
1
N
p
(
k
)
Δ
r
(
k
)
AP=\sum_{k=1}^Np(k)\Delta r(k)
AP=k=1∑Np(k)Δr(k)
其中
N
N
N代表测试集中所有图片的个数,
p
(
k
)
p(k)
p(k)表示能识别出k个图片的时候Precision的值,而
Δ
r
(
k
)
\Delta r(k)
Δr(k)则表示识别图片个数从k-1变化到k时(通过调整阈值)Recall值的变化情况。
二、目标检测与YOLO
2.1 目标检测问题描述
目标检测是在给定的图片中精确找到物体所在位置,并标注出物体的类别。物体的尺寸变化范围很大,摆放物体的角度,姿态不定,而且可以出现在图片的任何地方,并且物体还可以是多个类别。
2.2 目标检测基本原理
很多时候图像里有多个我们感兴趣的目标,我们不仅想知道它们的类别,还想得到它们在图像中的具体位置。在计算机视觉里,我们将这类任务称为目标检测(object detection)或物体检测。
目标检测在多个领域中被广泛使用。例如,在无人驾驶里,我们需要通过识别拍摄到的视频图像里的车辆、行人、道路和障碍的位置来规划行进线路。机器人也常通过该任务来检测感兴趣的目标。安防领域则需要检测异常目标,如歹徒或者炸弹。
2.3 目标检测预备知识
- 边界框
在目标检测里,我们通常使用边界框(bounding box)来描述目标位置。边界框是一个矩形框,可以由矩形左上角的x和y轴坐标与右下角的x和y轴坐标确定。 - 锚框
目标检测算法通常会在输入图像中采样大量的区域,然后判断这些区域中是否包含我们感兴趣的目标,并调整区域边缘从而更准确地预测目标的真实边界框(ground-truth bounding box)
2.4 滑动窗口
把目标检测化简为分类问题。利用一个窗口从左到右、从上到下滑动,可以对于葫芦娃的脸进行分类,能够识别出来脸,就做到了目标检测。基本原理示意图如下
滑动窗口的问题:
- 滑动次数太多,计算太慢
- 目标大小不同,每一个滑动位置需要用很多框
滑动窗口的改进:
- 一般图片中,大多数位置都不存在目标。
- 可以确定那些更有可能出现目标的位置,再有针对性的用CNN进行检测——两步法(Region Proposal)
- 两步法依然很费时!
- 进一步减少出现目标的位置,而且将目标分类检测和定位问题合在一个网络里——一步法(YOLO)
一步法思想:将分类问题扩展为回归+分类问题
- 有一个框里有多个,有个多个框里有一个,怎么办?
多个框里有一个目标,取目标中心点所在框(一个框里有多个,暂不能解决) - 多类目标怎么办?
使用独热编码扩展类别数 - 小目标怎么办?
使用单独网络拟合小目标,即设置多个bounding box.
2.5 YOLO网络结构
实际的检测结果是一个高维张量
网络结构包含24个卷积层和2个全连接层;其中前20个卷积层用来做预训练,后面4个是随机初始化的卷积层,和2个全连接层。
2.5.1 YOLO输入与模型处理
-
YOLO v1在PASCAL VOC数据集上进行的训练,因此输入图片为448 × 448 × 3。 实际中如为其它尺寸,需要resize或切割成要求尺寸
-
YOLO模型处理
将图片分割为 S 2 S^2 S2个grid(𝑆 = 7),每个grid cell的大小都是相等的
每个格子都可以检测是否包含目标
OLO v1中,每个格子只能检测一种物体(但可以不同大小)
2.5.2 YOLO网络输出
- 输出是一个7 × 7 × 30的张量。对应7 × 7个cell
- 每个cell对应2个包围框(boundingbox, bb),预测不同大小和宽高比,对应检测不同目标。每个bb有5个分量,分别是物体的中心位置(𝑥, 𝑦)和它的高(ℎ) 和宽 (𝑤) ,以及这次预测的置信度。
图片被分成了49个框,每个框预测2个bb,因此上面的图中有98个bb