精华内容
下载资源
问答
  • yolov系列-yolov1-论文详解
    千次阅读
    2022-03-24 09:50:38

    yolov1相关资料

    yolov1论文详解

    算法原理

    在yolov1中作者将一幅图片分成7*7个网格(gird cell),由网络的最后一层输出7 * 7 * 30的tensor也就是说每个格子输出1 * 1 * 30的tensor。30里面包含了2个bounding box的x,y,w,h,confidence以及针对格子而言的20个类别概率,输出就是7 * 7 * (5 * 2 + 20),(通用公式:S * S个网络,每个网络要预测B个bounding box,还要预测C个categories,输出就是S * S * (5 * B + C)的一个tensor。注意class信息是针对每个网络的,confidence信息是针对每个bounding box的)
    在这里插入图片描述

    1. 网络设计
      我们的网络架构受到 GoogLeNet 图像分类模型的启发[34]。我们的网络有 24 个卷积层,后面是 2 个全连接层。我们只使用 1×1 降维层,后面是 3×3 卷积层,这与 Lin 等人[22]的模型结构类似,而不是GoogLeNet 使用的 Inception 模块。我们网络的最终输出是 7×7×30 的预测张量。完整的网络如下图所示。
      在这里插入图片描述
      每个层的输出,见下图
      在这里插入图片描述

    2. 预测阶段

    3. 训练阶段

    4. 损失函数loss
      在这里插入图片描述

    yolov1优缺点


    参考:
    【深度学习YOLO V1】深刻解读YOLO V1(图解)
    【精读AI论文】YOLO V1目标检测,看我就够了

    更多相关内容
  • 带有Tensorflow 2的YOLOv1 为了易于实现,我没有实现与纸张完全相同的实现。 下面介绍的内容与本文的实现方式有所不同。 骨干网。 (我使用Xception代替了本文中提到的网络。) 学习率表(我使用了tf.keras....
  • yolov1 使用pytorch的yolo v1工具
  • yolov1模型文件

    2018-12-28 11:49:15
    yolov1模型文件,转为keras可以支持的h5文件,可以作为预训练权重
  • YOLOv1.rar

    2020-08-18 20:04:35
    里面有YOLOv1的原论文,YOLOv1作者做的PPT以及我自己对YOLOv1的解读,现在此和大家分享。
  • YOLOv1-v2翻译(已校正)
  • yolov1

    千次阅读 2022-03-30 16:33:23
    yolov1学习笔记 yolov1概述 yolo是目前单阶段目标检测的经典算法,能快速准确高精度进行图像识别和目标检测。截至今日,yolo已经有五个大版本以及yoloX,其中v1,v2,v3是由‘YOLO’之父Joseph Redmon提出。在2020年...

    yolov1学习笔记

    yolov1概述

    yolo是目前单阶段目标检测的经典算法,能快速准确高精度进行图像识别和目标检测。截至今日,yolo已经有五个大版本以及yoloX,其中v1,v2,v3是由‘YOLO’之父Joseph Redmon提出。在2020年他宣布退出计算机视觉领域之后,由俄罗斯Alexey Bochkovskiy得到Joseph Redmon同意和认可后提出yolov4的一作。 此后,UltralyticsLLC 公司在2020年5月提出了yolov5,随后旷视发布了yolovX。作为yolo的开山之作yolov1,后续的版本都是在此基础上进行改动,所以了解掌握yolov1对yolo系列算法学习至关重要。

    yolov1网络结构

    在这里插入图片描述

    将图像reshape成448*448的图像输入到网络当中,经过一系列的卷积池化操作生成一个7*7*1024维的特征图(feature map),然后把这个feature map拉平送入4096个神经元组成的全连接层中生成4096维的向量,然后将这个向量送入1470个神经元的全连接层中生成1470维的向量,最后reshape成7*7*30维的张量,这个张量中包含了bbox的位置、大小、置信度以及分类条件概率。

    yolov1预测阶段

    在这里插入图片描述

    yolov1算法将一张448*448的图像送到网络中,网络会将图像划分成 S*S(S=7)个小格子grid cell,每个grid cell预测B(B=2))个目标检测框bounding box,所以一共有98个bbox。每个bbox可以对20类进行识别。网络输出S*S*(5*B+C)张量,即7*7*(5*2+20)。其中5指的是bbox的中心坐标x,y、宽高w,h以及置信度confidence,C指的是每一类目标的条件概率。通过置信度过滤以及非极大值抑制(NMS)筛选出符合条件的目标检测框,达到分类和定位的目的。

    yolov1训练阶段

    在这里插入图片描述

    训练模型首先要准备一个训练用的数据集,其中包含很多用labelme等软件标注的图片。如上所示,图中标注了一个目标(ground truth).在训练阶段,ground truth的中心落在的grid cell负责预测该目标。我们的目的是使预测框尽可能的拟合标注框,即交并比(IOU)尽可能大。同时,使在非目标中心落在的grid cell所预测的目标框置信度尽可能小。拟合的程度体现在loss损失函数上,损失函数越小意味着拟合程度越好。通过梯度下降方式反向传播更新参数,使得损失函数逐渐找到最小值。

    损失函数

    在这里插入图片描述

    yolov1的损失函数包括五个部分,其中,1,2两部分代表正确预测的bbox中心坐标和宽高的定位误差;第3部分代表负责预测的bbox的置信度误差;第4部分代表不负责预测的bbox的置信度误差,第5部分代表包含目标的grid cell中所有类的条件概率误差。其中,λcoord=5代表增大定位误差的权重,λnoobj=0.5代表降低不负责预测的bbox的置信度误差,i代表第i个grid cell, j代表第 i 个grid cell的第 j 个bbox。在这里插入图片描述
    代表如果此bbox为预测框那就值为1,不是预测框值为0。在这里插入图片描述
    代表如果此bbox为预测框那就值为0,不是预测框值为1。
    在这里插入图片描述
    第3部分的上述值代表预测框与标注框的IOU,第4部分此值为0。

    问题

    yolov1将一张图分为49个grid cell,最多只能预测49个目标。对于鸟群人群等聚集目标识别效果不佳,因为当两个目标中心落在一个grid cell,而一个grid cell只能预测一个目标。此外,因为检测目标的位置是直接预测出来的,所以定位的效果较差。

    小结

    在这里插入图片描述

    yolov1是yolo系列算法的开山之作,尤其是yolov1-tiny模型将检测速度达到了惊人的155fps。虽然yolov1的mAP相较于state-of-the-art的two-stage算法Fast R-CNN低了6.6个点,但是做到了真正的实时检测。同时,因为送入网络的是一整张图,yolov1对于前景和背景的误识别概率比Fast R-CNN低了一倍。后续版本的提出延续了‘快’的传统,同时检测精度也大大提高。

    展开全文
  • yolov1-v3学习报告.pdf

    2021-03-22 09:09:10
    小白在学习yolov1到v3遇到的一些问题和理解
  • yolov1的tensorflow实现

    2018-08-07 16:02:30
    yolov1的tensorflow实现,我对其做了完整的注释,针对于入门的同学,下载即可运行
  • 5.3 改进方法 5.4 性能表现 一、开山之作:YOLOv1 1.1 简介 在YOLOv1提出之前,R-CNN系列算法在目标检测领域独占鳌头。R-CNN系列检测精度高,但是由于其网络结构是双阶段(two-stage)的特点,使得它的检测速度不能...

    写在前面:大家好!我是【AI 菌】,算法工程师一枚,2021年博客之星Top12,公众号【AI 修炼之路】作者。专注于计算机视觉、深度学习、图像处理技术,热衷于分享AI、CV、DL、ML、OpenCV、Python、C++等相关技术及文章。如果您对这些感兴趣,可以关注我,一起学习,一起进步!
    我的博客地址为:【AI 菌】的博客
    我的Github项目地址是:【AI 菌】的Github


    在这里插入图片描述

    一、开山之作:YOLOv1

    1.1 简介

    在YOLOv1提出之前,R-CNN系列算法在目标检测领域独占鳌头。R-CNN系列检测精度高,但是由于其网络结构是双阶段(two-stage)的特点,使得它的检测速度不能满足实时性,饱受诟病。为了打破这一僵局,设计一种速度更快的目标检测器是大势所趋。

    2016年,Joseph Redmon、Santosh Divvala、Ross Girshick等人提出了一种单阶段(one-stage)的目标检测网络。它的检测速度非常快,每秒可以处理45帧图片,能够轻松地实时运行。由于其速度之快和其使用的特殊方法,作者将其取名为:You Only Look Once(也就是我们常说的YOLO的全称),并将该成果发表在了CVPR 2016上,从而引起了广泛地关注。

    YOLO 的核心思想就是把目标检测转变成一个回归问题,利用整张图作为网络的输入,仅仅经过一个神经网络,得到bounding box(边界框) 的位置及其所属的类别。

    1.2 网络结构

    在这里插入图片描述

    现在看来,YOLOv1的网路结构非常明晰,是一种传统的one-stage的卷积神经网络:

    • 网络输入:448×448×3的彩色图片。
    • 中间层:由若干卷积层和最大池化层组成,用于提取图片的抽象特征。
    • 全连接层:由两个全连接层组成,用来预测目标的位置和类别概率值。
    • 网络输出:7×7×30的预测结果。

    1.3 实现细节

    (1)检测策略
    YOLOv1采用的是“分而治之”的策略,将一张图片平均分成7×7个网格,每个网格分别负责预测中心点落在该网格内的目标。回忆一下,在Faster R-CNN中,是通过一个RPN来获得目标的感兴趣区域,这种方法精度高,但是需要额外再训练一个RPN网络,这无疑增加了训练的负担。在YOLOv1中,通过划分得到了7×7个网格,这49个网格就相当于是目标的感兴趣区域。通过这种方式,我们就不需要再额外设计一个RPN网络,这正是YOLOv1作为单阶段网络的简单快捷之处!
    在这里插入图片描述
    具体实现过程如下:

    1. 将一幅图像分成 S×S个网格(grid cell),如果某个 object 的中心落在这个网格中,则这个网格就负责预测这个object。
    2. 每个网格要预测 B 个bounding box,每个 bounding box 要预测 (x, y, w, h) 和 confidence 共5个值。
    3. 每个网格还要预测一个类别信息,记为 C 个类。
    4. 总的来说,S×S 个网格,每个网格要预测 B个bounding box ,还要预测 C 个类。网络输出就是一个 S × S × (5×B+C) 的张量。

    在这里插入图片描述
    在实际过程中,YOLOv1把一张图片划分为了7×7个网格,并且每个网格预测2个Box(Box1和Box2),20个类别。所以实际上,S=7,B=2,C=20。那么网络输出的shape也就是:7×7×30。

    (2)目标损失函数
    在这里插入图片描述

    • 损失由三部分组成,分别是:坐标预测损失、置信度预测损失、类别预测损失。
    • 使用的是差方和误差。需要注意的是,w和h在进行误差计算的时候取的是它们的平方根,原因是对不同大小的bounding box预测中,相比于大bounding box预测偏一点,小box预测偏一点更不能忍受。而差方和误差函数中对同样的偏移loss是一样。 为了缓和这个问题,作者用了一个比较取巧的办法,就是将bounding box的w和h取平方根代替原本的w和h。
    • 定位误差比分类误差更大,所以增加对定位误差的惩罚,使 λ c o o r d = 5 λ_{coord}=5 λcoord=5
    • 在每个图像中,许多网格单元不包含任何目标。训练时就会把这些网格里的框的“置信度”分数推到零,这往往超过了包含目标的框的梯度。从而可能导致模型不稳定,训练早期发散。因此要减少了不包含目标的框的置信度预测的损失,使 λ n o o b j = 0.5 λ_{noobj}=0.5 λnoobj=0.5

    1.4 性能表现

    (1)优点:

    1. YOLO检测速度非常快。标准版本的YOLO可以每秒处理 45 张图像;YOLO的极速版本每秒可以处理150帧图像。这就意味着 YOLO 可以以小于 25 毫秒延迟,实时地处理视频。对于欠实时系统,在准确率保证的情况下,YOLO速度快于其他方法。
    2. YOLO 实时检测的平均精度是其他实时监测系统的两倍。
    3. 迁移能力强,能运用到其他的新的领域(比如艺术品目标检测)。

    (2)局限:

    1. YOLO对相互靠近的物体,以及很小的群体检测效果不好,这是因为一个网格只预测了2个框,并且都只属于同一类。
    2. 由于损失函数的问题,定位误差是影响检测效果的主要原因,尤其是大小物体的处理上,还有待加强。(因为对于小的bounding boxes,small error影响更大)
    3. YOLO对不常见的角度的目标泛化性能偏弱。

    这里是一段防爬虫文本,请读者忽略。 本文原创首发于 CSDN,作者【AI 菌】。
    博客首页:https://blog.csdn.net/wjinjie
    本文链接:https://ai-wx.blog.csdn.net/article/details/107509243
    未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!


    二、更快更准:YOLOv2

    2.1 简介

    2017年,作者 Joseph Redmon 和 Ali Farhadi 在 YOLOv1 的基础上,进行了大量改进,提出了 YOLOv2 和 YOLO9000。重点解决YOLOv1召回率和定位精度方面的不足。

    YOLOv2 是一个先进的目标检测算法,比其它的检测器检测速度更快。除此之外,该网络可以适应多种尺寸的图片输入,并且能在检测精度和速度之间进行很好的权衡。

    相比于YOLOv1是利用全连接层直接预测Bounding Box的坐标,YOLOv2借鉴了Faster R-CNN的思想,引入Anchor机制。利用K-means聚类的方法在训练集中聚类计算出更好的Anchor模板,大大提高了算法的召回率。同时结合图像细粒度特征,将浅层特征与深层特征相连,有助于对小尺寸目标的检测。

    YOLO9000 使用 WorldTree 来混合来自不同资源的训练数据,并使用联合优化技术同时在ImageNet和COCO数据集上进行训练,能够实时地检测超过9000种物体。由于 YOLO9000 的主要检测网络还是YOLOv2,所以这部分以讲解应用更为广泛的YOLOv2为主。

    2.2 网络结构

    YOLOv2 采用 Darknet-19 作为特征提取网络,其整体结构如下:
    在这里插入图片描述
    改进后的YOLOv2: Darknet-19,总结如下:

    1. 与VGG相似,使用了很多3×3卷积核;并且每一次池化后,下一层的卷积核的通道数 = 池化输出的通道 × 2。
    2. 在每一层卷积后,都增加了批量标准化(Batch Normalization)进行预处理。
    3. 采用了降维的思想,把1×1的卷积置于3×3之间,用来压缩特征。
    4. 在网络最后的输出增加了一个global average pooling层。
    5. 整体上采用了19个卷积层,5个池化层。

    注:如果想了解降维的思想,可以戳戳:TF2.0深度学习实战(六):搭建GoogLeNet卷积神经网络,对文章中1×1卷积核降维部分细看。

    为了更好的说明,这里我将 Darknet-19 与 YOLOv1、VGG16网络进行对比:

    • VGG-16: 大多数检测网络框架都是以VGG-16作为基础特征提取器,它功能强大,准确率高,但是计算复杂度较大,所以速度会相对较慢。因此YOLOv2的网络结构将从这方面进行改进。
    • YOLOv1: 基于GoogLeNet的自定义网络(具体看上周报告),比VGG-16的速度快,但是精度稍不如VGG-16。
    • Darknet-19: 速度方面,处理一张图片仅需要55.8亿次运算,相比于VGG306.9亿次,速度快了近6倍。精度方面,在ImageNet上的测试精度为:top1准确率为72.9%,top5准确率为91.2%。

    2.3 改进方法

    (1)Batch Normalization
    Batch Normalization 简称 BN ,意思是批量标准化。2015年由 Google 研究员在论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》中提出。

    BN 对数据进行预处理(统一格式、均衡化、去噪等)能够大大提高训练速度,提升训练效果。基于此,YOLOv2 对每一层输入的数据都进行批量标准化,这样网络就不需要每层都去学数据的分布,收敛会变得更快。

    BN算法实现:
    在卷积或池化之后,激活函数之前,对每个数据输出进行标准化,实现方式如下图所示:

    在这里插入图片描述
    如上图所示,前三行是对Batch进行数据归一化(如果一个Batch中有训练集每个数据,那么同一Batch内数据近似代表了整体训练数据),第四行引入了附加参数 γ 和 β,这两个参数的具体取值可以参考上面提到的 Batch Normalization 这篇论文。
    想更深入了解 Batch Normalization 的原理和应用,可以参见我的:深度学习理论专栏——Batch Normalization

    (2)引入 Anchor Box 机制
    在YOLOv1中,作者设计了端对端的网路,直接对边界框的位置(x, y, w, h)进行预测。这样做虽然简单,但是由于没有类似R-CNN系列的推荐区域,所以网络在前期训练时非常困难,很难收敛。于是,自YOLOv2开始,引入了 Anchors box 机制,希望通过提前筛选得到的具有代表性先验框Anchors,使得网络在训练时更容易收敛。

    在 Faster R-CNN 算法中,是通过预测 bounding box 与 ground truth 的位置偏移值 t x , t y t_x, t_y tx,ty,间接得到bounding box的位置。其公式如下:
    在这里插入图片描述
    这个公式是无约束的,预测的边界框很容易向任何方向偏移。因此,每个位置预测的边界框可以落在图片任何位置,这会导致模型的不稳定性。

    因此 YOLOv2 在此方法上进行了一点改变:预测边界框中心点相对于该网格左上角坐标 ( C x , C y ) (C_x, C_y) Cx,Cy的相对偏移量,同时为了将bounding box的中心点约束在当前网格中,使用 sigmoid 函数将 t x , t y t_x, t_y tx,ty 归一化处理,将值约束在0-1,这使得模型训练更稳定。

    下图为 Anchor box 与 bounding box 转换示意图,其中蓝色的是要预测的bounding box,黑色虚线框是Anchor box。
    在这里插入图片描述

    YOLOv2 在最后一个卷积层输出 13×13 的 feature map,意味着一张图片被分成了13×13个网格。每个网格有5个anchor box来预测5个bounding box,每个bounding box预测得到5个值: t x 、 t y 、 t w 、 t h t_x、t_y、t_w、t_h txtytwth t o t_o to(类似YOLOv1的confidence)。引入Anchor Box 机制后,通过间接预测得到的 bounding box 的位置的计算公式为:
    在这里插入图片描述
    置信度 t o t_o to的计算公式为:
    在这里插入图片描述

    (3)Convolution With Anchor Boxes

    在这里插入图片描述

    YOLOv1 有一个致命的缺陷就是:一张图片被分成7×7的网格,一个网格只能预测一个类,当一个网格中同时出现多个类时,就无法检测出所有类。针对这个问题,YOLOv2做出了相应的改进:

    • 首先将YOLOv1网络的FC层和最后一个Pooling层去掉,使得最后的卷积层的输出可以有更高的分辨率特征。
    • 然后缩减网络,用416×416大小的输入代替原来的448×448,使得网络输出的特征图有奇数大小的宽和高,进而使得每个特征图在划分单元格的时候只有一个中心单元格(Center Cell)。YOLOv2通过5个Pooling层进行下采样,得到的输出是13×13的像素特征。
    • 借鉴Faster R-CNN,YOLOv2通过引入Anchor Boxes,预测Anchor Box的偏移值与置信度,而不是直接预测坐标值。
    • 采用Faster R-CNN中的方式,每个Cell可预测出9个Anchor Box,共13×13×9=1521个(YOLOv2确定Anchor Boxes的方法见是维度聚类,每个Cell选择5个Anchor Box)。比YOLOv1预测的98个bounding box 要多很多,因此在定位精度方面有较好的改善。

    (4)聚类方法选择Anchors
    Faster R-CNN 中 Anchor Box 的大小和比例是按经验设定的,不具有很好的代表性。若一开始就选择了更好的、更有代表性的先验框Anchor Boxes,那么网络就更容易学到准确的预测位置了!

    YOLOv2 使用 K-means 聚类方法得到 Anchor Box 的大小,选择具有代表性的尺寸的Anchor Box进行一开始的初始化。传统的K-means聚类方法使用标准的欧氏距离作为距离度量,这意味着大的box会比小的box产生更多的错误。因此这里使用其他的距离度量公式。聚类的目的是使 Anchor boxes 和临近的 ground truth boxes有更大的IOU值,因此自定义的距离度量公式为 :
    在这里插入图片描述
    到聚类中心的距离越小越好,但IOU值是越大越好,所以使用 1 - IOU;这样就保证距离越小,IOU值越大。具体实现方法如下:
    在这里插入图片描述
    如下图所示,是论文中的聚类效果,其中紫色和灰色也是分别表示两个不同的数据集,可以看出其基本形状是类似的。
    在这里插入图片描述
    从下表可以看出,YOLOv2采用5种 Anchor 比 Faster R-CNN 采用9种 Anchor 得到的平均 IOU 还略高,并且当 YOLOv2 采用9种时,平均 IOU 有显著提高。说明 K-means 方法的生成的Anchor boxes 更具有代表性。为了权衡精确度和速度的开销,最终选择K=5。
    在这里插入图片描述
    (5)Fine-Grained Features
    细粒度特征,可理解为不同层之间的特征融合。YOLOv2通过添加一个Passthrough Layer,把高分辨率的浅层特征连接到低分辨率的深层特征(把特征堆积在不同Channel中)而后进行融合和检测。具体操作是:先获取前层的26×26的特征图,将其同最后输出的13×13的特征图进行连接,而后输入检测器进行检测(而在YOLOv1中网络的FC层起到了全局特征融合的作用),以此来提高对小目标的检测能力。

    Passthrough层与ResNet网络的shortcut类似,以前面更高分辨率的特征图为输入,然后将其连接到后面的低分辨率特征图上。前面的特征图维度是后面的特征图的2倍,passthrough层抽取前面层的每个2×2的局部区域,然后将其转化为channel维度,对于26×26×512的特征图,经Passthrough层处理之后就变成了13×13×2048的新特征图(特征图大小降低4倍,而channles增加4倍),这样就可以与后面的13×13×1024特征图连接在一起形成13×13×3072的特征图,然后在此特征图基础上卷积做预测。示意图如下:

    在这里插入图片描述

    2.4 性能表现

    在VOC2007数据集上进行测试,YOLOv2在速度为67fps时,精度可以达到76.8的mAP;在速度为40fps时,精度可以达到78.6
    的mAP 。可以很好的在速度和精度之间进行权衡。下图是YOLOv1在加入各种改进方法后,检测性能的改变。可见在经过多种改进方法后,YOLOv2在原基础上检测精度具有很大的提升!

    在这里插入图片描述


    这里是一段防爬虫文本,请读者忽略。 本文原创首发于 CSDN,作者【AI 菌】。
    博客首页:https://blog.csdn.net/wjinjie
    本文链接:https://ai-wx.blog.csdn.net/article/details/107509243
    未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!


    三、巅峰之作:YOLOv3

    3.1 简介

    2018年,作者 Redmon 又在 YOLOv2 的基础上做了一些改进。特征提取部分采用darknet-53网络结构代替原来的darknet-19,利用特征金字塔网络结构实现了多尺度检测,分类方法使用逻辑回归代替了softmax,在兼顾实时性的同时保证了目标检测的准确性。

    从YOLOv1到YOLOv3,每一代性能的提升都与backbone(骨干网络)的改进密切相关。在YOLOv3中,作者不仅提供了darknet-53,还提供了轻量级的tiny-darknet。如果你想检测精度与速度兼具,可以选择darknet-53作为backbone;如果你希望达到更快的检测速度,精度方面可以妥协,那么tiny-darknet是你很好的选择。总之,YOLOv3的灵活性使得它在实际工程中得到很多人的青睐!

    3.2 网络结构

    相比于 YOLOv2 的 骨干网络,YOLOv3 进行了较大的改进。借助残差网络的思想,YOLOv3 将原来的 darknet-19 改进为darknet-53。论文中给出的整体结构如下:在这里插入图片描述
    Darknet-53主要由1×1和3×3的卷积层组成,每个卷积层之后包含一个批量归一化层和一个Leaky ReLU,加入这两个部分的目的是为了防止过拟合。卷积层、批量归一化层以及Leaky ReLU共同组成Darknet-53中的基本卷积单元DBL。因为在Darknet-53中共包含53个这样的DBL,所以称其为Darknet-53。

    为了更加清晰地了解darknet-53的网络结构,可以看下面这张图:
    在这里插入图片描述
    为了更好的理解此图,下面我将主要单元进行说明:

    • DBL: 一个卷积层、一个批量归一化层和一个Leaky ReLU组成的基本卷积单元。
    • res unit: 输入通过两个DBL后,再与原输入进行add;这是一种常规的残差单元。残差单元的目的是为了让网络可以提取到更深层的特征,同时避免出现梯度消失或爆炸。
    • resn: 其中的n表示n个res unit;所以 resn = Zero Padding + DBL + n × res unit 。
    • concat: 将darknet-53的中间层和后面的某一层的上采样进行张量拼接,达到多尺度特征融合的目的。这与残差层的add操作是不一样的,拼接会扩充张量的维度,而add直接相加不会导致张量维度的改变。
    • Y1、Y2、Y3: 分别表示YOLOv3三种尺度的输出。

    与darknet-19对比可知,darknet-53主要做了如下改进:

    • 没有采用最大池化层,转而采用步长为2的卷积层进行下采样。
    • 为了防止过拟合,在每个卷积层之后加入了一个BN层和一个Leaky ReLU。
    • 引入了残差网络的思想,目的是为了让网络可以提取到更深层的特征,同时避免出现梯度消失或爆炸。
    • 将网络的中间层和后面某一层的上采样进行张量拼接,达到多尺度特征融合的目的。

    3.3 改进之处

    YOLOv3最大的改进之处还在于网络结构的改进,由于上面已经讲过。因此下面主要对其它改进方面进行介绍:

    (1)多尺度预测
    为了能够预测多尺度的目标,YOLOv3 选择了三种不同shape的Anchors,同时每种Anchors具有三种不同的尺度,一共9种不同大小的Anchors。在COCO数据集上选择的9种Anchors的尺寸如下图红色框所示:
    在这里插入图片描述
    借鉴特征金字塔网的思想,YOLOv3设计了3种不同尺度的网络输出Y1、Y2、Y3,目的是预测不同尺度的目标。由于在每一个尺度网格都负责预测3个边界框,且COCO数据集有80个类。所以网络输出的张量应该是:N ×N ×[3∗(4 + 1 + 80)]。由下采样次数不同,得到的N不同,最终Y1、Y2、Y3的shape分别为:[13, 13, 255]、[26, 26, 255]、[52, 52, 255]。可见参见原文:
    在这里插入图片描述

    (2)损失函数
    对于神经网络来说,损失函数的设计也非常重要。但是YOLOv3这篇文中并没有直接给出损失函数的表达式。下面通过对源码的分析,给出YOLOv3的损失函数表达式:
    在这里插入图片描述
    对比YOLOv1中的损失函数很容易知道:位置损失部分并没有改变,仍然采用的是sum-square error的损失计算方法。但是置信度损失和类别预测均由原来的sum-square error改为了交叉熵的损失计算方法。对于类别以及置信度的预测,使用交叉熵的效果应该更好!

    (3)多标签分类
    YOLOv3在类别预测方面将YOLOv2的单标签分类改进为多标签分类,在网络结构中将YOLOv2中用于分类的softmax层修改为逻辑分类器。在YOLOv2中,算法认定一个目标只从属于一个类别,根据网络输出类别的得分最大值,将其归为某一类。然而在一些复杂的场景中,单一目标可能从属于多个类别。

    比如在一个交通场景中,某目标的种类既属于汽车也属于卡车,如果用softmax进行分类,softmax会假设这个目标只属于一个类别,这个目标只会被认定为汽车或卡车,这种分类方法就称为单标签分类。如果网络输出认定这个目标既是汽车也是卡车,这就被称为多标签分类。

    为实现多标签分类就需要用逻辑分类器来对每个类别都进行二分类。逻辑分类器主要用到了sigmoid函数,它可以把输出约束在0到1,如果某一特征图的输出经过该函数处理后的值大于设定阈值,那么就认定该目标框所对应的目标属于该类。

    3.4 性能表现

    如下图所示,是各种先进的目标检测算法在COCO数据集上测试结果。很明显,在满足检测精度差不都的情况下,YOLOv3具有更快的推理速度!
    在这里插入图片描述
    如下表所示,对不同的单阶段和两阶段网络进行了测试。通过对比发现,YOLOv3达到了与当前先进检测器的同样的水平。检测精度最高的是单阶段网络RetinaNet,但是YOLOv3的推理速度比RetinaNet快得多。
    在这里插入图片描述


    这里是一段防爬虫文本,请读者忽略。 本文原创首发于 CSDN,作者【AI 菌】。
    博客首页:https://blog.csdn.net/wjinjie
    本文链接:https://ai-wx.blog.csdn.net/article/details/107509243
    未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!


    四、大神接棒:YOLOv4

    4.1 简介

    今年(2020年)YOLO系列的作者Redmon在推特上发表声明,出于道德方面的考虑,从此退出CV界。听到此消息的我,为之震惊!本以为YOLOv3已经是YOLO系列的终局之战。没想到就在今年,Alexey Bochkovskiy等人与Redmon取得联系,正式将他们的研究命名为YOLOv4。

    YOLOv4对深度学习中一些常用Tricks进行了大量的测试,最终选择了这些有用的Tricks:WRC、CSP、CmBN、SAT、 Mish activation、Mosaic data augmentation、CmBN、DropBlock regularization 和 CIoU loss。

    YOLOv4在传统的YOLO基础上,加入了这些实用的技巧,实现了检测速度和精度的最佳权衡。实验表明,在Tesla V100上,对MS COCO数据集的实时检测速度达到65 FPS,精度达到43.5%AP。

    YOLOv4的独到之处在于:

    • 是一个高效而强大的目标检测网咯。它使我们每个人都可以使用 GTX 1080Ti 或 2080Ti 的GPU来训练一个超快速和精确的目标检测器。这对于买不起高性能显卡的我们来说,简直是个福音!
    • 在论文中,验证了大量先进的技巧对目标检测性能的影响,真的是非常良心!
    • 对当前先进的目标检测方法进行了改进,使之更有效,并且更适合在单GPU上训练;这些改进包括CBN、PAN、SAM等。

    4.2 网络结构

    最简单清晰的表示: YOLOv4 = CSPDarknet53(主干) + SPP附加模块(颈) + PANet路径聚合(颈) + YOLOv3(头部)

    完整的网络结构图如下:

    在这里插入图片描述
    YOLOv4的网络结构是由 CSPDarknet53、 SPP、 PANet、YOLOv3头部等组成,下面对各部分逐一讲解:

    (1)CSPDarknet53
    在YOLOv4中,将CSPDarknet53作为主干网络。在了解CSPDarknet53之前,需要先介绍下CSPNet。
    CSPNet来源于这篇论文:《CSPNET: A NEW BACKBONE THAT CAN ENHANCE LEARNING CAPABILITY OF CNN》
    CSPNet开源地址: https://github.com/WongKinYiu/CrossStagePartialNetworks

    CSPNet全称是Cross Stage Partial Network,在2019年由Chien-Yao Wang等人提出,用来解决以往网络结构需要大量推理计算的问题。作者将问题归结于网络优化中的重复梯度信息。CSPNet在ImageNet dataset和MS COCO数据集上有很好的测试效果,同时它易于实现,在ResNet、ResNeXt和DenseNet网络结构上都能通用。

    CSPNet的主要目的是能够实现更丰富的梯度组合,同时减少计算量。这个目标是通过将基本层的特征图分成两部分,然后通过一个跨阶段的层次结构合并它们来实现的。

    而在YOLOv4中,将原来的Darknet53结构换为了CSPDarknet53,这在原来的基础上主要进行了两项改变:

    • 将原来的Darknet53与CSPNet进行结合。在前面的YOLOv3中,我们已经了解了Darknet53的结构,它是由一系列残差结构组成。进行结合后,CSPnet的主要工作就是将原来的残差块的堆叠进行拆分,把它拆分成左右两部分:主干部分继续堆叠原来的残差块,支路部分则相当于一个残差边,经过少量处理直接连接到最后。具体结构如下:
      在这里插入图片描述

    • 使用MIsh激活函数代替了原来的Leaky ReLU。在YOLOv3中,每个卷积层之后包含一个批量归一化层和一个Leaky ReLU。而在YOLOv4的主干网络CSPDarknet53中,使用Mish代替了原来的Leaky ReLU。Leaky ReLU和Mish激活函数的公式与图像如下:
      在这里插入图片描述

    (2)SPP
    SPP来源于这篇论文:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

    SPP最初的设计目的是用来使卷积神经网络不受固定输入尺寸的限制。在YOLOv4中,作者引入SPP,是因为它显著地增加了感受野,分离出了最重要的上下文特征,并且几乎不会降低的YOLOv4运行速度。如下图所示,就是SPP中经典的空间金字塔池化层。
    在这里插入图片描述
    在YOLOv4中,具体的做法就是:分别利用四个不同尺度的最大池化对上层输出的feature map进行处理。最大池化的池化核大小分别为13x13、9x9、5x5、1x1,其中1x1就相当于不处理。

    (3)PANet
    论文链接:《Path Aggregation Network for Instance Segmentation》

    这篇文章发表于CVPR2018,它提出的Path Aggregation Network (PANet)既是COCO2017实例分割比赛的冠军,也是目标检测比赛的第二名。PANet整体上可以看做是在Mask R-CNN上做多处改进,充分利用了特征融合,比如引入Bottom-up path augmentation结构,充分利用网络浅特征进行分割;引入Adaptive feature pooling使得提取到的ROI特征更加丰富;引入Fully-conneFcted fusion,通过融合一个前背景二分类支路的输出得到更加精确的分割结果。

    下图是PANet的示意图,主要包含FPN、Bottom-up path augmentation、Adaptive feature pooling、Fully-connected fusion四个部分。
    在这里插入图片描述

    • FPN发表于CVPR2017,主要是通过融合高低层特征提升目标检测的效果,尤其可以提高小尺寸目标的检测效果。
    • Bottom-up Path Augmentation的引入主要是考虑网络浅层特征信息对于实例分割非常重要,因为浅层特征一般是边缘形状等特征。
    • Adaptive Feature Pooling用来特征融合。也就是用每个ROI提取不同层的特征来做融合,这对于提升模型效果显然是有利无害。
    • Fully-connected Fusion是针对原有的分割支路(FCN)引入一个前背景二分类的全连接支路,通过融合这两条支路的输出得到更加精确的分割结果。

    在YOLOv4中,作者使用PANet代替YOLOv3中的FPN作为参数聚合的方法,针对不同的检测器级别从不同的主干层进行参数聚合。并且对原PANet方法进行了修改, 使用张量连接(concat)代替了原来的捷径连接(shortcut connection)。

    (4)YOLOv3 Head
    在YOLOv4中,继承了YOLOv3的Head进行多尺度预测,提高了对不同size目标的检测性能。YOLOv3的完整结构在上文已经详细介绍,下面我们截取了YOLOv3的Head进行分析:
    在这里插入图片描述
    YOLOv4学习了YOLOv3的方式,采用三个不同层级的特征图进行融合,并且继承了YOLOv3的Head。从上图可以看出,在COCO数据集上训练时,YOLOv4的3个输出张量的shape分别是:(19,19,225)、(38,38,255)、(76,76,225)。这是因为COCO有80个类别,并且每一个网格对应3个Anchor boxes,而每个要预测的bounding box对应的5个值( t x 、 t y 、 t w 、 t h t_x、t_y、t_w、t_h txtytwth t o t_o to),所以有:3 x (80+5)=255 。

    4.3 各种Tricks总结

    作者将所有的Tricks可以分为两类:

    • 在不增加推理成本的前提下获得更好的精度,而只改变训练策略或只增加训练成本的方法,作着称之为 “免费包”(Bag of freebies);
    • 只增加少量推理成本但能显著提高目标检测精度的插件模块和后处理方法,称之为“特价包”(Bag of specials)

    下面分别对这两类技巧进行介绍。

    (1)免费包
    以数据增强方法为例,虽然增加了训练时间,但不增加推理时间,并且能让模型泛化性能和鲁棒性更好。像这种不增加推理成本,还能提升模型性能的方法,作者称之为"免费包",非常形象。下面总结了一些常用的数据增强方法:

    • 随机缩放
    • 翻转、旋转
    • 图像扰动、加噪声、遮挡
    • 改变亮度、对比对、饱和度、色调
    • 随机裁剪(random crop)
    • 随机擦除(random erase)
    • Cutout
    • MixUp
    • CutMix

    常见的正则化方法有:

    • DropOut
    • DropConnect
    • DropBlock

    平衡正负样本的方法有:

    • Focal loss
    • OHEM(在线难分样本挖掘)

    除此之外,还有回归 损失方面的改进:

    • GIOU
    • DIOU
    • CIoU

    (2)特价包
    增大感受野技巧:

    • SPP
    • ASPP
    • RFB

    注意力机制:

    • Squeeze-and-Excitation (SE)
    • Spatial Attention Module (SAM)

    特征融合集成:

    • FPN
    • SFAM
    • ASFF
    • BiFPN (出自于大名鼎鼎的EfficientDet)

    更好的激活函数:

    • ReLU
    • LReLU
    • PReLU
    • ReLU6
    • SELU
    • Swish
    • hard-Swish

    后处理非极大值抑制算法:

    • soft-NMS
    • DIoU NMS

    想具体了解作者通过大量实验,选择了哪些Tricks?可戳我上一篇文章:YOLOv4 怎么学,看完这一篇就够了!

    4.4 改进方法

    除了下面已经提到的各种Tricks,为了使目标检测器更容易在单GPU上训练,作者也提出了5种改进方法:

    (1)Mosaic
    这是作者提出的一种新的数据增强方法,该方法借鉴了CutMix数据增强方式的思想。CutMix数据增强方式利用两张图片进行拼接,但是Mosaic使利用四张图片进行拼接。如下图所示:
    在这里插入图片描述
    Mosaic数据增强方法有一个优点:拥有丰富检测目标的背景,并且在BN计算的时候一次性会处理四张图片!

    (2)SAT
    SAT是一种自对抗训练数据增强方法,这一种新的对抗性训练方式。在第一阶段,神经网络改变原始图像而不改变网络权值。以这种方式,神经网络对自身进行对抗性攻击,改变原始图像,以制造图像上没有所需对象的欺骗。在第二阶段,用正常的方法训练神经网络去检测目标。
    (3)CmBN
    CmBN的全称是Cross mini-Batch Normalization,定义为跨小批量标准化(CmBN)。CmBN 是 CBN 的改进版本,它用来收集一个batch内多个mini-batch内的统计数据。BN、CBN和CmBN之间的区别具体如下图所示:
    在这里插入图片描述
    (4)修改过的SAM
    作者在原SAM(Spatial Attention Module)方法上进行了修改,将SAM从空间注意修改为点注意。如下图所示,对于常规的SAM,最大值池化层和平均池化层分别作用于输入的feature map,得到两组shape相同的feature map,再将结果输入到一个卷积层,接着是一个 Sigmoid 函数来创建空间注意力。
    在这里插入图片描述
    将SAM(Spatial Attention Module)应用于输入特征,能够输出精细的特征图。

    在这里插入图片描述
    在YOLOv4中,对原来的SAM方法进行了修改。如下图所示,修改后的SAM直接使用一个卷积层作用于输入特征,得到输出特征,然后再使用一个Sigmoid 函数来创建注意力。作者认为,采用这种方式创建的是点注意力。
    在这里插入图片描述
    (5)修改过的PAN
    作者对原PAN(Path Aggregation Network)方法进行了修改, 使用张量连接(concat)代替了原来的快捷连接(shortcut connection)。如下图所示:
    在这里插入图片描述
    注:想具体了解原PANet网络结构,可参考上文中的PANet介绍部分。

    4.5 性能表现

    如下图所示,在COCO目标检测数据集上,对当前各种先进的目标检测器进行了测试。可以发现,YOLOv4的检测速度比EfficientDet快两倍,性能相当。同时,将YOLOv3的AP和FPS分别提高10%和12%,吊打YOLOv3!
    在这里插入图片描述
    综合以上分析,总结出YOLOv4带给我们的优点有:

    • 与其它先进的检测器相比,对于同样的精度,YOLOv4更快(FPS);对于同样的速度,YOLOv4更准(AP)。
    • YOLOv4能在普通的GPU上训练和使用,比如GTX 1080Ti和GTX 2080Ti等。
    • 论文中总结了各种Tricks(包括各种BoF和BoS),给我们启示,选择合适的Tricks来提高自己的检测器性能。

    这里是一段防爬虫文本,请读者忽略。 本文原创首发于 CSDN,作者【AI 菌】。
    博客首页:https://blog.csdn.net/wjinjie
    本文链接:https://ai-wx.blog.csdn.net/article/details/107509243
    未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!


    五、终局之战:YOLOv5

    5.1 简介

    YOLOv5是一个在COCO数据集上预训练的物体检测架构和模型系列,它代表了Ultralytics对未来视觉AI方法的开源研究,其中包含了经过数千小时的研究和开发而形成的经验教训和最佳实践。

    YOLOv5是YOLO系列的一个延申,您也可以看作是基于YOLOv3、YOLOv4的改进作品。YOLOv5没有相应的论文说明,但是作者在Github上积极地开放源代码,通过对源码分析,我们也能很快地了解YOLOv5的网络架构和工作原理。
    在这里插入图片描述
    Github源码地址:https://github.com/ultralytics/yolov5

    5.2 网络结构

    YOLOv5官方代码中,一共给出了5个版本,分别是 YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLO5x 五个模型。这些不同的变体使得YOLOv5能很好的在精度和速度中权衡,方便用户选择。

    本文中,我们以较为常用的YOLOv5s进行介绍,下面是YOLOv5s的整体网络结构示意图:在这里插入图片描述
    注:无水印原图,上我公众号【AI 修炼之路】,回复【YOLOv5】获取!

    1、Input

    和YOLOv4一样,对输入的图像进行Mosaic数据增强。Mosaic数据增强的作者也是来自Yolov5团队的成员,通过随机缩放、随机裁剪、随机排布的方式对不同图像进行拼接,如下如所示:在这里插入图片描述

    采用Mosaic数据增强方法,不仅使图片能丰富检测目标的背景,而且能够提高小目标的检测效果。并且在BN计算的时候一次性会处理四张图片!

    2、Backbone

    骨干网路部分主要采用的是:Focus结构、CSP结构。其中 Focus 结构在YOLOv1-YOLOv4中没有引入,作者将 Focus 结构引入了YOLOv5,用于直接处理输入的图片。Focus重要的是切片操作,如下图所示,4x4x3的图像切片后变成2x2x12的特征图。
    在这里插入图片描述
    以YOLOv5s的结构为例,原始608x608x3的图像输入Focus结构,采用切片操作,先变成304x304x12的特征图,再经过一次32个卷积核的卷积操作,最终变成304x304x32的特征图。

    3、Neck

    在网络的颈部,采用的是:FPN+PAN结构,进行丰富的特征融合,这一部分和YOLOv4的结构相同。详细内容可参考:

    4、Head

    对于网络的输出,遵循YOLO系列的一贯做法,采用的是耦合的Head。并且和YOLOv3、YOLOv4类似,采用了三个不同的输出Head,进行多尺度预测。详细内容可参考:

    5.3 改进方法

    1、自适应锚框计算

    在YOLOv3、YOLOv4中,是通过K-Means方法来获取数据集的最佳anchors,这部分操作需要在网络训练之前单独进行。为了省去这部分"额外"的操作,Yolov5的作者将此功能嵌入到整体代码中,每次训练时,自适应的计算不同训练集中的最佳锚框值。当然,如果觉得计算的锚框效果不是很好,也可以在代码中将自动计算锚框功能关闭。

    parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check')
    

    2、自适应灰度填充

    为了应对输入图片尺寸 不一的问题,通常做法是将原图直接resize成统一大小,但是这样会造成目标变形,如下图所示:
    在这里插入图片描述
    为了避免这种情况的发生,YOLOv5采用了灰度填充的方式统一输入尺寸,避免了目标变形的问题。灰度填充的核心思想就是将原图的长宽等比缩放对应统一尺寸,然后对于空白部分用灰色填充。如下图所示:
    在这里插入图片描述

    5.4 性能表现

    在COCO数据集上,当输入原图的尺寸是:640x640时,YOLOv5的5个不同版本的模型的检测数据如下:

    在这里插入图片描述
    在COCO数据集上,当输入原图的尺寸是:640x640时,YOLOv5的5个不同版本的模型的检测数据如下:

    在这里插入图片描述
    从上表可得知,从YOLOv5n到YOLOv5x,这五个YOLOv5模型的检测精度逐渐上升,检测速度逐渐下降。根据项目要求,用户可以选择合适的模型,来实现精度与速度的最佳权衡!


    由于水平有限,博客中难免会有一些错误,有纰漏之处恳请各位大佬不吝赐教!

    相关文章推荐:


    参考资料:

    • https://zhuanlan.zhihu.com/p/161439809
    • https://zhuanlan.zhihu.com/p/135980432
    • https://blog.csdn.net/u014380165/article/details/81273343
    • https://blog.csdn.net/weixin_44791964/article/details/106533581

    展开全文
  • yolov1详解

    千次阅读 2022-03-12 21:39:17
    YOLOv1 YOLOv1是单阶段目标检测方法,不需要像Faster RCNN这种两阶段目标检测方法一样,需要生成先验框。Yolo算法采用一个单独的CNN模型实现end-to-end的目标检测。 整个YOLO目标检测pipeline如上图所示:首先将...

    YOLOv1

    YOLOv1是单阶段目标检测方法,不需要像Faster RCNN这种两阶段目标检测方法一样,需要生成先验框。Yolo算法采用一个单独的CNN模型实现end-to-end的目标检测。

    整个YOLO目标检测pipeline如上图所示:首先将输入图片resize到448x448,然后送入CNN网络,最后处理网络预测结果得到检测的目标。相比R-CNN系列算法,其是一个统一的框架,其速度更快,而且Yolo的训练过程也是end-to-end的。

    具体来说,YOLO将全图划分为 S × S S×S S×S的格子, 每个格子负责对落入其中的目标进行检测,一次性预测所有格子所含目标的边界框、置信度、以及所有类别概率向量。

    论文思想

    1. 将一幅图像分成SxS个网格,如果某个object的中心落在这个网格中,则这个网络就负责预测这个object
    2. 每个网格要预测B个bounding box,每个bounding box,除了要预测位置之外,还要附带预测一个confidence值。每个网格还要预测c个类别的分数

    网格单元(Grid Cell)

    YOLO将目标检测问题作为回归问题。会将输入图像分成 S × S S \times S S×S的网格(cell),如果一个物体的中心点落入到一个cell中,那么该cell就要负责预测该物体,一个格子只能预测一个物体,会生成两个预测框。

    对于每个网格单元cell:

    • YOLOv1会预测两个边界框
    • 每个边界框包含5个元素: ( x , y , w , h ) (x,y,w,h) (x,y,w,h) 和 边界框的置信度得分(box confidence score)
    • 只负责预测一个目标
    • 预测 C C C 个条件概率类别(conditional class probabilities)

    为了评估PASCAL VOC,YOLO V1使用 7×7 的网格(S×S),每个单元格回归2个边界框 和 20个条件类别概率。条件类别概率 (conditional class probability) 是检测到的目标属于特定类别的概率(每个单元对每个类别有一个概率)。

    最终的预测特征由边框的位置、边框的置信度得分以及类别概率组成,这三者的含义如下:

    • 边框位置:对每一个边框需要预测其中心坐标及宽、高这4个量, 两个边框共计8个预测值
      • 边界框宽度w和高度h用图像宽度和高度归一化。因此 x , y , w , h x, y, w, h x,y,w,h 都在0和1之间。 x x x y y y 是相应单元格的偏移量。
    • 置信度得分(box confidence score) c :框包含一个目标的可能性(objectness)以及边界框的准确程度。类似于Faster RCNN 中是前景还是背景。由于有两个边框,因此会存在两个置信度预测值。
    • 类别概率:由于PASCAL VOC数据集一共有20个物体类别,因此这里预测的是边框属于哪一个类别。

    一个cell预测的两个边界框共用一个类别预测, 在训练时会选取与标签IoU更大的一个边框负责回归该真实物体框,在测试时会选取置信度更高的一个边框,另一个会被舍弃,因此整张图最多检测出49个物体。

    网络结构

    YOLO输入图像的尺寸为 448 × 448 448 \times 448 448×448,经过24个卷积层,2个全连接的层(FC),最后在reshape操作,输出的特征图大小为 7 × 7 × 30 7 \times 7 \times 30 7×7×30

    • YOLO主要是建立一个CNN网络生成预测 7 × 7 × 1024 7 \times 7 \times 1024 7×7×1024 的张量,
    • 然后使用两个全连接层执行线性回归,以进行 7 × 7 × 2 7 \times 7 \times 2 7×7×2 边界框预测。将具有高置信度得分(大于0.25)的结果作为最终预测。
    • 3 × 3 3 \times 3 3×3的卷积后通常会接一个通道数更低 1 × 1 1 \times 1 1×1的卷积,这种方式既降低了计算量,同时也提升了模型的非线性能力。
    • 除了最后一层使用了线性激活函数外,其余层的激活函数为 Leaky ReLU ;
    • 在训练中使用了 Dropout 与数据增强的方法来防止过拟合。
    • 对于最后一个卷积层,它输出一个形状为 (7, 7, 1024) 的张量。 然后张量展开。使用2个全连接的层作为一种线性回归的形式,它输出 个参数,然后重新塑形为 (7, 7, 30) 。

    损失函数

    YOLO V1每个网格单元能够预测多个边界框。为了计算true positive的损失,只希望其中一个框负责该目标,为此选择与GT具有最高IOU的那个框

    • YOLO正样本选择
      • 当一个真实物体的中心点落在了某个cell内时,该cell就负责检测该物体。
      • 具体做法是将与该真实物体有最大IoU的边框设为正样本, 这个区域的类别真值为该真实物体的类别,该边框的置信度真值为1。
    • YOLO负样本选择
      • 除了上述被赋予正样本的边框,其余边框都为负样本。负样本没有类别损失与边框位置损失,只有置信度损失,其真值为0。

    YOLO使用预测值和GT之间的误差平方的求和(MSE)来计算损失。 损失函数包括

    • localization loss -> 坐标损失(预测边界框与GT之间的误差)
    • classification loss -> 分类损失
    • confidence loss -> 置信度损失(框里有无目标, objectness of the box)

    坐标损失

    坐标损失也分为两部分,坐标中心误差和位置宽高的误差,其中 1 i j o b j \mathbb{1}^{obj}_{ij} 1ijobj 表示第i个网格中的第j个预测框是否负责obj这个物体的预测,只有当某个预测框对某个物体负责的时候,才会对box的coordinate error进行惩罚,而对哪个物体负责就看其预测值和GT box的IoU是不是在那个网格的所有box中最大。

    我们可以看到,对于中心点的损失直接用了均方误差,但是对于宽高为什么用了平方根呢?这里是这样的,我们先来看下图:

    上图中,蓝色为bounding box,红色框为真实标注,如果W和h没有平方根的话,那么bounding box跟两个真实标注的位置loss是相同的。但是从面积看来B框是A框的25倍,C框是B框的81/25倍。B框跟A框的大小偏差更大,所以不应该有相同的loss。

    如果W和h加上平方根,那么B对A的位置loss约为3.06,B对C的位置loss约为1.17,B对A的位置loss的值更大,这更加符合我们的实际判断。所以,算法对位置损失中的宽高损失加上了平方根。
    而公式中的 λ c o o r d \lambda_{coord} λcoord 为位置损失的权重系数,在pascal VOC训练中取5。

    置信度损失

    置信度也分成了两部分,一部分是包含物体时置信度的损失,一个是不包含物体时置信度的值。

    其中前一项表示有无人工标记的物体落入网格内,如果有,则为1,否则为0.第二项代表预测框bounding box和真实标记的box之间的IoU。值越大则box越接近真实位置。

    confidence是针对预测框bounding box的,由于每个网格有两个bounding box,所以每个网格会有两个confidence与之相对应。

    从损失函数上看,当网格i中的第j个预测框包含物体的时候,用上面的置信度损失,而不包含物体的时候,用下面的损失函数。对没有物体的预测框的置信度损失,赋予小的loss weight, 记为在pascal VOC训练中 λ n o o b j \lambda_{noobj} λnoobj取0.5。有有物体的预测框的置信度损失和类别的loss的loss weight正常取1。

    类别损失

    类别损失这里也用了均方误差。其中 1 i o b j \mathbb{1}^{obj}_{i} 1iobj 表示有无物体的中心点落到网格i中,如果网格中包含有物体object的中心的话,那么就负责预测该object的概率。

    YOLOv1的缺点
    由于YOLOV1的框架设计,该网络存在以下缺点:

    • 每个网格只对应两个bounding box,当物体的长宽比不常见(也就是训练数据集覆盖不到时),效果较差。
    • 原始图片只划分为7x7的网格,当两个物体靠的很近时,效果比较差。
    • 最终每个网格只对应一个类别,容易出现漏检(物体没有被识别到)。
    • 对于图片中比较小的物体,效果比较差。这其实是所有目标检测算法的通病。
    展开全文
  • YOLO系列详解:YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5

    万次阅读 多人点赞 2021-03-15 10:57:00
    一、前言 YOLO系列是one-stage且是基于深度学习的回归方法,而...1、统一网络:YOLO没有显示求取region proposal的过程。Faster R-CNN中尽管RPN与fast rcnn共享卷积层,但是在模型训练过程中,需要反复训练RPN网络和fa
  • YOLOv1、YOLOv2和YOLOv3对比

    千次阅读 2020-06-06 10:04:22
    YOLOv1、YOLOv2和YOLOv3对比R-CNN系列YOLOv1结构目标输出网络训练YOLOv1的局限性和R-CNN系列的对比YOLOv2结构目标输出网络训练关于YOLO9000YOLOv3结构目标输出网络训练YOLOv3系统做过的不成功的尝试未来 YOLO深度...
  • YOLO系列:YOLOv1,YOLOv2,YOLOv3,YOLOv4,YOLOv5简介

    万次阅读 多人点赞 2020-09-21 09:09:36
    YOLO系列:YOLOv1,YOLOv2,YOLOv3,YOLOv4,YOLOv5简介YOLO系列是基于深度学习的回归方法。RCNN, Fast-RCNN,Faster-RCNN是基于深度学习的分类方法。YOLO官网:https://github.com/pjreddie/darknet​github.comYOLO v...
  • 1.YOLOv1论文原文 2.本人在精度论文标注版本,标注内容来自(yolov1PPT,B站UP主同济子豪兄论文精度) 3.YOLOv1推测阶段最经典PPT,内容十分详细 比较适合初学YOLOv1同学,精度论文的资料,帮助理解
  • 在v1、v2的原理和技巧介绍之后,v3除了网络结构,...1. Yolov3网络结构 1.1 backbone:Darknet-53 Yolov3使用Darknet-53作为整个网络的分类骨干部分。backbone部分由Yolov2时期的Darknet-19进化至Darknet-53,加深了
  • YOLO深度卷积神经网络已经经过原作者Joseph Redmon经过了3代4个经典版本(含YOLOv2和...需要注意的是,yolov1-v4都是有论文的,而v5并没有论文,只有开源的代码,而且一直保持更新状态。 发展历程 2016.5.9 yolov1 20
  • YOLO算法最全综述:从YOLOv1到YOLOv5

    千次阅读 多人点赞 2020-10-25 09:30:00
    干货 作者:初识cv,编辑:极市平台 来源丨https://zhuanlan.zhihu.com/p/136382095 导读 YOLO系列是基于深度学习的回归方法,本文详细介绍了从YOLOv1至最新YOLOv5五种方法的主要思路、改进策略以及优缺点。...
  • YOLOv1~v4入门

    千次阅读 2020-09-22 14:34:33
    一、开山之作:YOLOv1 1.1 简介 在YOLOv1提出之前,R-CNN系列算法在目标检测领域独占鳌头。R-CNN系列检测精度高,但是由于其网络结构是双阶段(two-stage)的特点,使得它的检测速度不能满足实时性,饱受诟病。为了...
  • YoloV1——总结

    千次阅读 2022-03-07 15:03:55
    YoloV1是一个快速、准确的目标检测网络,优缺点如下: 优点: 1.具备实时性,网络运行速度超过45fps 3.网络结构简单,端到端 4.可用于多种对象的检测 缺点: 1.目标定位较粗糙 2.对小目标检测不太好 3.每个...
  • YOLO算法系列之YOLOv1精讲

    千次阅读 2021-04-22 19:07:29
    YOLOv1算法是YOLO系列算法的基础,理解YOLOv1可以更好的理解YOLO系列算法。希望通过本文的讲解,能帮助你更好的理解YOLO系列算法。 YOLOv1网络结构 首先我们要理解的是yolo的网络结构,如图1所示,其实
  • YOLOv1论文阅读笔记

    千次阅读 2022-01-25 19:32:18
    YOLOv1论文笔记
  • Yolo系列__Yolov1简介

    千次阅读 2022-04-19 14:34:41
    Yolov
  • Github_YOLOv1_CCPD.zip

    2021-09-26 09:59:02
    Github_YOLOv1_CCPD项目的存储权重
  • Yolov1发表之后,计算机视觉领域出现了很多trick,例如批归一化、多尺度训练等等,v2也尝试借鉴了R-CNN体系中的anchor box,所有的改进提升,下面逐一介绍。 1. Batch Normalization(批归一化)* 检测系列的网络...
  • 大家好,我是极智视界,本文详细介绍一下 YOLOv1 算法的设计与实现,包括训练。
  • YOLOv1——YOLOv3的一些理解和总结

    千次阅读 2021-11-11 19:40:40
    1.1 YOLOv1 YOLOv1最值得说的当然是YOLO网络提出本身,使用回归的方法端到端解决了目标检测问题。 一个值得一提的细节就是,YOLOv1采用了将一副图片划分为多个grid cell的方法,每个grid cell仅预测出两个框,最终...
  • YoloV1、YoloV2和YoloV3实现细节和区别

    千次阅读 2020-03-26 15:40:30
    YoloV1:对比R-CNN 出处: 《You Only Look Once: Unified, Real-Time Object Detection》 背景: RCNN存在region proposal 过程,Selective Search每张图花费1~2秒,不能做到real-time Proposals太多会出现很...
  • 一文读懂 YOLOv1,v2,v3,v4 发展史

    千次阅读 2020-05-08 23:31:49
    文章目录一、任务描述二、设计思想三、发展历程1. YOLOv12. YOLOv23. YOLOv34. YOLOv4四、总结 一、任务描述 目标检测是为了解决图像里的物体是什么,在哪里的问题。输入一幅图像,输出的是图像里每个物体的类别和...
  • YOLOv1损失函数代码详解

    千次阅读 2021-11-22 21:30:40
    损失函数:

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 52,421
精华内容 20,968
关键字:

yolov1

友情链接: websocket-sharp-master.zip