当前位置: 首页 > news >正文

YOLOv11开发流程

1. YOLOv11简介

YOLO(You Only Look Once)是一种实时目标检测算法,自2015年Joseph Redmon等人提出以来,已经发展到第十一代(YOLOv11)。YOLOv11在保持高速检测的同时,大幅提升了检测精度,引入了更多先进技术,如更高效的骨干网络、改进的特征融合策略和优化的损失函数等。

2. 环境搭建

首先需要准备好YOLOv11的运行环境,包括Python、PyTorch和相关依赖库。

# 创建虚拟环境
# 创建虚拟环境(使用venv)
python -m venv yolov11_env --system-site-packages# 激活虚拟环境(Linux/macOS)
source yolov11_env/bin/activate# 安装PyTorch(根据CUDA版本选择),装了的话就不用装了
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118# 克隆YOLOv11仓库
git clone https://github.com/ultralytics/yolov11.git
cd yolov11# 安装依赖库
pip install -r requirements.txt

环境验证:

python check_env.py

该脚本会检查PyTorch版本、CUDA可用性和其他必要依赖是否正确安装。

3. 数据准备

目标检测任务需要标注好的数据集,通常使用COCO、Pascal VOC等公开数据集,也可以使用自己标注的数据集。

3.1 数据集结构

YOLOv11要求数据集遵循特定的目录结构:

datasets/my_dataset/images/train/val/test/labels/train/val/test/data.yaml
3.2 数据标注格式

YOLO使用txt文件存储标注信息,每个txt文件对应一张图像,格式如下:

<class_id> <x_center> <y_center> <width> <height>

其中坐标值都是相对于图像宽高的归一化值。

3.3 数据集配置文件

data.yaml文件需要包含以下信息:

train: ../datasets/my_dataset/images/train/
val: ../datasets/my_dataset/images/val/
test: ../datasets/my_dataset/images/test/  # 可选nc: 80  # 类别数量
names: ['person', 'bicycle', 'car', ...]  # 类别名称
3.4 数据增强

YOLOv11内置了丰富的数据增强方法,包括随机缩放、旋转、翻转、色域变换等。可以通过修改配置文件来调整增强策略:

# 数据增强配置示例
augment:hsv_h: 0.015  # 色调增强系数hsv_s: 0.7    # 饱和度增强系数hsv_v: 0.4    # 亮度增强系数flipud: 0.5   # 上下翻转概率fliplr: 0.5   # 左右翻转概率rotate: 10.0  # 旋转角度范围scale: 0.5    # 缩放比例范围
4. 模型配置

YOLOv11提供了多种预训练模型,可以根据任务需求选择合适的模型。模型配置文件位于models/目录下。

4.1 模型选择

常见的YOLOv11模型有:

  • yolov11n.pt:超轻量模型,适合边缘设备
  • yolov11s.pt:小模型,平衡速度和精度
  • yolov11m.pt:中等模型,适合通用场景
  • yolov11l.pt:大模型,高精度
  • yolov11x.pt:超大模型,最高精度
4.2 自定义模型

如果需要自定义模型结构,可以修改相应的yaml文件。例如,修改anchors、深度和宽度系数等:

# 模型配置示例
nc: 80  # 类别数
depth_multiple: 0.33  # 模型深度系数
width_multiple: 0.50  # 模型宽度系数backbone:# [from, number, module, args][[-1, 1, Conv, [64, 3, 2]],  # 0-P1/2[-1, 1, Conv, [120, 3, 2]],  # 1-P2/4[-1, 3, C3, [120]],[-1, 1, Conv, [240, 3, 2]],  # 3-P3/8[-1, 6, C3, [240]],[-1, 1, Conv, [480, 3, 2]],  # 5-P4/16[-1, 9, C3, [480]],[-1, 1, Conv, [960, 3, 2]],  # 7-P5/32[-1, 3, C3, [960]],[-1, 1, SPPF, [960, 5]],  # 9]
5. 模型训练

准备好数据和模型配置后,就可以开始训练了。

5.1 基础训练命令
python train.py --img 640 --batch 16 --epochs 100 --data data.yaml --cfg models/yolov11s.yaml --weights yolov11s.pt --name my_yolov11s_run
5.2 训练参数详解
  • --img 640:输入图像尺寸,YOLOv11支持不同尺寸的输入
  • --batch 16:批次大小,根据GPU内存调整
  • --epochs 100:训练轮次,通常需要数百轮
  • --data data.yaml:数据集配置文件路径
  • --cfg models/yolov11s.yaml:模型配置文件路径
  • --weights yolov11s.pt:预训练权重路径,从头训练用--weights ''
  • --name my_yolov11s_run:训练运行名称,用于保存结果
  • --device 0:指定GPU ID,多GPU用0,1,2CPU
  • --workers 8:数据加载线程数
  • --hyp data/hyps/hyp.scratch.yaml:超参数配置文件
5.3 高级训练技巧
# 混合精度训练(加速训练)
python train.py --img 640 --batch 16 --epochs 100 --data data.yaml --weights yolov11s.pt --amp# 多GPU训练
python -m torch.distributed.run --nproc_per_node 4 train.py --img 640 --batch 64 --epochs 100 --data data.yaml --weights yolov11s.pt# 断点续训
python train.py --resume# 超参数优化
python train.py --hyp data/hyps/hyp.scratch.yaml --epochs 30 --data data.yaml --weights yolov11s.pt --evolve 50
6. 模型验证

训练完成后,需要验证模型的性能。

python val.py --weights runs/train/my_yolov11s_run/weights/best.pt --data data.yaml --img 640 --batch 32 --task val

验证参数详解:

  • --task val/test:验证类型(验证集/测试集)
  • --conf 0.001:置信度阈值
  • --iou 0.65:IoU阈值
  • --save-txt:保存预测结果到txt文件
  • --save-conf:保存置信度分数
  • --save-json:保存结果到COCO JSON格式

验证完成后,会生成一系列评估指标,包括mAP@0.5、mAP@0.5:0.95等。

7. 模型推理

使用训练好的模型进行目标检测推理。

python detect.py --weights runs/train/my_yolov11s_run/weights/best.pt --source path/to/images/ --img 640 --conf 0.4 --iou 0.5

推理参数详解:

  • --source 0:0表示摄像头,也可以是图像/视频路径或文件夹
  • --view-img:显示推理结果
  • --save-txt:保存预测框坐标到txt文件
  • --save-conf:保存预测置信度
  • --line-thickness 3:边界框线条粗细
  • --hide-labels:隐藏标签
  • --hide-conf:隐藏置信度
7.1 对视频进行推理
python detect.py --weights best.pt --source path/to/video.mp4
7.2 对摄像头进行实时推理
python detect.py --weights best.pt --source 0 --view-img
8. 模型导出

将训练好的模型导出为不同格式,以便在不同平台上部署。

python export.py --weights runs/train/my_yolov11s_run/weights/best.pt --img 640 --batch 1 --include onnx tensorrt openvino

导出参数详解:

  • --include onnx/tensorrt/openvino/coreml/pb/tflite:导出格式
  • --half:半精度FP16导出
  • --dynamic:动态批处理导出(ONNX)
  • --simplify:简化ONNX模型
  • --opset 16:ONNX opset版本
8.1 导出为ONNX格式
python export.py --weights best.pt --include onnx --dynamic
8.2 导出为TensorRT格式
python export.py --weights best.pt --include tensorrt --half
9. 模型部署

导出的模型可以部署到不同平台上。

9.1 ONNX模型部署
import onnxruntime
import cv2
import numpy as np# 加载模型
session = onnxruntime.InferenceSession('best.onnx')# 预处理图像
def preprocess(image):image = cv2.resize(image, (640, 640))image = image.transpose(2, 0, 1)image = np.expand_dims(image, 0)image = image.astype(np.float32) / 255.0return image# 后处理结果
def postprocess(outputs, conf_thres=0.4, iou_thres=0.5):# 实现NMS和边界框解码pass# 推理
image = cv2.imread('image.jpg')
input_tensor = preprocess(image)
outputs = session.run(None, {'images': input_tensor})
results = postprocess(outputs)
9.2 TensorRT模型部署
import tensorrt as trt
import pycuda.driver as cuda
import pycuda.autoinit
import cv2
import numpy as np# 加载TensorRT引擎
def load_engine(engine_file_path):with open(engine_file_path, 'rb') as f:engine_data = f.read()runtime = trt.Runtime(trt.Logger(trt.Logger.WARNING))return runtime.deserialize_cuda_engine(engine_data)# 推理函数
def inference(engine, image):# 分配内存h_input = cuda.pagelocked_empty(trt.volume(engine.get_binding_shape(0)), dtype=np.float32)h_output = cuda.pagelocked_empty(trt.volume(engine.get_binding_shape(1)), dtype=np.float32)# 创建CUDA流stream = cuda.Stream()# 预处理图像input_tensor = preprocess(image)np.copyto(h_input, input_tensor.ravel())# 创建执行上下文context = engine.create_execution_context()# 分配GPU内存d_input = cuda.mem_alloc(h_input.nbytes)d_output = cuda.mem_alloc(h_output.nbytes)# 传输数据到GPUcuda.memcpy_htod_async(d_input, h_input, stream)# 执行推理context.execute_async(bindings=[int(d_input), int(d_output)], stream_handle=stream.handle)# 传输结果到CPUcuda.memcpy_dtoh_async(h_output, d_output, stream)# 同步流stream.synchronize()# 后处理结果output = h_output.reshape(engine.get_binding_shape(1))results = postprocess(output)return results
10. 自定义数据集训练

如果使用自己的数据集,需要进行以下步骤:

  1. 收集图像数据
  2. 使用标注工具(如LabelImg、CVAT)标注数据
  3. 转换标注格式为YOLO格式
  4. 创建data.yaml配置文件
  5. 开始训练
# 示例:使用自定义数据集训练
python train.py --img 640 --batch 16 --epochs 100 --data datasets/my_dataset/data.yaml --weights yolov11s.pt
11. 性能优化

提高YOLOv11性能的方法:

  1. 调整模型大小:根据需求选择合适的模型(n/s/m/l/x)
  2. 优化超参数:使用--evolve命令自动寻找最优超参数
  3. 数据增强:增加训练数据的多样性
  4. 混合精度训练:使用--amp加速训练
  5. 模型剪枝和量化:减少模型大小和计算量
12. 常见问题解决
  1. CUDA内存不足:减小batch size或使用更小的模型
  2. 训练不收敛:检查数据标注质量,调整学习率
  3. 推理速度慢:使用TensorRT加速,减小输入尺寸
  4. 精度低:增加训练轮次,使用更大的模型,改进数据增强
13. 应用案例

YOLOv11可以应用于多种场景:

  1. 安防监控:人员检测、行为分析
  2. 自动驾驶:车辆、行人、交通标志检测
  3. 工业检测:产品缺陷检测
  4. 农业:农作物病虫害检测
  5. 无人机:地形分析、目标跟踪
http://www.dtcms.com/a/279024.html

相关文章:

  • Linux 基础操作:vim 编辑器、网络配置与远程登录全解析
  • 学习笔记(36):用概率密度方式来了解:正态分布拟合曲线
  • sqlserver迁移日志文件和数据文件
  • java学习 day4 分布式锁
  • 《Librosa :一个专为音频信号处理和音乐分析设计的Python库》
  • 阿里云可观测 2025 年 3 月产品动态
  • APK安装器(安卓端)一键解除VX限制!轻松安装各种手机应用
  • VScode设计平台demo&前端开发中的常见问题
  • 中级统计师-经济学基础知识-第五章 国民收入决定的总收入-总支出模型
  • RK3568/3588 Android 12 源码默认使用蓝牙mic录音
  • 【安卓笔记】进程和线程的基础知识
  • Educational Codeforces Round 170 (Rated for Div. 2)
  • 第十六章 STL(仿函数、 常用算法)
  • 如何在 Ubuntu 上安装 Microsoft Edge 浏览器?
  • Solid Edge多项目并行,浮动许可如何高效调度?
  • cpp减小可执行文件、动态库大小
  • 4.2TCP/IP
  • 什么是微服务?-核心思想:化整为零,各自为战
  • 单向链表、双向链表、栈、队列复习(7.14)
  • Windows 安装配置Claude Code
  • Java实现文件自动下载,XXL-Job定时任务中的HTTP文件下载最佳实践
  • C++-linux 7.文件IO(二)文件描述符、阻塞与非阻塞
  • .net天擎分钟降水数据统计
  • .NET控制台应用程序中防止程序立即退出
  • Flask服务器公外网访问,IPv6(亲测有效!!!!)
  • 网络编程(TCP连接)
  • .NET ExpandoObject 技术原理解析
  • LeetCode经典题解:206、两数之和(Two Sum)
  • OV-DINO:基于语言感知选择性融合的统一开放词汇检测
  • 深入解析ThreadLocal:线程隔离利器