SSD: detector de objetos multibox de tiro único, em pytorch
Uma implementação de Pytorch do detector multibox de tiro único do artigo de 2016 de Wei Liu, Dragomir Angelov, Dumitru Erhan, Christian Szegedy, Scott Reed, Cheng-Yang e Alexander C. Berg. O código oficial e original da Caffe pode ser encontrado aqui.

Índice
- Instalação
- Conjuntos de dados
- Trem
- Avaliar
- Desempenho
- Demos
- Trabalho futuro
- Referência
Instalação
- Instale o Pytorch selecionando seu ambiente no site e executando o comando apropriado.
- Clone este repositório.
- Nota: Atualmente, suportamos apenas o Python 3+.
- Em seguida, faça o download do conjunto de dados seguindo as instruções abaixo.
- Agora, apoiamos a visualização do Visdom para a visualização de perdas em tempo real durante o treinamento!
- Para usar o Visdom no navegador:
# First install Python server and client
pip install visdom
# Start the server (probably in a screen or tmux)
python -m visdom.server
- Em seguida (durante o treinamento) navegue para http: // localhost: 8097/(consulte a seção de trem abaixo para obter detalhes de treinamento).
- NOTA: Para treinamento, atualmente apoiamos o VOC e o Coco e pretendemos adicionar o suporte ao ImageNet em breve.
Conjuntos de dados
Para facilitar as coisas, fornecemos scripts bash para lidar com os downloads e configuração do conjunto de dados para você. Também fornecemos carregadores de conjunto de dados simples que herdam torch.utils.data.Dataset , tornando -os totalmente compatíveis com a API torchvision.datasets .
COCO
Microsoft Coco: Objetos comuns no contexto
Baixe Coco 2014
# specify a directory for dataset to be downloaded into, else default is ~/data/
sh data/scripts/COCO2014.sh
DataSet VOC
Pascal Voc: Classes de objetos visuais
Baixe VOC2007 TrainVal & Test
# specify a directory for dataset to be downloaded into, else default is ~/data/
sh data/scripts/VOC2007.sh # <directory>
Faça o download do VOC2012 TrainVal
# specify a directory for dataset to be downloaded into, else default is ~/data/
sh data/scripts/VOC2012.sh # <directory>
Treinamento SSD
- Primeiro baixe os pesos da rede de base VGG-16 RECT-16 Reduced Pytorch em: https://s3.amazonaws.com/amdegroot-models/vgg16_reductfc.pth
- Por padrão, assumimos que você baixou o arquivo no
ssd.pytorch/weights Dir:
mkdir weights
cd weights
wget https://s3.amazonaws.com/amdegroot-models/vgg16_reducedfc.pth
- Para treinar o SSD usando o script de trem, basta especificar os parâmetros listados no
train.py como uma bandeira ou alterá -los manualmente.
- Observação:
- Para o treinamento, uma GPU da NVIDIA é fortemente recomendada para a velocidade.
- Para obter instruções sobre o uso/instalação do Visdom, consulte a seção de instalação.
- Você pode pegar o treinamento do ponto de verificação especificando o caminho como um dos parâmetros de treinamento (novamente, consulte
train.py para opções)
Avaliação
Para avaliar uma rede treinada:
Você pode especificar os parâmetros listados no arquivo eval.py , sinalizando -os ou alterando manualmente.

Desempenho
Teste VOC2007
mapa
| Original | Pesos Weiliu89 convertidos | Do zero sem dados agosto | Do zero com dados agosto |
|---|
| 77,2 % | 77,26 % | 58,12% | 77,43 % |
FPS
GTX 1060: ~ 45,45 fps
Demos
Use uma rede SSD pré-treinada para detecção
Baixe uma rede pré-treinada
- Estamos tentando fornecer pytorch
state_dicts (dicto de tensores de peso) das mais recentes definições de modelo SSD treinadas em diferentes conjuntos de dados. - Atualmente, fornecemos os seguintes modelos Pytorch:
- SSD300 treinado no VOC0712 (mais recentes pesos pytorch)
- https://s3.amazonaws.com/amdegroot-models/ssd300_map_77.43_v2.th
- SSD300 treinado no VOC0712 (pesos originais da cafena)
- https://s3.amazonaws.com/amdegroot-models/ssd_300_voc0712.th
- Nosso objetivo é reproduzir esta tabela do artigo original
Experimente o caderno de demonstração
- Certifique -se de ter notebook Jupyter instalado.
- Duas alternativas para a instalação do Jupyter Notebook:
Se você instalou o Pytorch com o CONDA (recomendado), já deve ter. (Basta navegar para o repo e a corrida clonados do SSD.Pytorch): jupyter notebook
Se estiver usando PIP:
# make sure pip is upgraded
pip3 install --upgrade pip
# install jupyter notebook
pip install jupyter
# Run this inside ssd.pytorch
jupyter notebook
- Agora navegue para
demo/demo.ipynb em http: // localhost: 8888 (por padrão) e tenha!
Experimente a demonstração da webcam
- Trabalhos na CPU (pode ter que ajustar
cv2.waitkey para o FPS ideal) ou em uma GPU da NVIDIA - Atualmente, esta demonstração exige o OpenCv2+ W/ Python Bindings e uma webcam a bordo
- Você pode alterar a webcam padrão em
demo/live.py
- Instale o pacote Imutils para alavancar multi-threading na CPU:
- Executar
python -m demo.live abre a webcam e começa a detectar!
PENDÊNCIA
Acumulamos a seguinte lista de tarefas, que esperamos completar em um futuro próximo
Autores
Nota: Infelizmente, este é apenas um hobby nosso e não um trabalho em tempo integral, por isso faremos o possível para manter as coisas atualizadas, mas sem garantias. Dito isto, graças a todos por sua ajuda e feedback contínuos, pois é realmente apreciado. Tentaremos abordar tudo o mais rápido possível.
Referências
- Wei Liu, et al. "SSD: detector multibox de tiro único." ECCV2016.
- Implementação original (Caffe)
- Um enorme agradecimento a Alex Koltun e sua equipe no WebyClip pela ajuda deles para terminar a parte de aumento de dados.
- Uma lista de outras grandes portas SSD que eram fontes de inspiração (especialmente o repositório da cadeia):
- Chainner, Keras, MxNet, Tensorflow