【深度学习项目】目标检测之YOLO系列详解(一)

介绍

YOLO(You Only Look Once)是一种实时目标检测算法,由Joseph Redmon等人提出。与传统的基于滑动窗口和区域提案的目标检测方法不同,YOLO将目标检测问题框架化为一个单一的回归问题,直接从图像像素预测边界框和类别概率。

以下是YOLO的一些关键特点:

  • 统一的检测过程:YOLO在单个网络中同时预测多个类别的边界框和对象概率。这使得它能够以非常高的速度运行,适用于实时应用。
  • 全局理解图像:由于YOLO是在整个图像上进行预测,因此它隐式地编码了关于类别的上下文信息。这意味着它可以在一定程度上理解图像中的对象是如何相互关联的。
  • 简单性:YOLO模型结构相对简单,训练和推理都很容易实现,并且不需要复杂的管道或额外的步骤来生成区域建议。
  • 速度与精度的平衡:虽然YOLO强调速度,但它也试图保持较高的检测精度。不同的YOLO版本在速度和准确性之间进行了优化。
  • 泛化能力:YOLO通常能够很好地泛化到新的、未见过的数据集,因为它在训练过程中学习到了广泛的特征。

YOLO有多个版本,如YOLOv2, YOLOv3, YOLOv4, YOLOv5到YOLO11,每个新版本都在尝试改进其前代产品的性能,提高检测精度和速度,同时减少错误类型,比如背景假阳性。YOLOv3引入了多尺度预测,增强了小物体的检测能力;而YOLOv4则进一步提高了检测的速度和精度,采用了更先进的激活函数和正则化技术。YOLOv5以后是由Ultralytics公司开发的,不是原始作者发布的,但是它在社区中广泛使用并且具有更好的优化和支持。

YOLOv1

YOLOv1,即原始的YOLO(You Only Look Once)模型,是2016年由Joseph Redmon等人在论文《You Only Look Once: Unified, Real-Time Object Detection》中首次提出的。YOLOv1引入了一种全新的目标检测方法,它将目标检测视为一个回归问题来解决,而不是像传统的两阶段方法(如R-CNN系列)那样依赖于区域提案。
在这里插入图片描述

以下是YOLOv1的主要特点和工作原理:

网络结构

YOLOv1使用了一个类似于GoogLeNet的卷积神经网络结构,但是简化了某些部分,并且没有采用Inception模块。这个网络包含了24个卷积层,用于特征提取,以及2个全连接层,用于预测输出。
在这里插入图片描述
在这里插入图片描述

输出表示

YOLOv1将输入图像划分为S×S个网格(grid cell)。如果一个对象的中心落到了某个网格内,那么该网格就负责预测这个对象。每个网格预测B个边界框(bounding box)和这些框的置信度分数(confidence score),以及C类条件概率(conditional class probabilities)。因此,对于每个网格单元,输出张量的形状为S×S×(B*5+C)。

  • 边界框:每个边界框包含5个预测值:x, y, w, h和置信度。其中,x和y是相对于网格单元边界的坐标,w和h是相对于整张图片的比例。
  • 置信度:置信度反映了模型对边界框内含有对象的信心程度,同时也编码了预测框与真实框之间的IoU(Intersection over Union)。
  • 类别概率:每个网格只预测一组类别概率,不论该网格预测多少个边界框。

损失函数

YOLOv1定义了一个多部分的损失函数,用来同时优化分类精度、定位误差以及边界框的置信度。损失函数由以下几个部分组成:

  • 坐标预测的平方和误差
  • 网格单元内有对象时的置信度误差
  • 网格单元内无对象时的置信度误差(权重较小)
  • 类别预测的平方和误差
    在这里插入图片描述

优点

  • 速度:YOLOv1可以在普通GPU上实现实时检测(约45帧每秒)。
  • 全局上下文信息:因为YOLOv1是在整个图像上做预测,所以它可以利用图像的全局信息来进行检测。

缺点

  • 召回率较低:由于每个网格只能预测两个边界框,所以当多个小物体位于同一个网格中时,YOLOv1可能会错过一些检测。
  • 定位误差较大:相比于其他方法,YOLOv1的定位准确性略差,特别是在预测边界框的位置时。
  • 泛化能力有限:当遇到训练集中未见过的物体排列或比例时,YOLOv1的表现可能不如预期。

尽管YOLOv1存在上述缺点,但它开创了单阶段目标检测算法的先河,并且启发了后续版本的发展,比如YOLOv2, YOLOv3等,这些版本在保持YOLO速度优势的同时,不断改进其准确性和鲁棒性。

论文思想

  1. 将一幅图像分成SxS个网格(grid cell),如果某个object的中心 落在这个网格中,则这个网格就负责预测这个object。
  2. 每个网格要预测B个bounding box,每个bounding box除了要预测位置之外,还要附带预测一个confidence值。每个网格还要预测C个类别的分数。
    在这里插入图片描述
    在这里插入图片描述

YOLOv2

YOLOv2,也被称为YOLO9000,是YOLO系列目标检测算法的第二个重要版本。它由Joseph Redmon和Ali Farhadi在2017年的论文《YOLO9000: Better, Faster, Stronger》中提出。相较于YOLOv1,YOLOv2进行了多项改进,提升了检测速度、精度以及模型的泛化能力。以下是YOLOv2的主要特点和改进:

改进点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 更好的准确性
  • Batch Normalization:为所有卷积层添加了批量归一化(Batch Normalization),这不仅加快了训练过程,还减少了对其他正则化方法的需求,并且提高了模型的稳定性。
  • 高分辨率分类器:YOLOv2首先在ImageNet数据集上以448x448的分辨率预训练了一个分类网络10个epoch,然后再微调到检测任务上。这样可以更好地适应高分辨率输入。
  1. 更快的速度
  • Anchor Boxes:引入了类似于Faster R-CNN的先验框(Anchor Boxes)的概念,替换了YOLOv1中的手工设计的边界框预测方式。Anchor Boxes允许每个网格单元预测多个边界框,从而提高了召回率。
  • Dimension Clusters:通过K-means聚类在训练数据集上找到最适合的Anchor Boxes尺寸,而不是随机选择,这有助于提高定位的准确性。
  • Direct location prediction:为了保持模型的稳健性,YOLOv2直接预测边界框的位置偏移量,而不是使用log-space预测。
  1. 更强的泛化能力
  • Fine-grained features:为了更好地捕捉小物体,YOLOv2从早期的卷积层中提取细粒度特征,并与最终的特征图相结合。
  • Multi-scale training:YOLOv2采用了多尺度训练策略,在不同的迭代中随机改变网络的输入图像大小,使得模型能够处理各种不同分辨率的输入图像。
  1. 更多类别支持
  • Joint classification and detection:YOLOv2通过结合WordTree结构将COCO数据集的目标检测和ImageNet数据集的分类结合起来,使得模型可以同时识别超过9000种不同类型的对象。

网络架构

YOLOv2采用了一种新的基础网络叫做Darknet-19,它由19个卷积层和5个最大池化层组成。这个网络比原来的YOLOv1更加轻量化但性能更强大。Darknet-19的设计灵感来自于VGG16,但是通过一系列优化如减少滤波器数量和增加批标准化等手段来提升效率。

在这里插入图片描述
在这里插入图片描述

Darknet-19

Darknet-19(224x224) only requires 5.58 billion operations to process an image yet achieves 72.9% top-1 accuracy and 91.2%top-5 accuracy on ImageNet.
在这里插入图片描述

YOLOv3

YOLOv3(You Only Look Once v3)是YOLO系列目标检测算法的第三个主要版本,由Joseph Redmon和Ali Farhadi在2018年的论文《YOLOv3: An Incremental Improvement》中提出。相较于之前的版本,YOLOv3引入了多项改进以提高模型的准确性和鲁棒性,同时保持了实时检测的速度优势。以下是YOLOv3的主要特点和改进:
在这里插入图片描述

主要改进

  1. 多尺度预测
    YOLOv3采用了多尺度预测的方式,在三个不同的特征层上进行边界框预测:高分辨率、中等分辨率和低分辨率。这种设计使得模型能够更好地检测不同大小的目标,特别是小物体的检测能力得到了显著提升。
  2. 特征提取网络
    使用了Darknet-53作为特征提取网络,这是一个更深的卷积神经网络,包含了53个卷积层。Darknet-53借鉴了ResNet的设计理念,通过残差块(residual blocks)来构建,这有助于缓解深层网络中的梯度消失问题,并且提高了特征提取的效果。
  3. Anchor Boxes优化
    在YOLOv3中,Anchor Boxes是基于训练数据集上的边界框尺寸使用K-means聚类算法计算得出的。与YOLOv2相比,它为每个尺度设置了9个Anchor Boxes(3个尺度,每个尺度3个),从而更加精确地适应不同尺寸的对象。
  4. 分类机制
    YOLOv3不再采用softmax函数来做类别预测,而是对于每一个边界框都独立地预测一组对象存在与否的概率以及该对象属于各个类别的概率。这种方式允许模型处理单个边界框内包含多个类别的情况,并且避免了类别不平衡的问题。
  5. 损失函数调整
    YOLOv3对损失函数进行了微调,采用了二值交叉熵损失(binary cross-entropy loss)来替代之前版本中的均方误差(mean squared error)。此外,它还分别针对分类、置信度和边界框坐标定义了不同的损失部分。
  6. 数据预处理
    YOLOv3采用了随机缩放和平移的数据增强方法,确保输入图像的尺寸变化,增强了模型的泛化能力。

网络架构

  • Darknet-53:YOLOv3的基础网络,利用残差连接(skip connections)来促进信息流动,防止梯度消失,同时也增加了网络深度。
  • 路径聚合网络(PANet):虽然不是原版YOLOv3的一部分,但在许多实现中被采纳,用于加强特征融合,从高层语义信息到低层空间信息的传递。

Darknet-53

在这里插入图片描述
在这里插入图片描述

性能提升

YOLOv3在COCO数据集上的性能表现优异,达到了更高的平均精度(mAP),并且仍然保持了实时检测的速度。它在小物体检测方面尤其有了显著进步,这是由于其多尺度预测的能力和更强大的特征提取网络所致。
在这里插入图片描述
在这里插入图片描述

损失函数调整

在这里插入图片描述
在这里插入图片描述

置信度损失

在这里插入图片描述

类别损失

在这里插入图片描述
在这里插入图片描述

定位损失

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/491266.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 位运算

一、数据大小对应关系 说明: 将一个数据每左移一位,相当于乘以2。因此,左移8位就是乘以2的8次方,即256。 二、转换 1、 10进制转2进制字符串 #region 10进制转2进制字符串int number1 10;string binary Convert.ToString(num…

计算机视觉单阶段实例分割实践指南与综述

概述 原文地址:https://towardsdatascience.com/single-stage-instance-segmentation-a-review-1eeb66e0cc49 实例分割是一项具有挑战性的计算机视觉任务,需要预测对象实例及其每像素分割掩码。这使其成为语义分割和目标检测的混合体。 自 Mask R-CNN …

Oracle中COUNT函数对NULL和空字符串的处理方式

Oracle中,使用COUNT函数的时候,COUNT()和COUNT(null)得到的结果都是0,也就是说,如果我们COUNT中选择的那列属性中为null的或者的那行是不会被计数的。MySQL中count(null)效果和Oracle中一样,但是count()能正常计数。 在…

sqlmap详解

一.sqlmap -u URL --forms sqlmap -u http://192.168.11.136:1337//978345210/index.php --forms 针对特定的 URL 进行 SQL 注入测试,特别是针对表单(form)的 POST 注入 forms:这个参数告诉 sqlmap 解析并测试目标 URL 中的表单…

Flink CDC Schema Evolution 详解

Flink CDC Schema Evolution 详解 github原文 glimpse flink-cdc-3 glimpse 源码基于 ~/project/flink_src/flink-cdc master !4 ❯ git remote -v origin https://github.com/apache/flink-cdc.git (fetch) origin https://github.com/apache/flink-cdc.git (push) ~/p…

【Linux】结构化命令:if-then语句

结构化命令structured command:允许脚本根据条件跳过部分命令,改变执行流程。 1、if-then语句 格式1: if command then commands fi 格式2: if command; then commands fi 运行if之后的command命令,如果它的退出状态码…

23.DDD与微服务

学习视频来源:DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 文章目录 DDD与微服务的关系1. DDD可以用微服务实现,也可以不用微服务实现2. DDD是微服务拆分的必须参考项之一3. 微服务架构…

IDEA 未启用lombok插件的Bug

项目中maven已引用了lombok依赖,之前运行没有问题的,但有时启动会提示: java: You arent using a compiler supported by lombok, so lombok will not work and has been disabled. Your processor is: com.sun.proxy.$Proxy8 Lombok support…

51c嵌入式~单片机~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/12362395 一、STM32代码远程升级之IAP编程 IAP是什么 有时项目上需要远程升级单片机程序,此时需要接触到IAP编程。 IAP即为In Application Programming,解释为在应用中编程,用户自己的…

Jenkins容器使用宿主机Docker(五)

DevOps之安装和配置 Jenkins (一) DevOps 之 CI/CD入门操作 (二) Sonar Qube介绍和安装(三) Harbor镜像仓库介绍&安装 (四) Jenkins容器使用宿主机Docker(五) Jenkins流水线初体验(六&#…

Python爬虫之Scrapy框架基础入门

Scrapy 是一个用于Python的开源网络爬虫框架,它为编写网络爬虫来抓取网站数据并提取结构化信息提供了一种高效的方法。Scrapy可以用于各种目的的数据抓取,如数据挖掘、监控和自动化测试等。 【1】安装 pip install scrapy安装成功如下所示:…

C++对象数组对象指针对象指针数组

一、对象数组 对象数组中的每一个元素都是同类的对象&#xff1b; 例1 对象数组成员的初始化 #include<iostream> using namespace std;class Student { public:Student( ){ };Student(int n,string nam,char s):num(n),name(nam),sex(s){};void display(){cout<&l…

git中的命令

目录 git的命令1.1 创建版本库1.2 添加文件和修改提交文件1.创建文件readme.txt, 此刻文件在工作区&#xff08;WorkSpace&#xff09;2.使用命令 git add readme.txt添加到暂存区里面去。3.提交文件到主分支4.修改文件&#xff0c;在文件中加入一行。查看git的状态 1.3 版本回…

《Keras3 minist 手写数字AI模型训练22秒精度达到:0.97》

《Keras3 minist 手写数字AI模型训练22秒精度达到&#xff1a;0.97》 一、修改源码加上如下两条代码二、源码修改如下三、Keras3 minist 训练22秒结束&#xff0c;训练过程截图四、Keras3 minist 源码截图 一、修改源码加上如下两条代码 import os os.environ["KERAS_BAC…

docker 容器相互访问

目前采用 network 方式 1. 创建自定义网络 docker network create network-group 如下 2. 相互访问的容器更改&#xff08;目前演示redis 以及netcore api 访问redis &#xff09; //redis 原有容器删除 跟之前区别就是加入 --network network-group docker run \ -p 6379:…

YOLOv8目标检测(三*)_最佳超参数训练

YOLOv8目标检测(一)_检测流程梳理&#xff1a;YOLOv8目标检测(一)_检测流程梳理_yolo检测流程-CSDN博客 YOLOv8目标检测(二)_准备数据集&#xff1a;YOLOv8目标检测(二)_准备数据集_yolov8 数据集准备-CSDN博客 YOLOv8目标检测(三)_训练模型&#xff1a;YOLOv8目标检测(三)_训…

uniapp使用百度地图配置了key,但是显示Map key not configured

搞了我两天的一个问题。 hbuilderx版本&#xff1a;4.36 问题介绍&#xff1a; 我的项目是公司的项目&#xff0c;需要在H5端使用百度地图&#xff0c;使用vue-cli创建的uniapp&#xff0c;就是uni代码在src里的目录结构。就是使用这种方式才会遇到这个问题。 问题原因&#xf…

Android通过okhttp下载文件(本文案例 下载mp4到本地,并更新到相册)

使用步骤分为两步 第一步导入 okhttp3 依赖 第二步调用本文提供的 utils 第一步这里不做说明了&#xff0c;直接提供第二步复制即用 DownloadUtil 中 download 为下载文件 参数说明 这里主要看你把 destFileName 下载文件名称定义为什么后缀&#xff0c;比如我定义为 .mp4 下…

【rust杂乱笔记】

code . 打开vscode fn main() {println!("hello world!") }loop{}循环; break跳出循环 // 引入三方库 use rand::Rng; // 引入标准库中的输入输出 use std::cmp::Ordering; use std::io;// main函数 先执行main函数 fn main() {// 打印的宏方法// 打印提示信息print…

【C++初阶】第9课—标准模板库STL(string_3)

文章目录 1. string类对象的查找操作1.1 c_str返回c格式字符串1.2 substr获取string类对象子串1.3 find和rfind查找字符串内容1.4 find_first_of与find_first_not_of1.5 find_last_of与find_last_not_of1.6 copy复制string类对象内的字符串内容1.7 compare对比string类字符串1.…