Este tutorial apresenta o uso da cadeia de ferramentas TPU-MLIR para converter o modelo MobileNet-Caffe , gerar MLIR e quantizar o MLIR em um modelo INT8 e realizar testes de implantação na placa de desenvolvimento Milk-V Duo para concluir a tarefa de classificação de imagem, que envolve as seguintes etapas:
🚩【Nota】🚩: A placa de desenvolvimento Milk-V Duo está equipada com o chip CV1800B , que suporta a série ONNX e os modelos Caffe . Atualmente, não suporta o tipo de dados de quantificação do modelo TFLite . quantização assimétrica.
- Preparação do ambiente de trabalho
- Conversão do modelo MobileNet-Caffe
- Implante o cvimodel INT8 na placa de desenvolvimento Duo e verifique
A seguir está uma introdução detalhada a essas três etapas.
1. Preparando o ambiente de trabalho
1.1 Configurar o ambiente de desenvolvimento do Docker
Instale e configure o docker:
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
Extraia o arquivo de imagem do docker hub:
docker pull sophgo/tpuc_dev:v2.2
Execute docker para criar um contêiner, onde duodev
está o nome do contêiner, que pode ser modificado por você mesmo. O diretório padrão após a criação é /workspace
:
docker run --privileged --network=host --name duodev -v $PWD:/workspace -it sophgo/tpuc_dev:v2.2
Configure a rede no ambiente docker e instale dependências básicas:
apt-get update
apt-get install net-tools
Baixe a cadeia de ferramentas de conversão de modelo tpu-mlir. O formato de nomenclatura do pacote é tpu-mlir_xxxx.tar.gz
, onde xxxx
está o número da versão. Este tutorial usa a versão como exemplo v1.2.89-g77a2268f-20230703
:
wget --user='cvitek_mlir_2023' --password='7&2Wd%cu5k' ftp://218.17.249.213/home/backup/tpu-mlir_v1.2.89-g77a2268f-20230703.tar.gz
Descompacte a cadeia de ferramentas e importe variáveis de ambiente:
tar zxf tpu-mlir_v1.2.89-g77a2268f-20230703.tar.gz
source tpu-mlir_v1.2.89-g77a2268f-20230703/envsetup.sh
1.2 Preparar diretório de trabalho
Baixe o modelo MobileNet do site oficial:
git clone https://github.com/shicai/MobileNet-Caffe.git
Crie um diretório e coloque os arquivos de modelo no diretório mobilenet_v2
clonado MobileNet-Caffe
(referido abaixo) e os arquivos de imagem no diretório da cadeia de ferramentas (referido abaixo) neste diretório e, em seguida, crie um diretório de trabalho chamado Referência no texto), usado para armazenar arquivos compilados como MLIR e cvimodel:${MOBILE_DIR}
tpu-mlir
${TPUMLIR_DIR}
workspace
${WORK_DIR}
mkdir mobilenet_v2 && cd mobilenet_v2
cp /workspace/MobileNet-Caffe/mobilenet_v2_deploy.prototxt .
cp /workspace/MobileNet-Caffe/mobilenet_v2.caffemodel .
cp -rf /workspace/tpu-mlir_v1.2.89-g77a2268f-20230703//regression/dataset/ILSVRC2012/ .
cp -rf /workspace/tpu-mlir_v1.2.89-g77a2268f-20230703//regression/image/ .
mkdir workspace && cd workspace
2. Conversão do modelo MobileNet-Caffe
As etapas para conversão do modelo são as seguintes:
- Converter o modelo Caffe em MLIR
- Gere tabelas de calibração necessárias para quantificação
- MLIR quantizado em cvimodel assimétrico INT8
2.1 Converter modelo Caffe para MLIR
O modelo neste exemplo é a entrada BGR , a média e a escala são respectivamente 103.94,116.78,123.68
e 0.017,0.017,0.017
, o comando de conversão do modelo é o seguinte:
model_transform.py \
--model_name mobilenet_v2 \
--model_def ../mobilenet_v2_deploy.prototxt \
--model_data ../mobilenet_v2.caffemodel \
--input_shapes [[1,3,224,224]] \
--resize_dims=256,256 \
--mean 103.94,116.78,123.68 \
--scale 0.017,0.017,0.017 \
--pixel_format bgr \
--test_input ../image/cat.jpg \
--test_result mobilenet_v2_top_outputs.npz \
--mlir mobilenet_v2.mlir
O arquivo gerado pela execução do script model_transform.py é mostrado abaixo:
2.2 Gerar tabelas de calibração necessárias para quantificação
run_calibration.py
para obter a tabela de calibração. O número de dados de entrada deve ser de cerca de 100 a 1000 folhas de acordo com a situação.run_calibration.py mobilenet_v2.mlir \
--dataset ../ILSVRC2012 \
--input_num 100 \
-o mobilenet_v2_cali_table
Após a conclusão da operação, será gerado um arquivo nomeado ${model_name}_cali_table, que será utilizado para posteriormente compilar o arquivo de entrada do modelo INT8.
2.3 MLIR quantizado em cvimodel assimétrico INT8
🚩【Nota】🚩: A placa de desenvolvimento Milk-V Duo está equipada com o chip CV1800B , que suporta a série ONNX e os modelos Caffe . Atualmente, não suporta o tipo de dados de quantificação do modelo TFLite . quantização assimétrica , portanto, nesta seção, use
parâmetros de script model_deploy.pypara usar assimétrico para quantização assimétricapara converter o arquivo MLIR em um modelo de quantização assimétrica INT8 e execute o seguinte comando:
model_deploy.py \
--mlir mobilenet_v2.mlir \
--asymmetric \
--calibration_table mobilenet_v2_cali_table \
--fuse_preprocess \
--customization_format BGR_PLANAR \
--chip cv180x \
--quantize INT8 \
--test_input ../image/cat.jpg \
--model mobilenet_v2_cv1800_int8_asym.cvimodel
Após a conclusão da compilação, ${model_name}_cv1800_int8_asym.cvimodel
será gerado um arquivo com o nome, conforme mostrado na figura abaixo:
Nenhum comentário:
Postar um comentário