Páginas

lunes, 29 de noviembre de 2010

Reglas

A continuación os presento las reglas de reconocimiento que generará Infant de cada una de las categorías del árbol de conocimiento:
  • Existe punto (se genera siempre)
    • Comprueba si un determinado punto existe en la estructura que se compara.
    • El sicript tendra tantos "existe puntos" como puntos comunes (+- 10% distancia) entre todos los objetos en la categoria.
  • Existe nivel (se genera siempre)
    • Este tipo de comprobacion se creara si todos los objetos de una misma categoria tienen niveles similares y en el mismo orden.
    • En siguientes versiones además se definirá la relación que existe entre los diferentes niveles (como diferencia porcentual de área, la posición relativa de sus centros de gravedad o puntos medios, etc.).
  • Tiene número minimo-maximo de verices. (se genera si hay más de un objeto en la misma categoria)
    • Esta regla se genera si entre los diferentes objetos de la categoria la diferencia entre el minimo y el maximo es menor a la media.
  • Tiene N vectores como (se genera si hay más de un objeto de la misma categoria)
    • Regla que comprueba si en un determinado objeto se dan determinados vectores.
  • Tiene x lineas de longitud min - max. (se genera si hay más de un objeto de la misma categoría)
    • Regla que se crea si se detecta que en todos los objetos se tienen vectores con el mismo (o parecido) módulo.
A parte de estas en futuras versiones espero incluir la definición de contexto, es decir como se relacionan en el entorno los diferenetes elementos y si algún concepto es la unión de varios elementos aprendidos (por ejemplo cubiertos=tenedor+cuchillo+cuchara o texto=A+B+...+Z+a+...z+...) para lo que además habrá que generar más reglas.

viernes, 26 de noviembre de 2010

Primer Script en Lua

A continuación os dejo el primer script correcto generado (bajo licencia GPL3 :) ) por Infant en Lua.
Primer Script en LuaAunque en este lo único que hace es buscar si existen valores próximos a una serie de puntos que son comunes a los objetos de una determinada categoría en una tabla que se deberá pasar al script en la cual se definirán los nieveles que representan el objeto que se analiza.

Ahora mismo estoy pensando en la forma de preparar otros generadores de reglas para completar el script y que se creen analizando propiedades comunes de los objetos de las diferentes categorías del "árbol de conocimiento" (tm) :P de Infant. Por otro lado he pensado que sería una buena idea preparar un par de manuales de como integrar Lua en aplicaciones C++, pasar parámetros, tablas, etc. así que espero publicar alguno la semana que viene.

miércoles, 24 de noviembre de 2010

Infant se reescribirá a si mismo

Esto es algo en lo que ya había pensado hace tiempo y que ahora voy a poner en práctica ya que para desarrollar la parte que generará las reglas inductivas de aprendizaje\reconocimiento de objetos voy a tratar de implementar en Infant un sistema para la generación de código y que ese código generado sea usuado, mejorado y completado según aumente el conocimento acumulado por el sistema.

Para ello Infant generará un script en Lua en el que se defina una función que decidirá si un deterinado objeto pertenece o no a una determinada categoría, código que será generado según las propiedades y características comunes y no cumunes de todos los objetos pertenecientes a esa categoría, lo precompilará (para mayor velocidad) y después utilizará ese script para decidir si un objeto nuevo, desconocido en principio, pertenece o no a esa categoría.

Por supuesto aun esta todo por hacer pero ya os iré contando.

lunes, 22 de noviembre de 2010

Sistema de coordendas de objeto

Introducción

Uno de los elementos clave en los que se basará Infant es el Sistema de Coordenadas de Obejeto y que consiste basicamente en que una vez vectorializados los bordes de un determinado objeto estos se convertiran a un sistema propio de coordendas.

Origen de la idea

Esto va ha sonar un poco raro... pero cerrar los ojos e imaginaros primero una manzana cualquiera y después borrar esa imagen de la manzana e imaginaros la Torre Eiffel. En esas imagenes que se os presentan, por lo menos en mi caso, aparece la manzana en la misma escala que la torre es decir que si suporponeis esas dos imagenes las dos tendran el mismo tamaño y la manzana tapará a la Torre Effiel. Es juesto en esa idea de mantener las proporciones en referencia al total de la dimensiones de cada objeto en la que se basa el sistema.

Sistema de coordendas de objeto

Para desarrollar las ideas anteriormente descritas nace la necesidad del sistema de coordendas unico para todos los elementos y surge a raiz de querer comparar estos objetos entre si, para lo que debe garantizarse que:
  • Todos los objetos estan en la misma escala, es decir que si se compara un determinado simbolo que ocupa 1000x1000 px. y el mismo simbolo pero en una de 100x100 se sigan podiendo comparar los vectores de ambos.
  • La posicion relativa entre estos vectores es la misma, es decir que siempre se realizen las mismas transformaciones en objetos similares.
  • Que no haya deformaciones o si las hay que sean iguales en todos los objetos (en nuestro caso las habrá).
Para lograr estos objetivos en Infant se ha implementado un sistema en el que la unidad viene definida por las dimensiones totales del objeto (en realidad del nivel), en nuestro caso se define y se compara con el 100% que componen los limites del objeto (del nivel) (Bounding Box) por lo que el resto de los vectores vendrán determinados en este nuevo sistema como un porcentaje del ancho y alto total de la imagen original.
Matematicamente simplemente se define un sistema ortonormal en el que el origen de coordenadas es la coordenda menor (inferior izquierda) de la imagen y los vectores directores (aunque en nuetro caso su módulo no es la unidad sino el 100%) son los compuestos por el ancho y el largo del bounding box que contiene el objeto despues para transformar el objeto a ese sistema de coordenadas lo que hacemos es simplemente, sobre cada vector aplicaicar una traslacion y escalarlos segun el porcentaje en relacion al nuevos ejes de coordendas por lo que la operacion matematica es simplemnte suma y multiplicacion de vectores. Como imagino que será mucho mas fácil verlo graficamente un ejemplo sencillo sería el siguiente en el que la letra J pasa a convertirse en la letra J en el sistema de coordendas de objeto (aplicando también una simplificación a la imagen vectorializada de la que ya hablaremos):



domingo, 21 de noviembre de 2010

Que haceres

Acabo de actualizar en la forja la lista de tareas pendientes para el próximo mes con la que si todo va bien ya se podrá publicar una primera versión de la aplicación que permita enseñar y ver lo que ha aprendido Infant. Antes eso si hay que completar la siguiente lista de tareas:

Id Tarea Descripción de la Tarea
2200Knowleadge tree loading
2201Camera image loading
2202Manage and extract camera data
2203Rule generation system
2204Integrate rule generation system on tree structure
2205Recongnize single objects with cam
2206Create teaching interface
2207Create observer interface

Ademas también os dejo el diagrama de Gantt (aunque no se por que no se muestran las dependencias entre tareas) y para más detalles os invito a visitar la forja de Infant.


jueves, 18 de noviembre de 2010

Paradigmas de aprendizaje automático

Antes de enseñarle a aprender a Infant tenemos que conocer todas las posibles formas de hacerlo. Entre las formas más conocidas y desarrolladas actualmente tenemos las siguientes opciones
Os animo a que leáis sobre ellos en los enlaces que he incluido en cada uno ya que lo explican mucho mejor de lo que podría hacerlo yo. De todos ellos los que estudiaremos y usaremos en Infant son los tres últimos y ya los iremos comentando con más detalle y como se aplican (seguramente no siguiendo del todo la teoría :P).

lunes, 15 de noviembre de 2010

Parecidos razonables

Ya le he enseñado a Infant las letras mayusculas a partir de fichas (es decir imagenes con cada una de las letras) y la verdad es que después al volver a comparar con una nueva letra A los parecidos con las demás letras han dado los resultados esperados (incluso demasiado así que algo habremos hecho mal :P):

100 % similar to a,letra,mayuscula

0 % similar to b,letra,mayuscula

0 % similar to c,letra,mayuscula

0 % similar to d,letra,mayuscula

0 % similar to e,letra,mayuscula

12 % similar to f,letra,mayuscula

0 % similar to g,letra,mayuscula

25 % similar to h,letra,mayuscula

0 % similar to i,letra,mayuscula

0 % similar to j,letra,mayuscula

12 % similar to k,letra,mayuscula

0 % similar to l,letra,mayuscula

0 % similar to letra,mayuscula,o

6 % similar to letra,mayuscula,p

0 % similar to letra,mayuscula,q

12 % similar to letra,mayuscula,r

0 % similar to letra,mayuscula,s

0 % similar to letra,mayuscula,t

0 % similar to letra,mayuscula,u

0 % similar to letra,mayuscula,v

25 % similar to letra,mayuscula,x

0 % similar to letra,mayuscula,y

0 % similar to letra,mayuscula,z

Si ya se que faltan un par de letras pero con las letras M,N y W no se vectorizan del todo bien así que ahora toca corregir esos pequeños fallos.

sábado, 13 de noviembre de 2010

Proceso de apendizaje

A continuación os presento algunos de los puntos básicos sobre el proceso de aprendizaje a partir de los cuales se basarán los algoritmos de aprendizaje automático de Infant:

  • Si existe cualquier duda sobre el concepto a aprender es mejor no aprender.
  • Si se tiene la certeza de que un determinado concepto es correcto pero este no se parece a lo ya aprendido entonces crear una excepción (principio de no alteración). Es decir, es mejor no modificar drásticamente un concepto aprendido.
  • El aprendizaje se ha de realizar en pasos muy pequeños, secuencialmente y refinando las ideas. Esta es la llamada ley de Martin que dice “You can't learn anything unless you almost know it already” o lo que es lo mismo, “No puedes aprender nada a menos que ya casi lo sepas”.
  • No modificar nunca el conocimiento de base (llamemos lo leyes), es decir, conceptos en los cuales se tiene la total certeza de que son tal cual se han aprendido y no pueden modificarse (este punto es mío :P)(por ejemplo leyes físicas, que un circulo es una sucesión de puntos con la misma distancia un punto llamado centro o las tres leyes de la robótica).

sábado, 6 de noviembre de 2010

Froja

Ya esta operativa la forja del proyecto donde iré subiendo el trabajo que se valla realizando. Ademas cuenta con foros, lista de correo, SVN, etc., así que estáis todos invitados a participar. Podéis acceder a la ficha del proyecto aquí.

jueves, 4 de noviembre de 2010

El cerebro de Infant en un árbol

Cada objeto aprendido por Infant tendrá que ser descrito mediante una serie de tags que describan ese objeto por el profesor. Así por ejemplo para la la letra B, tendremos una descripción tageada como letra,mayuscula,latina,b.

La idea es por tanto, que según se vallan introduciendo nuevos conceptos estos se jerarquicen de modo que finalmente tengamos una estructura como la siguiente que organiza todo el "conocimiento" adquirido por Infant:

La finalidad principal de añadir esta estructura es que una vez aprendidos y organizados una serie de objetos/conceptos el sistema sea capaz de reconocer (mediante la creación de reglas) por si mismo nuevos objetos de una determinada categoría e incluso ser capaz (en un futuro muy lejano :P) de especificar de qué objeto se trata a partir de la generalización y con la ayuda de fuentes de datos externas (digamos wikipedia o google images)...

martes, 2 de noviembre de 2010

Letra A

Y esto es lo que ve Infant cuando le enseñan una "A":

I|L|V|P|X|Y|X|Y

7|0|0|0|6.50572125468138e-15|98.8372093023256|45.0|0.0

7|0|0|1|45.0|0.0|58.75|3.48837209302326
7|0|0|2|58.75|3.48837209302326|100.0|98.8372093023256
7|0|0|3|100.0|98.8372093023256|85.0|98.8372093023256
7|0|0|4|85.0|98.8372093023256|72.5|69.7674418604651
7|0|0|5|72.5|69.7674418604651|26.25|70.9302325581395
7|0|0|6|26.25|70.9302325581395|13.75|100.0
7|0|0|7|13.75|100.0|6.50572125468138e-15|98.8372093023256
7|1|0|0|7.65378971138986e-15|97.2222222222222|46.4285714285714|0.0
7|1|0|1|46.4285714285714|0.0|100.0|100.0
7|1|0|2|100.0|100.0|7.65378971138986e-15|97.2222222222222


Que vienen a ser los vectores que forman cada uno de los niveles de detalle (columna L) siendo el 0 el contorno exterior y el nivel 1 el triángulo interior.