我们上周分析了darknet53的网络结构,并使用Netron工具查看,搞清楚darknet53是一个具有252层的网络,并在13x13、26x26、52x52三个尺寸上输出3张特征图(featue maps),具体内容请参考:
Keras YOLO v3代码详解(一):darknet53网络结构分析+Netron工具
本周,我们进一步研究YOLOv3是怎样检测图片内容的,在这篇文章和下一篇文章中,我们先不研究如何训练YOLOv3的darknet53网络,而是先看一看使用已经训练好的YOLOv3模型,相应的Python程序时如何完成图片中的目标检测的。
这篇文章的主要内容是介绍YOLOv3的目标检测原理,下一篇文章详细解读目标检测的代码部分。
这篇文章的内容主要包括6部分内容,分别是:(一)检测过程、(二)anchor box、(三)中心坐标和边框、(四)目标分数、(五)类别置信度、和(六)输出处理。
(一)检测过程
YOLOv3的图像检测过程大致如下:
(1)输入一张任意大小图片,保持长宽比不变的情况下,缩放至 w 或 h 达到416,生成416x416的新图,作为网络的输入input。即网络的输入是一张416x416、3通道的RGB图片。
(2)运行网络。YOLOv3的卷积神经网络(CNN)网络的输出把图片分成NxN个网格(YOLOv3多尺度预测,输出有3层featue maps,每层feature map有NxN个网格,分别为13x13 、26 x26 和52x52),然后每个网格负责去检测那些中心点落在该格子内的目标。下图是在一个13x13的feature map中对小狗进行识别: