codersmexico / revisa-mi-grieta-bot

Proyecto para atender algunas de las necesidades después del SismoMX del 19 de Septiembre de 2017. El bot está diseñado para trabajar con la API de Twitter.
Other
6 stars 0 forks source link

Creando valor de un Dataset para clasificar casos peligrosos a partir de imágenes #4

Open poguez opened 7 years ago

poguez commented 7 years ago

Tal vez no tengamos un dataset lo suficientemente grande, pero podemos contruir uno a partir de twitter.

Hint: Recordando citando a Business Models for the Data Economy de Q Ethan McCallum and Ken Gleason, O'Reilly 2013 podríamos encontrar valor en los datos de:

xuxoramos commented 7 years ago

Lo comenté en el slack de PMs. Esto es peligroso por lo siguiente:

  1. Las NN usadas para CV necesitan varios miles de ejemplos diferentes.
  2. No tenemos miles ni sacando de TW.
  3. Una NN entrenada con tan pocos ejemplos disparará muchos FN y FP.
  4. Los FP meterán estrés de recursos en la red de albergues circundantes al incidente.
  5. Los FN mantendrán a la gente en sus casas con el riesgo de derrumbe.

Creo que esto debe moverse al backlog y por el momento flaggearse como Won't Fix. Es importante, pero ni urgente y aún en el terreno de late stage research.

Considero que para no distraer talento valioso a esta tarea, mejor dirigirla a esfuerzos más apremiantes.

ricalanis commented 7 years ago

Estoy de acuerdo con lo que dice @xuxoramos Como quiera, creo que es interesante ir trabajando en las bases de datos que alimentarán estos sistemas en el futuro. Serán features que deberíamos de empujar en nuestros aliados, que dejen testimonio del assesment por fotografía?

poguez commented 7 years ago

Entiendo su punto @xuxoramos y @ricalanis, pero en lugar de cerrar el issue con una conclusión de que no se necesita aún:

¿podrían aportar datos duros sobre que necesitamos para que funcione?

xuxoramos commented 7 years ago

Como le dije en el msg, se requieren varias decenas de miles de imagenes, que ahorita no existen, y hacerlo con los cientos o decenas, puede disparar las situaciones que describo. No lo digo yo, es un algo natural de los clasificadores: https://en.wikipedia.org/wiki/Receiver_operating_characteristic. Sobre todo lo importante es sintonizarse con la urgencia de entregar algo verídico con muy baja incertidumbre porque la vida de las personas está dependiendo de lo que hacemos. Dejemos los experimentos y la curiosidad científica para cuando pase la crisis y encaminemos los recursos y el talento a donde se necesitan. Mis otros 2 centavos.

On Sat, Sep 23, 2017 at 12:26 Noé Domínguez Porras notifications@github.com wrote:

Entiendo su punto @xuxoramos https://github.com/xuxoramos y @ricalanis https://github.com/ricalanis, pero en lugar de cerrar el issue con una conclusión de que no se necesita aún:

¿podrían aportar datos duros sobre que necesitamos para que funcione?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/codersmexico/revisa-mi-grieta-bot/issues/4#issuecomment-331655016, or mute the thread https://github.com/notifications/unsubscribe-auth/ABQWcHws1VcZ-zforJhvM1xRdqZqy9QAks5slT9TgaJpZM4PhkuW .

-- This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. Please notify the sender immediately by e-mail if you have received this e-mail by mistake and delete this e-mail from your system.

xuxoramos commented 7 years ago

Acabo de leer, y creo que el tono se antoja mala onda. El punto es, primero lo primero. Y eso, lo único que requiere es miles de fotos, sourceadas de donde sea, no importa, pero luego que alguien EXPERTO las etiquete, si es que no lo están. Este esfuerzo es costoso, y quizá sea mejor dirigirlo a otro lado.

dulcedu commented 7 years ago

Si XUXO si se oye muy mamón el tono! ;) Hola, has pensando que tal vez no necesitemos miles de cientos de millones de imagenes sino que simplemente se puede crear una plataforma para que las fotos se envien a los ingenieros y ellos evaluen. Se me ocurre hacer una aplicación de cualquier tipo dónde enlaces a los dos usuarios. El dueño de la casa con acceso a camara o video y el ingeniero civil o arquitecto que pueda evaluar. Otra idea es usar algoritmo que se usa para identicar patrones y de acuerdo a los ingenieros las grietas en 45* grados tendrían prioridad, junto con otros elementos como el tamaño de la grieta dada la proporción del hogar + el número de años de tu vivienda. Son solo ideas, pero es importante porque la ayuda de ing. no está llegando a Oaxaca y Chiapas. Un abrazo y saludos a todos.

ricalanis commented 7 years ago

Creo que se entiende totalmente la magnitud de un training set suficientemente bueno para hacer un estimado, sin riesgo, estamos hablando de vidas aquí. Y poguez tiene toda la razón: Hay que ver el flow con el que se genere a la larga dicho dataset (: Esta bien chido poder cotorrear sobre eso. Me parece que por ahora queremos hacer Host en el modelo que planteabas, @poguez , de forma que podamos tener el contexto y las fotografías y ver el procesamiento después.

xuxoramos commented 7 years ago

Entonces el bot lo que debe hacer es buscar imgs en TW (supongo tomando como guía algunos hashtags), y luego mostrarlas para que el estructuralista/arqui diga (daño/no daño). Y con eso ya se armaría un dataset bueno. Retomo lo que dijo Mike Salazar, la intención es hacerle llegar la info correcta a la persona correcta. La máquina la dejamos para después.

xuxoramos commented 7 years ago

Y bueno, no son decenas de miles de millones. Estimo que 1 o 2 kilos.

xcoatl commented 7 years ago

Ok, para cerrar como yo lo veo y había comentado con Diego, creo que justo este esfuerzo de clasificación vía ML se compagina perfecto con el otro esfuerzo del proyecto (el API + APP mobile de revisatugrieta), de hecho creo que ya se había planeado así, sorry, pero apenas llevo desde ayer en el canal. Es decir, veo que el bot pueda tomar los tweets, inyectarlos con el API que ya esta implementada para que un experto de la revisión, así como en paralelo hacer una predicción. Cuando el experto haga su conclusión vía el APP, y el usuario sea notificado del resultado de la misma, el algoritmo tome ese valor para entrenar la red. (puede ser hasta con un webhook o algo muy básico de estar escaseando la base de datos de revisiones realizadas y usarla de tranining set cada cierto tiempo)

xuxoramos commented 7 years ago

De acuerdo. El rol del bot, por el momento, es crear ese dataset q no tenemos.

xcoatl commented 7 years ago

@poguez como comento arriba, igual ya Tu y Diego lo habían considerado así y yo estoy descubriendo el agua tibia, pero ves algún impedimento que tu Bot inyecte al API (más allá de que seguramente los datos serán reducidos, porque en twitter no van a "contestar" el cuestionario que el app presenta) ?

carlosrivera commented 7 years ago

Me gustaría hacer mi aportación aquí: tengo 9 años trabajando en CV (un par de ellos con redes neuronales).

Desde el punto de vista de viabilidad a corto plazo, lo más rápido es conectar un experto con alguien que necesite obtener un diagnóstico, y aunque el proceso sea manual, se puede aprovechar para etiquetar algunos miles de fotografías (en alguna nota leí que había alrededor de 2,700 edificaciones, digamos que cada una se puedan sacar 10 fotografías) y las condiciones con las de la estructura para un ensamble posterior (tipo de construcción, pisos, material, magnitud del sismo, etc).

Aunque 27k imágenes son muy pocas para entrenar una CNN (aún con transfer learning y data augmentation), pueden ser un buen punto de partida.

Otro punto importante es que el entrenamiento va a ser muy caro, en mi experiencia va a necesitar algunas semanas de GPU's y al menos ~10k dólares, para un modelo que probablemente hoy no pase de un 60% de accuracy.

En conclusión: generar un dataset podría dejar la base para un futuro, y es un feature importante. Procesarlo hoy es caro y complicado.

xcoatl commented 7 years ago

Si se requiere, el tema del costo no es problema, yo tengo crédito disponible en Azure (alrededor de 30k USD), pero ya que coincidimos, vayamos generando el dataset y en paralelo (y como tarea no prioritaria) veamos como se comporta el modelo.

eduardofv commented 7 years ago

Yo coincido en que esto es un proyecto a mas largo plazo, pero podemos empezar por el dataset. Para los modelos creo que Tensorflow/Inception podría ser un buen punto de inicio y hacer algo muy básico para comenzar como estos cuates https://www.youtube.com/watch?v=toK1OSLep3s En cuanto al entrenamiento es cierto que puede ser costoso, pero para desarrollo con unos pocos GPUs podría ser suficiente y a lo mejor podríamos buscar apoyo cuando se generen modelos productivos https://www.tensorflow.org/tfrc/

carlosrivera commented 7 years ago

Buenísimo, nosotros podemos aportar con la conceptualización e incluso pasarlo por nuestra plataforma que genera modelos de Tensorflow haciendo experimientos con distintas arquitecturas. Estaría interesante tener un modelo open source, que ayude a comprender mejor el tema de computer vision que se pueda replicar a otras áreas, y tenemos experiencia haciendo cosas como en el vídeo de @eduardofv.

eduardofv commented 7 years ago

Excelente! Yo he usado TF pero no Inception, pero por lo que entiendo se ajusta muy bien al problema. ¿Qué tamaño de dataset crees que se necesite?

ricalanis commented 7 years ago

@carlosrivera Estoy algo renuente que necesitemos demasiadas fotografías, como los patrones de las grietas más fundamentales son bastante sencillos, creo que me puedo atrever que con un par de miles estamos sobrados para adaptar cualquiera de los vggs con la última capa modificada. Pero todavía me falta experiencia n_nU

Ahora, el reto ahorita es como le hacemos para taggear dicho dataset, no mi @poguez ?

edublancas commented 7 years ago

Hola, estoy trabajando también en esto. Tengo 5,200 fotografías pero seguro puedo conseguir más, bajé las publicadas hasta el sábado. La idea que tengo es que sea un primer filtro para las aplicaciones que conectan con los expertos, para que puedan optimizar su tiempo.

Más info: https://edublancas.github.io/grietas/

Estoy usando crowdcrafting para que voluntarios me ayuden a clasificar las imágenes pero van muy pocas.

Creo que el esfuerzo vale la pena, aunque ahora lo veo como un proyecto más a largo plazo por la cuestión de conseguir los datos clasificados.

carlosrivera commented 7 years ago

@eduardofv inception es sólo una arquitectura fácil de implementar in TF, la idea es que se puedan realizar distintas convoluciones en una misma capa, (aquí)[https://hacktilldawn.com/2016/09/25/inception-modules-explained-and-implemented/] lo explican bastante bien, el reto esta en hacer variaciones a la arquitectura para optimizar los resultados.

@ricalanis tienes una observación muy buena, la respuesta más sencilla es que hay que experimentar y sobre todo ver el dataset final. Hacer transfer learning con un modelo pre-entrenado es prácticamente un must, y efectivamete, sólo se entrenarían las últimas capas, aquí los retos más importante son:

  1. Las condiciones con las que se tomaron todas las fotos (iluminación, ángulo, resolución, etc.), si las fotos estuvieran estandarizadas, digamos como una foto de un microscopio o una tomografía, es muy fácil descartar el ruido antes de que entren a la red, y se disminuye el riesgo de overfitting (qué la NN se vuelva muy buena en el contexto del dataset original). En la fotos que he visto publicadas, nos sólo existe este tipo de ruido, hay un mundo de diferencia entre cada una: están las de fachadas, interiores, muros limpios, otros con cuadros u otros adornos (una hasta con focos de navidad), este tipo de ruido que es técnicamente imposible limpiar en pre procesamiento, significa que hay que tener más datos para que la red pueda generalizar de más fuentes.

  2. Es un problema de clasificación y segmentación multi clase: primero hay que ver si hay grietas (aquí va la primer clasificación con perdida de datos debido al error), después localizarlas evaluar el daño según en que parte de la estructura se encuentran, para que la red pueda aprender a distinguir entre daño estructural y muros divisorios.

@edublancas buenísimo, tal vez puedas crear un dataset estándar para este tipo de problemas :)

ricalanis commented 7 years ago

@edublancas De las fotografías que bajaste, ¿Ya están preclasificadas? Si estaría chido que publicaras al menos un sample y el estandar de tu recopilación!

@carlosrivera Muy cierto! Creo que por ahí podríamos hablar de un proceso de feat eng para preprocesar las fotos.

yo proponía, por ahora, un clasificador binario "safe" o "not safe" de acuerdo al dictamen de los expertos en la internetz. Creo que sería un gran MVP (tirándole, como menciona mi buen @xuxoramos, a que sea más Recall que a Precision). Sobre el ruido, creo que la misma NN le metería prioridades a los patrones que dan Positivo al "not safe" sin tener que hacer mucho preprocesamiento.

<soñador>¿Será que podríamos hacer de esto también un sistema de recomendación para los evaluadores? </soñador>

Pero bueno, Me encanta la idea de juntar lo que está haciendo el edu, con los datos que ya tiene, y hablar de como podemos mantener y seguir construyendo el dataset a la larga.

Por ahora, @poguez ¿Cómo se te ocurre? ¿Agregamos las utterances y el procesamiento de tweets para adaptar tu parte? y le tiramos a un S3 donde esté la data que ya lleve el @edublancas ? ¿Cómo ven?

Parsifal-zz commented 7 years ago

Hola chavos, creo que más allá de un dataset, hay otros factores y condiciones que determinan la gravedad de una grita o daño visible, una que el entrenamiento tendría que ser casi con fotografías de estudio, ya que según lo que circula y es básico, lo de la inclinación de las grietas a 45º , como digo tendrian que tener un enfoque perfecto, ademas que platicando con un arquitecto hay otras maneras para determinar si el o los muros afectados son de carga, ademas de que es preciso ver la forma en que esta construida la columna o la trabe. Tal vez seria mejor idear una manera de crear un mapa virtual o aproximación al plano arquitectónico, y eso ayudaría a los ingenieros o arquitectos a dar un diagnostico rápido antes de que fisicamente esté ahí para evaluarlo.

eduardofv commented 7 years ago

Otra posible fuente de datos https://www.facebook.com/gacetadigitalfi.unam/posts/1460285770719545

edublancas commented 7 years ago

Tengo muy pocas imágenes clasificadas hasta el momento (158 con 3 revisiones cada una). En total tengo ~5,200 fotos. Sigo buscando voluntarios pero veo complicado conseguir tantos.

Si a alguien le interesa, aquí está el dump de tweets: https://mega.nz/#!pIthjQpI!asev2yaJxvmmGJ974LRk8jAXEwfceF2ch9Ot6dIBGgg

Todavía no he descargado todas las imágenes de los tweets así que fácilmente podríamos llegar a unas ~8,000 imágenes.

Después de platicas con varios ingengenieros civiles y arquitectos creo que el beneficio del proyecto es limitado, dado que solo podríamos usar un sistema así como un filtro preliminar para ayudarle a los expertos. Aún así, creo que es un proyecto interesante.

eduardofv commented 7 years ago

Yo sí continuaría con el proyecto. Coincido en que no puede sustituir a un experto pero sí puede ayudar a prefiltrar/priorizar. E incluso si el resultado es solo un dataset igual es valioso. @edublancas entiendo que las imágenes las estás sacando de twitter... vi muchas mas o menos dictaminadas en las respuestas en mismo twitter... ¿podríamos usar esas respuestas para generar las etiquetas correspondientes?

edublancas commented 7 years ago

@eduardofv seguro se puede pero no sé qué tan confiables sean las respuestas que hay ahí

eduardofv commented 7 years ago

@edublancas Puede ser aunque sea para empezar... a lo mejor luego una revisada por expertos antes de entrenar algo productivo

ricalanis commented 7 years ago

Creo que podría ayudar este filtro a darle prioridad a las más riesgosas, Podría justamente ayudar a priorizar la ayuda donde se necesita más urgentemente -con sus respectivos riesgos de FN)

xuxoramos commented 7 years ago

Chequen esto: http://m.aristeguinoticias.com/2709/lomasdestacado/alerta-colegio-mexicano-de-ingenieros-civiles-riesgos-por-dictamenes-expres/

Ahí se menciona:

On Wed, Sep 27, 2017 at 17:52 Ricardo Alanis notifications@github.com wrote:

Creo que podría ayudar este filtro a darle prioridad a las más riesgosas, Podría justamente ayudar a priorizar la ayuda donde se necesita más urgentemente -con sus respectivos riesgos de FN)

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/codersmexico/revisa-mi-grieta-bot/issues/4#issuecomment-332678044, or mute the thread https://github.com/notifications/unsubscribe-auth/ABQWcFhC7Zwg0fzzhLWgsIG9E37bTBvLks5smtGggaJpZM4PhkuW .

-- This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. Please notify the sender immediately by e-mail if you have received this e-mail by mistake and delete this e-mail from your system.