Blog de Amazon Web Services (AWS)
Utilizando image classification y Augmented AI en imágenes de rayos X para la detección de COVID-19 — Parte 2
Por Thiago Couto, Arquitecto de Soluciones AWS Brasil
En la primera parte de esta serie de blogs , utilizamos el algoritmo built-in de AWS, image classification, para clasificar las imágenes de rayos X de pacientes que buscan pruebas de Covid-19. Aunque nuestro clasificador ha demostrado un alto valor de fiabilidad con las imágenes probadas, podemos tener imágenes en las que el modelo no tiene una precisión aceptable y se requiere una validación experta.
La validación humana es un caso común en los problemas de machine learning, por lo que AWS cuenta con en el servicio Amazon Augmented AI (Amazon A2I), que proporciona las funciones necesarias para asignar tareas a un grupo de usuarios que serán responsables de la toma de decisiones.
En este blog crearemos un workforce con un usuario, crearemos un template/plantilla para que el usuario interactúe con la tarea, crearemos una tarea para el usuario con una imagen de nuestra carpeta de prueba y simularemos a un usuario realizando la clasificación. El notebook con todos los pasos de este post se puede encontrar aquí: https://github.com/thiagomcouto/covid19_image_classification_part2_amazon_a2i
Creación de la plantilla privada
Para comenzar nuestro trabajo, creemos un workforce privado. Vamos a seguir el tutorial del enlace: https://docs.thinkwithwp.com/sagemaker/latest/dg/sms-workforce-create-private-console.html#create-workforce-sm-console
Completar con los siguientes valores:
- Private team creation: Seleccione “Create a private team with AWS Cognito”
- Team Name: Elija um nome para su equipo como “Medical-Private-Team”
- Add Workers: Selecione “Invite new workers by email”
- Email Addresses: Inserte su email (importante tener acceso a este email para ejecutar la verificación)
- Organization name: Inserte um nombre relevante para su organización
- Contact email: Inserte su email nuevamente
A continuación se muestra un ejemplo de los campos completos:
Con el equipo privado creado, copie el ARN de su equipo privado como en la siguiente captura de pantalla:
Copie el campo en la siguiente variable:
Ahora vamos a confirmar nuestro correo electrónico y validar que hemos iniciado sesión exitosamente en la aplicación. El correo electrónico tiene el título: “You’re invited by YOURORGANIZATION to work on a labeling project”. Haga clic en el enlace, ingrese el nombre de usuario y la contraseña en el correo electrónico y elija una nueva contraseña.
Inicializando
Con nuestro equipo privado correctamente creado y con nuestro registro validado, comenzaremos la creación de un flujo de trabajo de revisión de imagen, simulando el papel de un médico verificando la imagen de una radiografía y tomando la decisión.
A continuación vamos a inicializar nuestras bibliotecas y configurar variables para su uso posterior. Para este blog estamos usando la región us-east-1.
Creando el template
Con las variables y libs inicializadas, vamos a crear la plantilla, esta plantilla será la base de nuestra interfaz gráfica para la validación. Una lista de templates de ejemplo se puede encontrar aquí.
Con la plantilla definida vamos a crear un taskUI
Definiendo el flujo de trabajo
En la siguiente celda, vamos a crear la definición de un flujo de trabajo. Básicamente, nuestro flujo de trabajo enumera una interfaz a una tarea humana, un equipo (en nuestro caso privado) creado previamente y un bucket donde almacenaremos la respuesta de nuestro usuario que interactuará con la tarea. Más detalles sobre el flujo de trabajo aquí: https://docs.thinkwithwp.com/sagemaker/latest/dg/a2i-create-flow-definition.html
En la siguiente celda vamos a validar si nuestro flujo ya está activo o listo para usar
Creación de un human loop
Después de los pasos anteriores, vamos a crear un human loop (bucle humano) enviando una imagen de una radiografía del post anterior a un usuario de nuestro equipo privado, así ella/él podrá validar y dar el veredicto. En esta publicación estoy usando una de las imágenes de nuestra carpeta de prueba de la parte 1 de esta publicación, para usar otra imagen simplemente cambie la dirección a continuación.
Ejecución de la tarea
Con la tarea creada, la abriremos y seleccionaremos la clasificación correcta, para acceder a las tareas pendientes, vamos al correo electrónico y abriremos el enlace recibido (el mismo que usamos para cambiar la contraseña previamente). Después de iniciar sesión, tendremos una vista similar a la siguiente pantalla:
Cuando seleccionamos la tarea y hacemos clic en Comenzar a trabajar, tendremos la siguiente pantalla:
En el caso anterior, la imagen pertenecía a la clase «Detectado». Seleccionamos la opción correcta (1) y hacemos clic en «Enviar». La tarea se completará y el resultado se almacenará desde el s3 introducido en el momento de la creación del flujo.
Interesante observar que la pantalla fue creada a base de nuestra plantilla y es ampliamente personalizable para contener otras categorías, textos, descripciones y similares. En el enlace mencionado anteriormente tenemos otras sugerencias de plantillas para crear la interfaz de nuestra tarea.
Analizando el resultado
Después de enviar la tarea con nuestra respuesta, los datos de nuestro análisis se almacenan en el S3 que informamos para la salida, siguiendo el estándar aaaa/mm/dd/hh/mm/ss. Este marco hace que la respuesta sea particionada y fácilmente integrable con AWS Glue y Athena. Más información en el enlace: https://docs.thinkwithwp.com/sagemaker/latest/dg/a2i-monitor-humanloop-results.html
Utilizaremos el nombre del bucle humano que previamente almacenamos para obtener la ubicación exacta del json, leer su contenido y almacenar elementos importantes para el análisis de la respuesta.
En la siguiente celda tenemos la imagen que se utilizó para el análisis y la respuesta que enviamos en la tarea.
Finalización y pasos siguientes
En esta serie de blogs se utilizó un conjunto de datos de rayos X torácicos previamente clasificados entre pacientes detectados o no con Covid-19.
En la primera parte exploramos el algoritmo de image classification built-in de AWS, basado en ResNet, para formar un modelo y validar su rendimiento.
En la segunda parte, exploramos la necesidad de tener una evaluación humana para casos de respuestas no asertivas del modelo. Creamos un flujo de análisis manual que recibe la imagen analizada anteriormente como entrada, crea una tarea para un grupo de usuarios privados y permite a esos usuarios analizar las imágenes y ordenarlas correctamente.
A continuación se muestran algunos enlaces relevantes y los siguientes pasos:
Documentación para revisión humana: https://docs.thinkwithwp.com/sagemaker/latest/dg/a2i-use-augmented-ai-a2i-human-review-loops.html
Algoritmo de clasificación de imágenes: https://docs.thinkwithwp.com/sagemaker/latest/dg/image-classification.html
Formación oficial de aprendizaje automático: https://thinkwithwp.com/training/learn-about/machine-learning/
Sobre el autor
Thiago Couto es un arquitecto de soluciones en AWS y actúa en el segmento Enterprise auxiliando clientes en Retail y CPG en sus jornadas a la nube. Posee mas de 10 años de experiencia actuando en arquitecturas que engloban AI/ML, integraciones, IoT y relacionados.
Sobre el traductor
Luis Valdes es EC2 Spot Specialist en Arquitectura de Soluciones