VAD复现实战:高效自动驾驶向量化场景表示的关键步骤与避坑指南
1. VAD模型复现前的环境准备复现VADVectorized Autonomous Driving模型的第一步就是搭建合适的开发环境。这里我踩过不少坑总结下来最头疼的就是各种Python包的版本冲突问题。官方提供的requirement.txt虽然列出了依赖包但实际安装时你会发现有些包的版本已经更新直接pip install -r requirements.txt大概率会报错。我的经验是先用conda创建一个新的Python 3.8环境这个版本兼容性最好然后按照requirements.txt逐个安装包。遇到报错时不要慌先看错误信息提示哪个包不兼容。比如我遇到过numpy版本过高导致的问题用pip install numpy1.21.0降级后就解决了。特别要注意的是torch和torchvision的版本匹配建议直接用官方推荐的组合比如torch1.9.0cu111和torchvision0.10.0cu111。提示安装mmcv-full时要特别注意必须选择与CUDA版本匹配的预编译版本。我用的命令是pip install mmcv-full1.4.0 -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.9.0/index.html2. 数据集准备的关键细节NuScenes数据集是VAD模型的训练基础但准备过程有几个容易忽略的细节。首先下载Map Expansion压缩包后很多新手会直接解压到任意位置实际上必须放在nuscenes/maps/目录下否则后续代码会找不到地图数据。更麻烦的是那两个pkl文件vad_nuscenes_infos_temporal_train.pkl和vad_nuscenes_infos_temporal_val.pkl。官方文档说可以自己生成但实际操作时会遇到各种路径问题。我建议直接下载作者提供的文件放到nuscenes根目录。如果坚持要自己生成记得修改prepare_dataset.py中的路径配置特别是data_root和version参数。数据集目录结构应该是这样的nuscenes/ ├── maps/ ├── samples/ ├── sweeps/ ├── v1.0-trainval/ ├── vad_nuscenes_infos_temporal_train.pkl └── vad_nuscenes_infos_temporal_val.pkl3. 配置文件修改的实战技巧VAD的配置文件看似简单实则暗藏玄机。首先是VAD_base_e2e.py中的img_norm_cfg参数这个必须和你实际使用的数据集匹配。我当初没注意这点结果训练时loss一直不下降。正确的做法是查看你使用的数据预处理方式如果是默认的ImageNet归一化就应该用img_norm_cfg dict( mean[123.675, 116.28, 103.53], std[58.395, 57.12, 57.375], to_rgbTrue)另一个容易出错的是路径配置。官方代码中的路径都是相对路径你需要根据自己本地的目录结构调整以下参数data_rootann_filework_dirload_from建议在修改前先备份原始配置文件然后用VS Code的全局替换功能批量修改路径分隔符Windows用户要把/改成\。4. 模型训练与测试的避坑指南下载预训练模型后很多人直接运行测试命令就会遇到著名的numpy.int64 object has no attribute intersects错误。这个问题其实是因为shapely库的版本问题解决方法有两种降级shapely到1.7.0版本pip install shapely1.7.0修改代码中的intersects调用方式参考GitHub issue #29的解决方案测试命令的正确格式应该是CUDA_VISIBLE_DEVICES0 python tools/test.py \ projects/configs/VAD/VAD_base_e2e.py \ ckpts/VAD_base.pth \ --launcher none \ --eval bbox \ --tmpdir tmp如果遇到CUDA out of memory错误可以尝试减小batch size或在配置文件中修改samples_per_gpu参数。训练过程中建议使用nvidia-smi监控GPU显存使用情况我习惯用这个命令watch -n 1 nvidia-smi5. 性能优化与调试经验当模型能跑通后下一步就是优化性能了。根据我的实测VAD模型对输入尺寸非常敏感。在config文件中调整img_scale参数可以显著影响推理速度img_scale(1600, 900) # 默认尺寸 img_scale(1280, 720) # 速度提升30%精度下降约2%另一个提升效率的技巧是启用FP16训练。在配置文件中添加fp16 dict(loss_scale512.)如果遇到训练loss震荡大的问题可以尝试调整优化器参数。我通过实验发现AdamW优化器配合以下参数效果不错optimizer dict( typeAdamW, lr2e-4, weight_decay0.01, paramwise_cfgdict( custom_keys{ img_backbone: dict(lr_mult0.1), img_neck: dict(lr_mult0.1) }))6. 可视化与结果分析调试模型时可视化工具能帮大忙。VAD自带的visualization.py脚本可以渲染检测结果但需要正确配置环境变量。我建议在运行前先设置export DISPLAY:0对于定量分析重点关注以下几个指标mAP (mean Average Precision)NDS (NuScenes Detection Score)各类别的召回率可以使用官方提供的eval.py脚本生成详细报告python tools/eval.py \ projects/configs/VAD/VAD_base_e2e.py \ ckpts/VAD_base.pth \ --eval bbox \ --eval-options jsonfile_prefix./results报告生成后用pandas分析结果很方便import pandas as pd df pd.read_json(results.bbox.json) print(df[[class_name, ap, ar]].sort_values(ap, ascendingFalse))7. 实际部署的注意事项当模型训练完成后想要部署到实际自动驾驶系统时还需要考虑实时性要求。我测试发现在RTX 3090上VAD_base模型的推理时间约为120ms/帧距离实时(30FPS)还有差距。通过以下优化可以提升性能使用TensorRT加速将模型转换为ONNX格式后用TensorRT优化torch.onnx.export(model, dummy_input, vad.onnx, verboseTrue)启用CUDA Graph捕获在config文件中设置cudnn_benchmark True量化模型使用PyTorch的量化工具减小模型大小model_fp16 torch.quantization.quantize_dynamic( model, {torch.nn.Linear}, dtypetorch.float16)在真实场景测试时要注意光照条件变化对摄像头数据的影响。建议在数据预处理阶段加入自动白平衡和直方图均衡化我在项目中这样实现def enhance_image(img): img cv2.xphoto.createGrayworldWB().balanceWhite(img) img cv2.equalizeHist(img) return img
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2429330.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!