domingo, 13 de outubro de 2024

MILK-V DUO 256 - YOLOv5 - PARTE II - Detecção de Objetos

 

Detecção de objetos com base em YOLOv5

1. Prepare os arquivos do modelo originalWindows

Preparar o kit de desenvolvimento YOLOv5 e arquivo yolov5n.pt

Baixe o kit de desenvolvimento YOLOv5 e o arquivo yolov5n.pt . Quando o download estiver completo, extraia o kit de ferramentas e coloque o arquivo yolov5n.pt no diretório yolov5-master 
no ambiente do Anaconda (a ser visto).

(duotpu) PS C:\Users\Usuário> cd yolov5-master

Configurar o ambiente conda (OPCIONAL)

O Anaconda precisa ser instalado com antecedência.


Seja paciente no tempo de instalação   - Instalei Anaconda em C:\
No blog o usuário em "Carbon"

Abra um novo terminal Anaconda Prompt e execute conda env list para visualizar o ambiente atual.

(base) C:\Users\Carbon> conda env list
# conda environments:
#
base * C:\Users\Carbon\anaconda3

Crie um novo ambiente virtual conda e instale a versão 3.9.0 do python. duotpu é o nome que você escolheu.

(base) C:\Users\Carbon> conda create --name duotpu python=3.9.0



Verifique o ambiente atual novamente após o sucesso.

(base) C:\Users\Carbon> conda env list
# conda environments:
#
base * C:\Users\Carbon\anaconda3
duotpu C:\Users\Carbon\anaconda3\envs\duotpu



Ative o ambiente 3.9.0 recém-instalado.

(base) C:\Users\Carbon> conda activate duotpu

Confirme se a ativação foi bem-sucedida.

(duotpu) C:\Users\Carbon> conda env list
# conda environments:
#
base C:\Users\Carbon\anaconda3
duotpu * C:\Users\Carbon\anaconda3\envs\duotpu


Então, você pode usar o seguinte comando para instalar o PyTorch versão 1.12.1. Por favor, escolha o comando de instalação específico com base em seus requisitos. O processo subsequente requer apenas o uso da CPU.

# CUDA 10.2
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=10.2 -c pytorch

# CUDA 11.3
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.3 -c pytorch

# CUDA 11.6
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.6 -c pytorch

# CPU Only
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cpuonly -c pytorch

conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cpuonly -c pytorch


Com o yolov5-master já descompactado, via comando cd vá no caminho do terminal para o caminho yolov5-master  do kit de desenvolvimento e entre pip install -r requirements.txt para instalar outras dependências.

(duotpu) C:\Users\Carbon> cd yolov5-master
(duotpu) C:\Users\Carbon\yolov5-master> pip install -r requirements.txt

Gerar o arquivo original Model

Crie um novo arquivo main.py  no diretório yolov5-master e escreva o seguinte código no arquivo:

import torch
from models.experimental import attempt_download
model = torch.load(attempt_download("./yolov5n.pt"),
map_location=torch.device('cpu'))['model'].float()
model.eval()
model.model[-1].export = True
torch.jit.trace(model, torch.rand(1, 3, 640, 640), strict=False).save('./yolov5n_jit.pt')


Em seguida, localize o arquivo yolov5-master/models/yolo.py , comente o código das linhas 99 a 115 e adicione o código return x na linha 116, conforme mostrado abaixo:
(respeitar TAB do Python)

Além disso, este arquivo também precisa ser modificado:

C:\Users\Carbon\.conda\envs\duotpu\Lib\site-packages\torch\nn\modules\upsampling.py

Ao usar o conda no Linux, o arquivo está localizado em:

~/anaconda3/envs/duotpu/lib/python3.9/site-packages/torch/nn/modules/upsampling.py

Faça as seguintes alterações na linha 153

duo

Após a modificação ser concluída, execute o arquivo python main.py e o arquivo yolov5n_jit.pt será gerado no diretório yolov5-master. Este arquivo é o arquivo de modelo original necessário.

(duotpu) C:\Users\Carbon\yolov5-master> python main.py

Foi realizado um downgrade em numpy para 1.23.5Se pedir para instalar python mais atual
conda install python=3.x


Sair do ambiente conda (opcional)

Os arquivos de modelo que precisamos foram gerados acima. Você pode usar o comando conda deactivate para sair do ambiente conda:

(duotpu) C:\Users\Carbon\Duo-TPU\yolov5-master> conda deactivate

Se você não precisar mais deste ambiente virtual conda (duotpu), você pode excluí-lo com o seguinte comando:

conda env remove --name <envname>

2. Configurar o ambiente de desenvolvimento Dockerbiente

Consulte aqui . Após configurar o ambiente de desenvolvimento do Docker, retorne aqui para continuar a próxima etapa.

aviso

Se você estiver usando um ambiente de desenvolvimento Docker configurado, certifique-se de seguir o tutorial de configuração do Docker para executar o comando source ./tpu-mlir/envsetup.sh após iniciar o Docker, caso contrário, poderão ocorrer erros nas etapas subsequentes.

3. Prepare o diretório de trabalho no Docker

Crie e entre no diretório de trabalho yolov5n_torch, observe que é um diretório no mesmo nível que tpu-mlir, e coloque os arquivos de modelo e de imagem neste diretório

# mkdir yolov5n_torch && cd yolov5n_torch

Crie um novo terminal do Windows e copie yolov5n_jit.pt do Windows para o Docker


docker cp <path>/yolov5-master/yolov5n_jit.pt <container_name>:/workspace/yolov5n_torch/yolov5n_jit.pt

docker cp yolov5n_jit.pt duotpu:/workspace/yolov5n_torch/yolov5n_jit.pt

<path> é o diretório do arquivo onde o kit de desenvolvimento yolov5 está localizado no sistema Windows e <container_name> é o nome do contêiner, como

docker cp C:\Users\Carbon\Duo-TPU\yolov5-master\yolov5n_jit.pt duotpu:/workspace/yolov5n_torch/yolov5n_jit.pt

Volte para o terminal do Docker e coloque o arquivo de imagem no diretório atual ( yolov5n_torch)

# cp -rf ${TPUC_ROOT}/regression/dataset/COCO2017 .

--- Conteúdo de COCO2017 000000000632.jpg 000000085911.jpg 000000122672.jpg 000000208363.jpg 000000296657.jpg 000000463618.jpg 000000000885.jpg 000000088345.jpg 000000123633.jpg 000000209753.jpg 000000304545.jpg 000000466602.jpg 000000001532.jpg 000000088970.jpg 000000124798.jpg 000000210915.jpg 000000304560.jpg 000000475779.jpg 000000004495.jpg 000000093261.jpg 000000127660.jpg 000000213255.jpg 000000307598.jpg 000000476704.jpg 000000006954.jpg 000000094157.jpg 000000128148.jpg 000000213605.jpg 000000308753.jpg 000000481413.jpg 000000009400.jpg 000000094185.jpg 000000128372.jpg 000000220310.jpg 000000309655.jpg 000000497568.jpg 000000010092.jpg 000000095069.jpg 000000134096.jpg 000000228436.jpg 000000352684.jpg 000000497599.jpg 000000025096.jpg 000000099039.jpg 000000160728.jpg 000000230008.jpg 000000354307.jpg 000000498747.jpg 000000034139.jpg 000000104198.jpg 000000162130.jpg 000000232348.jpg 000000356531.jpg 000000532761.jpg 000000040757.jpg 000000104619.jpg 000000162858.jpg 000000239041.jpg 000000361586.jpg 000000547502.jpg 000000042296.jpg 000000104669.jpg 000000174371.jpg 000000239537.jpg 000000366711.jpg 000000549167.jpg 000000045229.jpg 000000106881.jpg 000000177065.jpg 000000239857.jpg 000000373315.jpg 000000550939.jpg 000000051598.jpg 000000109827.jpg 000000185250.jpg 000000255749.jpg 000000441442.jpg 000000562443.jpg 000000079188.jpg 000000111609.jpg 000000191288.jpg 000000255917.jpg 000000442009.jpg 000000579091.jpg 000000080659.jpg 000000116825.jpg 000000194471.jpg 000000281447.jpg 000000442661.jpg 000000580418.jpg 000000082821.jpg 000000119088.jpg 000000200839.jpg 000000293300.jpg 000000447169.jpg 000000085329.jpg 000000119445.jpg 000000206838.jpg 000000294163.jpg 000000447187.jpg root@a8eb466ff276:/workspace/yolov5n_torch/COCO2017#---
# cp -rf ${TPUC_ROOT}/regression/image .

${TPUC_ROOT}aqui está uma variável de ambiente, correspondente ao diretório tpu-mlir, que é carregada após a execução do comando source ./tpu-mlir/envsetup.sh na etapa da configuração anterior do ambiente de desenvolvimento do Docker.

Crie e insira o diretório work de trabalho para armazenar arquivos compilados, como MLIR cvimodel

# mkdir work && cd work

4. YOLOv5n-TORCH Model conversion
dica

A placa de desenvolvimento Duo é equipada com o chip CV1800B, que suporta a série ONNX e os modelos Caffe . Atualmente, ela não suporta modelos TFLite. Em termos de tipos de dados quantizados, ela suporta quantização no formato BF16 e quantização assimétrica no formato INT8 .

As etapas para conversão do modelo são as seguintes:

  • Converter modelo TORCH para MLIR
  • Gerar tabelas de calibração necessárias para quantificação
  • Quantização MLIR em cvimodel assimétrico INT8

Modelo TORCH convertido para MLIR

Neste exemplo, o modelo é uma entrada RGB, mean  scale são respectivamente 0,0,0 0.00392160.00392160.0039216 . O comando para converter o modelo TORCH para o modelo MLIR é o seguinte:

# model_transform.py \
--model_name yolov5n \
--model_def ../yolov5n_jit.pt \
--input_shapes [[1,3,640,640]] \
--pixel_format "rgb" \
--keep_aspect_ratio \
--mean 0,0,0 \
--scale 0.0039216,0.0039216,0.0039216 \
--test_input ../image/dog.jpg \
--test_result yolov5n_top_outputs.npz \
--output_names 1219,1234,1249 \
--mlir yolov5n.mlir

Exemplo de operação bem-sucedida



duo

Após a conversão para o modelo MLIR, um arquivo yolov5n.mlir  será gerado, que é o arquivo do modelo MLIR. Um arquivo yolov5n_in_f32.npz e um arquivo yolov5n_top_outputs.npz também serão gerados, que são os arquivos de entrada para a conversão subsequente do modelo.


duo

MLIR para INT8

Gerar tabelas de calibração necessárias para quantificação

Antes de converter para o modelo INT8, você precisa gerar uma tabela de calibração. Aqui usamos as 100 imagens existentes do COCO2017 como um exemplo para executar a calibração.

# run_calibration.py yolov5n.mlir \
--dataset ../COCO2017 \
--input_num 100 \
-o ./yolov5n_cali_table



Exemplo de operação bem-sucedida

duo


Após a conclusão da operação, o arquivo yolov5n_cali_table será gerado, o qual será utilizado para posterior compilação do modelo INT8.


duo
MLIR quantizado no cvimodel assimétrico

O comando para converter o modelo MLIR para o modelo INT8 é o seguinte

# model_deploy.py \
--mlir yolov5n.mlir \
--quantize INT8 \
--calibration_table ./yolov5n_cali_table \
--chip cv180x \
--test_input ../image/dog.jpg \
--test_reference yolov5n_top_outputs.npz \
--compare_all \
--tolerance 0.96,0.72 \
--fuse_preprocess \
--debug \
--model yolov5n_int8_fuse.cvimodel





dica

Se a placa de desenvolvimento que você estiver usando não for Duo, substitua a quinta linha -- chip cv180x no comando acima pelo modelo de chip correspondente. Ao usar Duo 256M/Duo S, ele deve ser alterado para -- chip cv181x.

Exemplo de operação bem-sucedida

duo

Após a conclusão da compilação, o arquivo yolov5n_int8_fuse.cvimodel será gerado.

duo

5. Validar no Development Board Duo

Conectando a Milk-V Duo

Conclua a conexão entre a placa de desenvolvimento Duo e o computador de acordo com o tutorial anterior e use ferramentas como mobaxterm ou Xshell ou putty para abrir um terminal para operar a placa de desenvolvimento Duo.

Obter sdk tpu

Mude para o diretório /workspace no terminal do Docker

cd /workspace

Baixe o tpu sdk, se estiver usando o Duo, execute

git clone https://github.com/milkv-duo/tpu-sdk-cv180x.git
mv ./tpu-sdk-cv180x ./tpu-sdk

Caso contrário, se você estiver usando Duo 256M/Duo S, execute

git clone https://github.com/milkv-duo/tpu-sdk-sg200x.git
mv ./tpu-sdk-sg200x ./tpu-sdk


Copie os arquivos tpu-sdk e model para Duo

No terminal da placa Duo, crie um novo diretório/mnt/tpu/

# mkdir -p /mnt/tpu && cd /mnt/tpu


No terminal do Docker, copie tpu-sdk e modele os arquivos para o Duo

# scp -r /workspace/tpu-sdk root@192.168.42.1:/mnt/tpu/

# scp /workspace/yolov5n_torch/work/yolov5n_int8_fuse.cvimodel root@192.168.42.1:/mnt/tpu/tpu-sdk/



Definir variáveis de ambiente

No terminal da placa Duo, defina as variáveis ​​de ambiente

# cd /mnt/tpu/tpu-sdk
# source ./envs_tpu_sdk.sh

Executar detecção

Na placa Duo, execute a detecção de objetos na imagem

duo

No terminal da placa Duo, use o modelo yolov5n_int8_fuse.cvimodel para detecção de objetos

# ./samples/samples_extra/bin/cvi_sample_detector_yolo_v5_fused_preprocess \
./yolov5n_int8_fuse.cvimodel \
./samples/samples_extra/data/dog.jpg \
yolov5n_out.jpg

Exemplo de resultado de detecção bem-sucedido

duo

Após a operação bem-sucedida, o arquivo de resultado da detecção yolov5n_out.jpg será gerado, o qual pode ser obtido no PC por meio do comando scp no terminal do Windows.

scp root@192.168.42.1:/mnt/tpu/tpu-sdk/yolov5n_out.jpg .

duo

Visualizar arquivos de resultados de testes em um PC com Windows

duo

Ref:

Object Detection Based on YOLOv5 | Milk-V (milkv.io)
pip3 downgrade NumPy - Pesquisar (bing.com)
https://blog.csdn.net/qq_41808475/article/details/138133120?sharetype=blogdetail&shareId=138133120&sharerefer=APP&sharesource=2405_87120824&sharefrom=link
CV180-Duo/TPU_SDK/TPU-MLIR_Quick_Start.pdf at main · sophgocommunity/CV180-Duo (github.com)
How to use the TPU(0.2TOPS@INT8) on the Duo - CV1800B(Duo English Forum) - Sophgo
Training Yolo v5 on Custom Dataset for Object Detection | Roboflow Universe & Workspace (youtube.com)
Explicação sobre a detecção de objetos YOLO: Um guia para iniciantes | DataCamp
A Beginner’s Guide to Training a YOLOv5 Object Detection Model | by Prithvi Seshadri | Artificial Intelligence in Plain English
How to Update the Python Version in Anaconda | Delft Stack

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