Prácticas en Mars Digital Technologies. Cómo aplicamos el aprendizaje profundo en M&M



Hola a todos!

Anualmente, unos 200 estudiantes y graduados se unen a Marte en Rusia como aprendices o participantes en el programa de liderazgo. Dmitry Korzhimanov, completó una pasantía en el centro de TI de Marte este verano. En nuestro blog, Dmitry habla sobre un proyecto en el que trabajó durante una pasantía.


Un gran número de empresas ofrecen pasantías para estudiantes a partir del tercer año. Entonces, como muchos de mis compañeros de clase que se gradúan del tercer año, me propuse encontrar una pasantía para el verano. En la mechmath de la Universidad Estatal de Moscú, los estudiantes prefieren TI y la banca, lo cual no es sorprendente, dada la presencia de una cantidad decente de problemas matemáticos tanto allí como allí. Pensé en pasantías en diferentes compañías y elegí Mars, ya que estaba interesado en la oportunidad de trabajar en proyectos de TI en producción real. Además, Mars es una empresa internacional, lo que significa que el trabajo estaba por delante en un equipo de todo el mundo.

Después de pasar las pruebas técnicas y verbales, así como una entrevista con un futuro mentor, me enviaron una oferta y, he aquí, me convertí en pasante del equipo de Next Generation Technologies. Este departamento consta de 5 personas de todo el mundo y se dedica principalmente a la introducción de tecnologías de aprendizaje automático en varios ciclos de producción y ventas de la empresa.

Honestamente, no soy un maestro de los algoritmos de aprendizaje automático y en el momento de la pasantía no tenía una comprensión completa de lo que haría y cómo implementaría los proyectos. Sí, tenía una buena base matemática e incluso sabía qué era Random Forest, pero ahí fue donde terminó mi conocimiento. Entre otras cosas, en Marte hay una gran cantidad de tareas relacionadas con la visión por computadora, y nuestro equipo las resuelve con éxito. Resultó que durante las primeras 2 semanas de la pasantía, descubrí cómo están organizadas las redes neuronales, qué es OpenCV, qué métricas existen, cómo trabajar con PyTorch y TensorFlow, y muchas, muchas cosas más. Mi cabeza estaba en su apogeo al final de cada día, porque la información tenía que ser absorbida en grandes cantidades, y las ideas de algunos algoritmos no eran triviales. Afortunadamente, en este momento hay muchos recursos realmente útiles como Neurohive, Medium y el mismo Habr (expreso mi profunda gratitud a todos los que escriben artículos sobre el tema del aprendizaje automático aquí, sin ti, la inmersión en el tema sería una tarea mucho más difícil). Gracias a estos recursos, puede estudiar un tema en particular a una velocidad bastante alta. Coursera, que aún veo en conferencias, no se hace a un lado.

Habiendo profundizado en algunos de los fundamentos fundamentales del aprendizaje profundo y habiendo dominado un poco, me ofrecieron participar en el proyecto. Tuvimos que implementar un programa que mide objetos en una fotografía. Por supuesto, surge la pregunta: ¿por qué las empresas de bienes de consumo necesitan esto? Sin embargo, la respuesta es bastante simple: mantener estadísticas sobre el tamaño de las materias primas y los productos en la fábrica. Por ejemplo, Mars produce M&M, y creo que muchos han probado M&M con maní. Sin embargo, para que cada dulce no sea demasiado grande ni demasiado pequeño, los cacahuetes también deben ser de cierto tamaño.

Como saben, en el mundo no hay nada ideal y las fiestas llegan a la fábrica de una calidad completamente diferente. Por lo tanto, una persona especial tiene que hacer manualmente (!) Hacer una selección de un lote de nueces y compilar estadísticas sobre ellas. Naturalmente, en algún momento, la compañía se dio cuenta de que el proceso era bastante ineficiente y sería bueno automatizarlo. De hecho, la tarea es bastante simple y todo lo que se requiere es enseñar al modelo a encontrar tuercas u otros objetos, por ejemplo, en una hoja A4, y también un punto de referencia de un tamaño conocido impreso en él, por el cual los píxeles irán en unidades reales. Suena bastante trivial, pero de hecho, las dificultades generalmente comienzan a surgir. Se me indicó que participara en la implementación de la parte relacionada con el reconocimiento de este hito y la traducción de píxeles a milímetros.

Las grandes empresas prestan mucha atención al mantenimiento de su identidad corporativa, que desempeñó un papel en mi proyecto. Como punto de referencia o punto de referencia, que se imprimirá en papel en las fábricas de todo el mundo, se eligió un círculo con la letra "M" característica de la empresa.

Para resolver mi problema, inmediatamente comencé a buscar buenos ejemplos de implementación de redes neuronales convolucionales que puedan encontrar objetos en la foto de manera rápida y clara. Después de revisar las diversas opciones, seleccioné una de las implementaciones más rápidas de R-CNN y estudié sus capacidades y arquitectura. El siguiente paso fue entrenar el modelo; para esto, se generaron alrededor de cien fotografías con una ubicación aleatoria de un punto de referencia y, en consecuencia, un cuadrado que lo describe. En este punto, el paquete reportlab me ayudó mucho. Este es un conjunto de herramientas diseñadas específicamente para generar documentos con una disposición personalizada de objetos en ellos.

Para el aumento, se eligió el paquete de albumentaciones , cuyas capacidades son bastante impresionantes. En Github puede leer más al respecto, incluida una comparación con bibliotecas alternativas. Traté de hacer las transformaciones lo más diversas posible para que no quedaran las llamadas "cajas negras". Giros, zoom, cambio de contraste, adición de ruido y otras técnicas estándar. Desafortunadamente, hubo un problema con la herramienta Rotar, que era necesario para mí, porque nadie garantizaba la orientación correcta de la letra M en la foto, y el modelo debería ser capaz de reconocer diferentes opciones para su posición.

No importa cómo trate de encontrar el error, la función del paquete de albumentations continuó obstinadamente haciendo conversiones incorrectas de cuadro delimitador, desplazándolo en la clave incorrecta. Como resultado, decidí usar el paquete clásico de imgaug , con el que no tuve problemas.

Habiendo entrenado la red en varias épocas, me interesé en el resultado que producirá el modelo con ejemplos reales. Después de imprimir una hoja de papel con un punto de referencia y tomar algunas fotos, comencé a probar la red neuronal. Y sí, realmente aprendió a encontrar lo que necesitaba, pero lo hizo lejos de ser perfecta. Esos límites que mostró la red eran demasiado imprecisos para la medición de objetos de alta calidad, y aquí comenzó el proceso bastante desagradable de ajustar parámetros en busca de la configuración ideal. Cambié el paso de entrenamiento, intenté cambiar la arquitectura de la red, terminarla, cambiar la configuración de aumento, pero el IoU promedio no aumentó por encima de 0.85.

El resultado del Faster R-CNN



Por desgracia, mi inexperiencia me jugó una mala pasada. Al no haberme preocupado por la búsqueda de herramientas más simples, estaba demasiado interesado en experimentar con la red neuronal, pero no importa cómo lo intenté, no dio un resultado aceptable. En el proceso, resultó que la producción simplemente no usaba impresoras a color, y todos mis esfuerzos parecían ser en vano. Pero luego, mi colega me dijo que puede usar el círculo negro habitual y la transformación Hough del paquete OpenCV para detectarlo. Podría usar la misma solución simple para la versión inicial, sin embargo, no presté la debida atención a las herramientas clásicas de la visión por computadora. Después de jugar un poco con los parámetros, finalmente obtuve lo que quería y el problema se resolvió. El siguiente paso es crear una API usando el paquete Flask y lanzar el programa en el servidor Azure, pero esta es una historia completamente diferente.

Resultado final con la transformación de Hough



Además de las tareas de visión por computadora, la compañía enfrenta tareas de otras áreas del aprendizaje automático, desde procesar tweets para monitorear la percepción de un producto en particular, hasta desarrollar programas que ayuden a los veterinarios a tratar a los animales de manera más eficiente. Lo que fue una sorpresa agradable para mí es la parte de investigación del trabajo. A menudo, las tareas parecen muy simples, pero no se sabe cómo encontrar su solución de alta calidad. Para hacer esto, debe estudiar artículos y métodos actuales en el campo del aprendizaje automático. Por ejemplo, tenía que entender los métodos bayesianos de aprendizaje automático, que son muy populares para resolver problemas médicos. Gracias a esto, pude estudiar artículos médicos que describen la aplicación de estos métodos y ayudar al equipo a elegir el vector de desarrollo correcto.

Por el momento, estoy completando mi pasantía. Como se acerca el nuevo año escolar, en septiembre cambié al trabajo a tiempo parcial, lo cual no es un problema. Además, la compañía tiene la oportunidad de trabajar desde casa y, como se vio después, esta práctica es bastante común aquí. Ahora nuestro equipo está completando el proyecto que describí en el artículo y se está moviendo a uno nuevo relacionado con la visión por computadora. Realmente hay muchas tareas, y todas son completamente diferentes, por lo que no se aburrirá.

Ya está abierta una pasantía en Marte, puede obtener más información y solicitarla en: sitio .

Source: https://habr.com/ru/post/476266/


All Articles