Estrutura de detecção de objetos Darknet e YOLO
Darknet é uma estrutura de rede neural de código aberto escrita principalmente em C e C++, com algum código CUDA para aceleração de GPU. É conhecido por sua velocidade e eficiência, o que o torna uma escolha popular para aplicações de detecção de objetos em tempo real.
YOLO (You Only Look Once) é um poderoso sistema de detecção de objetos em tempo real projetado para ser executado na estrutura Darknet. Ele se destaca em velocidade e precisão, superando consistentemente outros sistemas de detecção de objetos em benchmarks.
Mergulhe mais fundo no mundo Darknet/YOLO:
Contribuições de Hank.ai: Descubra como Hank.ai está apoiando ativamente a comunidade Darknet/YOLO.
Site oficial: Explore o site oficial da Darknet/YOLO para obter informações completas.
Perguntas frequentes: Encontre respostas para perguntas comuns sobre Darknet/YOLO.
Servidor Discord: Junte-se à vibrante comunidade Darknet/YOLO Discord para discussões e assistência.
Artigos
A evolução do YOLO está documentada em vários artigos de pesquisa:
1. YOLOv7: Expandindo os limites do aprendizado profundo para detecção de objetos
2. Scaled-YOLOv4: Ampliando o YOLOv4 para aplicações industriais
3. YOLOv4: Velocidade e precisão ideais de detecção de objetos
4. YOLOv3: uma melhoria incremental
Informações gerais
A estrutura Darknet/YOLO continua na vanguarda da detecção de objetos, apresentando velocidade e precisão. Esta estrutura é totalmente gratuita e de código aberto, permitindo que os desenvolvedores a incorporem perfeitamente em seus projetos, sem quaisquer restrições de licenciamento ou taxas.
Darknet V3, codinome “Jazz”, lançado em outubro de 2024, alcança desempenho notável com uma GPU NVIDIA RTX 3090. Ele pode processar vídeos do conjunto de dados LEGO em até 1000 FPS, o que significa que cada quadro é analisado em apenas 1 milissegundo ou menos.
Fique conectado:
Discord: Junte-se ao servidor Darknet/YOLO Discord para suporte e discussões: https://discord.gg/zSq8rtW.
Darknet/YOLO é adaptável e funciona em várias plataformas, desde Raspberry Pi e servidores em nuvem até desktops e sistemas de treinamento de última geração. Embora a versão CPU opere em uma ampla variedade de dispositivos, a versão GPU requer uma GPU compatível com CUDA da NVIDIA.
Versão Darknet
A estrutura Darknet evoluiu significativamente desde o seu início, com várias versões principais:
1. Versão 0.x: Esta versão original, desenvolvida por Joseph Redmon entre 2013-2017, não possuía um número de versão específico.
2. Versão 1.x: Mantida por Alexey Bochkovskiy de 2017-2021, esta versão também não tinha número de versão.
3. Versão 2.x "OAK": Patrocinada por Hank.ai e mantida por Stéphane Charette a partir de 2023, marcou a primeira versão com um comando de versão. Esta versão funcionou até o final de 2024.
4. Versão 3.x "JAZZ": A versão mais recente, lançada em outubro de 2024, apresenta melhorias significativas e uma nova API.
Construindo Darknet
Construir Darknet requer um compilador C++17 ou mais recente, OpenCV e o sistema de compilação CMake. Embora o processo possa parecer complexo, você não precisa ser um especialista em C++ para construir, instalar e executar Darknet/YOLO.
Opções de construção:
1. Google Colab: As instruções do Google Colab são idênticas às instruções do Linux.
2. Método Linux CMake: Este método fornece um guia detalhado para usuários Linux.
3. Método Windows CMake: Siga estas instruções para construir Darknet no Windows.
Observação: se você estiver usando tutoriais antigos, as etapas de criação poderão ser diferentes da abordagem nova e unificada descrita abaixo.
Desenvolvedores de software: Visite https://darknetcv.ai/ para obter informações sobre o funcionamento interno da estrutura de detecção de objetos Darknet/YOLO.
Google Colab
As instruções do Google Colab refletem de perto o método Linux CMake. Existem vários notebooks Jupyter no subdiretório colab que demonstram tarefas específicas, como treinar uma nova rede.
Método Linux CMake
Siga estas instruções para construir Darknet no Linux:
1. Pré-requisitos: Instale as ferramentas necessárias:
`bash
sudo apt-get install build-essential git libopencv-dev cmake
`
2. Clone Darknet: Baixe o repositório Darknet:
`bash
mkdir ~/srccd ~/src
clone do git https://github.com/hank-ai/darknet
cd rede escura
`
3. Criar diretório de construção: Crie um diretório para o processo de construção:
`bash
compilação mkdir
compilação de CD
`
4. Configure com CMake: Gere os arquivos de construção:
`bash
cmake -DCMAKEBUILDTYPE=Liberar ..
`
5. Construir Darknet: Construa os executáveis Darknet:
`bash
faça -j4
`
6. Pacote para instalação: Crie um pacote DEB para fácil instalação (opcional):
`bash
fazer pacote
sudo dpkg -i darknet-VERSION.deb
`
7. CUDA/cuDNN (opcional): Para aceleração de GPU, instale CUDA ou CUDA+cuDNN:
* CUDA: https://developer.nvidia.com/cuda-downloads
* cuDNN: https://developer.nvidia.com/rdp/cudnn-download
8. Verifique a instalação: Após a instalação, verifique a versão Darknet:
`bash
versão darknet
`
Método CMake do Windows
Estas instruções são para construir Darknet em uma instalação limpa do Windows 11 22H2.
1. Pré-requisitos de instalação:
`bash
winget instalar Git.Git winget instalar Kitware.CMake winget instalar nsis.nsis winget instalar Microsoft.VisualStudio.2022.Community
`
2. Suporte ao Visual Studio C++:
* Abra o instalador do Visual Studio e selecione Modificar.
* Habilite o desenvolvimento de desktop com C++ e clique em Modificar.
3. Prompt de comando do desenvolvedor para VS 2022: Abra o prompt de comando do desenvolvedor para VS 2022.
4. Instale o Microsoft VCPKG:
`bash
CDC:
mkdir c:src
cd c:src
clone do git https://github.com/microsoft/vcpkg
CD vcpkg
bootstrap-vcpkg.bat
.vcpkg.exe integrar instalação
.vcpkg.exe integrar powershell
.vcpkg.exe instalar opencv[contrib,dnn,freetype,jpeg,openmp,png,webp,world]:x64-windows
`
5. CUDA/cuDNN (opcional): Para aceleração de GPU, instale CUDA ou CUDA+cuDNN:
* CUDA: https://developer.nvidia.com/cuda-downloads
* cuDNN: https://developer.nvidia.com/rdp/cudnn-download
6. Clonar Darknet:
`bash
cd c:src
clone do git https://github.com/hank-ai/darknet.git
cd rede escura
compilação mkdir
compilação de CD
`
7. Configure com CMake:
`bash
cmake -DCMAKEBUILDTYPE=Liberar -DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
`
8. Construa Darknet com MSBuild:
`bash
msbuild.exe /property:Platform=x64;Configuration=Release /target:Build -maxCpuCount -verbosity:normal -detailedSummary darknet.sln
msbuild.exe /property:Platform=x64;Configuration=Liberar PACKAGE.vcxproj
`
9. Verifique a instalação: Execute o executável Darknet e verifique a versão:
`bash
C:srcdarknetbuildsrc-cliReleasedarknet.exe versão
`
10. Instale o pacote NSIS: Execute o arquivo darknet-VERSION.exe no diretório de construção para instalar Darknet, bibliotecas, arquivos de inclusão e DLLs.
Usando Darknet
Darknet oferece uma interface de linha de comando (CLI) para interagir com o framework.
Nota: Além da CLI Darknet, o projeto DarkHelp fornece uma CLI alternativa com recursos aprimorados. Você pode usar o Darknet CLI e o DarkHelp CLI juntos.
Comandos CLI Darknet comuns:
Ajuda: Liste os comandos disponíveis:
`bash
ajuda darknet
`
Versão: Verifique a versão Darknet:
`bash
versão darknet
`
Predição (Imagem): Execute a detecção de objetos em uma imagem:
`bash
# Versão 2
teste de detector darknet cars.data cars.cfg cars_best.weights image1.jpg
# Versão 3
darknet02displayannotatedimages cars.cfg image1.jpg
# DarkHelp
DarkHelp carros.cfg carros.cfg carros_best.weights image1.jpg
`
Coordenadas de saída (imagem): Obtenha as coordenadas do objeto:
`bash
# Versão 2
teste de detector darknet animais.dados animais.cfg animaisbest.weights -extoutput dog.jpg
# Versão 3
darknet01inference_images animais cachorro.jpg
# DarkHelp
DarkHelp --json animais.cfg animais.nomes animais_best.pesos cachorro.jpg
`
Processamento de vídeo:
`bash
# Versão 2
# Execute no arquivo de vídeo
demonstração do detector darknet animais.dados animais.cfg animaisbest.weights -extoutput test.mp4
# Execute na webcam
Demonstração do detector darknet Animals.data Animals.cfg Animals_best.weights -c 0
# Versão 3
# Execute no arquivo de vídeo
darknet03display_videos animais.cfg teste.mp4
# Execute na webcam
darknet08display_webcam animais
# DarkHelp
# Execute no arquivo de vídeo
DarkHelp animais.cfg animais.nomes animais_best.pesos teste.mp4
`
Salvar resultados em vídeo:
`bash
# Versão 2
demonstração do detector darknet animais.dados animais.cfg animaisbest.weights test.mp4 -outfilename res.avi
# Versão 3
darknet05processvideosanimais multithread.cfg animais.nomes animais_best.teste de pesos.mp4
# DarkHelp
DarkHelp animais.cfg animais.nomes animais_best.pesos teste.mp4
`
Saída JSON:
`bash
# Versão 2
demonstração do detector darknet animais.dados animais.cfg animaisbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
# Versão 3
darknet06imagestojson animais imagem1.jpg
# DarkHelp
DarkHelp --json animais.nomes animais.cfg animais_best.pesos image1.jpg
`
GPU específica: execute em uma GPU designada:
`bash
# Versão 2
demonstração do detector darknet animais.dados animais.cfg animais_best.weights -i 1 teste.mp4
`
Verificação de precisão: Avalie a precisão da rede:
`bash
mapa do detector darknet driving.data driving.cfg driving_best.weights
`
Calcular âncoras:
`bash
detector darknet calcanchors animais.data -numof_clusters 6 -largura 320 -altura 256
`
Treinando uma nova rede
DarkMark: Para uma abordagem intuitiva e simplificada para anotação e treinamento, use o DarkMark.
Configuração manual:
1. Criar diretório: Configure uma pasta para seus dados de treinamento.
2. Copiar configuração: Escolha um arquivo de configuração como modelo, por exemplo, cfg/yolov4-tiny.cfg, e copie-o para seu diretório.
3. Crie um arquivo .names: Crie um arquivo de texto (por exemplo, Animals.names) listando suas classes, uma por linha.
4. Crie um arquivo .data: Crie um arquivo de texto (por exemplo, Animals.data) com a seguinte estrutura:
`
aulas = 4
trem = /caminho/para/animals_train.txt
válido = /caminho/para/animais_valid.txt
nomes = /caminho/para/animais.nomes
backup = /caminho/para/backup_directory
`
5. Prepare o conjunto de dados: organize as imagens e os arquivos de anotação correspondentes em um diretório.
6. Criar arquivos de texto de treinamento/válidos: Crie dois arquivos de texto (animalstrain.txt, Animalsvalid.txt) listando os caminhos para imagens para treinamento e validação.
7. Modifique a configuração:
* Definir lote = 64.
* Ajuste as subdivisões com base na memória da sua GPU.
Defina max_batches com um valor adequado (por exemplo, número de 2.000 classes).
* Defina etapas para 80% e 90% de max_batches.
* Ajuste a largura e a altura de acordo com as dimensões da sua rede.
* Atualize as aulas para corresponder ao número de aulas.
* Modifique os filtros nas seções [convolucionais] anteriores às seções [yolo].
8. Comece o treinamento:
`bash
cd /caminho/para/animais
detector darknet -map -dont_show trem animais.data animais.cfg
`
9. Visualizar progresso: monitore o progresso do treinamento por meio do arquivo chart.png.
Outras ferramentas e links
DarkMark: Esta ferramenta simplifica a anotação de imagens, verificação e geração de arquivos para treinamento com Darknet.
DarkHelp: uma CLI alternativa robusta para Darknet com recursos como mosaico de imagens e rastreamento de objetos.
Perguntas frequentes sobre Darknet/YOLO: Encontre respostas para perguntas frequentes.
Canal de Stéphane no YouTube: Acesse tutoriais e vídeos de exemplo.
Darknet/YOLO Discord Server: Junte-se à comunidade para suporte e discussões.
Roteiro
Concluído:
Substituído qsort() por std::sort() para eficiência.
Código obsoleto removido (por exemplo, check_mistakes, getchar(), system()).
Migração do Darknet para o compilador C++.
Corrigidos problemas de compilação do Windows.
Suporte Python restaurado.
Construiu a biblioteca Darknet.
Código CUDA/GPU reativado, CUDNN e metade CUDNN.
Informações aprimoradas sobre a versão CUDA.
Conjunto de instruções AVX reativado.
Removidas soluções antigas e Makefile.
Tornou o OpenCV uma dependência obrigatória.
Removidas dependências de biblioteca desatualizadas (por exemplo, pthread, STB).
CMakeLists.txt reescrito para melhor detecção de CUDA.
Compilações fora do código-fonte ativadas.
Saída de número de versão aprimorada.
Implementamos otimizações de desempenho para treinamento e inferência.
Código limpo para melhor legibilidade.
Darknet.h reescrito para API aprimorada.
Suporte aprimorado para dispositivos Jetson baseados em ARM.
API Python corrigida na V3.
Metas de curto prazo:
Troque printf() por std::cout.
Investigue o suporte da câmera zed.
Melhore a análise da linha de comando.
Metas de médio prazo:
Substitua todo o código char por std::string.
Aborde os avisos do compilador.
Aprimore o uso de cv::Mat em vez de estruturas de imagem personalizadas.
Atualize a funcionalidade da lista para std::vector ou std::list.
Suporta imagens em escala de cinza de 1 canal.
Adicione suporte para imagens de canal N (N > 3).
Limpeza de código contínua.
Metas de longo prazo:
Resolva problemas de CUDA/CUDNN em diferentes GPUs.
Reescreva o código CUDA+cuDNN para melhorar a eficiência.
Explore o suporte para GPUs não NVIDIA.
Implemente caixas delimitadoras giradas e suporte de "ângulo".
Adicione pontos-chave, esqueletos e mapas de calor.
Apresente recursos de segmentação.