domingomery / patrones

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

Patrones: Tarea 01 #20

Closed domingomery closed 3 years ago

domingomery commented 3 years ago

Por favor hacer comentarios aquí. Respondo todas las preguntas siempre y cuando no las haya aclarado en clases, o no estén escritas en el enunciado de la Tarea, o no las haya contestado en este foro. Usemos el foro responsablemente para que sea de utilidad. Preguntas repetidas, pueden hacer este foro excesivamente largo, lo que dificultará su lectura. Muchas gracias! Domingo

fnberrios commented 3 years ago

Hola, en el enunciado se menciona que no está permitido usar funciones de librerías que realicen la extracción de características de una imagen. Sin embargo, ¿es posible utilizar la función size para obtener las dimensiones de la imagen? Lo pregunto porque me parece muy importantes esos datos para poder realizar operaciones de análisis sobre la imagen y, sí, técnicamente la dimensión es una característica de la imagen, pero estoy realizando un análisis cuantitativo de ella, no cualitativo.

domingomery commented 3 years ago

Hola, en el enunciado se menciona que no está permitido usar funciones de librerías que realicen la extracción de características de una imagen. Sin embargo, ¿es posible utilizar la función size para obtener las dimensiones de la imagen? Lo pregunto porque me parece muy importantes esos datos para poder realizar operaciones de análisis sobre la imagen y, sí, técnicamente la dimensión es una característica de la imagen, pero estoy realizando un análisis cuantitativo de ella, no cualitativo.

Sí, claro que se puede. También se puede usar 'shape' de numpy.

Jaluco commented 3 years ago

Podemos usar las herramientas de contornos de opencv? No se si cuentan como una operacion cualitativa porque no son funciones que directamente reciban una imagen y retornen otra sino que una funcion ecuentra los contornos y otra los pinta en la imagen.

domingomery commented 3 years ago

sip, tambien se puede

Domingo On 19 Mar 2021 2:28 PM -0300, Jaluco @.***>, wrote:

Podemos usar las herramientas de contornos de opencv? No se si cuentan como una operacion cualitativa porque no son funciones que directamente reciban una imagen y retornen otra sino que una funcion ecuentra los contornos y otra los pinta en la imagen. — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

rihanuch commented 3 years ago

Hola!

Tengo una duda más general, qué clasifica como una característica en general? simetria? centro de masa? etc? Se que se definió en clases, pero no me queda claro porque acá una característica es todo lo que se pueda extraer (por ejemplo si quiero la simetría tendría que ver los rgb de la matriz y ver cuan parecidos son)

Al mismo tiempo, tengo la misma duda con la clasificación.

Gracias! 😄

domingomery commented 3 years ago

Tengo una duda más general, qué clasifica como una característica en general? simetria? centro de masa? etc? Se que se definió en clases, pero no me queda claro porque acá una característica es todo lo que se pueda extraer (por ejemplo si quiero la simetría tendría que ver los rgb de la matriz y ver cuan parecidos son)

Una característica es una medición hecha sobre el objeto de análisis, por lo general es un escalar (como la simetría, el área, el número de agujeros, etc.) o puede ser un vector (el centro de masa, o el histograma de la imagen, etc.). Para la tarea debes pensar qué características funcionaría para separar las clases. Puedes inventar una característica como el número de pixeles de la letra que están en la zona de las 4 esquinas de la imagen, dividido por el numero de pixeles de la imagen (puede ser una buena idea para detectar la letra X, no la he probado). Mira el ejemplo de Python de la clase del 23/marzo.

Al mismo tiempo, tengo la misma duda con la clasificación.

En la clasificación debes ver cómo usar los valores obtenidos por las características para detectar cada una de las cinco clases. En el ejemplo de arriba (para detectar la X), si esa característica tiene un valor mayor que un umbral entonces tu clasificador dice que la letra que está analizando es una X. Mira el ejemplo de Python de la clase del 23/marzo. Para esta tarea la clasificación se puede lograr comparando las características con umbrales. Ya veremos en el curso técnicas más sofisticadas.

VicenteMerino commented 3 years ago

Hola Profe, tengo una duda. Implementé una función en python que calcula el perímetro de una figura binaria y ahora quiero normalizarlo, pero no me queda claro cuál debería ser el factor o cómo se hace. Algo me dice que el cálculo se debería hacer algo así como Perimetro_normalizado = Perimetro_original /(2Largo_imagen + 2Ancho_imagen). Si me puede confirmar si mi cálculo es correcto se lo agradecería mucho.

Saludos

Edit: Creo que algo más simple es usar el área y perímetro sin escalar y con eso calcular la redondez que ya es un parámetro normalizado por definición. Corrijame si me equivoco.

stmorales commented 3 years ago

Hola!

Tengo una pregunta respecto al cómo debemos adquirir las imágenes para esta tarea. En clases hemos visto que usan carpetas con las imagenes desde Dropbox. Existe una carpeta con estas imagenes disponible para esta tarea? O trabajamos cada uno como pueda?

En mi caso importé las imagenes a una carpeta en mi GoogleDrive y las manejo desde ahí. Quisiera saber cuál es la mejor manera que recomiendan para facilitar el trabajo de los ayudantes al corregir.

Muchas gracias

VicenteMerino commented 3 years ago

@stmorales yo subí el zip a mi Dropbox y usé el ejemplo del primer colab que vimos

VicenteMerino commented 3 years ago

Profe, no me queda muy claro las librerías que podemos usar, es posible usar la función extract_features que vimos en el colab de la semana pasada? Podemos usar los momentos de Hu? Además de esto, cuanto se considera un Accuracy del clasificador aceptable.

domingomery commented 3 years ago

Hola Profe, tengo una duda. Implementé una función en python que calcula el perímetro de una figura binaria y ahora quiero normalizarlo, pero no me queda claro cuál debería ser el factor o cómo se hace. Algo me dice que el cálculo se debería hacer algo así como Perimetro_normalizado = Perimetro_original /(2_Largo_imagen + 2_Ancho_imagen). Si me puede confirmar si mi cálculo es correcto se lo agradecería mucho.

suena muy razonable... lo ideal sería observar en el training que la varianza de esta característica sea pequeña para cada clase y que la media sea distinta entre las clases. Saludos

Edit: Creo que algo más simple es usar el área y perímetro sin escalar y con eso calcular la redondez que ya es un parámetro normalizado por definición. Corrijame si me equivoco.

la redondez es una buena alternativa porque es invariante al tamaño

domingomery commented 3 years ago

Hola!

Tengo una pregunta respecto al cómo debemos adquirir las imágenes para esta tarea. En clases hemos visto que usan carpetas con las imagenes desde Dropbox. Existe una carpeta con estas imagenes disponible para esta tarea?

Buena idea, les pido por favor que usen estos comandos en el Google Colab:

!wget https://www.dropbox.com/s/vy71dzhokpask5u/letras.zip !unzip letras

con esto tienen todas las letras en la carpeta 'letras'

domingomery commented 3 years ago

Profe, no me queda muy claro las librerías que podemos usar, es posible usar la función extract_features que vimos en el colab de la semana pasada?

Como dije en clases: no se puede usar extract_features de la librería pyxvis ni ninguna librería de extracción de características.

Podemos usar los momentos de Hu?

Como dije en clases: no se puede usar momentos de Hu, ni de librerías ni implementado por uds. Traten de inventar uds. mismos las características que necesiten para este problema.

Además de esto, cuanto se considera un Accuracy del clasificador aceptable.

Un Accuracy aceptable es mayo de 90%, yo espero que obtengan 95% o más.

IchottMano commented 3 years ago

Hola!

Puedo usar KNN para clasificar aquellas imágenes que no logré clasificar de otro modo? El KNN lo implementé yo mismo.

Saludos!

domingomery commented 3 years ago

Puedo usar KNN para clasificar aquellas imágenes que no logré clasificar de otro modo? El KNN lo implementé yo mismo.

Sí, es posible usar KNN, pero sólo si lo implementas.

VicenteMerino commented 3 years ago

Profesor, es posible cambiar el orden de las imágenes? Algunas que están juntas tienen formas similares y creo que esto podría generar un sesgo. Estaba pensando en hacer un shuffle.

domingomery commented 3 years ago

Profesor, es posible cambiar el orden de las imágenes? Algunas que están juntas tienen formas similares y creo que esto podría generar un sesgo. Estaba pensando en hacer un shuffle.

No es posible cambiar el orden de las imágenes: se debe seguir estrictamente el protocolo del enunciado donde aparecen indicadas las imágenes que son para training y las imágenes que son para testing. Así todo/as realizan exactamente el mismo experimento.

danustilovsky commented 3 years ago

Hola, se puede usar la funciones que dada una imagen entreguen los contornos presentes en esta para realizar la tarea?

domingomery commented 3 years ago

sí, se puede. Esto ya lo contesté anteriormente. Traten de no repetir preguntas.

Jaluco commented 3 years ago

Una pregunta del enunciado, la funcion reconocedor debe recibir una sola imagen binaria, ¿esto se refiere a el path de la imagen o al objeto archivo ya abierto y leido por python?

dabalada commented 3 years ago

Hola! Tengo una pregunta respecto al cómo debemos adquirir las imágenes para esta tarea. En clases hemos visto que usan carpetas con las imagenes desde Dropbox. Existe una carpeta con estas imagenes disponible para esta tarea?

Buena idea, les pido por favor que usen estos comandos en el Google Colab:

!wget https://www.dropbox.com/s/vy71dzhokpask5u/letras.zip !unzip letras

con esto tienen todas las letras en la carpeta 'letras'

El set de imagenes se puede importar directamente de github con los siguientes comandos:

!wget https://github.com/domingomery/patrones/blob/master/tareas/Tarea_01/letras.zip?raw=true letras.zip !unzip letras.zip?raw=true

dabalada commented 3 years ago

Los umbrales deben ser calculados por el código usando el set de entrenamiento o se pueden pone a mano?

domingomery commented 3 years ago

Una pregunta del enunciado, la funcion reconocedor debe recibir una sola imagen binaria, ¿esto se refiere a el path de la imagen o al objeto archivo ya abierto y leido por python?

La función debe recibir la imagen (la matriz) no el nombre del archivo.

domingomery commented 3 years ago

Los umbrales deben ser calculados por el código usando el set de entrenamiento o se pueden pone a mano?

Sí, esto ya lo he dicho en clases. Los umbrales y otros parámetros que necesiten para realizar la clasificación los pueden escoger manualmente.

porellanau commented 3 years ago

Profesor, ¿se puede ajustar el threshold posterior al testing de la clasificación? Por ejemplo, luego de analizar la matriz de confusión puedo notar que una letra está siendo confundida por otra, pero quizás ajustando un poco el umbral "al ojo" manualmente pueda conseguir un mayor accuracy. ¿Es válido esto?

domingomery commented 3 years ago

Profesor, ¿se puede ajustar el threshold posterior al testing de la clasificación? Por ejemplo, luego de analizar la matriz de confusión puedo notar que una letra está siendo confundida por otra, pero quizás ajustando un poco el umbral "al ojo" manualmente pueda conseguir un mayor accuracy. ¿Es válido esto?

No es una buena práctica ajustar los parámetros del clasificador con el testing, pero en esta tarea está permitido. Más adelante veremos un tercer subconjunto llamado 'Validación' con el que puedes ajustar todos los parámetros que quieras, para finalizar con las pruebas en el testing.

VicenteMerino commented 3 years ago

Profe, el entregable debe ser el pdf + archivo ipynb o pdf + link al colab? Además quiero saber si en los graficos deben estar todas las letras en un mismo grafico? O puedo poner solo graficos de los que sean mas relevantes segun la caracteristica/clase? Por último no entiendo a que se refiere con un gráfico del espacio de características?

domingomery commented 3 years ago

el entregable debe ser el pdf + archivo ipynb o pdf + link al colab?

El enunciado dice pdf y archivo ipynb, no se pide el link al colab.

en los graficos deben estar todas las letras en un mismo grafico? O puedo poner solo graficos de los que sean mas relevantes segun la caracteristica/clase?

Como quieras.

Por último no entiendo a que se refiere con un gráfico del espacio de características?

Estos son los histogramas (si graficas solo una caracteristicas) o los graficos con nubes de puntos (si graficas dos características, como los graficos de la clase introductoria mandarinas-naranjas en que graficamos en un eje el área y en otro eje el color verde). Existen también gráficas en 3D donde graficas tres características.

rogelio-alb commented 3 years ago

Hola Profesor, es posible escribir el clasificador como una clase, y que la función "Reconocedor" use atributos de dicha clase para hacer la clasificación?.

domingomery commented 3 years ago

Hola Profesor, es posible escribir el clasificador como una clase, y que la función "Reconocedor" use atributos de dicha clase para hacer la clasificación?.

sí, es posible.

troncosoae commented 3 years ago

Hola Profesor, el enunciado de la tarea dice que no se puede "usar funciones de librerías que realicen la extracción de caracteristicas". Para mi tarea, he estado evaluando la posibilidad de usar la transformada Hough Line de opencv, pero no estoy seguro si este cae en la categoría de "funciones de librerías que realicen la extracción de caracteristicas". Es evidente que sí extrae características de la imagen, pero a mi juicio lo hace de la misma forma que la FFT (la cual según entiendo sí está permitida). ¿Puedo usar esta función para la tarea? ¿O si quiero usar esta transformada tendré que desarrollar yo mismo el código que la calcula? En el siguiente link describe el funcionamiento de la función: hough line opencv

manarea commented 3 years ago

Hola profesor, me pasa en la tarea que mi reconocedor obtiene buenos porcentajes en el entrenamiento y al considerar todas las imágenes, pero si solo considero las últimas 25, los resultados no son tan buenos. Para la evaluación se considerará como desempeño obtenido en las pruebas, el desempeño logrado al clasificar todas las imágenes? ¿O solo las últimas 25?

domingomery commented 3 years ago

Hola Profesor, el enunciado de la tarea dice que no se puede "usar funciones de librerías que realicen la extracción de caracteristicas". Para mi tarea, he estado evaluando la posibilidad de usar la transformada Hough Line de opencv, pero no estoy seguro si este cae en la categoría de "funciones de librerías que realicen la extracción de caracteristicas". Es evidente que sí extrae características de la imagen, pero a mi juicio lo hace de la misma forma que la FFT (la cual según entiendo sí está permitida).

¿Puedo usar esta función para la tarea? ¿O si quiero usar esta transformada tendré que desarrollar yo mismo el código que la calcula?

En el siguiente link describe el funcionamiento de la función: hough line opencv

ok, se puede usar la transformada de Hough

domingomery commented 3 years ago

Hola profesor, me pasa en la tarea que mi reconocedor obtiene buenos porcentajes en el entrenamiento y al considerar todas las imágenes, pero si solo considero las últimas 25, los resultados no son tan buenos. Para la evaluación se considerará como desempeño obtenido en las pruebas, el desempeño logrado al clasificar todas las imágenes? ¿O solo las últimas 25?

Quizas el testing tiene algunas variaciones que tu algoritmo no considera (leves rotaciones por ejemplo). Me imagino que habrá soluciones que alcancen 95% o mas en el testing.

Sobre la evalución de la tarea, encontrarás el detalle en la página del enunciado.

porellanau commented 3 years ago

Profesor, me queda una duda en el enunciado con respecto al código. Entiendo que la función 'Reconocedor' debo aplicarla tanto para el conjunto de training y testing, junto con sus respectivas matrices de confusión y accuracy pero ¿Debe quedar constancia de los experimentos que nos llevaron a elegir las características escogidas y sus respectivos umbrales, o esto basta plasmarlo en el informe solamente?

Muchas gracias de antemano.

domingomery commented 3 years ago

¿Debe quedar constancia de los experimentos que nos llevaron a elegir las características escogidas y sus respectivos umbrales, o esto basta plasmarlo en el informe solamente?

En el código coloca sólo la solución, eso es suficiente. En el informe puedes contar como lo hiciste.

fguinez commented 3 years ago

En el código coloca sólo la solución, eso es suficiente. En el informe puedes contar como lo hiciste.

A raíz de esto, ¿se puede agregar de todas formas la experimentación en el código*? ¿o es más bien obligatorio no incluirlo?

*Obviamente me refiero a incluirlo de forma ordenda, con sección aparte y sin que aumente significativamente el tiempo de ejecución

domingomery commented 3 years ago

En el código coloca sólo la solución, eso es suficiente. En el informe puedes contar como lo hiciste. A raíz de esto, ¿se puede agregar de todas formas la experimentación en el código*? ¿o es más bien obligatorio no incluirlo?

Puedes incluirlo como sección aparte de manera ordenada.

domingomery commented 3 years ago

Agunas personas me han señalado que un informe de una sola página es dificil de lograr con tanta gráfica y tabla. Como alternativa, pueden poner menos graficas y tablas en el informe e indicar que algunas graficas y tablas se muestran en el código.

La restricción de una sola página en el informe hay que respetarla.

VicenteMerino commented 3 years ago

Agunas personas me han señalado que un informe de una sola página es dificil de lograr con tanta gráfica y tabla. Como alternativa, pueden poner menos graficas y tablas en el informe e indicar que algunas graficas y tablas se muestran en el código.

La restricción de una sola página en el informe hay que respetarla.

Profe es válido simplemente ponerlas muy chicas? Yo asumí que el ayudante puede hacer zoom al pdf y así hacerlo caber todo en una pagina. O todo el documento debe ser legible a simple vista?

domingomery commented 3 years ago

no hay problema Vicente. Saludos

On Sat, Apr 17, 2021 at 12:28 PM Vicente Merino @.***> wrote:

Agunas personas me han señalado que un informe de una sola página es dificil de lograr con tanta gráfica y tabla. Como alternativa, pueden poner menos graficas y tablas en el informe e indicar que algunas graficas y tablas se muestran en el código.

La restricción de una sola página en el informe hay que respetarla.

Profe es válido simplemente ponerlas muy chicas? Yo asumí que el ayudante puede hacer zoom al pdf y así hacerlo caber todo en una pagina. O todo el documento debe ser legible a simple vista?

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/domingomery/patrones/issues/20#issuecomment-821849563, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAD3BSWRSKGQR775TR7DABLTJGZLDANCNFSM4ZKPXD4A .

kdroppelmann commented 3 years ago

Hola! Quería saber si mi función Reconocedor puede recibir un imagen leída directamente desde ImageLoad() y luego dentro del Reconocedor pasarla a binaria (en vez de recibir una imagen binaria directamente). Lo que pasa es que dentro del reconocedor, según cierta característica, le aplico erosión a algunas imágenes y esa función debe recibir la imagen desde ImageLoad() y no una imagen binaria.

Gracias!

domingomery commented 3 years ago

no se puede, Reconocedor debe recibir imagenes binarias. Usa una version de erosion que funcione con imagenes binarias. Saludos

Domingo On 18 Apr 2021 5:13 PM -0400, kdroppelmann @.***>, wrote:

Hola! Quería saber si mi función Reconocedor puede recibir un imagen leída directamente desde ImageLoad() y luego dentro del Reconocedor pasarla a binaria (en vez de recibir una imagen binaria directamente). Lo que pasa es que dentro del reconocedor, según cierta característica, le aplico erosión a algunas imágenes y esa función debe recibir la imagen desde ImageLoad() y no una imagen binaria. Gracias! — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

Jaluco commented 3 years ago

Una duda, a que se refiere con imagen binaria, la matriz de numpy de pixeles o una matriz de ceros y unos? Porque habia entendido que era la matriz y como opencv abre las imagenes como matrices crei que bastaba con la funcion imread() de dicha biblioteca.

domingomery commented 3 years ago

la definicion de imagen binaria es que contenga solo ceros y unos (eso es "binario"), en este caso uno es un pixel de la letra y cero un pixel del fondo. sa

Domingo On 18 Apr 2021 7:04 PM -0400, Jaluco @.***>, wrote:

Una duda, a que se refiere con imagen binaria, la matriz de numpy de pixeles o una matriz de ceros y unos? Porque habia entendido que era la matriz y como opencv abre las imagenes como matrices crei que bastaba con la funcion imread() de dicha biblioteca. — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.