1 准备数据集
车牌识别
数据集标注使用LabelImg,具体使用和标注可参考下面文章:
实战 | YOLOv8自定义数据集训练实现手势识别 (标注+训练+预测 保姆级教程)
这里直接给出数据集,大家可以自行下载:
https://github.com/AarohiSingla/YOLOv10-Custom-Object-Detection/tree/main/custom_dataset/dataset
1 图片样本
数据集包含300张图片样本,训练集210张,验证集60张,测试集30张。
2 标注文件
2 模型训练
2.1 训练脚本
custom_train_car.ipynb
指定数据集配置文件路径和训练结果保存路径,及训练批次等参数
from ultralytics import YOLO
# 加载预训练模型
# model = YOLO('weights/yolov10n.pt')
model = YOLO("yolov10n.yaml")
# 使用自定义数据集训练模型
results = model.train(
data='../datasets/car/custom_data.yaml', # 数据集配置文件路径
epochs=100, # 训练轮次
batch=16,
workers=4,
# imgsz=640 # 输入图像尺寸
project='../datasets/car/detect',
name='train',
save=True
)
2.2 数据集配置
train: custom_dataset/dataset/train/images
val: custom_dataset/dataset/valid/images
test: custom_dataset/dataset/test/images
nc: 1
names: ['car']
分类数量 nc:1
2.3 训练结果
2.3.1 相关指标
3 模型验证评估
#val 验证
from ultralytics import YOLOv10 # 导入 YOLO 类
# 加载模型
model = YOLOv10('../datasets/car/detect/train/weights/best.pt') # 模型路径
# 调用验证方法
model.val(batch=32,
imgsz=640,
data='../datasets/car/custom_data.yaml',
project='../datasets/car/detect',
name='val',
save=True
)
输出
Ultralytics YOLOv8.1.34 🚀 Python-3.12.11 torch-2.7.1+cu128 CUDA:0 (NVIDIA GeForce RTX 5060 Laptop GPU, 8151MiB) YOLOv10n summary (fused): 285 layers, 2694806 parameters, 0 gradients, 8.2 GFLOPs
val: Scanning F:\ai\yolov\v10\datasets\car\custom_dataset\dataset\valid\labels.cache... 60 images, 0 backgrounds, 0 corrupt: 100%|██████████| 60/60 [00:00<?, ?it/s] Class Images Instances Box(P R mAP50 mAP50-95): 100%|██████████| 2/2 [00:08<00:00, 4.18s/it]
all 60 64 0.768 0.781 0.825 0.454 Speed: 1.8ms preprocess, 12.3ms inference, 0.0ms loss, 1.0ms postprocess per image Results saved to ..\datasets\car\detect\val
PR
4 推理
测试集进行推理
#推理
from ultralytics import YOLOv10
model = YOLOv10('../datasets/car/detect/train/weights/best.pt')
# 对测试集进行推理
test_source = '../datasets/car/custom_dataset/dataset/test/images'
results = model.predict(
source=test_source, # 测试集图片目录
save=True, # 保存带有预测结果的图片
save_txt=True, # 保存预测结果的文本文件
imgsz=640, # 输入图像的尺寸
conf=0.5, # 置信度阈值,只保留置信度高于该值的预测框
iou=0.45 # 交并比阈值,用于非极大值抑制
)
# 遍历推理结果
for result in results:
boxes = result.boxes # 边界框信息
masks = result.masks # 分割掩码信息(如果有)
keypoints = result.keypoints # 关键点信息(如果有)
probs = result.probs # 分类概率(如果是分类任务)
结果输出