SuperYOLO实战:从零部署到自定义数据训练全攻略
1. 环境准备与项目部署第一次接触SuperYOLO时我花了两天时间才把环境搭好。当时最大的感受是这玩意儿对Windows用户真不友好不过别担心我把踩过的坑都总结成了这份保姆级指南。先说说硬件要求。我的测试机是RTX 3050笔记本显卡4GB显存实测训练512x512分辨率图像勉强够用。如果你要用1024x1024的高清模式建议至少RTX 306012GB起步。CPU倒是不挑i5以上都行内存建议16GB以上。关键软件环境Windows 11Win10也兼容Python 3.83.9可能会有依赖冲突CUDA 11.7必须与PyTorch版本匹配PyTorch 2.0.1安装过程有个小技巧先用Anaconda创建隔离环境。我在公司电脑上试过直接装结果把原有项目的PyTorch环境搞崩了。下面是具体操作conda create -n super-yolo python3.8 -y conda activate super-yolo接着安装PyTorch。这里有个巨坑官网默认给的命令是CUDA 11.8的但SuperYOLO作者用的是11.7。我试过用11.8训练时会报莫名其妙的CUDA错误。正确的安装命令是pip3 install torch2.0.1 torchvision0.15.2 torchaudio2.0.2 --index-url https://download.pytorch.org/whl/cu117项目依赖安装也有讲究。直接pip install -r requirements.txt会漏装两个关键库pip install numba timm特别是numba不装的话跑数据预处理时会直接卡死。2. 官方数据集训练实战官方推荐用VEDAI数据集测试但这个数据集结构有点反人类。我下载解压后发现目录长这样VEDAI/ ├── images/ │ ├── 0001_co.png │ ├── 0001_ir.png ├── labels/ │ ├── 0001.txt ├── fold01.txt注意每个图像文件都有_co和_ir后缀这导致后面路径处理会出问题。数据集路径配置需要修改三处编辑data/transform.py把默认的Linux路径改成你的实际路径# 修改前 PATH /home/data/zhangjiaqing/dataset/ # 修改后注意保留最后的斜杠 PATH rD:\SuperYOLO\dataset/修改data/SRvedai.yaml中的路径指向train: D:/SuperYOLO/dataset/VEDAI/fold01_write.txt test: D:/SuperYOLO/dataset/VEDAI/fold01test_write.txt最关键的一步运行数据预处理脚本python data/transform.py这个脚本会生成训练所需的*_write.txt文件。如果报错找不到文件八成是路径斜杠方向错了——Windows要用反斜杠但在代码里得写成正斜杠。训练启动命令如下python train.py --cfg models/SRyolo_MF.yaml --super --train_img_size 1024 --hr_input --data data/SRvedai.yaml --ch 64 --input_mode RGBIRMF3. Windows环境下的典型报错解决我在Windows上遇到的第一个坑是路径问题。训练时报错AssertionError: train: No labels in D:\dataset\VEDAI_1024\images.cache原因是utils/datasets.py里的路径转换逻辑有问题。原代码用os.sep处理路径分隔符但在Windows下会失效。修改方案def img2label_paths(img_paths): return [x.replace(/images/, /labels/).replace(_ x.split(_)[-1], .txt) for x in img_paths]第二个常见错误是numpy版本问题AttributeError: module numpy has no attribute int解决方法是用np.int64替换所有np.int。主要在以下文件utils/datasets.pyutils/general.py第三个坑更隐蔽RuntimeError: result type Float cant be cast to the desired output type __int64需要修改utils/loss.py中的类型转换逻辑# 修改前 indices.append((b, a, gj.clamp_(0, gain[3] - 1), gi.clamp_(0, gain[2] - 1))) # 修改后 indices.append((b, a, gj.clamp(0, int(gain[3]) - 1), gi.clamp(0, int(gain[2]) - 1)))4. 自定义数据集训练全流程官方数据集的格式太特殊实际项目中我们更常用标准YOLO格式。我的数据集结构如下custom_dataset/ ├── images/ │ ├── img1.jpg │ ├── img2.jpg ├── labels/ │ ├── img1.txt │ ├── img2.txt ├── train.txt ├── val.txt关键改造步骤修改数据集加载逻辑。在utils/datasets.py中找到img2label_paths函数改为def img2label_paths(img_paths): return [x.replace(/images/, /labels/).replace(.jpg, .txt) for x in img_paths]调整数据预处理。编辑data/transform.py把循环次数从10次改为1次# 修改前 for i in [01,02,03,04,05,06,07,08,09,10]: # 修改后 for i in [01]:配置文件适配。修改data/SRvedai.yamltrain: D:/custom_dataset/train.txt val: D:/custom_dataset/val.txt nc: 3 # 改成你的类别数 names: [person, car, dog] # 你的类别名称启动训练时要注意输入通道数。如果是普通RGB图像命令应该是python train.py --cfg models/SRyolo_noFocus_small.yaml --train_img_size 512 --data data/SRvedai.yaml --ch 3 --input_mode RGB有个实用技巧先用小分辨率如512x512跑几个epoch验证流程没问题再用大分辨率训练。我在RTX 3050上测试512分辨率batch_size可以设到161024分辨率只能设到4。5. 模型调优与效果提升训练过程中我发现几个影响效果的关键参数学习率策略默认配置可能不适合小数据集。在hyp.yaml中可以调整lr0: 0.01 # 初始学习率 lrf: 0.2 # 最终学习率倍数数据增强SuperYOLO默认开启了Mosaic增强但对于小样本数据集建议关闭。修改train.py# 修改前 parser.add_argument(--mosaic, defaultTrue, helpenable mosaic augmentation) # 修改后 parser.add_argument(--mosaic, defaultFalse, helpenable mosaic augmentation)多尺度训练对于尺寸变化大的目标建议开启--multi-scale实际项目中我还遇到过标注质量导致的训练震荡问题。有个取巧的办法用--weights参数加载预训练模型python train.py --weights runs/train/exp/weights/best.pt最后分享一个监控训练过程的技巧用TensorBoard查看损失曲线tensorboard --logdir runs/train健康的训练曲线应该是平滑下降的如果出现剧烈波动可能是学习率设高了或者数据有问题。