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.