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)?
Respuestas:
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
fuente