YakumoAkayi's picture
Agora board builds (Model Farm, verified on real boards)
6dcc0f2 verified
|
Raw History Blame Contribute Delete
4.08 kB

Model Information

Source model

  • Input shape: [[1,6,3,480,800]]
  • Number of parameters: 33.7M
  • Model size: 128.5 FP32
  • Output shape: boxes [[300,9]], scores [[300]], labels [[300]]

Source model repository: BEVFormer

Inference with AidLite SDK

SDK installation

Model Farm uses AidLite SDK as the model inference SDK. For details, please refer to the AidLite Developer Documentation

sudo aid-pkg update
sudo aid-pkg install aidlite-sdk
sudo aid-pkg install aidlite-{QNN VERSION}

Verify AidLite SDK:

python3 -c "import aidlite ; print(aidlite.get_library_version())"
python3 -c "import aidlite ; print(aidlite.get_py_library_version())"

Environment Dependencies

Except for AidLite SDK, this BEVFormer demo also requires the following board-side Python environment.

Verified environment:

Python 3.10.12
numpy 1.26.4
opencv-python / cv2 4.13.0
Pillow / PIL 10.4.0

Required Python packages:

numpy
opencv-python
Pillow

Quick check:

python3 -c "import numpy, cv2; from PIL import Image; print('python env ok')"

The demo supports model directories for QCS8550, IQ9, QCS8625, and IQ8. A normal host or development container can only run dry-run package checks and cannot execute real QNN inference without AidLite.

Model Directory Rule

Model SHA verification is always enabled. The platform is inferred from the model path, so no extra SHA option is required.

Supported model directories:

./models/QCS8550/FP16
./models/IQ9/FP16
./models/QCS8625/FP16
./models/IQ8/FP16

Platform mapping:

QCS8550 -> QCS8550 model SHA table
IQ9     -> QCS8550 model SHA table
QCS8625 -> QCS8625 model SHA table
IQ8     -> QCS8625 model SHA table

Each platform directory must contain all four context files:

backbone_context.bin.aidem
scene_start_encoder_context.bin.aidem
temporal_encoder_context.bin.aidem
decoder_context.bin.aidem

If all four --*_model arguments are provided, the model paths decide the platform. All four paths must belong to the same platform directory. If model arguments are omitted, the script uses the first complete directory found in this order:

QCS8550, IQ9, QCS8625, IQ8

Run Demo

Basic command:

cd /home/aidlux/bevformer_delivery_demo_2026_07_08
python3 code/python/run_test.py --invoke_nums 4 --output_dir ./outputs/final_sample4

Full command with explicit model paths and dataset manifest:

python3 code/python/run_test.py \
  --backbone_model ./models/QCS8625/FP16/backbone_context.bin.aidem \
  --scene_start_encoder_model ./models/QCS8625/FP16/scene_start_encoder_context.bin.aidem \
  --encoder_model ./models/QCS8625/FP16/temporal_encoder_context.bin.aidem \
  --decoder_model ./models/QCS8625/FP16/decoder_context.bin.aidem \
  --asset_manifest ./code/python/datasets/sample4/asset_manifest.json \
  --invoke_nums 4 \
  --output_dir ./outputs/final_sample4_qcs8625

The basic command auto-discovers the first complete model directory under models/<platform>/FP16. For QCS8550, IQ9, or IQ8, replace QCS8625 in the full command with QCS8550, IQ9, or IQ8. The four model paths must use the same platform directory.

Dry-run package check:

python3 code/python/run_test.py --dry_run --check_raw_assets

The demo input is specified by:

./code/python/datasets/sample4/asset_manifest.json

The manifest describes four continuous BEVFormer frames. Each frame contains six raw camera JPG images and the required calibration / temporal auxiliary tensors. The demo starts from original six-camera images, not preprocessed image tensors.

Frame execution order:

frame 000: scene-start encoder
frame 001: temporal encoder
frame 002: temporal encoder
frame 003: temporal encoder

Main output files include:

bevformer_demo_summary.json
run.log
frameXXX_final_coordinates.npz
frameXXX_camera_grid.png
sample4_camera_grid.gif