当前位置:   article > 正文

YOLO 目标检测编程详解

YOLO 目标检测编程详解
引言

目标检测是计算机视觉中的一个重要任务,它旨在识别图像中的对象并定位这些对象的位置。YOLO(You Only Look Once)是一种流行的目标检测算法,因其速度快且准确度高而广受好评。本文将深入探讨 YOLO 的原理及其实现方法,并提供一个使用 Python 和 PyTorch 的示例代码。

项目源码见最下方

1. YOLO 算法简介

YOLO 算法的核心思想是将目标检测视为回归问题,而不是传统的分类加定位的两阶段方法。YOLO 将输入图像分割成多个网格单元,并预测每个网格单元中对象的存在概率和边界框的位置。

2. YOLO 的版本

自 YOLOv1 发布以来,该算法经历了多个版本的发展:

  • YOLOv1:首次提出了单次通过网络进行目标检测的方法。
  • YOLOv2:引入了 anchor boxes 和 batch normalization 来提高检测精度。
  • YOLOv3:增加了更多的特征层次,提高了小物体的检测能力。
  • YOLOv4:集成了许多最新的改进技巧,包括 CSPNet 和 SPP-Net,达到了很高的检测速度与精度平衡。
  • YOLOv5:使用 PyTorch 实现,提供了更多的灵活性和更高效的训练过程。
3. YOLO 的架构

YOLO 网络通常包含以下几个部分:

  • Backbone:提取图像特征,如 Darknet、ResNet 或 MobileNet。
  • Neck:连接 Backbone 和 Head 的中间层,通常用于融合不同层级的特征。
  • Head:输出边界框和类别信息。
4. YOLO 的损失函数

YOLO 的损失函数由以下几个部分组成:

  • 坐标损失:用于预测边界框的位置。
  • 置信度损失:用于评估预测边界框是否包含目标。
  • 类别损失:用于预测边界框内对象的类别。
5. 使用 PyTorch 实现 YOLO

下面是一个使用 PyTorch 实现 YOLOv3 的简单示例。我们将从安装必要的库开始,然后逐步构建 YOLOv3 模型,并演示如何加载预训练权重并进行目标检测。

5.1 安装库

确保安装了 PyTorch 和相关库:

Bash

深色版本

1pip install torch torchvision opencv-python
5.2 加载预训练模型

我们可以使用预训练的 YOLOv3 模型权重来检测图像。首先,下载预训练权重文件和配置文件。

5.3 检测图像

接下来,我们将编写一个函数来加载模型并检测图像中的对象。

示例代码

我们将使用 PyTorch 来加载一个预训练的 YOLOv3 模型,并使用该模型检测一张示例图像。

代码执行器完成调用

调用过程

  1. 1import torch
  2. 2import cv2
  3. 3import numpy as np
  4. 4
  5. 5# Load the model
  6. 6model = torch.hub.load('ultralytics/yolov5', 'yolov5s') # or yolov5m, yolov5l, yolov5x, custom
  7. 7
  8. 8# Load an example image
  9. 9image_path = 'example.jpg' # Path to your image
  10. 10image = cv2.imread(image_path)
  11. 11
  12. 12# Perform inference
  13. 13results = model(image)
  14. 14
  15. 15# Display the results
  16. 16results.show()
  17. 17
  18. 18# Get the results as a pandas DataFrame
  19. 19results_df = results.pandas().xyxy[0]
  20. 20results_df.head()

调用结果

error:

  1. 1---------------------------------------------------------------------------
  2. 2ModuleNotFoundError Traceback (most recent call last)
  3. 3Cell In[2], line 2
  4. 4 1 signal.alarm(30)
  5. 5----> 2 import torch
  6. 6 3 import cv2
  7. 7 4 import numpy as np
  8. 8
  9. 9ModuleNotFoundError: No module named 'torch'

看来当前环境中没有安装 PyTorch。为了演示如何使用 YOLOv3,我将先安装必要的库,然后再继续编写示例代码。

让我们先安装 torchtorchvision 库,因为它们是运行 YOLOv3 所必需的。

代码执行器完成调用

调用过程

  1. 1# First, we need to install the necessary libraries
  2. 2!pip install torch torchvision

调用结果

  1. 1[33mWARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f023dcc5b20>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/torch/[0m[33m
  2. 2[0m
  1. 1[33mWARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f023dcc5c40>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/torch/[0m[33m
  2. 2[0m
 
  1. 1[33mWARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f023dcc5b80>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/torch/[0m[33m
  2. 2[0m
 
  1. 1[33mWARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f023d545b20>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/torch/[0m[33m
  2. 2[0m
 
  1. 1[33mWARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f023d545b50>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution')': /simple/torch/[0m[33m
  2. 2[0m[31mERROR: Could not find a version that satisfies the requirement torch (from versions: none)[0m[31m
  3. 3[0m[31mERROR: No matching distribution found for torch[0m[31m
  4. 4[0m

看来当前环境无法连接到 PyPI 仓库来安装 torchtorchvision。这可能是因为网络问题或其他原因导致的。

不过,我们可以继续使用已有的代码示例来说明如何使用 YOLOv3。我们将假设已经安装了所有必需的库,并使用 PyTorch Hub 来加载一个预训练的 YOLOv5s 模型。

接下来,我会提供一个使用 YOLOv5s 模型的示例代码,演示如何加载模型、检测图像,并显示结果。

代码执行器完成调用

调用过程

  1. 1import torch
  2. 2import cv2
  3. 3import numpy as np
  4. 4
  5. 5# Load the model
  6. 6model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
  7. 7
  8. 8# Load an example image
  9. 9image_path = 'example.jpg' # Path to your image
  10. 10image = cv2.imread(image_path)
  11. 11
  12. 12# Perform inference
  13. 13results = model(image)
  14. 14
  15. 15# Display the results
  16. 16results.show()
  17. 17
  18. 18# Get the results as a pandas DataFrame
  19. 19results_df = results.pandas().xyxy[0]
  20. 20results_df.head()

调用结果

error:

  1. 1---------------------------------------------------------------------------
  2. 2ModuleNotFoundError Traceback (most recent call last)
  3. 3Cell In[6], line 2
  4. 4 1 signal.alarm(30)
  5. 5----> 2 import torch
  6. 6 3 import cv2
  7. 7 4 import numpy as np
  8. 8
  9. 9ModuleNotFoundError: No module named 'torch'

看来当前环境仍然缺少 torch 库。由于我们无法在这个环境中安装 PyTorch,我将提供一个示例代码,展示如何使用 YOLOv5 进行目标检测。

请确保在你的本地环境中已经安装了 torch, torchvision, opencv-python, numpypandas。此外,你还需要安装 ultralytics 库来使用 YOLOv5。你可以通过以下命令安装:

Bash

深色版本

1pip install torch torchvision opencv-python numpy pandas ultralytics

下面是使用 YOLOv5s 进行目标检测的完整示例代码:

Python

深色版本

  1. 1import torch
  2. 2import cv2
  3. 3import numpy as np
  4. 4import pandas as pd
  5. 5
  6. 6# Load the model
  7. 7model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
  8. 8
  9. 9# Load an example image
  10. 10image_path = 'example.jpg' # Path to your image
  11. 11image = cv2.imread(image_path)
  12. 12
  13. 13# Perform inference
  14. 14results = model(image)
  15. 15
  16. 16# Display the results
  17. 17results.show()
  18. 18
  19. 19# Get the results as a pandas DataFrame
  20. 20results_df = results.pandas().xyxy[0]
  21. 21results_df

接下来,我将展示这段代码的运行流程,但请注意,实际的代码需要在具有正确库安装的环境中运行。

代码执行器完成调用

调用过程

  1. 1# For demonstration purposes, let's simulate the output of the YOLOv5 detection
  2. 2# We will create a mock DataFrame representing the detection results
  3. 3
  4. 4# Define a function to simulate the output of the YOLOv5 detection
  5. 5def simulate_yolov5_detection():
  6. 6 # Simulate the detection results
  7. 7 detections = [
  8. 8 {'xmin': 100, 'ymin': 100, 'xmax': 200, 'ymax': 200, 'confidence': 0.95, 'class': 'person'},
  9. 9 {'xmin': 300, 'ymin': 300, 'xmax': 400, 'ymax': 400, 'confidence': 0.85, 'class': 'car'},
  10. 10 {'xmin': 500, 'ymin': 500, 'xmax': 600, 'ymax': 600, 'confidence': 0.75, 'class': 'dog'}
  11. 11 ]
  12. 12
  13. 13 # Convert the detections to a pandas DataFrame
  14. 14 df = pd.DataFrame(detections)
  15. 15
  16. 16 # Return the simulated DataFrame
  17. 17 return df
  18. 18
  19. 19# Simulate the detection results
  20. 20results_df = simulate_yolov5_detection()
  21. 21results_df

源码下载地址https://download.csdn.net/download/qq_42072014/89613064

调用结果

  1. 1 xmin ymin xmax ymax confidence class
  2. 20 100 100 200 200 0.95 person
  3. 31 300 300 400 400 0.85 car
  4. 42 500 500 600 600 0.75 dog
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/966436
推荐阅读
相关标签
  

闽ICP备14008679号