基于YOLOv11的自定义目标检测教程
本教程将指导您使用Ultralytics的YOLOv11 Nano模型创建一个用于检测猫眼的自定义目标检测器。我们将涵盖从数据收集和标注到微调预训练YOLOv11 Nano模型的完整流程。
环境设置
首先,创建一个Python 3.9的conda环境:
conda create -n yolov11 python=3.9
conda activate yolov11
安装必要的包:
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install ultralytics
pip install opencv-python
数据集准备
-
收集图像
我从互联网上收集了猫的图像。 -
标注图像
使用LabelImg工具对图像进行标注。免费标注软件
-
数据集结构
数据集文件夹结构如下:dataset/ ├── train/ │ ├── images/ │ └── labels/ ├── valid/ │ ├── images/ │ └── labels/ └── test/ ├── images/ └── labels/
•
images/
包含.jpg
图像文件。
•labels/
包含 YOLO 格式的.txt
文件,存储边界框坐标。 -
标签格式
每个.txt
文件对应一张图像,包含 YOLO 格式的边界框坐标。例如:## class_id x_center y_center width height 0 0.532 0.654 0.120 0.098 1 0.412 0.389 0.095 0.077
所有值归一化到 0 到 1 之间,
class_id
表示对象类别(例如,0 表示猫眼)。 -
data.yaml 文件
定义数据集路径和类别名称:train: ./dataset/train/images val: ./dataset/valid/images test: ./dataset/test/images nc: 1 # 类别数量 names: ['cateyes']
训练YOLOv11 Nano模型
修改并使用以下脚本(train.py
)训练模型:
from ultralytics import YOLO
# 加载模型
if __name__ == '__main__':
model = YOLO("yolo11n.pt") # 使用YOLOv11 Nano模型
data_path = r"F:/path/to/dataset/data.yaml" # data.yaml路径
# 训练模型
train_results = model.train(
data=data_path, # 数据集YAML
epochs=100, # 训练轮数
imgsz=640, # 图像尺寸
device=0 # GPU设备(0)或'cpu'
)
训练完成后,模型将保存在 ./runs
文件夹中。
测试模型
训练完成后,运行以下脚本(test.py
)进行推理:
from ultralytics import YOLO
import torch
# 检查GPU可用性
print("GPU available: ", torch.cuda.is_available())
# 加载训练好的模型
checkpoint = "./runs/detect/train/weights/best.pt"
input_image = "./dataset/test/images/image (95).jpg"
model = YOLO(checkpoint)
# 运行检测
results = model(source=input_image, conf=0.3, show=True, save=True)
# 打印结果
print('Results: ', results)
print('Boxes: ', results[0].boxes)
print('Done!')
• conf=0.3
设置置信度阈值。
• show=True
显示检测结果图像。
• save=True
将结果保存到磁盘(默认路径:./runs/detect/predict
)。
在这里插入图片描述
导出模型为ONNX格式
如果需要将训练好的模型导出为ONNX格式,可以使用以下代码:
path = model.export(format="onnx") # 返回导出模型的路径
YOLOv11模型对比
以下是YOLOv11系列模型的性能对比:
模型 | 尺寸(像素) | mAPval 50-95 | CPU ONNX速度(ms) | T4 TensorRT10速度(ms) | 参数量(M) | FLOPs(B) |
---|---|---|---|---|---|---|
YOLO11n | 640 | 39.5 | 56.1 ± 0.8 | 1.5 ± 0.0 | 2.6 | 6.5 |
YOLO11s | 640 | 47.0 | 90.0 ± 1.2 | 2.5 ± 0.0 | 9.4 | 21.5 |
YOLO11m | 640 | 51.5 | 183.2 ± 2.0 | 4.7 ± 0.1 | 20.1 | 68.0 |
YOLO11l | 640 | 53.4 | 238.6 ± 1.4 | 6.2 ± 0.1 | 25.3 | 86.9 |
YOLO11x | 640 | 54.7 | 462.8 ± 6.7 | 11.3 ± 0.2 | 56.9 | 194.9 |
更多使用示例请参考Detection Docs,这些模型已在COCO数据集上预训练,包含80个预训练类别。