YOLO作为最早的One-stage算法框架,实现了保持较好性能的前提下保证了模型较快的速度和轻便的性能。从Yolov1->Yolov3,三个版本的迭代也可以很好地观察作者进行性能提升的思路和方法。
作者信息:Joseph Redmon,华盛顿大学phD,YOLOv1-v3作者,相关研究还有Xnor-net等。
YOLO官网
YOLOv1Paper
YOLOv2Paper
YOLOv3paper
YOLOv1设计的出发点建立于人本身对图片的认知本身快速与准确的:只需要对整张图片扫描一次即可快速获取物体的类别与位置信息:You Only Look Once。其他主流物体检测算法,如DPM(defaormable parts models)通过sliding windows的方式,通过在每个spaced local位置设置分类器实现检测任务。RCNN系列通过two-stage的方式,且RCNN和Fast RCNN是无法实现端到端训练的。
YOLOv1首次通过One-Stage的方式实现Object Detection的任务,将整个任务作为bounding box的位置和类别的回归任务。下图可以简单描述YOLOv1的工作原理,YOLOV1通过直接在全图上利用卷积网络实现位置和类别的预测。这种方案的优势在于:速度快,不需要复杂的pipeline设计,标准的YOLO检测速度可以达到45FPS,Fast YOLO可以达到155FPS,当时的YOLO的检测mAP可以达到其他实时系统的两倍以上;YOLO能够更好地利用global的信息,减少背景错误;YOLO的泛化性更强。
YOLOv1:
YOLO将图片分为S*S的栅格,每个栅格对中心落在栅格内部的物体负责。每个栅格会预测B个bounding box,confidence信息和位置信息:x,y,w,h。其中confidence信息表示为条件概率的形式:confidence=Pr(Object)*IOU,即如果bounding box预测无物体,则Pr(object)=0,则confidence为0,如果预测有物体,则confidence为预测box和gt的IOU。其中,x,y表示预测的bounding box的中心与栅格边界的相对位置,w,h表示为bounding box的width,height相对于整幅图像的比例。另外每个grid cell还会预测c类的conditional confidence:Pr(Classi|Object),infer过程中通过Pr(Classi|Object)*Pr(Object)*IOU来作为bounding box的类预测confidence。注意这里的class confidence只针对c个类,而bounding box的confidence则针对每个box。
YOLO的网络借鉴了GoogleNet,通过1*1和3*3的卷积层替代了Inception结构。标准的YOLO网络有24层卷积层,后接两层全连接层,而Fast Yolo则只有9层卷积层。YOLO的输出tensor大小为7*7*30。与prediction的siz相匹配。
先在ImageNet 1000-class分类任务上的进行网络的Pretrain,使用上述网络中的前20层卷积层, 后接一个average-pooling层和一个全连接层。将Pretrain得到的前20层全连接层作为Detection网络的前置网络,并加入后续的4层卷积层以及两个全连接层,最后层预测得到class probility以及bounding box coordinates。其中w,h,x,y需要归一化到0-1,以保证w,h小于图片尺寸,且位置在特定的grid cell边界范围内。
训练过程中,可能存在多个box预测同一个物体,则只取IOU最大的predictor作最终的预测,最终的loss设计如下:
YOLOv1的缺陷也是比较明显的:
YOLOv2(YOLO9000),从三个维度进行YOLOv1的改进:Better,Faster,Stronger。其中,Stronger主要利用分类结果进行训练,从而能够检测更多类别。本文重点关注前两项优化内容。YOLOv1的两个主要缺陷为:大量的localization error和相对proposal-based方案的较低的recall。常见的提高detector的性能的方案是采用更大,更深的网络结构,但是这会影响模型的速度。所以作者没有单纯地加宽加深网络结构,而是采取了更好的representation,而让网络更好的学习(主要是Box和对应loss的设计),同时也采用了一系列tricks以及修掉原本YOLOv1本身存在的一些问题。
作者的改进方案如下:
该方案的问题是偏移的最大值与anchor box的大小有关,没有其他约束,导致center点的位置有可能到图像中的任意位置,导致模型训练不稳定。所以作者沿用原先YOLO的预测位置的方式:
通过Dimension Clusters和Direct location prediction的方式,提高了anchor-version 5% mAP,示意图如下:
YOLOv1->YOLOv2改进:
PASCALVOC2007:实现了速度和性能良好的trade-off:
PASCALVOC2012性能比较:性能基本一致,但是YOLOv2更快:
COCO性能比较:COCO小物体更多,IOU=0.5下,性能与Faster-RCNN和SSD300基本相当,但是速度更快:
原先YOLOv2的没有结合多尺度特征进行预测,pass-through的方案虽然实现了浅层特征的融合,但是也改变了特征的空间分布。YOLOv2的backbone-darknet19还有提升的空间。
YOLOv3的改进更多地借鉴了诸如SSD,Faster-rcnn,FPN的优点,主要改进如下:
COCO数据集上的性能:可见YOLOv3的性能与SSD基本一致,但是比SSD快3倍,低于RetinaNet,但是RetinaNet的infer时间为YOLOv3的3.8倍,且0.5IOU下两者的性能比较接近。