domingomery / patrones

Curso Reconocimiento de Patrones - UC - Chile
https://domingomery.ing.puc.cl/teaching/patrones/
143 stars 39 forks source link

Tarea 5 #5

Closed domingomery closed 5 years ago

domingomery commented 5 years ago

Objetivo: Aprender a evaluar desempeño de clasificadores.

En la base de datos pedestrains se encuentra un conjunto de 400 imágenes a color de 134 x 70 pixeles, de ellas 200 son fotografías de peatones (Pxxxx.png) y las otras 200 fotografías son no-peatones (Nxxxx.png), para xxxx = 0001, 0002, ..., 0200. Usando sólo los métodos vistos en clases (extracción, selección y clasificación) diseñe y entrene al menos tres clasificadores que logren detectar a los peatones, es decir que logren reconocer ambas clases. Para evaluar el desempeño de cada clasificador, debe reportar los valores del promedio y desviación estándar de 'Accuracy', 'Precision' y 'Recall' encontrados a partir de una evaluación de validación cruzada con 10 carpetas (cross-validation with 10 folds). Los tres clasificadores deben ser de familias distintas, es decir puede haber no más de un SVM, no más de una red neuronal, etc.

EVALUACIÓN

  1. Informe: 20% (se evalúa calidad del informe, explicaciones, redacción, ortografía)

  2. Solución propuesta: 50% (se evalúa la calidad del método, si el diseño es robusto y rápido para el problema dado, si los experimentos diseñados y los datos empleados son adecuados, si el código es entendible, limpio, ordenado y bien comentado).

  3. Resultados obtenidos: 30% (la nota en este item es 30% x C, donde C es A + B, con A el mejor accuracy encontrado en su tarea y B una constante calculada de tal forma que el mejor resultado en el curso obtenga C = 1.

domingomery commented 5 years ago

El archivo zip con las 400 imágenes se puede bajar aquí

icontrerasn commented 5 years ago

Hola,

Se espera que las particiones en cross-validation tengan la misma cantidad de peatones y no-peatones en conjuntos de testing/training? Por ejemplo, puede existir una partición en la que el sub set de training tenga, por ejemplo, 50 peatones y 150 no peatones?

domingomery commented 5 years ago

se me olvidó decir que se deben seleccionar los sets de training y testing de manera estratificada y aleatoria. Saludos. Domingo On May 17, 2019, 3:50 PM -0400, Italo Contreras Narbona notifications@github.com, wrote:

Hola, Se espera que las particiones en cross-validation tengan la misma cantidad de peatones y no-peatones en conjuntos de testing/training? Por ejemplo, puede existir una partición en la que el sub set de training tenga, por ejemplo, 50 peatones y 150 no peatones? — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.

perojas3 commented 5 years ago

Ok tengo la siguientes dudas: 1.- De extraccion hemos visto lbp, gabor y momentos de Hu. ¿Alguno más? 2.- De seleccion está hacer clean, sfs y PCA (podriamos agregar normalizar) ¿Hay otros? 3.- En clasificación está KNN, DMIN, QDA, MAHALANOBIS, LDA, SVM y Redes Neuronales, ¿Hay otros? 4.- Entre los clasificadores que seleccionamos, ¿Todos deben ser hechos sobre el mismo sistema de extracción y clasificación?

perojas3 commented 5 years ago

Una duda más ¿Hay alguna consideración extra respecto a obtener features de imagenes de colores?

domingomery commented 5 years ago

1, 2 y 3 por favor revisar los apuntes de clases, vale usar todas las tecnicas vistas en clases (normalizacion también)

  1. puedes combinarlos  como quieras

saludos. Domingo On May 18, 2019, 7:54 PM -0400, perojas3 notifications@github.com, wrote:

Ok tengo la siguientes dudas: 1.- De extraccion hemos visto lbp, gabor y momentos de Hu. ¿Alguno más? 2.- De seleccion está hacer clean, sfs y PCA (podriamos agregar normalizar) ¿Hay otros? 3.- En clasificación está KNN, DMIN, QDA, MAHALANOBIS, LDA, SVM y Redes Neuronales, ¿Hay otros? 4.- Entre los clasificadores que seleccionamos, ¿Todos deben ser hechos sobre el mismo sistema de extracción y clasificación? — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.

domingomery commented 5 years ago

en principio puedes sacar features (ej LBP) en cada canal R, G y B (o en otro espacio de color), y tambien en el canal de gris, por ejemplo un LBP de 59 podria ser ahora un LBP de 236 (esto es 59x4) si consideras R,G,B y gris. Tienes que ver si esto es razonable, por ejemplo pensar si el canal rojo sirve para discriminar entre peatones y no peatones (o seria una falsa correlación?) Saludos. Domingo On May 19, 2019, 2:02 PM -0400, perojas3 notifications@github.com, wrote:

Una duda más ¿Hay alguna consideración extra respecto a obtener features de imagenes de colores? — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.

maperez15 commented 5 years ago

Se supone que para hacer el HOG la imagen tiene que particionarse. Esas particiones están en el comando Bfs_hog o debo hacerlas yo?. En caso de que estén en el Bfs_hog, en qué parte del ejemplo (que está abajo) puedo distinguir cuales son las particiones?. Gracias!

    options.nj    = 20;             % 10 x 20 
     options.ni    = 10;             % histograms
     options.B     = 9;              % 9 bins
     options.show  = 1;              % show results
     I = imread('testimg1.jpg');     % input image
     J = rgb2gray(I);
     figure(1);imshow(J,[]);
     figure(2);
     [X,Xn] = Bfx_hog(J,options);    % HOG features (see gradients
                                     % arround perimeter).
domingomery commented 5 years ago

las particiones se definen con las variables ni y nj, en el ejemplo se conforman 10x20 particiones, que entregan 10x20 histogramas. En el ejemplo son histogramas de 9 bins, por eso el vector X de salida tiene 10x20x9 = 1800 elementos

Saludos. Domingo On May 24, 2019, 2:28 PM -0400, maperez15 notifications@github.com, wrote:

Se supone que para hacer el HOG la imagen tiene que particionarse. Esas particiones están en el comando Bfs_hog o debo hacerlas yo?. En caso de que estén en el Bfs_hog, en qué parte del ejemplo (que está abajo) puedo distinguir cuales son las particiones?. Gracias! options.nj = 20; % 10 x 20

options.ni    = 10;             % histograms

options.B     = 9;              % 9 bins

options.show  = 1;              % show results

I = imread('testimg1.jpg');     % input image

J = rgb2gray(I);

figure(1);imshow(J,[]);

figure(2);

[X,Xn] = Bfx_hog(J,options);    % HOG features (see gradients

                                % arround perimeter).

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.

dberezin commented 5 years ago

Según entiendo, una función que haga la validación cruzada en 10 carpetas, tomará el estimador, el 'X' (las características de cada imagen) y el 'y' (indicador de si la imagen es o no un peatón). Para 10 carpetas, la función separará 10 veces un 10% del 'X' como test y el 90% restante como train y devolverá el resultado.

Si hasta ahí voy bien, cómo podría antes aplicar selección de características, como por ejemplo clean? Si lo hago, sería sobre el test y el train, lo que sería tramposo, o no?

domingomery commented 5 years ago

existen varias posibilidades PARA LA TAREA que se pueden intentar

1) seleccionar de alguna manera las mejores caracteristicas, y una vez seleccionadas realizar cross-validation con las caracteristicas seleccionadas (todas las carpetas cuentan con las mismas caraceteristicas seleccionadas). Lo ideal sería tener un conjunto de datos extra para hacer la selección, como no lo tenemos, está permitido en la tarea hacer la selección con el conjunto de todos los datos o con las porciones que estimen conveniente. No es lo recomendable, pero para la tarea (por ser una tarea con pocos datos) lo voy a permitir.

2) en el cross-validation de la tarea se entrena con 90% y se prueba con 10%. Esto se puede ver como 10 problemas de clasificación independientes. Cada uno de ellos puede tener características seleccionadas distintas que se seleccionen con los datos de training. El cross-validation es usado en este caso para estimar el accuracy con estos datos usando un clasificador especifico.

3) del 100% de los datos usar un subconjunto para seleccionar las caracteristicas, por ejemplo un 20%. Una vez seleccionadas las características se hace cross-validation con 10 carpetas en el 80% de los datos no usados en la seleccion de las características. Es posible que para la tarea esta alternativa no entrene bien porque son pocos datos.

En un PROBLEMA REAL se debería usar 2 ó 3 (que no hacen trampa), el primero es un poco tramposo pero para la tarea 5 lo permito porque son pocos datos.

Saludos. Domingo

On May 31, 2019, 2:18 PM -0400, dberezin notifications@github.com, wrote:

Según entiendo, una función que haga la validación cruzada en 10 carpetas, tomará el estimador, el 'X' (las características de cada imagen) y el 'y' (indicador de si la imagen es o no un peatón). Para 10 carpetas, la función separará 10 veces un 10% del 'X' como test y el 90% restante como train y devolverá el resultado. Si hasta ahí voy bien, cómo podría antes aplicar selección de características, como por ejemplo clean? Si lo hago, sería sobre el test y el train, lo que sería tramposo, o no? — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.

AlfonsoIgnacioV commented 5 years ago

Hola, tengo una consulta, cuando se nos dice que podemos utilizar sólo un clasificador de cada familia, ¿se refiere específicamente a tener una combinación de extracción-selección-clasificador o también a sus parámetros? Me refiero, si utilizo hog con pca y una red neuronal, por ejemplo, ¿se consideran dos clasificadores distintos si uso un hog con 4x6 ventanas y otro con 6x7? ¿O sería distinto sólo si cambio el hog por un lbp, por ejemplo (y ahí estoy obligado a usar algo que no sea una red neuronal)?

No sé si se entiende Muchas gracias Saludos

domingomery commented 5 years ago

se refiere a que en tus tres métodos propuestos sólo uno de ellos puede presentar una solución con una red neuronal, sólo uno de ellos puede ser un SVM, etc. El número de particiones tiene que ver con la extracción de características no con el clasificador, es decir no es valido que una solucion sea una red neuronal con hog de 6x7, y otro clasificador sea una red neuorinal con un hog de 4x6. Saludos. Domingo

On Jun 1, 2019, 5:29 PM -0400, AlfonsoIgnacioV notifications@github.com, wrote:

Hola, tengo una consulta, cuando se nos dice que podemos utilizar sólo un clasificador de cada familia, ¿se refiere específicamente a tener una combinación de extracción-selección-clasificador o también a sus parámetros? Me refiero, si utilizo hog con pca y una red neuronal, por ejemplo, ¿se consideran dos clasificadores distintos si uso un hog con 4x6 ventanas y otro con 6x7? ¿O sería distinto sólo si cambio el hog por un lbp, por ejemplo (y ahí estoy obligado a usar algo que no sea una red neuronal)? No sé si se entiende Muchas gracias Saludos — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.