1. Abstract
YOLO的基本思想是通过多层CNN预测Bounding Box的中心(x,y)坐标及其长宽,当然也少不了类别信息,参考[1]。
YOLO-V3的结构/基本原理是什么样?有哪些重要的参数/概念?YOLO-V3的优点是什么?下文着重讲解。
2. YOLO-V3
2.1 模型结构
根据YOLO-V3原创paper[2]的内容,YOLO-V3使用了一个含有53个卷积层的CNN作为Feature Extraction。
由图中可见,这个CNN是由多组Conv+Conv+Residual的结构叠加而成的。其中Residual残差的原理见[3]。
YOLO-V3是用Darknet框架(轻量级的类似tensorflow的框架)实现的,所以这个网络也称为Darknet-53。根据作者的对比测试,该网络性能好于其他网络。
这里https://github.com/xiaochus/YOLOv3/blob/master/model/darknet53.py有一个该模型的实现代码可供参考。
2.2 多标签分类
为了实现多标签分类,模型不再使用softmax函数作为最终的分类器,而是使用logistic作为分类器,使用 binary cross-entropy作为损失函数。
2.3 多尺度预测
YOLO v3从三种不同尺度的特征图谱(不同卷积层的输出)上进行预测任务,一共进行了3次预测。详见[4]。
2.4 anchor
anchor的唯一作用就是为了计算IOU,从而来确定正负样本[6]。
yolov3-voc.cfg中这组anchor,anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326,由作者通过对VOC数据集进行KMEANS聚类得到的[7]。
3. 模型评价
作者在COCO数据集上对YOLO-V3进行了评价。
COCO is a large-scale object detection, segmentation, and captioning dataset.
在320×320的图像上,YOLO-V3运行速度达到了22.2毫秒。其与SSD一样准确,但速度快了三倍。
4. keras实现的YOLO-V3
YOLO-V3原作者是用Darknet框架(轻量级的类似tensorflow的框架)实现的,github上有keras的版本:https://github.com/qqwweee/keras-yolo3
5. 训练时间
[8]中给出了不同训练的实际,根据这些结果,用GPU估计也是2 weeks。
6. 参考
- [1] https://blog.youkuaiyun.com/ybdesire/article/details/81227424
- [2] https://pjreddie.com/media/files/papers/YOLOv3.pdf
- [3] https://blog.youkuaiyun.com/ybdesire/article/details/80232457
- [4] https://www.jianshu.com/p/3943be47fe84
- [5] http://cocodataset.org/#home
- [6] https://blog.youkuaiyun.com/u014540717/article/details/53522083
- [7] https://blog.youkuaiyun.com/cgt19910923/article/details/82154401?utm_source=blogxgwz4
- [8] https://github.com/pjreddie/darknet/issues/742