题目:You Only Look Once: Unified, Real-Time Object Detection
DOI:10.1109/CVPR.2016.91
时间:2015-6-8上传于arxiv
会议:2016-CVPR
机构:美国-华盛顿大学
作者:Joseph Redmon、Santosh Divvala、Ross Girshick
论文链接:https://arxiv.org/abs/1506.02640
工程链接:https://pjreddie.com/darknet/yolo/
video:https://www.youtube.com/watch?v=NM6lrxy0bxs
在YOLOv1提出之前,R-CNN系列算法在目标检测领域独占鳌头。R-CNN系列检测精度高,但是由于其网络结构是双阶段(two-stage)的特点,使得它的检测速度不能满足实时性,饱受诟病。为了打破这一僵局,设计一种速度更快的目标检测器是大势所趋。
YOLO 的核心思想就是把目标检测转变成一个回归问题,利用整张图作为网络的输入,仅仅经过一个神经网络,得到bounding box(边界框) 的位置及其所属的类别。
图1-YOLO检测系统:使用YOLO处理图像既简单又直接。
- 将输入图像的大小调整为448×448,
- 在图像上运行单个卷积网络,
- 根据模型的置信度阈值结果检测。
YOLO 的检测速度非常快,每秒可以处理45帧图片(448x448),63.4%mAP准确率,能够轻松地实时运行。
图像分类:输入图像,输出类别(a);
目标检测:输入图像,输出每个物体的检测框(b);
图像分割:语义分割(不区分同类物体)(c)、实例分割(区分每个物体)(d)。
在实际过程中,YOLOv1把一张图片划分为了7×7个网格,并且每个网格预测2个Box(Box1和Box2),20个类别。PASCAL VOC数据集有20个类别,所以实际上,S=7,B=2,C=20。那么网络输出的shape也就是:7×7×30。
Confidence预测、Bounding box预测、类别预测。具体参考
误差平方和的方法,图片引用 ,
关于loss,需要特别注意的是需要计算loss的部分。并不是网络的输出都算loss,具体地说:
每一项loss的计算都是L2 loss,即使是分类问题也是。所以说yolo是把分类问题转为了回归问题。
表1-PASCAL VOC 2007 数据集上的实时检测。
比较Fast YOLO检测模型的性能和速度。Fast YOLO是PASCAL VOC检测记录中最快的探测器,其精度是任何其他实时检测模型的两倍。YOLO比Fast YOLO精确10 mAP。而且YOLO实时检测的平均精度是其他实时监测系统的两倍。
mAP:均值平均精度(Mean Average Precision)。作为 object dection 中衡量检测精度的指标。
mAP计算公式为:mAP = 所有类别的平均精度求和除以所有类别。
FPS:每秒传输帧数(Frames Per Second)。FPS是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数。FPS是测量用于保存、显示动态视频的信息数量。每秒钟帧数越多,所显示的动作就会越流畅。FPS也可以理解为我们常说的“刷新率(单位为Hz)
图4-Fast R-CNN和YOLO错误比例分析
Fast R-CNN区分物体和背景的性能差,但定位性能好;
YOLO区分物体和背景的性能好,但定位性能差;
表2-Fast R-CNN和不同模型集成的效果:
和YOLO集成后的模型mAP显著提升。模型集成要“好而不同”优势互补。
表3- PASCAL VOC 2012测试集各个类别的性能和模型排行榜。
YOLO对相互靠近的物体,以及很小的群体检测效果不好。
图5-毕加索和人物艺术数据集的泛化结果。
(a)毕加索数据集行人这个类别的Pr曲线,YOLO最好。
(b)在自然图像训练后,放在艺术作品上的预测,YOLO在艺术作品上没有掉分。
图6-真实艺术作品上的预测结果:
YOLO-V1运行在来自互联网的样本艺术品和自然图像上。它基本上是准确的,唯一的错误认为一个人是一架飞机。
(1)优点:
(2)局限:
YOLO-V1的一些思考:
假设类别预测不是共享的,cell中两个predictor都有各自的类别预测,这样能否在一个cell中预测两个目标?
对于第一个问题,答案是否定的。如果一个cell要预测两个目标,那么这两个predictor要怎么分工预测这两个目标?谁负责谁?不知道,所以没办法预测。而像faster rcnn这类算法,可以根据anchor与ground truth的IOU大小来安排anchor负责预测哪个物体,所以后来yolo2也采用了anchor思想,同个cell才能预测多个目标。
为什么要预测两个bounding box?
对于第二个问题,既然我们一个cell只能预测一个目标,为什么还要预测两个bounding box(或者更多)?这个还是要从训练阶段怎么给两个predictor安排训练目标来说。在训练的时候会在线地计算每个predictor预测的bounding box和ground truth的IOU,计算出来的IOU大的那个predictor,就会负责预测这个物体,另外一个则不预测。这么做有什么好处?我的理解是,这样做的话,实际上有两个predictor来一起进行预测,然后网络会在线选择预测得好的那个predictor(也就是IOU大)来进行预测。通俗一点说,就是我找一堆人来并行地干一件事,然后我选干的最好的那个。
一个grid cell中是否有object怎么界定?
首先要明白grid cell的含义,以文中7*7为例,这个size其实就是对输入图像(假设是224*224)不断提取特征然后sample得到的(缩小了32倍),然后就是把输入图像划分成7*7个grid cell,这样输入图像中的32个像素点就对应一个grid cell。回归正题,那么我们有每个object的标注信息,也就是知道每个object的中心点坐标在输入图像的哪个位置,那么不就相当于知道了每个object的中心点坐标属于哪个grid cell了吗,而只要object的中心点坐标落在哪个grid cell中,这个object就由哪个grid cell负责预测,也就是该grid cell包含这个object。另外由于一个grid cell会预测两个bounding box,实际上只有一个bounding box是用来预测属于该grid cell的object的,因为这两个bounding box到底哪个来预测呢?答案是:和该object的ground truth的IOU值最大的bounding box。
关于“Object的中心落在哪个网格,就由哪个网格检测这个object”的理解?
在训练过程中,假设Object的中心落在网格1中,网格1产生两个bboxs,哪个bbox与该Object的ground truth(即训练集中该Object的人工标注框)的IOU大,就选取这个bbox来检测Object,也就是,把该网格预测的这个bbox作为predict box,和ground truth做运算得到loss。随着训练过程不断反馈,loss降低,网格预测的bbox越来越准确(越来越接近ground truth),最终得到一个精准的检测模型。
关于yolov1要求输入图像尺寸固定的解释?
因为yolov1的最后一层为全连接层,全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。全连接层的计算其实相当于输入的特征图数据矩阵和全连接层权值矩阵进行内积。如: z=wx+b,全连接神经网络结构一旦固定,需要学习的参数w是固定的,例如 输入图像是 28*28 = 784,w 的转置=(500,784),=> 输出矩阵的shape:(500,1),如果输入图像的大小改变,但是w的大小并不会改变,因此,无法计算。
这里没有理解是因为暗含这样一份个知识点:
卷积到全连接,所有卷积会一条接一条变成一个全连接的上层 X,比如上面的 28*28 = 784,z=wx+b,如果尺寸不固定,多出来一个 785,就没法 和 w(500,784)去相乘了,有些人就要问了,那我此时改变w为(500,785)不行嘛?也可以,但是,你训练要很多个step,甚至 epoch(pass)去更新,那,尺寸不固定,这一个step这个神经元训练到了,下一回没训练到,那就没法收敛了。
参考资料:
参考博客:参考博客
网络讲解:视频讲解
论文精读:论文精度
参考博客:参考博客
知乎分享:你真的读懂yolo了吗? - 知乎