# Segmentación (procesamiento de imágenes)

La segmentación es uno de los problemas generales del campo de la visión artificial y consiste en dividir una imagen digital en varias regiones (grupos de píxeles) denominadas segmentos. Más concretamente, la segmentación es un proceso de clasificación por píxel que asigna una categoría a cada píxel de la imagen analizada. Este problema general se divide en problemas especializados, dando lugar por ejemplo a:
* segmentación por color
* segmentación por texturas
* superpíxel
* segmentación semántica
Cada problema especializado le otorga un significado propio a las categorías que se usan en la clasificación de los píxeles. Uno de los casos más elementales de segmentación es la umbralización, un tipo particular de segmentación por color con solo dos categorías: claro y oscuro. Cada píxel se clasifica como claro u oscuro comparando su intensidad con una intensidad de referencia dada denominada umbral. Por otro lado, uno de los casos más sofisticados es la segmentación semántica que clasifica objetos diversos. Mask R-CNN es un segmentador semántico que clasifica 90 categorías del dataset COCO, reconociendo personas, vehículos, vegetación, calle, vereda, edificios, y demás elementos típicos en escenas urbanas.
El objetivo de la segmentación es localizar regiones con significado. La segmentación se usa tanto para localizar objetos como para encontrar sus bordes dentro de una imagen. El resultado de la segmentación de una imagen es un conjunto de segmentos que cubren toda la imagen sin superponerse. Se puede representar como una imagen de etiquetas (una etiqueta para cada píxel) o como un conjunto de contornos.

## Elementos y proceso de segmentación

Cada algoritmo de segmentación discrimina una determinada cantidad de clases o categorías, y a cada categoría le asigna una etiqueta o identificador, un valor entero que el algoritmo usa para expresar esa categoría. La mínima clasificación posible es la que discrimina dos categorías; es un caso frecuente y se la denomina segmentación binaria.
Todos los algoritmos de segmentación operan sobre una imagen, típicamente a color o en blanco y negro, y generan otra imagen, artificial, del mismo tamaño que la analizada, en la que cada píxel expresa una etiqueta. Las regiones formadas por píxeles vecinos con la misma etiqueta se denomina segmento. Los segmentos se pueden interpretar como piezas de un rompecabezas: no se superponen y entre todos cubren la imagen completa.
La imagen resultante de una segmentación está preparada para ser consumida computacionalmente, pero no para ser visualizada. Para presentar a un usuario el resultado de una segmentación es necesaria una etapa de visualización que asigna colores fácilmente discernibles a cada etiqueta.
Alternativamente, en lugar de usar una imagen de etiquetas, el resultado de una segmentación se pueden representar mediante contornos, líneas cerradas de formas arbitrarias que señalan los bordes de los segmentos.

### Glosario

La segmentación de imágenes utiliza jerga de visión artificial y de aprendizaje automático, que se resume a continuación:
* etiqueta: número entero que identifica una categoría
* segmento: grupo de píxeles conectados (vecinos) con una misma categoría
* segmentación: proceso que produce una imagen de etiquetas, asignando una etiqueta para cada píxel de la imagen original

## Taxonomía

Los diversos métodos de segmentación se clasifican de varias maneras.
* Segmentación binaria
** la que distingue solo dos categorías
** las que no son binarias se denominan segmentación múltiple
* Segmentación asistida o semiautomática
** algoritmos que requieren anotaciones previas, señalando regiones a analizar o a distinguir
** una persona suele hacer anotaciones marcando zonas sobre la imagen
** en algunos casos es posible automatizar estas anotaciones haciendo uso de otros algoritmos de visión artificial
* Segmentación semántica
** distingue categorías de alto nivel significante, usualmente objetos
* Segmentación instanciada
** distingue individuos de la misma categoría
* Segmentación panóptica
** combinación de la segmentación semántica e instanciada, reconociendo individuos de varias categorías
* Segmentación basada en modelos de aprendizaje profundo (deep learning)

### Segmentación binaria

Los segmentadores binarios son los que tienen solo dos categorías, usualmente denominadas frente y fondo. Su uso principal es el de extraer un segmento con el objeto buscado.
La umbralización es la segmentación más básica y simple, es un ejemplo de segmentación binaria. Opera sobre cada píxel de manera independiente clasificándolos por su intensidad comparada con un umbral dado: si es más claro corresponde al frente, si no, al fondo.

### Segmentación asistida o semiautomática

Estos métodos requieren que el usuario aporte indicaciones sobre la región de la imagen a segmentar. Los mayores exponentes de este tipo de segmentación son el algoritmo Watershed, cuyo concepto se remonta a 1979, y GrabCut, de 2004.

#### Watershed

Requiere que se le asignen etiquetas a algunos píxeles, a los que se denominan semillas; el algoritmo amplía paulatinamente la región a partir de ellas buscando los bordes entre segmentos. Si el resultado no es el esperado, el usuario debe aumentar la cantidad de marcas especialmente en la zona que se debe cambiar.

#### GrabCut

Es un algoritmo más moderno pero anterior a las redes convolucionales. Es un segmentador binario que intenta capturar el objeto dominante en la imagen. Requiere que el usuario recuadre el objeto: la zona fuera del recuadro se toma como semilla del segmento de fondo.

#### Métodos interactivos

Livewire es una técnica interactiva que traza el borde del segmento a partir de puntos indicados por el usuario.
SImple iterative object extraction es una técnica ampliamente adoptada y más avanzada que la anterior, de 2006 y de código abierto.

### Segmentación basada en aprendizaje profundo

La introducción de las redes convolucionales (CNN, convolutional neural networks) en la visión artificial fue un gran hito en 2012, que abrió un campo de investigación intensiva con resultados sorprendentes. La rápida evolución de las CNN llegó al campo de la segmentación dando un salto cualitativo en 2015 de la mano de FCN, SegNet y ResNet, marcando un antes y un después: prácticamente todos los algoritmos de segmentación posteriores a 2015 están basados en CNN y resuelven problemas complejos y de alto nivel como la segmentación semántica, instanciada y panóptica dejando obsoletos a sus predecesores. Por este motivo los anteriores a 2015 son calificados como "clásicos", y solo sobrevivieron a la obsolescencia los dedicados a segmentaciones de bajo nivel, como la umbralización o la segmentación por color y algunas notables excepciones como GrabCut y Watershed.
* Segmentación semántica distinguiendo 4 categorías: muñeco de peluche, rosa, vaso y fondo.
El estado del arte en 2018 estuvo dado por el modelo Mask R-CNN, segmentador semántico e instanciado entrenado sobre el dataset COCO, que distingue 90 categorías de objetos comunes.

## Métodos

Existen innumerables algoritmos de segmentación, y se crean nuevos cada día, muchos de ellos altamente especializados. A continuación se indican algunos algoritmos famosos, y luego se describen diversas técnicas de segmentación.
* Umbralización (thresholding)
* Watershed
* GrabCut
* Livewire
* SImple iterative object extraction
* Mask R-CNN

### Segmentación del color

Consiste en clasificar píxeles exclusivamente por su color. La umbralización pertenece a esta categoría, y salvo esta excepción la segmentación por color no tiene particular relevancia en problemas de visión artificial, pero sí lo tiene en procesamiento de imágenes, por los efectos visuales que logra.
Hay tres métodos principales de segmentación por color:
* Umbralización, segmentación binaria por intensidad del píxel
* basado en histograma, de cuyo análisis se identifican modas que se adoptan como color base para una categoría
* de agrupamiento, que es un caso particular de segmentación basado en histograma, donde los rangos de color de cada categoría se determinan con un algoritmo de clustering, típicamente K-means.

#### Basados en histograma

Los métodos basados en el histograma son muy eficientes en comparación con otros métodos de segmentación de la imagen, ya que normalmente requieren solo una pasada por los pixeles. En esta técnica, un histograma se calcula a partir de todos los píxeles de la imagen, y los picos y valles en el histograma se utilizan para localizar los grupos en la imagen (el color o la intensidad pueden ser usados como medida). Un refinamiento de esta técnica consiste en aplicar de forma recursiva el método de búsqueda de histograma a los clusters de la imagen con el fin de dividirlos en grupos más pequeños. Esto se repite con las agrupaciones, cada vez más pequeños hasta que no se puedan formar más agrupaciones. Una desventaja del método de búsqueda de histograma es que puede ser difícil de identificar los picos y valles importantes en la imagen.

### De agrupamiento (Clustering)

El algoritmo de K-means es una técnica iterativa que se utiliza para dividir una imagen en K clusters. El algoritmo básico es:
* Escoger K centros de clusters, ya sea de forma aleatoria o basándose en algún método heurístico .
* Asignar a cada píxel de la imagen el clúster que minimiza la varianza entre el pixel y el centro del clúster.
* Recalcular los centros de los clusters haciendo la media de todos los pixeles del clúster.
* Repetir los pasos 2 y 3 hasta que se consigue la convergencia (por ejemplo, los pixeles no cambian de clusters).
En este caso, la varianza es la diferencia absoluta entre un píxel y el centro del clúster. La diferencia se basa típicamente en color, la intensidad, la textura, y la localización del pixel, o una combinación ponderada de estos factores. El número K se puede seleccionar manualmente, aleatoriamente, o por una heurística. Este algoritmo garantiza la convergencia, pero puede devolver una solución que no sea óptima. La calidad de la solución depende de la serie inicial de clusters y del valor de K. En estadística y aprendizaje automático, el algoritmo de las k-medias es un algoritmo de agrupamiento para dividir objetos en k grupos, donde k <n. Es similar al algoritmo de maximización de expectativas para las mezclas de gaussianas ya que ambos pretenden encontrar los centros de agrupaciones naturales de los datos. El modelo requiere que los atributos del objeto correspondan a los elementos de un espacio vectorial. El objetivo es intentar alcanzar la mínima varianza total entre clusters, o, la función de error al cuadrado. El algoritmo de las k-medias fue inventado en 1956. La forma más común del algoritmo usa una heurística de refinamiento conocido como el algoritmo de Lloyd. El algoritmo de Lloyd comienza dividiendo los puntos de entrada en k conjuntos iniciales, ya sea al azar o usando algunos datos heurísticos y a continuación, calcula el punto medio o centro de gravedad de cada conjunto. Se construye una nueva partición, asociando cada punto con el centro de gravedad más cercano. Luego se recalculan los baricentros es para los nuevos clusters, y el algoritmo se repite alternando la aplicación de estos dos pasos hasta que la converja, que se obtiene cuando los puntos ya no cambiar de cluster (o los centros de gravedad ya no se modifican). Los algoritmos de Lloyd y de las K-medias a menudo se utilizan como sinónimos, pero en realidad el algoritmo de Lloyd es una heurística para resolver el problema de las K-medias, como ocurre con ciertas combinaciones de puntos de partida y baricentros, el algoritmo de Lloyd puede converger a una solución incorrecta. Existen otras variantes, pero el algoritmo de Lloyd es el más popular, porque converge muy rápidamente. En cuanto al rendimiento, el algoritmo no garantiza que se devuelva un óptimo global. La calidad de la solución final depende en gran medida del conjunto inicial de clusters, y puede, en la práctica, ser mucho más pobre que el óptimo global. Dado que el algoritmo es extremadamente rápido, es un método común ejecutar el algoritmo varias veces y devolver las mejores agrupaciones obtenidas. Un inconveniente del algoritmo de las k-medias es que el número de clusters k es un parámetro de entrada. Una elección inadecuada de k puede dar malos resultados. El algoritmo también asume que la varianza es una medida adecuada de la dispersión del cluster.
* Demostración del algoritmo estándar
* 1) Se selecionan k puntos de la imagen, 3 en este caso(los mostrados en color).
* 2) Se crean k clusters a partir de los puntos anteriores.
* 3) El centro de gravedad de cada uno de los grupos k se convierte en el nuevo medio.
* 4) Los pasos 2 y 3 se repiten hasta que se alcance la convergencia.

#### Detección de bordes

La detección de bordes es un campo bien desarrollado por sí mismo en el procesamiento de imágenes. Los límites de regiones y los bordes están estrechamente relacionados, ya que a menudo hay un fuerte ajuste en la intensidad en los límites de las regiones. Las técnicas de detección de bordes pueden ser usadas como otra técnica de segmentación más. Los bordes identificados por la detección de bordes en ocasiones están desconectados. Para segmentar un objeto a partir de una imagen sin embargo, es necesario que los bordes formen figuras cerradas.

### De crecimiento de regiones

El primer método de crecimiento de regiones fue el método de crecimiento de regiones a partir de semillas. Este método toma un conjunto de semillas como entrada junto con la imagen. Las semillas marcan cada uno de los objetos que tienen que ser segmentados. Las regiones crecen iterativamente mediante la comparación de todos los píxeles vecinos no asignados a ninguna región. La diferencia entre el valor de la intensidad de un pixel y el de la media de la región, δ, se utiliza como una medida de similitud. Cada pixel se asigna a la región con la que su diferencia con la media es menor, de esta forma todos los pixeles se asignan a sus respectivas regiones. Este proceso continúa hasta que todos los pixeles tienen asignada una región. El método de crecimiento de regiones por semillas requiere semillas como entrada adicional. Los resultados de la segmentación dependen de la elección de las semillas. El ruido en la imagen puede hacer que las semillas queden mal colocadas. El método de crecimiento de regiones sin semillas es un algoritmo modificado que no requiere semillas explícitas. Comienza con una única región A1 - el píxel elegido aquí no influyen significativamente en la segmentación final. En cada iteración se considera los píxeles vecinos de la misma manera que con el algoritmo anterior. Se diferencia del algoritmo el método de crecimiento de regiones a partir de semillas en que si el mínimo δ es menor que un umbral predefinido T entonces se agrega a la región respectiva Aj. Si no, entonces el píxel se considera significativamente diferente de todas las actuales regiones Ai y se crea una nueva región An + 1 con ese píxel. Una variante de esta técnica, propuesta por Haralick y Shapiro (1985), se basa en la intensidad de píxel. La media y la dispersión de una región y la intensidad del píxel candidato se utiliza para calcular un test estadístico. Si la prueba estadística es suficientemente pequeña, el píxel se añade a la región, y la media de la región y de dispersión se vuelven a calcular. De lo contrario, el píxel es rechazado, y se utiliza para formar una nueva región.

### Del conjunto de nivel

La propagación de curvas es una técnica popular en el análisis de imágenes para la extracción de objetos, seguimiento de objetos, la reconstrucción en 3D, etc. La idea central de este enfoque consiste en desarrollar una curva hacia el menor potencial de una función de coste que en su definición refleja la tarea a la que está dirigida e impone ciertas limitaciones de suavidad. Las técnicas de Lagrange se basan en la parametrización del contorno de acuerdo con alguna estrategia de muestreo y luego desarrollar cada elemento de acuerdo a la imagen y sus condiciones internas. Si bien esta técnica puede ser muy eficiente, también sufre varias limitaciones, como decidir sobre la estrategia de muestreo, la estimación de las propiedades geométricas internas de la curva, el cambio de su topología, abordar los problemas de dimensiones superiores, etc. En cada caso, una ecuación en derivadas parciales llamada la ecuación del conjunto de nivel es resuelto por diferencia finita. El método del conjunto de nivel fue propuesto inicialmente para realizar un seguimiento de interfaces móviles por Osher y Sethian en 1988 y se ha diseminado a través de varios dominios de imágenes a finales de los noventa. Se puede utilizar para hacer frente de manera eficiente al problema de la propagación de la curva/superficie/etc. de una manera implícita. La idea central consiste en representar la evolución del contorno usando una función con signo, donde su nivel cero corresponde al contorno actual. Entonces, de acuerdo a la ecuación de movimiento de las curvas de nivel, se puede obtener fácilmente un flujo similar de la superficie implícita que cuando se aplica al nivel de cero reflejará la propagación del contorno. El método del conjunto de nivel tiene numerosas ventajas: es implícito, no tiene parámetros, ofrece una manera directa para estimar las propiedades geométricas de la estructura que evoluciona, puede cambiar la topología y es intrínseco. Además, pueden utilizarse para definir un marco de optimización como el propuesto por Zhao, Merriman y Osher en 1996. Por lo tanto, se puede concluir que es un marco muy conveniente para hacer frente a numerosas aplicaciones de visión artificial y análisis de imágenes médicas. Además, la investigación en varias estructuras de datos para representar los conjuntos de nivel ha dado lugar a implementaciones muy eficientes de este método.

### De particionamiento gráfico

Los métodos de particionamiento gráfico se pueden usar con eficacia en la segmentación de imágenes. En estos métodos, la imagen se modela como un grafo ponderado no dirigido. Por lo general, un pixel o un grupo de pixeles se asocian con los nodos y los pesos de las aristas definen la similitud entre los píxeles vecinos. El gráfico (imagen) se divide de acuerdo a un criterio de diseño para modelar "bien" los clusters. Cada una de las particiones de nodos (pixeles) da como salida de estos algoritmos los objetos segmentados que hubiese en la imagen. Algunos algoritmos populares de esta categoría son cortes normalizados, camino aleatorio, el mínimo corte, particionamiento isoperimétrico y árboles de expansión mínima.

### Basados en modelos

La hipótesis central de este enfoque es que las estructuras de interés tienen una forma geometría repetitiva. Por lo tanto, se puede buscar un modelo probabilístico para explicar la variación de la forma de la estructura y luego cuando se segmenta una imagen se imponen limitaciones para tomar la imagen como el modelo elegido a priori. Esta tarea implica:
* La selección de los ejemplos de entrenamiento (ejemplos que se usan para probar los modelos).
* La representación probabilística de la variación de los ejemplos seleccionados.
* La inferencia estadística entre el modelo y la imagen.
El estado del arte para la segmentación basada e en el conocimiento implica la forma activa y los modelos de apariencia, contornos activos y una plantilla deformable y métodos basados en niveles.

### Segmentación multi-escala

Las segmentaciones de la imagen se calculan en múltiples escalas y a veces se propaga de gran escala a pequeña escala. Los criterios de segmentación pueden ser arbitrariamente complejos y se pueden tener en cuenta tanto criterios globales como locales. Un requisito común es que cada región debe estar conectada en algún sentido.

#### Segmentación jerárquica de señales unidimensionales

El trabajo de Witkin en el espacio escalar incluye la noción de que una señal unidimensional podría ser inequívocamente segmentado en regiones, con un parámetro de control de la escala de segmentación. Una observación clave es que los pases por cero de las derivadas segundas (mínimos y máximos de la primera derivada o pendiente) de las versiones multi-escala-alisadas de una señal forman un nido de árbol, que define las relaciones jerárquicas entre los segmentos a diferentes escalas. En concreto, la pendiente en los extremos a gran escala se refiere a las correspondientes características a pequeña escala. Cuando una pendiente máxima y otra mínima se cruzan entre sí en una escala mayor, los tres segmentos que se separaron se funden en un segmento, así se define la jerarquía de los segmentos mientras busca mantener los datos de manera jerárquica.

#### Segmentación de imágenes y el boceto original

Existen numerosos trabajos de investigación en esta área, de los cuales unos pocos han llegado a un estado en el que puede ser aplicado con la intervención manual interactivo (por lo general en aplicación de imágenes médicas) o totalmente automática. La siguiente es una breve reseña de algunas de las ideas principales ideas en las que se basan las investigaciones actuales. La estructura de anidación que Witkin describe es, sin embargo, específica para las señales de una sola dimensión y no es trivial la aplicación a las imágenes de dimensiones superiores. Sin embargo, esta idea general ha inspirado a algunos otros autores a investigar el paso de esquemas de grande escala a pequeña escala para la segmentación de imágenes. Koenderink propone el estudio de cómo la intensidad de iso-contornos evolucionan en escalas y este enfoque se investigó en mayor detalle por Lifshitz y Pizer. Lamentablemente, la intensidad de las características de la imagen cambia con las escalas, lo que implica que es difícil de rastrear las características de la imagen a gran escala a pequeña escalas utilizando la información de iso-intensidad. Lindeberg estudio el problema de vincular los extremos locales y los puntos de silla con las escalas, y propuso una representación de la imagen primitiva llamada el boceto a escala original que hace explícitas las relaciones entre las estructuras a escalas diferentes, y también que las características que la imagen son estables en grandes rangos de escala incluyendo las escalas apropiadas para ellas. Bergholm propuso para la detección de bordes a gran escala en escalas de espacio y después llevarlo a pequeña escala con la opción manual tanto de la detección a gran escala como a pequeña escala. Gauch y Pizer estudiaron el problema complementario de las crestas y los valles en múltiples escalas y desarrollarón una herramienta para la segmentación interactiva de imágenes basadas en escalas múltiples watershed. El uso de multi-escala watershed con aplicación al mapa de gradiente también ha sido investigado por Olsen y Nielsen y ha sido portada para el uso clínico por Dam Vincken et al. que propuso un hyperstack para definir las relaciones probabilísticas entre las estructuras de la imagen a diferentes escalas. El uso de estructuras estables de imagen sobre las escalas ha sido promovido por Ahuja y sus colaboradores en un sistema totalmente automatizado. Más recientemente, estas ideas para la segmentación de imágenes en múltiples escalas mediante la vinculación de las estructuras de la imagen con las escalas han sido recogidos por Florack y Kuijper. Bijaoui y Rue asociaron las estructuras detectadas en la escala espacial por encima de un umbral mínimo en un árbol de objetos que abarca múltiples escalas y se corresponde con un tipo de función en la señal original. Las características extraídas son exactamente reconstruida usando un método iterativo conjugado con de la matriz de gradiente.

### Redes neuronales de segmentación

Las redes neuronales de segmentación se basan en el procesamiento de pequeñas áreas de una imagen utilizando una red neuronal artificial o un conjunto de redes neuronales. Después de este proceso de decisión se construye un mecanismo que marca las áreas de una imagen de acuerdo a la categoría reconocida por la red neuronal. Un tipo de red diseñada especialmente para esto es el mapa de Kohonen.
Las redes neuronales de parejas de pulsos (PCNNs) son modelos neuronales propuesto por modelos corteza visual de un gato y desarrollado para un alto rendimiento de procesamiento de imágenes biomiméticas. En 1989, Eckhorn presentó un modelo neuronal para emular el mecanismo de la corteza visual del gato. El modelo de Eckhorn proporciona una herramienta sencilla y eficaz para estudiar la corteza visual de mamíferos pequeños, y pronto fue reconocido por ser una aplicación con un gran potencial en el procesamiento de imágenes. En 1994, el modelo de Eckhorn fue adaptado para ser un algoritmo de procesamiento de imágenes por Johnson, quien calificó este algoritmo como Pulse-Coupled Neural Network. Aproximadamente desde el año 2000, PCNNs (por sus siglas en inglés) han sido utilizados para una variedad de aplicaciones de procesamiento de imagen, incluyendo: segmentación de imágenes, generación de características, generación de funciones, la extracción de rostros, detección de movimiento, detección de regiones en crecimiento, reducción de ruido, etc. Un PCNN es una red neuronal de dos dimensiones. Cada neurona en la red corresponde a un píxel en una imagen de entrada, recibiendo la información del color de su correspondiente pixel como un estímulo externo. Cada neurona se conecta con sus neuronas vecinas, recibiendo estímulos locales de ellas. Los estímulos externos y locales se combinan en un sistema de activación interna, que acumula los estímulos hasta que se excede un umbral dinámico, dando como resultado una salida de pulsos. A través de cálculos iterativos, las neuronas PCNN producen series temporales de impulsos de salidas. La serie temporal de impulsos de salidas contiene información de la imagen de entrada y puede ser utilizado para varias aplicaciones de procesamiento de imágenes, tales como la segmentación de la imagen y la generación de características. Comparado con los medios convencionales de procesamiento de imágenes, PCNNs tienen varias ventajas importantes, incluida la robustez frente al ruido, la independencia de las variaciones en los patrones geométricos de entrada, capacidad para pasar por pequeñas variaciones en los patrones de intensidad de entrada, etc.

## Historia de las redes convolucionales de segmentación

En 2012 AlexNet, una red neuronal convolucional (Alex Krizhevsky, Geoffrey Hinton, and Ilya Sutskever) batió el récord de clasificación de ILSVRC, bajando el menor error alcanzado de 2011 de 25.8% a 16.4%, este hecho marco un antes y después para la clasificación de imágenes y la visión por computadora en general, puesto que inició una explosión de diferentes arquitecturas de redes convolucionales y métodos de aprendizaje profundo que en apenas 4 años bajaron el error a 3.57%. En 2014 GoogleNet (Google) y VGG (campeón y subcampeón respectivamente) bajaron el error de AlexNet de 25.8% a 6.7% y 7.3% respectivamente, en 2015 ResNet (Microsoft) superó el estado del arte bajando el error a 3.57%. Un dato sorprendente es que ResNet no solo batió el récord de clasificación de imágenes, sino que batió al resto de algoritmos en 'Detección y Localización' y en 'Segmentación Semántica'.
El 14 de noviembre de 2014 es publicada FCN (Fully Convolutional Networks for Semantic Segmentation) una red que populariza el uso de redes convolucionales end-to-end para la segmentación semántica, la cual rehúsa redes pre-entrenadas como Imagenet y para el remuestreo usa capas de deconvolución, introduciendo conexiones puente entre en codificador y el decodificador para fusionar características más locales con características más semánticas.
Una observación muy importante hecha por los autores de FCN es que las capas totalmente conectadas pueden ser vistas como una convolución con filtros que cubren completamente la entrada, esto es equivalente a evaluar la red original de clasificación solapando ventanas, pero es más eficiente debido a que los cálculos son compartidos en las regiones donde se solapan las mismas.
Después de terminar la convolución en una red de Imagenet pre-entrenada como VGG, los mapas de características todavía necesitan ser ampliados debido a la reducción dimensional de las capas de agrupamiento (Pooling en la bibliografía). Envés de usar interpolación bilineal, las capas de deconvolución aprenden la interpolación. No obstante, a esto, la capas de deconvolución aún producen segmentaciones erróneas debido a la pérdida de información que producen las capas de agrupamiento, por esta razón se introducen conexiones puente para obtener mejores resultados.
El 2 de septiembre de 2015 es publicada SegNet (A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation) en donde a diferencia de FCN los índices del agrupamiento son transferidos del codificador al decodificador para mejorar la resolución de la segmentación. SegNet introduce más conexiones puente que FCN, y envés de pasar las características extraídas por el codificador lo que se transfiere son los índices de agrupamiento realizados por las capas de agrupamiento, esto hace que SegNet sea más eficiente que FCN, sin embargo, sus resultados son mucho peores.
SegNet y FCN son 2 de las primeras arquitecturas codificador-decodificador, sin embargo, en el estado actual del arte SegNet no es recomendado para ningún modelo de producción.
Las convoluciones dilatadas comienzan a ser utilizadas a partir de 2015. En noviembre de 2015 se publica “Multi-Scale Context Aggregation by Dilated Convolutions” que usa convoluciones dilatadas para la predicción densa, proponiendo un módulo de contexto que usa convoluciones dilatadas para la agregación a múltiples escalas.
Las capas de agrupamiento ayudan en las redes de clasificación debido a que aumentan los campos receptivos, pero esto no es lo mejor para la segmentación debido a la pérdida de resolución, para ello las convoluciones dilatadas permiten el crecimiento del campo de visión sin tener que reducir la dimensión espacial. En esta arquitectura basada en la red convolucional VGG16 las 2 últimas capas de agrupamiento son eliminadas y las convoluciones subsecuentes son remplazadas por capas de deconvolución. Particularmente, las convoluciones entre las capas de agrupamiento 3 y 4 tienen dilatación 2 y después de la capa pool de agrupamiento 4 tienen dilatación 4. Con este módulo (llamado módulo front-end en este artículo) la predicción densa es obtenida sin incrementar el número de parámetros. Un módulo llamado “módulo de contexto”, es entrenado de forma separada con la salida del módulo front-end. Este módulo es una dilatación en cascada de diferentes valores de dilatación, de esta forma el contexto en múltiples escalas es agregado y las predicciones son mejoradas.
DeepLab (versión 1 y 2) salen a la luz en los artículos “Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs” en diciembre de 2014 y “DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs” en junio de 2016 respectivamente, estos modelos usan convoluciones dilatadas, proponen una pirámide de dilatación espacial (ASPP) y usan CRFs totalmente conectados para el post-procesamiento.
Las convoluciones dilatadas incrementan el campo de visión sin tener que incrementar la cantidad de parámetros. El procesamiento multi-escala es realizado pasando diferentes escalas de la imagen original a redes convolucionales en paralelo (Pirámide de imágenes) y/o usando diferentes tipos de dilataciones (ASPP). La predicción es realizada por el CRF, que es entrenado/afinado por separado como una etapa de post-procesamiento.
RefineNet de “Multi-Path Refinement Networks for High-Resolution Semantic Segmentation” publicada en noviembre de 2016 propone que todas las componentes sigan un diseño de conexiones residuales. Las convoluciones dilatadas a pesar de sus virtudes poseen una alta complejidad computacional, lo que la hacen muy costosas y necesitan una gran cantidad de memoria. En este artículo se propone una arquitectura codificador-decodificar. El codificador está conformado por bloques de ResNet-101. El decodificador tiene bloques de refinamiento que concatenan/fusionan características extraídas por el codificador y características de mejor resolución extraídas de un bloque de refinamiento previamente calculado. Cada bloque de refinamiento tiene una componente para fusionar características en diferentes resoluciones haciendo remuestreo a la de menor resolución y una componente para capturar el contexto basado en repetidas capas agrupamiento de 5x5 con desplazamiento (stride) 1, cada una de esas componentes siguen un diseño de conexiones residuales.
En diciembre de 2016 PSPNet “Pyramid Scene Parsing Network” propone un módulo de agrupamiento en pirámide para agregar el contexto. Las características globales de la imagen importan debido a que dan pistas acerca de la distribución de las clases segmentadas. El módulo de agrupamiento en pirámide permite capturar esta información aplicando grandes filtros en las capas de agrupamiento. Esta arquitectura usa convoluciones dilatadas para modificar ResNet, el módulo de agrupamiento en pirámide concatena los mapas de características de ResNet con características ampliadas de una capa de agrupamiento en paralelo con filtros que cubren toda, la mitad y pequeñas porciones de la imagen.
Usar filtros de gran tamaño es muy conveniente sin embargo muy costosos o impracticables, sin embargo “Large Kernel Matters -- Improve Semantic Segmentation by Global Convolutional Network” publicado en marzo de 2017 propone una arquitectura codificador-decodificador con convoluciones de grandes kernels. La segmentación semántica requiere tanto segmentación como la clasificación de los objetos segmentados. Debido a que las capas totalmente conectadas son impracticables, esta arquitectura propone utilizar convoluciones de grandes kernels. Otra razón para esto, es que a pesar de que redes de gran profundidad como ResNet tienen un alto campo de visión, la red tiende a obtener información de una región más pequeña (campo receptivo válido).
Los filtros de gran tamaño son computacionalmente muy costosos y tienen una gran cantidad de parámetros, es por esto que esta arquitectura se basa en la idea de que una convolución de kxk es aproximadamente la suma de convoluciones de 1xk + kx1 y de kx1 + 1xk. Este módulo es llamado Global Convolutional Network (GCN). Esta arquitectura usa ResNet sin ninguna dilatación para el codificador, mientras que GCNs y deconvoluciones para el decodificador. Un bloque residual llamado Boundary Refinement es usado también en esta última tarea.
La versión 3 de DeepLab es publicada en junio de 2017 en “Rethinking Atrous Convolution for Semantic Image Segmentation”, mejorando la pirámide de convoluciones dilatadas (ASPP) propuesta en las versiones anteriores. En esta arquitectura ResNet es modificada para usar convoluciones dilatadas como lo hacía DeepLab2. La mejora de ASPP tiene que ver con la concatenación de diferentes niveles de características extraídas de imágenes, usando convoluciones de 1x1 y 3 convoluciones dilatadas de 3x3 con diferentes valores de dilatación. Se aplica normalización de batch después de cada capa convolucional en paralelo. El módulo en cascada es un bloque ResNet excepto porque las componentes de convoluciones son sustituidas por convoluciones dilatadas. En esta arquitectura no se usan CRFs y mejora los resultados obtenidos con DeepLab2, los autores reflejan que la mejora viene dada por la normalización del batch y por la mejor forma de codificar el contexto a múltiples escalas.

## Aplicaciones

La segmentación es un problema general de la visión artificial y se suele usar como etapa en un proceso más complejo. No obstante muchas veces la segmentación da respuesta a una necesidad concreta y deriva en aplicaciones finales, como las siguientes:
* Procesamiento de imágenes
** Recortando objetos
** Posterizando colores
* Pruebas médicas
** Localización de tumores y otras patologías
** Medida de volúmenes de tejido
* Localización de objetos en imágenes de satélite (teledetección)
** Medición de superficies construidas, sobre fotos satelitales

## Software de código abierto

Existen varios paquetes de software de código abierto para realizar la segmentación de imágenes.
* ITK - Kit de herramientas de segmentación.
* ITK-SNAP - es una interfaz gráfica que combina segmentación manual y semiautomática, con conjuntos de nivel.
* GIMP que incluye entre otras herramientas SIOX.
* VXL.
* ImageMagick.
* MITK - tiene un módulo para la segmentación manual.
* OpenCV - es una librería de visión artificial originalmente desarrollada por Intel.
* GRASS GIS tiene el módulo i.smap Archivado el 4 de octubre de 2011 en Wayback Machine. para la segmentación de imágenes.
* Fiji – es un paquete de procesamiento de imágenes que incluye varios plug-ins de segmentación.
También hay paquetes de software disponible de forma gratuita para fines académicos:
* GemIdent
* CVIPtools
* MegaWave
* Datos: Q56933
* Multimedia: Image segmentation / Q56933