• YOLOv3: An Incremental Improvement 论文详细解读


    前言

    对应YOLOv1论文解读:You Only Look Once: Unified, Real-Time Object Detection(Yolov1) 论文详细解读
    YOLOv2论文解读:YOLO9000: Better, Faster, Stronger (Yolov2)论文详细解读

    其他的论文可在该栏目搜索:论文解读栏目 (实时更新阅读)

    1. 边界框预测

    边界框的预测和Yolov2 思想一致,详细的内容可看Yolov2的知识点

    • 预测边界框使用聚类作为Anchor Boxes
    • 该网络为每个边界框预测4个坐标(tx、ty、tw、th)以及置信度
    • 相对于全图左上角偏移了(cx, cy),宽度和高度为pw,ph,本身已经归一化为0到1之间

    通过以上法则预测出真正预测框的中心坐标值
    具体公式如下:
    在这里插入图片描述

    训练的过程中,使用均方误差来计算损失,通过∑(标签值 - 预测值)2 (逻辑回归问题进行训练),Yolov3使用sigmod进行输出

    补充知识:

    之所以使用回归逻辑而不用softmax进行训练的原因?

    • 一般使用softmax进行训练,类别必须要相互独立互斥
    • 使用逻辑回归,样本有重叠,预测每个类别的得分,设置阈值,大于该阈值,即为边界框的真实类别
    1. 此处的每个grid cell 都会输3个Anchor(Yolov2 是输出5个),总共输出9个Anchor(一共有3个尺度)
    2. 这9个Anchor 与 真实框最大的拟合,挑选最大的IOU值作为正样本

    具体公式为:Pr(physical object) = Pr(Object)* IOU
    在Yolov1 和 Yolov2的置信度是标签值, 为真实框的时候Pr(Object)= 1
    在Yolov3中,IOU为最大的值,即Pr(physical object) = 1

    那么在Yolov1 和 Yolov2 中 IOU作为置信度标签有什么不好?

    • 预测框与真实框的IOU设置为0.7,本身重合度不高,得不到更好的反馈,而用Yolov3挑选最大的IOU值,当做正样本可以更好的学习
    • COCO中的小目标,相对误差比较大

    在Yolov3中 正样本标签为1,负样本标签为0

    最终可视化图像如下:
    在这里插入图片描述

    挑选最大的阈值,其中某些值超出设定的IOU阈值 应如何操作?


    答:筛选掉这些阈值,只要最大并且将其置为1,其他的样本即使超过设定阈值也变为负样本

    类似Faster R-CNN,将那些阈值超过0.5的阈值都忽略掉(不用产生损失函数)
    Yolov3是每一个真实框只负责一个预测框

    • 如果为正样本,会对定位、置信度、分类产生值
    • 如果IOU小于0.5(即使大于0.5,没被归为最大的IOU),都归为负样本,负样本只有置信度误差,不计算定位以及分类误差(这两个都为0)

    正负样本会影响性能,正负样本很重要

    2. 多类别标注与分类

    类别预测:

    • 使用多标签分类法来预测边界框中可能包含的类别,此处不适用softmax(80个类别里挑出一个确切的类别,此处不适用)
    • 使用二元交叉熵损失来类别预测,每一个类别就是一个独立的概率(如果使用softmax预测,每个边界框只有一个类别,但事实并非如此)

    补充相关知识点:

    3. 多尺度目标检测

    yolov3在3个不同尺度上预测边界框,受金字塔网络启发(FPN),将其多个层进行融合,由不同特征网络提取的特征分别加不同的卷积层,每一个尺度获得3维的卷积核(都有255个通道:编码边界框、物体性和类别预测。也就是: [3 ∗ (4 + 1 + 80)]

    • 此处使用的是COCO数据集,每个尺度预测3个边界框
    • 张量为N × N × [3 ∗ (4 + 1 + 80)] ,该尺度下的N * N个格子,3个预测框,4代表xyhw,1代表置信度,80为类别预测。(此处的4并非是直接偏移的,而是通过sigmoid预测的x 、y坐标)

    对比以往YOLO结构

    结构输入输出张量大小
    Yolov1448 *4487 * 7 * (5 * 2个框 + 20个类别)
    (无Anchor)
    Yolov2446 * 44613 * 13 * 5 * (5 + 20个类别)
    (每个格子有5个Anchor)
    Yolov3256 * 256(8 * 8 + 16 * 16 + 32 * 32 )* 3
    下采用是 32、16、8倍
    Yolov3416 * 416(13 * 8 + 26 * 26 + 52 * 52 )* 3
    下采用是 32、16、8倍

    通过多尺度目标检测改进了小物体的预测

    使用 k-means 聚类来确定边界框,得到9个聚类和3个Anchor,每个尺度上分配了3个Anchor

    • 小目标:52 * 52 ,分别为 (10×13),(16×30),(33×23)
    • 中目标:26 * 26 ,分别为 (30×61),(62×45),(59×119)
    • 大目标:13 * 13 ,分别为 (116 × 90),(156 × 198),(373 × 326).

    4. 网络架构

    目前新的网络主要基于 Yolov2 、 Darknet - 19 以及 ResNet。
    对应ResNet的知识点可看:Deep Residual Learning for Image Recognition (ResNet)论文详细解读

    新的网络架构 通过 3 * 3、1 * 1的卷积 以及shortcut短路连接,总共有53个卷积层(52卷积层 + 1个全连接层),所以称为Darknet - 53

    详细的流程如下(输入256 * 256的尺寸):

    1. 输入256 * 256的尺寸,经过3 * 3 * 32进行卷积,输出256 * 256 * 32
    2. 经过3 * 3 * 64卷积核,步长为2的下采样,输出为128 * 128 * 64
    3. (1个残差模块)学习后,输出128 * 128 * 64,在经过3 * 3 * 128,步长为2的下采样,输出为64 * 64 * 128
    4. (2个残差模块)学习后,输出64 * 64 * 128,在经过3 * 3 * 256,步长为2的下采样,输出为32 * 32 * 256
    5. (8个残差模块)学习后,输出32 * 32 * 256,在经过3 * 3 * 512,步长为2的下采样,输出为16* 16 * 512
    6. (8个残差模块)学习后,输出16 * 16 * 512,在经过3 * 3 * 1024,步长为2的下采样,输出为8 * 8 * 1024
    7. (4个残差模块)学习后,输出8 * 8 * 1024
    8. 经过全局池化连接、全连接层、softmax输出

    整体的网络架构为残差网络,每个残差中间加入下采样步长为2

    输入256 * 256 的尺寸,通过3 * 3 的卷积核,以及步长为2的下采样,怎么输出128 * 128 的尺寸?


    答案:

    通过卷积核的计算公式:【(输入尺寸大小 + 2P - 卷积核大小)/ 步长 】+ 1
    套入公式,此处的P为左右补零,所以为1,。此处算出的结果为128.5,向下取整,最后为128

    具体在代码模块中,深层网络结构 用到上采用以及拼接

    具体的网络架构图来源:【论文解读】Yolo三部曲解读——Yolov3
    在这里插入图片描述

    另外的一张网络架构图来源:yolo系列之yolo v3【深度解析】
    在这里插入图片描述

    论文中的架构图如下:(来源:【精读AI论文】YOLO V3目标检测(附YOLOV3代码复现)
    在这里插入图片描述

    经过骨干网络Backbone 提取特征,由不同特征在Neck中进行汇总。输入416 * 416 * 3的尺度最终会输出 13 * 13 * 85 、26 * 26 * 85 以及 52 * 52 * 85,一共有3个Anchor,最后会输出255的通道
    13 * 13 上采用 和 26 * 26 进行拼接,26 * 26 的上采用和56 *56 的继续拼接(融合深层次网络的语义信息 以及 浅层网络细粒度的像素结构信息)

    新网络比Darknet-19强大得多,但仍比ResNet-101或ResNet-152更有效。
    下面是一些ImageNet的结果:
    在这里插入图片描述

    总体对小物体的预测比较精准

    • 兼容不同尺度的输入
    • Anchor通过聚类而不是人为指定
    • 多尺度预测
    • 损失函数惩罚项
    • 网络架构通过Darknet - 53 以及 跨层连接和残差连接
  • 相关阅读:
    不能乱动的依赖包glibc,openssl,libcom_err
    多目标优化算法:基于非支配排序的海象优化算法(NSWOA)MATLAB
    【100天精通Python】Day61:Python 数据分析_Pandas可视化功能:绘制饼图,箱线图,散点图,散点图矩阵,热力图,面积图等(示例+代码)
    这个苦逼的通信人,有点像我啊......
    Ubuntu20.04台式机网线连接Win10笔记本上网
    基于Flume+Kafka+Hbase+Flink+FineBI的实时综合案例(一)案例需求
    验证码识别之OCR识别
    Python解题 - 括号上色(递归)
    HDFS的存储原理
    elementui单个输入框回车刷新整个页面
  • 原文地址:https://blog.csdn.net/weixin_47872288/article/details/127286619