system: [SYSTEM]

user: 2. YOLOv3的多目标检测算法 YOLO系列目标检测算法由Joseph Redmon等人 [ 11 ] [ 12 ] 提出，在此之前基于滑动窗口的目标检测算法[ 12 ]需要重复遍历图像造成计算冗余耗费计算资源，基于区域提出的方法 [ 13 ] [ 14 ] [ 15 ] 将目标预测框生成器与目标分类器解耦合，分别对预测框生成网络和分类器网络进行训练，加大了优化难度，虽然具有很高的检测精度，由于其网络复杂特性，在实时性要求高的场景下效果较差。YOLO系列利用单一神经网络，基于网格的思想将目标检测任务视作空间分离的边界框和相关的类概率的回归问题，在实时性要求高的场景下可以更好的做到实时目标检测，同时单一神经网络的模型优化也较为容易。 YOLOv3模型由两部分组成：主干特征提取网络和利用主干特征提取网络所提取的特征进行预测的部分。 2.1. 主干特征提取网络 YOLOv3以Darknet-53作为主干特征提取网络，Darknet-53中主要使用了残差卷积 [ 16 ] [ 17 ]。在Darknet-53的残差块中首先利用大小3 × 3、步长为2的卷积核做卷积运算，保存其结果X后依次进行1 × 1和3 × 3的卷积操作，再加上之前的结果X作为该残差块最后的输出。残差卷积的使用可以缓解深度学习中梯度消失问题，用于训练更深层的网络。残差块示意图如图1。 在Darknet-53中，每一次卷积操作后都使用了BatchNormalizaiton标准化与LeakyReLU激活函数缓解梯度消失问题，用于训练更深层的神经网络，其中LeakyReLU函数如公式(1)。 y i = { x i         i f   x i ≥ 0 x i a i         i f   x i < 0 (1) 如图2，经由特征提取网络对输入数据进行特征提取，最后从Darknet-53中获取最后三个残差块的输出用于后续预测过程。 2.2. 从Darknet-53所得特征获取预测结果 在YOLOv3中，利用Darknet-53最后三个残差块所提取特征进行目标检测，三个特征层分别进行五次卷积操作，其中最后两层所获取特征既用于预测，同时通过上采样进行特征层扩张后与上一残差块所提取特征相加，共同用于上一层的预测，对特征提取网络所提取特征进行了有效利用。最后网络三层所输出网格大小从上到下依次为52 × 52、26 × 26、13 × 13，利用特征金字塔由粗到精的思想提高模型检测的鲁棒性。 模型最后根据所获取的预测结果进行解码操作。在三个特征层获取的结果对应每张图分割为52 × 52、26 × 26、13 × 13的网格，每个网格负责一个区域的预测。根据每个区域预测所得结果，即目标中心坐标x、y，预测框宽高w、h，判断是否存在目标以及各个类别置信度，可得图像中目标预测框和类别置信度。 图1. 残差卷积示意图 图2. YOLOv3模型示意图 YOLO中对同一目标会产生多个候选框，候选框之间可能存在相互重叠的情况，如图3(左)。利用非极大值抑制(Non-Maximum Suppression， NMS)算法找到最佳目标边界框，消除冗余(取置信度最高的目标边界框)。步骤如下： 1) 根据置信度得分进行排序，选择置信度最高的边界框添加到最终输出列表中，将其从边界框列表删除； 2) 计算所有边界框的面积，计算置信度最高的边界框与其他边界框的交并比(Intersection-over-Union， IoU)； 3) 删除交并比大于阈值的边界框； 4) 重复上述过程，直到边界框列表为空。 在获取最终结果后在原图上绘制预测框和置信度，结果如图3(右)。 图3. NMS前(左图)、后(右图)候选框结果 2.3. 损失函数 YOLO-v3中，误差值由三个部分组成，分别为目标预测框误差lbox，目标置信度误差lobj以及类别置信度误差lcls。其中目标预测框误差使用MSELoss(均方方差损失)，目标置信度误差与类别置信度误差使用BCELoss (交叉熵损失)。 其中MSE (Mean-Squared Error) Loss的具体公式计算如公式(2)： MSE Loss ( y ′ i ， y i ) = 1 n ∑ i = 1 n ( y ′ i − y i ) 2 (2) BCE (Binary-Cross Entropy) Loss的具体公式计算如公式(3)： BCELoss ( C ′ i ， C i ) = − C ′ i log ( C i ) − ( 1 − C ′ i ) log ( 1 − C i ) (3) 根据MSE Loss和BCE Loss可得目标预测框误差lbox、目标置信度误差lobj和类别置信度误差lcls如公式(4)~(6)： l b o x = λ c o o r d ∑ i = 0 S × S ∑ j = 0 B I i j o b j ( 2 − w i × h i ) [ ( x i − x ′ i ) 2 + ( y i − y ′ i ) 2 ]                   + λ c o o r d ∑ i = 0 S × S ∑ j = 0 B I i j o b j ( 2 − w i × h i ) [ ( w i − w ′ i ) 2 + ( h i − h ′ i ) 2 ] (4) l o b j = ∑ i = 0 S × S ∑ j = 0 B I i j o b j [ C ′ i log ( C i ) + ( 1 − C ′ i ) log ( 1 − C i ) ]                 − λ n o o b j ∑ i = 0 S × S ∑ j = 0 B I i j n o o b j [ C ′ i log ( C i ) + ( 1 − C ′ i ) log ( 1 − C i ) ] (5) l c l s = ∑ i = 0 S × S I i j o b j ∑ C ∈ c l a s s e s [ p ′ i ( c ) log ( p i ( c ) ) + ( 1 − p ′ i ) log ( 1 − p i ( c ) ) ] (6) 其中S为网格尺寸；B表示预测框数目； I i j o b j 为指示函数，表示如果在 i ， j 处的预测框有目标，其值为1，反之为0； I i j n o o b j 为指示函数，表示如果在 i ， j 处的预测框无目标，其值为1，反之为0。 综上可得目标损失函数 l o s s ( object ) = l b o x + l o b j + l c l s ，即公式(7)。 2.4. 基于预训练模型的迁移 在数据集大、设备算力充足、模型规模合适的情况下，通过合适的训练策略从零开始训练模型往往可以取得更好的效果，但在数据集规模较小且设备算力较低的情况下，即使训练结果收敛，模型往往也会由于过拟合而泛化性差导致不能使用。 迁移学习通过迁移包含在与目标域不同但相关的源域知识来提高模型在目标域上的表现，可以减少对模型所需数据的依赖 [ 18 ]。机器学习的理想场景是有丰富的标签化训练实例，这些训练实例具有相同的测试数据分布，深度学习更甚，数据集的不足导致的模型欠拟合很难通过诸如图像增广、GAN等技术做到大数据规模下的效果，也很难通过调整训练策略使模型收敛至可用程度。 深度学习模型属于层叠结构，在模型的不同层次提取不同的特征，从低级到高级的特征逐层提取。由于Pascal VOC 2007数据集中相关数据的匮乏，本文选择使用经过MS COCO数据集预训练后的YOLOv3模型，使用Pascal VOC 2007数据集中道路场景中的常见类别，冻结主干特征提取网络参数对YOLOv3模型进行训练，可以在很大程度上缓解目标领域数据集不足、模型训练耗时长的问题。 l o s s ( object ) = λ c o o r d ∑ i = 0 S × S ∑ j = 0 B I i j o b j ( 2 − w i × h i ) [ ( x i − x ′ i ) 2 + ( y i − y ′ i ) 2 ]   + λ c o o r d ∑ i = 0 S × S ∑ j = 0 B I i j o b j ( 2 − w i × h i ) [ ( w i − w ′ i ) 2 + ( h i − h ′ i ) 2 ]   − ∑ i = 0 S × S ∑ j = 0 B I i j o b j [ C ′ i log ( C i ) + ( 1 − C ′ i ) log ( 1 − C i ) ]   − λ n o o b j ∑ i = 0 S × S ∑ j = 0 B I i j n o o b j [ C ′ i log ( C i ) + ( 1 − C ′ i ) log ( 1 − C i ) ]   − ∑ i = 0 S × S I i j o b j ∑ C ∈ c l a s s e s [ p ′ i ( c ) log ( p i ( c ) ) + ( 1 − p ′ i ) log ( 1 − p i ( c ) ) ] (7)