论文题目:YOLOv3: An Incremental Improvement(翻译过来就是一个渐进式的改进)
论文下载地址: https://arxiv.org/abs/1804.02767
在学习yolov3的时候,我们先假设我们已经对神经网络有所了解,至少应该学过alexnet和vgg这些网络,这样的话,我们的讲解才能放清晰透彻。
在320 × 320的情况下,YOLOv3在28.2 mAP下运行时间为22 ms,精度与SSD相当,但速度快3倍,这是yolov3的作者在摘要中写的,意思是在输入为320*320图片的情况下,yoloV3的运行速度是SSD的3倍,精度也并不会比SSD差。
目标检测作为一个比图像识别更复杂的算法,我们要做的不仅仅是将图像识别出来,还要将目标的位置定位出来,也就是我们不仅要识别目标的种类,还有检测目标的位置,这也就是为啥目标检测相对复杂一点的原因,在yolo系列代码中,相较于yolo1和yolo2,yolo3的网络结构是有巨大的差别的,这也是为啥在yolov3出来之后,官方就下架了yolo1和yolo2的代码,而之后的yolo4和yolo5等等都是在yolo3的基础上加入了一些比较新的trick融合而成,因此我们要学习yolo系列的目标检测算法,yolo3一定是我们需要第一个学习的。
这是在COCO数据集上,yolo v3相较于当时的一些其他的目标检测算法的指标对比图,从中我们可以清晰的看到不论是在mAP还是time上,yolov3都明显由于当时的一些其他目标检测算法。
首先,我门先看一下yolov3的网络结构,在这里如果觉得难以理解的话可以把他当成一个类似于alexnet和vgg16的简单神经网络结构,事实上也确实是如此,因为目标检测算法和普通的卷积神经分类网络一样都是输入图片进行训练,然后预测,就是不同在于yolo在将图像打入网络进行训练之前需要进行一系列复杂的处理,毕竟我们不光要对目标进行识别,还要定位检测。yolov3的创新之处在于内部使用了借鉴Resnet的残差网络结构进行跳跃链接(具体的想了解的可以读源码,不知道什么是残差借鉴的可以先学习一下Resnet)且,且最后的输出是分成了三个不同的特征层进行输出,最后进行特征下采样,
最后三层三个输出,利用三个特征层进行边框的预测。