深度学习和目标检测系列教程 13-300:YOLO 物体检测算法

article/2025/10/16 9:21:42

@Author:Runsen

YOLO,是目前速度更快的物体检测算法之一。虽然它不再是最准确的物体检测算法,但当您需要实时检测时,它是一个非常好的选择,而不会损失太多的准确性。

YOLO 框架

在本篇博客中,我将介绍 YOLO 在给定图像中检测对象所经过的步骤。

  • YOLO 首先获取输入图像:

然后框架将输入图像划分为网格(比如 3 X 3 网格):

图像分类和定位分别应用于每个网格,然后 YOLO 预测边界框及其对应的对象类别概率。

因此,下一步的方法是将标记数据传递给模型以对其进行训练。假设已将图像划分为大小为 3 X 3 的网格,并且存在有 3 个希望将对象分类的类。

假设这些类分别是 Pedestrian行人、Car 和 Motorcycle摩托车。对于每个网格单元,标签 y 将是一个八维向量:

  • pc定义对象是否存在于网格中(这是概率)
  • bx , by , bh , bw指定边界框,如果有对象
  • c1、c2、c3表示类别。因此,如果对象是汽车,则 c2将为 1,c1 和 c3将为 0

从上面的例子中选择了第一个网格:

由于此网格中没有对象,因此 pc 将为零,此网格的 y 标签为

这里, ‘?’ 是没有的意思。

采用另一个网格,其中这里有一辆汽车 (c2 = 1):

在我们为这个网格编写 y 标签之前,首先要知道 YOLO 如何确定网格中是否确实存在对象。在最上面图中,有两个对象(两辆车),因此 YOLO 将取这两个对象的中点,并将这些对象分配到包含这些对象中点的网格。上面的 y 标签将是:


由于此网格中有一个对象,因此 p c 将等于 1。 bx、 by、 bh、 bw将相对于正在处理的特定网格单元。由于汽车是第二类,c2 = 1 且 c1和 c3 = 0。因此,对于9个网格中的每一个,将有一个八维输出向量。此输出的形状为 3 X 3 X 8。

所以现在我们有一个输入图像,它是对应的目标向量。使用上面的例子(输入图像 – 100 X 100 X 3,输出 – 3 X 3 X 8),模型将训练如下:

在测试阶段,我们将图像传递给模型并运行前向传播,直到我们得到输出 y。在这里使用 3 X 3 网格进行了解释,但通常在实际场景中采用更大的网格(一般是 19 X 19)。

如何得到编码边界框?

bx、 by、 bh和 bw是相对于正在处理的网格单元计算的。

下面通过一个例子来理解这个概念。考虑包含汽车的中右网格:

bx、 by、 bh和bw将仅相对于该网格进行计算。此网格的 y 标签将是:

pc = 1 因为在这个网格中有一个物体并且它是一辆汽车,所以 c2 = 1。现在,看看怎么确定 bx、 by、 bh和 bw。在YOLO中,分配给所有网格的坐标是:

bx , by是对象中点相对于该网格的 x 和 y 坐标。在这种情况下,它将是(大约)bx = 0.4 和 by = 0.3:

bh 是边界框(上例中的红色框)的高度与相应网格单元的高度之比,在例子中约为 0.9。因此,bh = 0.9。bw是边界框的宽度与网格单元格的宽度之比。因此,大约bw = 0.5。此网格的 y 标签将是:

请注意,bx和 by将始终介于 0 和 1 之间,因为中点始终位于网格内。而 bh和 bw可以大于 1,这样边界框的尺寸大于网格的尺寸。

如何确定预测的边界框是否给了我们一个好的结果还是一个坏的结果)?判断的方法就是 Intersection over Union ,计算实际边界框和预测结合框的并集的交集。

Intersection over Union

在上图,红色框是实际的边界框,蓝色框是预测的边界框。我们如何确定它是否是一个好的预测?IoU ,全称 Intersection over Union,将计算这两个框的并集上的交集面积。该区域将是:

IoU = 交集面积/并集面积,即 IoU = 黄框面积/绿框面积

如果 IoU 大于 0.5,我们可以说预测足够好。0.5 是此处采用的任意阈值。

还有一种技术可以显着提高 YOLO 的输出——Non-Max Suppression。

因为对象检测算法中,有的对象可能会多次检测到一个对象,而不是只检测一次。比如下图:

在这里,汽车被多次识别。Non-Max Suppression 技术对此进行了清理,以便我们对每个对象仅进行一次检测。

Non-Max Suppression首先查看与每个检测相关的概率并取最大的一个。在上图中,0.9 是最高概率,因此将首先选择概率为 0.9 的框:


现在,它查看图像中的所有其他框。与当前框具有高 IoU 的框被抑制。因此,在上面的图片中,概率为 0.6 和 0.7 的框将被抑制:

在这些框被抑制后,它从所有具有最高概率的框中选择下一个框,在图片中为 0.8,不断重复这些步骤,直到所有的框都被选中或压缩,得到最终的边界框。

这就是非最大抑制Intersection over Union。以最大概率取框并以非最大概率抑制附近的框。

Anchor Boxes

由于每个网格只能识别一个对象。但是如果一个网格中有多个对象呢?现实中经常是这样。这将我们引向了 Anchor Boxes锚盒的概念。考虑下图,分为 3 X 3 网格:

取对象的中点并根据其位置将对象分配到相应的网格。在上面的例子中,两个对象的中点位于同一个网格中。

我们只会得到两个盒子中的一个,要么是汽车,要么是人。但是如果我们使用锚框,可能可以同时输出两个框!

首先,我们预先定义了两种不同的形状,称为锚盒。对于每个网格,我们将有两个输出,而不是一个输出。我们也可以随时增加锚框的数量。在这里拿了两个来使这个概念易于理解:

这是没有锚框的 YOLO 的 y 标签的样子:

如果有 2 个锚框,你认为 y 标签会是什么?我希望你在进一步阅读之前花点时间思考一下。知道了y 标签将是:

前 8 行属于锚框 1,其余 8 行属于锚框 2。

根据边界框和锚框形状的相似性将对象分配给锚框。

由于anchor box 1的形状类似于personbounding box,后者将被分配给anchor box 1,car将被分配给anchor box 2。这种情况下的输出,而不是3 X 3 X 8 ,使用 3 X 3 网格和 3 个类将是 3 X 3 X 16(因为使用了 2 个锚点)。

因此,对于每个网格,可以根据锚点的数量检测两个或多个对象。

训练yolo模型的输入显然是图像及其相应的 y 标签。让我们看一个图像如何制作 y 标签:

考虑使用 3 X 3 网格,每个网格有两个锚点,并且有 3 个不同的对象类。所以对应的 y 标签将有 3 X 3 X 16的形状。现在,假设我们每个网格使用 5 个锚框并且类的数量已经增加到 5。所以目标将是3 X 3 X 10 X 5 = 3 X 3 X 50

在测试中,新图像将被划分为我们在训练期间选择的相同数量的网格。对于每个网格,模型将预测形状为 3 X 3 X 16 的输出,此预测中的 16 个值将采用与训练标签相同的格式。

前 8 个值将对应于锚框 1,其中第一个值将是该网格中对象的概率。值 2-5 将是该对象的边界框坐标,最后三个值将告诉我们该对象属于哪个类。接下来的 8 个值将用于锚框 2 并且格式相同,即首先是概率,然后是边界框坐标,最后是类别。

最后,非最大抑制Intersection over Union技术将应用于预测框以获得每个对象的单个预测。


http://chatgpt.dhexx.cn/article/0yEDyY2s.shtml

相关文章

3D物体检测(一)

title: 3D物体检测(一) date: 2020-02-21 16:40:40 categories: 3D物体检测 tags:3D物体检测点云 总结一下在bilibili上看到的基于点云场景的三维物体检测算法及应用,有兴趣的也可以去看看这个视频。 这一部分主要总结一下,结合雷达点云数据和相机采集的二维图像数…

OpenCV-Python视频分析(移动物体检测,物体追踪)

1.概述 该文章介绍OpenCV-Python中关于视频分析的两个主要内容,分别为: 🐟背景差分法移动物体检测🐟Meanshift和Camshift算法物体追踪 PS:视频分析还要一个重要的内容:光流法运动轨迹绘制,在…

百度EasyDL物体检测在安卓上测试

EasyDL:EasyDL定制化模型 1.创建模型。 2.创建数据集,上传图片。 3.标注图片 。 4.训练数据 5.发布模型 6.APP部署测试 7.APP上测试

基于OpenCV实战:动态物体检测

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达最近,闭路电视安全系统运行着多种算法来确保安全,例如面部识别,物体检测,盗窃检测,火灾警报等。我们在运动检测…

【opencv学习】【运动物体检测】

今天学习运动物体检测 一:帧差法 捕获摄像头的运动的手 import cv2 import numpy as np# 如果我们想捕获一些运动的物体,每一帧图像中,不动的部分称之为背景,运动的物体称之为前景 # 假如我们的视频捕捉窗口是不动的,…

K210物体检测(利用Maixpy、在线模型训练、串口通信)

无论从性能还是价格上,K210都给我带来了很多惊喜。搭载了Maixpy的K210开发非常便利,加上Maixhub的加持,使得K210的生态更加完善。Maixpy完全兼容openmv,在拥有openmv的基础上,短时间内就可以上手K210。 目录 前言一、烧…

小样本物体检测

Few-shot Object Detection via Feature Reweighting(MetaYOLO) 出发点:不同属性以不同的权重组合,可以定义一个类别,所以检测特征是否属于某一类,只要检测特征对属性的响应度就可以。特征 —> 属性 —…

自动驾驶:MOD 移动物体检测概述

MOD全称为Moving Object Detection,中文“移动物体检测”。主要的作用是泊车时,周围有人或物体经过探测区域被检测到给驾驶员声音和视觉提醒。 以NISSAN MOD为例说明下基于环视相机的MOD系统: nissan 官网:​​​​​​Moving O…

UGUI射线检测与普通物体检测

UGUI物体检测与普通物体检测有所不同(UGUI射线检测已经被封装好): 1.Graphic Raycaster 主要用于UI上的射线检测,挂有这个组件的物体,必须要挂上Canvas这个组件(当挂上Graphic Raycaster时Canvas也会自动挂上)。 Ig…

多物体检测 RCNN

基于R-CNN的物体检测 原文地址:http://blog.csdn.net/hjimce/article/details/50187029 作者:hjimce 一、相关理论 本篇博文主要讲解2014年CVPR上的经典paper:《Rich feature hierarchies for Accurate Object Detection and Segmentation》…

自动驾驶感知——激光雷达物体检测算法

文章目录 1. 基于激光雷达的物体检测1.1 物体检测的输入与输出1.2 点云数据库1.3 激光雷达物体检测算法1.3.1 点视图1.3.1.1 PointNet1.3.1.2 PointNet1.3.1.3 Point-RCNN1.3.1.4 3D-SSD1.3.1.5 总结和对比 1.3.2 俯视图1.3.2.1 VoxelNet1.3.2.2 SECOND1.3.2.3 PIXOR1.3.2.4 AF…

物体检测之YOLO系列

业界对于目标检测的热度只增不减,但目前的框架也难于逾越RCNN系列、SSD、YOLO系列这三座大山,很多新的方法也是在此基础上做一些改进,所以有必要做一些整理,方便自己后续查看,这里先对YOLO系列做一些整理。没看过文章的…

物体检测难点 (多尺度检测, 遮挡与拥挤)

目录 多尺度检测降低下采样率与空洞卷积Anchor 设计多尺度训练 (Multi Scale Training,MST)特征融合尺度归一化: SNIP (Scale Normalization for Image Pyramids)Image Classification at Multiple ScalesData Variation or Correct Scale?Object Detection on an …

点云物体检测简介

点击上方“3D视觉工坊”,选择“星标” 干货第一时间送达 本文由知乎作者Leon Wu授权转载,不得擅自二次转载。原文链接:https://zhuanlan.zhihu.com/p/81474133 深度学习的开始 人类的大脑是一个神秘的器官,它由无数的神经细胞组成…

物体检测

计算机视觉中目标检测、跟踪、识别是最基本的几个task,尤其又以检测最为重要和基础。同时基本上所有的检测任务都需要在给出物体的bounding box之后,给出物体的类别(也就是给识别物体),所以文章中不区分检测和识别任务…

实时3D物体检测

谷歌发布的MediaPipe Objectron,是一个可以实时检测3D物体检测的模型框架,先在2D图像上检测物体,然后估算出3D坐标。 尽管目前2D物体检测已经相对成熟,但3D检测仍然是个挑战性的问题,主要是缺少大量有效的数据用于训练…

物体检测实战:使用 OpenCV 进行 YOLO 对象检测

使用 OpenCV 进行 YOLO 对象检测 本文将教你如何使用YOLOV3对象检测器、OpenCV和Python实现对图像和视频流的检测。用到的文件有yolov3.weights、yolov3.cfg、coco.names,这三个文件的github链接如下: GitHub - pjreddie/darknet: Convolutional Neura…

传统物体检测

传统物体检测 1. 特征2. 模板匹配3. 颜色直方图4. 空间分拣5. 梯度特征6. HOG 特征7. 特征融合8. 搭建分类器8.1 数据标注8.2 数据预处理8.3 训练分类器8.4 交叉验证 9. 滑动窗口9.1 多尺度窗口9.2 Hog子采样窗口搜索(Hog Sub-sampling Window Search) 10. Multiple Detections…

计算机视觉之旅-进阶-物体检测

1. 物体检测概念 计算机视觉中的物体检测是指在图像中检测和定位特定目标对象,它是计算机视觉中一个基本而又重要的问题。 物体检测的目的就是在输入图像中检测所关心的目标对象,并给出其边界框和类别信息。典型的输出包括: - 边界框:表示目标对象在图像中的位置和大小。常用…

物体检测技术的简单介绍

1. 物体检测技术概念 物体检测技术,通常是指在一张图像中检测出物体出现的位置及对 应的类别,主要包括物体类别、 x m i n x_{min} xmin​、 y m i n y_{min} ymin​、 x m a x x_{max} xmax​与 y m a x y_{max} ymax​。它是一项非常基础的任 务&…