Red convolucional para clasificación, extremadamente sensible a la iluminación.

8

Entrené una red convolucional para clasificar las imágenes de un componente mecánico como buenas o defectuosas. Aunque la precisión de la prueba fue alta, me di cuenta de que el modelo funcionó mal en imágenes que tenían una iluminación ligeramente diferente.

Las características que estoy tratando de detectar son sutiles, y la iluminación parece hacer que el modelo llame a muchos falsos negativos. La mayoría, si no todos, de los datos de entrenamiento y prueba provienen de imágenes que fueron tomadas bajo iluminación difusa. Las nuevas imágenes en las que probé el modelo fueron tomadas con luces enfocadas.

Con la esperanza de que la ecualización del histograma ( CLAHE ) ayudara, hice la ecualización en las imágenes antes de alimentarla al modelo, hice esto para el entrenamiento y los datos de prueba. El problema era que la precisión era alta, pero el modelo parecía haber aprendido alguna otra correlación entre las imágenes y las etiquetas. Después de la ecualización, se destaca todo en la imagen, los defectos se vuelven aún más sutiles y difíciles de detectar incluso para el ojo humano.

La predicción del modelo cambió incluso cuando se disparó el mismo componente con la misma iluminación pero con la luz en diferentes orientaciones. Entonces, mi pregunta es, ¿qué puedo hacer, ya sea al final de los datos o con el modelo, para que sea robusto a los cambios en la iluminación (o el mismo tipo de iluminación, pero cambia a la orientación de la iluminación)?

dpk
fuente
¿Es factible recopilar más datos con variaciones en la iluminación? La diferencia entre la iluminación difusa y directa en una escena será difícil de simular o permitir en el preprocesamiento.
Neil Slater
@NeilSlater Sí, puedo recopilar más datos. Estoy más interesado en hacer que el modelo sea robusto a los cambios de iluminación, en una medida razonable. Una cosa que noté fue que, la predicción del modelo cambió incluso cuando el mismo componente fue filmado bajo la misma iluminación, pero con diferentes orientaciones. Hacer que el modelo sea robusto para diferentes tipos de iluminación puede ser difícil, ¿existen técnicas para hacerlo robusto para diferentes orientaciones de la misma iluminación?
dpk
Restar la media de las imágenes a menudo ayuda. Además, ¿qué tan bien están equilibrados sus datos? Si en el conjunto de datos de entrenamiento el 1% es de clase 1, el modelo no aprenderá nada y clasificará a todos como clase 0.
Alex
@Alex No he intentado la resta media. Gracias por la sugerencia. Además, mi conjunto de datos está bien equilibrado. Tengo 2 clases y cada una representa el 50% de los datos.
dpk

Respuestas:

2

Se llama sobreajuste, su modelo aprendió a predecir etiquetas basadas en características que en realidad no son responsables de predicciones particulares, por lo que cuando no se presentan no puede predecir correctamente. Aunque hay varias formas de lidiar con el sobreajuste (por ejemplo, Dropout), lo que parece necesitar es el aumento de imagen. Es una forma simple pero muy poderosa de entrenar una red neuronal robusta. Para su caso, simplemente simule diferentes condiciones de iluminación, por ejemplo, aumentando / disminuyendo los valores de píxeles al azar para sus entradas para las mismas etiquetas. También es una práctica común agregar ruido aleatorio, rotaciones aleatorias, voltear, etc.

Para obtener más información, consulte esta respuesta de stackoverflow.

Además, recientemente publiqué un proyecto en el que utilicé varias funciones de aumento que pueden resultarle útiles. Ver: https://github.com/Naurislv/P12.1-Semantic-Segmentation/blob/master/augmentation.py

Nauris Dorbe
fuente