lunes, 27 de septiembre de 2010

Segmentación de Imágenes usando redes de Kohonen

La segmentación es un proceso en el cual un objeto es dividido en diferentes zonas o regiones dependiendo de sus características. En una imagen, la segmentación se puede llevar a cabo a partir de intensidades de color, forma, contornos, etc.
Las redes neuronales han sido una herramienta que por su simpleza en implementación se han utilizado frecuentemente para resolver diversos problemas. 
Aquí se muestra una forma de llevar a cabo la segmentación de una imagen, usando los principios de las redes neuronales artificial mediante un aprendizaje no supervisado.
Los mapas de rasgos autoorganizados o SOFM (Self – Organizing Features Maps)  fueron desarrollados a lo largo de la década de los 80´s por el físico finlandés Teuvo Kohonen [1], como una continuación natural de la línea de desarrollo de las redes competitivas iniciada por von der Malsburg. Además de ser una sencilla modernización de redes neuronales naturales poseen gran potencial de aplicabilidad práctica. De entre las clases de problemas del mundo real en los que han demostrado su eficacia cabe citar: clasificación de patrones, cuantificación vectorial, reducción de dimensiones, extracción de rasgos, monitoreo de procesos, análisis exploratorio, visualización y minería de datos[2].


Se debe tener en cuenta que no existe un algoritmo de aprendizaje totalmente estándar para los SOM. No obstante, el resultado final es bastante independiente de los detalles de su realización concreta, como pueden ser los pesos sinápticos de partida, el esquema de la actualización del ritmo de aprendizaje o la forma establecida para la vecindad. El algoritmo autoorganizado habitual es [2]:
1.    Inicialización de los pesos sinápticos W[i,j,k]. Se puede partir de diferentes configuraciones: pesos nulos, aleatorios de pequeño valor absoluto (lo más habitual), o con un valor de partida predeterminado.
2.      En cada iteración, se presenta un patrón x(t) tomado de acuerdo con la función de distribuición p(x) del espacio sensorial de entrada (en la muy habitual situación de disponer solamente de un conjunto finito de patrones de entrenamiento, basta con tomar al azar uno de ellos y presentarlo a la red).
3.      Cada neurona i=(i,j) del mapa calcula la similitud entre su vector de pesos sináptico  y el actual vector de entradas . Un criterio de medida de similitud muy utilizado es la distancia Euclidiana: d^2(w[i,j],x)(t+1)=SUM(w[i,j,k]-x[k])^2
4.       Determinación de la neurona ganadora g, cuya distancia es la menor de todas.
5.       Actualización de los pesos sinápticos de la neurona ganadora g, y los de sus neuronas vecinas. La regla más empleada de todas es: w[i,j,k](t+1)=w[i,j,k]+alfa(t)h(i-g,t)(x[k](t)-w[i,j,k](t)) 
   donde alfa(t) es un parámetro denominado coeficiente o ritmo de aprendizaje. La función h() se denomina función de vecindad, puesto que establece qué neuronas son las vecinas a la actualmente ganadora. Esta función depende de la distancia entre la neurona i y la ganadora g valiendo cero cuando i no pertenece a la vecindad de g (con lo que sus pesos no son actualizados), y un número positivo cuando sí pertenece (sus pesos si son modificados). Como veremos, la vecindad es un conjunto de neuronas centrado en la ganadora. Tanto  como el radio de la vecindad disminuye monótamente con , es decir se conserva un orden.
6.      Si se ha alcanzado el número máximo de iteraciones establecido, entonces el proceso de aprendizaje finaliza. En caso contrario, se vuelve al paso 2.

   Como se puede apreciar el aprendizaje es una regla simple, sin embargo ahora se explicará como se aplica en una imagen:
   Supongamos que tenemos una imagen de 1024x1024 pixeles en formato RGB. Vamos a usar una máscara de 5x5 pixeles, la cual puede variar dependiendo de nuestra aplicación. Antes del procesamiento, la imagen debe ser normalizada a valores entre 0 y 1, ésto se logra de la siguiente forma:
   Por cada píxel multiplicamos los tres valores de RGB y lo dividimos entre 16777216.
   Las redes de kohonen de una dimensión requieren de entrada un vector de una dimensión por lo cual, nuestra máscara será convertida de una matriz de 4x4 a un vector de 16 valores.
   Por cada píxel de la imagen se obtendrá una máscara, donde el píxel será el centro de la misma.
   Dependiendo de en cuantas regiones queremos segmentar nuestra imagen, serán el número de clases a considerar.
   Como en todas las redes neuronales, éstas deben ser entrenadas, para ello, usaremos la regla de aprendizaje de Kohonen, con lo cual inicializamos los pesos de cada neurona con diversos valores, los cuales pueden ser aleatorios, en 0 ó en 0.5. Cabe destacar que cada clase es en sí un vector del mismo tamaño de las máscaras.
   El proceso de aprendizaje se lleva a cabo N veces, por cada vez, se pasan todas las máscaras que contiene la imagen, y siguiendo la regla de Kohonen por cada máscara calculamos la distancia de ésta a cada clase (distancia Euclidiana, por ejemplo), la que se encuentre más cercana se le actualizan los pesos dependiendo de la regla que se considere.
   Después de que se aprenda las N veces pasamos otra vez la imagen, pero ahora, no se actualizan los pesos, sino que se obtiene solamente la clase ganadora; por cada clase podemos definir un color, el cual es asignado solamente al píxel central de la máscara en la que nos encontramos.
   Al final obtendremos algo así:
Inicial

Final con 5 clases
Final con 20 clases
[1] 
Kohonen T., Self-Organizing Maps, Tercera ed. London: Springer, 2001.
[2] Bonifacio Martín del Brío, Redes Neuronales y Sistemas Borrosos.: Alfaomega Ra-Ma, 2007.

No hay comentarios:

Publicar un comentario