目录

目标检测的历史发展历程:

Yolo1

论文地址

Yolo1结构图:

设计思路:

Yolo1输出形状

bbox的置信度计算

bbox的所属类的置信度计算

Yolo1的损失函数

四个部分

loss函数设计的缺陷

总结Yolo1的优点和需要改进的地方

优点:

需要改进之处:

Yolo2

论文地址:

Yolo2网络结构:

Yolo2损失函数

Yolo2做的优化

High resolution classifier(高分辨率图像分类器)

增加BN移除dropout

Convolution with anchor boxes(使用先验框)

去掉全连接层的全卷积网络多尺度训练

尺寸聚类

Fine-Grained Features(passthrough层检测细粒度特征)

总结Yolo2的效果优点

Yolo3

论文地址:

网络结构:

Yolo3改进之处

引入FPN(多尺度预测)

主干网络改为DarkNet-53

二分类交叉损失熵分类

Yolo4

论文地址

结构图

堆trick的v4主要的创新点:

从结构4个部分来看创新点:

相关研究论文:

如何提升YOLO对小目标检测的精度


目标检测的历史发展历程:

图片引自:https://arxiv.org/pdf/1905.05055.pdf

可以看到yolo出现的比较晚,R-CNN系列算法相对较早,同时R-CNN系列的算法也继承了传统目标检测算法的思路,分为两个阶段来执行,第一步先获取候选框,第二步再做分类。

为了做到提速,并且简化检测流程做到更加端到端效果,yolo系列换了思路,利用整张图作为网络的输入,直接在输出层回归bounding box的位置和bounding box所属的类别,做到了one-stage的效果。

R-CNN和Yolo对比,two-stage的精度高但是相对慢,one-stage的快但是相对精度有所妥协。

Yolo1

论文地址

https://arxiv.org/abs/1506.02640

Yolo1结构图:

yolov1的网络结构借鉴了 GoogLeNet 。24个卷积层,2个全链接层。(用1×1 reduction layers 紧跟 3×3 convolutional layers 取代Goolenet的 inception modules )

设计思路:

YOLO的全称是You Only Look Once,即你只用看一次。YOLO1版本是YOLO系列的开山之作,其核心思想是:把目标检测当做一个单一的回归任务。它首先将图像划分为SxS个网格(grid cell),物体真实框中心落在哪个网格上,就由该网格对应的锚框负责检测该物体

Yolo1输出形状

Yolo1是将图像分成了S*S个网格,每个cell会负责预测落在其上边物体的类别(假如一共C个类别),另外每个cell会预测B个bounding box,每个bounding box要预测(x, y, w, h)和置信度confidence共5个值,因此yolov1输出是一个S x S x (5*B+C)的一个张量tensor。

假如是PASCAL VOC数据集的20分类,取S=7,B=2,所以输出为7*7*(2*5+20)的tensor。整个图片最多识别7X7X2个box,最多识别49个目标。如上图,每一个网格只能只能预测两个框,不利于识别密集型目标和小目标。注意:class信息是针对每个网格的,confidence信息是针对每个bounding box的。

bbox的置信度计算

上边说道每个cell要预测B个bbox,每个bbox除了要回归自身的位置之外,还要附带预测一个confidence值。这个confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息,其值是这样计算的:

其中如果有object落在一个grid cell里,第一项取1,否则取0。第二项是预测的bounding box和实际的groundtruth之间的IoU值

bbox的所属类的置信度计算

在test的时候,每个网格预测的class信息和bounding box预测的confidence信息相乘,就得到每个bounding box的class-specific confidence score:

等式左边第一项就是每个网格预测的类别信息,第二三项就是每个bounding box预测的confidence。这个乘积即encode了预测的box属于某一类的概率,也有该box准确度的信息。

得到每个box的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS处理,就得到最终的检测结果。非极大值抑制解释请移步:目标检测综述(一:历史由来和古典目标检测的出现)_RayChiu757374816的博客-CSDN博客_目标检测起源

Yolo1的损失函数

四个部分

Yolo1的损失函数分为四部分坐标预测、含object的bbox confidence预测、不含object的bbox confidence预测、类别预测,参数的解释:

其中只有当某个网格中有object的时候才对classification error进行惩罚,只有当某个box predictor对某个ground truth box负责的时候,才会对box的coordinate error进行惩罚,而cell中两个bbox哪个负责就要看其预测值和ground truth box的IoU,IoU最大的负责。

loss函数设计的缺陷

不同类别数量的问题 

yolov1的损失函数简单粗暴的采用了sum-squared error loss来做这件事,这种简单粗暴的loss设计在类别数量不同的情况下存在问题: 8维的localization error和20维的classification error同等重要显然是不合理,解决办法就是设置不同的权重分数。

W和H的处理

对不同大小的box预测中,相比于大box预测偏一点,小box预测偏一点肯定更不能被忍受的。而sum-square error loss中对同样的偏移loss是一样。 为了缓和这个问题,作者用了一个比较取巧的办法,就是将box的width和height取平方根代替原本的height和width。这个参考下面的图很容易理解,小box的横轴值较小,发生偏移时,反应到y轴上相比大box要大。

总结Yolo1的优点和需要改进的地方

优点:

  1. 速度快,达到了完全实时的效率
  2. 错误率低(相对于faster rcnn会把很多背景预测为物体)
  3. 泛华能力强(论文试验-在美术绘画作品中也有较好的效果)

需要改进之处:

  1. 由于输出层为全连接层,因此在检测时,YOLO训练模型只支持与训练图像相同的输入分辨率。
  2. 虽然每个格子可以预测B个bounding box,但是最终只选择只选择IOU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体。当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个
  3. YOLO loss函数中,大物体IOU误差和小物体IOU误差对网络训练中loss贡献值接近(虽然采用求平方根方式,但没有根本解决问题)。因此,对于小物体,小的IOU误差也会对网络优化过程造成很大的影响,从而降低了物体检测的定位准确性。

Yolo2

论文地址:

https://arxiv.org/abs/1612.08242

Yolo2网络结构:

可以看到骨干网络换成了DarkNet

Yolo2损失函数

只有YOLO v1明确提出了loss公式,V2和V3都使用了anchor的概念,因此计算loss的方式做出了调整 。

Yolo2做的优化

Yolo1 定位误差高,而且相比于基于区域提议的方法,Yolo1 的召回率偏低。针对Yolo1的这些缺点做了以下优化:

High resolution classifier(高分辨率图像分类器)

V1 使用 224×224 分辨率图像训练分类网络,并且将分辨率增加到 448 用于检测,mAP提升了4%

增加BN移除dropout

在所有的卷积层后增加 BatchNormalization 这可以显著改善网络的收敛性,并且有利于正则化模型,防止过拟合。增加 BN以后移除网络的 dropout 。这将 mAP 提升 2%。

Convolution with anchor boxes(使用先验框)

学习RPN使用先验框,这种操作基于的理论是:“模型学习拟合偏移量相对于学习直接拟合出坐标操作会更加容易”,简单说就是预先设定一些预测框,然后在训练的过程中去调整这些检测框(这个过程就是在学习偏移量)

网络通过32 降采样因子,网络输出特征图大小为 13×13;yolov2 将类预测机制与空间位置分离,为每个锚框预测类和目标。v1在每幅图像仅预测 98个框,但是 v2在每幅图像预测超过 1000个框(前提每个anchor 9个Anchor Boxes,实际上通过后边讲的聚类效果发现5个box就能达到Faster RCNN的9中box的效果)。使用锚框导致精度略微下降,但是召回率显著提高。

去掉全连接层的全卷积网络多尺度训练

和SSD一样,模型中只包含卷积和平均池化层(平均池化是为了变为一维向量,做softmax分类)。这样做一方面是由于物体检测中的目标,只是图片中的一个区块,它是局部感受野,没必要做全连接。而是为了输入不同尺寸的图片,如果采用全连接,则只能输入固定大小图片了。全卷积网络使得模型支持多种尺度图像的输入并轮流进行训练

尺寸聚类

通过在训练数据集上运行 k−means聚类算法,为预测框找到较优的先验尺寸,更科学与更准确的选择Anchor Box的尺寸,检测效果更好。

Fine-Grained Features(passthrough层检测细粒度特征)

对象检测面临的一个问题是图像中对象会有大有小,输入图像经过多层网络提取特征,最后输出的特征图中(比如YOLO2中输入416*416经过卷积网络下采样最后输出是13*13),较小的对象可能特征已经不明显甚至被忽略掉了。为了更好的检测出一些比较小的对象,最后输出的特征图需要保留一些更细节的信息。

YOLO2引入一种称为passthrough层的方法在特征图中保留一些细节信息。Passthrough  层类似于 ResNet中的恒等映射,通过将相邻特征堆叠到不同的通道而不是空间位置,来连接高分辨率特征和低分辨率特征。具体来说,就是在最后一个pooling之前,特征图的大小是26*26*512,将其1拆4,直接传递(passthrough)到pooling后(并且又经过一组卷积)的特征图,两者叠加到一起作为输出的特征图。

总结Yolo2的效果优点

  1. 小目标检测召回率好了一些
  2. 物体距离近的检测效果好了一些
  3. 精度好了一些

Yolo3

论文地址:

https://arxiv.org/abs/1804.02767

网络结构:

Yolo3改进之处

引入FPN(多尺度预测)

YOLOv3 借鉴了 FPN 的思想,从不同尺度提取特征。相比 YOLOv2,YOLOv3 提取最后 3 层特征图,不仅在每个特征图上分别独立做预测,同时通过将小特征图上采样到与大的特征图相同大小,然后与大的特征图拼接做进一步预测。用维度聚类的思想聚类出 9 种尺度的 anchor box,将 9 种尺度的 anchor box 均匀的分配给 3 种尺度的特征图。

YOLOv2每个网格分配 5 个锚框,YOLOv3 为每个网格分配 3 个尺度的特征图,每个尺度分配 3 个锚框,一共使用 9 个锚框。输出为N×N×[3∗(4+1+C)] 维度的张量,C为预测的类别数量。

主干网络改为DarkNet-53

更好的基础分类网络(darknet-53, 类似于ResNet引入残差结构)

二分类交叉损失熵分类

在实际应用场合中,一个物体有可能输入多个类别,单纯的单标签分类在实际场景中存在一定的限制。举例来说,一辆车它既可以属于 car(小汽车)类别,也可以属于 vehicle(交通工具),用单标签分类只能得到一个类别。因此在 YOLO v3 在网络结构中把原先的 softmax 层换成了逻辑回归层,从而实现把单标签分类改成多标签分类。用多个 logistic 分类器代替 softmax 并不会降低准确率,可以维持 YOLO 的检测精度不下降。

Softmax和logistic 之间的区别是在一个多分类任务中,如果类别是互斥的使用Softmax,因为Softmax类似于onehot编码,只能有一个被激活;如果类别是不互斥的可以使用Logistic,可能同时激活多个单元。

Yolo4

YOLOv4的特点是集大成者,俗称堆料。但最终达到这么高的性能,一定是不断尝试、不断堆料、不断调参的结果

论文地址

https://arxiv.org/abs/2004.10934

结构图

Backbone:CSPDarknet53, Neck:SPP,PAN, Head:YOLOv3
 YOLOv4 = CSPDarknet53+SPP+PAN+YOLOv3

堆trick的v4主要的创新点:

从结构4个部分来看创新点:

  1. 输入端:这里指的创新主要是训练时对输入端的改进,主要包括Mosaic数据增强、cmBN、SAT自对抗训练
  2. BackBone主干网络:将各种新的方式结合起来,包括:CSPDarknet53、Mish激活函数、Dropblock
  3. Neck:目标检测网络在BackBone和最后的输出层之间往往会插入一些层,比如Yolov4中的SPP模块FPN+PAN结构
  4. Prediction:输出层的锚框机制和Yolov3相同,主要改进的是训练时的损失函数CIOU_Loss,以及预测框筛选的nms变为DIOU_nms

相关研究论文:

        Mosaic数据增强:参考2019年的Cutouthttps://arxiv.org/abs/1905.04899v2

        CSPDarknet:参考2019年的CSPNethttps://arxiv.org/pdf/1911.11929.pdf

        Mish激活函数:参考2019年的https://arxiv.org/abs/1908.08681

        Dropblock:参考2018年的https://arxiv.org/pdf/1810.12890.pdf

        SPP:参考2019年的《DC-SPP-Yolo》https://arxiv.org/ftp/arxiv/papers/1903/1903.08589.pdf

        PAN:参考2018年的PANethttps://arxiv.org/abs/1803.01534

        CIOU_loss:参考2020年的https://arxiv.org/pdf/1911.08287.pdf

当然,这只是其中一部分,还有其他的创新点,没有一一列出。

如何提升YOLO对小目标检测的精度

这个问题要从不同版本的角度去分析,比如针对v1版本,可以说v2版本的聚类得到的先验框回归偏差可能会解决小目标检测问题。针对v2可以说v3的多尺度预测、更好的分类网络都能提升对小目标的检测准确率。针对v3可以说v4众多的trick的引入使得网络性能巨大的提升,自然就比v3小目标监测准确率高。

要是针对v5,或者说针对整个base YOLO的模型,那解决的方法就是类似SSD那样在每个尺度的特征图上抽样送入末端卷积层去处理,自然对小目标的检测率会提升,比如说base EfficiNet模型。

或者说效仿base Transformer模型将输入图片划分为多个patch,然后在末端去使用like RCNN去处理,有放大局部目标物体的作用。

参考:目标检测之YOLO算法:YOLOv1,YOLOv2,YOLOv3,TinyYOLO,YOLOv4,YOLOv5,YOLObile,YOLOF,YOLOX详解 - 知乎

如何看待新提出来的YOLOv4? - 知乎

深入浅出Yolo系列之Yolov3&Yolov4&Yolov5&Yolox核心基础知识完整讲解 - 知乎

行为分析(六):人形检测部分(一):YOLOv1-v5的学习笔记_是魏小白吗的博客-CSDN博客

yolo系列网络算法的演变过程相关推荐

  1. YOLO系列 --- YOLOV7算法(二):YOLO V7算法detect.py代码解析

    YOLO系列 - YOLOV7算法(二):YOLO V7算法detect.py代码解析 parser = argparse.ArgumentParser()parser.add_argument('- ...

  2. YOLO系列 --- YOLOV7算法(四):YOLO V7算法网络结构解析

    YOLO系列 - YOLOV7算法(四):YOLO V7算法网络结构解析 今天来讲讲YOLO V7算法网络结构吧~ 在train.py中大概95行的地方开始创建网络,如下图(YOLO V7下载的时间不 ...

  3. YOLO系列网络训练数据准备工具—Yolo_mark

    项目介绍 Yolo_mark是一个检测任务数据集制作工具,制作完成后的数据格式不是VOC或者COCO的数据格式,从它的名字也可以看出,它是专门为了YOLO系列的网络训练准备数据的,YOLO这一点还是很 ...

  4. Yolo系列检测网络不再孤单,延伸框架层出不穷(附框架源代码)

    点击蓝字关注我们 关注并星标 从此不迷路 计算机视觉研究院 学习群|扫码在主页获取加入方式 计算机视觉研究院专栏 作者:Edison_G 至今,目标检测框架已经百花齐放,各种应用场景.应用限制的要求, ...

  5. YOLO系列算法详解(一)

    一.深度学习经典检测方法 1.检测任务中阶段的意义 对于单阶段(one-stage)检测来说,输入一张图像,经过一个卷积神经网络,输出一个边界框,只需要得到框的(x1,y1)和(x2,y2)四个值即可 ...

  6. YOLO系列(v1~v3)的学习及YOLO-Fastest在海思平台的部署(中)

    YOLO系列(v1~v3)的学习及YOLO-Fastest在海思平台的部署(上) YOLO系列(v1~v3)的学习及YOLO-Fastest在海思平台的部署(中) YOLO系列(v1~v3)的学习及Y ...

  7. YOLO系列算法精讲:从yolov1至yolov4的进阶之路(呕心沥血2万字超全整理,建议收藏!)

    从刚开始接触YOLO到现在也已经有大半年时间了,中间也陆陆续续接触过其它网络.最近又抽时间研究了一下YOLOv4. 因此,趁此机会,将yolov1到yolov4进行一个全面的整理和总结,希望对即将入坑 ...

  8. 目标检测——YOLO系列算法(YOLOv4、YOLOv5)的学习笔记

    目录 1 前言 2 致谢 3 YOLO模型列表 4 模型结构 2.1 Backbone Focus--网格下采样 CSPDarknet53 2.3 Neck -- SPP & PAN SPP: ...

  9. 目标检测 YOLO系列算法

    文章目录 1. YOLO算法 1.1 Yolo算法思想 1.2 Yolo的网络结构 1.2.1 网络输入 1.2.2 网络输出 1.7X7网格 2x30维向量 1.3 Yolo模型的训练 1.3.1训 ...

最新文章

  1. 复分析可视化方法:笔记:log(z)的可视化微分法
  2. [Usaco2005 Open]Disease Manangement 疾病管理 BZOJ1688
  3. piaoxue/feixue驱动程序分析
  4. 【组合数学】生成函数 ( 使用生成函数求解不定方程解个数示例 )
  5. 201621123053 张雨阳软工作业2
  6. Windbg Extension NetExt 使用指南 【2】 ---- NetExt 的基本命令介绍
  7. 谷歌浏览器有哪些好看的主题_Kibou 简洁的Typecho主题
  8. GitHub推出“AI程序员”插件 !
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的医院HR人事管理系统
  10. 跟着开源项目学因果推断——mr_uplift(十五)
  11. mysql列不明确_PHP和MYSQL:如何解决JOIN操作中不明确的列名?
  12. linux: tee日志记入文件
  13. android 动画遮盖,android view用动画实现遮罩效果
  14. 【linux】详解TOP命令
  15. iphone开源汇总
  16. 复旦大学计算机科学与技术,复旦大学计算机科学技术学院
  17. html5半径,化学元素原子半径大小比较
  18. Linux磁盘监控工具说明
  19. 3ds Max导出OBJ的mtl贴图路径不正确
  20. 【解决】Cloning into ‘xxx‘... remote: HTTP Basic: Access denied fatal:

热门文章

  1. PS中如何将文字的选区转换成路径
  2. javascript DOM 操作
  3. 关于 uview-ui 版本号不兼容问题
  4. PHP搜索excel表格数据
  5. 社群运营之微信群群规怎么写?
  6. android 程序到手机号码,Android的电话应用将能够告诉你为什么企业要给你打电话...
  7. jQuery实现在线预览PDF文件
  8. Java 注解和反射
  9. 基于Seq2Seq的中文聊天机器人编程实践(Encoder编码器-Decoder解码器框架 + Attention注意力机制)
  10. 撰写外文时怎样引用中文文献?