前言
YOLO的提出是相对Faster RCNN的改进,Faster RCNN的速度是大概1秒7到8张,一般视频播放1s有20多帧吧,所以Faster RCNN不能达到完全的实时,而YOLO的速度可以达到每秒45张图。速度的提升主要得益于一个网络进行box和cls的预测,而Faster RCNN是两个网络分别预测box和cls。不过从准确率上来说,YOLO是不如Faster RCNN的,但是他提升图片定位速度的方式还是值得学习的。
1.介绍
比较早的时候是用slide window的方式进行图片定位,这种方式速度慢而且不准确,因为我们需要用各种形状的box框在图片中滑动然后为框内的每个物体打分。
后来的尝试是RCNN,RCNN需要用selective search先生成预选框,然后用预选框进行训练,会生成相对预选框的矫正值和框中的类别打分。这种网络很难优化,因为所有的网络都是分开的。
YOLO的物体检测只有一个回归模型,会预测出坐标和类别打分,所以叫做you only look once.
YOLO的模型总结下来就是上图的三个步骤,非常直观明了。相对其他网络的优势如下:
- 速度快,并且相比其他实时网络准确率两倍以上(注意,Faster RCNN不算实时网络),可以实时处理webcam的数据
- YOLO是整张图片直接参与网络,相比一些用局部进行网络计算而言,更有全局观,所以对背景识别的错误率更低
- YOLO范化能力好,用普通图片进行训练后,在艺术图片上也有不错的效果
YOLO的准确率确实不是最好的,尤其在识别小物体上不太好,最后作者也会给出一些实际操作中的tradeoff。
2.统一检测
YOLO将其他检测系统中各个分散的模块合并成了一个神经网络。对这个网络输入整张图片就可以得到图片的预测框和框中的物体,能够实现端到端的训练,在准确率不错的情况下达到实时检测的目的。
我们的系统会将输入的图片分成个格子,如果某个物体的中心落在了这个格子中,那么这个格子就代表这个检测物体。
没一个格子会预测个bounding boxes和每个box的confidence score,confidence score代表这个模型有多少信心这个格子包含这个物体,confidence = ,如果没有物体在这个格子里面,那么confidence应该是0.另外我们希望confidence score等于预测框和真实框之间的IOU。如果相等,就意味着了。
备注:为何要有多个bounding box应该是考虑到可能有多个物体的中心点落在了同一个格子中的情况。
每个bounding box有x,y,w,h和confidence这5个信息,x和y代表这个box的中心相对它绑定的格子的中心的偏移,w和h是相对整张图片的一个相对值,confidence代表IOU。
每个格子也会预测这个格子包含C类物体中每种物体的可能性,用表示。无论有多少个bounding box这个预测也只会有一套。
测试时会将每个bounding box的和这个格子的每个class的相乘。
这个公式就表示出来了每个box对每个class的confidence score
如果,,,那么最后预测出来的就是个tensor。
2.1网络设计
设计的网络是一个卷积神经网络,前面的卷积层是为了提取特征,后面的全链接层进行预测。
有24个卷积层加上2个全链接层,主要用1x1和3x3的卷积因子,网络模型看下图
作者还提出了一个Fast YOLO的模型,就是用24层卷积换成9层卷积,其他参数基本一致。是一个更小的网络模型,所以速度上会更快。
2.2 训练
作者先用ImageNet 1000类的数据,使用上图中的前20层加上一个pooling层和全连接层,达到了88%的准确率。然后将训练好的前20层网络,后面连接4个卷积层2个全连接层,最后预测box坐标和class概率。最后一层用线性激活,其他层用Leaky RELU(0.1).
Loss是差的平方和,因为很容易优化。另外因为有很多box中的confidence会为0, 所以作者用两个超参数来平衡confidence为0和不为0的预测值。,。代表第个格子,代表第个格子中的第个bounding box。
作者训练了135个epoch,batchsize是64,momentum是0.9,weight decay是0.0005。在开始的epochs里面,慢慢提升learning rate从到,然后用训练75个epoch,然后训练30个epoch,最后训练30个epoch。
为了方式overfitting,第一层全连接使用了dropout,比例为0.5,另外也使用了数据增强。
2.3 Inference
YOLO在测试的时候速度非常快,因为只需要计算一个网络。在P ASCAL VOC数据集上平均每张图片会预测出98个bounding box,然后用NMS原则来筛选合并box。
2.4 YOLO的局限性
在很小的物体上准确率不高,如果物体的区域很小,那么很可能很多box都跟它的IOU会很大,这样会没有约束力,导致准确率降低。
3.和其他定位系统比较
总的来说其他系统大都不是用一个单一的网络老解决问题的,一般都会分成很多个步骤,可能优化的只是这些步骤中的某一步,最终的速度不会太快。
4.实验
这部分主要看一下YOLO在VOC2007和VOC2012上的表现,另外也尝试结合利用YOLO良好的区分背景的能力将YOLO和RCNN系列结合。
4.1 和其他实时系统比较
可以看到YOLO在速度和准确率的tradeoff上表现还是非常不错的。
4.2 VOC2007 错误分析
从错误分析上可以看出YOLO主要是box的定位不准确,但是对背景的区分错误率比Fast RCNN低。
4.3 Fast RCNN与YOLO结合
因为YOLO在区分背景时错误率更小,所以将YOLO与Fast RCNN结合来提升performance
对Fast RCNN预测出来的每一个bounding box,用YOLO去检查是否预测出了类似的box,如果YOLO也有类似的box,那么根据YOLO预测出来box的可能性对这个box进行修正和提升。
可以看到结合后准确率提升不少。
4.4 VOC2012的结果
像bottle, sheep和tv/monitor YOLO比RCNN低了大概8到10个点的准确率,然而像cat类别,YOLO的准确率比RCNN要高。
4.5 范化,在艺术作品中对人的识别
5 非数据集的识别效果
6.结论
YOLO通过一个网络端到端的训练实现了box和cls的预测。在速度达到实时的情况下还能保证不错的准确率,确实是个成功的模型。
YOLO的论文写的非常简单,很多细节应该还是要在代码中查找,原作者有一个很酷的网站(darknet)放着他的源代码,现在已经更新到YOLO3了。有兴趣可以看一下代码,YOLO的源代码我就不仔细阅读了,可能后面看了YOLO2或者3的论文会考虑分析一下代码。
以上为所有内容,感谢阅读,欢迎留言。