当前位置: 首页 > news >正文

YOLO系列目标检测算法-YOLOv1

YOLO系列目标检测算法目录 - 文章链接

  • YOLO系列目标检测算法总结对比- 文章链接
  • YOLOv1- 文章链接
  • YOLOv2- 文章链接
  • YOLOv3- 文章链接
  • YOLOv4- 文章链接
  • Scaled-YOLOv4- 文章链接
  • YOLOv5- 文章链接
  • YOLOv6- 文章链接
  • YOLOv7- 文章链接
  • PP-YOLO- 文章链接
  • PP-YOLOv2- 文章链接
  • YOLOR- 文章链接
  • YOLOS- 文章链接
  • YOLOX- 文章链接
  • PP-YOLOE- 文章链接

本文总结:

  1. 与基于滑动窗口等多阶段目标检测算法不同,本文提出了一种简单的网络结构,把目标检测当做回归问题,可以直接预测目标
  2. YOLO把输入的图片划分成S×S的网格,如果目标的中心落在某个网格单元中,则该网格单元负责去预测该目标;
  3. 每一个网格单元预测B个框和这些框置信度分数及其各标签分类概率,拿VOC20类目标检测数据集来说,输入一张448×448的图片,输出7×7×(B×5+20)个框;
  4. 另外设计了Fast YOLO,使用9层卷积层和每层使用较少的卷积核数,其他与YOLO完全一致;
  5. YOLO也有一定缺陷,因为每个网格单元只能输出B个框且只能是一个类,所以对于较为密集的目标可能会有漏检的情况。

深度学习知识点总结

专栏链接:
https://blog.csdn.net/qq_39707285/article/details/124005405

此专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。


文章目录

    • @[toc]
  • 1. 简介
  • 2. YOLO
    • 2.1 网络设计
    • 2.2 训练
    • 2.3 推理
    • 2.4 YOLO的限制
  • 3. 结论

YOLO系列目标检测算法-YOLOv1

  2015.6.8 YOLOv1:《You Only Look Once: Unified, Real-Time Object Detection》

1. 简介

  YOLO——是一阶段目标检测的开端。之前的目标检测算法通常是调整分类器的用途以用作目标检测,例如像deformable parts model(DPM)这样的系统使用滑动窗口方法,分类器在整个图像上各个位置运行。R-CNN使用区域候选的方法,首先在图像中生成潜在的边界框,然后对这些候选框进行分类,分类后,使用后处理用于细化边界框,消除重复检测框,并基于场景中的其他目标重新扫描框。这些复杂的算法很慢,很难优化,因为每个单独的组件都必须单独训练。

  本文将目标检测重新定义为一个单一的回归问题,直接从图像像素预测边界框坐标和类别概率。使用该系统,只需看一次图像(YOLO)即可预测存在的目标及其位置。

  YOLO对完整图像进行训练,并直接优化检测性能。单个卷积网络同时预测多个边界框和这些框的类概率,与传统的目标检测方法相比,这种一体化模型有几个优点:

在这里插入图片描述

  • 首先,YOLO非常快。因为YOLO将目标检测作为一个回归问题,所以不需要复杂的流水线处理过程。只需在测试时对新图像运行神经网络来预测检测结果;
  • YOLO在进行预测时对图像进行全局推理。与基于滑动窗口和区域候选的算法不同,YOLO在训练和测试期间可以看到整个图像,因此它隐式编码了关于类及其外观的上下文信息。Fast R-CNN是一种顶级检测方法,它会将图像中的背景错误地定位为物体,因为它看不到更大的背景。与Fast R-CNN相比,YOLO的背景错误数量不足一半;
  • YOLO学习目标的泛化表示。当在自然图像上进行训练并在图片上进行测试时,YOLO比DPM和R-CNN等顶级检测方法表现出色。由于YOLO具有高度的通用性,当应用于新域或例外输入时,它不太可能崩溃。

YOLO在精确度方面仍然落后于最先进的检测系统。虽然它可以快速识别图像中的对象,但它很难精确定位某些对象,尤其是小对象。

2. YOLO

  YOLO联合所有的组件到一个神经网络中。网络使用整个图片的特征去预测每一个目标框,同时预测每个框的类别。YOLO的设计能确保端到端的训练和实时的预测速度,同时保证高的精度。

  YOLO把输入的图片划分成S×S的网格,如果目标的中心落在某个网格单元中,则该网格单元负责去预测该目标。

  每一个网格单元预测B个框和这些框置信度分数。这些置信度分数反映了模型对预测框包含目标的信心以及它认为框预测的准确性。定义置信度为 Pr(Object)*IOU^{truth}_{pred}。如果没有目标落入网格单元,则置信度分数应为0,否则值为预测的框与GT框的IOU。

  每一个预测框有5个预测值:x,y,w,h和置信度。(x,y)表示框相对于网格单元边界的中心,(w,h)表示相对于整个图片的宽和高,最后置信度表示预测框和GT框的IOU。每一个网格单元同时预测C个类别的概率Pr(Class_i|Object)。这些概率取决于包含目标的网格单元,每个网格单元仅预测一组类别概率,与方框B的数量无关。

  在测试时,将条件类别概率和单个框置信度值相乘,
P r ( C l a s s i ∣ O b j e c t ) ∗ P r ( O b j e c t ) ∗ I O U p r e d t r u t h = P r ( C l a s s i ) ∗ I O U p r e d t r u t h Pr(Class_i|Object)*Pr(Object)*IOU^{truth}_{pred}=Pr(Class_i)*IOU^{truth}_{pred} Pr(ClassiObject)Pr(Object)IOUpredtruth=Pr(Classi)IOUpredtruth
  这给了每个预测框的特定类别的置信度得分,这些分数编码了该类出现在框中的概率以及预测框与GT目标的匹配程度。

  对于VOC数据集,使用S=7,B=2,VOC数据集包含20个类别,所以YOLO最终预测7×7×(2×5+20)=7×7×30个向量。

2.1 网络设计

  网络结构包含24层卷积层和2个全连接层,在3×3卷积后使用1×1卷积,整体网络结构图如图3所示。

  另外还设计了一个Fast YOLO,用于突破目标检测速度的界限,Fast YOLO使用9层卷积层和每层使用较少的卷积核数,其他与YOLO完全一致。

2.2 训练

  在ImageNet-1000分类数据集上预训练模型,预训练时使用图3结构中的前20层,再加上一个全局池化层,和一个全连接层。

  然后转换模型用于检测训练,去除分类训练时添加的层,添加4个卷积层和2个全连接层,因为检测需要更细粒度的特征,所以改变输入图片大小从224×224到448×448。

  最后一层预测类别概率和框坐标,使用图片的宽和高归一化预测框的宽和高,使其取值范围在[0,1]。将边界框x和y坐标参数化为特定网格单元位置的偏移量,以便它们也在0和1之间。

  对最后一层使用线性激活函数,其他所有层使用以下leaky非线性激活函数:
ϕ ( x ) = { x , if  x > 0 0.1 x , otherwise \phi(x)= \begin{cases} x, & \text{if $x>0$} \\ 0.1x, & \text{otherwise} \end{cases} ϕ(x)={x,0.1x,if x>0otherwise
  使用误差平方和优化模型,之所以使用平方和是因为它很容易优化,但它与最大化平均精度的目标并不完全一致。它将定位误差和分类误差同等权重,会导致分类误差可能并不理想。此外,在每个图像中,许多网格单元不包含任何目标,这会将这些单元格的“置信度”分数推向零,通常会压倒包含目标的单元格的梯度。这可能导致模型不稳定,导致训练过早偏离。

  为了解决这个问题,增加了边界框坐标预测的损失,并减少了不包含目标框的置信预测的损失。使用两个参数 λ c o o r d \lambda_{coord} λcoord λ n o o b j \lambda_{noobj} λnoobj,并设置 λ c o o r d = 5 \lambda_{coord}=5 λcoord=5 λ n o o b j = 0.5 \lambda _{noobj}=0.5 λnoobj=0.5

  平方和误差也同样区别对待了大框和小框中的误差,从平方和计算方式可以看出,大框中的小偏差比小框中的重要。为了解决这个问题,预测边界框宽度和高度使用它们的平方根,而不是直接预测宽度和高度。

  每个网格单元会预测多个边界框,在训练时,对于每个目标只需要一个边界框预测器来负责,计算预测的边界框与GT的IOU,取最大的那个作为预测器,这会导致边界框预测器之间的专门化,每个预测器都能更好地预测物体的尺寸、纵横比或类别,从而提高整体召回能力。

  训练过程中的损失函数如下:

在这里插入图片描述

  注意,如果网格单元中存在目标,损失函数只惩罚分类错误的。如果该预测框为“负责”GT目标的,它也只惩罚边界框坐标错误,其他预测的框不参与loss计算。

2.3 推理

  就像在训练中一样,预测测试图像的检测框只需要一次网络评估,例如对于VOC数据集,每张图片只需要预测98个框。

  网格设计加强了边界框预测中的空间多样性。通常很清楚一个目标属于哪个网格单元,网络只为每个目标预测一个框。然而,一些大型目标或多个单元格边界附近的目标可以通过多个单元格很好地定位,NMS可用于修复这些重复检测框。虽然与R-CNN或DPM一样,NMS对性能并不重要,但会增加2-3%的mAP。

2.4 YOLO的限制

  YOLO对边界框预测施加了很强的空间限制,因为每个网格单元只能预测两个框,并且只能有一个类。这种空间限制限制了模型可以预测的附近目标的数量,很难处理成群出现的小目标对象,例如成群的鸟。

  由于YOLO从数据中学习预测边界框,因此它很难推广到具有新的或不寻常的纵横比或配置的目标。YOLO模型还使用相对粗糙的特征来预测边界框,因为YOLO的体系结构包含多个下采样层。

  最后,当训练接近检测性能的,此时YOLO的损失函数对小边界框和大边界框中的错误处理相同。大框中的小错误通常是良性的,但小框中的小错对IOU的影响更大,主要错误来源是不正确的定位。

3. 结论

  本文介绍了一种用于目标检测的统一的模型——YOLO,机构简单,直接端到端训练。Fast YOLO是目前速度最快的通用目标检测器,YOLO还可以很好地推广到新的领域,使其成为依赖快速、优秀目标检测的应用程序的理想选择。

相关文章:

  • JavaScript高级,ES6 笔记 第三天
  • 【雷达图】R语言绘制雷达图(ggradar),NBA季后赛数据为例
  • 机器学习笔记 - 在QT/PyTorch/C++ 中加载 TORCHSCRIPT 模型
  • redis 技术分享
  • 怎么让面试官喜欢你?
  • 深度学习模型理解-CNN-手写数据字代码
  • C# ZBar解码测试(QRCode、一维码条码)并记录里面隐藏的坑
  • 【技术美术图形部分】图形渲染管线3.0-光栅化和像素处理阶段
  • css:一个容器(页面),里面有两个div左右摆放并且高度和容器高度一致,左div不会随着页面左右伸缩而变化,右div随页面左右伸缩宽度自适应(手写)
  • Kubernetes 1.25 集群搭建
  • 【每周CV论文推荐】GAN在医学图像生成与增强中的典型应用
  • python毕业设计项目源码选题(16)跳蚤市场二手物品交易系统毕业设计毕设作品开题报告开题答辩PPT
  • C# 连接 SqlServer 数据库
  • 【408计算机组成原理】—进位计数制(二)
  • 拆解一下汽车电子软件开发工具链
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Consul Config 使用Git做版本控制的实现
  • JAVA_NIO系列——Channel和Buffer详解
  • JS+CSS实现数字滚动
  • js递归,无限分级树形折叠菜单
  • Python 反序列化安全问题(二)
  • windows-nginx-https-本地配置
  • 如何优雅地使用 Sublime Text
  • 算法---两个栈实现一个队列
  • 算法系列——算法入门之递归分而治之思想的实现
  • 问题之ssh中Host key verification failed的解决
  • NLPIR智能语义技术让大数据挖掘更简单
  • 国内开源镜像站点
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #单片机(TB6600驱动42步进电机)
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (强烈推荐)移动端音视频从零到上手(下)
  • (十六)Flask之蓝图
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (一)RocketMQ初步认识
  • ******之网络***——物理***
  • ***详解账号泄露:全球约1亿用户已泄露
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • *Django中的Ajax 纯js的书写样式1
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .net MySql
  • .NET Reactor简单使用教程
  • .net web项目 调用webService
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • .NET中的十进制浮点类型,徐汇区网站设计
  • //解决validator验证插件多个name相同只验证第一的问题
  • ??javascript里的变量问题