Detección de objetos MobileNet SSD mediante el módulo OpenCV 3.4.1 DNN
Detección de objetos MobileNet SSD usando el módulo OpenCV 3.4.1 DNN
Esta publicación demuestra cómo usar el módulo de aprendizaje profundo OpenCV 3.4.1 con la red MobileNet-SSD para el descubrimiento de objetos.
Como parte de Opencv 3.4. + Se incluyó oficialmente el módulo de red neuronal profunda (DNN). El módulo DNN permite cargar modelos previamente entrenados de los marcos de aprendizaje profundo más populares, incluidos Tensorflow, Caffe, Darknet, Torch. Además de MobileNet-SDD, otras arquitecturas son compatibles con OpenCV 3.4.1:
- GoogleLeNet
- YOLO
- SqueezeNet
- R-CNN más rápido
- ResNet
- Esta API es compatible con C ++ y Python. : -)
Código de descripción
En esta sección, crearemos el script Python para la detección de objetos y explicaremos, ¿cómo cargar nuestra red neuronal profunda con OpenCV 3.4? ¿Cómo pasar la imagen a la red neuronal? y ¿Cómo hacer una predicción con MobileNet o módulo dnn en OpenCV ?.
Usamos un MobileNet previamente entrenado tomado dehttps://github.com/chuanqi30 5 / MobileNet-SSD / que se entrenó en el marco Caffe-SSD. Este modelo puede detectar 2 clases.
Cargue y prediga con el módulo de red neuronal profunda
Primero creamos un nuevo archivo Python mobilenet_ssd_python.py ponemos el siguiente código, aquí importamos las librerías:
La línea anterior establece los siguientes argumentos:
- Video: archivo de ruta de video.
- Prototxt: el archivo de red es .prototxt
- Pesos: el archivo de ponderaciones de red es .caffemodel
- Thr: umbral de confianza.
A continuación, definimos las etiquetas para las clases en nuestra red MobileNet-SSD.
A continuación, abrimos el archivo de video o dispositivo de captura según lo que elijamos, también cargamos el modelo modelo Caffe.
En la línea 36, pasa el prototxt y los argumentos de ponderación a la función, luego cargamos correctamente la red.
Luego leemos el video cuadro por cuadro y lo pasamos en el cuadro a la web para su detección. Con el módulo DNN es fácil usar nuestra red de aprendizaje profundo en OpenCV y hacer predicciones.
En la línea 40 -41, lea el fotograma del video y cambie el tamaño a 300 × 300 porque es el tamaño de entrada de imagen definido para el modelo MobileNet-SSD.
Después de las líneas anteriores, obtenemos la predicción de la red, simplemente haciéndolo en tres pasos básicos:
- Subir una imagen
- Preprocesar la imagen
- Establezca la imagen como entrada de red y obtenga el resultado de la predicción.
El uso del módulo DNN es esencialmente el mismo para las otras redes y arquitecturas, por lo que podemos replicarlo para nuestros propios modelos entrenados.
Visualice la confianza en la detección y predicción de objetos
En conclusión, después de los pasos anteriores, surgen nuevas preguntas, ¿Cómo obtener la ubicación del objeto con MobileNet? ¿Cómo saber la clase de objeto predicha? ¿Cómo tener confianza en la predicción? ¡Ir!
Debemos leer la matriz de detección para obtener los datos de predicción de la red neuronal, el siguiente código hace esto:
Hacemos un bucle (línea 62) para leer los valores. Luego, en la línea 63 obtenemos la confianza de la predicción y el siguiente filtro de línea con valor de umbral. En la línea 65, obtenga la etiqueta. En las líneas 68 a 71, obtenga las esquinas del objeto.
Con toda la información sobre el objeto predicho, el último paso es mostrar los resultados. El siguiente objeto de dibujo de código detectado y muestra su etiqueta y confianza en el marco.
Últimas líneas, muestra la imagen del marco normal y cambia el tamaño a la pantalla.
Descargas
El código y el modelo capacitados por MobileNet se pueden descargar desde:
https://github.com/djmv/MobilNet_SSD_opencv