Estoy comenzando un proyecto en el que pretendo realizar una regresión con redes neuronales utilizando imágenes. Se trata de imágenes simples de partículas en un campo con poco contraste. La forma de las partículas cambia en respuesta a una determinada sustancia química. Tengo previsto trazar el sistema para predecir la concentración de la sustancia química, utilizando mis datos de imagen (unos cientos de imágenes, con >20 partículas/imagen de media). Me gustaría tener su opinión experta, si debo segmentar las imágenes antes de alimentar el modelo (keras/tensorflow), o simplemente darle las imágenes en bruto? Debido al bajo contraste, la segmentación no es perfecta (segmenta correctamente el ~85% de las partículas, y el resto se pierde o se interconecta), por lo que la segmentación creará un sesgo. Por otra parte, en muchas imágenes, la mayor parte de la imagen es fondo y no partículas, lo que puede hacer más difícil encontrar las características correctas. Entonces, ¿qué opinas?
Respuesta
¿Demasiados anuncios?Supongo que desea que el modelo Keras clasifique la imagen, es decir, si las partículas en una imagen tienen una forma particular en respuesta a la adición de un producto químico (por ejemplo, por el bien del argumento, digamos una forma cuadrada), entonces vamos a dar a la imagen un valor de 1. De lo contrario, la imagen tiene un valor de 0.
En este caso, habría que segmentar por la sencilla razón de que la CNN (red neuronal convolucional) necesita conocer los criterios de distinción de cada imagen para poder clasificar correctamente.
Como ejemplo (y esto es puramente hipotético), digamos que una sustancia química induce partículas circulares, mientras que otra induce partículas cuadradas. En ese caso, se dividirían los datos de entrenamiento y de prueba en carpetas separadas de la siguiente manera:
- Datos de entrenamiento (80% de imágenes circulares).
- Datos de entrenamiento (80% de imágenes cuadradas).
- Datos de prueba (20% de imágenes circulares).
- Datos de prueba (20% de imágenes cuadradas).
Por supuesto, esto es asumiendo que usted es capaz de distinguir entre las imágenes en primera instancia y clasificarlas manualmente.
A continuación, se construye la red neuronal para que se entrene con estos datos y luego clasifique correctamente una imagen no vista (es decir, una que no esté incluida en los datos de entrenamiento o de prueba como un 0 o un 1).
Si le sirve de ayuda, puede ver un ejemplo de cómo se puede utilizar una CNN para distinguir entre una imagen de un coche y un avión en este ejemplo: Reconocimiento de imágenes con Keras: Redes neuronales convolucionales
Esencialmente, sus pasos usando Keras son:
- Segmentar los datos como se ha descrito anteriormente
- Construir la CNN
- Entrenar el modelo a lo largo de un determinado número de épocas hasta que se maximice la precisión del entrenamiento y la validación
- Clasificar una imagen no vista basándose en el modelo entrenado
Espero que esto ayude.