从零部署RT-DETR:手把手教你训练自定义目标检测数据集
1. RT-DETR简介与环境配置RT-DETR是百度推出的实时目标检测Transformer模型相比传统CNN架构的YOLO系列它在保持高精度的同时实现了更快的推理速度。我第一次接触这个模型时就被它的端到端检测特性吸引了——不需要复杂的后处理直接输出检测结果这对工业部署特别友好。环境配置是第一个拦路虎。官方推荐使用PyTorch 2.1.0版本但实际安装时我发现几个坑# 创建conda环境推荐 conda create -n rtdetr python3.8 conda activate rtdetr # 安装PyTorch注意CUDA版本匹配 pip install torch2.1.0 torchvision0.16.0 torchaudio2.1.0 --index-url https://download.pytorch.org/whl/cu118常见问题排查如果遇到ImportError: cannot import name Datapoint说明torchvision版本不匹配GPU不可用先用nvidia-smi确认CUDA版本再用torch.cuda.is_available()测试建议用pip list | grep torch检查已安装版本冲突时用pip uninstall torch torchvision -y彻底卸载实测发现用conda管理环境比直接pip安装更稳定。有次我反复报错最后发现是之前用pip安装的旧版本没卸载干净conda的隔离性完美解决了这个问题。2. 数据集准备与格式转换官方示例用的是COCO格式但实际项目中我们往往需要处理自定义数据。以我最近做的工业缺陷检测项目为例原始数据是VOC格式的XML标注需要转换为COCO格式的json文件。关键步骤目录结构建议datasets/ ├── train/ │ ├── images/ │ └── annotations.json ├── val/ │ ├── images/ │ └── annotations.json标注文件转换脚本Python示例from pycocotools.coco import COCO import json def voc_to_coco(voc_anns): coco_anns { images: [], annotations: [], categories: [{id: 1, name: defect}] # 修改你的类别 } # 这里添加具体转换逻辑... return coco_anns避坑指南路径问题建议用绝对路径特别是Windows系统中文路径可能引发编码错误尽量全英文路径类别ID必须从1开始0保留给背景图像尺寸要统一混合分辨率可能引发错误我遇到过最头疼的问题是标注文件中的类别名大小写不一致导致模型把Cat和cat识别成两个类别。建议先用json.dump()检查生成的文件结构。3. 配置文件深度解析RT-DETR的配置文件像乐高积木通过组合不同模块实现灵活配置。以rtdetr_r50vd_6x_coco.yml为例重点参数参数说明推荐值batch_size根据显存调整8-32num_workers数据加载线程数4-8lr初始学习率0.0001epochs训练轮次50-300weights预训练权重路径官方提供的rtdetr_r50vd权重关键修改点在dataset/coco_detection.yml中train: img_dir: /absolute/path/to/train/images ann_file: /absolute/path/to/train/annotations.json val: img_dir: /absolute/path/to/val/images ann_file: /absolute/path/to/val/annotations.json模型结构调整rtdetr_pytorch/configs/rtdetr/backbone: name: resnet50 # 可换为swin_transformer等 pretrained: true transformer: num_heads: 8 hidden_dim: 256有次我把num_workers设得太大导致数据加载反而变慢——这是因为线程切换开销超过了并行收益。建议从4开始逐步上调测试。4. 训练过程与调优技巧启动训练的命令很简单python tools/train.py -c configs/rtdetr/rtdetr_r50vd_6x_coco.yml --eval但想要好效果需要关注这些细节学习率策略默认使用带warmup的余弦衰减如果loss震荡严重尝试减小学习率如0.0001→0.00005冻结骨干网络前几层可加速收敛# 在train.py中添加 for name, param in model.backbone.named_parameters(): if layer1 in name or layer2 in name: param.requires_grad False数据增强# 在配置文件中调整 transforms: - name: RandomFlip prob: 0.5 - name: RandomResize sizes: [640, 672, 704, 736, 768] keep_ratio: true我的实战经验小数据集1万张建议增强幅度大些工业检测场景可以去掉颜色扰动如ColorJitter遇到过拟合时试试MixUp或CutMix增强训练监控推荐用TensorBoardtensorboard --logdir outputs/ # 默认日志目录5. 常见报错解决方案编码问题UnicodeDecodeError: gbk codec cant decode byte...解决方法找到报错文件通常是yaml读取处添加encodingutf-8参数CUDA内存不足RuntimeError: CUDA out of memory减小batch_size建议从16开始试使用梯度累积# 在配置文件中 trainer: accumulate_grad_batches: 4 # 等效batch_size16*4版本冲突AttributeError: module torch has no attribute xxx用pip check查看冲突包重建干净环境是最快解决方案最诡异的bug是我遇到训练时loss正常但验证集AP为0最后发现是验证集路径配置错误——模型一直在训练集上验证。建议用这段代码检查数据加载from rtdetr_pytorch.dataset import build_dataloader loader build_dataloader(cfg, is_trainFalse) for batch in loader: print(batch[0].shape) # 应输出验证集图像 break6. 模型导出与部署训练完成后导出为ONNX格式便于部署python tools/export_model.py -c configs/rtdetr/rtdetr_r50vd_6x_coco.yml --weights outputs/weight.pdparams部署优化技巧使用TensorRT加速trt_model torch2trt(model, [dummy_input])量化减小模型体积model torch.quantization.quantize_dynamic( model, {torch.nn.Linear}, dtypetorch.qint8)实测RT-DETR-R50在Tesla T4上能达到50 FPS我在 Jetson Xavier NX 上部署时发现FP16模式能提升30%速度且精度损失不到1%。关键是要在导出时指定torch.onnx.export(..., opset_version13, input_names[images], output_names[output], dynamic_axes{images: {0: batch}, output: {0: batch}}, do_constant_foldingTrue)记得测试部署后的模型时要用与训练相同的预处理流程。有次线上服务效果异常最后发现是部署时漏了归一化操作除以255。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2475188.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!