一份微调YOLOv11的小指南

作者:二旺
来源:小白玩转Python


引言

在一个自动化和实时数据处理日益成为常态的时代,准确检测和识别车辆牌照的能力是非常宝贵的。从交通管理、收费到执法和停车解决方案,车牌识别系统在各种应用中都扮演着关键角色。

在这篇博文中,我们将探讨如何微调强大的YOLOv11目标检测模型,以使用Roboflow准备的自定义数据集来检测汽车车牌。我们还将集成Gradio以创建一个交互式Web界面,用于实时推理。这种组合为检测车牌提供了一个健壮且用户友好的解决方案,可以进一步处理以提取交通违规或车辆跟踪等场景中的有价值信息。


问题陈述

主要目标是开发一个能够准确检测图像中的汽车车牌的系统。这种检测是自动化流程的第一个关键步骤,可以提取车牌信息,例如注册号,这对于以下方面至关重要:

  • 交通违规执法:识别违反交通规则的车辆。
  • 自动收费:在没有人为干预的情况下识别车辆进行收费。
  • 停车管理:监控车辆在停车设施的进出。
  • 执法:追踪被盗车辆或涉及犯罪活动的车辆。

通过在专业数据集上微调YOLOv11,我们的目标是提高其在车牌检测方面的性能,确保高准确度和实时处理能力。


背景

什么是YOLOv11?

YOLO(You Only Look Once)是一系列实时目标检测模型,以其速度和准确性而闻名。YOLOv11是最新版本,提供了检测能力和计算效率的改进。它一次处理图像,非常适合需要实时目标检测的应用。

为什么要微调YOLOv11?

尽管YOLOv11在覆盖各种物体的庞大数据集上进行了预训练,但在特定数据集上对其进行微调——如汽车车牌——允许模型:

  • 提高准确性:根据车牌的特定特征定制检测能力。
  • 减少误报/漏报:通过关注车牌的细微差别,使模型变得更可靠。
  • 适应特定环境:考虑到现实世界场景中常见的不同光照条件、角度和遮挡。

使用Roboflow准备数据

为什么使用Roboflow?

Roboflow是一个强大的工具,它简化了管理和准备计算机视觉任务数据集的过程。它提供:

1. 简单的注释:用户友好的界面用于注释图像。

2. 数据增强:自动增强数据以提高模型的鲁棒性。

3. 格式转换:导出与不同模型兼容的各种格式的数据集。

数据准备步骤

1. 收集图像:从各种来源收集包含汽车和车牌的多样化图像集。

2. 上传到Roboflow:创建一个新项目并上传你的图像。

3. 注释图像:使用Roboflow的注释工具标记每张图像中的车牌。

4. 增强数据:应用旋转、缩放和亮度调整等转换以增强数据集。

5. 导出数据集:选择YOLOv11格式并导出数据集,包括图像和相应的注释文件。


微调YOLOv11

设置环境

确保已安装以下内容:
1. Python 3.10
2. PyTorch
3. Ultralytics YOLOv11仓库

微调步骤

克隆YOLOv11仓库

git clone https://github.com/sh-aidev/yolo-finetuning.git
cd yolo-finetuning

安装要求

python3 -m pip install -r requirements.txt

准备数据集
将从Roboflow导出的数据集放入YOLOv11仓库的数据目录。使用训练和验证数据的路径更新data.yaml文件。

配置模型

我修改了config.toml文件以指定:
1. 模型参数:输入图像大小
2. 训练超参数:学习率、批量大小、训练周期数量。
3. 路径:数据集目录和保存模型检查点的目录。

下载数据集

# Download the Roboflow dataset
python scripts/download_data_roboflow.py

在.env文件中创建并设置环境变量

# ROBOFLOW_API_KEY=<YOUR_ROBOFLOW_API_KEY>
# MODE=train/infer (for training or inference mode)
# ENVIRONMENT=dev/prod (for logging)

开始训练

# Train the YOLOv11 model
python main.py
  • img:图像大小。
  • batch:批量大小。
  • epochs:训练周期数量。
  • data:数据配置文件的路径。

监控训练

训练日志和结果保存在runs/train目录中。使用TensorBoard或其他可视化工具监控性能指标,如损失、精确度和召回率。


挑战和解决方案

  • 过拟合:实施数据增强和dropout层等技术以防止过拟合。
  • 数据不平衡:确保数据集平衡地代表各种条件,如不同的角度和光照。
  • 小目标检测:车牌相对于图像大小可能很小。调整锚定框并考虑增加图像分辨率。


使用Gradio实现实时推理

Gradio是什么?

Gradio是一个开源的Python库,允许你快速为你的机器学习模型创建可定制的UI组件。它简化了部署过程,使你的模型可以通过Web界面访问。

设置Gradio界面

安装Gradio

python3 -m pip install gradio

运行推理

# Run the Gradio application
# To run gradio app, set MODE=infer in .env file and change use_pretrained to True in configs/config.toml
python main.py

访问界面
打开浏览器,导航到http://localhost:7860以使用Web界面。你可以上传图像,模型将显示检测到的车牌。


使用Gradio的好处

  • 易用性:无需复杂的Web开发;Gradio处理UI。
  • 实时反馈:模型预测的即时可视化。
  • 可分享链接:轻松与他人分享你的界面,用于演示或测试。


结论

通过使用Roboflow准备的自定义数据集微调YOLOv11,并将其与Gradio一起部署,我们已经开发了一个有效的系统来检测汽车车牌。这个解决方案能够实时处理,适合需要即时响应的应用。


未来拓展

  • 文本识别:集成OCR(光学字符识别)系统以从检测到的车牌中提取车牌号码。
  • 视频处理:扩展模型以处理视频流,以进行持续监控。
  • 边缘部署:优化模型以在计算资源有限的边缘设备上部署。

参考资料
YOLOv11仓库:https://docs.ultralytics.com/models/yolo11/
Roboflow:https://docs.roboflow.com/
Gradio文档:https://www.gradio.app/docs
PyTorch:https://pytorch.org/docs/stable/index.html
完整代码:https://github.com/sh-aidev/yolo-finetuning.git


本文转自:小白玩转Python,转载此文目的在于传递更多信息,版权归原作者所有。

最新文章