Redes neuronales convolucionales con imágenes de entrada de diferentes dimensiones - Segmentación de imagen

12

Me enfrento al problema de tener imágenes de diferentes dimensiones como entradas en una tarea de segmentación. Tenga en cuenta que las imágenes ni siquiera tienen la misma relación de aspecto.

Un enfoque común que encontré en general en el aprendizaje profundo es recortar las imágenes, como también se sugiere aquí . Sin embargo, en mi caso no puedo recortar la imagen y mantener su centro o algo similar ya que en la segmentación quiero que la salida tenga las mismas dimensiones que la entrada.

Este documento sugiere que en una tarea de segmentación se puede alimentar la misma imagen varias veces a la red pero con una escala diferente y luego agregar los resultados. Si entiendo este enfoque correctamente, solo funcionaría si todas las imágenes de entrada tienen la misma relación de aspecto. Por favor, corríjame si estoy equivocado.

Otra alternativa sería simplemente cambiar el tamaño de cada imagen a dimensiones fijas. Creo que esto también fue propuesto por la respuesta a esta pregunta. Sin embargo, no se especifica de qué manera se redimensionan las imágenes.

Pensé en tomar el ancho y la altura máximos en el conjunto de datos y cambiar el tamaño de todas las imágenes a ese tamaño fijo en un intento por evitar la pérdida de información. Sin embargo, creo que nuestra red podría tener dificultades con las imágenes distorsionadas, ya que los bordes de una imagen podrían no ser claros. ¿Cuál es posiblemente la mejor manera de cambiar el tamaño de sus imágenes antes de alimentarlas a la red?

¿Hay alguna otra opción que no conozco para resolver el problema de tener imágenes de diferentes dimensiones?

Además, ¿cuál de estos enfoques cree que es el mejor teniendo en cuenta la complejidad computacional pero también la posible pérdida de rendimiento por parte de la red?

Le agradecería si las respuestas a mis preguntas incluyen algún enlace a una fuente si hay una. Gracias.

MattSt
fuente

Respuestas:

4

Daré una respuesta más completa.

Hay 2 problemas que podrías enfrentar.

1) Su red neuronal (en este caso red neuronal convolucional) no puede aceptar físicamente imágenes de diferentes resoluciones. Este suele ser el caso si uno tiene capas totalmente conectadas, sin embargo, si la red es totalmente convolucional, entonces debería poder aceptar imágenes de cualquier dimensión. Totalmente convolucional implica que no contiene capas completamente conectadas, sino solo capas convolucionales, de agrupación máxima y de normalización por lotes, todas las cuales son invariables para el tamaño de la imagen. Exactamente este enfoque fue propuesto en este documento innovador Redes totalmente convolucionales para la segmentación semántica . Tenga en cuenta que su arquitectura y métodos de capacitación pueden estar un poco desactualizados ahora. Enfoque similar se utilizó en ampliamente utilizadoU-Net: redes convolucionales para la segmentación de imágenes biomédicas y muchas otras arquitecturas para la detección de objetos, estimación de pose y segmentación.

2) Las redes neuronales convolucionales no son invariantes de escala. Por ejemplo, si uno entrena a los gatos del mismo tamaño en píxeles en imágenes de resolución fija, la red fallará en imágenes de gatos de tamaños más pequeños o más grandes. Para superar este problema, conozco dos métodos (podría estar más en la literatura): 1) entrenamiento a múltiples escalas de imágenes de diferentes tamaños en redes totalmente convolucionales para hacer que el modelo sea más robusto a los cambios de escala; y 2) tener arquitectura multiescala. Un lugar para comenzar es mirar estos dos documentos notables: Redes de pirámides de características para la detección de objetos y representaciones de alta resolución para etiquetar píxeles y regiones .

Anuar Y
fuente
2

Suponiendo que tiene un gran conjunto de datos, y está etiquetado en forma de píxeles, una forma hacky de resolver el problema es preprocesar las imágenes para que tengan las mismas dimensiones insertando márgenes horizontales y verticales de acuerdo con sus dimensiones deseadas, en cuanto a las etiquetas agrega salida extra ficticia para los píxeles de margen, de modo que al calcular la pérdida podría enmascarar los márgenes.

Fadi Bakoura
fuente
¿Cómo se trata la normalización en estos casos? ¿Supongo que solo normaliza los píxeles de una imagen que no están incluidos en su margen?
MattSt
Sí, debido a que su proceso de generación de datos tiene diferentes tamaños, por lo que si incluye los márgenes, cambiará la distribución de datos. los márgenes se insertan para agrupar las muestras de entrenamiento en lotes porque su problema necesita generar un vector de salida fijo.
Fadi Bakoura
0

Creo que este documento tendrá ideas útiles para usted.

Felix Goldberg
fuente
Se supone que no debe dar respuestas de solo enlace.
JohnnyApplesauce
0

Como desea realizar la segmentación, puede usar U-Net. No tiene unidades completamente conectadas. Por lo tanto, el tamaño de la entrada no importará.

ganLover
fuente
3
Creo que deberías dar más detalles sobre tus puntos.
DuttaA
0

Creo que puede cambiar el tamaño de píxeles de su imagen y convertir rgb a binario o entero para el siguiente paso

Danny Lukmana
fuente
1
Hola y bienvenido a AI Stack Exchange. ¿Podría por favor ampliar su respuesta? Considere agregar más contexto para respaldar su respuesta y quizás agregar referencias.
Jaden Travnik
0

Intente cambiar el tamaño de la imagen a las dimensiones de entrada de su arquitectura de red neuronal (manteniéndola fija en algo así como 128 * 128 en una arquitectura estándar de U-net 2D) utilizando la interpolación de vecino más cercano técnica de . Esto se debe a que si cambia el tamaño de su imagen utilizando cualquier otra interpolación, puede alterar las etiquetas de verdad del terreno. Esto es particularmente un problema en la segmentación. No se enfrentará a ese problema cuando se trata de clasificación.

Intenta lo siguiente:

import cv2 
resized_image = cv2.resize(original_image, (new_width, new_height), 
                           interpolation=cv2.INTER_NEAREST)
Shalabh Gupta
fuente