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 Board Demo Result
========================================
status                 : PASS
started_at             : 2026-07-08T15:10:38+08:00
finished_at            : 2026-07-08T15:10:46+08:00
frames                 : 4
scene-start frames     : 1  -> encoder_scene_start
temporal frames        : 3  -> encoder_temporal
preprocess workers     : 6

QNN invoke only, grouped by delivered .bin
  note: excludes image preprocessing, tensor set/get, NMS, file saving, and visualization
  bin file                            count   mean(ms)   min(ms)    max(ms)    var
  backbone_context.bin                   4     17.584    17.179    18.191     0.139
  scene_start_encoder_context.bin        1    345.572   345.572   345.572     0.000
  temporal_encoder_context.bin           3    347.091   346.439   347.952     0.404
  decoder_context.bin                    4     38.936    38.623    39.152     0.037

QNN invoke only, selected pipeline per frame
  mean                 : 403.230 ms
  max                  : 404.401 ms
  min                  : 402.054 ms
  variance             : 0.795

Mean time per frame (ms)
  preprocess (6 JPG -> tensor)        : 116.016
  QNN execute (3 contexts)            : 403.230
    backbone context execute            : 17.584
    encoder context execute             : 346.711
      scene-start encoder .bin invoke   : 345.572
      temporal encoder .bin invoke      : 347.091
    decoder context execute             : 38.936
  postprocess (NMS + save boxes)      : 2.848
  visualization (camera-grid PNG)     : 919.890
  model path total (no drawing)       : 544.585

Complete run time (ms)
  model loading                       : 945.562
  manifest + NMS contract loading     : 0.482
  full inference chain (no drawing)   : 2190.215
  all visualization rendering         : 4600.722
  camera-grid GIF rendering           : 921.162
  full demo chain (with drawing)      : 6794.092
  whole Python run incl. load        : 7743.404

Output files
  summary JSON        : /home/aidlux/models-test/outputs/final_sample4/bevformer_demo_summary.json
  timestamped run log : /home/aidlux/models-test/outputs/final_sample4/run_20260708_151038.log
  latest run log      : /home/aidlux/models-test/outputs/final_sample4/run.log
  camera-grid PNGs    : 4 image(s)
  camera-grid GIF     : /home/aidlux/models-test/outputs/final_sample4/sample4_camera_grid.gif
  output directory    : /home/aidlux/models-test/outputs/final_sample4
========================================

示例程序运行后,会在/home/aidlux/models-test/outputs/final_sample4/下生成最终动态检测图片 sample4_camera_grid.gif