Aprendizaje profundo: no solo sella en teléfonos móviles o cómo diagnosticamos los carros de locomotoras


Hace solo un par de d√≠as, Aurorai transfiri√≥ un sistema de reconocimiento de defectos y monitoreo de trole para las locomotoras Ermak a la operaci√≥n de prueba. La tarea no es trivial y es muy interesante, el primer paso fue evaluar la condici√≥n de las pastillas de freno y el ancho de la abrazadera. ¬°Logramos resolver el problema con una precisi√≥n de 1 mm a una velocidad de locomotora de hasta 30 km / h! Quiero se√Īalar que, debido a los detalles, fue posible utilizar "TTA (aumento de tiempo de prueba)" , un ejemplo v√≠vido de un truco de estilo kaggle de competencia que no encaja bien con la segmentaci√≥n sem√°ntica y basada en el codificador se_resnext50 , que proporciona un resultado incre√≠blemente preciso en la predicci√≥n de la m√°scara .

Descripción de la tarea

Es necesario crear un complejo de hardware y software para detectar defectos de las pastillas de freno y la salida de datos al jefe de turno.

Prerrequisitos para la tarea

Al final resultó que, una gran cantidad de almohadillas, alrededor del 80%, cambian en el PTOL (puntos de inspección técnica de locomotoras), y esto sucede cada 72 horas para cada locomotora. La mayor parte de los controles en el PTOL es una inspección visual por parte del maestro de la parte externa del carro de la locomotora.



Plan para resolver el problema:

  1. Selección de equipamiento
  2. Recogida de datos
  3. Entrenamiento modelo
  4. Desarrollo de servidor con REST API
  5. Desarrollo de cliente de tableta Android
  6. Dise√Īo y montaje de un rack para la colocaci√≥n de c√°maras y luces.
  7. Operación de prueba

Selección de equipamiento

Quiz√°s una de las tareas m√°s dif√≠ciles, si no la m√°s dif√≠cil, fue elegir c√°maras, lentes y luz con un presupuesto y tiempo limitados: el MVP deb√≠a hacerse en un mes y medio. En un par de d√≠as, Google me convirti√≥ en un experto en hardware para visi√≥n artificial. La elecci√≥n se hizo con c√°maras Basler y una luz de fondo pulsada de 6k l√ļmenes, sincronizada con la c√°mara. A favor de Basler (70 cuadros / seg, resoluci√≥n de hasta 1920x1024), su API Python habl√≥, lo que facilit√≥ en gran medida la integraci√≥n de todos los componentes del sistema, el √ļnico inconveniente es el precio de las c√°maras ~ 100 tr.

La elección de una lente para cámaras fue complicada por la falta de comprensión de la distancia focal y el ángulo de visión necesarios, tuve que correr riesgos, pero saqué una calculadora de lentes y una pizca de suerte.

Luz de fondo: se estableció experimentalmente el tiempo necesario para que los LED brillen, su tipo y los parámetros de la lente. Intenté 3 modificaciones de lentes diferentes para LED, con un ángulo de 30, 45, 60, finalmente elegí lentes mate con un ángulo de 45.





Ensamblar y probar la se√Īal de control de pulso para la c√°mara



Para el hardware del servidor, tomé Intel Core i7-7740X Kaby Lake, 46 gb de RAM, 1 TB SSD y 3x1080 Ti - esto es suficiente para predecir dos locomotoras de 3 secciones en no más de 2 minutos.

El enfriamiento de la granja colectiva de un emparedado de tarjetas de video sopla 10 grados.



Recogida de datos

Crear un conjunto de datos es una canci√≥n separada, nadie puede confiar este evento y, por lo tanto, me enviaron a una ciudad distante y poco conocida en las profundidades de nuestra vasta patria. Fotografi√© unos 400 pads en mi tel√©fono (!!!) . Mirando hacia el futuro, dir√© que los valientes empleados del dep√≥sito, aparentemente asustados por el auditor de Mosc√ļ, cambiaron todas las pastillas de las locomotoras por unas completamente nuevas y las pintaron con una nueva capa de pintura, fue divertido y aterrador mirarlo. Estaba esperando lo peor, aunque todav√≠a hab√≠a alrededor de 400 fotos de bloques completamente diferentes que hice en el dep√≥sito de Mosc√ļ.

Solo quedaba creer en un milagro, acumular aumentos, proponer heurísticas para eliminar segmentos erróneos, de los cuales había muchos, ya que no pensaba en anti-ejemplos.

En espera:



Realidad:





Aquí hay que decir que no hubo un solo ejemplo de bloques muy desgastados.

Entrenamiento modelo

El modelo con el codificador se_resnext50 y el decodificador con el bloque scse de este repositorio se mostró mejor, pero scse (implementación para pytorch) tuvo que eliminarse por razones de acelerar el proceso de predicción, porque tuvo que ser predicho en un minuto. Para el entrenamiento de modelos, se usó el marco Pytorch 1.0.1 , con una gran cantidad de aumentos de albumentaciones y un aumento de Flip Horizontal autoescrito para cambiar la clase cuando se muestra.

def train_transform(p=1): return Compose([ OneOf([ CLAHE(clip_limit=2), IAASharpen(), IAAEmboss(), RandomBrightnessContrast(brightness_limit=0.8, contrast_limit=0.8), HueSaturationValue(hue_shift_limit=50, sat_shift_limit=50, val_shift_limit=50), RGBShift(r_shift_limit=50, g_shift_limit=50, b_shift_limit=50), JpegCompression(quality_lower=30), RandomGamma(), GaussNoise() ], p=0.3), OneOf([ Blur(), MotionBlur(), MedianBlur(), ], p=0.3), ShiftScaleRotate(shift_limit=0.2, scale_limit=0.4, rotate_limit=5, p=0.5), Normalize(p=1) ], p=p) 

Como funci√≥n de p√©rdida, eleg√≠ la p√©rdida Lov√°sz-Softmax , se comport√≥ casi igual que bce + jaccard, pero mejor que BCE , que se ajusta demasiado en el marcado. La elecci√≥n de un algoritmo para determinar el n√ļmero de serie de un par de ruedas y bloques tambi√©n fue un desaf√≠o, hab√≠a opciones con el aprendizaje m√©trico , pero necesitaba mostrar r√°pidamente el resultado, y surgi√≥ la idea de marcar los bloques en las clases 1 y 2, donde 1 es la orientaci√≥n hacia la derecha y 2 es a la izquierda La red comenz√≥ a predecir no solo la m√°scara, sino la orientaci√≥n. Utilizando heur√≠stica simple, fue posible determinar de manera confiable los n√ļmeros de serie de bloques y juegos de ruedas, luego promediar las predicciones, de hecho, usar TTA con un ligero desplazamiento del objeto durante el movimiento y diferentes √°ngulos de iluminaci√≥n proporciona un buen resultado en la precisi√≥n de la m√°scara incluso con una resoluci√≥n de 320x320.

Por separado, la tarea era determinar el defecto en forma de cu√Īa de los bloques, hab√≠a muchas ideas de la Transformaci√≥n Huff , para marcar las esquinas / bordes del bloque con puntos / l√≠neas de diferentes clases. Al final, la opci√≥n gan√≥ c√≥mo los trabajadores lo hacen: debe retroceder 5 cm del borde estrecho y medir el ancho, si est√° dentro del rango normal, luego omita el bloque.

La tubería de capacitación fue tomada desde aquí por la segmentación de instrumentos robóticos MICCAI 2017 . El proceso de capacitación consta de tres etapas: capacitación con un codificador congelado, capacitación de toda la red y capacitación con CosineAnnealingLR . Las dos primeras etapas usan ReduceLROnPlateau .

Programación de un servidor REST y un cliente en Android

Para el servidor REST, eleg√≠ el matraz: es m√°s f√°cil no realizar un lanzamiento en 2 minutos. Decid√≠ hacer una base de datos para el almacenamiento con mis propias manos en forma de una estructura de carpetas simple y un archivo de estado actual. La aplicaci√≥n para la tableta en Android Studio, el beneficio de las √ļltimas versiones es solo un para√≠so para el desarrollador.

Dise√Īo y montaje de un rack para la colocaci√≥n de c√°maras y luces.

Record√© los viejos tiempos cuando hac√≠a estaciones de carga para veh√≠culos el√©ctricos, y esta experiencia fue muy √ļtil: decidimos hacerlo con bastidores de aluminio estructural impresos en una impresora 3D.





Llegando a la prueba!


El resultado super√≥ todas las expectativas. Para los especialistas en visi√≥n artificial, la tarea puede parecer bastante sencilla y simple. Sin embargo, tuve cierto escepticismo debido a dos cosas: en primer lugar, el conjunto de entrenamiento era peque√Īo y no conten√≠a casos l√≠mite, como bloques muy delgados; En segundo lugar, las pruebas se realizaron en condiciones de disparo e iluminaci√≥n muy diferentes.





Jaccard en la validación alcanza 0,96, visualmente las almohadillas están segmentadas muy claramente, agregan promedios sobre varias fotos y obtienen una muy buena precisión al estimar el ancho de las almohadillas. Durante las pruebas, resultó que puedes trabajar con los carros de otras locomotoras, pero tomar cámaras más rápidas:





En conclusión, quiero decir que la tecnología se ha mostrado muy bien y, en mi opinión, tiene un gran potencial en términos de eliminar el factor humano, reducir el tiempo de inactividad de una locomotora y hacer pronósticos.

Agradecimientos

¬°Gracias a la comunidad de ods.ai , sin su ayuda no podr√≠a hacer todo esto en tan poco tiempo! ¬°Muchas gracias a n01z3 , DL, que deseaba que tomara DL, por su inestimable consejo y extraordinaria profesionalidad! Muchas gracias al cerebro ideol√≥gico Vasily Manko (CEO, compa√Ī√≠a Aurorai), la mejor dise√Īadora Tatyana Brusova.

¡Nos vemos en el próximo episodio de la historia!

Aurorai, llc

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


All Articles