SSD: detector de objetos multibox de una sola toma, en Pytorch
Una implementación de Pytorch de un detector multibox de un solo disparo del artículo 2016 de Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, Scott Reed, Cheng-Yang y Alexander C. Berg. El código Caffe oficial y original se puede encontrar aquí.

Tabla de contenido
- Instalación
- Conjuntos de datos
- Tren
- Evaluar
- Actuación
- Población
- Trabajo futuro
- Referencia
Instalación
- Instale Pytorch seleccionando su entorno en el sitio web y ejecutando el comando apropiado.
- Clon este repositorio.
- Nota: Actualmente solo admitimos Python 3+.
- Luego descargue el conjunto de datos siguiendo las instrucciones a continuación.
- ¡Ahora apoyamos a Visdom para la visualización de pérdidas en tiempo real durante el entrenamiento!
- Para usar Visdom en el navegador:
# First install Python server and client
pip install visdom
# Start the server (probably in a screen or tmux)
python -m visdom.server
- Luego (durante el entrenamiento) navegue a http: // localhost: 8097/(consulte la sección del tren a continuación para obtener detalles de capacitación).
- Nota: Para el entrenamiento, actualmente apoyamos VOC y Coco, y tenemos el objetivo de agregar soporte de Imagenet pronto.
Conjuntos de datos
Para facilitar las cosas, proporcionamos scripts bash para manejar las descargas del conjunto de datos y configurarlo. También proporcionamos cargadores de conjuntos de datos simples que heredan torch.utils.data.Dataset , haciéndolos completamente compatibles con la API torchvision.datasets .
PALMA DE COCO
Microsoft Coco: objetos comunes en contexto
Descargar Coco 2014
# specify a directory for dataset to be downloaded into, else default is ~/data/
sh data/scripts/COCO2014.sh
Conjunto de datos de VOC
Pascal VOC: clases de objetos visuales
Descargar VOC2007 Trainval & Test
# specify a directory for dataset to be downloaded into, else default is ~/data/
sh data/scripts/VOC2007.sh # <directory>
Descargar VOC2012 Trainval
# specify a directory for dataset to be downloaded into, else default is ~/data/
sh data/scripts/VOC2012.sh # <directory>
SSD de entrenamiento
- Primero descargue los pesos de red base Pytorch de Pytorch reducido FC en: https://s3.amazonaws.com/amdegroot-models/vgg16_reducedfc.pth
- De forma predeterminada, suponemos que ha descargado el archivo en el Dir
ssd.pytorch/weights :
mkdir weights
cd weights
wget https://s3.amazonaws.com/amdegroot-models/vgg16_reducedfc.pth
- Para entrenar SSD utilizando el script de trenes, simplemente especifique los parámetros enumerados en
train.py como una bandera o cambiarlos manualmente.
- Nota:
- Para el entrenamiento, se recomienda una GPU NVIDIA para la velocidad.
- Para obtener instrucciones sobre el uso/instalación de Visdom, consulte la sección de instalación.
- Puede recoger el entrenamiento desde un punto de control especificando la ruta como uno de los parámetros de entrenamiento (nuevamente, consulte
train.py para opciones)
Evaluación
Para evaluar una red capacitada:
Puede especificar los parámetros enumerados en el archivo eval.py marcándolos o cambiándolos manualmente.

Actuación
Prueba VOC2007
mapa
| Original | Peso convertido Weiliu89 | Desde cero sin datos aug | Desde cero con datos aug |
|---|
| 77.2 % | 77.26 % | 58.12% | 77.43 % |
FPS
GTX 1060: ~ 45.45 fps
Población
Use una red SSD previamente capacitada para la detección
Descargar una red previa a la capacitación
- Estamos tratando de proporcionar a Pytorch
state_dicts (dict de tensores de peso) de las últimas definiciones de modelo SSD capacitadas en diferentes conjuntos de datos. - Actualmente, proporcionamos los siguientes modelos de Pytorch:
- SSD300 entrenado en VOC0712 (pesos más nuevos de Pytorch)
- https://s3.amazonaws.com/amdegroot-models/ssd300_map_77.43_v2.pth
- SSD300 entrenado en VOC0712 (pesas de cafe de cafe)
- https://s3.amazonaws.com/amdegroot-models/ssd_300_voc0712.pth
- Nuestro objetivo es reproducir esta mesa del papel original.
Prueba el cuaderno de demostración
- Asegúrese de tener instalado el cuaderno Jupyter.
- Dos alternativas para instalar el cuaderno de Jupyter:
Si instaló Pytorch con conda (recomendado), entonces ya debería tenerlo. (Simplemente navegue al repositorio clonado ssd.pytorch): jupyter notebook
Si usa PIP:
# make sure pip is upgraded
pip3 install --upgrade pip
# install jupyter notebook
pip install jupyter
# Run this inside ssd.pytorch
jupyter notebook
- Ahora navegue a
demo/demo.ipynb en http: // localhost: 8888 (por defecto) y teng a él.
Prueba la demostración de la cámara web
- Funciona en CPU (puede tener que ajustar
cv2.waitkey para FPS óptimo) o en una GPU NVIDIA - Esta demostración actualmente requiere OpenCV2+ con enlaces de Python y una cámara web a bordo
- Puede cambiar la cámara web predeterminada en
demo/live.py
- Instale el paquete Imutils para aprovechar el subproceso múltiple en la CPU:
- ¡Ejecutar
python -m demo.live abre la cámara web y comienza a detectar!
HACER
Hemos acumulado la siguiente lista de tareas pendientes, que esperamos completar en el futuro cercano
Autores
Nota: Desafortunadamente, esto es solo un pasatiempo nuestro y no un trabajo de tiempo completo, por lo que haremos todo lo posible para mantener las cosas actualizadas, pero no hay garantías. Dicho esto, gracias a todos por su continua ayuda y comentarios, ya que es realmente apreciado. Intentaremos abordar todo lo antes posible.
Referencias
- Wei Liu, et al. "SSD: detector multibox de un solo disparo". ECCV2016.
- Implementación original (Caffe)
- Un gran agradecimiento a Alex Koltun y su equipo en WebyClip por su ayuda para terminar la parte de aumento de datos.
- Una lista de otros grandes puertos SSD que fueron fuentes de inspiración (especialmente el repositorio de Chainer):
- Chainer, Keras, MXNet, TensorFlow