domingomery / patrones

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

Patrones: Proyecto #23

Closed domingomery closed 3 years ago

domingomery commented 3 years ago

Comentar, preguntar todo lo relacionado con el proyecto...

gregschuit commented 3 years ago

Hola a tod@s,

Quizás algunos se han encontrado con el siguiente error al usar haralick con la imagen ISIC_0029755_00.jpg y su segmentación ISIC_0029755_00_seg.jpg

image

Investigando el código de la librería, descubrí que este error es producto de una división 0/0 que desencadena una serie de problemas dentro de la librería. Por esta razón hice una PR con una solución para que no pase aquí: https://github.com/mbucchi/pybalu/pull/6 .

De todas formas dudo que me la acepten en un corto plazo, asi que si desean pueden instalar la librería usando mi fork: https://github.com/gregschuit/pybalu. En colab pueden instalarlo así:

!git clone https://github.com/gregschuit/pybalu.git !pip install ./pybalu

Con eso dejará de ocurrir el error mencionado.

Otro detalle que cabe mencionar, es que si están obteniendo este error:

image

Es porque la librería espera que el tipo de los datos de segmentación sea np.int. Pueden corregirlo con astype así:

haralick_features(img[:,:,0], region=seg.astype(np.int), distance=1)

Eso es todo, Saludos!

domingomery commented 3 years ago

Mil gracias @gregschuit por tu aporte!

cristianhdez commented 3 years ago

Hola! Bajo qué métrica debemos evaluar el desempeño de nuestros clasificadores? Ya que el accuracy que hemos visto es más bien binario.

domingomery commented 3 years ago

Bajo qué métrica debemos evaluar el desempeño de nuestros clasificadores?

Se debe reportar el Accuracy y la Matriz de Confusión.

Ya que el accuracy que hemos visto es más bien binario.

Binario? el accuracy visto en clases (desde las primeras clases, tarea 01, reconocimiento facial, etc.) es siempre el porcentaje de muestras correctamente bien clasificadas, es decir la suma de la diagonal de la matriz de confusión dividido por el total de muestras. Esto se aplica para K clases, con K mayor o igual a 2. Te recomiendo revisar la clase sobre la Matriz de Confusión y el Trabajo en Clases 11.

Los conceptos TPR y FPR es para clasificación binaria (como la tarea 03). En el proyecto no hay que medir estas dos métricas de desempeño.

nico-mac commented 3 years ago

Hola profesor,

Estabamos revisando las imágenes segmentadas y vemos que hay algunas donde el lunar esta representado por pixeles blancos y el fondo negro, y otras donde el lunar es lo negro y el fondo blanco. Aquí hay un ejemplo: test / clase 0 / ISIC_0024372_00_seg: ISIC_0024372_00_seg

test / clase 0 / ISIC_0026171_00_seg: ISIC_0026171_00_seg

Nos parece muy raro, pero son varias las que estan invertidas

domingomery commented 3 years ago

Claramente esto es un error humano de quien realizó la base de datos. La imagen correcta en estos casos debe ser la imagen negativa. Si hay alguien del curso puede arreglar este problema se lo agradecería muchísimo, de lo contrario tendremos que seguir trabajando con datos que no son perfectos.

nico-mac commented 3 years ago

Dejo un zip usable como reemplazo a lunares7p con las segmentaciones arregladas. Es posible que algunas sigan estando mal o que algunas que estaban bien ahora estén mal. Se cambian aprox 5% de las imágenes de segmentación. El archivo: fixed.zip El truco:

# Cargar imagen original
img = (plt.imread(segmentation_path) > 127) * 1

# Sumar bordes
top = img[0,:].sum()
bottom = img[-1,:].sum()
left = img[:,0].sum()
right = img[:,-1].sum()
total = top + bottom + left + right

# Invertir si:
if (total > 800 or
    (total > 200 and img[127,127] == 0)):
  img *= -1
domingomery commented 3 years ago

Dejo un zip usable como reemplazo a lunares7p con las segmentaciones arregladas...

Mil gracias @nico-mac !