1. 环境准备与依赖安装
1.1 基础环境配置
在开始YOLO26模型训练前,我们需要搭建一个稳定的深度学习环境。根据项目要求,我们选择以下配置组合:
- 操作系统:Ubuntu 20.04 LTS(长期支持版本)
- Python版本:3.8.x(建议使用conda创建独立环境)
- CUDA版本:11.3(需与GPU驱动版本匹配)
- PyTorch版本:1.10.0
这个组合经过实际验证,在NVIDIA 30系列显卡上表现稳定。选择Ubuntu 20.04是因为其对深度学习工具链的支持最为成熟,避免了新版系统可能出现的兼容性问题。
注意:CUDA 11.3需要至少470版本的NVIDIA驱动。可通过
nvidia-smi命令检查驱动版本,若不符合需先升级驱动。
1.2 依赖包详解
项目提供的requirements.txt包含了训练所需的完整依赖项,我们可以将其分为几个功能类别:
核心计算库:
torch>=1.8.0:PyTorch深度学习框架基础torchvision>=0.9.0:计算机视觉专用扩展numpy>=1.22.2:数值计算基础库scipy>=1.4.1:科学计算工具包
图像处理组件:
opencv-python>=4.6.0:OpenCV的Python接口pillow>=7.1.2:Python图像处理库albumentations>=1.0.3:高性能图像增强库
训练辅助工具:
tqdm>=4.64.0:进度条显示matplotlib>=3.3.0:结果可视化seaborn>=0.11.0:统计图表美化pandas>=1.1.4:数据处理分析
性能监控:
psutil:系统资源监控py-cpuinfo:CPU信息展示thop>=0.1.1:FLOPs计算工具
安装时建议使用以下命令创建隔离环境:
bash复制conda create -n yolo26 python=3.8
conda activate yolo26
pip install -r requirements.txt
1.3 常见安装问题解决
在实际安装过程中可能会遇到以下典型问题:
-
CUDA与PyTorch版本不匹配:
- 症状:导入torch时报错"CUDA unavailable"
- 解决方案:通过PyTorch官网获取正确的安装命令,例如:
bash复制
pip install torch==1.10.0+cu113 torchvision==0.11.1+cu113 -f https://download.pytorch.org/whl/torch_stable.html
-
OpenCV冲突问题:
- 症状:同时存在opencv-python和opencv-contrib-python
- 解决方案:先卸载所有OpenCV版本,再重新安装:
bash复制
pip uninstall opencv-python opencv-contrib-python pip install opencv-python==4.6.0
-
权限不足导致安装失败:
- 症状:Permission denied错误
- 解决方案:添加
--user参数或使用虚拟环境
2. 数据集准备与配置
2.1 数据标注规范
YOLO26要求数据集采用YOLO格式,目录结构应如下:
code复制strawberry/
├── images/
│ ├── train/
│ └── val/
├── labels/
│ ├── train/
│ └── val/
└── data.yaml
标注文件为.txt格式,每行表示一个目标:
code复制<class_id> <x_center> <y_center> <width> <height>
其中坐标值为归一化后的相对值(0-1之间)。
2.2 data.yaml配置详解
data.yaml是数据集的核心配置文件,完整示例如下:
yaml复制# 数据集路径
train: /root/strawberry/images/train
val: /root/strawberry/images/val
# 类别数量及名称
nc: 3
names: ['strawberry', 'leaf', 'flower']
# 可选参数
download: None # 数据集下载URL(如有)
关键配置说明:
train/val:必须使用绝对路径,相对路径可能导致训练失败nc:类别数必须与实际标注文件中的最大class_id一致names:类别名称顺序决定了预测结果的标签显示
2.3 数据增强策略
YOLO26内置了多种数据增强方式,可通过修改训练参数调整:
python复制augment: True # 是否启用基础增强
hsv_h: 0.015 # 色调增强幅度
hsv_s: 0.7 # 饱和度增强幅度
hsv_v: 0.4 # 明度增强幅度
flipud: 0.5 # 垂直翻转概率
fliplr: 0.5 # 水平翻转概率
mosaic: 1.0 # mosaic增强概率
mixup: 0.1 # mixup增强概率
对于草莓检测这种小目标居多的场景,建议:
- 适当提高mosaic概率(0.8-1.0)
- 降低mixup概率(0-0.2)
- 增加小目标复制粘贴增强
3. 模型训练实战
3.1 训练脚本解析
完整的训练脚本user_train.py包含以下关键要素:
python复制from ultralytics import YOLO
# 初始化模型
model = YOLO("yolo26n.yaml") # 从配置文件构建
# model = YOLO("yolo26n.pt") # 从预训练权重加载
# 训练参数配置
train_results = model.train(
data="/root/strawberry/data.yaml",
epochs=100,
imgsz=640,
batch=16, # 根据GPU内存调整
device='0', # 使用GPU 0
workers=4, # 数据加载线程数
optimizer='AdamW', # 优化器选择
lr0=0.01, # 初始学习率
weight_decay=0.05, # 权重衰减
)
3.2 关键参数调优建议
-
批次大小(batch):
- 16GB显存:建议batch=16-32
- 24GB显存:可尝试batch=32-64
- 若出现OOM错误,需降低batch或imgsz
-
学习率策略:
python复制lr0=0.01, # 初始学习率 lrf=0.01, # 最终学习率=lr0*lrf warmup_epochs=3, # 学习率预热 -
早停机制:
python复制patience=50, # 验证指标无改善的等待epoch数 save_period=10, # 每隔多少epoch保存一次
3.3 训练监控与恢复
训练过程中会生成以下重要文件:
code复制runs/
└── detect/
└── train2/
├── weights/ # 模型权重
│ ├── best.pt # 最佳模型
│ └── last.pt # 最后模型
├── events.out.tfevents... # TensorBoard日志
└── results.png # 指标可视化
断点续训:
python复制model.train(resume=True) # 自动加载last.pt继续训练
训练监控:
bash复制tensorboard --logdir runs/detect/train2
4. 模型推理与部署
4.1 预测脚本解析
user_predict.py的基础使用:
python复制from ultralytics import YOLO
model = YOLO('runs/detect/train2/weights/best.pt')
results = model.predict(
source='/root/ultralytics-yolo26/predict_user_image',
conf=0.25, # 置信度阈值
iou=0.45, # NMS IoU阈值
save=True, # 保存预测结果
show_labels=True, # 显示标签
show_conf=True, # 显示置信度
)
4.2 高级预测参数
-
多尺度预测:
python复制imgsz=640, # 基准尺寸 augment=True, # 测试时增强 -
结果导出:
python复制save_txt=True, # 保存检测框为YOLO格式 save_conf=True, # 保存置信度 save_crop=True, # 保存裁剪的目标 -
性能优化:
python复制half=True, # 半精度推理 stream_buffer=True, # 视频流优化
4.3 实际应用技巧
-
类别特定阈值:
python复制conf = {'strawberry':0.3, 'leaf':0.5, 'flower':0.4} -
ROI限制:
python复制roi = [x1,y1,x2,y2] # 只检测指定区域 -
结果后处理:
python复制for result in results: boxes = result.boxes # 检测框信息 masks = result.masks # 分割掩码(如有) keypoints = result.keypoints # 关键点(如有)
5. 常见问题与解决方案
5.1 训练阶段问题
问题1:Loss震荡严重
- 可能原因:学习率过高或批次太小
- 解决方案:
- 逐步降低学习率(lr0=0.01→0.001)
- 增大batch size
- 添加梯度裁剪(grad_clip_norm=1.0)
问题2:验证mAP低但训练loss正常
- 可能原因:过拟合或数据分布不一致
- 解决方案:
- 增加验证集比例
- 检查训练/验证数据标注质量
- 添加更多数据增强
5.2 推理阶段问题
问题1:漏检小目标
- 解决方案:
- 降低conf阈值(0.25→0.15)
- 尝试多尺度预测(imgsz=[320,640])
- 训练时增加小目标样本
问题2:同类目标重复检测
- 解决方案:
- 调整iou阈值(0.45→0.6)
- 添加NMS后处理
python复制from ultralytics.utils.ops import non_max_suppression nms_results = non_max_suppression(results, iou_thres=0.6)
5.3 性能优化技巧
-
TensorRT加速:
python复制model.export(format='engine', device='0') -
ONNX运行时:
python复制model.export(format='onnx') -
量化压缩:
python复制model.export(format='onnx', int8=True)
在实际部署中发现,使用TensorRT可以将推理速度提升2-3倍,特别适合边缘设备部署。一个实用的技巧是在导出时固定输入尺寸:
python复制model.export(format='engine', imgsz=(640,640), dynamic=False)