Segmentación semántica

Tres cosas que es necesario saber

¿Qué es la segmentación semántica?

La segmentación semántica es un algoritmo de Deep Learning que asocia una etiqueta o categoría a cada píxel presente en una imagen. Se utiliza para reconocer un conjunto de píxeles que conforman distintas categorías. Por ejemplo, un vehículo de conducción autónoma necesita identificar vehículos, peatones, señales de tráfico, aceras y otros elementos de la carretera.

La segmentación semántica se utiliza en numerosas aplicaciones, como la conducción autónoma, la generación de imágenes médicas y la inspección industrial.

Un sencillo ejemplo de segmentación semántica es la separación de las imágenes en dos clases distintas. Por ejemplo, en la Figura 1, la imagen de una persona en la playa se empareja con otra versión en la que se muestran los píxeles de la imagen segmentados en dos clases distintas: la persona y el fondo.

Figura 1: imagen y píxeles etiquetados.

La segmentación semántica no se limita a solo dos categorías. Es posible modificar el número de categorías para clasificar el contenido de la imagen. Por ejemplo, esta misma imagen se podría segmentar en cuatro clases: persona, cielo, agua y fondo.

¿En qué se diferencia la segmentación semántica de la detección de objetos?

La segmentación semántica puede ser una útil alternativa a la detección de objetos, pues permite que el objeto de interés abarque diferentes áreas de la imagen en el nivel de píxel. Esta técnica detecta claramente objetos que tienen una forma irregular, al contrario que la detección de objetos, en donde los objetos deben encajar en un cuadro delimitador (Figura 2).

Figura 2: detección de objetos con cuadros delimitadores para identificar objetos.

¿Cómo se utiliza la segmentación semántica?

Debido a que la segmentación semántica etiqueta los píxeles de una imagen, es más precisa que otras formas de detección de objetos. Esto hace que la segmentación semántica resulte muy útil para aplicaciones de diversas industrias que requieren mapas de imágenes precisos, como:

  • Conducción autónoma: para identificar un camino transitable para los vehículos al separar la carretera de los distintos obstáculos, como peatones, aceras, postes y otros vehículos
  • Inspección industrial: para detectar defectos en materiales, como la inspección de obleas
  • Generación de imágenes por satélite: para identificar montañas, ríos, desiertos y otros elementos del terreno
  • Generación de imágenes médicas: para analizar y detectar anomalías cancerosas en las células
  • Visión robótica: para identificar y explorar objetos y áreas del terreno

Figura 3: segmentación semántica de una imagen satélite multiespectral.

Cómo funciona la segmentación semántica

El proceso de entrenamiento de una red de segmentación semántica para clasificar imágenes consta de estos tres pasos:

  1. Analizar un conjunto de imágenes con píxeles etiquetados.
  2. Crear una red de segmentación semántica.
  3. Entrenar la red para clasificar imágenes en categorías de píxeles.
  4. Evaluar la precisión de la red.

Ejemplo: Aplicación de conducción autónoma

La secuencia de la Figura 4 muestra un ejemplo del mundo real de segmentación semántica utilizada para conducción autónoma. Las imágenes de la carretera se segmentan automáticamente de los otros vehículos. En el apartado siguiente se muestra cómo se crean estas redes.

Figura 4: segmentación semántica para una aplicación de conducción autónoma.

Comprensión de la arquitectura

Un enfoque habitual para abordar la segmentación semántica consiste en crear una red SegNet, que se basa en una arquitectura de red neuronal convolucional (CNN). En la Figura 5 se muestra una arquitectura típica de CNN.

Esta CNN clasifica toda la imagen en una de las muchas categorías predefinidas.

Figura 5: estructura típica de una CNN.

Para que la clasificación se realice en el nivel de píxel en vez de la imagen al completo, se puede agregar una implementación inversa de una CNN. El proceso de aumento de la dimensión espacial (upsampling) se realiza el mismo número de veces que el proceso de reducción de la dimensión espacial (downsampling) para garantizar que la imagen final tenga el mismo tamaño que la imagen de entrada. Por último, se utiliza una capa de salida de clasificación de píxeles, que asigna cada píxel a una clase concreta. Esto conforma una arquitectura de codificador-decodificador, la cual permite la segmentación semántica.

Figura 6: CNN aplicando funciones relacionadas con imágenes en cada capa y luego reduciendo la dimensión espacial de la imagen mediante una capa pooling (verde). Este proceso se repite varias veces en la primera mitad de la red. A la salida de la primera mitad de este diagrama le sigue una cantidad idéntica de capas de anulación de pooling (naranja).

Uso de MATLAB para segmentación semántica

 

En MATLAB, el flujo de trabajo para realizar segmentación semántica consta de estos cinco pasos:

  1. Etiquetar los datos u obtener datos etiquetados.
  2. Crear un datastore, almacén de datos, para las imágenes originales y otro para las imágenes etiquetadas.
  3. Dividir los almacenes de datos.
  4. Importar una CNN y modificarla para convertirla en una SegNet.
  5. Entrenar y evaluar la red.

PASO 1: Etiquetar los datos u obtener datos etiquetados.

Los modelos de deep learning se basan en enormes cantidades de datos, y la segmentación semántica no es ninguna excepción. Una opción es descargar datos etiquetados en Internet. Si ya tiene su propio conjunto de datos, puede utilizar la aplicación Image Labeler de MATLAB. Puede utilizar este conjunto de datos para entrenar una red SegNet.

Figura 7: aplicación Image Labeler de MATLAB para etiquetar imágenes para segmentación semántica. 

Aprenda más

PASO 2: Crear un almacén de datos para las imágenes originales y otro para las imágenes etiquetadas.

Cuando se trabaja con enormes cantidades de datos, a menudo no es posible cargar toda la información en la memoria. Para gestionar grandes conjuntos de datos, puede utilizar un datastore, almacén de datos. Un almacén de datos contiene la ubicación de los archivos a los que desea acceder, y le permite cargarlos en la memoria solo cuando tenga que trabajar con ellos.

Para crear una red SegNet, necesita dos almacenes de datos:

  1. ImageDatastore, que contiene las imágenes originales
  2. PixelLabelDatastore, que contiene las imágenes etiquetadas

PASO 3: Dividir los almacenes de datos.

PASO 3: Dividir los almacenes de datos.

  1. El conjunto de entrenamiento, utilizado para entrenar la red SegNet
  2. El conjunto de prueba, utilizado para evaluar la precisión de la red

Figura 8: escena de una carretera en donde se muestran la imagen en color (izquierda) y los correspondientes píxeles etiquetados (derecha).

PASO 4: Importar una CNN y modificarla para convertirla en una SegNet.

Cuando cree una red SegNet, deberá dividir el almacén de datos en dos partes:

  1. El conjunto de entrenamiento, utilizado para entrenar la red SegNet
  2. El conjunto de prueba, utilizado para evaluar la precisión de la red

Figura 9: creación de la arquitectura de SegNet con una sola línea de código en MATLAB.

PASO 5: Entrenar y evaluar la red.

Este último paso consiste en definir los hiperparámetros de la red y entrenarla.

Cómo obtener más información sobre la segmentación semántica

Entre los productos que admiten la utilización de segmentación semántica para análisis de imágenes se incluyen MATLAB®, Computer Vision System Toolbox™ para etiquetado de píxeles y Deep Learning Toolbox™ para creación y entrenamiento de la red.

El entrenamiento y la predicción está soportado por las GPUs CUDA® con capacidad de cálculo 3.0 o superior. Se recomienda utilizar GPU y esto requiere Parallel Computing Toolbox™.

Referencia de software

Consiga una prueba gratuita

Treinta días de exploración a su alcance.

¿Tiene preguntas?

Hablar con un experto en Deep Learning