Cómo aprendí a no preocuparme y amaba la visión artificial

Hola Habr! Mi nombre es Artyom Nagumanov, tengo más de 15 años de experiencia en desarrollo de software, gestión de proyectos, equipos, departamentos de TI. Siempre me ha interesado el tema de la inteligencia artificial y la visión artificial. Mientras desarrollaba software, siempre me visitaba la idea de por qué no agregar al menos un poco de inteligencia a la aplicación empresarial para rechazar parcial o completamente la participación del usuario en cualquier proceso que a primera vista parezca completamente no formalizado.

imagen

Para hacer esto, cada vez que tenía que ir de nuevo: estudiar / recuperar las bibliotecas apropiadas, instalar en una máquina virtual Linux para probar herramientas gratuitas para crear y entrenar redes neuronales, encontrar arquitecturas de red que actualmente son la corona de la creación humana en el mundo inteligencia artificial. Este proceso es bastante laborioso y no muy divertido. Una vez, al comprender la arquitectura de otra red neuronal, me di cuenta de que era hora de poner fin a esto y crear una herramienta universal que asumiera toda la rutina. Y solo necesito presionar algunos botones grandes de vidrio y obtener el resultado. En la imagen para llamar la atención (en el primer párrafo del artículo), se muestra un ejemplo de reconocimiento de chorros de agua de una máquina de riego, pero lo primero es lo primero.

Hacemos servicio de reconocimiento


Tuve la siguiente idea: crear un sitio web donde el usuario pueda cargar cualquier imagen, haga clic en el botón "Reconocer" y obtenga el resultado en formato json. Pero el hecho es que no existe un algoritmo universal o red neuronal que pueda encontrar objetos en el mundo. Como resultado, decidí hacer posible entrenar mis propios modelos de redes neuronales para reconocer los objetos que necesitamos, utilizando solo el sitio y las imágenes de muestra que necesitan ser reconocidas. Antes de comenzar a trabajar, analicé qué desarrollos existen en el mundo sobre este tema. Al final resultó que, muchos gigantes de la industria de TI están trabajando en esta dirección: Yandex, Mail.ru, Amazon. La principal desventaja es que todos estos gigantes quieren dinero para sus servicios. Esto fue suficiente para comenzar mi propio desarrollo.Ya tenía antecedentes, y sabía cómo encontrar y clasificar bien los objetos en las imágenes, todo lo que quedaba era unir todo y hacer una interfaz conveniente.

En la gran mayoría de los casos, utilizo las tecnologías de Microsoft en mis proyectos, lo que afectó significativamente las tecnologías utilizadas en este proyecto:

  • ASP.NET (lenguaje C #)
  • Webpi
  • Javascript jquery
  • Servidor MSSQL
  • Pitón
  • Tensorflow

En primer lugar, decidí crear un servicio REST, que será el cerebro de todo el sistema, lo que nos permitirá aceptar comandos a través de la API y hacer todo el trabajo duro. La arquitectura de la red neuronal, elegí Mask R-CNN, esta red puede encontrar objetos en la imagen y clasificarlos.

Todo fue más o menos regularmente, hasta que llegué a la realización de entrenar a mis propios modelos. El proceso de aprendizaje fue muy costoso y exigente para el hardware. Por supuesto, lo sabía antes, pero antes de eso, podía permitirme esperar el entrenamiento del modelo por uno o dos días, usando la CPU para los cálculos. Pero como la idea era crear una herramienta conveniente y rápida, no pude soportar la larga capacitación del modelo. Entonces, la pregunta ha madurado con la instalación de un servidor especial con una tarjeta gráfica adecuada que admitirá la tecnología CUDA ( https://ru.wikipedia.org/wiki/CUDA) y reducirá significativamente el tiempo que lleva entrenar el modelo. Para no inflar el presupuesto del proyecto, elegí una tarjeta gráfica NVIDIA GeForce GTX 1050 Ti no costosa. En paralelo con el servicio, hice un cliente en Windows Forms que permitiría realizar pruebas.

En la segunda etapa, hice un sitio web, que es esencialmente un cliente del servicio. Realmente no me molesté con el diseño y ni siquiera tomé la plantilla terminada, escribí todo yo mismo, usando solo lo que Visual Studio ofrece de fábrica. Tomó otros tres meses crear y probar el sitio.

Estaba increíblemente feliz cuando subí la imagen, seleccioné un modelo listo para el reconocimiento, hice clic en el botón "Reconocer" y obtuve el primer resultado.

imagen

La verdadera tarea de la visión artificial.


Mientras trabajaba en el sistema de reconocimiento, se me ocurrió una tarea real: determinar la posición de la pala delantera de una máquina especial que limpia la nieve en la carretera. Para resolver este problema, no estaba limitado a elegir un enfoque para la solución y desde el principio quería utilizar la instalación de sensores especiales que determinan el ángulo de la pala, pero rápidamente abandoné esta idea. Resultó que estos sensores deben calibrarse constantemente debido al hecho de que la pala se retira periódicamente y se coloca otra, además de hablar con colegas que instalan dichos sensores, descubrí que estos sensores están en la calle y están disponibles para sabotaje. Se me ocurrió la idea de analizar los controles de trabajo de la pala, pero resultó que, en la vida real, van tan lejos como para quitar la pala, y en los cuerpos de trabajo señalan que la pala está bajada,en una palabra, nuevamente no es una opción confiable. Bueno, no me dejaron otra opción que usar todo el poder del servicio de reconocimiento. Puse la cámara en el compartimento de pasajeros del automóvil, que está mirando la pala delantera, recogí varios cientos de muestras de la pala, las marqué con la herramienta VGG, que construí en el sitio y comencé a entrenar. El proceso tomó alrededor de dos horas y en la era 30 obtuve un resultado de reconocimiento bastante aceptable, la precisión del reconocimiento fue de alrededor del 95%.El proceso tomó alrededor de dos horas y en la era 30 obtuve un resultado de reconocimiento bastante aceptable, la precisión del reconocimiento fue de alrededor del 95%.El proceso tomó alrededor de dos horas y en la era 30 obtuve un resultado de reconocimiento bastante aceptable, la precisión del reconocimiento fue de alrededor del 95%.

imagen

Para que el sistema pudiera funcionar completamente en el automóvil, tuve que modificarlo: agregar la capacidad de cargar fotos a través de ftp, y no solo a través de la API porque la videocámara le permitió tomar una foto y enviarla al ftp especificado. Se agregó la capacidad de guardar el resultado en la base de datos y luego a través de la API durante el período de tiempo especificado para obtener los resultados, analizarlos y escribir en el sistema de contabilidad escrito en 1C, que por cierto es un gran sistema de control que analiza miles de automóviles al mismo tiempo y controla muchos parámetros, como el kilometraje , horas de máquina, combustible en el tanque, paseos, ralentí, etc., pero esta es una historia completamente diferente. La primera versión del control de la pala está lista, pero en la batalla solo se probará cuando caiga la nieve.

Que tan fácil es


La idea principal del servicio de reconocimiento es la simplicidad de crear y entrenar sus propios modelos. Para entender si alguien realmente puede crear y entrenar su propio modelo, le pedí a mi asistente que creara un modelo para reconocer los chorros de agua de una máquina de riego. El único aporte que le di fue un video del funcionamiento de la máquina de riego, tomado de la cabina, y la dirección del servicio de reconocimiento, en la noche le puse esta tarea, y en la mañana, al ingresar al sistema, vi un modelo listo para usar que realmente funcionaba. A continuación se muestra una captura de pantalla de la ventana en la que se entrena el modelo.

imagen

A medida que aprende, se preserva la era del modelo, y podemos, sin interrumpir el proceso de aprendizaje, probar cualquier era.

Desarrollo y uso


Un ejemplo de cómo funciona todo en vivo se puede ver en el video clip .

Durante mucho tiempo pensé que si alguien podía crear su propio modelo, entonces, ¿por qué no hacer posible compartir este modelo con otros usuarios del sistema? Como resultado, agregué una sección donde puede colocar un modelo exitoso con un clic del mouse y cualquier participante puede usarlo. El servicio es completamente gratis.

Ahora uso el servicio para resolver mis tareas de automatización de procesos en empresas en las que se puede utilizar la visión artificial. En el futuro planeo agregar otros enfoques de reconocimiento, no solo redes neuronales. Estaré muy contento si alguien más que usa este servicio puede resolver sus problemas.

All Articles