109 lines
2.8 KiB
Markdown
109 lines
2.8 KiB
Markdown
|
# Ubuntu Cross Build aarch64
|
||
|
|
||
|
mmdeploy chose ncnn as the inference backend for aarch64 embedded linux devices. There are two parts:
|
||
|
|
||
|
Host
|
||
|
|
||
|
- model conversion
|
||
|
- cross build SDK and demo for embedded devices
|
||
|
|
||
|
Device
|
||
|
|
||
|
- Run converted model
|
||
|
|
||
|
## 1. Model Convert on Host
|
||
|
|
||
|
Refer to the doc to install [mmdeploy](../01-how-to-build/) and [mmcls](https://github.com/open-mmlab/mmclassification), and convert resnet18 for model package
|
||
|
|
||
|
```bash
|
||
|
export MODEL_CONFIG=/path/to/mmclassification/configs/resnet/resnet18_8xb32_in1k.py
|
||
|
export MODEL_PATH=https://download.openmmlab.com/mmclassification/v0/resnet/resnet18_8xb32_in1k_20210831-fbbb1da6.pth
|
||
|
|
||
|
# Convert resnet18
|
||
|
cd /path/to/mmdeploy
|
||
|
python tools/deploy.py \
|
||
|
configs/mmcls/classification_ncnn_static.py \
|
||
|
$MODEL_CONFIG \
|
||
|
$MODEL_PATH \
|
||
|
tests/data/tiger.jpeg \
|
||
|
--work-dir resnet18 \
|
||
|
--device cpu \
|
||
|
--dump-info
|
||
|
```
|
||
|
|
||
|
## 2. Cross Build on Host
|
||
|
|
||
|
It is recommended to compile directly with the script
|
||
|
|
||
|
```bash
|
||
|
sh -x tools/scripts/ubuntu_cross_build_aarch64.sh
|
||
|
```
|
||
|
|
||
|
The following is the manual process corresponding to the script:
|
||
|
|
||
|
a) Install aarch64 build tools
|
||
|
|
||
|
```bash
|
||
|
sudo apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
|
||
|
```
|
||
|
|
||
|
b) Cross build opencv and install to /tmp/ocv-aarch64
|
||
|
|
||
|
```bash
|
||
|
git clone https://github.com/opencv/opencv --depth=1 --branch=4.x --recursive
|
||
|
cd opencv/platforms/linux/
|
||
|
mkdir build && cd build
|
||
|
cmake ../../.. \
|
||
|
-DCMAKE_INSTALL_PREFIX=/tmp/ocv-aarch64 \
|
||
|
-DCMAKE_TOOLCHAIN_FILE=../aarch64-gnu.toolchain.cmake
|
||
|
make -j && make install
|
||
|
ls -alh /tmp/ocv-aarch64
|
||
|
..
|
||
|
```
|
||
|
|
||
|
c) Cross build ncnn and install to /tmp/ncnn-aarch64
|
||
|
|
||
|
```bash
|
||
|
git clone https://github.com/tencent/ncnn --branch 20220729 --depth=1
|
||
|
mkdir build && cd build
|
||
|
cmake .. \
|
||
|
-DCMAKE_TOOLCHAIN_FILE=../toolchains/aarch64-linux-gnu.toolchain.cmake \
|
||
|
-DCMAKE_INSTALL_PREFIX=/tmp/ncnn-aarch64
|
||
|
make -j && make install
|
||
|
ls -alh /tmp/ncnn-aarch64
|
||
|
..
|
||
|
```
|
||
|
|
||
|
d) Cross build mmdeploy
|
||
|
|
||
|
```bash
|
||
|
git submodule init
|
||
|
git submodule update
|
||
|
mkdir build && cd build
|
||
|
cmake .. \
|
||
|
-DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/aarch64-linux-gnu.cmake \
|
||
|
-DMMDEPLOY_TARGET_DEVICES="cpu" \
|
||
|
-DMMDEPLOY_TARGET_BACKENDS="ncnn" \
|
||
|
-Dncnn_DIR=/tmp/ncnn-aarch64/lib/cmake/ncnn \
|
||
|
-DOpenCV_DIR=/tmp/ocv-aarch64/lib/cmake/opencv4
|
||
|
make install
|
||
|
ls -lah install/bin/*
|
||
|
..
|
||
|
```
|
||
|
|
||
|
## 3. Execute on Device
|
||
|
|
||
|
Make sure that `--dump-info` is used during model conversion, so that the `resnet18` directory contains the files required by the SDK such as `pipeline.json`.
|
||
|
|
||
|
Copy the model folder(resnet18), executable(image_classification) file, test image(tests/data/tiger.jpeg) and prebuilt OpenCV(/tmp/ocv-aarch64) to the device.
|
||
|
|
||
|
```bash
|
||
|
./image_classification cpu ./resnet18 tiger.jpeg
|
||
|
..
|
||
|
label: 292, score: 0.9261
|
||
|
label: 282, score: 0.0726
|
||
|
label: 290, score: 0.0008
|
||
|
label: 281, score: 0.0002
|
||
|
label: 340, score: 0.0001
|
||
|
```
|