YOLO系列(三)——YOLO v3
文章目录
前言
该系列为博主自主学习YOLO系列的自我总结。本篇是对YOLOv3进行一个总结和分析。本文主要从以下五个改进点进行分析和总结:Bounding Box Prediction、Class Prediction、Predictions Across Scales、 Feature Extractor、Training。
一、Bounding Box Prediction
YOLO v3的Bounding Box由YOLOV2又做出了更好的改进。在yolo_v2和yolo_v3中,都采用了对图像中的object采用k-means聚类。feature map中的每一个cell都会预测3个边界框(bounding box) ,每个bounding box都会预测三个东西:
(1)每个框的位置(4个值,中心坐标t_x和t_y,框的高度b_h和宽度b_w)
(2)一个objectness score
(3)N个类别
第二点的objectness score是YOLOv3的改进点,这个score是由logistic回归对anchor box进行计算得到的。如果当anchor box先验框是最优解时,score=1,先验框保留;反之,score=0,先验框剔除。判断是否为最优解可依据IOU的值。这一步骤是在predict之前,可以去掉多余的anchor boxes,减少计算量。
二、Class Prediction & Loss Function
在分类预测的训练过程中,采用的损失函数是二分类交叉熵损失函数。不采用Softmax的原因是很多目标存在重叠的类别标签,例如秋田犬既是秋田犬也是狗。Sotfmax只会输出预测值最大的那一个类别。多标签方法可以对数据进行更好的建模。
三、Predictions Across Scales
多尺寸输出预测算是YOLOv3的一个重大改进。
上图是YOLOv3的网络结构图。从图中可以看出y1、y2、y3代表着3种不同尺度的输出:13×13、26×26、52×52,深度都是255。 255是从*[3 ∗ (4 + 1 + 80)]=255*得来的。其中,3表示三种不同的尺寸输出,4表示预测框的坐标和宽高,1是置信度,80是类别个数。
四、Feature Extractor
在特征提取方面,YOLOv3采用的Darknet-53,包含53个卷积层。因为输出是3种不同尺寸的输出,所以在网络中涉及到网络层的拼接,属于残差结构。YOLOv3网络的残差结构中没有使用全连接层,最后采用的全连接只是为了分类。同时为了降低池化带来的梯度负面效果,也没有用池化层(反向传播中,池化不可导),而降采样是通过改变卷积层的stride实现的。
为了加强算法对小目标检测的精确度,YOLOv3中采用类似FPN的upsample和融合做法,最后融合了3个scale,分别是13×13、26×26和52×52,在多个scale的feature map上做检测。