对多数工业缺陷检测 PoC,24GB RTX 4090 足以承担 YOLO11、RT-DETR 的单卡训练。真正决定项目能否交付的,往往不是"模型能不能启动",而是小缺陷是否保留、数据是否泄漏、显存是否可控,以及实验能否复现。
更新时间:2026 年 9 月 11 日
工业缺陷检测公司的模型训练,通常不是一次性任务。
产线换了相机、照明、材料批次或产品型号,都可能触发重新标注、补充难例和迭代训练。团队真正需要的不是"临时跑通一个 Demo",而是一套可以反复启动、比较和恢复的训练闭环。
本文以钢板划痕、焊缝缺陷、PCB 瑕疵、纺织破损等目标检测场景为例,说明:
- YOLO11 和 RT-DETR 应该怎样选;
- 24GB RTX 4090 的显存该如何规划;
- 小缺陷数据为什么不应直接随机切分;
- 如何建立公平、可复现的双模型 PoC;
- 什么时候更适合使用算家云专业版 Pro。
一、先做模型选择:YOLO11 和 RT-DETR 各自适合什么阶段?
不要一开始就争论谁的 mAP 更高。工业项目应该先看交付目标。
| 决策条件 | 优先从 YOLO11 开始 | 建议同时验证 RT-DETR |
|---|---|---|
| 项目阶段 | 快速 PoC、频繁迭代 | 已有稳定基线,需要继续提高上限 |
| 团队情况 | 工程人员少,希望训练和导出链路简单 | 有时间做模型、输入分辨率和部署评估 |
| 缺陷特点 | 类别明确,目标尺度相对稳定 | 背景复杂、目标间关系重要或 YOLO 基线遇到瓶颈 |
| 交付重点 | 快速形成可部署基线 | 愿意用更多训练成本换取不同架构的对照结果 |
| 调参策略 | 先跑 n/s/m,再逐级放大 | 从较小配置开始,控制 batch 和输入尺寸 |
Ultralytics 官方提供 YOLO11 的检测、分割、分类和 OBB 等模型,并支持训练、验证、推理和导出。RT-DETR 官方仓库则提供多种骨干规模及 PyTorch 实现;Ultralytics 也提供了统一的 RTDETR 接口。
工程上比较稳妥的做法是:
- 先用 YOLO11m 建立基线;
- 固定数据划分、输入尺寸和评价指标;
- 再训练 RT-DETR;
- 不只比较 mAP,而是比较产线真正关心的漏检、误报、推理延迟和复核工作量。
参考资料:YOLO11 官方文档、RT-DETR 官方仓库。
二、工业缺陷检测最容易踩的坑,不是模型,而是数据切分
假设一卷钢材被连续拍摄了 3000 张图。如果随机把图片分到训练集和验证集,相邻帧可能分别进入两边。
这些图片在纹理、光照和缺陷形态上高度相似,模型相当于在验证集中"见过"近似样本,最终得到一个虚高的指标。
更合理的切分维度包括:
- 生产批次;
- 日期或班次;
- 产线编号;
- 相机编号;
- 产品型号;
- 原材料批次。
例如:
text
train:产线 A,8 月 1---20 日,批次 001---060
val: 产线 A,8 月 21---25 日,批次 061---070
test: 产线 B,8 月 26---31 日,批次 071---085
测试集最好包含模型没有见过的新批次,甚至新产线。这样得到的结果,才更接近上线后的泛化能力。
还需要保留足够的正常样本。只有缺陷框、没有正常背景,模型很容易在划痕状纹理、反光和边缘位置产生大量误报。
三、24GB RTX 4090 能训练多大的缺陷检测模型?
RTX 4090 的标准显存规格为 24GB GDDR6X,具体训练容量取决于:
text
模型规模
× 输入分辨率
× batch size
× 数据增强
× 训练精度
× 框架与版本
因此不能脱离配置,直接给出"4090 一定能跑 batch=多少"的结论。
比较实用的单卡起步方案如下:
| 实验阶段 | 模型 | 输入尺寸 | 初始 batch 策略 | 目标 |
|---|---|---|---|---|
| 环境验收 | YOLO11n/s | 640 | 自动探测 | 验证数据和训练链路 |
| 第一条基线 | YOLO11m | 640 | batch=-1 |
获得基础精度和速度 |
| 小缺陷对照 | YOLO11m | 960 或 1280 | 从较小 batch 开始 | 验证分辨率收益 |
| 架构对照 | RT-DETR | 640 | 从 4 开始逐级测试 | 与 YOLO 同条件比较 |
| 精调阶段 | 胜出模型 | 选定尺寸 | 保留显存余量 | 难例回灌和参数搜索 |
Ultralytics 当前训练接口支持自动 batch 探测、AMP、磁盘缓存、周期性保存和断点续训。官方文档说明,单卡使用 batch=-1 时会尝试按约 60% 显存利用率选择 batch;实际项目仍应观察峰值显存,并给验证、增强和偶发波动留出空间。
NVIDIA 官方规格可参考:GeForce RTX 4090。训练参数参考:Ultralytics Train Mode。
四、用同一份数据建立 YOLO11 基线
目录建议保持简单:
text
datasets/defect/
├── images/
│ ├── train/
│ ├── val/
│ └── test/
└── labels/
├── train/
├── val/
└── test/
defect.yaml:
yaml
path: /workspace/datasets/defect
train: images/train
val: images/val
test: images/test
names:
0: scratch
1: crack
2: pit
3: contamination
安装和环境检查:
bash
python -m pip install -U ultralytics
python - <<'PY'
import torch
import ultralytics
print("PyTorch:", torch.__version__)
print("Ultralytics:", ultralytics.__version__)
print("CUDA available:", torch.cuda.is_available())
if torch.cuda.is_available():
print("GPU:", torch.cuda.get_device_name(0))
print("VRAM GB:", round(torch.cuda.get_device_properties(0).total_memory / 1024**3, 2))
PY
第一轮 YOLO11 基线:
python
from ultralytics import YOLO
model = YOLO("yolo11m.pt")
model.train(
data="/workspace/datasets/defect/defect.yaml",
imgsz=640,
epochs=100,
batch=-1,
device=0,
amp=True,
cache="disk",
workers=8,
seed=42,
deterministic=True,
patience=30,
save_period=10,
project="/workspace/runs/defect",
name="yolo11m_640_baseline",
)
这里不建议一上来就使用 1280 分辨率。先确认标签、类别、路径和损失曲线正常,再进行单变量对照:
text
YOLO11m / 640
YOLO11m / 960
YOLO11m / 1280
每次只改变输入尺寸,否则无法判断精度变化究竟来自模型、分辨率还是增强参数。
五、用相同条件训练 RT-DETR
如果使用 Ultralytics 接口,可以保持大部分实验参数一致:
python
from ultralytics import RTDETR
model = RTDETR("rtdetr-l.pt")
model.train(
data="/workspace/datasets/defect/defect.yaml",
imgsz=640,
epochs=100,
batch=4,
device=0,
amp=True,
cache="disk",
workers=8,
seed=42,
deterministic=True,
patience=30,
save_period=10,
project="/workspace/runs/defect",
name="rtdetr_l_640_baseline",
)
首次运行建议从较小 batch 开始。确认峰值显存后,再逐级测试 batch=6、batch=8。
比较时必须固定:
- 同一份 train、val、test;
- 同一个输入尺寸;
- 同一随机种子;
- 相近的训练轮次与早停逻辑;
- 同一部署精度;
- 同一测试设备;
- 同一置信度选择方法。
否则得到的只是两次不同实验,不能称为模型对比。
六、发生 CUDA OOM,按这个顺序处理
当训练出现 CUDA out of memory,建议按以下顺序修改:
- 先降低 batch;
- 再确认 AMP 是否开启;
- 关闭不必要的并行任务;
- 降低输入尺寸;
- 换用更小的模型;
- 最后再考虑梯度累积或更大显存规格。
不要同时把 batch、分辨率和模型规模全部修改。一次只改一个变量,才能知道真正的显存瓶颈在哪里。
可以持续观察:
bash
watch -n 1 nvidia-smi
如果显存占用很高但 GPU 利用率长期偏低,问题可能不在显卡,而在图片解码、磁盘读取、数据增强或 workers 配置。此时盲目更换更强 GPU,训练也未必明显提速。
七、工业检测不能只报 mAP
通用目标检测常用 mAP,但工业质检往往承担着不同成本:
- 漏检:缺陷品流入下游;
- 误报:正常产品被拦截;
- 人工复核:额外增加工位和人力;
- 推理过慢:跟不上产线节拍。
建议至少记录:
| 指标 | 业务含义 |
|---|---|
| 每类 Recall | 哪类缺陷最容易漏掉 |
| 每类 Precision | 哪类缺陷误报最多 |
| PR 曲线 | 如何选择上线置信度 |
| 正常样本误报率 | 对良品率和复核量的影响 |
| 缺陷样本漏检率 | 对质量风险的影响 |
| 单图延迟及 P95 | 能否满足产线节拍 |
| 峰值显存 | 当前配置是否可稳定运行 |
| 单轮训练时间 | 下一轮调参需要多久 |
| 中断恢复结果 | 长任务是否能继续训练 |
如果裂纹比污点更重要,就不能只看四个类别的平均值。需要为关键缺陷单独设置验收门槛。
八、为什么工业团队更需要"可恢复的训练环境"?
工业缺陷检测通常会反复经历:
text
上线验证
→ 收集漏检与误报
→ 难例回灌
→ 重新训练
→ 阈值调整
→ 再次部署
团队最容易损失的,不只是 GPU 时间,还包括:
- 重装 CUDA 和 PyTorch;
- 重新上传数据;
- 找不到上一次依赖版本;
- checkpoint 没有及时保存;
- 实验名称混乱;
- 训练中断后只能从头开始。
因此,环境选择不能只比较某一时刻的每小时单价,还要计算:
text
有效 PoC 成本
= GPU 运行成本
+ 存储成本
+ 环境重建时间
+ 中断重跑成本
+ 工程师等待时间
九、以算家云为例操作演示:专业版 4090 如何承接长期训练

算家云官网将两个版本定位为:
- 专业版 Pro:长期生产、推理训练和稳定运行;
- 青春版 Air:短期学习、测试验证和低成本使用。
对于工业缺陷检测公司,如果只是检查数据格式、测试代码是否能运行,可以先做小规模环境验收;一旦进入全量训练、双模型对照和持续调参阶段,更适合优先考察专业版 Pro。
建议按以下顺序建立实例:
- 进入算家云创建实例页面;
- 选择专业版 Pro;
- 核对当前可用区域、RTX 4090 规格、CPU、内存和磁盘;
- 选择与项目匹配的 CUDA、PyTorch 基础环境;
- 通过 SSH、JupyterLab 或 VS Code 连接实例;
- 上传脱敏后的数据集和
defect.yaml; - 先运行环境检查,再启动 10 个 epoch 的冒烟训练;
- 确认显存、日志和 checkpoint 正常后,再启动完整训练。
GPU 库存、区域和卡数属于动态信息,应以创建实例页面的实时展示为准。官网的"稳定运行"属于产品定位,不应扩大理解为绝不中断或额外 SLA 承诺。
还要注意数据管理:
- 长时间实验设置
save_period; - 训练输出不要只保存在临时目录;
- 关机前确认 checkpoint、日志和配置文件的位置;
- 重要数据保存到符合团队制度的持久化位置;
- 记录系统盘、数据盘和项目网盘的区别。
算家云按量实例开机开始计算实例算力费用,关机结束实例算力计费,不足一小时的运行时段按秒计费;但扩容数据盘等资源可能存在独立规则,不能简单理解为"关机后所有费用都停止"。
十、建议先做一轮 6 组 PoC
准备一份经过脱敏、按批次切分的数据,建立以下实验矩阵:
| 实验 | 模型 | 分辨率 | 目的 |
|---|---|---|---|
| A1 | YOLO11s | 640 | 验证完整链路 |
| A2 | YOLO11m | 640 | 建立精度基线 |
| A3 | YOLO11m | 960 | 判断小缺陷是否受益 |
| B1 | RT-DETR | 640 | 完成架构对照 |
| B2 | RT-DETR | 960 | 判断分辨率收益 |
| C1 | 胜出模型 | 最优尺寸 | 加入难例后的复测 |
每组实验至少保留:
text
数据版本或哈希
代码 commit
Python / CUDA / PyTorch / Ultralytics 版本
模型权重
完整训练参数
随机种子
训练时长
峰值显存
每类 Precision / Recall
正常样本误报率
缺陷样本漏检率
推理延迟
完成这张表后,再决定模型和算力,比只看一张公开 benchmark 更可靠。
对于准备把缺陷检测从 Demo 推到交付阶段的团队,可以直接在算家云专业版 Pro 的当前可用 RTX 4090 实例上,用自己的脱敏数据跑完上述六组实验。先验证显存、漏检、误报和训练恢复能力,再决定是否扩大训练规模。
常见问题
1. 24GB RTX 4090 一定能训练 YOLO11x 吗?
不能脱离输入尺寸和 batch 保证。建议先用 YOLO11m 建立基线,再根据显存余量决定是否升级模型规模。
2. 小缺陷检测是不是分辨率越高越好?
不是。提高分辨率可能保留更多缺陷像素,但同时增加显存、训练时间和推理延迟。应在 640、960、1280 等配置上做单变量对照。
3. YOLO11 和 RT-DETR 谁更适合工业缺陷?
没有脱离数据集的固定答案。YOLO11 更适合快速建立基线;RT-DETR 适合作为不同架构的对照。最终应按漏检、误报、延迟和部署成本选择。
4. 训练集和验证集可以随机切分吗?
同批次、相邻帧或同一产品连续图像不建议直接随机切分,否则容易出现数据泄漏。优先按批次、时间、产线或相机划分。
5. 算家云青春版和专业版应该怎么选?
短时学习、代码验证和低成本测试可考察青春版;进入全量训练、长期迭代和持续运行阶段,更适合优先考察专业版。具体 GPU 库存和规格以创建实例页为准。