官方网站C语言版本:https://pjreddie.com/darknet/yolov1/
tensorflow版本的代码下载: https://github.com/hizhangp/yolo_tensorflow
论文: http://arxiv.org/abs/1506.02640
目录
一、YOLO介绍
二、YOLOv1的结构
三、YOLOV1原理
(一)基本核心思想
(二)网络结构
(三)输出7x7的理解
(四)输出维度30的理解
(五)一次预测98个框
(六)对98个预测框处理
(七)回归坐标xywh
(八)训练样本标签
四、总结
一、YOLO介绍
YOLO的全称叫做“You Only Look Once”,简单来说,YOLO可以做到将一张图片输入,直接输出最终结果,包括框和框内物体的名称及score(得分)。
相比RCNN系列的算法(提取候选框+分类回归),YOLO仅仅一个网络就能完成检测框和分类任务,所以说它是单阶段目标检测算法;
YOLO主要特点是:
YOLO V1是单阶段one stage体系开创者,一次卷积可得结果。
如下:
YOLOv1是端到端进行训练,因此YOLOv1只有一条单一的网络分支。
步骤:
如下图:
如下图:
输入图像为448x448,输出特征图大小为7x7x30;
特征图7x7映射至原图,即图像被分成7×7个网格(grid cell);映射关系如下图:
如果GT物体的中心落在某个网格中,则这个网格就负责预测这个物体;
(1)每个网格使用B(B=2)个Bbox进行回归预测,共产生5个值;
A.置信度confidence,包含物体的可能性大小;
B.回归坐标(x,y,w,h);
(2)每个网格还要预测C个类别概率,以判断当前cell属于哪个类别C;因此1个网格的输出维度是(5×B+C),S×S个网格就输出就是S × S×(5×B+C)。
论文:B=2,VOC有20个类别,那么网络输出维度就是5x2+20=30。
如下图:
(1)图像被划分成7×7,可知产生的特征图大小为7×7,因此S=7;
(2)真实的人物体中心落在黄色网格,使用黄色网格预测分类人;黄色网格产生了2个蓝色的Bbox用来回归预测,因此B=2;
(3)每个Bbox的检测结果会包含有关人的置信度和回归坐标信息;
(4)黄色网格会使用softmax进行分类预测,如果使用VOC数据集C=20。
最终,根据公式可得输出维度5×B+C=30,即输出特征图7×7×30;预测框的个数7×7×2=98。
使用NMS算法对预测框进行处理,最后保留最优的预测框:
如下图:
实际Bbox框的预测结果包含(xc, yc ,wbox,ℎbox):
回归坐标的目的是将坐标映射到0-1之间,方便计算损失;有如下要求
训练样本的标签理解:
Yolov1是单目标检测的开创者,相比较RCNN等两阶段系列,预测速度上有天然的优势,就是检测速度快。但是也存在许多缺点: