Jugando con Redes Neuronales.
03 feb 2008
Las redes neuronales son una de las herramientas más potentes en el campo de la IA, y en particular suelen dar muy buenos resultados en la detección y reconocimiento de figuras. Recientemente hemos realizado pruebas para valorar si incluíamos esta posibilidad en la detección de figuras en uno de nuestros proyectos. Y aunque en este caso, se ha descartado esta opción, me hace pensar que es sólo cuestión de potencia que algún día las máquinas puedan ser capaces de “ver flores”.
Y para demostrarlo, vamos a detectar en la siguiente foto quiénes son “un poco Flower”:

El primer paso es aplicar a la imagen original un algoritmo de detección de bordes para simplificar la imagen:
Ya que la potencia de calculo es finita y escasa, nuestra red neuronal contendrá sólo 10×10 neuronas, para poder distinguir y procesar una zona muy pequeña, pero suficientemente representativa de la flor.
El siguiente paso es entrenar a nuestra red neuronal, para ello, proporcionamos a la red neuronal ejemplos correctos e incorrectos de regiones de la imagen y lanzamos el proceso de entrenamiento sobre este conjunto reducido.
KernelIA ia = KernelIA.buildKernel(imagen, rectangulos);
Internamente este método itera sobre todas las zonas de ejemplo que tenemos, las transforma a una matriz entendible por la red neuronal e inicia el proceso de entrenamiento para cada patrón.
Una vez que el proceso de entrenamiento ha terminado, ya esta disponible la red neuronal para ser interrogada. Recorremos la imagen, e interrogamos a la red neuronal, en busca de zonas que cumplan con el patrón buscado.
Resultado tras 10 minutos de entrenamiento y 15 patrones sobre los que aprender:
Resultado tras 6 horas de entrenamiento y 40 patrones sobre los que aprender:

Como vemos, en este último caso, el sistema prácticamente ha sabido detectar todos los “Flowers de la oficina”, aunque incluso con 6 horas de entrenamiento, ha cometido algunos extraños errores. Probablemente con algo más de tiempo, paciencia y potencia de cálculo podremos llegar al objetivo deseado en el futuro.


¿Tienes alguna bibliografía divulgativa sobre el tema? Me parece muy interesante incluso para gente como yo
En la internet hay muchísima información sobre el tema, pero para no iniciados esta muy bien http://www.monografias.com/trabajos/redesneuro/redesneuro.shtml o incluso la wikipedia.