Skip to content

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-X1Ubuntu 22.04, AidLux

准备工作

  1. Rhino Pi-X1 硬件
  2. 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.zip

AidLite SDK 安装

开发者也可以参考模型文件夹中的 README.md 安装 SDK

  • 确保 QNN 后端版本 ≥ 2.40
  • 确保 aidlite-sdkaidlite-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 sdk

QNN & 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