YOLOV1
核心思想:把目标检测简化为回归问题,从像素出发得框和分类概率;以整张图片进行输入,在输出层对框的位置和类别进行回归。
实现:
1.整张图像会被分为NxN个网格,若某个目标的中心在在网格内,则此网格对目标进行预测。
2.每个网格预测B个框的位置信息和置信度,一个框对应四个位置信息和一个置信度值(预测框和标签框的IOU);位置信息包括x,y,h,w;其中x和y代表中心坐标,h和w代表框的高和宽。
3.每个网格预测一个类别信息为C,所以每个网格要预测B个框还有C个类别信息。所以输出是S x S x (5*B+C)的一个张量。(张量实际上就是一个多维数组)
流程概括:
(1)给个一个输入图像,将图像划分成7*7的网格。
(2)对于每个网格,我们都预测2个边框(包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率)。
(3)根据上一步可以预测出7*7*2个目标窗口,然后根据阈值去除可能性比较低的目标窗口,最后NMS去除冗余窗口即可。
网络结构:
GoogLeNet 作为神经网络主干,24层卷积层加上两层全连接层
损失函数:误差平方和函数
存在的问题:
(1)8维的定位误差和20维的分类误差同等重要显然是不合理的;
(2)如果一个网格中没有目标(一幅图中这种网格很多),那么就会将这些网格中的框的置信度变为0,相比于较少的有目标的网格,这会导致网络不稳定甚至发散。
解决方法:
(1)重点是8维的坐标预测,给这些损失前面赋予更大的损失权重。
(2)对没有目标的框的置信度损失,赋予小的损失权重。
(3)有目标的框的置信度损失和类别的损失的损失权重正常取1。
损失函数中:
(1)只有当某个网格中有目标的时候才对分类误差进行惩罚。
(2)只有当某个框预测对某个ground truth box负责的时候,才会对box的coordinate error进行惩罚,而对哪个ground truth box负责就看其预测值和ground truth box的IoU是不是在那个cell的所有box中最大。
优点:
1.快速,简单.
2.背景误检率低。
3.通用性强。
缺点:
1.由于输出层为全连接层,因此在检测时,YOLO训练模型只支持与训练图像相同的输入分辨率。
2.虽然每个格子可以预测B个bounding box,但是最终只选择只选择IOU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体。当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。这是YOLO方法的一个缺陷。
3.YOLO loss函数中,大物体IOU误差和小物体IOU误差对网络训练中loss贡献值接近(虽然采用求平方根方式,但没有根本解决问题)。因此,对于小物体,小的IOU误差也会对网络优化过程造成很大的影响,从而降低了物体检测的定位准确性。
YOLOV2
(补充点):
FPS:FPS是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数。FPS也可以理解为我们常说的“刷新率(单位为Hz)”;f就是英文单词Frame(画面、帧),p就是Per(每),s就是Second(秒)。用中文表达就是多少帧每秒,或每秒多少帧。
mAP 是 Mean Average Precision 的缩写,即 平均AP值。作为 目标检测 中衡量检测精度的指标
mAP = 所有类别的平均精度求和除以所有类别