0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

纵观全局:YOLO助力实时物体检测原理及代码

新机器视觉 来源:新机器视觉 2024-03-30 14:43 次阅读

YOLO 的全称“You Only Look Once”,它通过引入一种与传统方法截然不同的方法,彻底改变了物体检测领域。YOLO 摆脱了传统的提案驱动技术,创新地在一次传递中直接从完整图像中预测边界框和类别概率。这种突破常规的做法不仅简化了物体检测流程,还显著加快了检测速度,使实时检测不仅成为可能,而且成为现实。

概念概述

YOLO 创新方法的核心是将对象检测视为单一回归问题的概念,从图像像素直接到边界框坐标和类别概率。以下是 YOLO 如何实现这一点的细分:

  • 网格划分:YOLO 首先将输入图像划分为S×S网格。每个网格单元负责预测中心位于该单元内的物体。这种划分使模型能够定位物体并确保检测分布在图像上。

  • 边界框预测:对于每个网格单元,YOLO 会预测多个边界框。每个边界框预测包括坐标(中心、宽度和高度)以及置信度分数,该分数反映了边界框的准确性以及该框包含特定对象的可能性。

  • 类别概率:除了边界框预测之外,每个网格单元还会预测其检测到的对象属于哪个类别的概率。这些概率取决于包含对象的网格单元。

  • 组合预测:YOLO 流程的最后一步是将边界框预测与类别概率相结合,以提供完整的检测输出。每个边界框的置信度分数由类别概率调整,确保检测既反映边界框的准确性,又反映模型对对象类别的置信度。

这种简化的方法可以同时分析图像的每个部分,从而使 YOLO 能够实现惊人的速度,同时又不影响准确性。YOLO 只需查看一次整个图像(因此得名),就可以了解图像的全局背景,从而减少误报,并使其在实时应用中非常高效。YOLO 架构的简单性和有效性不仅使其成为对象检测任务的热门选择,而且还激发了该领域的进一步创新和研究,突破了计算机视觉的极限。

YOLO 架构揭晓

从图像到预测

YOLO 架构是一个引人注目的例子,展示了如何利用卷积神经网络 (CNN) 完成物体检测等复杂任务。与可能输出单个类别概率向量的传统 CNN 不同,YOLO 架构旨在输出包含边界框预测和类别概率的多维张量。以下是它如何处理图像的概述:

  • 卷积主干:YOLO 使用一系列卷积层作为主干。这些层负责从输入图像中提取特征。这些层的架构在 YOLO 的不同版本(例如 YOLOv3、YOLOv4 等)之间可能有所不同,每个版本都旨在在速度和准确性之间取得平衡。

  • 特征提取:当图像穿过卷积层时,网络会提取和下采样特征,从而创建一个丰富的特征图,其中包含检测所需的基本信息

  • 预测层:在网络末端,YOLO 过渡到预测层,该层通常是具有特定数量滤波器的卷积层。这些滤波器对应于每个网格单元的预测向量,包括边界框坐标、置信度分数和类别概率。

  • 输出张量:输出是形状为 (S×S×(B×5+C)) 的张量,其中S×S是网格大小,B是每个网格单元的边界框数量,55 表示四个边界框坐标加上置信度分数,C表示类别数量。此张量封装了网络对图像进行的所有检测。

代码片段:加载和使用预训练的 YOLO 模型

以下是一个简化的 Python 示例,演示如何使用流行的深度学习框架(例如 TensorFlow 或 PyTorch)加载预训练的 YOLO 模型并对图像执行对象检测。此示例假设使用 PyTorch 并且可以使用预训练的 YOLO 模型:
import torch
import torchvision.transforms as transforms
from PIL import Image


# Load a pre-trained YOLO model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)


# Function to perform object detection
def detect_objects(image_path):
# Load and transform the image
image = Image.open(image_path)
transform = transforms.Compose([
transforms.ToTensor(),
])
image = transform(image).unsqueeze(0) # Add batch dimension


# Perform inference
model.eval() # Set the model to evaluation mode
with torch.no_grad():
predictions = model(image)


# Process predictions
# Note: The output format can vary, so adjust the processing as needed
for pred in predictions[0]:
bbox = pred[:4] # Bounding box coordinates
score = pred[4] # Confidence score
class_id = pred[5] # Class ID
print(f'Class: {class_id}, Score: {score}, BBox: {bbox}')


# Example usage
detect_objects('path/to/your/image.jpg')
此代码片段提供了加载 YOLO 模型和执行对象检测的基本框架。实际实现细节(例如处理输出格式和置信度分数的阈值)将取决于所使用的 YOLO 的具体模型和版本。

训练 YOLO 模型

学会观察

训练 YOLO 模型涉及一个独特而复杂的过程,这主要是由于其独特的输出格式以及同时预测多个边界框和类概率。此训练过程的一个关键方面是 YOLO 采用的专门损失函数,该函数旨在有效地最小化预测任务不同部分之间的误差。此损失函数通常包含几个部分:

  • 定位损失:损失函数的这一部分惩罚边界框预测位置和大小的误差。它通常关注预测边界框坐标与地面真实坐标之间的差异,通常使用诸如平方误差和之类的度量。

  • 置信度损失:此组件惩罚边界框置信度分数中的错误。置信度分数反映了模型对边界框包含物体的确定性以及模型认为边界框的准确度。对于包含物体的边界框和不包含物体的边界框,计算的损失不同,以帮助模型区分这两种情况。

  • 分类损失:损失函数的这一部分针对每个网格单元的类别概率预测。它通常涉及预测概率和独热编码的真实类别标签之间的分类交叉熵损失。
总损失是这些成分的加权和,平衡了定位、置信度和分类错误对整体训练目标的贡献。

代码片段:YOLO 的训练设置

下面是一个简化的示例,演示了训练 YOLO 模型的设置。此示例是概念性的,旨在说明配置训练过程所涉及的关键组件,包括损失函数和优化。实际实施将根据 YOLO 的具体版本和所使用的深度学习框架而有所不同:
import torch
import torch.optim as optim


# Assuming yolo_model is your YOLO model and train_loader is your data loader


# Define the optimizer
optimizer = optim.Adam(yolo_model.parameters(), lr=0.001)


# Placeholder for the YOLO loss function
# Note: You'll need to define this based on the specific YOLO version and its output format
def yolo_loss(predictions, targets):
    # Compute localization loss, confidence loss, and classification loss
    # localization_loss = ...
    # confidence_loss = ...
    # classification_loss = ...
    
    # Combine the losses
    total_loss = localization_loss + confidence_loss + classification_loss
    return total_loss


# Training loop
for epoch in range(num_epochs):
    for images, targets in train_loader:  # Assuming targets contain ground truth
        optimizer.zero_grad()  # Zero the gradients
        
        # Forward pass
        predictions = yolo_model(images)
        
        # Compute loss
        loss = yolo_loss(predictions, targets)
        
        # Backward pass and optimize
        loss.backward()
        optimizer.step()
    
    print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item()}')
此代码提供了设置 YOLO 模型训练循环的基本框架,重点介绍了使用专门的损失函数来解决 YOLO 预测任务的独特方面。实际损失函数的实现、优化器的选择和其他训练超参数可以根据任务和数据集的具体要求进行调整。

YOLO 实际应用:真实世界的应用

超越基础

YOLO 物体检测系统以其速度和准确性而闻名,使其成为需要实时处理和可靠检测的众多实际应用的理想选择。它处理动态和具有挑战性的环境的能力已在各个领域得到证实:

  • 监控:YOLO 的实时处理能力在监控系统中特别有用,它可以同时检测和跟踪多个物体,例如个人、车辆或任何异常活动,从而增强公共和私人空间的安全措施。

  • 自动驾驶:在自动驾驶汽车领域,YOLO 有助于完成检测和分类汽车、行人和交通标志等物体的关键任务,使汽车能够做出明智的决策并安全行驶。

  • 野生动物监测:YOLO 已被用于野生动物监测项目,它有助于自动检测和识别自然栖息地中的物种,协助保护工作和生物多样性研究。

  • 零售和库存管理:在零售领域,YOLO 可以通过实时检测和跟踪货架上的产品来简化库存管理,并可以通过交互式显示和监控来增强客户体验。

代码片段:将 YOLO 应用于视频

以下示例演示了如何使用 Python 应用预先训练的 YOLO 模型来处理和显示视频流中的检测结果。此示例使用 OpenCV 进行视频处理,并假设使用基于 PyTorch 的 YOLO 模型:
import cv2
import torch


# Load the pre-trained YOLO model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)


# Initialize the video stream (replace '0' with a video file path for processing a video file)
cap = cv2.VideoCapture(0)


while True:
    # Read frames from the video stream
    ret, frame = cap.read()
    if not ret:
        break


    # Convert the frame to the format expected by the model
    frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    results = model([frame_rgb], size=640)  # Adjust size as needed


    # Render the detections on the frame
    frame_with_detections = results.render()[0]


    # Convert the frame back to BGR for displaying with OpenCV
    frame_with_detections_bgr = cv2.cvtColor(frame_with_detections, cv2.COLOR_RGB2BGR)


    # Display the frame with detections
    cv2.imshow('YOLO Object Detection', frame_with_detections_bgr)


    # Break the loop when 'q' is pressed
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break


# Release the video stream and close windows
cap.release()
cv2.destroyAllWindows()
此代码片段展示了 YOLO 在视频流中实时检测物体的简单性和强大功能。通过高效处理视频的每一帧并叠加检测到的物体,YOLO 可帮助实现需要即时分析和响应的广泛应用。

结论YOLO(You Only Look Once)的探索及其对物体检测领域的变革性影响,凸显了计算机视觉技术能力的重大飞跃。YOLO 的创新方法以单次检测为特点,可以同时预测多个边界框和类别概率,不仅提高了物体检测的速度和效率,还扩大了其在各种现实场景中的适用性。

从通过先进的监控系统增强安全性到提高自动驾驶汽车的安全性和可靠性,从协助野生动物保护工作到彻底改变零售和库存管理,YOLO 的多功能性和效率使其成为各个领域的基石技术。它能够以惊人的准确性和速度处理动态和具有挑战性的环境,这凸显了深度学习模型在处理曾经无法实现的复杂实时任务方面的潜力。

提供的代码片段深入了解了 YOLO 的架构、训练过程和视频流应用,证明了该模型的可访问性和适应性。它们说明了如何在实际应用中集成和使用 YOLO,使开发人员和研究人员能够在他们的项目中利用实时对象检测的强大功能。

展望未来,YOLO 的持续开发和迭代有望取得更大进步,检测精度、处理速度和对更广泛应用的适应性都有可能得到改善。YOLO 从诞生到现在乃至更远的未来,是人工智能和计算机视觉领域不懈追求创新的生动例证。它是未来发展的灯塔,鼓励人们不断探索,突破人工智能的极限。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 监控系统
    +关注

    关注

    21

    文章

    3614

    浏览量

    169334
  • 人工智能
    +关注

    关注

    1776

    文章

    43899

    浏览量

    230647
  • 代码
    +关注

    关注

    30

    文章

    4556

    浏览量

    66820

原文标题:纵观全局:YOLO 助力实时物体检测原理及代码

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    华为云ModelArts入门开发(完成物体分类、物体检测)

    利用ModelArts框架可以完成图像分类、物体检测、预测分析、声音分类、文本分类等功能。介绍如何使用ModelArts完成图像分类、物体检测、自我学习等功能运用。
    的头像 发表于 07-10 16:26 1313次阅读
    华为云ModelArts入门开发(完成<b class='flag-5'>物体</b>分类、<b class='flag-5'>物体检测</b>)

    【EASY EAI Nano】RV1126实时读取摄像头并进行yolo检测显示

    实现了三个并行模块,分别是 摄像头读取,使用opencv转换到适合大小 yolo检测 托管到Qt进行现实 检测的DEMO从每帧10次改到每帧2次,可以看到还是具备一定实时性。
    发表于 01-14 18:53

    如何开始在斯巴达3e板上进行物体检测和跟踪

    我如何开始在斯巴达3e板上进行物体检测和跟踪... plz帮助
    发表于 05-26 08:46

    请问超声波人体检测传感器如何助力汽车行业稳步发展?

    请问超声波人体检测传感器如何助力汽车行业稳步发展?
    发表于 06-16 06:40

    介绍yolo v4版的安装与测试

    You only look once (YOLO)是一款非常著名的物体识别深度学习网络,可实现快速检测的同时还达到较高的准确率。问介绍yolo v4版的安装与测试。为了提高
    发表于 02-17 07:06

    设计一个红外物体检测设备

    描述使用 PIR 传感器的红外物体检测设备-PCB 设计项目背后的动机:这种物体检测传感器专门设计用于防止未经授权的物体或身体进入。在您不在的情况下,除非您允许,否则它不会让任何人进入您的位置
    发表于 06-27 06:18

    用简洁的语言来阐述YOLO算法

    顾名思义,这个算法就是只看一遍图片就能把所有的物体都识别出来,这个算法能够做到实时物体检测,大约能达到40帧每秒,速度是非常快的。那如何去入手这个算法呢?相信大家已经看过不少介绍YOLO
    的头像 发表于 01-29 15:41 2.9w次阅读
    用简洁的语言来阐述<b class='flag-5'>YOLO</b>算法

    红外开关物体检测电路图

    本例电路利用一个红外发射二极管和红外接收二极管组成的物体检测电路。当有物体反射红外线时,电路自动控制开关闭合,经过一段延时时间后,自动断开。
    的头像 发表于 10-07 15:39 6546次阅读
    红外开关<b class='flag-5'>物体检测</b>电路图

    自动化所在视觉物体检测与识别领域取得系列进展

    物体检测是计算机视觉与模式识别领域的核心问题,一直以来受到学术界与工业界的广泛关注。当前物体检测最大的难点是如何对场景中多种尺度的物体进行有效表征,进而进行更为高效、更为准确、更为鲁棒的物体检
    的头像 发表于 11-29 15:42 2470次阅读

    传统检测、深度神经网络框架、检测技术的物体检测算法全概述

    物体检测一向是比较热门的研究方向,它经历了传统的人工设计特征+浅层分类器的框架,到基于大数据和深度神经网络的End-To-End的物体检测框架的发展,然而许多人其实并未系统的了解过物体检测算法的整个
    的头像 发表于 10-22 15:07 2484次阅读
    传统<b class='flag-5'>检测</b>、深度神经网络框架、<b class='flag-5'>检测</b>技术的<b class='flag-5'>物体检测</b>算法全概述

    华为物体检测系统助力智慧安防

    华为发明的物体检测方法,通过构建跨域知识图谱,可以捕捉到不同待检测物体间的内在关系,从而更加精确的进行物体识别,在智能安防等复杂场景中有着极其重要的应用。
    的头像 发表于 11-22 09:19 1901次阅读

    一阶段的物体检测器,从直觉到细节的方方面面(一)

    这篇文章非常详细的讲解了一阶段物体检测器的诸多细节和方方面面,并以yolo和ssd为例,非常细致的比较了两者细节上的异同点,由于文章太...
    发表于 01-26 19:32 4次下载
    一阶段的<b class='flag-5'>物体检测</b>器,从直觉到细节的方方面面(一)

    ESP32 CAM:遥控物体检测摄像头

    电子发烧友网站提供《ESP32 CAM:遥控物体检测摄像头.zip》资料免费下载
    发表于 12-15 09:56 2次下载
    ESP32 CAM:遥控<b class='flag-5'>物体检测</b>摄像头

    物体检测人工智能机器人

    电子发烧友网站提供《物体检测人工智能机器人.zip》资料免费下载
    发表于 06-19 14:38 1次下载
    <b class='flag-5'>物体检测</b>人工智能机器人

    基于YOLO技术的植物检测与计数

    利用Roboflow平台对数据进行有效的管理和标注。对于植物检测,使用实时目标检测能力强的YOLO方法。YOLO通过将输入图像划分为网格并预
    的头像 发表于 12-12 09:41 400次阅读
    基于<b class='flag-5'>YOLO</b>技术的植物<b class='flag-5'>检测</b>与计数