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
yolov5n.pt
no diretório yolov5-master
para instalar outras dependências.
Gerando o arquivo original Model
Crie um novo arquivo main.py
no diretório yolov5-master
e escreva o seguinte código no arquivo:
(sudo apt-get install nano)
nano main.py
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:
\Lib\site-packages\torch\nn\modules\upsampling.py
Com PS + DOCKER
\\wsl.localhost\docker-desktop\tmp\docker-desktop-root\var\lib\docker\rootfs\overlayfs\6268c9bcdb659814ad487f60c2189a1e267f2c70a156b0cb0f497a0fa4e64f7b\usr\local\lib\python3.10\dist-packages\torch\nn\modules
Após encontrar upsampling.py, editar
Faça as seguintes alterações na linha 153
Após a modificação ser concluída, execute o arquivo python main.py, então
o arquivo yolov5n_jit.pt
será gerado no diretório yolov5-master
. Este arquivo é o arquivo de modelo original necessário.
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
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 ou pelo docker wsl2 e copie yolov5n_jit.pt
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#
--- e também
# 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
e cvimodel
4. Modelo de conversão YOLOv5n-TORCH
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
e scale
são respectivamente 0,0,0
e 0.0039216
, 0.0039216
, 0.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
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.
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.
Exemplo de operação bem-sucedida
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.
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 cv181x \
--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
.
Após a conclusão da compilação, o arquivo yolov5n_int8_fuse.cvimodel
será gerado.
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 teraterm, realterm, 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
Copie os arquivos tpu-sdk e model para Duo
No terminal da placa Duo, crie um novo diretório/mnt/tpu/
No terminal do Docker, copie tpu-sdk
e modele os arquivos para o Duo
Definir variáveis de ambiente
No terminal da placa Duo, defina as variáveis de ambiente
Executar detecção
Na placa Duo, execute a detecção de objetos na imagem
dog.jpg
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
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.xxx.xxx:/mnt/tpu/tpu-sdk/yolov5n_out.jpg .
Visualizar arquivos de resultados de testes em um PC com Windows
Referências
Object Detection Based on YOLOv5 | Milk-V (milkv.io)
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
Train Custom Data - Ultralytics YOLO Docs
https://huggingface.co/Ultralytics/YOLOv8
PS: docker cp best.pt duotpu:/workspace/yolov5-master
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