YOLO图片检测怎么整

💡 原文中文,约8600字,阅读约需21分钟。
📝

内容提要

本文介绍在新环境中使用最新版Ultralytics YOLO进行图像检测项目的完整流程。建议保留旧项目,新建独立环境、目录和数据集,避免环境混乱。步骤包括生成图片、标注、划分数据集、创建新Conda环境、安装PyTorch和Ultralytics、先跑3 epoch小样例验证,再正式训练,最后用best.pt检测。强调数据不泄漏、保留原始数据、记录实验参数,并给出检查清单。

🔎

延伸解读

环境隔离:避免“昨天能跑今天不能跑”

文章强调旧项目与新任务应完全隔离,包括环境、目录和数据集。旧环境因依赖冲突或驱动不匹配而无法直接使用,作者建议新建Conda环境和目录,避免在旧环境上修补。这种做法能减少环境混乱带来的不确定性,确保实验可复现。对于深度学习项目,环境隔离是防止“昨天能跑今天不能跑”问题的关键。

数据划分的陷阱:防止数据泄漏

作者特别提醒,划分训练集、验证集和测试集时,要避免数据泄漏。同一物理事件、同一天、同一台站或同一原始文件派生的图片应作为一个整体,只进入一个划分。否则,模型可能在验证集上表现良好,但实际泛化能力差。建议使用split_manifest.csv记录分组信息,确保划分的科学性。

小样例训练:低成本验证流程

文章建议正式训练前先跑3个epoch的小样例,以检查类别配置、标签质量、GPU使用和输出目录等。这能快速发现流程中的错误,避免在正式训练中浪费时间和资源。小样例训练是深度学习项目中的常见实践,尤其适合新环境或新数据集,能有效降低试错成本。

训练监控:避免误判卡死

作者指出,仅凭nvidia-smi显示GPU利用率为0%就判断训练卡住是不准确的,可能只是数据读取或验证阶段。更可靠的方法是同时观察results.csv是否更新、训练终端输出和CPU占用。若连续5-10分钟无变化,才可能真正卡住。这提醒读者在监控训练时需综合判断,避免误杀进程。

Q&A

如何在新环境中使用Ultralytics YOLO进行图像检测项目?

建议保留旧项目,新建独立环境、目录和数据集。步骤包括:生成图片、标注、划分数据集、创建新Conda环境、安装PyTorch和Ultralytics、先跑3 epoch小样例验证,再正式训练,最后用best.pt检测。

为什么建议保留旧项目并新建环境?

因为旧代码、旧权重、旧数据配置可能无法在新环境中直接运行,且已有Conda环境存在各种问题(如缺少依赖、CUDA版本不匹配等)。保留旧项目用于复现和旧权重检测,新任务另起炉灶可以避免环境混乱,确保新项目的可复现性。

如何划分训练集、验证集和测试集以避免数据泄漏?

建议按事件、日期或台站划分,确保同一个物理事件、同一天、同一台站或同一原始文件派生的一组图只进入一个划分。推荐比例70%训练、15%验证、15%测试,但更重要的是避免数据泄漏。同时保存split_manifest.csv记录划分信息。

使用LabelImg标注时需要注意哪些事项?

需要单独创建环境安装LabelImg,标注前确定类别顺序并写入predefined_classes.txt,标注时格式切换为YOLO,保存的标签文件每个目标一行,包含class_id和归一化坐标。无目标图片保留同名空txt以区分未标注。标注后必须人工复查。

为什么正式训练前要先跑3 epoch小样例?

小样例可以快速检查类别数、标签完整性、训练验证示意图、loss是否正常、GPU是否使用、输出目录是否正确,避免流程未通时直接跑大模型浪费时间和资源。

如何判断训练是否卡住?

不能仅凭nvidia-smi显示GPU利用率为0就判断卡住,可能是在读数据、验证或保存权重。更可靠的方法是同时观察:GPU利用率持续为0、results.csv不更新、训练终端无输出、CPU占用接近0,且持续5-10分钟,才可能真的卡住。

正式检测时应该使用哪个权重文件?

优先使用best.pt,它是验证集上表现最好的模型。检测命令中指定model为best.pt的路径。

如何保留旧YOLOv5项目并用于检测?

可以另建旧版环境(如yolo5_legacy),使用旧代码和旧权重进行检测。检测命令格式为python detect.py --weights 旧权重路径 --source 图片目录等。旧版不丢是为了保留历史和基线,新版另开是为了避免混淆。

🏷️

标签

➡️

继续阅读