工业缺陷检测训练选 YOLO11 还是 RT-DETR?一张 24GB RTX 4090 跑通 PoC 的完整方案

对多数工业缺陷检测 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 接口。

工程上比较稳妥的做法是:

  1. 先用 YOLO11m 建立基线;
  2. 固定数据划分、输入尺寸和评价指标;
  3. 再训练 RT-DETR;
  4. 不只比较 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=6batch=8

比较时必须固定:

  • 同一份 train、val、test;
  • 同一个输入尺寸;
  • 同一随机种子;
  • 相近的训练轮次与早停逻辑;
  • 同一部署精度;
  • 同一测试设备;
  • 同一置信度选择方法。

否则得到的只是两次不同实验,不能称为模型对比。

六、发生 CUDA OOM,按这个顺序处理

当训练出现 CUDA out of memory,建议按以下顺序修改:

  1. 先降低 batch;
  2. 再确认 AMP 是否开启;
  3. 关闭不必要的并行任务;
  4. 降低输入尺寸;
  5. 换用更小的模型;
  6. 最后再考虑梯度累积或更大显存规格。

不要同时把 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。

建议按以下顺序建立实例:

  1. 进入算家云创建实例页面;
  2. 选择专业版 Pro;
  3. 核对当前可用区域、RTX 4090 规格、CPU、内存和磁盘;
  4. 选择与项目匹配的 CUDA、PyTorch 基础环境;
  5. 通过 SSH、JupyterLab 或 VS Code 连接实例;
  6. 上传脱敏后的数据集和 defect.yaml
  7. 先运行环境检查,再启动 10 个 epoch 的冒烟训练;
  8. 确认显存、日志和 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 库存和规格以创建实例页为准。


相关推荐
Είναι η κοπέλα1 小时前
YOLO 演进 v5→v11 与 2026 选型指南
人工智能·yolo
hhzz1 小时前
【OpenCV 入门到精通 04】视频入门与绘图交互:从摄像头到鼠标画笔
人工智能·python·opencv·计算机视觉·音视频·交互
hans汉斯2 小时前
【计算机科学与应用】层级评论上下文依赖识别数据集构建与研究——以小红书旅游评论数据为例
人工智能·算法·yolo·目标检测·cnn·旅游
棣廷2 小时前
初识OpenCV——人脸检测与识别实战
人工智能·opencv·计算机视觉
qq_526099133 小时前
视觉检测工控机丢帧、掉线、卡顿,分别是什么原因?按这张表查
数码相机·计算机视觉
AI浩3 小时前
DroneScan-YOLO:针对无人机图像中微小目标的冗余感知轻量级检测
yolo·无人机
xp_fangfei3 小时前
Halcon之第7讲--模板匹配详解与实战应用
人工智能·计算机视觉
TAN-90°-4 小时前
Deep Learning for Computer Vision——Large Scale Distributed Training
人工智能·深度学习·神经网络·算法·机器学习·计算机视觉·语言模型
欧特克_Glodon4 小时前
OpenCV计算机视觉开发入门与实践<四十二>:手势识别
c++·人工智能·opencv·计算机视觉·手势识别