[ATUALIZAÇÃO]: Este repositório serve como um código de motorista para minha pesquisa. Acabei de me formar na faculdade e estou muito ocupado procurando funções de estágio / bolsa de pesquisa antes de eventualmente me candidatar a um mestrado. Não terei tempo para analisar os problemas por enquanto. Obrigado.
Este repositório contém código para um detector de objetos com base no Yolov3: uma melhoria incremental, implementada no pytorch. O código é baseado no código oficial do YOLO V3, bem como em uma porta Pytorch do código original, por Marvis. Um dos objetivos deste código é melhorar a porta original, removendo partes redundantes do código (o código oficial é basicamente uma biblioteca de aprendizado profundo e inclui coisas como modelos de sequência, que não são usados no YOLO). Também tentei manter o código mínimo e documentá -lo o melhor que puder.
Se você deseja entender como implementar esse detector por si mesmo do zero, pode passar por esta série de tutoriais de 5 partes que escrevi no Paperspace. Perfeito para alguém que deseja passar das habilidades de Pytorch intermediárias para iniciantes para intermediários.
Implementar YOLO V3 do zero
A partir de agora, o código contém apenas o módulo de detecção, mas você deve esperar o módulo de treinamento em breve. :)
O uso do Pytorch 0.3 quebrará o detector.
Clone e cd no diretório repo. A primeira coisa que você precisa fazer é obter o arquivo de pesos desta vez.
Os pesos arquivos no seu diretório repositório. Ou você pode apenas digitar (se estiver no Linux)
wget https://pjreddie.com/media/files/yolov3.weights
python detect.py --images imgs --det det
--images Flag Define o diretório para carregar imagens ou um único arquivo de imagem (ele descobrirá), e --det é o diretório para salvar imagens. Outra configuração, como o tamanho do lote (usando o sinalizador --bs ), a confiança do limiar de objeto pode ser ajustada com sinalizadores que podem ser analisados.
python detect.py -h
Você pode alterar as resoluções da imagem de entrada pelo sinalizador --reso . O valor padrão é 416. Qualquer que seja o valor que você escolher, lembre -se de que deve ser um múltiplo de 32 e maior que 32 . Coisas estranhas vão acontecer se você não. Você foi avisado.
python detect.py --images imgs --det det --reso 320
Para isso, você deve executar o arquivo, video_demo.py com --video sinalizador especificando o arquivo de vídeo. O arquivo de vídeo deve estar no formato .avi, pois o OpenCV só aceita o OpenCV como o formato de entrada.
python video_demo.py --video video.avi
Configurações de ajuste podem ser vistas com -h sinalizador.
Para acelerar a inferência de vídeo, você pode tentar usar o arquivo video_demo_half.py, que faz toda a inferência com flutuações de meia precisão de 16 bits em vez de flutuação de 32 bits. Não vi grandes melhorias, mas atribuo isso a ter um cartão mais antigo (Tesla K80, Kepler Arch). Se você tiver um dos cartões com suporte rápido do Float16, experimente e, se possível, compare -o.
O mesmo que o módulo de vídeo, mas você não precisa especificar o arquivo de vídeo, pois o feed será retirado da sua câmera. Para ser mais preciso, o Feed será retirado do que o OpenCV, reconhece como câmera 0. A resolução de imagem padrão é 160 aqui, embora você possa alterá -lo com o bandeira reso .
python cam_demo.py
Você pode ajustar facilmente o código para usar diferentes pesos, disponível no site da YOLO
Nota: Os recursos do Scales foram desativados para melhor refatorar.
O YOLO V3 faz detecções em diferentes escalas, cada uma delas deputada na detecção de objetos de tamanhos diferentes, dependendo se eles capturam recursos grosseiros, recursos de granulação fina ou algo entre. Você pode experimentar essas escalas pelo sinalizador --scales .
python detect.py --scales 1,3