一、YOLOv9 提供的 .pt 权重文件
YOLOv9 官方仓库(WongKinYiu/yolov9)中提供了以下几个预训练权重文件:
yolov9-c.pt:
表示 YOLOv9-C(Conventional)模型的预训练权重。
这是基于传统卷积的 YOLOv9 模型,适用于检测任务(Detection)。
如果想直接使用 YOLOv9 的原始架构进行训练,推荐选择这个权重。
yolov9-c-converted.pt:
表示 YOLOv9-C 的转换版本(Converted)。
这个文件通常是将原始权重转换为某种特定格式(可能是为了兼容其他框架或优化推理),但具体用途需要参考官方文档或代码注释。
训练时一般不直接使用这个,除非有特殊需求(例如推理优化或跨平台部署)。
gelan-c.pt:
表示 GELAN-C(Generalized Efficient Layer Aggregation Network)模型的预训练权重。
GELAN 是 YOLOv9 提出的一种轻量化网络架构,相比 YOLOv9-C 更高效,参数更少,计算量更低。
如果关注模型的效率(例如在边缘设备上部署)或想使用 GELAN 架构,推荐选择这个权重。
ps: pt文件选择
推荐选择:
- 如果你的任务是基于原始 YOLOv9 架构进行微调(Fine-tuning),使用 yolov9-c.pt。
- 如果你希望使用更高效的 GELAN 架构(尤其适合资源受限场景),使用 gelan-c.pt。
- yolov9-c-converted.pt 不建议用于训练,它是为推理优化的版本,训练时应使用原始权重。
选择依据:
- 硬件资源:gelan-c.pt 更轻量,适合 GPU 内存较小的环境。
- 任务需求:如果追求最高精度,yolov9-c.pt 可能更有优势(因为 YOLOv9-C 参数更多,表达能力更强)。
二、segment 目录下的 .yaml 文件解析
segment 目录下的 .yaml 文件是用于实例分割(Instance Segmentation)任务的模型配置文件。以下是具体文件的含义:
gelan-c-seg.yaml:
定义了 GELAN-C 的分割模型架构。
适用于实例分割任务,使用 GELAN 轻量化网络。
gelan-c-dseg.yaml:
定义了 GELAN-C 的双分支分割模型(Dual Segmentation)。
“dseg”可能表示 Dual-Head 或某种增强分割设计(具体需参考官方代码或论文),通常用于更复杂的分割任务。
yolov9-c-dseg.yaml:
定义了 YOLOv9-C 的双分支分割模型。
基于传统 YOLOv9-C 架构,适合需要更高精度的分割任务。
.yaml 和 .pt 的匹配规则:
.yaml 文件定义模型的网络结构,.pt 文件提供预训练权重,两者需要匹配才能正确加载。
- gelan-c-seg.yaml 和 gelan-c-dseg.yaml 对应 gelan-c-seg.pt。
- yolov9-c-dseg.yaml 对应 yolov9-c-seg.pt。
具体选择:
- 如果用 gelan-c.pt:
用 gelan-c-seg.yaml 进行普通实例分割训练。
用 gelan-c-dseg.yaml 进行增强型分割训练(如果你的数据集需要更复杂的分割能力)。 - 如果用 yolov9-c.pt:
用 yolov9-c-dseg.yaml 进行分割训练。 - yolov9-c-converted.pt 不建议与这些 .yaml 文件搭配使用,因为它可能是转换后的权重,可能与分割任务不完全兼容。
三、具体操作步骤
1. 创建虚拟环境
conda activate yolov9 -n python=3.8
conda acitivate yolov9
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
2. 数据准备
在主文件夹创建一个data.yaml文件,nc值,类别名称
json2txt(images\labels)
splitdata.py(train\test\val)
3. 训练
训练gelan-c-seg
models/segment/gelan-c-seg.yaml这个文件里面修改nc值
python segment/train.py --workers 8 --device 0 --batch 32 --data data.yaml --img 640 --cfg models/segment/gelan-c-seg.yaml --weights 'gelan-c-seg.pt' --name gelan-c-seg --hyp hyp.scratch-high.yaml --no-overlap --epochs 100 --close-mosaic 10
如果意外中断训练,可从断点继续训练
python segment/train.py --workers 8 --device 0 --batch 32 --data data.yaml --img 640 --cfg models/segment/gelan-c-seg.yaml --weights 'gelan-c-seg.pt' --name gelan-c-seg --hyp hyp.scratch-high.yaml --no-overlap --epochs 100 --close-mosaic 10 --resume 'C:/.../yolov9-main/yolov9-main/runs/train-seg/gelan-c-seg7/weights/last.pt'
训练yolov9-c-seg
python segment/train_dual.py --workers 8 --device 0 --batch 8 --data data/AntiGlareBoard.yaml --img 640 --cfg models/segment/TSFS-seg.yaml --weights 'yolov9-c-seg.pt' --name yolov9-c-seg-ST --hyp hyp.scratch-high.yaml --no-overlap --epochs 300 --close-mosaic 10 --save-period 1 --patience 30 --resume 'C:/Users/60542/Desktop/yolov9-c-seg-ST/yolov9-main/runs/train-seg/yolov9-c-seg-ST2/weights/last.pt'
注意:这里batch最大只能设8
验证
修改segment/val.py中的run()函数:save_json=True/save_txt=True…
python segment/val.py --workers 8 --device 0 --batch 32 --data data.yaml --img 640 --weights "C:/Users/.../runs/train-seg/gelan-c-seg7/weights/best.pt" --name gelan-c-seg-val --save-json --iou-thres 0.6 --conf-thres 0.001
2025.3.20更新
代码
python segment/train.py --workers 8 --device 0 --batch 32 --data data/AntiGlareBoard.yaml --img 640 --cfg models/segment/yolov9-c-dseg.yaml --weights 'yolov9-c-converted.pt' --name yolov9-c-converted --hyp hyp.scratch-high.yaml --no-overlap --epochs 100 --close-mosaic 10
若标签txt文件不存在ADP,训练时会报错;要把空文件先删掉
python segment/train.py --workers 8 --device 0 --batch 32 --data data/AntiGlareBoard.yaml --img 640 --cfg models/segment/gelan-c-seg.yaml --weights ‘gelan-c-seg.pt’ --name gelan-c-seg --hyp hyp.scratch-high.yaml --epochs 100 --device 0
断点:
python segment/train.py --workers 8 --device 0 --batch 16 --data data/AntiGlareBoard.yaml --img 640 --cfg models/segment/gelan-c-seg.yaml --weights C:/Users/60542/Desktop/yolov9-main/runs/train-seg/gelan-c-seg52/weights/last.pt --name gelan-c-seg --hyp hyp.scratch-high.yaml --no-overlap --epochs 30 --close-mosaic 10 --save-period 1