一、YOLO 简史

YOLO(You Only Look Once)是一种流行的物体检测图像分割模型,由华盛顿大学的 Joseph Redmon 和 Ali Farhadi 开发。YOLO 于 2015 年推出,因其高速和高精度而广受欢迎。

  • YOLOv2于2016年发布,通过引入批量归一化、锚框和维度聚类,改进了原始模型。
  • 2018年推出的YOLOv3,通过使用更高效的主干网络、多个锚点和空间金字塔池化,进一步提高了模型的性能。
  • YOLOv4于 2020 年发布,引入了诸如 Mosaic 数据增强、一种新的无锚框检测头以及一种新的 损失函数等创新。
  • YOLOv5 进一步提高了模型的性能,并添加了新功能,例如超参数优化、集成实验跟踪和自动导出为流行的导出格式。
  • YOLOv6 于 2022 年由 美团 开源,并已应用于该公司的许多自动送货机器人中。
  • YOLOv7增加了额外的任务,如对 COCO 关键点数据集进行姿势估计 。
  • Ultralytics 于 2023 年发布的 YOLOv8 引入了新功能和改进,以增强性能、灵活性和效率,并支持全方位的视觉 AI 任务。
  • YOLOv9 引入了创新方法,如可编程梯度信息 (PGI) 和通用高效层聚合网络 (GELAN)。
  • YOLOv10清华大学的研究人员使用 Ultralytics Python 包 创建,通过引入消除非最大值抑制 (NMS) 要求的端到端头,提供了实时物体检测方面的进展。
  • YOLO11 🚀功能:Ultralytics 最新的YOLO 模型可在多项任务中提供最先进的 (SOTA) 性能,包括物体检测分割姿势估计跟踪分类,充分利用了各种人工智能应用和领域的能力。

来源:https://docs.ultralytics.com/zh/#yolo-a-brief-history

二、YOLOv5 快速入门

https://github.com/ultralytics/yolov5
https://docs.ultralytics.com/zh/yolov5/quickstart_tutorial/

1.安装

克隆 YOLOv5 仓库 并建立环境,为启动做好准备。这确保安装所有必需的 requirements。检查您是否已准备好 Python>=3.8.0PyTorch>=1.8 以便启动。这些基础工具对于有效运行 YOLOv5 至关重要。

# Clone the YOLOv5 repository
git clone https://github.com/ultralytics/yolov5

# Navigate to the cloned directory
cd yolov5

# Install required packages
pip install -r requirements.txt

2.使用 PyTorch Hub 进行推理

体验 YOLOv5 PyTorch Hub 推理的简易性,模型 可以从最新的 YOLOv5 版本 中无缝下载。此方法利用 PyTorch 的强大功能,简化了模型加载和执行过程,从而轻松获得预测结果。

2.1 模型大小

https://github.com/ultralytics/yolov5/releases下载模型放到项目根目录
在这里插入图片描述

模型 参数量(M) 计算量(GFLOPs) 推理速度(FPS,GPU) 检测精度(COCO mAP) 适用场景
yolov5n 1.9 4.5 约 400 28.0 移动端、嵌入式设备(资源受限)
yolov5s 7.2 16.5 约 300 37.4 普通 GPU、实时性要求高的场景
yolov5m 21.2 49.0 约 200 45.4 平衡精度与速度的场景
yolov5l 46.5 109.1 约 100 49.0 精度优先,对速度要求较低
yolov5x 86.7 205.7 约 50 50.7 高性能 GPU,追求最高精度

2.2 适用场景

  • yolov5n/s:资源有限(移动端、嵌入式)或实时性优先(如无人机避障、实时直播弹幕检测)。
  • yolov5m:通用场景(如普通监控、工业质检),平衡速度与精度。
  • yolov5l/x:高性能设备(如服务器 GPU),追求最高精度(如医学影像检测、精密零件识别)。

2.3 实战

import torch  
  
# Load a YOLOv5 model (options: yolov5n, yolov5s, yolov5m, yolov5l, yolov5x)  
model = torch.hub.load("ultralytics/yolov5", "yolov5x")  # Default: yolov5s  
  
# Define the input image source (URL, local file, PIL image, OpenCV frame, numpy array, or list)  
img = "https://ultralytics.com/images/zidane.jpg"  # Example image  
  
# Perform inference (handles batching, resizing, normalization automatically)  
results = model(img)  
  
# Process the results (options: .print(), .show(), .save(), .crop(), .pandas())  
results.print()  # Print results to console  
results.show()  # Display results in a window  
results.save()  # Save results to runs/detect/exp
origin result
在这里插入图片描述 在这里插入图片描述

3.使用 detect.py 进行推理

Harness detect.py 用于多功能 推理 来自各种来源。它会自动获取 模型 来自最新的 YOLOv5 发布 并轻松保存结果。此脚本非常适合命令行使用,并将 YOLOv5 集成到更大的系统中,支持图像、视频、目录、网络摄像头,甚至 实时流.

# Run inference using a webcam
python detect.py --weights yolov5s.pt --source 0

# Run inference on a local image file
python detect.py --weights yolov5s.pt --source img.jpg

# Run inference on a local video file
python detect.py --weights yolov5s.pt --source vid.mp4

# Run inference on a screen capture
python detect.py --weights yolov5s.pt --source screen

# Run inference on a directory of images
python detect.py --weights yolov5s.pt --source path/to/images/

# Run inference on a text file listing image paths
python detect.py --weights yolov5s.pt --source list.txt

# Run inference on a text file listing stream URLs
python detect.py --weights yolov5s.pt --source list.streams

# Run inference using a glob pattern for images
python detect.py --weights yolov5s.pt --source 'path/to/*.jpg'

# Run inference on a YouTube video URL
python detect.py --weights yolov5s.pt --source 'https://youtu.be/LNwODJXcvt4'

# Run inference on an RTSP, RTMP, or HTTP stream
python detect.py --weights yolov5s.pt --source 'rtsp://example.com/media.mp4'

3.1 实战

python detect.py --weights yolov5x.pt --source 'https://ultralytics.com/images/zidane.jpg'
origin result
在这里插入图片描述 在这里插入图片描述

4.训练

复现 YOLOv5 COCO 数据集 通过遵循以下步骤进行基准测试 训练说明 如下。必要的 模型数据集 (例如 coco128.yaml 或完整版 coco.yaml)直接从最新的 YOLOv5 中提取 发布。在V100上训练YOLOv5n/s/m/l/x GPU 通常分别需要 1/2/4/6/8 天(请注意 多 GPU 训练 设置工作更快)。通过使用尽可能高的值来最大化性能 --batch-size 或使用 --batch-size -1 用于 YOLOv5 自动批处理 功能,可自动找到最佳 批次大小。以下的批处理大小是V100-16GB GPU的理想选择。请参考我们的 配置指南 有关模型配置文件的详细信息(*.yaml)。

# Train YOLOv5n on COCO for 300 epochs
python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov5n.yaml --batch-size 128

# Train YOLOv5s on COCO for 300 epochs
python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov5s.yaml --batch-size 64

# Train YOLOv5m on COCO for 300 epochs
python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov5m.yaml --batch-size 40

# Train YOLOv5l on COCO for 300 epochs
python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov5l.yaml --batch-size 24

# Train YOLOv5x on COCO for 300 epochs
python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov5x.yaml --batch-size 16

4.1 coco数据集

https://cocodataset.org/#download

4.1.1 完整版

2017 Train images [118K/18GB]
2017 Val images [5K/1GB]
2017 Test images [41K/6GB]

4.1.2 测试版

https://github.com/ultralytics/assets/releases/download/v0.0.0/coco128.zip

4.2实战

python train.py --data coco128.yaml --epochs 3 --weights '' --cfg yolov5n.yaml --batch-size 128

5.在自定义数据上训练 YOLOv5

https://docs.ultralytics.com/zh/yolov5/tutorials/train_custom_data/

6.标注

安装标注软件

pip install labelimg

打开标注软件

labelImg

7.TFLite、ONNX、CoreML、TensorRT 导出

https://docs.ultralytics.com/zh/yolov5/tutorials/model_export/

  • 导出到 ONNX 或 OpenVINO,CPU 速度提高高达 3 倍。请参阅CPU 基准测试
  • 导出到 TensorRT,GPU 速度提高高达 5 倍。请参阅GPU 基准测试
格式 export.py --include 模型
PyTorch - yolov5s.pt
TorchScript torchscript yolov5s.torchscript
ONNX onnx yolov5s.onnx
OpenVINO openvino yolov5s_openvino_model/
TensorRT engine yolov5s.engine
CoreML coreml yolov5s.mlmodel
TensorFlow SavedModel saved_model yolov5s_saved_model/
TensorFlow GraphDef pb yolov5s.pb
TensorFlow Lite tflite yolov5s.tflite
TensorFlow Edge TPU edgetpu yolov5s_edgetpu.tflite
TensorFlow.js tfjs yolov5s_web_model/
PaddlePaddle paddle yolov5s_paddle_model/

7.1 导出到 ONNX

python export.py --weights runs/train/exp2/weights/best.pt --include onnx

7.2 导出到 TensorRT

#  pip install nvidia-tensorrt
python export.py --weights runs/train/exp2/weights/best.pt --include engine --device 0

三、YOLOv11 快速入门

https://docs.ultralytics.com/zh/quickstart/

# Clone the ultralytics repository
git clone https://github.com/ultralytics/ultralytics

# Navigate to the cloned directory
cd ultralytics

# Install the package in editable mode for development
pip install -e .

1.目标检测

目标检测是一项涉及识别图像或视频流中目标的位置和类别的任务。

目标检测器的输出是一组边界框,这些边界框包围了图像中的目标,以及每个框的类别标签和置信度分数。当您需要在场景中识别感兴趣的目标,但不需要确切知道目标在哪里或其确切形状时,目标检测是一个不错的选择。
来源:https://docs.ultralytics.com/zh/tasks/detect/

模型下载:https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n.pt

yolo detect predict model=yolo11n.pt source='https://ultralytics.com/images/bus.jpg' # predict with official model
origin result
在这里插入图片描述 在这里插入图片描述

2.实例分割

实例分割比对象检测更进一步,包括识别图像中的各个对象并将它们与图像的其余部分分割开来。

实例分割模型的输出是一组掩码或轮廓,它们勾勒出图像中每个对象,以及每个对象的类别标签和置信度分数。 当您不仅需要知道对象在图像中的位置,还需要知道它们的精确形状时,实例分割非常有用。
来源:https://docs.ultralytics.com/zh/tasks/segment/

yolo segment predict model=yolo11n-seg.pt source='https://ultralytics.com/images/bus.jpg'
origin result
在这里插入图片描述 在这里插入图片描述

3.图像分类

图像分类是三个任务中最简单的,它涉及将整个图像分类到一组预定义的类别中。

图像分类器的输出是单个类别标签和一个置信度分数。当您只需要知道图像属于哪个类别,而不需要知道该类别的对象位于何处或其确切形状时,图像分类非常有用。
来源:https://docs.ultralytics.com/zh/tasks/classify/

yolo classify predict model=yolo11n-cls.pt source='https://ultralytics.com/images/bus.jpg'
origin result
在这里插入图片描述 在这里插入图片描述

4.姿势估计

姿势估计是一项涉及识别图像中特定点(通常称为关键点)位置的任务。关键点可以代表物体的各个部分,如关节、地标或其他显著特征。关键点的位置通常用一组二维 [x, y] 或 3D [x, y, visible] 坐标。

姿势估计 模型的输出是一组代表图像中物体上关键点的点,通常还有每个点的置信度分数。当您需要识别场景中物体的特定部分及其相互之间的位置关系时,姿势估计是一个不错的选择。
来源:https://docs.ultralytics.com/zh/tasks/pose/

yolo pose predict model=yolo11n-pose.pt source='https://ultralytics.com/images/bus.jpg'
origin result
在这里插入图片描述 在这里插入图片描述

5.定向边界框

定向对象检测通过引入一个额外的角度来更准确地定位图像中的对象,从而比标准对象检测更进一步。

定向目标检测器的输出是一组旋转的边界框,这些边界框精确地包围了图像中的目标,以及每个框的类别标签和置信度分数。当目标以各种角度出现时,定向边界框特别有用,例如在航空图像中,传统的轴对齐边界框可能包含不必要的背景。
来源:https://docs.ultralytics.com/zh/tasks/obb/

yolo obb predict model=yolo11n-obb.pt source='https://ultralytics.com/images/boats.jpg'
origin result
在这里插入图片描述 在这里插入图片描述

6.多目标跟踪

视频分析领域中的目标跟踪是一项关键任务,它不仅能识别帧内目标的位置和类别,还能在视频播放过程中为每个检测到的目标维护一个唯一的 ID。其应用范围非常广泛,从监控和安全到实时体育分析,无所不及。
来源:https://docs.ultralytics.com/zh/modes/track/

# Perform tracking with various models using the command line interface
yolo track model=yolo11n.pt source="https://youtu.be/LNwODJXcvt4"      # Official Detect model
yolo track model=yolo11n-seg.pt source="https://youtu.be/LNwODJXcvt4"  # Official Segment model
yolo track model=yolo11n-pose.pt source="https://youtu.be/LNwODJXcvt4" # Official Pose model
yolo track model=path/to/best.pt source="https://youtu.be/LNwODJXcvt4" # Custom trained model

# Track using ByteTrack tracker
yolo track model=path/to/best.pt tracker="bytetrack.yaml"

随时间绘制轨迹

from collections import defaultdict

import cv2
import numpy as np

from ultralytics import YOLO

# Load the YOLO11 model
model = YOLO("yolo11n.pt")

# Open the video file
video_path = "path/to/video.mp4"
cap = cv2.VideoCapture(video_path)

# Store the track history
track_history = defaultdict(lambda: [])

# Loop through the video frames
while cap.isOpened():
    # Read a frame from the video
    success, frame = cap.read()

    if success:
        # Run YOLO11 tracking on the frame, persisting tracks between frames
        result = model.track(frame, persist=True)[0]

        # Get the boxes and track IDs
        if result.boxes and result.boxes.is_track:
            boxes = result.boxes.xywh.cpu()
            track_ids = result.boxes.id.int().cpu().tolist()

            # Visualize the result on the frame
            frame = result.plot()

            # Plot the tracks
            for box, track_id in zip(boxes, track_ids):
                x, y, w, h = box
                track = track_history[track_id]
                track.append((float(x), float(y)))  # x, y center point
                if len(track) > 30:  # retain 30 tracks for 30 frames
                    track.pop(0)

                # Draw the tracking lines
                points = np.hstack(track).astype(np.int32).reshape((-1, 1, 2))
                cv2.polylines(frame, [points], isClosed=False, color=(230, 230, 230), thickness=10)

        # Display the annotated frame
        cv2.imshow("YOLO11 Tracking", frame)

        # Break the loop if 'q' is pressed
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Break the loop if the end of the video is reached
        break

# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()

实战

yolo track model=yolo11n.pt source="/media/d/backup/yolo.mkv"   

四、参考

YOLO5识别象棋

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐