domingomery / patrones

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

Tarea 01 #7

Closed domingomery closed 4 years ago

domingomery commented 4 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. Saludos. Domingo

jvlara commented 4 years ago

Profe, entendí que ahora el código se revisara con un for llamando a una función implementada en un .py, mi problema es que yo cree un jupyter notebook que almacena todas las características de las imágenes de training, por lo que al crear un .py tendría que entrenar todo muchas veces ya que mi implementación es un KNN. ¿Que puedo hacer?

bastianfeliz commented 4 years ago

Hola profe,

Respecto a los descriptores de Fourier, una de las condiciones para hacer la sumatoria que entrega los llamados "Fourier Coefficients" es que los pixeles que se vayan usando estén conectados con el anterior y con el que viene. En otras palabras, para calcular el coeficiente de un perímetro se deben ordenar sus pixeles. Estoy bastante complicado con hacer este orden de los pixeles ¿hay alguna fuente o concepto que recomiendes revisar para este tipo de problema?

fprebolledo commented 4 years ago

hola!, para el nuevo criterio de entrega, el for será en un código bash?

felipecarrero commented 4 years ago

Profesor, sobre los nuevos lineamientos de la tarea:

  1. ¿Se asume que la imagen de entrada será un carácter con las mismas dimensiones que lo encontrado en la imagen de Testing? Es decir, como si se hiciera directamente un crop a la imagen de Testing que tenemos disponible para sacar un único carácter.

  2. ¿Se debe asumir que el carácter en la imagen de input estará centrado o puede variar? Es decir, ¿la imagen de input sería como la imagen I o podría ser también como la imagen II / III?

input

Gracias por su respuesta.

MrEarle commented 4 years ago

Hola profe,

Me sumo a la pregunta de @felipecarrero. Donde dice:

¿Se debe asumir que el carácter en la imagen de input estará centrado o puede variar? Es decir, ¿la imagen de input sería como la imagen I o podría ser también como la imagen II / III?

Como serán los margenes de la letra? Con esto me refiero a el espacio que habria entre el bounding box de la letra y el borde de la imagen. Será ajustado (poco espacio) o puede ser arbitrario?

cgvalle commented 4 years ago

Profe, entendí que ahora el código se revisara con un for llamando a una función implementada en un .py, mi problema es que yo cree un jupyter notebook que almacena todas las características de las imágenes de training, por lo que al crear un .py tendría que entrenar todo muchas veces ya que mi implementación es un KNN. ¿Que puedo hacer?

Hola, puedes guardar el modelo entrenado de KNN por ejemplo en un .npy y luego cargarlo en la función reconocedor para que clasifique, de esta forma no tienes que entrenarlo denuevo.

cgvalle commented 4 years ago

hola!, para el nuevo criterio de entrega, el for será en un código bash?

Hola, El codigo para testeo estara escrito en un .py, en donde importaremos la función reconocedor.

cgvalle commented 4 years ago

Profesor, sobre los nuevos lineamientos de la tarea:

  1. ¿Se asume que la imagen de entrada será un carácter con las mismas dimensiones que lo encontrado en la imagen de Testing? Es decir, como si se hiciera directamente un crop a la imagen de Testing que tenemos disponible para sacar un único carácter.
  2. ¿Se debe asumir que el carácter en la imagen de input estará centrado o puede variar? Es decir, ¿la imagen de input sería como la imagen I o podría ser también como la imagen II / III?

input

Gracias por su respuesta.

Hola, respondiendo a tus preguntas:

  1. La imagen de entrada sera una matrix de tipo unit8 y de dimensiones mxn (no tiene porque ser cuadrada).

  2. opción III. No necesariamente estara centrada.

cgvalle commented 4 years ago

Hola profe,

Me sumo a la pregunta de @felipecarrero. Donde dice:

¿Se debe asumir que el carácter en la imagen de input estará centrado o puede variar? Es decir, ¿la imagen de input sería como la imagen I o podría ser también como la imagen II / III?

Como serán los margenes de la letra? Con esto me refiero a el espacio que habria entre el bounding box de la letra y el borde de la imagen. Será ajustado (poco espacio) o puede ser arbitrario?

Hola, como las imagenes que enseña felipecarrero, la letra nunca topara el borde. El espacio entre el borde y la letra sera random, por lo que puede ser pequeño o grande. La imagen III de felipecarrero es un buen ejemplo de espacio pequeño.

aeperalta commented 4 years ago

Hola!

En la función para segmentar y subdividir las imágenes de cada letra, en uno de los pasos utilizo la función findContours de opencv, la cual entrega las coordenadas de los pixeles de los bordes (que tengo entendido que no se puede usar porque el output no es una imagen), pero solo lo utilizo para eso. Puedo dejarlo así para no hacerlo "a mano" o tener que encontrar otro método?

Saludos!

felipecarrero commented 4 years ago

Profesor, sobre los nuevos lineamientos de la tarea:

  1. ¿Se asume que la imagen de entrada será un carácter con las mismas dimensiones que lo encontrado en la imagen de Testing? Es decir, como si se hiciera directamente un crop a la imagen de Testing que tenemos disponible para sacar un único carácter.
  2. ¿Se debe asumir que el carácter en la imagen de input estará centrado o puede variar? Es decir, ¿la imagen de input sería como la imagen I o podría ser también como la imagen II / III?

input Gracias por su respuesta.

Hola, respondiendo a tus preguntas:

  1. La imagen de entrada sera una matrix de tipo unit8 y de dimensiones mxn (no tiene porque ser cuadrada).
  2. opción III. No necesariamente estara centrada.

Hola, para complementar mi pregunta: independientemente del tamaño de la matriz de entrada mxn, ¿el tamaño de los caracteres en sí será el mismo que lo que se tiene en la imagen de Testing? Es decir, ¿no habrán escalamientos? Gracias

alainray commented 4 years ago

Siguiendo las preguntas: uno de mis clasificadores usa KNN, pero mi base de entrenamiento está hecha con una estrategia de segmentación que también se espera esté al momento de hacer inferencia. Cómo vamos a poder garantizar eso si no tenemos controles sobre el input binario que nos llega?

domingomery commented 4 years ago

Hemos decidido con los ayudantes que a aquellas personas que les resulte muy problemática la entrega sugerida en el enunciado, podrán entregar una solución auto-contenida, es decir, un solo código que al ejecutarlo evalúe cada una de las imágenes de tesing.

La evaluación del desempeño de la tarea se hará solo con las imágenes de testing, no habrá letras extrañas ni capciosas, ni letras de otros tamaños, no habrá escalamientos, rotaciones, ruidos, ni nada raro.

BFFV commented 4 years ago

Hemos decidido con los ayudantes que a aquellas personas que les resulte muy problemática la entrega sugerida en el enunciado, podrán entregar una solución auto-contenida, es decir, un solo código que al ejecutarlo evalúe cada una de las imágenes de tesing.

La evaluación del desempeño de la tarea se hará solo con las imágenes de testing, no habrá letras extrañas ni capciosas, ni letras de otros tamaños, no habrá escalamientos, rotaciones, ruidos, ni nada raro.

1) ¿Esto se refiere a un código que al ejecutarse se entrene el clasificador y luego abra la imagen 'Testing.png' del repositorio y como output entregue la clasificación de todas las letras dentro de ella? (es decir sólo se utilizará dicha imagen completa al momento de probar el algoritmo) ¿O se refiere a un código que recibe una lista de paths a imágenes de testing, donde cada una contiene una letra, y se debe entregar como output cada una de las clases encontradas en el mismo orden de los path?

2) ¿Si es el primer caso entonces el output puede ser mostrado a elección? (por ejemplo utilizando una visualización de las clasificaciones para ver bien a qué letras en la imagen se refiere cada clase encontrada, en vez de intentar explicar con sólo texto donde está posicionada cada letra clasificada)

jatrijori commented 4 years ago

Si hago un código auto-contenido en jupyter puedo subir las imágenes junto a mi tarea? En mi caso las recorte a mano y necesito tener los archivos recortados en sus respectivas carpetas para que mi código corra.

Gracias

arpincheira commented 4 years ago

Hola, tengo tres preguntas:

ceyzaguirre4 commented 4 years ago

@domingomery Podemos usar funciones matematicas de otros paquetes (eg. scipy)? En particular, le molesta si usamos la funcion scipy.signal.convolve2d para aplicar filtros convolucionales? Gracias

Dngallar commented 4 years ago

Hemos decidido con los ayudantes que a aquellas personas que les resulte muy problemática la entrega sugerida en el enunciado, podrán entregar una solución auto-contenida, es decir, un solo código que al ejecutarlo evalúe cada una de las imágenes de tesing. La evaluación del desempeño de la tarea se hará solo con las imágenes de testing, no habrá letras extrañas ni capciosas, ni letras de otros tamaños, no habrá escalamientos, rotaciones, ruidos, ni nada raro.

  1. ¿Esto se refiere a un código que al ejecutarse se entrene el clasificador y luego abra la imagen 'Testing.png' del repositorio y como output entregue la clasificación de todas las letras dentro de ella? (es decir sólo se utilizará dicha imagen completa al momento de probar el algoritmo) ¿O se refiere a un código que recibe una lista de paths a imágenes de testing, donde cada una contiene una letra, y se debe entregar como output cada una de las clases encontradas en el mismo orden de los path?
  2. ¿Si es el primer caso entonces el output puede ser mostrado a elección? (por ejemplo utilizando una visualización de las clasificaciones para ver bien a qué letras en la imagen se refiere cada clase encontrada, en vez de intentar explicar con sólo texto donde está posicionada cada letra clasificada)
  1. Si realizas una solución autocontenida, da igual cómo utilices la imagen test, ya sea entera o por letra. Lo importante es que entregues el reconocimiento.

  2. Como gustes entrega la clasificación

Dngallar commented 4 years ago

Si hago un código auto-contenido en jupyter puedo subir las imágenes junto a mi tarea? En mi caso las recorte a mano y necesito tener los archivos recortados en sus respectivas carpetas para que mi código corra.

Gracias

Para que evaluemos el código es necesario que podamos ejecutarlo, por lo tanto debes subir todo lo necesario para eso.

Dngallar commented 4 years ago

Hola, tengo tres preguntas:

  • ¿ Se puede utilizar la función tolist para poder pasar el numpy array a lista?
  • ¿ Se espera que el numpy array sea resultado de la imagen obtenida a través de la lectura de una librería, cual sería esta librería? (cv2, scikit-image?)
  • Investigando encontré que hay 2 maneras de calcular el momento de una imagen al parecer, una en que queda como la imagen I(que es la que vimos en clases) y la otra que sería la imagen II que he encontrado dentro de las explicaciones de los cálculos de las librerías y en la que se multiplican los distintos componentes de la anterior por el valor de la escala de grises en ese punto, cual debería usar para los cálculos? I: II II: I
  1. Sí.

  2. Puedes usar cualquier librería para eso.

  3. Puedes probar los resultados con ambas funciones, siempre y cuando las implementes tú.

Dngallar commented 4 years ago

@domingomery Podemos usar funciones matematicas de otros paquetes (eg. scipy)? En particular, le molesta si usamos la funcion scipy.signal.convolve2d para aplicar filtros convolucionales? Gracias

Pueden usar cualquier función que tenga como input una imagen y como output una imagen!

ojedaf commented 4 years ago

Estimado @domingomery en mi caso como ya te había comentado yo hice la tarea en Colab y lo conecto a Drive para cargar las imágenes ¿Para la revisión puedo enviar el Jupyter Notebook de Colab comentado, con todas las celdas ejecutadas y las indicaciones de donde se debe cambiar el path para obtener la imagen de test ya que mi código hace automáticamente la segmentación de las imágenes?

Dngallar commented 4 years ago

Estimado @domingomery en mi caso como ya te había comentado yo hice la tarea en Colab y lo conecto a Drive para cargar las imágenes ¿Para la revisión puedo enviar el Jupyter Notebook de Colab comentado, con todas las celdas ejecutadas y las indicaciones de donde se debe cambiar el path para obtener la imagen de test ya que mi código hace automáticamente la segmentación de las imágenes?

Debes enviar y comentar todo lo que sea necesario para poder ejecutarlo

fdominguezclaro commented 4 years ago

Hemos decidido con los ayudantes que a aquellas personas que les resulte muy problemática la entrega sugerida en el enunciado, podrán entregar una solución auto-contenida, es decir, un solo código que al ejecutarlo evalúe cada una de las imágenes de tesing.

La evaluación del desempeño de la tarea se hará solo con las imágenes de testing, no habrá letras extrañas ni capciosas, ni letras de otros tamaños, no habrá escalamientos, rotaciones, ruidos, ni nada raro.

Con esto entonces la función reconocedor(X) que había que entregar ya no es necesario completarla?

ewaugh2 commented 4 years ago

Profe prefieren que les entreguemos la tarea comprimida como zip? En mi caso subo 6 archivos.

domingomery commented 4 years ago

Con esto entonces la función reconocedor(X) que había que entregar ya no es necesario completarla?

como bien dije: "a aquellas personas que les resulte muy problemática la entrega sugerida en el enunciado, podrán entregar una solución auto-contenida"

domingomery commented 4 years ago

Profe prefieren que les entreguemos la tarea comprimida como zip? En mi caso subo 6 archivos.

la tarea se sube a google classroom, no sé cuales son las restricciones para subir tareas, me imagino que se puede de ambas formas

domingomery commented 4 years ago

Si hago un código auto-contenido en jupyter puedo subir las imágenes junto a mi tarea? En mi caso las recorte a mano y necesito tener los archivos recortados en sus respectivas carpetas para que mi código corra.

Como bien se decía más arriba: Debes enviar y comentar todo lo que sea necesario para poder ejecutar la tarea... lo que nosotros tenemos no debes re-enviarlo

domingomery commented 4 years ago

veo que hay muchas preguntas que se repiten, y son del tipo de especificaciones de funciones que se pueden usar, o formas de como subir la tarea, etc... espero que con las ultimas respuestas haya quedado más claro. Saludos a todo@s

angelaparriana commented 4 years ago

Hola! En Matlab se puede utilizar bwlabel? Gracias!

valeria-adasme commented 4 years ago

Hemos decidido con los ayudantes que a aquellas personas que les resulte muy problemática la entrega sugerida en el enunciado, podrán entregar una solución auto-contenida, es decir, un solo código que al ejecutarlo evalúe cada una de las imágenes de tesing.

La evaluación del desempeño de la tarea se hará solo con las imágenes de testing, no habrá letras extrañas ni capciosas, ni letras de otros tamaños, no habrá escalamientos, rotaciones, ruidos, ni nada raro.

¿Podrán haber imágenes entonces que sea, por ejemplo, una letra A en una esquina de un fondo negro?

domingomery commented 4 years ago

esto cumple con input imagen output imagen, entonces sí se puede... saludos

Domingo On 7 Apr 2020 10:28 PM -0400, angelaparriana notifications@github.com, wrote:

Hola! En Matlab se puede utilizar bwlabel? Gracias! — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or unsubscribe.

domingomery commented 4 years ago

las letras de prueba estaran centradas, se recomienda en todo caso que las caracteristicas que se extraigan sean invariantes a la posicion, por si las letras estan corridas un poco. Saludos

Domingo On 9 Apr 2020 2:28 PM -0400, valeria-adasme notifications@github.com, wrote:

Hemos decidido con los ayudantes que a aquellas personas que les resulte muy problemática la entrega sugerida en el enunciado, podrán entregar una solución auto-contenida, es decir, un solo código que al ejecutarlo evalúe cada una de las imágenes de tesing. La evaluación del desempeño de la tarea se hará solo con las imágenes de testing, no habrá letras extrañas ni capciosas, ni letras de otros tamaños, no habrá escalamientos, rotaciones, ruidos, ni nada raro. ¿Podrán haber imágenes entonces que sea, por ejemplo, una letra A en una esquina de un fondo negro? — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or unsubscribe.

helemysm commented 4 years ago

Profe, vi que un compañero preguntó mas arriba pero no respondió, y yo tenía la misma duda: "En la función para segmentar y subdividir las imágenes de cada letra, en uno de los pasos utilizo la función findContours de opencv, la cual entrega las coordenadas de los pixeles de los bordes (que tengo entendido que no se puede usar porque el output no es una imagen), pero solo lo utilizo para eso (para recortar las imagenes). Puedo dejarlo así para no hacerlo "a mano" o tener que encontrar otro método? ""... Porque luego de tener las imágenes recortadas, yo calculo las características de cada imagen, sin usar esas librerías. Gracias.

domingomery commented 4 years ago

Profe, vi que un compañero preguntó mas arriba pero no respondió, y yo tenía la misma duda: "En la función para segmentar y subdividir las imágenes de cada letra, en uno de los pasos utilizo la función findContours de opencv, la cual entrega las coordenadas de los pixeles de los bordes (que tengo entendido que no se puede usar porque el output no es una imagen), pero solo lo utilizo para eso (para recortar las imagenes). Puedo dejarlo así para no hacerlo "a mano" o tener que encontrar otro método? ""... Porque luego de tener las imágenes recortadas, yo calculo las características de cada imagen, sin usar esas librerías. Gracias.

No he respondido esta pregunta específica porque he respondido varias similares, mira la respuesta que le di a Alain hace 18 días sobre una función de OpenCV.

arpincheira commented 4 years ago

Hola, me acaba de surgir una duda con respecto a que hacer en el caso tengo dos recortes de testing(uno con todas las imágenes del mismo porte y otro con imágenes disparejas) y tengo 4 sets de training(usando el mismo principio) y con el testing cortado de manera uniforme mi código tiene una Accuracy del 100% y con los no uniformes presenta una del 92,7% que es mejor presentar en ese caso y con que hago la matriz de confusión? Gracias de antemano

danielaguilera commented 4 years ago

Hola! Consulta. ¿La matriz de confusión y desempeño debe medirse para las imágenes de training, testing o ambas?

GboreB commented 4 years ago

Profesor buen día. Me pasa que algunas imágenes durante las confunde entre letras (indica que es una A o una D, por ejemplo.) ¿Esto se considera como un "Falso positivo"? No he podido precisar mas el clasificador para que no las confunda.

Gracias.

Saludos.

domingomery commented 4 years ago

Hola! Consulta. ¿La matriz de confusión y desempeño debe medirse para las imágenes de training, testing o ambas?

se tiene que repotar para los datos de testing... el reporte para los datos de training es opcional

domingomery commented 4 years ago

Hola, me acaba de surgir una duda con respecto a que hacer en el caso tengo dos recortes de testing(uno con todas las imágenes del mismo porte y otro con imágenes disparejas) y tengo 4 sets de training(usando el mismo principio) y con el testing cortado de manera uniforme mi código tiene una Accuracy del 100% y con los no uniformes presenta una del 92,7% que es mejor presentar en ese caso y con que hago la matriz de confusión? Gracias de antemano

reporta en tu informe ambos resultados y trata de dar una explicación de por qué sucede...

domingomery commented 4 years ago

Profesor buen día. Me pasa que algunas imágenes durante las confunde entre letras (indica que es una A o una D, por ejemplo.) ¿Esto se considera como un "Falso positivo"? No he podido precisar mas el clasificador para que no las confunda.

Gracias.

Saludos.

El término falso positivo se usa exclusivamente en problemas de detección (cuando quieres por ejemplo detectar si alguien tiene covid19, y tu algoritmo dice esta persona está infectada cuando la verdad es que no esta infectada). En el caso de la tarea la matriz de confusión C es de 5 x 5 elementos, donde C(i,j) dice cuantos letras de la clase i fueron clasificadas como clase j.