YOLO超详细入门 03 v3 (含代码+原文)

本文详细介绍了YOLOv3的目标检测算法,包括其采用的Darknet-53网络架构,检测流程中的多尺度特征融合,以及针对边界框预测、多标签预测和跨尺度预测的改进。YOLOv3通过3个不同尺度的特征图提高小物体检测能力,并使用独立的Logistic回归分类器进行多类别预测。损失函数结合了边界框坐标、置信度和分类损失。相较于YOLOv2,YOLOv3在准确度上有所提升,但在速度上略有牺牲。
摘要由CSDN通过智能技术生成


前言

代码地址:Github:ultralytics/yolov3

笔者在阅读《YOLOv3: An Incremental Improvement》原文后,根据自身理解及查阅资料,以入门角度尽可能想要还原论文细节,水平有限,欢迎交流。
在上两篇文章中介绍过YOLOv1及YOLOv2,地址如下:
【建议先读】《YOLO 超详细入门(含开源代码)——网络结构、细节、目标损失函数、优点
【建议先读】《YOLO超详细入门02 零基础看懂 图文详解(含代码及原文)——网络架构,BN,高分辨率,细粒度特征,多尺度训练,Anchor Box,维度聚类,直接位置预测,输出特点,YOLO9000

背景

YOLOv3 在 YOLOv2 的基础上,改良了网络的 backbone、利用多尺度特征图 (feature map) 进行检测,并且改用多个独立的 Logistic regression 分类器取代softmax 来预测类别分类。YOLOv3,Better,但并不像YOLOv2对YOLO的改进一样,faster,也不stronger。它有点大,但它更好(准确)。

一、网络架构(Darknet-53)

1.1 背景

YOLO v2 使用了一个定制的网络架构 darknet-19,一个最初的 19 层网络,增加了 11 层用于目标检测。
在这里插入图片描述

YOLO v2 采用 30 层架构,卷积层对输入进行下采样时,细粒度特征的丢失导致网络难以检测小物体。为了解决这个问题,YOLO v2 使用了passthrough恒等映射,将前一层的特征映射连接起来以捕获低级特征,相当于一次特征融合

1.2 架构

在这里插入图片描述
YOLOv3 提出新的 backbone: Darknet-53,从第0层到74层,一共有53层convolutional layer,其余为 ResNet 层。

❓ 为什么加入Residual block?

跟 Darknet-19 相比,Darknet-53 去除了所有的 maxpooling 层、增加了更多的1x1和3x3的卷积层,但因为加深网路层数容易导致梯度消失或爆炸,所以Darknet-53 加入了 Resnet 网路 (Residual Network) 来解决梯度的问题。由上图的 Darknet-53 架构可以看到共加入了23个 residual block

❓ 为什么比YOLOv2更慢?

在这里插入图片描述

  • Darknet-53 的 BFLOP(十亿次浮点运算)比 ResNet-152 少,但却以 2 倍的速度达到相同的分类精度。
  • 由于加深网路层数,Darknet-53 比 Darknet-19 慢的许多,但 Darknet-53 处理速度每秒78张图,还是比同精度的 ResNet 快很多,YOLOv3 依然保持了高性能。

1.3 Detect Flow(检测过程)

在这里插入图片描述

  • 若输入416x416的图片,在79层卷积层后,会先经过32倍的下采样,再通过3x3, 1x1的卷积层后,得到13x13的feature map (第82层)
  • 为了实现能够检测小物体,借鉴了 FPN 的方法,将第79层13x13的 feature map 进行上采样,与第61层26x26的 feature map 合并 (Concat) 后,再经过16倍的下采样及3x3, 1x1的卷积层后,得到26x26的feature map (第94层)
  • 接著第91层26x26的 feature map 再次上采样,并与第36层26x26的 feature map 合併 (Concat) 后,再经过8倍下採样及3x3, 1x1的卷积层后,得到52x52的 feature map (第106层)
    在这里插入图片描述

二、YOLOv3的改进

2.1 Bounding Box Prediction(边界框预测)

与 YOLOv2相同,网络为每个边界框预测 4 个坐标, t x , t y , t w , t h t_{x}, t_{y}, t_{w}, t_{h} tx,ty,tw,th t x , t y t_{x}, t_{y} tx,ty为左上角坐标。如果单元格从图像的左上角偏移 ( c x , c y c_{x},c_{y} cx,cy) 并且边界框先验具有宽度和高度 p w , p h p_{w}, p_{h} pw,ph,则预测对应于:
在这里插入图片描述
在这里插入图片描述
YOLOv3 还使用 Logistic regression (逻辑回归)预测每个边界框的confidence score(置信度)

  • 正例:如果边界框先验与地面实况对象的重叠比任何其他边界框先验多,则该值应为 1。例如,(prior 1)与第一个 ground truth 对象的重叠比任何其他 bounding box (具有最高 IOU)更多,prior 2 与第二个 ground truth 对象的重叠比任何其他 bounding box 都多。
  • 忽略样例: 其他不是最高 IOU 的 bounding box 并且 IOU 大于阈值 (threshold,预测为0.5) ,则忽略这些 bounding box,不计算 loss。
  • 负例:若bounding box没有与任何一个gound truth对应,那么就应该减少对应的confidence score。

❓ 为什么YOLOv3 要将confidence score 设为1?

💬 对检测小物体而言,confidence score如果仅仅是用bounding box和ground truth的IOU预测,那么confidence score始终很小,无法有效学习,导致检测的recall不高。

❓ 为什么要有忽略样例?

💬由于 YOLOv3 使用了多尺度的 feature map 进行检测,而不同尺度的feature map之间会有重合检测的部分。例如检测一个物体,在训练时他被分配到的检测框是第一个 feature map 的第三个bounding,IOU 达0.98,此时恰好第二个 feature map 的第一个 bouniding box 与该 ground truth 的 IOU 达0.95,也检测到了该 ground truth,如果采用非极大值抑制(NMS)的话,此时给其 confidence score 强行打0的标签,网络学习效果会不理想。

2.2 Multi labels prediction(多标签预测)

在这里插入图片描述
在一些数据集中,比如 Open Image Dataset,一个对象可能有多个标签。例如,一个对象可以被标记为一个女人和一个人。
在这个数据集中,有很多重叠的标签。使用 softmax 进行类预测会假设每个框都只有一个类,但通常情况并非如此。
因此,YOLOv3 没有使用 softmax,而是对任何类使用独立的 Logistic classifiers 逻辑分类器。使用独立的逻辑分类器,可以同时将对象检测为女性和人。
因此在训练期间,作者使用binary cross-entropy(二元交叉熵 )*作为 loss function进行类预测,并且准确率不会下降。
在这里插入图片描述

2.3 Predictions Across Scales(跨尺度预测)

在这里插入图片描述

  • 与预测最后一层输出的 YOLO 和 YOLO2 不同,YOLOv3 Feature Pyramid Network (FPN) 的方法,预测 3 个不同尺度的框,从而提高对不同大小物体进行检测,提升小物体的检测能力。
    在这里插入图片描述在这里插入图片描述
    每个尺度的 feature map 会预测出3个 Anchor prior,而 Anchor prior 的大小则采用K-means进行聚类分析 (YOLOv3 延续了 YOLOv2 的作法,具体可以参考《YOLO超详细入门02 零基础看懂 图文详解(含代码及原文)》)。
    在这里插入图片描述
    YOLOv3 通过下采样32倍、16倍、8倍得到3个不同尺度的 feature map,例如输入416x416的图片,则会得到13x13 (416/32)、26x26 (416/16)、52x52 (416/8),这3个尺度的 feature map。

feature map对应Anchor prior

  • 13x13 feature map (有最大的感受野) 用于检测大物体,所以用较大的Anchor prior (116x90), (156x198), (373x326)
  • 26x26 feature map (中等的感受野) 用于检测中等大小的物体,所以用中等的Anchor prior (30x61), (62x45), (59x119)
  • 52x52eature map (较小的感受野) 用于检测小物体,所以用较小的Anchor prior (10x13), (16x30), (33x23)
    在这里插入图片描述
  • YOLOv3 最显着的特点是它可以在三个不同的尺度上进行检测。 YOLO 是一个全卷积网络,其最终输出是通过在feature map(特征图)上应用 1 x 1 kernel生成的。在 YOLO v3 中,检测是通过在网络中三个不同位置的三个不同大小的特征图上应用 1 x 1 来完成的。
  • 检测核的形状为1 x 1 x (B x (5 + C) )。这里 B 是特征图上一个单元格可以预测的边界框数量,“5”代表 4 个边界框属性和1个置信度,C 是类别数。在 COCO 上训练的 YOLO v3 中,B = 3 和 C = 80,因此kernel size为 1 x 1 x 255。此kernel生成的特征图与之前的特征图具有相同的高度和宽度,并且深度如上所述。

2.4 Loss Function(损失函数)

在这里插入图片描述

bounding box中心点坐标与宽高

  • ( b x i 、 b y i ) (b_{xi}、b_{yi}) bxibyi是ground truth的bounding box中心点坐标。 ( b x i ^ 、 b y i ^ ) (\widehat {b_{xi}}、\widehat {b_{yi}}) bxi byi 是预测的bounding box中心点坐标。
  • ( b w i 、 b h i ) (b_{wi}、b_{hi}) bwibhi是ground truth的bounding box宽高。 ( b w i ^ 、 b h i ^ ) (\widehat {b_{wi}}、\widehat {b_{hi}}) bwi bhi 是预测的bounding box宽高。
  • 1 i j o b j 1_{ij}^{obj} 1ijobj为第一个网络中第 j j j 个bounding box是否为正例,若是则输出1,否则为0。
  • λ c o r d = 5 \lambda_{cord}=5 λcord=5,提高物体定位的权重,以提高定位能力。

bounding box物体confidence score

  • 1 i j n o o b j 1_{ij}^{noobj} 1ijnoobj为第为第一个网络中第 j j j 个bounding box是否为负例,若是则输出1,否则为0。
  • 如果是忽略样例(既不是正例也不是负例),则都输出0(即没有任何loss)。
  • 有物体的系数为1,没有物体的系数 λ n o c o o r d = 0.5 \lambda_{nocoord}=0.5 λnocoord=0.5 ,使得模型专注于只有物体的识别,并降低找不到物体的情况。

三、YOLOv2 vs YOLOv3

3.1 gird size nad Anchor Box

YOLOv3YOLOv2
bounding box坐标与宽高多乘了 ( 2 − w x h ) (2-wxh) (2wxh)系数来缩小对大bounding box的权重,以及加大对小bounding boux的权重
gird size13 x 13 , 26 x 26 , 52 x 5213 x 13
Anchor Box个数3 x 35
loss functionconfidence score和class的loss function使用binary cross-entropy都使用MSE(Mean Squared Error)

3.2 小物体检测

在这里插入图片描述

YOLOv2的passthrough

在这里插入图片描述

YOLOv3的三尺度feature map

YOLOv2 采用 passthrough 结构来检测小物体特征,而 YOLOv3 采用3个不同尺度的feature map来进行检测。

3.3 YOLOv1,YOLOv2,YOLOv3输出

在这里插入图片描述

YOLOv1输出
  • YOLOv1 在 feature map (7x7) 的每一个 grid 中预测出 2个 bounding box 及分类概率值,每个 bounding box 预测出5个值。
总输出: 7 x 7 x ( 5 x 2 + 20 )

在这里插入图片描述

  • YOLOv2 在 feature map (13x13) 的每一个 grid 中预测出 5个 bounding box (对应5个 Anchor Box),每个bounding box 预测出5个值及分类概率值。
总输出: 13 x 13 x 5 x ( 5 + 20 )

在这里插入图片描述

  • YOLOv3 在3个 feature map的每一个 grid 中预测出 3个 bounding box (对应3个 Anchor prior),每个 bounding box 预测出5个值及分类概率值 ( YOLOv3 是使用 COCO 资料集有80类)。
总输出: 13 x 13 x 3 x ( 5 + 80 ) + 26 x 26 x 3 x ( 5 + 80 ) + 52 x 52 x 3 x ( 5 + 80 )

四、Evalute(结果)

由下图表可以看到: 若采用COCO AP 做评估标准,YOLOv3 在处理608x608 图像速度可以达到 20FPS;若采用COCO mAP50 做评估标准 (不介意 bounding box 预测的准确性),YOLOv3 的表现达到57.9%,与 RetinaNet 的结果相近,并且速度快4 倍,在实现相同准确度下 YOLOv3 要显著地比其它检测方法快。
在这里插入图片描述

AP

在这里插入图片描述

mAP50

在这里插入图片描述

Evaluation

若不了解AP,AUC等知识,可以参考《目标检测基础(TP,recall,PR曲线,mAP,NMS

在这里插入图片描述
ps:AP50 threshold 设定为固定的值为 0.5。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

湘粤Ian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值