Segunda competición de Machine Learning; Futurama

gonya707

¿Alguna vez habéis pausado Prime video y habéis visto qu salen los perfiles de los actores que están en pantalla en ese mismo momento de la pausa? ¿Magia? No, un modelo entrenado con cientos de miles de imágenes "sabe" reconocer a los actores al darle el frame en el que has pausado, y te muestra la ficha de información de los labels que ha podido reconocer.

Nosotros haremos lo mismo, de manera minimalista. En esta ocasión vamos a competir por hacer el sistema de reconocimiento más competente de los personajes de Futurama en algunos frames seleccionados al azar de los siete primeros capítulos. El resto de frames serán usados para entrenar al modelo.

La fecha límite de entrega es el 7 de agosto a las 11:59 PM

Link a la competición

NSFW

Reglas de la competición

  • La competición está hosteada en Kaggle puesto que tienen un sistema para organizar competiciones, yo he dado el csv con las respuestas correctas y cuando entreguéis vuestras respuestas os dará vuestra nota. A partir de ahi podréis ver vuestra posición en el ranking con otros participantes y saber qué puntuación batir para intentar mejorar vuestra precisión en sucesivos intentos.

  • Podéis entregar las respuestas en formato csv obtenido de la manera que queráis, tanto con python como con R, Kaggle tiene su propia plataforma para subir vuestro código y que podamos ver el procedimiento de cada uno. No es necesario enseñar el código de esta manera, pero si recomendable, teniendo en cuenta que estamos aquí para aprender cosas. Para hacer vuestro código en Kaggle id a la pestaña de Code desde el enlace a la competición y empezar un New Notebook

  • Todo método de predicción es válido; Deep learning, decision trees, SVMs... ¡Puedes probarlos todos también!

  • Las respuestas pueden obtenerse/comprobarse a mano muy fácilmente, puedes abrir una imagen y ver quien aparece, pero entiendo que aquí somos todos amigos y no habrá ningún colgado que se ponga a rellenar la respuesta a mano. Si esto no fuese el caso se podría exigir mostrar el código que haya generado las respuestas del primer puesto.

Evaluación de las respuestas

Esta vez la predicción es multi-label, en un frame puede estar Fry, Leela, Bender, cualquier combinación de estos o ninguno. Al entregar una respuesta se evaluará en función del error cuadrático de las respuestas individuales en los tres posibles labels, Fry, Leela y Bender. Predecir todas las respuestas correctas será puntuado con un 0, todas las respuestas incorrectas con un 1.

El benchmark a batir es el de asumir que nadie sale en ningún frame (todas las respuestas a 0), en el que el error cuadrático es de 0.62446.

Se podrán entregar hasta 10 respuestas por día durante dos semanas

Archivos

  • train_data.csv - el dataset de entrenamiento
  • sample_submission.csv - un ejemplo de una respuesta con el formato adecuado
  • train_img Directorio con las imágenes de entrenamiento
  • test_img Directorio con las imágenes de evaluación

Consejos

¡Buena suerte!

15
A
if naranja:
  print("sale fry")
elif morado:
  print("sale leela")
elif gris:
  print("sale bender")
else:
  pass

Ahora en serio, nunca me he puesto en serio con temas de visión artificial. Lo mismo me apunto a esta.

8 1 respuesta
gonya707

#2 Nada te impide hacerlo asi :yum: Pero siempre habra una serie de frames en los que no va a funcionar, especialmente con bender, hay muchos grises en futurama, con vision artificial no dependes del color del pelo si no de las formas de todo su cuerpo, otros colores, y hasta sus posiciones relativas, en los que tambien hay patrones

1 respuesta
Traber

Voy a intentar animarme, cuando he usado cosas de IA han sido con sistemas preentrenados como YOLO o Stanford NLP, pero nunca me he atrevido a entrenar mi propio modelo, espero aprender cosiñas.

1
A

#3 No, sí sé que es un método de mierda. Era por hacer el meme de que toda IA son If y Else. No lo haría así ni loco porque supone mucho curro hacer que cuadre todo

2 respuestas
gonya707

#5 yo lo haria por los loles, igual despues de sacar la mejor puntuacion que pueda con CNNs lo intento, ir pixel por pixel mirando si esta el color naranja del pelo de fry con una ligera tolerancia arriba y abajo de tonalidad, si el numero de matches supera cierto margen isfry=true, es sencillo y factible, pero habrria que ver que fiabilidad tiene

Traber

#5 Ojo que teniendo en cuenta la calidad de las imágenes y que los colores que usan los personajes son bastante diferenciados, no sería nada descabellado hacerlo mediante mapas de color o algo similar, en el que detectes una presencia media de un rango de colores determinado, para detectar un personaje.

Con algo de comparación mediante histogramas podría lograrse, yo he hecho detección de imágenes duplicadas mediante histogramas y la verdad que no es muy difícil, aunque no es lo mismo comparar imágenes completas que detectar una presencia de un determinado color... Si consigo hacer algo con ML y tener un score decente lo mismo me animo por los jajas.

1 1 respuesta
Frave

Mola le daré un try esta semana a ver como es de complicados sacarlo sin calentarte mucho la cabeza usando DL directamente.

1
A

#7 Me interesa eso de detectar similaridad mediante histogramas. Algún sitio por donde empezar? Sé hacerlo mediante hash, pero con histogramas no he trabajado nunca fuera de photoshop.

1 1 respuesta
gonya707

#9 Es otra buena perspectiva con la que usar machine learning, puedes procesar cada imagen para sacar el histograma y montar un modelo que aprenda y analize los patrones de los histogramas, es un problema de reduccion de dimensionalidad (pasas de 3 dimensiones a 1) lo cual acelera mucho el proceso de aprendizaje y de predicción, pero probablemente a coste de precisión. Además puedes si vas por deep learning puedes usar un simple perceptron en vez de una red convolucional ya que solo estas analizando una señal unidimensional, hay muchas ventajas por la que hacer la reduccion a un histograma podría ser una buena idea

telemaco103

A ver si en esta si que saco tiempo, aunque me pilla redactando TFM y con mucho curro, además que de visión por computador solo he tocado un poco YOLO y en otra asignatura de la carrera vi algo de detección de características.

Soltrac

Hay un cheat un poco meme para overwatch y cs y demás que se basa precisamente en esto, en localizar players por ML y hacer el autoaim a ellos.

1 respuesta
ZurdoK

Siempre he querido saber quién es Fry

Frave

#12 bueno en ese caso sería detección y segmentado, aquí solo se hace clasificación ya que solo conocemos su presencia y no las coordenadas o los pixeles en la imagen.

Phil_Rich

Muy guapa esta competicion, ahora justo me pilla de vacas pero si consigo algo de tiempo pobrare!

Kike_Knoxvil

if not(casinos && furcias){
isBender = false;
}

Unrack

He hecho algo sencillito. Lo que no me queda claro es la métrica que se está usando en el leaderboard. Ya que en train tengo 100% de acc y el submision un 0.45 y ojeando algunos casos no he encontrado ningún fallo...

1 respuesta
gonya707

#17 Conseguir 100% en train es lo normal. En principio cuanta mas precision menor puntuacion, se evalua según el % de error cuadrático, era la métrica que más sentido tenía entre las métricas gratuitas, puede que no tengas muchos errores pero se elevan al cuadrado y te sale un 0.45. Desde el panel de control de la competición tengo una sección para subir sandbox submissions y he probado a subir una con todo correcto y me da 0.000, funciona bien, en teoría

1
gonya707

dobleposteo para comentar que he puesto mi codigo de ejemplo para que se os haga sencillo el importar las imagenes y concentraros solo en el training y testeo, he puesto una convolutional neural net con la arquitectura de tinyVGG, que es muy pequeña como el propio nombre indica y la puntuacion que consigue es de 0.36593

https://www.kaggle.com/code/gonzalorecioc/example-code

3
Hurtiek

Que interesante el reto, si no fuera un matao me apuntaba

xhito

Una duda, se puede trabajar con OpenCV para generar más imágenes o solo se puede trabajar con los datos dados?

EDIT: Otra dudilla, el Ladderboard como funciona? cuanto menos puntuación mayor % de acierto?

2 respuestas
gonya707

#21 puedes generar más imágenes, no hay problema, cualquier método es válido

Y si, cuanta menos puntuación mejor

1 respuesta
Frave

Tengo la mañana libre y voy a probar a darle un intento a ver que tal se me da.

xhito

#22 Ósea gana quien tenga el SCORE menor? Me confunde, como en casi todas las demás competiciones gana el que tengo mejor score... xd (es decir, si hay alguien con 0.42 y otro con 0.23 gana el de 0.42, creía que era así de normal), pero ok! Al lio, muchas gracias!

Frave
#1gonya707:

Predecir todas las respuestas correctas será puntuado con un 0, todas las respuestas incorrectas con un 1.

Una cosa esto es así? No será que con que haya una respuesta incorrecta se puntúa con un 1. Es decir con fallar si esta o no uno de los personajes ya se puntúa negativamente ese frame con un 1?

gonya707

Os estais liando sin necesidad xD la evaluación del resultado es en función del error no de la precisión, así que cuanto menos error, mejor. Habría usado Fscore como métrica de precisión pero no era posible usarla en kaggle con múltiples columnas

2
Frave

Bueno ya hice la primera sub con lo básico en visión ahora voy a ver como optimizo.

1 respuesta
gonya707

he bajado a 0.20 sin data augmentation y creo que con mas epoches lo bajaria algo mas, luego pruebo con augmentation a ver si merece la pena

1
Traber

#21 Yo en principio quiero hacerlo de forma que en lugar de generar más ficheros en filesystem se generen al vuelo, aunque eso reduce la posibilidad de replicar el entrenamiento porque en cada iteración el set aumentado variaría al ser random...

A ver si hoy puedo preparar ya algún submission y ver qué tal, pero hay algunas cosas de las que no entiendo una puta mierda, sinceramente JAJAJAJAJAJA.

1
xhito

#27 podrías mostrar algún ejemplo del modelo que estas utilizando o como lo estas realizando, aunque no sea el que hayas enviado?

1 respuesta