Cree un sistema de gestión de inventario en tiempo real en 6 horas con Streamlit y YOLOv5

Dec 05 2022
Un breve artículo que explica cómo entrenar eficientemente el algoritmo de detección de objetos YOLOv5 en su propio conjunto de datos personalizado y usarlo para crear su aplicación web que se puede usar en tiempo real. La necesidad de compartir los descubrimientos de los científicos de datos ha aumentado, debido al uso cada vez mayor de Python como su lenguaje de programación preferido, un enfoque multiplataforma con una interacción adecuada es el uso de aplicaciones web.

Un breve artículo que explica cómo entrenar eficientemente el algoritmo de detección de objetos YOLOv5 en su propio conjunto de datos personalizado y usarlo para crear su aplicación web que se puede usar en tiempo real.

Foto de Tobias Tullius en Unsplash

La necesidad de compartir los descubrimientos de los científicos de datos ha aumentado, debido al uso cada vez mayor de Python como su lenguaje de programación preferido, un enfoque multiplataforma con una interacción adecuada es el uso de aplicaciones web. Sin embargo, la programación típica exige suficiente experiencia entre los usuarios de Python con marcos web algo complejos, como Flask y Django. Incluso si aprender estos marcos no es particularmente difícil para los usuarios moderados de Python, puede ser difícil para los científicos de datos mostrar su trabajo de ciencia de datos.

Streamlit

El marco Streamlit, por lo tanto, nos brinda a los científicos de datos una mejor opción hoy. Transforma rápida y fácilmente secuencias de comandos de Python directas en aplicaciones web utilizables, interactivas y compartibles. Debido a su enfoque en exhibir soluciones de ciencia de datos, viene con soporte nativo para modelos de datos y gráficos que se crean utilizando bibliotecas de ciencia de datos populares como pandas y matplotlib. Por lo tanto, si ya está familiarizado con Python, aprender streamlit será relativamente fácil.

Realización de detección en una imagen

Objetivo

Quiero llevarlos un paso más allá en este artículo mostrándoles cómo publicar su aplicación web para que otros puedan ver sus modelos de IA en tiempo real. Además, demostraré cómo crear un sistema de gestión de inventario que gestione las bebidas frías en tiempo real. Para nuestro proyecto, utilizaremos Streamlit para crear nuestra aplicación web y SQLite como base de datos.

Usaré el conjunto de datos SKU-110K para crear mi conjunto de datos personalizado para identificar bebidas frías como Coca-Cola, Sprite, Pepsi, Mountain Dew, 7UP y Fanta. Hay muchas fotografías de baja calidad en SKU-110K, por lo que tuve que filtrarlas, seleccionar las mejores y anotarlas con la biblioteca labelImg . que lo ayuda a anotar imágenes en muchos formatos de almacenamiento, incluidos YOLO y CreateML, y el formato PASCAL VOC. Es una herramienta útil para anotar datos para la detección de objetos.

Capacitación

Después de realizar las anotaciones, las entrenaremos usando yolov5, que es un modelo de detección y clasificación de objetos. Ahora veremos brevemente la arquitectura de YOLOv5.

Como YOLOv5 es un detector de objetos de una sola etapa, tiene tres partes importantes como cualquier otro detector de objetos de una sola etapa.

Columna vertebral del modelo

La función principal de Model Backbone es identificar características clave en una imagen de entrada.

Para extraer características valiosas y útiles de una imagen de entrada en YOLO v5, se emplea CSPDarkNet (CSP - Cross Stage Partial Networks) como columna vertebral. Utiliza una técnica de CSPNet que divide el mapa de características de la capa base en dos secciones y luego las fusiona mediante una jerarquía de etapas cruzadas.

Darknet es rápido y altamente preciso, que son los requisitos clave para la familia YOLO.

modelo de cuello

PANet (Red de agregación de rutas) se usa como cuello en YOLO v5 para obtener pirámides de características. Las pirámides de características son un componente básico en los sistemas de reconocimiento para detectar objetos a diferentes escalas.

El papel del cuello del modelo es recopilar características de diferentes etapas. El cuello se compone de varios caminos de arriba hacia abajo y varios caminos de abajo hacia arriba. PANet usa características de todas las capas y decide cuáles son útiles.

cabeza de modelo

Utiliza cuadros de anclaje para construir vectores de salida final con probabilidades de clase, puntajes de objetividad y cuadros delimitadores.

La cabeza es responsable de:
la puntuación de objetividad (la probabilidad de que un objeto esté dentro del ancla)
la clase (un número, es decir, 1 que corresponde a una clase, por ejemplo, una persona)
la confianza de la clase (la posibilidad de que la clase anterior sea correcta)
la delimitación coordenadas del cuadro, es decir, [x, y, w, h] [120, 300, 200, 400]

La entrada se pasa primero a CSPDarknet para la extracción de características y luego se alimenta a PANet para la fusión de características (Pirámide de características). Finalmente, Yolo Layer genera resultados de detección (clase, puntaje, ubicación, tamaño).

Resultados de entrenamiento

flujo de trabajo

Página de destino

En la página de destino, tiene dos opciones: puede ir a Personal o Administrador.

Al utilizar streamlit_webrtc , que facilita la comunicación en tiempo real, podremos detectar imágenes en tiempo real ejecutando detecciones en los fotogramas capturados del video en tiempo real en el backend.

Detecciones en tiempo real usando dispositivos móviles

También puede usar arrastrar y soltar o cargar imágenes para realizar detecciones en imágenes, como se ve a continuación.

Realizar clasificaciones utilizando imágenes

Usando tres campos (Fecha, Nombre de la bebida y Recuento), almacenamos los resultados en nuestra base de datos sqlite, lo que ayuda al usuario final a mantener el inventario y verificar las cantidades día a día. Como se muestra abajo

Conclusión

En esta publicación, hablé sobre cómo crear un sistema de gestión de inventario utilizando el modelo de detección de objetos Yolov5 en un conjunto de datos personalizado .

Si desea experimentar con el conjunto de datos personalizado, puede descargar los datos anotados en Kaggle y el código en Github , la aplicación web se implementa aquí .

Gracias por leer. También estaré produciendo publicaciones adicionales para principiantes en el futuro. Para saber más sobre ellos, sígueme en Medium . Siempre estoy abierto a sugerencias y críticas constructivas, y mi cuenta de Twitter es @FaseehAhmed2606.