Image Classification Based on Densenet
1. Configure Docker development environment
Refer to here. After configuring the Docker development environment, return here to continue the next step.
If you are using a configured Docker development environment, please make sure to follow the Docker configuration tutorial to execute command source ./tpu-mlir/envsetup.sh after starting Docker, otherwise errors may occur in subsequent steps.
2. Prepare the working directory in Docker
Create and enter the densenet121 working directory, note that it is a directory at the same level as tpu-mlir.
# mkdir densenet121 && cd densenet121
Get the original model
# wget https://media.githubusercontent.com/media/onnx/models/main/validated/vision/classification/densenet-121/model/densenet-12.tar.gz
Extract densenet-12.tar.gz
# tar -zxvf densenet-12.tar.gz
After extraction is complete, the densenet-12 folder will be generated in the current directory, which contains the densenet-12.onnx model file.
Copy test image:
# cp -rf ${TPUC_ROOT}/regression/dataset/ILSVRC2012/ .
# cp -rf ${TPUC_ROOT}/regression/image/ .
${TPUC_ROOT} here is an environment variable, corresponding to the tpu-mlir directory, which is loaded in the source ./tpu-mlir/envsetup.sh step in the previous configuration of the Docker development environment.
Create and enter the work working directory to store compiled files such as MLIR and cvimodel
# mkdir work && cd work
3. ONNX Model Conversion
The Duo development board is equipped with the CV1800B chip, which supports the ONNX series and Caffe models. Currently, it does not support TFLite models. In terms of quantized data types, it supports quantization in BF16 format and asymmetric quantization in INT8 format.
The steps for model conversion are as follows:
- Convert ONNX model to MLIR
- Generate calibration tables required for quantification
- MLIR quantization into INT8 asymmetric cvimodel
ONNX model converted to MLIR
The model in this example is RGB input, mean and scale are 123.675,116.28,103.53 and 0.0171,0.0175,0.0174 respectively.
The command to convert an ONNX model to an MLIR model is as follows:
model_transform.py \
--model_name densenet121 \
--model_def ../densenet-12/densenet-12.onnx \
--test_input ../image/cat.jpg \
--input_shapes [[1,3,224,224]] \
--resize_dims 256,256 \
--mean 123.675,116.28,103.53 \
--scale 0.0171,0.0175,0.0174 \
--pixel_format rgb \
--test_result densenet121_top_outputs.npz \
--mlir densenet121.mlir