Sistemas Conexionistas

Anuncio
Sistemas Conexionistas
Curso 2011/2012
1 Objetivo
El objetivo de esta práctica es usar un conjunto de redes de neuronas artificiales para abordar un
problema de reconocimiento de figuras sencillas en imágenes a partir de información de bordes y
orientaciones.
2 Metodología
El procedimiento a desarrollar constará de tres pasos. En cada uno de ellos, el alumno deberá
seleccionar la red neuronal más adecuada para resolver el problema concreto, justificando la
elección del tipo de red y sus caracteristicas así como del conjunto de entrenamiento.
En el siguiente esquema se resumen los pasos a seguir en el desarrollo de la metodología:
2.1 Obtención de una imagen de bordes
El primer paso consiste en obtener una imagen de con la magnitud de los bordes de la imagen
original. Para ello se utilizarán dos redes de neuronas artificiales, una para obtener los bordes
verticales y otra para obtener los bordes horizontales. El aprendizaje de las redes se hará de forma
supervisada. El número de patrones y su tamaño queda a elección del alumno.
Imagen original
Imagen de bordes horizontales (normalizada entre 0 y 1)
Tanto la imagen original como las imágenes de bordes se cargarán a partir de fichero:
•
La imagen original se leerá con imread
•
Las imágenes de bordes están almacenadas en el fichero edges.mat. Para cargar este fichero
se usará el siguiente comando
load('edges.mat', 'Ev', 'Eh');
almacenándose la imagen de bordes verticales en la matriz Ev y la imagen de bordes
horizontales en la matriz Eh.
Una vez cargadas las imágenes, este apartado se desarrollará en dos fases:
Fase de entrenamiento (para cada red)
1. Generar conjunto de entrenamiento (función getPatterns.m)
•
Los patrones de entrada serán ventanas de tamaño n x n centradas en la posición (x,y) en
la imagen original
•
Las salidas deseadas será el valor del pixel en la posición (x,y) en la imagen de salida
2. Crear y entrenar la red con el conjunto de entrenamiento seleccionado
Fase de procesado (para cada red)
1. Convertir la imagen a patrones (función imageToPatterns.m)
2. Procesar los patrones de la imagen con la red
3. Reconstruir la imagen de bordes
Una vez que obtenemos las imágenes con los bordes horizontales y verticales, la imagen con la
magnitud de los bordes se construye de la siguiente forma
Bordes = sqrt(Bordes_hor .* Bordes_hor + Bordes_ver .* + Bordes_ver);
Bordes = Bordes / max(max(Bordes));
La imagen Bordes resultante deberá ser similar a la mostrada en la siguiente figura:
2.2 Obtención de las orientaciones de los bordes
En esta segunda fase se obtendrán las orientaciones de los bordes de las figuras. Se considerarán 8
orientaciones:
•
0º → borde izquierdo de cuadrados y rectángulos
•
45º → borde izquierdo de triángulos y borde superior izquierdo de pentágonos
•
90º → borde superior de cuadrados y rectángulos
•
135º → borde derecho de triángulos y borde superior derecho de pentágonos
•
180º → borde izquierdo de cuadrados y rectángulos
•
225º → borde inferior izquierdo de pentágonos
•
270º → borde inferior de todas las figuras
•
315º → borde inferior derecho de pentágonos
Para ello, se utilizará una red de neuronas artificiales adecuada al problema. El alumno deberá
seleccionar el tipo de aprendizaje más adecuado para este problema.Como patrones del conjunto de
entrenamiento se utilizarán ventanas centradas en los distintos tipos de bordes de la imagen original.
El tamaño de las ventanas y el tamaño del conjunto de entrenamiento se deja a elección del alumno.
Este apartado se desarrollará en dos fases
Fase de entrenamiento
1. Generar conjunto de entrenamiento (función getPatterns.m)
2. Crear y entrenar la red con el conjunto de entrenamiento seleccionado
Fase de procesado
1. Convertir la imagen a patrones (función imageToPatterns.m)
•
Optimización: procesar sólo aquellos puntos de la imagen en los que la magnitud de
borde supere un determinado umbral (modificar imageToPatterns.m)
2. Procesar los patrones de la imagen con la red
3. Reconstruir la imagen de orientaciones, representando cada orientación con un color
diferente. Representar en negro los puntos en los que la magnitud del borde sea inferior a un
umbral.
El resultado de esta etapa debería ser una imagen como la siguiente:
2.3 Clasificación de figuras utilizando información de orientación
En la tercera fase trabajaremos con cada figura de forma independiente. Para facilitar el trabajo, en
el fichero coords-fig.mat encontraremos 4 variables que se corresponden con las coordenadas
superior derecha (top, left) e inferior izquierda (bottom, right) de cada figura. El siguiente código
carga las variables a partir del fichero y muestra por pantalla todas las figuras:
I = double(imread('imagen.png') / 255;
load('coords-figs.mat', 'top', 'left', 'bottom', 'right');
for i=1:13
figure;
imshow(I(top(i):bottom(i), left(i):right(i)));
end
El alumno deberá utilizar una red de neuronas artificial para clasificar las figuras utilizando como
base la distribución de orientaciones obtenida para cada figura. El tipo de red y sus características
así como el modo de entrenamiento se dejan a elección del alumno.
Esta tercera fase se desarrollará también en dos fases:
Fase de entrenamiento
1. Generar conjunto de entrenamiento
•
Estará formado por la distribución de orientaciones de cada figura
•
La distribución de orientaciones de una figura se calculará de la siguiente forma
1. Obtener la magnitud de los bordes de la figura con las redes diseñadas a tal efecto
2. Obtener la orientación de los bordes de la figura con la red seleccionada en el paso
anterior
3. Realizar un recuento del número de veces que aparece cada orientación en la figura.
Almacenar los valores de este recuento en un vector.
4. Normalizar el vector entre 0 y 1.
2. Crear y entrenar una red con los vectores de distribución de orientaciones
Fase de procesado
1. Generar el vector de distribución de orientaciones para una figura
2. Procesar el vector con la red y obtener la salida
3 Código proporcionado
El alumno puede modificar el código de las funciones proporicionadas para ajustarlo a sus
necesidades.
getPatterns.m
Permite seleccionar el conjunto de entrenamiento para un aprendizaje supervisado:
•
El conjunto de los patrones de entrada estará formado por un número n de ventanas de
tamaño s x s de la imagen de entrada. Este conjuntos se almacenará en una matriz con el
formato requerido por las funciones de la Neural Network Toolbox de Matlab (un patrón por
columna)
•
Las salidas deseadas para cada patrón se almacenarán por columnas en una matriz. Éstas
pueden ser de dos tipos:
◦ Si se pasa una imagen del mismo tamaño que la imagen original, devuelve un punto en
dicha imagen que se corresponde con el valor central de la ventana en el patrón asociado
a esta salida
◦ Si se pasa un vector de otro tamaño, la salida deseada de todos los patrones de entrada
será igual a dicho vector.
imageToPatterns.m
Extrae todos los patrones de una imagen en el formato requerido por la Neural Network Toolbox de
Matlab (un patrón por columna). Cada patrón será una ventana de tamaño s x s.
4 Requisitos
•
El código de la práctica no puede ser copiado
•
Se puede utilizar cualquier tipo de red incluida en la Neural Network Toolbox de Matlab o
implementada por el alumno
•
Se deben utilizar, al menos, 2 tipos distintos de redes en el desarrollo de la práctica
•
La elección de cada red, sus características y el conjunto de entrenamiento seleccionado
deberán ser debidamente justificados
•
Se debe mostrar el resultado intermedio de cada uno de los pasos de la metodología
•
El código de entrenamiento y el código de procesado deben estar claramente separados
Descargar