RT-DETR-X 目标检测模型训练实验报告
1. 实验环境与基础配置
| 类别 | 详细信息 |
|---|---|
| 计算硬件 | NVIDIA GeForce RTX 5090 (32109 MiB VRAM) |
| 操作系统 | Linux (AutoDL 容器环境) |
| Python 版本 | 3.12.3 |
| 深度学习框架 | PyTorch 2.8.0 + CUDA 12.8 |
| 算法库 | Ultralytics YOLO 8.4.51 |
| 依赖管理 | Miniconda3 (/root/miniconda3) |
| 工作目录 | /root/autodl-tmp |
2. 数据集说明
- 数据结构:标准 YOLO 格式(
path/images/{train,test}+path/labels/{train,test}) - 类别定义:
0: dent(凹痕),1: hole(孔洞),2: rusty(锈蚀) 数据规模:
- 训练集:3,300 张图像
- 验证集:413 张图像
实例分布:
类别 训练集实例数 验证集实例数 占比 0: dent3,934 504 ~49% 1: hole946 152 ~12% 2: rusty3,158 410 ~39%
3. 实验过程与问题排查记录
本次实验以 rtdetr-x.pt 为基座模型,目标为 3 类工业缺陷检测。训练过程中遭遇以下典型问题并完成排查:
| 阶段 | 现象/报错 | 根因分析 | 解决动作 |
|---|---|---|---|
| 环境准备 | FileNotFoundError: configs/kfold_raw_0.yaml | 配置文件路径缺失/未同步 | 重建 configs/ 目录并写入正确 YAML 映射 |
| 数据解压 | End-of-central-directory signature not found | project.zip 传输损坏或中断 | 放弃解压,改为手动创建配置+直接定位原始数据目录 |
| 第 11~15 轮 | WARNING: EMA contains NaN/Inf | 默认 lr0=0.01 + amp=True 导致 FP16 注意力矩阵溢出,梯度爆炸 | 关闭混合精度 (amp=False),降低学习率至 0.0001 |
| 显存调度 | CUBLAS_STATUS_ALLOC_FAILED + Connection reset by peer | RT-DETR-X 参数量大 (93M),FP32 模式下 batch=32 超显存;workers=12 引发 Pin-Memory 队列崩溃 | 降级至 batch=8, workers=4,释放显存余量 |
| 最终配置 | 稳定跑完 15 Epochs | 采用保守策略牺牲速度换取数值稳定 | optimizer=AdamW, mosaic=0.0, clip_grad 隐含限制 |
4. 最终训练结果 (Epoch 15)
训练总耗时:1555.68s (~25.9 分钟)
核心指标:
| 指标 | 数值 | 评估 |
|---|---|---|
| Precision (B) | 0.0814 (8.14%) | 极低 |
| Recall (B) | 0.2373 (23.73%) | 🔴 极低 |
| mAP@50 (B) | 0.0679 (6.79%) | 🔴 未收敛 |
| mAP@50-95 (B) | 0.0276 (2.76%) | 🔴 未收敛 |
损失函数趋势:
| Loss 类型 | Epoch 1 | Epoch 15 | 趋势 | 状态 |
|---|---|---|---|---|
train/giou_loss | 1.618 | 0.718 | ↘ 持续下降 | ✅ 定位头正常学习 |
train/l1_loss | 1.119 | 0.336 | ↘ 持续下降 | ✅ 回归头正常学习 |
train/cls_loss | 0.508 | 1.122 | 持续上升 | ❌ 分类头严重发散 |

5. 结果深度分析
模型呈现典型的 “能框住但分不清” 特征(GIoU/L1 下降,但 mAP 接近随机猜测)。根因如下:
- 学习率衰减策略过于激进
初始lr0=0.0001配合默认余弦退火 (lrf=0.01),导致第 15 轮有效学习率仅7.6×10⁻⁶。权重更新步长过小,模型在第 8 轮后基本处于“冻结”状态,无法完成特征-类别的对齐。 - RT-DETR-X 架构特性与轮次不匹配
作为端到端 Transformer 检测器,RT-DETR-X 依赖匈牙利匹配进行稀疏监督。93M 参数量在 15 轮 + 极低 LR 下严重欠拟合,分类损失无法下降。 - 数据增强被关闭的副作用
mosaic=0.0虽避免了梯度突变,但也移除了多尺度上下文信息,导致模型对小目标(hole)和复杂背景(rusty)的泛化能力不足。 - 排除数据问题
标签格式、类别分布、坐标归一化均已验证无误。
6. 后续优化建议
| 优先级 | 优化方向 | 预期收益 | 执行命令片段 |
|---|---|---|---|
| 高 | 调整学习率与衰减终点 | 打破权重冻结,激活分类头 | lr0=0.001 lrf=0.1 |
| 高 | 增加训练轮次 | 满足 Transformer 收敛需求 | epochs=50~80 |
| 中 | 切换模型架构 | 提升训练效率与稳定性 | model=yolo11m.pt 或 rtdetr-l.pt |
| 🟢 低 | 恢复适度增强 | 提升小目标召回率 | mosaic=0.5 close_mosaic=15 |
花费:6.49