首页 > 其他分享 >【论文解析】关于YOLO系列的自我概括

【论文解析】关于YOLO系列的自我概括

时间:2024-12-07 14:09:49浏览次数:9  
标签:box 概括 text sum YOLO 目标 bounding 解析

前言

目标检测是计算机视觉中的一个比较中间层面的任务,检测的步骤包括两部分:目标定位和目标检测,定位是为了找到物体在图像中的位置,而检测是为了将这个物体是什么返回出来,这就是两个阶段的检测,俗称two-stage,也就是两阶段检测。

可以自己想一想,如果让你来设计一个方式,给一个图片自动找出目标物体,你会怎么设计?请保持这个疑问继续往下看。

DPM

Deformable Part-based Model
在深度学习流行之前,它是计算机视觉中物体检测的重要技术之一
使用一个滑窗(sliding window)在整张图像上均匀滑动,用SVM分类器评估是否有物体。

R-CNN

Region-based Convolutional Neural Network
提出来候选区的方法:region proposals
什么意思呢?就是先从图像中找到一些可能存在对象的候选区potential bounding box,这个过程叫做\(selective-serach\),在实际利用模型的时候大概有2000个左右,然后用分类器来评估这些boxes,接着通过post-processing来改善bounding boxes,消除重复的检测目标,并基于整个场景中的其他物体重新对boxes进行打分。整个流程执行下来很慢,而且因为这些环节都是分开训练的,检测性能很难进行优化。

Fast R-CNN ->Faster R-CNN

这些就是将R-CNN的性能进行提升
image

YOLOv1

You Only Look Once
想象为什么叫这个名字。人们在看到一张图片的时候只需要看一眼,就能大致知道物体的位置和种类信息,那么就是这个一眼,被迁移到了这个算法中进行实现了。
是将物体检测当做回归任务,直接将整张图像所有像素都输入得到bopunding box的坐标,box中几包含物体的置信度和class probilities。实现了端到端。

YOLO将候选区和目标检测合二为一。

首先

作者将原始图像分割成了\(S\times S\)个网格,使用这种预定义的类似候选区的预测区域方式取代了R-CNN的候选区,论文中S等于7,也就是49个网格(下文要用到,敲黑板)
image

网络结构

先按下不表怎么实现的,我们先来看看这个网络是什么样子的。
image
一张\(448\times448\times3\)的图片输入,最终输出一个\(7\times7\times30\)的张量。还记得前面的网格吗?没错,每一个网格都被拓展为\(1\times1\times30\)的向量了,一共49个,所以输出是:\(7\times7\times30\)。

那么这时候有人就会有疑问了?

那么如果存在跨网格的对象是不是就难以识别呢,其实不然,经过卷积神经网络的复杂提取和变换,网格周围的信息其实也被编码到这个30维向量中了。

这30维向量其实长这个样子。
image
前20个代表着设计之初的20种目标在该位置的概率,\(P(C_i|Object)\)表示若该网格存在一个目标,它是\(C_i\)的概率出现。

最后8个值表示两个bounding box的位置,每个bounding box需要四个值来表示,分别为\((center_x,center_y,width,height)\)
以及置信度confidence,表示每个bounding box的置信度。

\[\text {Confidence}=\operatorname{Pr}(\text {Object}) * \text {IOU}_{\text {pred}}^{\text {truth}} \]

上式含义为bounding box的置信度等于该bounding box内存在目标的概率该bounding box与实际bounding box的IOU乘积

这是针对训练而言的,也就是用于计算预测准确程度的损失函数的一部分,实际使用训练好的YOLO算法是没有实际的bounding box进行参考的,因而没有IOU。简单说来,bounding box的置信度表示它是否包含目标且位置准确的程度。

\[\begin{array}{c} \lambda_{\text {coord }} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}{i j}^{\text {obj }}\left[\left(x{i}-\hat{x}{i}\right)^{2}+\left(y{i}-\hat{y}{i}\right)^{2}\right] \ +\lambda{\text {coord }} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}{i j}^{\text {obj }}\left[(\sqrt{w{i}}-\sqrt{\hat{w}{i}})^{2}+(\sqrt{h{i}}-\sqrt{\hat{h}{i}})^{2}\right] \ +\sum{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}{i j}^{\text {obj }}\left(C{i}-\hat{C}{i}\right)^{2} \ +\lambda{\text {noobj } j} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}{i j}^{\text {noobj }}\left(C{i}-\hat{C}{i}\right)^{2} \ +\sum{i=0}^{S^{2}} \mathbb{1}{i}^{\text {obj }} \sum{c \in \text { classes }}\left(p_{i}(c)-\hat{p}_{i}(c)\right)^{2} \end{array} \]

上式第一行表示边框中心位置误差((cx,cy)误差),第二行表示边框宽度和高度误差,第三行表示边框内有目标的置信度误差,第四行表示边框内无目标的置信度误差,最后一行表示目标分类误差。总的来说,就是网络输出与真实标签的各项内容的误差平方和作为最后的输出误差,上述五项和30维输出是对应的。\(\lambda_{\text {coord}}\)用于调整bbox误差的权重,YOLO设置为5。
image

训练

YOLO现在ImageNet数据集上训练前20层卷积网络,让网络获得一部分图像特征提取能力,然后在Pascal VOC数据集上进行目标检测的训练。除了最后一层使用线性激活函数,其他层均使用Leaky Relu,同时采用DropoutData Augmention来控制过拟合的发生。

预测

训练完的YOLO网络就可以进行目标预测了,在此之前需要明确下面几个点。原论文的YOLO结构最多识别49个目标;通过调整网络结构可以识别更多的对象;YOLO中的预定义bounding box和Faster RCNN中的Anchor不一样,并没有设定bounding box的位置和大小,只是表示对一个目标预测两个bounding box,选择可能性较大的那个,仅此而已。

训练完成的YOLO网络就可以进行目标检测了,不过它的输出是49个30维向量,表示网格包含的对象类别以及该对象的可能两个bounding box位置和对应的置信度。

NMS(Non-maximal suppression)

为了向量中提取最有可能的目标及其位置,YOLO采用NMS(Non-maximal suppression,非极大值抑制算法)来实现。

NMS算法并不复杂,其核心思想非常简单:选择score最高的作为输出,与其重叠的删除,反复迭代直到处理完所有备选。在YOLO中定义score如下式,表示每个网格中目标\(C_i\)存在于第\(j\)个bounding box的概率。

\[\text {score}{i j}=P\left(C{i} | O b j e c t\right) * \text { Confidence}_{j} \]

image

总结

YOLO提出时由于one-stage特性,速度很快,FPS可以达到45,总体精度低于FastRCNN

标签:box,概括,text,sum,YOLO,目标,bounding,解析
From: https://www.cnblogs.com/myleaf/p/18591991

相关文章

  • MATLAB 在制冷循环建模中的应用:原理、方法与案例解析 
     一、制冷循环基础与MATLAB建模的意义 制冷循环是通过消耗能量将热量从低温区域转移到高温区域的过程,常见的制冷循环包括蒸气压缩式制冷循环等。在制冷系统的设计、优化与性能分析中,精确的建模至关重要。MATLAB作为一款强大的科学计算与工程仿真软件,为制冷循环建模提供......
  • C# 中的字段、属性、只读属性、构造函数赋值与反射赋值的深入解析
    在C#编程中,理解字段(Fields)、属性(Properties)、只读属性(Read-OnlyProperties)、构造函数赋值(ConstructorInitialization)以及反射赋值(ReflectionAssignment)是掌握面向对象编程和高级特性的重要一步。这些概念不仅影响代码的可维护性和可读性,还直接影响程序的性能和安全性。......
  • 【springboot编程】Spring Boot注解全面解析与实战指南
    SpringBoot的注解体系极大简化了Java应用程序的开发,减少了大量的手动配置和重复代码。通过使用注解,开发者能够快速构建具有复杂功能的应用程序,同时保持代码的简洁和可维护性。无论是异常处理、自动配置,还是依赖注入,这些注解都为开发者提供了灵活而强大的工具,使应用程序的开发......
  • HTML5 拖拽 API 深度解析
    一、HTML5拖拽API深度解析1.1背景与发展HTML5的拖拽API是为了解决传统拖拽操作复杂而设计的。传统方法依赖鼠标事件和复杂的逻辑计算,而HTML5提供了标准化的拖拽事件和数据传递机制,使得开发者能够快速实现从一个元素拖拽到另一个元素的交互。1.2拖拽API的核......
  • Vue 组件通信全面解析
    Vue组件通信全面解析:方式、原理、优缺点及最佳实践在Vue开发中,组件通信是一个重要的核心问题。随着应用复杂度的增加,如何在组件之间有效传递数据、触发事件,直接影响代码的可维护性和可扩展性。Vue提供了多种组件通信方式,每种方式都适合不同的使用场景。本文将系统性......
  • 云服务器上的域名解析与备案全流程指南
    在部署网站时,云服务器与域名是两个不可缺少的重要元素。为了让用户能够通过域名访问你的网站,你需要完成域名解析和网站备案的流程。域名解析将域名与云服务器的IP地址相对应,而备案是中国大陆地区网站上线前的必备流程。本文将详细介绍在云服务器上进行域名解析和备案......
  • WordPress 独立站是否需要 CDN:深度解析及必要性分析
    WordPress是目前全球最流行的开源内容管理系统(CMS),其易用性和丰富的插件生态使得它成为搭建独立站的首选。然而,随着流量的增加以及用户体验的需求,网站的速度和可靠性变得至关重要。在这种情况下,CDN(内容分发网络)是提升WordPress独立站性能的重要工具。本文将探讨使用CDN......
  • YOLOv8-ultralytics-8.2.103部分代码阅读笔记-augment.py
    augment.pyultralytics\data\augment.py目录augment.py1.所需的库和模块2.classBaseTransform: 3.classCompose: 4.classBaseMixTransform: 5.classMosaic(BaseMixTransform): 6.classMixUp(BaseMixTransform): 7.classRandomPerspective: 8.classRand......
  • 【邮件伪造】SPF与DKIM验证原理及实战解析(上)
    0x01前言大家好,我是VoltCary本篇文章是系列邮件安全专题的第一篇,主要帮助大家掌握邮件安全的基础知识。基础内容包括:SMTP协议邮件安全验证原理与过程SPF验证与DKIM签名验证原理掌握这些基础后,你将能够更好地理解邮件伪造的验证原理与绕过技巧,进而掌握邮件伪造的排查方式。......
  • Transformer模型变长序列优化:解析PyTorch上的FlashAttention2与xFormers
    随着生成式AI(genAI)模型在应用范围和模型规模方面的持续扩展,其训练和部署所需的计算资源及相关成本也呈现显著增长趋势,模型优化对于提升运行时性能和降低运营成本变得尤为关键。作为现代genAI系统核心组件的Transformer架构及其注意力机制,由于其计算密集型的特性,成为优化的重......