yolo11 Detecção de alvo
Este programa de teste inferirá o modelo yolo11 para atingir a detecção de alvos, e os resultados serão exibidos somente na forma de impressão.
Baixe o
Compilação cruzada do programa YOLO no PC
Você pode usar o programa yolov8.
Localização do código Duo256M yolov8: sample_yolov8.cpp
Método de compilação
Consulte o método descrito em Introdução para compilar o programa exemplo.
Basicamente: (no ambiente docker - workspace - https://milk-v.blogspot.com/2024/10/milk-v-duo-256-yolov-parte-i.html)
cd yolo11-obiect-dection
wget https://sophon-file.sophon.cn/sophon-prod-s3/drive/23/03/07/16/host-tools.tar.gz
tar xvf host-tools.tar.gz
cd host-tools
export PATH=$PATH:$(pwd)/gcc/riscv64-linux-musl-x86_64/bin
cd /workspace
git clone https://github.com/milkv-duo/cvitek-tdl-sdk-sg200x.git
cd cvitek-tdl-sdk-sg200x
git pull
cd sample
./compile_sample.sh
.
.
.
.riscv64-unknown-linux-musl-g++ -lopencv_core -lopencv_imgproc -lopencv_imgcodecs -L/workspace/cvitek-tdl-sdk-sg200x/sample/3rd/opencv/lib -L/workspace/cvitek-tdl-sdk-sg200x/sample/3rd/middleware/v2/lib -L/workspace/cvitek-tdl-sdk-sg200x/sample/3rd/middleware/v2/lib/3rd -lini -lsns_full -lsample -lisp -lvdec -lvenc -lawb -lae -laf -lcvi_bin -lcvi_bin_isp -lmisc -lisp_algo -lsys -lvpu -L/workspace/cvitek-tdl-sdk-sg200x/sample/3rd/tpu/lib -lcnpy -lcvikernel -lcvimath -lcviruntime -lz -lm -L/workspace/cvitek-tdl-sdk-sg200x/sample/3rd/middleware/v2/lib -lcvi_ive -L/workspace/cvitek-tdl-sdk-sg200x/lib -L/workspace/cvitek-tdl-sdk-sg200x/sample/3rd/lib -lpthread -latomic -lcvi_draw_rect -o sample_lib_draw_rect /workspace/cvitek-tdl-sdk-sg200x/sample/cvi_draw_rect/sample_lib_draw_rect.o
/workspace/cvitek-tdl-sdk-sg200x/sample/cvi_draw_rect done
/workspace/cvitek-tdl-sdk-sg200x/sample
finish build sample!!!
root@a4096611d762:/workspace/cvitek-tdl-sdk-sg200x/sample#
Após a conclusão da compilação, o programa sample_yolov8
que precisamos será gerado no diretório sample/cvi_yolo/
Compilação de modelos
Se você já baixou o repositório yolov8, apenas é suficiente git pull
Exportar
- Baixe o código do repositório oficial do yolo11, o endereço é o seguinte: https://github.com/ultralytics
cd /workspace
git clone https://github.com/ultralytics
- Baixe o arquivo do modelo yolo11 correspondente
Tome yolo11n como exemplo
cd /workspace/ultralytics
wget https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n.pt
- Exportar o modelo de yolo11n.onnx
Baixe a versão (opcional) mais recente do anaconda, consulte: https://docs.anaconda.com/miniconda/
Baixe o Python versão 3.8 ou superior, PyTorch versão 2.0.1 ou superior, é melhor usar a versão mais recente (opcionais)
Ativar (por exemplo, Python 3.8, torch2.0.1):
conda create -n py3.8 python==3.8.2
conda activate py3.8
python -m venv .venv
source .venv/bin/activate
pip3 install --upgrade pip
pip3 install torch==2.0.1
Nota: Execute no diretório ultralytics.
cp /workspace/cvitek-tdl-sdk-sg200x/sample/yolo_export/yolov8_export.py .
python3 yolov8_export.py --weights ./yolo11n.pt --img-size 640 640
root@a4096611d762:/workspace/ultralytics# python3 yolov8_export.py --weights ./yolo11n.pt --img-size 640 640
Ultralytics 8.3.38 🚀 Python-3.10.12 torch-2.0.1+cpu CPU (Intel Core(TM) i7-4510U 2.00GHz)
YOLO11n summary (fused): 238 layers, 2,616,248 parameters, 0 gradients, 6.5 GFLOPs
PyTorch: starting from 'yolo11n.pt' with input shape (1, 3, 640, 640) BCHW and output shape(s) ((1, 64, 80, 80), (1, 64, 40, 40), (1, 64, 20, 20), (1, 80, 80, 80), (1, 80, 40, 40), (1, 80, 20, 20)) (5.4 MB)
requirements: Ultralytics requirement ['onnxslim'] not found, attempting AutoUpdate...
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
Collecting onnxslim
Downloading onnxslim-0.1.42-py3-none-any.whl (142 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 142.7/142.7 KB 1.4 MB/s eta 0:00:00
Requirement already satisfied: onnx in /usr/local/lib/python3.10/dist-packages (from onnxslim) (1.14.0)
Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from onnxslim) (23.1)
Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from onnxslim) (1.12)
Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from onnx->onnxslim) (1.24.3)
Requirement already satisfied: typing-extensions>=3.6.2.1 in /usr/local/lib/python3.10/dist-packages (from onnx->onnxslim) (4.5.0)
Requirement already satisfied: protobuf>=3.20.2 in /usr/local/lib/python3.10/dist-packages (from onnx->onnxslim) (3.20.3)
Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy->onnxslim) (1.3.0)
Installing collected packages: onnxslim
Successfully installed onnxslim-0.1.42
requirements: AutoUpdate success ✅ 13.9s, installed 1 package: ['onnxslim']
requirements: ⚠️ Restart runtime or rerun command for updates to take effect
ONNX: starting export with onnx 1.14.0 opset 11...
============== Diagnostic Run torch.onnx.export version 2.0.1+cpu ==============
verbose: False, log level: Level.ERROR
======================= 0 NONE 0 NOTE 0 WARNING 0 ERROR ========================
ONNX: slimming with onnxslim 0.1.42...
ONNX: export success ✅ 20.2s, saved as 'yolo11n.onnx' (10.1 MB)
Export complete (24.3s)
Results saved to /workspace/ultralytics
Predict: yolo predict task=detect model=yolo11n.onnx imgsz=640
Validate: yolo val task=detect model=yolo11n.onnx imgsz=640 data=/usr/src/ultralytics/ultralytics/cfg/datasets/coco.yaml
Visualize: https://netron.app
root@a4096611d762:/workspace/ultralytics#
Dica: Ao executar este comando, se um erro semelhante a ModuleNotFoundError: No module named 'x'
aparecer, basta execute pip install x
.
Gere yolo11n.onnx no diretório atual.
root@a4096611d762:/workspace/ultralytics# ls *.onnx
yolo11n.onnx
root@a4096611d762:/workspace/ultralytics#
Explicação dos parâmetros
--weights - caminh do modelo de pessos pytorch
--img-size tamanho da imagem de entrada
Método de conversão TPU-MLIR
Consulte o documento TPU-MLIR para configurar o ambiente de trabalho TPU-MLIR. Para análise de parâmetros, consulte o documento TPU-MLIR .
Veja https://milk-v.blogspot.com/2024/10/milk-v-duo-256-yolov-parte-i.html
Basicamente (em /workspace)
git clone https://github.com/milkv-duo/tpu-mlir.git source ./tpu-mlir/envsetup.sh
Depois de configurar o ambiente de trabalho, crie um diretório model_yolo11n no mesmo diretório deste projeto (ultralytics) e coloque os arquivos de modelo e imagem nele.
mkdir model_yolo11n && cd model_yolo11n
cp /workspace/ultralytics/yolo11n.onnx .
cp -rf ${REGRESSION_PATH}/dataset/COCO2017 .
cp -rf ${REGRESSION_PATH}/image .
As etapas específicas de implementação são divididas em três etapas:
- model_transform.py converte o modelo onnx no modelo de formato intermediário mlir
onnx -> model_transform.py -> mlir
- run_calibration.py gera tabela de calibração de quantização int8
conjunto_de_calibração -> run_calibration.py -> tabela_de_calibração
- model_deploy.py gera cvimodel para inferência TPU com mlir e tabela de quantização int8
mlir + tabela_de_calibração ->model_deploy.py -> cvimodel
onnx para MLIR
model_transform.py \
--model_name yolo11n \
--model_def yolo11n.onnx \
--input_shapes [[1,3,640,640]] \
--mean 0.0,0.0,0.0 \
--scale 0.0039216,0.0039216,0.0039216 \
--keep_aspect_ratio \
--pixel_format rgb \
--mlir yolo11n.mlir
Após a conversão para o arquivo mlir, um arquivo yolo11n.mlir
será gerado.
root@a4096611d762:/workspace/ultralytics/model_yolo11n# ls yolo11n.mlir
yolo11n.mlir
root@a4096611d762:/workspace/ultralytics/model_yolo11n#
Modelo MLIR para INT8 (suporta apenas o modelo quantizado INT8 )
Antes de quantizar para o modelo INT8, você precisa executar calibration.py para obter a tabela de calibração. O número de dados de entrada deve ser de cerca de 100~1000 de acordo com a situação. Aqui, 100 imagens COCO2017 são preparadas para demonstração:
run_calibration.py yolo11n.mlir \
--dataset ./COCO2017 \
--input_num 100 \
-o yolo11n_cali_table
root@a4096611d762:/workspace/ultralytics/model_yolo11n# run_calibration.py yolo11n.mlir \
> --dataset ./COCO2017 \
> --input_num 100 \
> -o yolo11n_cali_table
SOPHGO Toolchain v1.3.228-g19ca95e9-20230921
GmemAllocator use OpSizeOrderAssign
reused mem is 3584000, all mem is 47558400
2024/11/28 19:28:14 - INFO :
load_config Preprocess args :
resize_dims : [640, 640]
keep_aspect_ratio : True
keep_ratio_mode : letterbox
pad_value : 0
pad_type : center
input_dims : [640, 640]
--------------------------
mean : [0.0, 0.0, 0.0]
scale : [0.0039216, 0.0039216, 0.0039216]
--------------------------
pixel_format : rgb
channel_format : nchw
last input data (idx=100) not valid, droped
input_num = 100, ref = 100
real input_num = 100
activation_collect_and_calc_th for op: images: 0%| | 0/231 [00:00<?, ?it/s]
.
.
.
Use a tabela de calibração para gerar cvimodel simétrico int8:
model_deploy.py \
--mlir yolo11n.mlir \
--quant_input --quant_output \
--quantize INT8 \
--calibration_table yolo11n_cali_table \
--chip cv181x \
--model yolo11n_cv181x_int8_sym.cvimodel
root@a4096611d762:/workspace/ultralytics/model_yolo11n# model_deploy.py \ > --mlir yolo11n.mlir \ > --quant_input --quant_output \ > --quantize INT8 \ > --calibration_table yolo11n_cali_table \ > --chip cv181x \ > --model yolo11n_cv181x_int8_sym.cvimodel SOPHGO Toolchain v1.3.228-g19ca95e9-20230921 2024/11/28 20:44:52 - INFO : load_config Preprocess args : resize_dims : [640, 640] keep_aspect_ratio : True keep_ratio_mode : letterbox pad_value : 0 pad_type : center input_dims : [640, 640] -------------------------- mean : [0.0, 0.0, 0.0] scale : [0.0039216, 0.0039216, 0.0039216] -------------------------- pixel_format : rgb channel_format : nchw [Running]: tpuc-opt yolo11n.mlir --chip-assign="chip=cv181x" --import-calibration-table="file=yolo11n_cali_table asymmetric=False" --chip-top-optimize --convert-top-to-tpu="mode=INT8 asymmetric=False linear_quant_mode=NORMAL doWinograd=False ignore_f16_overflow=False" --canonicalize -o yolo11n_cv181x_int8_sym_tpu.mlir [Success]: tpuc-opt yolo11n.mlir --chip-assign="chip=cv181x" --import-calibration-table="file=yolo11n_cali_table asymmetric=False" --chip-top-optimize --convert-top-to-tpu="mode=INT8 asymmetric=False linear_quant_mode=NORMAL doWinograd=False ignore_f16_overflow=False" --canonicalize -o yolo11n_cv181x_int8_sym_tpu.mlir [Running]: tpuc-opt yolo11n_cv181x_int8_sym_tpu.mlir --mlir-disable-threading --strip-io-quant="quant_input=True quant_output=True" --chip-tpu-optimize --distribute='num_device=1' --weight-reorder --subnet-divide="dynamic=False" --op-reorder --layer-group="opt=2" --parallel='num_core=1' --address-assign -o yolo11n_cv181x_int8_sym_final.mlir ==---------------------------== Run LayerGroupSearchPass : Searching the optimal layer groups ==---------------------------== ======================================================= ***** Dynamic Programming layer group with cluster **** ======================================================= total num of base_group is 43 clusters idx(size): 0(1), 1(1), 2(1), 3(1), 4(1), 5(1),
Após a compilação, um arquivo chamado yolo11n_cv181x_int8_sym.cvimodel será gerado.
root@a4096611d762:/workspace/ultralytics/model_yolo11n# ls *.cvimodel
yolo11n_cv181x_int8_sym.cvimodel
root@a4096611d762:/workspace/ultralytics/model_yolo11n#
Execução no Duo 256
Copie o sample_yolov8 compilado, o cvimodel e a imagem jpg a ser inferida para a placa e execute o programa binário:
root@a4096611d762:/workspace# scp /workspace/cvitek-tdl-sdk-sg200x/sample/sample_yolov8 root@192.168.42.1:/root/
root@192.168.42.1's password:
sample_yolov8 100% 14KB 460.4KB/s 00:00
root@a4096611d762:/workspace
root@a4096611d762:/workspace# scp /workspace/ultralytics/model_yolo11n/yolo11n_cv181x_int8_sym.cvimodel root@192.168.42.1:/root/
root@192.168.42.1's password:
yolo11n_cv181x_int8_sym.cvimodel 100% 3065KB 1.7MB/s 00:01
root@a4096611d762:/workspace#
root@a4096611d762:/workspace# scp /workspace/tpu-mlir/regression/image/cat.jpg root@192.168.42.1:/root/
root@192.168.42.1's password:
cat.jpg 100% 137KB 1.9MB/s 00:00
root@a4096611d762:/workspace#
Execute o seguinte comando:
export LD_LIBRARY_PATH='/mnt/system/lib'
./sample_yolov8 ./yolo11n_cv181x_int8_sym.cvimodel cat.jpg
O efeito é o seguinte:
REFYOLO11 🚀 新 -Ultralytics YOLO 文档
Sobre a SMARTCORE
Sobre a SMARTCORE
A SMARTCORE FORNECE CHIPS E MÓDULOS PARA IOT, COMUNICAÇÃO WIRELESS, BIOMETRIA, CONECTIVIDADE, RASTREAMENTO E AUTOMAÇÃO. NOSSO PORTFÓLIO INCLUI MODEM 2G/3G/4G/NB-IOT, SATELITAL, MÓDULOS WIFI, BLUETOOTH, GPS, SIGFOX, LORA, LEITOR DE CARTÃO, LEITOR QR CCODE, MECANISMO DE IMPRESSÃO, MINI-BOARD PC, ANTENA, PIGTAIL, BATERIA, REPETIDOR GPS E SENSORES.
Nenhum comentário:
Postar um comentário