Conversão de Modelo YOLO11n para reCamera: Guia Completo
Índice
- Introdução
- Compreendendo as Restrições de Hardware
- Pré-requisitos
- Opções de Configuração de Provedor de Nuvem
- Processo de Conversão Passo a Passo
- Problemas Comuns e Solução de Problemas
- Implantação na reCamera
- Perguntas Frequentes
Introdução
Por Que a Conversão de Modelo é Necessária
Os dispositivos da série reCamera são câmeras de IA de borda alimentadas pelo chip Sophgo CV181x, que usa uma Unidade de Processamento Tensorial (TPU) especializada para inferência de aprendizado de máquina. Diferente de CPUs ou GPUs de uso geral, as TPUs exigem que os modelos estejam em um formato específico, otimizado para sua arquitetura.
Principais Motivos para a Conversão:
- Otimização de Hardware: O chip CV181x usa quantização INT8 em vez de FP32, reduzindo o tamanho do modelo em ~75% e aumentando a velocidade de inferência em 4-8x
- Restrições de Memória: Os dispositivos reCamera têm RAM limitada (256MB-512MB), exigindo modelos compactados
- Eficiência Energética: Modelos otimizados para TPU consomem significativamente menos energia do que alternativas em CPU/GPU
- Desempenho em Tempo Real: Dispositivos de borda precisam de tempos de inferência abaixo de 100ms para aplicações práticas
Sobre o Hardware da reCamera
A família reCamera inclui várias variantes, todas construídas em torno do SoC Sophgo CV181x:
- reCamera Default: Modelo básico com sensor de 2MP, conectividade USB-C
- reCamera Microscope: Especializada para imagens em close com lentes intercambiáveis
- reCamera HD POE: Maior resolução com suporte a Power-over-Ethernet
- reCamera Gimbal: Gimbal motorizado com recursos de rastreamento de objetos
Especificações Técnicas:
- Processador: Sophgo CV181x (RISC-V + TPU)
- Desempenho de IA: 0,5 TOPS INT8
- Memória: 256MB DDR3
- Armazenamento: 16MB SPI Flash + microSD
- Formatos Suportados: Modelos CVI (formato proprietário da Sophgo)
O Desafio da Conversão
Modelos YOLO11n são normalmente treinados em PyTorch e exportados para o formato ONNX. No entanto, o chip CV181x da reCamera não pode executar modelos ONNX diretamente. O processo de conversão envolve:
- Tradução da Arquitetura do Modelo: Converter ONNX para MLIR (Multi-Level Intermediate Representation)
- Quantização: Converter pesos FP32 para INT8 mantendo a precisão
- Otimização para Hardware: Adaptar operações de camadas para aceleração em TPU
- Conversão de Formato: Criar o formato final de modelo CVI
Compreendendo as Restrições de Hardware
Limitações de Memória
- Limite de Tamanho do Modelo: Tipicamente 8-16MB para implantação prática
- Resolução de Entrada: Geralmente 640x640 para YOLO11n para equilibrar precisão e desempenho
- Tamanho de Lote (Batch Size): Limitado a 1 devido às restrições de memória
Restrições de Processamento
- Operações Suportadas: Nem todas as operações ONNX têm equivalentes em TPU
- Perda de Precisão: A quantização INT8 pode reduzir a precisão em 1-3%
- Velocidade de Inferência: A meta é 10-30 FPS dependendo da complexidade do modelo
Por Que Frameworks de ML Padrão Não Funcionam
- TensorFlow/PyTorch: Projetados para CPUs x86/ARM e GPUs NVIDIA
- ONNX Runtime: Não possui suporte de backend para CV181x
- TensorRT: Específico da NVIDIA, incompatível com hardware Sophgo
Pré-requisitos
Conhecimentos Necessários
- Operações básicas de linha de comando em Linux
- Entendimento de contêineres Docker
- Familiaridade com a arquitetura de modelos YOLO
- Conceitos básicos de redes para implantação em nuvem
Softwares Necessários
- Docker Desktop (para desenvolvimento local)
- Cliente SSH (Terminal no macOS, PuTTY no Windows)
- Navegador web para gerenciamento do provedor de nuvem
- Editor de texto para arquivos de configuração
Arquivos Necessários
- Modelo YOLO11n treinado em formato ONNX
- 100 imagens de calibração (representativas do seu conjunto de dados)
- 1 imagem de teste para validação
Opções de Configuração de Provedor de Nuvem
Como o processo de conversão requer Linux e toolchains específicos, provedores de nuvem oferecem o ambiente mais confiável. Aqui estão guias de configuração para os principais provedores:
Opção 1: DigitalOcean (Recomendado para Iniciantes)
Vantagens: Interface simples, preços previsíveis, boa documentação
Etapas de Configuração:
-
Crie uma conta DigitalOcean em digitalocean.com
-
Crie um novo Droplet com estas especificações:
- Imagem: Ubuntu 22.04 LTS
- Plano: Básico, 4GB RAM, 2 vCPUs (US$ 24/mês, pode ser excluído após o uso)
- Região: Escolha a mais próxima da sua localização
- Autenticação: Chave SSH (recomendado) ou Senha
-
Conexão SSH:
ssh root@your_droplet_ip -
Instalar Dependências:
apt update && apt upgrade -y
apt install -y docker.io git wget
systemctl start docker
systemctl enable docker
Custo Estimado: US$ 0,50-2,00 para o processo de conversão (se excluído imediatamente após)
Opção 2: AWS EC2
Vantagens: Plataforma de nuvem mais abrangente, nível gratuito disponível
Etapas de Configuração:
-
Crie uma conta AWS em aws.amazon.com
-
Inicie uma instância EC2:
- AMI: Ubuntu Server 22.04 LTS
- Tipo de Instância: t3.medium (2 vCPU, 4GB RAM)
- Security Group: Permitir SSH (porta 22) a partir do seu IP
-
Conexão SSH:
ssh -i your-key.pem ubuntu@your-instance-ip -
Instalar Dependências:
sudo apt update && sudo apt upgrade -y
sudo apt install -y docker.io git wget
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker ubuntu
Custo Estimado: US$ 0,10-0,50 para o processo de conversão (preços t3.medium)
Opção 3: Google Cloud Platform
Vantagens: Créditos gratuitos de US$ 300 para novos usuários, excelente desempenho
Etapas de Configuração:
-
Crie uma conta GCP em cloud.google.com
-
Crie uma instância Compute Engine:
- Tipo de Máquina: e2-standard-2 (2 vCPU, 8GB RAM)
- Disco de Inicialização: Ubuntu 22.04 LTS, 20GB
- Firewall: Permitir tráfego HTTP/HTTPS
-
SSH via Navegador (terminal integrado) ou use o gcloud CLI
-
Instalar Dependências:
sudo apt update && sudo apt upgrade -y
sudo apt install -y docker.io git wget
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USER
Custo Estimado: Gratuito com créditos, caso contrário ~US$ 0,20-0,60 para conversão
Opção 4: Microsoft Azure
Vantagens: Boa integração com o ecossistema Windows, descontos para estudantes
Etapas de Configuração:
-
Crie uma conta Azure em azure.microsoft.com
-
Crie uma Máquina Virtual:
- Imagem: Ubuntu Server 22.04 LTS
- Tamanho: Standard_B2s (2 vCPUs, 4GB RAM)
- Autenticação: Chave pública SSH
-
Conexão SSH:
ssh azureuser@your-vm-ip -
Instalar Dependências:
sudo apt update && sudo apt upgrade -y
sudo apt install -y docker.io git wget
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker azureuser
Custo Estimado: ~US$ 0,30-0,80 para o processo de conversão
Opção 5: Alibaba Cloud
Vantagens: Forte presença na Ásia, preços competitivos
Etapas de Configuração:
-
Crie uma conta em alibabacloud.com
-
Crie uma instância ECS:
- Imagem: Ubuntu 22.04 64-bit
- Tipo de Instância: ecs.t6-c1m2.large (2 vCPU, 4GB RAM)
- Security Group: Permitir SSH (22/22)
-
Conexão SSH:
ssh root@your-ecs-ip -
Instalar Dependências:
apt update && apt upgrade -y
apt install -y docker.io git wget
systemctl start docker
systemctl enable docker
Custo Estimado: ~US$ 0,20-0,50 para o processo de conversão
Opção 6: Tencent Cloud
Vantagens: Bom para usuários na China, preços acessíveis
Etapas de Configuração:
-
Crie uma conta em intl.cloud.tencent.com
-
Crie uma instância CVM:
- Imagem: Ubuntu Server 22.04 LTS 64-bit
- Modelo: S5.MEDIUM4 (2 vCPU, 4GB RAM)
- Security Group: Permitir SSH (porta 22)
-
Conexão SSH:
ssh ubuntu@your-cvm-ip -
Instalar Dependências:
sudo apt update && sudo apt upgrade -y
sudo apt install -y docker.io git wget
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker ubuntu
Custo Estimado: ~US$ 0,15-0,40 para o processo de conversão
Processo de Conversão Passo a Passo
Passo 1: Prepare Seu Ambiente
-
Conecte-se à sua instância na nuvem via SSH
-
Configure o ambiente TPU-MLIR:
# Pull the official TPU-MLIR Docker image
docker pull sophgo/tpuc_dev:v3.1
# Create working directory
mkdir ~/yolo_conversion && cd ~/yolo_conversion
# Start Docker container
docker run --privileged --name tpu_converter -v $PWD:/workspace -it sophgo/tpuc_dev:v3.1 -
Instale as ferramentas TPU-MLIR dentro do contêiner:
pip install tpu_mlir[all]==1.7
# Clone and build TPU-MLIR
git clone -b v1.7 --depth 1 https://github.com/sophgo/tpu-mlir.git
cd tpu-mlir
source ./envsetup.sh
./build.sh
Passo 2: Envie Seus Arquivos de Modelo
A partir da sua máquina local, envie arquivos para a instância na nuvem:
# Upload ONNX model
scp your_model.onnx user@your-cloud-ip:~/yolo_conversion/
# Upload calibration images (create zip first)
zip -r calibration_images.zip /path/to/calibration/images/
scp calibration_images.zip user@your-cloud-ip:~/yolo_conversion/
# Upload test image
scp test_image.jpg user@your-cloud-ip:~/yolo_conversion/
Passo 3: Prepare a Estrutura de Diretórios
Dentro da sua instância na nuvem:
# Create required directory structure
mkdir -p model_yolo11n/{COCO2017,image,Workspace}
# Extract and organize files
unzip calibration_images.zip
mv calibration_images/* model_yolo11n/COCO2017/
mv test_image.jpg model_yolo11n/image/test.jpg
mv your_model.onnx model_yolo11n/Workspace/yolo11n.onnx
# Rename calibration images to expected format
cd model_yolo11n/COCO2017/
count=1
for file in *.jpg *.png *.jpeg; do
if [ -f "$file" ]; then
mv "$file" "Calibration${count}.jpg"
((count++))
if [ $count -gt 100 ]; then break; fi
fi
done
cd ../..
Passo 4: Entrar no contêiner Docker e iniciar a conversão
# Copy model folder into Docker container
docker cp model_yolo11n tpu_converter:/workspace/tpu-mlir/
# Enter Docker container
docker exec -it tpu_converter /bin/bash
# Navigate to workspace
cd /workspace/tpu-mlir/model_yolo11n/Workspace
Passo 5: Pipeline de conversão do modelo
5.1: Downgrade da versão ONNX
python /workspace/tpu-mlir/downgrade_onnx.py yolo11n.onnx yolo11n_v8.onnx
5.2: Converter ONNX para MLIR
model_transform \
--model_name yolo11n \
--model_def yolo11n_v8.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 \
--output_names "/model.23/cv2.0/cv2.0.2/Conv_output_0,/model.23/cv3.0/cv3.0.2/Conv_output_0,/model.23/cv2.1/cv2.1.2/Conv_output_0,/model.23/cv3.1/cv3.1.2/Conv_output_0,/model.23/cv2.2/cv2.2.2/Conv_output_0,/model.23/cv3.2/cv3.2.2/Conv_output_0" \
--test_input ../image/test.jpg \
--test_result yolo11n_top_outputs.npz \
--mlir yolo11n.mlir
Explicações dos parâmetros:
-
--model_name: Identificador para o seu modelo no pipeline de conversão- Finalidade: Cria nomenclatura consistente ao longo de todo o processo
- Pode ser alterado: Sim, use nomes descritivos como "traffic_detection" ou "person_counter"
- Efeito: Apenas afeta a nomenclatura interna, sem impacto no desempenho
-
--model_def: Caminho para o arquivo de modelo ONNX- Finalidade: Especifica qual modelo será convertido
- Pode ser alterado: Sim, deve corresponder ao nome real do seu arquivo ONNX
- Efeito: Modelos diferentes produzirão resultados diferentes
-
--input_shapes: Define as dimensões do tensor de entrada[batch, channels, height, width]- Finalidade: Informa ao conversor o formato esperado da imagem de entrada
- Valor padrão:
[[1,3,640,640]]para YOLO11n - Pode ser alterado: ⚠️ Atenção - Deve corresponder à resolução usada no treinamento
- Efeitos das alterações:
- Menor (por exemplo,
320x320): Inferência mais rápida, menor acurácia - Maior (por exemplo,
1280x1280): Maior acurácia, muito mais lento, pode exceder os limites de memória - Proporção diferente: Vai distorcer as imagens, resultando em desempenho ruim
- Menor (por exemplo,
-
--mean: Valores de média de normalização de pixel para os canais RGB- Finalidade: Centraliza os valores de pixel em torno de zero (pré-processamento padrão)
- Valor padrão:
"0.0,0.0,0.0"(sem subtração de média) - Pode ser alterado: Somente se o seu modelo tiver sido treinado com normalização diferente
- Alternativas comuns:
- ImageNet:
"123.675,116.28,103.53"(se o modelo usar pré-processamento ImageNet) - Personalizado: Combine exatamente com o pré-processamento usado no treinamento
- ImageNet:
-
--scale: Fatores de escala para normalização de pixel- Finalidade: Escala os valores de pixel do intervalo 0-255 para 0-1
- Valor padrão:
"0.0039216,0.0039216,0.0039216"(equivalente a 1/255) - Pode ser alterado: Somente se o seu modelo esperar intervalo de entrada diferente
- Efeitos das alterações:
- Valores de escala errados causarão falha completa do modelo
- Deve corresponder exatamente ao que foi usado no treinamento do modelo
-
--keep_aspect_ratio: Mantém as proporções da imagem durante o redimensionamento- Finalidade: Evita distorção da imagem, usando padding em vez de esticar
- Pode ser alterado: Sim, use
--no_keep_aspect_ratiopara desativar - Efeitos:
- Ativado (padrão): Melhor acurácia, padding preto nas imagens
- Desativado: Um pouco mais rápido, mas as imagens podem ser distorcidas
-
--pixel_format: Ordem dos canais de cor- Finalidade: Especifica se a entrada usa ordem de cor RGB ou BGR
- Valor padrão:
rgbpara a maioria dos modelos modernos - Pode ser alterado: Sim, para
bgrse o seu modelo esperar isso - Efeitos da configuração errada: As cores serão invertidas (vermelho aparece azul, etc.)
-
--output_names: Especifica quais camadas do modelo usar como saídas- Finalidade: Informa ao conversor quais camadas contêm os resultados de detecção
- Padrão para YOLO11n: As 6 camadas de saída exibidas (3 escalas × 2 cabeças cada)
- Pode ser alterado: ⚠️ Apenas para usuários avançados - requer conhecimento profundo do modelo
- Efeitos: Saídas erradas impedirão o funcionamento da detecção
-
--test_input: Caminho para a imagem de validação- Finalidade: Testa a acurácia da conversão comparando resultados antes/depois
- Pode ser alterado: Sim, use qualquer imagem representativa do seu conjunto de dados
- Recomendado: Usar imagem semelhante ao cenário de implantação
-
--test_result: Arquivo de saída para dados de validação- Finalidade: Armazena resultados de referência para comparação posterior
- Pode ser alterado: Sim, qualquer nome de arquivo terminando em
.npz - Efeito: Apenas afeta o nome do arquivo
-
--mlir: Nome do arquivo MLIR de saída- Finalidade: Representação intermediária para a próxima etapa de conversão
- Pode ser alterado: Sim, mas mantenha a extensão
.mlir - Efeito: Apenas afeta o nome do arquivo
5.3: Gerar tabela de calibração
run_calibration \
yolo11n.mlir \
--dataset ../COCO2017 \
--input_num 100 \
-o yolo11n_calib_table
Explicações dos parâmetros:
-
yolo11n.mlir: Modelo MLIR de entrada da etapa anterior- Finalidade: O arquivo de modelo que precisa de dados de calibração
- Pode ser alterado: Deve corresponder ao nome do arquivo de saída da etapa 5.2
- Efeito: Modelos diferentes produzirão tabelas de calibração diferentes
-
--dataset: Caminho para o diretório de imagens de calibração- Finalidade: Fornece imagens representativas para analisar faixas de ativação
- Pode ser alterado: Sim, mas deve conter imagens semelhantes ao cenário de implantação
- Requisitos: As imagens devem estar em formato
.jpg,.pngou.bmp - Impacto na qualidade: Imagens mais diversas e representativas = melhor calibração
-
--input_num: Número de imagens de calibração a serem usadas- Finalidade: Determina quantas imagens são processadas para análise estatística
- Valor padrão:
100(bom equilíbrio entre acurácia e tempo de processamento) - Pode ser alterado: Sim, dentro de limites práticos
- Efeitos das alterações:
- Menos imagens (25-50): Calibração mais rápida, quantização potencialmente menos precisa
- Mais imagens (200-500): Melhor acurácia de calibração, tempo de processamento muito maior
- Poucas demais (<10): Quantização ruim, perda significativa de acurácia
- Muitas demais (>1000): Ganhos decrescentes, tempo de processamento muito longo
-
-o(arquivo de saída): Nome do arquivo da tabela de calibração- Finalidade: Armazena dados estatísticos sobre as ativações das camadas para quantização
- Pode ser alterado: Sim, qualquer nome de arquivo (não é necessário extensão)
- Efeito: Apenas afeta o nome do arquivo, o conteúdo é o mesmo
O que acontece durante a calibração:
- Análise estatística: Cada imagem de calibração é processada pelo modelo
- Mapeamento de ativações: A ferramenta registra a faixa de valores produzidos por cada camada
- Planejamento da quantização: Determina como mapear valores FP32 para INT8 de forma eficiente
- Preservação da acurácia: Encontra fatores de escala ideais para minimizar a perda de precisão
Saída esperada: Esse processo levará de 5 a 15 minutos e deverá mostrar um progresso como:
input_num = 100, ref = 100
real input_num = 100
activation_collect_and_calc_th for op: /model.23/cv3.2/cv3.2.2/Conv_output_0_Conv
[Progress bar showing completion]
auto tune end, run time: XXX seconds
5.4: Compilar o modelo INT8 final
model_deploy \
--mlir yolo11n.mlir \
--quantize INT8 \
--quant_input \
--processor cv181x \
--calibration_table yolo11n_calib_table \
--test_input ../image/test.jpg \
--test_reference yolo11n_top_outputs.npz \
--customization_format RGB_PACKED \
--fuse_preprocess \
--aligned_input \
--model yolo11n_sym_int8.cvimodel
Explicações dos parâmetros:
-
--mlir: Arquivo de modelo MLIR de entrada- Finalidade: A representação do modelo a ser compilada para o TPU
- Pode ser alterado: Deve corresponder à saída da etapa 5.2
- Efeito: Arquivos MLIR diferentes produzirão modelos finais diferentes
-
--quantize: Nível de precisão da quantização- Finalidade: Determina a precisão numérica para pesos e ativações do modelo
- Valor padrão:
INT8para reCamera (obrigatório para o TPU CV181x) - Pode ser alterado: Opções limitadas no CV181x
- Opções disponíveis:
INT8: Obrigatório para reCamera, 4x menor, 4-8x mais rápidoF16: Maior precisão, tamanho maior, pode não caber na memóriaF32: Precisão original, grande demais para implantação na reCamera
-
--quant_input: Quantiza o pré-processamento de entrada- Finalidade: Move a escala/normalização da entrada para o TPU para maior eficiência
- Pode ser alterado: Sim, omita esta flag para manter o processamento de entrada na CPU
- Efeitos:
- Ativado (recomendado): Inferência mais rápida, melhor utilização do TPU
- Desativado: Um pouco mais lento, mas formatos de entrada mais flexíveis
-
--processor: Especificação do hardware alvo- Finalidade: Otimiza a geração de código para a arquitetura específica do chip
- Valor padrão:
cv181xpara todos os modelos reCamera - Pode ser alterado: ⚠️ Nunca altere - outros valores não funcionarão na reCamera
- Efeito: Configuração incorreta de processador causará falha na implantação
-
--calibration_table: Dados de referência de quantização- Finalidade: Fornece dados estatísticos para conversão INT8 ideal
- Pode ser alterado: Deve corresponder ao nome de arquivo de saída da etapa 5.3
- Efeito: Dados de calibração diferentes afetam a acurácia do modelo
-
--test_input: Imagem de validação para teste de acurácia- Finalidade: Verifica a acurácia do modelo após a quantização
- Pode ser alterado: Sim, deve representar um caso de uso típico
- Recomendação: Use a mesma imagem da etapa 5.2 para consistência
-
--test_reference: Saída de referência para comparação- Finalidade: Compara a saída do modelo quantizado com os resultados FP32 originais
- Pode ser alterado: Deve corresponder ao nome do arquivo de saída da etapa 5.2
- Efeito: Usado apenas para validação, não afeta o modelo final
-
--customization_format: Otimização do layout dos dados de entrada- Finalidade: Otimiza o layout de memória para processamento no TPU
- Valor padrão:
RGB_PACKEDpara dados de imagem - Pode ser alterado: Apenas para usuários avançados
- Efeitos:
RGB_PACKED: Otimizado para imagens RGB (recomendado)NCHW: Formato padrão de tensor, pode ser mais lento
-
--fuse_preprocess: Integra o pré-processamento ao modelo- Purpose: Combina redimensionamento/normalização de imagem com a inferência
- Can be changed: Sim, omita a flag para lidar com o pré-processamento separadamente
- Effects:
- Enabled (recomendado): Implantação em uma única etapa, melhor desempenho
- Disabled: Mais flexibilidade, mas requer pré-processamento externo
-
--aligned_input: Otimização de alinhamento de memória- Purpose: Garante padrões ótimos de acesso à memória para o TPU
- Can be changed: Sim, mas é recomendado manter para melhor desempenho
- Effects:
- Enabled: Melhor utilização da largura de banda de memória
- Disabled: Pode ser ligeiramente mais lento
-
--model: Nome de arquivo de saída para o modelo final convertido- Purpose: Cria o arquivo
.cvimodelpara implantação na reCamera - Can be changed: Sim, use nomes descritivos como
person_detection.cvimodel - Requirement: Deve terminar com a extensão
.cvimodel - Effect: Afeta apenas o nome do arquivo
- Purpose: Cria o arquivo
O que acontece durante a compilação:
- Conversão de camadas: Cada camada da rede neural é convertida em instruções para o TPU
- Otimização de memória: Os pesos do modelo são organizados para acesso eficiente pelo TPU
- Aplicação de quantização: Pesos FP32 são convertidos para INT8 usando dados de calibração
- Mapeamento de hardware: As operações são mapeadas para unidades funcionais específicas do TPU
- Validação: O modelo final é testado em comparação com as saídas de referência
Saída esperada: A conversão deve ser concluída com resultados de validação mostrando pontuações de similaridade >99%:
npz compare PASSED
230 compared
230 passed
min_similarity = (0.9999997615814209, 0.9999984392787142, 116.13544464111328)
Expectativas de desempenho após a conversão:
- Tamanho do modelo: 3-8MB (comparado a 20-40MB do ONNX original)
- Velocidade de inferência: 15-30 FPS na reCamera
- Acurácia: 97-99% do desempenho do modelo original
- Uso de memória: ~10-20MB de RAM durante a inferência
Etapa 6: Fazer download do modelo convertido
6.1: Sair do Docker e copiar o arquivo para o host
# Exit Docker container
exit
# Copy converted model from container to host
docker cp tpu_converter:/workspace/tpu-mlir/model_yolo11n/Workspace/yolo11n_sym_int8.cvimodel ./
# Verify file exists and check size (should be 2-10MB)
ls -lh yolo11n_sym_int8.cvimodel
6.2: Fazer download para sua máquina local
# From your local machine
scp user@your-cloud-ip:~/yolo_conversion/yolo11n_sym_int8.cvimodel ~/Downloads/
Etapa 7: Limpar recursos em nuvem
Não se esqueça de encerrar sua instância em nuvem para evitar cobranças contínuas!
- DigitalOcean: Destruir o Droplet no painel de controle
- AWS: Encerrar a instância EC2
- GCP: Excluir a instância do Compute Engine
- Azure: Excluir a Máquina Virtual
- Alibaba/Tencent: Liberar a instância ECS/CVM
Problemas comuns e solução de problemas
Problema 1: Erros "File not found" durante a conversão
Sintomas:
../image/test.jpg doesn't existed !!!
Solução:
# Check if file exists and has correct extension
ls -la ../image/
# If file has .img extension, rename it
mv ../image/test.img ../image/test.jpg
Problema 2: "Directory not empty" ao mover arquivos
Sintomas:
mv: cannot move 'Download/model_yolo11n' to 'tpu-mlir/model_yolo11n': Directory not empty
Solução:
# Remove existing directory and replace
rm -rf tpu-mlir/model_yolo11n
mv Download/model_yolo11n tpu-mlir/
Problema 3: Falha na calibração com "There is no inputs"
Sintomas:
RuntimeError: There is no inputs
Solução:
# Ensure calibration images are in correct format (.jpg, .png)
cd ../COCO2017/
for file in *.img; do
mv "$file" "${file%.img}.jpg"
done
Problema 4: Erros de permissão do Docker
Sintomas:
permission denied while trying to connect to the Docker daemon socket
Solução:
# Add user to docker group
sudo usermod -aG docker $USER
# Log out and log back in, or run:
newgrp docker
Problema 5: Erros de falta de memória
Sintomas:
CUDA out of memory
Solução:
- Fazer upgrade para uma instância em nuvem maior (8GB+ de RAM)
- Reduzir o tamanho do batch nos comandos de conversão
- Usar menos imagens de calibração (mínimo 50)
Problema 6: Falha na validação do modelo
Sintomas:
npz compare FAILED
Solução:
- Verificar se a imagem de teste é representativa dos dados de treinamento
- Verificar se o modelo ONNX é a versão correta
- Tentar uma imagem de teste diferente
Problema 7: Problemas de conexão SSH
Sintomas:
Connection refused
ssh: connect to host [IP] port 22: Connection refused
Solução:
- Verificar se os grupos de segurança do provedor de nuvem permitem SSH (porta 22)
- Verificar se a instância está em execução
- Tentar uma chave SSH diferente ou autenticação por senha
Implantação na reCamera
Etapa 1: Conectar a reCamera
- Conecte a reCamera ao seu computador via cabo USB-C
- Acesse a interface web em
http://192.168.42.1 - Faça login com usuário:
root, senha:recamera.1
Etapa 2: Fazer upload do modelo
- Navegue até a seção Workspace
- Clique no nó do modelo no editor de fluxo
- Clique no botão "Upload"
- Selecione seu arquivo
.cvimodel - Configure os parâmetros do modelo:
- Model Name:
yolo11n_detection - Classes: Insira os nomes das suas classes (separados por vírgula)
- Confidence Threshold: 0.5 (ajuste conforme necessário)
- IoU Threshold: 0.45
- Model Name:
Etapa 3: Implantar e testar
- Clique no botão "Deploy"
- Aguarde a mensagem "Successfully deployed"
- Navegue até o Dashboard para visualização em tempo real
- Ajuste os
Perguntas Frequentes
P: Quanto tempo leva o processo de conversão?
R: Normalmente entre 20 e 45 minutos, dependendo da complexidade do modelo e do desempenho da instância na nuvem. A etapa de calibração geralmente é a mais demorada.
P: Posso usar uma versão diferente do YOLO?
R: Este guia é específico para YOLO11n. Outras versões (YOLOv8, YOLOv9) exigem nomes diferentes para as camadas de saída e podem apresentar problemas de compatibilidade.
P: E se a precisão do meu modelo cair significativamente após a conversão?
R: Uma pequena perda de precisão (1–3%) é normal devido à quantização INT8. Se a perda for superior a 5%, tente:
- Usar imagens de calibração mais representativas
- Aumentar o número de imagens de calibração para 200–500
- Ajustar os limiares de confiança durante a implantação
P: Posso converter modelos treinados em datasets personalizados?
R: Sim, mas certifique-se de que suas imagens de calibração sejam representativas do seu dataset personalizado. As 100 imagens de calibração devem cobrir a variedade de cenários que seu modelo encontrará.
P: Qual é o tamanho máximo de modelo suportado?
R: As limitações de memória do reCamera restringem o tamanho prático do modelo para aproximadamente 8–16MB. O YOLO11n normalmente gera modelos entre 3–8MB após a conversão.
P: Preciso manter a instância na nuvem em execução?
R: Não. Você pode encerrar a instância imediatamente após baixar o modelo convertido. A conversão é um processo único.
P: Posso converter vários modelos em lote?
R: Sim. Você pode manter o mesmo ambiente e converter vários modelos repetindo os passos 5–6 com arquivos de modelo diferentes.
P: E se eu encontrar um erro que não está coberto aqui?
R:
- Verifique os logs do container Docker:
docker logs tpu_converter - Confirme se o seu modelo ONNX carrega corretamente em um ambiente Python primeiro
- Tente usar um modelo de teste mais simples para isolar o problema
- Entre em contato com o suporte da Seeed Studio com as mensagens de erro específicas
P: Existem alternativas ao uso de nuvem?
R: Sim, você pode:
- Usar Docker Desktop localmente no Mac/Windows (requer bastante RAM)
- Configurar WSL2 no Windows com Docker
- Usar uma máquina Linux local ou uma VM
No entanto, a implantação em nuvem é recomendada por oferecer melhor confiabilidade e desempenho.
Conclusão
Converter modelos YOLO11n para implantação no reCamera exige entender tanto as limitações do hardware quanto o toolchain TPU-MLIR. Embora o processo tenha várias etapas, seguir este guia deve resultar em um modelo convertido com sucesso e pronto para implantação em Edge AI.
A chave para o sucesso é:
- Preparação: ter todos os arquivos no formato e estrutura corretos
- Ambiente: usar um ambiente Linux configurado corretamente (nuvem recomendada)
- Paciência: permitir tempo suficiente para as etapas de calibração e conversão
- Validação: testar seu modelo convertido cuidadosamente antes da implantação
Para suporte adicional, consulte o SeeedStudio ReCamera wiki ou a documentação do TPU-MLIR.
Suporte Técnico & Discussão do Produto
Obrigado por escolher nossos produtos! Estamos aqui para oferecer diferentes formas de suporte para garantir que sua experiência com nossos produtos seja a melhor possível. Disponibilizamos vários canais de comunicação para atender diferentes preferências e necessidades.