BEVFormer-tiny (R50) 部署
介绍
BEVFormer-tiny (R50) 是一款专注于边缘端高效部署的自动驾驶多相机三维目标检测模型。该模型由商汤科技与清华大学团队提出,基于经典的 ResNet-50 骨干网络,通过独特的时空注意力机制(Spatio-Temporal Attention),将多个环视相机的二维图像特征无损地转换为统一的环视鸟瞰图(BEV)特征。作为 Tiny 轻量化版本,它通过精简 Transformer 层数与优化网格分辨率,在大幅降低显存占用与计算延迟的同时,依然完好地保留了对动态物体的速度估计与时序轨迹追踪能力。凭借其优异的能效比,BEVFormer-tiny 已成为低算力车载芯片、路侧边缘计算单元(RSCU)实现高精度 3D 空间感知与车路协同的工业级标杆。
本章节将演示如何在边缘设备上完成 BEVFormer-tiny (R50) 部署、加载与识别流程。提供以下部署方式:
- AidLite Python API
在本案例中,模型推理运行在设备端 NPU 计算单元,通过代码调用相关接口接收用户输入并返回结果。
- 设备:Rhino Pi-X1
- 系统:Ubuntu 22.04
- 源模型:BEVFormer-tiny (R50)
- 量化模型精度:FP16 量化
- Model Farm 模型参考:BEVFormer-tiny (R50)
支持平台
| 平台 | 运行方式 |
|---|---|
| Rhino Pi-X1 | Ubuntu 22.04, AidLux |
准备工作
- Rhino Pi-X1 硬件
- Ubuntu 22.04 系统或 AidLux 系统
下载 BEVFormer-tiny (R50) 模型资源
bash
mms list BEVFormer-tiny
#------------------------可以看到 BEVFormer-tiny (R50) 模型------------------------
Model Precision Chipset SOC Backend
-------------------- --------- ------- ---------------- -------
BEVFormer-tiny (R50) FP16 qcs8550 Qualcomm QCS8550 QNN2.40
# 下载 BEVFormer-tiny (R50)
mms get -m 'BEVFormer-tiny (R50)' -p fp16 -c qcs8550 -b qnn2.40 -d /home/aidlux/models-test
cd /home/aidlux/models-test
# 解压
unzip BevFormer-Tiny-Resnet50_qcs8550_fp16.zipAidLite SDK 安装
开发者也可以参考模型文件夹中的 README.md 安装 SDK
- 确保 QNN 后端版本
≥ 2.40 - 确保
aidlite-sdk和aidlite-qnnxxx的版本是2.4.x或者更高版本
bash
# AidLite & QNN 版本检查
dpkg -l | grep aidlite
#------------------------ 可以看到类似如下输出 ------------------------
ii aidlite-qnn240 2.4.1.271 arm64 aidlux aidlite qnn240 backend plugin
ii aidlite-sdk 2.4.1.271 arm64 aidlux inference module sdkQNN & AidLite 版本更新
bash
# 安装 AidLite SDK
sudo aid-pkg update
sudo aid-pkg install aidlite-sdk
sudo aid-pkg install aidlite-qnn240
# aidlite sdk c++ check
python3 -c "import aidlite; print(aidlite.get_library_version())"
# aidlite sdk python check
python3 -c "import aidlite; print(aidlite.get_py_library_version())"AidLite Python API 部署
运行 Python API 例子
bash
cd /home/aidlux/models-test/
python3 code/python/run_test.py \
--backbone_model ./models/QCS8550/FP16/backbone_context.bin.aidem \
--scene_start_encoder_model ./models/QCS8550/FP16/scene_start_encoder_context.bin.aidem \
--encoder_model ./models/QCS8550/FP16/temporal_encoder_context.bin.aidem \
--decoder_model ./models/QCS8550/FP16/decoder_context.bin.aidem \
--asset_manifest ./code/python/datasets/sample4/asset_manifest.json \
--nms_contract ./code/python/configs/nms_runtime_contract.json \
--model_type QNN240 \
--invoke_nums 4 \
--output_dir ./outputs/final_sample4可以在命令行看到模型推理耗时 (单位 ms)以及检测结果:
plain
========================================
BEVFormer W8A8 QCS8550 Performance
========================================
model platform : QCS8550
frames : 4
QNN invoke (ms) : mean=401.968 min=400.651 max=403.298
backbone : 18.089
encoder : 344.693 (scene_start) 345.820 (temporal)
decoder : 38.341
Output files
summary JSON : /home/aidlux/models-test/outputs/final_sample4/bevformer_demo_summary.json
camera-grid PNG: 4 frame(s)
camera-grid GIF: /home/aidlux/models-test/outputs/final_sample4/sample4_camera_grid.gif
========================================示例程序运行后,会在/home/aidlux/models-test/outputs/final_sample4/下生成最终动态检测图片 sample4_camera_grid.gif