引言:为什么选择 YOLO?

在目标检测领域,YOLO(You Only Look Once)系列模型一直以其高效性和准确性备受关注。作为新版本,YOLO系列的新版本总能在前辈的基础上进行了多项改进,包括更高的检测精度、更快的推理速度以及更强的小目标检测能力。

在这里插入图片描述

无论是无论是计算机视觉领域的初学者,还是希望快速部署目标检测系统的开发者,YOLO系列 都是一个理想的选择。本指南将带你从理论基础开始,逐步掌握 YOLO系列的核心原理与实战技能。

一、YOLO 核心理论解析

1.1 YOLO 算法的基本思想

YOLO 系列的核心思想是将目标检测任务转化为一个回归问题。与传统的两阶段检测算法(先产生候选区域再进行分类)不同,YOLO 采用单阶段检测策略,直接在一张图片上同时预测目标的位置和类别。

在这里插入图片描述

这种设计使得 YOLO 的检测速度远超传统方法,能够满足实时检测的需求。

1.2 YOLO11/12 的核心改进(简单介绍~ 本文侧重实战)

YOLO11 在之前版本的基础上进行了多项关键改进:

  • 新的骨干网络:采用更高效的特征提取网络,在减少计算量的同时提升特征表达能力

  • 改进的颈部结构:优化了特征融合机制,增强了多尺度特征处理能力

  • 优化的损失函数:提高了模型对小目标和遮挡目标的检测能力

  • 动态锚框机制:根据不同数据集自动调整锚框参数,提升检测精度

YOLO12 则引入了一种以注意力为中心的架构,它不同于以往YOLO 模型中使用的基于 CNN 的传统方法,但仍保持了许多应用所必需的实时推理速度。该模型通过对注意力机制和整体网络架构进行新颖的方法创新,实现了最先进的物体检测精度,同时保持了实时性能。

1.3 目标检测的基本概念

在深入 YOLO系列 之前,我们需要了解几个关键概念:

  • 边界框(Bounding Box):用于定位目标位置的矩形框,通常由 (x, y, w, h) 表示

  • 置信度(Confidence):模型对预测框中存在目标的信任程度

  • 交并比(IoU):衡量预测框与真实框重叠程度的指标

  • 非极大值抑制(NMS):用于去除重复检测框的后处理方法

二、环境搭建:从零开始配置YOLO11/YOLO12/YOLOv10/YOLOv8

2.1 硬件要求

YOLO系列 虽然对硬件要求不算极端,但为了获得良好的训练和推理体验,建议配置:

  • CPU:至少 4 核处理器
  • GPU:NVIDIA 显卡(推荐 RTX 3060 及以上,支持 CUDA)
  • 内存:至少 8GB(推荐 16GB 及以上)
  • 硬盘:至少 10GB 空闲空间

2.2 软件安装步骤

参考我们之前的文章(含视频讲解)
【打怪升级 - 01】保姆级机器视觉入门指南:硬件选型 + CUDA/cuDNN/Miniconda/PyTorch/Pycharm 安装全流程(附版本匹配秘籍)

2.2.1 安装 ultralytics

Ultralytics 库已经集成了YOLO11/YOLO12/YOLOv10/YOLOv8,安装命令如下:

pip3 install ultralytics
2.2.4 验证安装
from ultralytics import YOLO# 加载预训练模型
model = YOLO('yolo11n.pt')# 打印模型信息
print(model.info())

如果运行无错误并显示模型信息,则安装成功。

三、YOLO11/YOLO12/YOLOv10/YOLOv8 实战:图像与视频检测

3.1 使用预训练模型进行图像检测

YOLO11/YOLO12/YOLOv10/YOLOv8提供了多个预训练模型,从小型模型(n)到大型模型(x),可以根据需求选择:

from ultralytics import YOLO
import cv2# 加载预训练模型
model = YOLO('yolo11n.pt')  # 小型模型,速度快
# model = YOLO('yolo11s.pt')  # 中型模型,平衡速度和精度
# model = YOLO('yolo11m.pt')  # 大型模型,精度更高
# model = YOLO('yolo11l.pt')  # 更大的模型
# model = YOLO('yolo11x.pt')  # 最大模型,精度最高# Load a COCO-pretrained YOLO12n model
#model = YOLO("yolo12n.pt")# Load a COCO-pretrained YOLOv10n model
#model = YOLO("yolov10n.pt")# Load a COCO-pretrained YOLOv8n model
#model = YOLO("yolov8n.pt")# 检测单张图片
results = model('test.jpg')  # 替换为你的图片路径# 处理检测结果
for result in results:# 绘制检测框annotated_img = result.plot()# 显示结果cv2.imshow('YOLO11 Detection', annotated_img)cv2.waitKey(0)cv2.destroyAllWindows()# 保存结果result.save('result.jpg')

3.2 视频目标检测

YOLO11/YOLO12/YOLOv10/YOLOv8 同样支持视频文件和摄像头实时检测:

from ultralytics import YOLO
import cv2# 加载模型
model = YOLO('yolo11n.pt')# Load a COCO-pretrained YOLO12n model
#model = YOLO("yolo12n.pt")# Load a COCO-pretrained YOLOv10n model
#model = YOLO("yolov10n.pt")# Load a COCO-pretrained YOLOv8n model
#model = YOLO("yolov8n.pt")# 视频文件检测
video_path = "input.mp4"
cap = cv2.VideoCapture(video_path)# 获取视频属性
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS)# 设置输出视频
output_path = "output.mp4"
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(output_path, fourcc, fps, (width, height))while cap.isOpened():ret, frame = cap.read()if not ret:break# 检测帧results = model(frame)# 绘制检测结果annotated_frame = results[0].plot()# 显示帧cv2.imshow('YOLO Video Detection', annotated_frame)# 写入输出视频out.write(annotated_frame)# 按q退出if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放资源
cap.release()
out.release()
cv2.destroyAllWindows()

3.3 摄像头实时检测

只需将视频路径替换为摄像头索引即可实现实时检测:

# 摄像头实时检测
cap = cv2.VideoCapture(0)  # 0表示默认摄像头

四、模型训练:自定义数据集训练 YOLO11/YOLO12/YOLOv10/YOLOv8

4.1 数据集准备

YOLO系列需要特定格式的数据集,基本结构如下:

dataset/
├── images/
│   ├── train/
│   │   ├── img1.jpg
│   │   ├── img2.jpg
│   │   └── ...
│   └── val/
│       ├── img1.jpg
│       ├── img2.jpg
│       └── ...
└── labels/├── train/│   ├── img1.txt│   ├── img2.txt│   └── ...└── val/├── img1.txt├── img2.txt└── ...

每个图像对应一个标签文件,标签格式为:

class_id x_center y_center width height

其中所有坐标都是归一化的(0-1 范围)。

4.2 创建配置文件

创建一个 YAML 配置文件(例如 coco8.yaml):

# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license# COCO8 dataset (first 8 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/detect/coco8/
# Example usage: yolo train data=coco8.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco8 ← downloads here (1 MB)# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: coco8 # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)# Classes
names:0: person1: bicycle2: car3: motorcycle4: airplane5: bus6: train7: truck8: boat9: traffic light10: fire hydrant11: stop sign12: parking meter13: bench14: bird15: cat16: dog17: horse18: sheep19: cow20: elephant21: bear22: zebra23: giraffe24: backpack25: umbrella26: handbag27: tie28: suitcase29: frisbee30: skis31: snowboard32: sports ball33: kite34: baseball bat35: baseball glove36: skateboard37: surfboard38: tennis racket39: bottle40: wine glass41: cup42: fork43: knife44: spoon45: bowl46: banana47: apple48: sandwich49: orange50: broccoli51: carrot52: hot dog53: pizza54: donut55: cake56: chair57: couch58: potted plant59: bed60: dining table61: toilet62: tv63: laptop64: mouse65: remote66: keyboard67: cell phone68: microwave69: oven70: toaster71: sink72: refrigerator73: book74: clock75: vase76: scissors77: teddy bear78: hair drier79: toothbrush# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8.zip

4.3 开始训练

from ultralytics import YOLO# 加载基础模型
model = YOLO('yolo11n.pt')# Load a COCO-pretrained YOLO12n model
#model = YOLO("yolo12n.pt")# Load a COCO-pretrained YOLOv10n model
#model = YOLO("yolov10n.pt")# Load a COCO-pretrained YOLOv8n model
#model = YOLO("yolov8n.pt")# 训练模型
results = model.train(data='custom_data.yaml',  # 配置文件路径epochs=50,                # 训练轮数imgsz=640,                # 输入图像大小batch=16,                 # 批次大小device=0,                 # GPU编号,-1表示使用CPUworkers=4,                # 数据加载线程数project='my_yolo11_project',  # 项目名称name='custom_training'    # 训练名称
)

4.4 训练过程监控

训练过程中,可以通过以下方式监控:

  • 控制台输出:包含每轮的损失值、精度等指标
  • TensorBoard:运行tensorboard --logdir=my_yolo_project/custom_training查看详细曲线
  • 训练生成的图表:保存在my_yolo11_project/custom_training/results.png

五、模型评估与优化

5.1 评估模型性能

训练完成后,可以评估模型在验证集上的表现:

# 评估模型
metrics = model.val()# 打印评估指标
print(f"mAP@0.5: {metrics.box.map50:.3f}")
print(f"mAP@0.5:0.95: {metrics.box.map:.3f}")

关键评估指标:

  • mAP@0.5:IoU 阈值为 0.5 时的平均精度
  • mAP@0.5:0.95:IoU 阈值从 0.5 到 0.95 的平均精度

5.2 模型优化策略

如果模型性能不理想,可以尝试以下优化策略:

  1. 增加训练数据:收集更多多样化的样本(用的最多的方法~)

  2. 数据增强

    :在训练时使用更多数据增强方法

     model.train(data='custom_data.yaml', epochs=50, augment=True)
    
  3. 调整学习率:根据训练曲线调整学习率

  4. 使用更大的模型:如从 yolo11n 换成 yolo11s 或更大的模型

  5. 延长训练时间:增加训练轮数

  6. 调整图像大小:尝试更大的输入尺寸(如 800 或 1024)

六、模型部署

6.1 导出为其他格式

YOLO11/YOLO12/YOLOv10/YOLOv8 支持导出为多种部署格式:

# 导出为ONNX格式
model.export(format='onnx')# 导出为TensorRT格式(需要安装TensorRT)
model.export(format='engine')# 导出为CoreML格式(适用于iOS设备)
model.export(format='coreml')

6.2 构建简单的 Web 应用

使用 Flask 构建一个简单的 YOLO目标检测 Web 服务:

from flask import Flask, request, jsonify
from ultralytics import YOLO
import cv2
import base64
import numpy as npapp = Flask(__name__)
model = YOLO('yolo11n.pt')
# yolo12n
#model = YOLO("yolo12n.pt")
# yolov10n
#model = YOLO("yolov10n.pt")
# yolov8n
#model = YOLO("yolov8n.pt")@app.route('/detect', methods=['POST'])
def detect():# 获取图像数据data = request.jsonimg_data = base64.b64decode(data['image'])nparr = np.frombuffer(img_data, np.uint8)img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)# 检测results = model(img)# 处理结果detections = []for result in results:for box in result.boxes:x1, y1, x2, y2 = box.xyxy[0].tolist()conf = box.conf[0].item()cls = box.cls[0].item()detections.append({'class': model.names[int(cls)],'confidence': conf,'bbox': [x1, y1, x2, y2]})return jsonify({'detections': detections})if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)

七、常见问题与解决方案

  1. 训练时显存不足
    • 减小批次大小(batch size)
    • 减小输入图像尺寸(imgsz)
    • 使用更小的模型
  2. 检测精度低
    • 检查数据集标注是否准确
    • 增加训练轮数
    • 尝试更大的模型
    • 调整学习率策略
  3. 推理速度慢
    • 使用更小的模型
    • 减小输入图像尺寸
    • 确保使用 GPU 进行推理
    • 导出为 TensorRT 等优化格式

结语

通过本指南,你已经掌握了 YOLO系列 的基本理论和实战技能,包括环境搭建、模型使用、自定义训练和部署应用。

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

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

相关文章

JMeter每次压测前清除全部以确保异常率准确(以黑马点评为例、详细图解)

目录 一、前言 二、未清除全部会出现的情况(以乐观锁解决超卖问题为例) 三、清除全部就能得到准确的结果 一、前言 在学习黑马点评之前我并没有接触过JMeter这个压测软件,然后在黑马点评视频中老师也是直接拿起JMeter就开始使用,所以我一直在不断搜索…

关于新学C++编程Visual Studio 2022开始,使用Cmake工具构建Opencv和SDK在VS里编译项目开发简介笔记

1. C 项目build文件夹 2. VS解决方案管理器Solution——.sln文件 3. CMake 自动化构建工具 4. SDK软件开发工具包作为初学者,从工程项目开始接触完整一套流程工具和编译,有助于快速上手。 一、C 项目build文件夹在 VS2022 中打开 C 项目后,在…

测试ppyoloe的小样本few-shot能力,10张图片精度达到69.8%

近期公司有个项目,需要解决长尾样本的问题,所以测试了一下paddlepaddle小样本的能力。 环境::T4 、ubuntu 、cuda-11.6 、py3.9、 paddlepaddle-gpu2.6.0、pip install opencv-python4.5.5.64 -i https://pypi.tuna.tsinghua.…

结构化布线系统详解

1. 结构化布线系统概述 结构化布线系统(Structured Cabling System, SCS)是一种标准化、模块化的建筑物或建筑群内信息传输基础设施,它为语音、数据、图像等多媒体业务提供了统一的物理传输介质。与传统的点对点布线方式不同,结构化布线采用层次化、标准…

【Java学习】匿名内部类的向外访问机制

目录 一、方法局部变量的访问 1.生命周期 1.1方法生命周期 1.2匿名实例生命周期 1.3生命超时性 2.变量捕获 2.1按值捕获 2.1.1值捕获优势 2.1.1.1生命及时访问 2.1.1.2线程安全 2.1.2常量值捕获优势 2.2按引用捕获 引用捕获风险 (1)生命超时访问 (2)线程不安全 …

LinkedList的模拟实现+LinkedList和ArrayList的区别

目录 LinkedList的模拟实现 什么是双向链表 增加数据 头插法: 尾插法: 指定的下标插入: 删除数据 删除双向链表中出现的第一个key 置空所有数据 LinkedList和ArrayList的区别 顺序表对应的集合类是ArrayList;链表对应的集…

Vue + WebSocket 实时数据可视化实战:多源融合与模拟数据双模式设计

在现代交通大屏项目中,实时数据的采集和可视化尤为重要。本文结合 Vue3 和 ECharts,分享一个支持多 WebSocket 数据源实时合并、模拟数据调试、自动重连的完整设计方案,帮助你快速搭建健壮的数据可视化组件。一、项目背景与核心需求实时接收多…

C#索引器、接口、泛型

以下是对提供的 C# 代码中涉及的核心知识点的梳理和总结,涵盖索引器、接口、泛型三大核心内容,以及相关实践要点:一、索引器(Indexer)索引器是一种允许类或结构体像数组一样通过[]语法访问成员的特殊成员,本…

界面组件DevExpress WPF中文教程:Grid - 如何过滤节点?

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

Excel——INDEX和MATCH傻傻分不清?

核心逻辑​先用 MATCH 找到目标姓名在表格中的 ​行号,再用 INDEX 根据行号 ​提取对应信息。就像查字典:先用拼音找到字的页码(MATCH 找行号)再翻到该页看具体解释(INDEX 取数据)​分步拆解(以…

制造业低代码平台实战评测:简道云、钉钉宜搭、华为云Astro、金蝶云·苍穹、斑斑低代码,谁更值得选?

上回聊了斑斑和简道云,不少同行私信问我其他几个低代码平台怎么样,今天就给大家来个"五大门派"终极对决! 一、先说痛点 制造业搞数字化最怕三件事: 1.钱花了没效果(大平台用不起,小工具不够用&…

Jenkins中HTML文件显示样式问题解决方案

Jenkins中HTML文件显示样式问题解决方案 问题描述 在Jenkins中归档的HTML文件显示格式失效,样式无法正常显示,但在本地浏览器中打开却能正常显示。 问题原因 Jenkins为了安全考虑,默认设置了严格的内容安全策略(Content Security Policy, CSP…

四、配置文件

文章目录1. 文件类型1.1 properties1.2 yaml1.2.1 简介1.2.2 基本语法1.2.3 数据类型1.2.4 示例2. 配置提示1. 文件类型 1.1 properties 同以前的properties的用法 1.2 yaml 1.2.1 简介 YAML 是 “YAML Ain’t Markup Language”(YAML 不是一种标记语言&#x…

Python常用医疗AI库以及案例解析(场景化进阶版)

📊 框架应用拓扑图用例 #mermaid-svg-lZ1J5KCaVWBV2kAu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-lZ1J5KCaVWBV2kAu .error-icon{fill:#552222;}#mermaid-svg-lZ1J5KCaVWBV2kAu .error-text{fill:#552222;st…

Python高效操作Kafka实战指南

Python操作Kafka的高效 以下是使用Python操作Kafka的高效消息发送实例,涵盖基础发送、批量处理、异步回调等场景。示例基于confluent-kafka库(推荐)和kafka-python库,代码均经过实测。 流程图 基础消息发送(同步) from confluent_kafka import Producerproducer = Pro…

离线快速处理PDF格式转化的方案

日常办公中,PDF 几乎成了我们离不开的文件格式。然而像 WPS 这样的工具,不少实用功能都需要额外付费才能解锁。它的打开方式很简单,双击桌面图标即可运行。它不会弹出主界面,而是默默驻留在系统托盘区,需要时双击图标就…

SpringMVC注解与SpringCloudOpenFeign注解对比

1. 背景知识 梳理SpringMVC和SpringCloudOpenFeign常用注解后: Spring MVC中常用注解_笔记-CSDN博客Spring Cloud OpenFeign 常用注解_笔记-CSDN博客 这里对两类注解做个对比。理解两者定位(服务端 vs 客户端)是掌握注解使用的关键&#x…

Linux 时间同步的流程

一、问题时间RTC时间、系统时间(UTC)和本地时间的关系如下:‌RTC时间‌(硬件时钟):显示为UTC时间格式:02:50:35/02:51:28由主板电池供电,独立于系统运行‌12通常存储UTC时间(Linux默认配置&…

VSCode——python选择解释器消失的解决办法

VSCode软件的左下角 设置——检查更新:

笛卡尔积规避:JOIN条件完整性检查要点

笛卡尔积是数据库查询中的高风险操作,多表JOIN时缺失有效关联条件会导致结果集指数级膨胀,引发‌性能塌方‌甚至系统崩溃‌。以下是核心检查策略及防御方案:一、笛卡尔积的致命影响‌‌性能塌方‌百万级订单表与千万级用户表缺失ON条件时&…