论文下载:http://arxiv.org/abs/1506.02640
代码下载:https://github.com/pjreddie/darknet
核心思想:将整张图片作为网络的输入(类似于Faster-RCNN),直接在输出层对BBox的位置和类别进行回归。
目标检测之YOLO算法:YOLOv1,YOLOv2,YOLOv3,TinyYOLO,YOLOv4,YOLOv5,YOLObile,YOLOF详解:
简单的概括就是:
(1) 给个一个输入图像,首先将图像划分成7*7的网格
(2) 对于每个网格,我们都预测2个边框(包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率)
(3) 根据上一步可以预测出7*7*2个目标窗口,然后根据阈值去除可能性比较低的目标窗口,最后NMS去除冗余窗口即可
在实现中,最主要的就是怎么设计损失函数,让这个三个方面得到很好的平衡。作者简单粗暴的全部采用了sum-squared error loss来做这件事。
这种做法存在以下几个问题:
解决办法:
对不同大小的box预测中,相比于大box预测偏一点,小box预测偏一点肯定更不能被忍受的。而sum-square error loss中对同样的偏移loss是一样。
为了缓和这个问题,作者用了一个比较取巧的办法,就是将box的width和height取平方根代替原本的height和width。这个参考下面的图很容易理解,小box的横轴值较小,发生偏移时,反应到y轴上相比大box要大。(也是个近似逼近方式)
一个网格预测多个box,希望的是每个box predictor专门负责预测某个object。具体做法就是看当前预测的box与ground truth box中哪个IoU大,就负责哪个。这种做法称作box predictor的specialization。
最后整个的损失函数如下所示:
这个损失函数中:
其他细节,例如激活函数使用leak RELU,模型用ImageNet预训练,模型使用了Dropout(p=0.5)和数据增强来避免过拟合的问题,使用NMS来去除重复的框提高了2%-3%的mAP等等。
如下图所示,YOLOV1与其他实时检测系统的实验结果的对比(PASCAL VOC 2007),YOLOV1在检测的速度和精度方面效果都不错。
PASCAL VOC 2007如下图所示,错误分析,Fast R-CNN vs. YOLOV1:YOLOV1很难正确地定位目标,在YOLOV1的错误中,定位错误所占的比重超过了其它所有错误的总和。Fast R-CNN的定位错误要少得多,但背景错误要多得多。Fast R-CNN预测背景检测的可能性几乎是YOLOV1的三倍。
Fast R-CNN vs. YOLOV1如下图所示,论文通过使用YOLOV1来消除来自Fast R-CNN的背景检测,得到了显著的性能提升,当与YOLOV1相结合时,其mAP增长3.2%至75.0%。不幸的是,这种组合并不能从YOLOV1的速度中受益。
模型结合如下图所示,在VOC 2012测试中,YOLOV1的得分为57.9%。这比目前的技术水平要低,更接近使用VGG-16的原始R-CNN。与最接近的竞争对手相比,YOLOV1在检测小物体时比较困难。与YOLO结合后,Fast R-CNN提高了2.3%(Fast R-CNN + YOLO)。
YOLOV1在PASCAL VOC 2012的实验结果如下图所示,在Picasso和People-Art 数据集上,YOLOV1与其他检测方法的性能比较。针对于不同的数据集,R-CNN的mAP下降的非常快,而YOLO和DPM的mAP下降的比较缓慢。与DPM一样,YOLOV1为目标的大小和形状、目标之间的关系以及目标通常出现的位置建模。艺术品和自然图像在像素级别上有很大的不同,但它们在目标的大小和形状方面是相似的,因此YOLOV1仍然可以预测良好的边界框和检测。
在Picasso和People-Art 数据集上,YOLOV1与其他检测方法的性能比较YOLOV1在艺术品和自然图像上的检测结果如下,演示源代码:
YOLOV1在艺术品和自然图像上的检测结果Reference:https://zhuanlan.zhihu.com/p/362758477