Cree y entrene modelos de visión artificial para detectar posiciones de automóviles en imágenes con Amazon SageMaker y Amazon Rekognition | Servicios web de Amazon

Cree y entrene modelos de visión artificial para detectar posiciones de automóviles en imágenes con Amazon SageMaker y Amazon Rekognition | Servicios web de Amazon

La visión por computadora (CV) es una de las aplicaciones más comunes de aprendizaje automático (ML) y aprendizaje profundo. Los casos de uso van desde automóviles autónomos, moderación de contenido en plataformas de redes sociales, detección de cáncer y detección automática de defectos. Reconocimiento de amazonas es un servicio completamente administrado que puede realizar tareas CV como detección de objetos, detección de segmentos de video, moderación de contenido y más para extraer información de los datos sin necesidad de experiencia previa en ML. En algunos casos, es posible que se necesite una solución más personalizada junto con el servicio para resolver un problema muy específico.

En esta publicación, abordamos áreas donde se puede aplicar CV a casos de uso donde la pose de los objetos, su posición y orientación es importante. Uno de esos casos de uso serían las aplicaciones móviles orientadas al cliente donde se requiere cargar una imagen. Puede ser por motivos de cumplimiento o para proporcionar una experiencia de usuario coherente y mejorar la participación. Por ejemplo, en las plataformas de compras en línea, el ángulo en el que se muestran los productos en las imágenes tiene un efecto en la tasa de compra de este producto. Uno de estos casos es detectar la posición de un automóvil. Demostramos cómo puede combinar soluciones de aprendizaje automático conocidas con posprocesamiento para abordar este problema en la nube de AWS.

Utilizamos modelos de aprendizaje profundo para resolver este problema. El entrenamiento de algoritmos de ML para la estimación de posturas requiere mucha experiencia y datos de entrenamiento personalizados. Ambos requisitos son difíciles y costosos de obtener. Por lo tanto, presentamos dos opciones: una que no requiere experiencia en ML y usa Amazon Rekognition, y otra que usa Amazon SageMaker para entrenar e implementar un modelo de ML personalizado. En la primera opción utilizamos Amazon Rekognition para detectar las ruedas del coche. Luego inferimos la orientación del automóvil a partir de las posiciones de las ruedas utilizando un sistema basado en reglas. En la segunda opción, detectamos las ruedas y otras partes del automóvil usando el detector modelo. Estos se utilizan nuevamente para inferir la posición del automóvil con un código basado en reglas. La segunda opción requiere experiencia en ML, pero también es más personalizable. Se puede utilizar para un posterior procesamiento de la imagen, por ejemplo, para recortar todo el coche. Ambas opciones se pueden entrenar en conjuntos de datos disponibles públicamente. Finalmente, mostramos cómo puede integrar esta solución de detección de posición de automóvil en su aplicación web existente utilizando servicios como Puerta de enlace API de Amazon y AWS amplificar.

Resumen de la solución

El siguiente diagrama ilustra la arquitectura de la solución.

Construya y entrene modelos de visión por computadora para detectar posiciones de automóviles en imágenes utilizando Amazon SageMaker y Amazon Rekognition | Amazon Web Services PlatoBlockchain Inteligencia de datos. Búsqueda vertical. Ai.

La solución consiste en una aplicación web simulada en Amplify donde un usuario puede cargar una imagen e invocar el modelo Amazon Rekognition o el modelo Detectron personalizado para detectar la posición del automóvil. Para cada opción, ofrecemos un AWS Lambda función detrás de una API Gateway que está expuesta a nuestra aplicación simulada. Configuramos nuestra función Lambda para ejecutarse con el modelo Detectron entrenado en SageMaker o Amazon Rekognition.

Requisitos previos

Para este tutorial, debe tener los siguientes requisitos previos:

Cree una aplicación sin servidor con Amazon Rekognition

Nuestra primera opción demuestra cómo puede detectar orientaciones de automóviles en imágenes utilizando Amazon Rekognition. La idea es utilizar Amazon Rekognition para detectar la ubicación del automóvil y sus ruedas y luego realizar un procesamiento posterior para derivar la orientación del automóvil a partir de esta información. Toda la solución se implementa con Lambda, como se muestra en la Repositorio de Github. Esta carpeta contiene dos archivos principales: un Dockerfile que define la imagen de Docker que se ejecutará en nuestra función Lambda y el app.py archivo, que será el principal punto de entrada de la función Lambda:

def lambda_handler(event, context): body_bytes = json.loads(event["body"])["image"].split(",")[-1] body_bytes = base64.b64decode(body_bytes) rek = boto3.client('rekognition') response = rek.detect_labels(Image={'Bytes': body_bytes}, MinConfidence=80) angle, img = label_image(img_string=body_bytes, response=response) buffered = BytesIO() img.save(buffered, format="JPEG") img_str = "data:image/jpeg;base64," + base64.b64encode(buffered.getvalue()).decode('utf-8')

La función Lambda espera un evento que contenga un encabezado y un cuerpo, donde el cuerpo debe ser la imagen necesaria para ser etiquetada como objeto decodificado en base64. Dada la imagen, Amazon Rekognition detect_labels La función se invoca desde la función Lambda usando boto3. La función devuelve una o más etiquetas para cada objeto en la imagen y los detalles del cuadro delimitador para todas las etiquetas de objetos detectados como parte de la respuesta, junto con otra información como la confianza de la etiqueta asignada, las etiquetas de antepasados ​​de la etiqueta detectada, posible alias para la etiqueta y las categorías a las que pertenece la etiqueta detectada. Basándonos en las etiquetas devueltas por Amazon Rekognition, ejecutamos la función label_image, que calcula el ángulo del coche a partir de las ruedas detectadas de la siguiente manera:

n_wheels = len(wheel_instances) wheel_centers = [np.array(_extract_bb_coords(wheel, img)).mean(axis=0)
for wheel in wheel_instances] wheel_center_comb = list(combinations(wheel_centers, 2))
vecs = [(k, pair[0] - pair[1]) for k,pair in enumerate(wheel_center_comb)]
vecs = sorted(vecs, key = lambda vec: np.linalg.norm(vec[1])) vec_rel = vecs[1] if n_wheels == 3 else vecs[0]
angle = math.degrees(math.atan(vec_rel[1][1]/vec_rel[1][0])) wheel_centers_rel = [tuple(wheel.tolist()) for wheel in
wheel_center_comb[vec_rel[0]]]

Tenga en cuenta que la aplicación requiere que solo un automóvil esté presente en la imagen y devuelve un error si ese no es el caso. Sin embargo, el procesamiento posterior se puede adaptar para proporcionar descripciones de orientación más granulares, cubrir varios automóviles o calcular la orientación de objetos más complejos.

Mejorar la detección de ruedas

Para mejorar aún más la precisión de la detección de ruedas, puede utilizar Etiquetas personalizadas de Amazon Rekognition. De forma similar a la puesta a punto con SageMaker para entrenar e implementar un modelo de aprendizaje automático personalizado, puede traer sus propios datos etiquetados para que Amazon Rekognition pueda producir un modelo de análisis de imágenes personalizado para usted en tan solo unas horas. Con las etiquetas personalizadas de Rekognition, solo necesita un pequeño conjunto de imágenes de entrenamiento que son específicas para su caso de uso, en este caso, imágenes de automóviles con ángulos específicos, ya que utiliza las capacidades existentes en Amazon Rekognition de ser entrenado en decenas de millones de imágenes en todo el mundo. muchas categorías. Las etiquetas personalizadas de Rekognition se pueden integrar con solo unos pocos clics y pequeñas adaptaciones a la función Lambda que usamos para la solución estándar de Amazon Rekognition.

Entrenar un modelo mediante un trabajo de entrenamiento de SageMaker

En nuestra segunda opción, entrenamos un modelo de aprendizaje profundo personalizado en SageMaker. usamos el Marco Detectron2 para la segmentación de autopartes. Estos segmentos se utilizan luego para inferir la posición del automóvil.

El marco Detectron2 es una biblioteca que proporciona algoritmos de detección y segmentación de última generación. Detectron proporciona una variedad de modelos Mask R-CNN que fueron entrenados en el famoso conjunto de datos COCO (objetos comunes en contexto). Para construir nuestro modelo de detección de objetos de automóviles, utilizamos el aprendizaje de transferencia para ajustar un modelo Mask R-CNN previamente entrenado en el segmentación de piezas de automóviles conjunto de datos Este conjunto de datos nos permite entrenar un modelo que puede detectar ruedas pero también otras partes del automóvil. Esta información adicional se puede usar más en los cálculos del ángulo del automóvil en relación con la imagen.

El conjunto de datos contiene datos anotados de piezas de automóviles que se utilizarán para la detección de objetos y tareas de segmentación semántica: aproximadamente 500 imágenes de sedán, camionetas y vehículos utilitarios deportivos (SUV), tomadas en múltiples vistas (vistas frontal, posterior y lateral). Cada imagen está anotada por 18 máscaras de instancia y cuadros delimitadores que representan las diferentes partes de un automóvil, como ruedas, espejos, luces y vidrio delantero y trasero. Modificamos las anotaciones base de las ruedas para que cada rueda se considere un objeto individual en lugar de considerar todas las ruedas disponibles en la imagen como un solo objeto.

Utilizamos Servicio de almacenamiento simple de Amazon (Amazon S3) para almacenar el conjunto de datos utilizado para entrenar el modelo Detectron junto con los artefactos del modelo entrenado. Además, el contenedor Docker que se ejecuta en la función Lambda se almacena en Registro de contenedores elásticos de Amazon (Amazon ECR). Se necesita el contenedor Docker en la función Lambda para incluir las bibliotecas y dependencias requeridas para ejecutar el código. Alternativamente, podríamos usar capas lambda, pero está limitado a una cuota de tamaño de paquete de implementación sin comprimir de 250 MB y se puede agregar un máximo de cinco capas a una función de Lambda.

Nuestra solución se basa en SageMaker: ampliamos preconstruido Contenedores Docker de SageMaker para que PyTorch ejecute nuestro PyTorch personalizado código de entrenamiento. A continuación, usamos SageMaker Python SDK para envolver la imagen de entrenamiento en un estimador SageMaker PyTorch, como se muestra en los siguientes fragmentos de código:

d2_estimator = Estimator( image_uri=training_image_uri, role=role, sagemaker_session=sm_session, instance_count=1, instance_type=training_instance, output_path=f"s3://{session_bucket}/{prefix_model}", base_job_name=f"detectron2") d2_estimator.fit({ "training": training_channel, "validation": validation_channel, }, wait=True)

Finalmente, comenzamos el trabajo de entrenamiento llamando al fit() en el estimador PyTorch creado. Cuando finaliza el entrenamiento, el artefacto del modelo entrenado se almacena en el depósito de la sesión en Amazon S3 para usarlo en la canalización de inferencia.

Implemente el modelo mediante SageMaker y canalizaciones de inferencia

También usamos SageMaker para alojar el punto final de inferencia que ejecuta nuestro modelo Detectron personalizado. La infraestructura completa utilizada para implementar nuestra solución se aprovisiona mediante el CDK de AWS. Podemos alojar nuestro modelo personalizado a través de un Punto final en tiempo real de SageMaker al deploy en el estimador PyTorch. Esta es la segunda vez que ampliamos un contenedor SageMaker PyTorch preconstruido para incluir PyTorch Detectron. Lo usamos para ejecutar el script de inferencia y alojar nuestro modelo PyTorch entrenado de la siguiente manera:

model = PyTorchModel( name="d2-sku110k-model", model_data=d2_estimator.model_data, role=role, sagemaker_session=sm_session, entry_point="predict.py", source_dir="src", image_uri=serve_image_uri, framework_version="1.6.0") predictor = model.deploy( initial_instance_count=1, instance_type="ml.g4dn.xlarge", endpoint_name="detectron-endpoint", serializer=sagemaker.serializers.JSONSerializer(), deserializer=sagemaker.deserializers.JSONDeserializer(), wait=True)

Tenga en cuenta que usamos una GPU ml.g4dn.xlarge para la implementación porque es la GPU más pequeña disponible y suficiente para esta demostración. Dos componentes necesitan ser configurados en nuestro guion de inferencia: modelo de carga y modelo de servicio. La función model_fn() se utiliza para cargar el modelo entrenado que forma parte del contenedor de Docker alojado y también se puede encontrar en Amazon S3 y devolver un objeto de modelo que se puede utilizar para servir el modelo de la siguiente manera:

def model_fn(model_dir: str) -> DefaultPredictor: for p_file in Path(model_dir).iterdir(): if p_file.suffix == ".pth": path_model = p_file cfg = get_cfg() cfg.MODEL.WEIGHTS = str(path_model) return DefaultPredictor(cfg)

La función predict_fn() realiza la predicción y devuelve el resultado. Además de usar nuestro modelo entrenado, usamos una versión preentrenada del modelo Mask R-CNN entrenado en el conjunto de datos COCO para extraer el automóvil principal en la imagen. Este es un paso adicional de posprocesamiento para tratar imágenes en las que existe más de un automóvil. Ver el siguiente código:

def predict_fn(input_img: np.ndarray, predictor: DefaultPredictor) -> Mapping: pretrained_predictor = _get_pretraind_model() car_mask = get_main_car_mask(pretrained_predictor, input_img) outputs = predictor(input_img) fmt_out = { "image_height": input_object.shape[0], "image_width": input_object.shape[1], "pred_boxes": outputs["instances"].pred_boxes.tensor.tolist(), "scores": outputs["instances"].scores.tolist(), "pred_classes": outputs["instances"].pred_classes.tolist(), "car_mask": car_mask.tolist() } return fmt_out

Similar a la solución de Amazon Rekognition, los cuadros delimitadores previstos para el wheel clase se filtran de las salidas de detección y se suministran al módulo de posprocesamiento para evaluar la posición del automóvil en relación con la salida.

Finalmente, también mejoramos el posprocesamiento para la solución Detectron. También utiliza los segmentos de diferentes piezas de automóviles para inferir la solución. Por ejemplo, siempre que se detecte un parachoques delantero, pero no un parachoques trasero, se supone que tenemos una vista frontal del coche y se calcula el ángulo correspondiente.

Conecte su solución a la aplicación web

Los pasos para conectar los extremos del modelo a Amplify son los siguientes:

  • Clone el repositorio de aplicaciones que creó la pila de CDK de AWS, denominado car-angle-detection-website-repo. Asegúrese de buscarlo en la región que utilizó para la implementación.
  • Copie los puntos finales de API Gateway para cada una de las funciones de Lambda implementadas en el index.html archivo en el repositorio anterior (hay marcadores de posición donde se debe colocar el punto final). El siguiente código es un ejemplo de cómo se ve esta sección del archivo .html:
<td align="center" colspan="2">
<select id="endpoint">
<option value="https://ey82aaj8ch.execute-api.eu-central-1.amazonaws.com/prod/"> Amazon Rekognition</option>
<option value="https://nhq6q88xjg.execute-api.eu-central-1.amazonaws.com/prod/"> Amazon SageMaker Detectron</option>
</select>
<input class="btn" type="file" id="ImageBrowse" />
<input class="btn btn-primary" type="submit" value="Upload">
</td>

  • Guarde el archivo HTML y envíe el cambio de código a la rama principal remota.

Esto actualizará el archivo HTML en la implementación. La aplicación ya está lista para usar.

  • Navegue a la consola de Amplify y localice el proyecto que creó.

La URL de la aplicación estará visible después de que se complete la implementación.

  • Navegue a la URL y diviértase con la interfaz de usuario.

Construya y entrene modelos de visión por computadora para detectar posiciones de automóviles en imágenes utilizando Amazon SageMaker y Amazon Rekognition | Amazon Web Services PlatoBlockchain Inteligencia de datos. Búsqueda vertical. Ai.

Conclusión

¡Felicidades! Implementamos una arquitectura sin servidor completa en la que usamos Amazon Rekognition, pero también ofrecimos una opción para su propio modelo personalizado, con este ejemplo disponible en GitHub. Si no tiene experiencia en ML en su equipo o suficientes datos personalizados para entrenar un modelo, puede seleccionar la opción que usa Amazon Rekognition. Si desea tener más control sobre su modelo, desea personalizarlo aún más y tener suficientes datos, puede elegir la solución SageMaker. Si tiene un equipo de científicos de datos, es posible que también deseen mejorar aún más los modelos y elegir una opción más personalizada y flexible. Puede colocar la función Lambda y API Gateway detrás de su aplicación web utilizando cualquiera de las dos opciones. También puede utilizar este enfoque para un caso de uso diferente para el que desee adaptar el código.

La ventaja de esta arquitectura sin servidor es que los componentes básicos son completamente intercambiables. Las oportunidades son casi ilimitadas. Entonces, ¡comienza hoy!

Como siempre, AWS agradece sus comentarios. Envíe sus comentarios o preguntas.


Acerca de los autores

Construya y entrene modelos de visión por computadora para detectar posiciones de automóviles en imágenes utilizando Amazon SageMaker y Amazon Rekognition | Amazon Web Services PlatoBlockchain Inteligencia de datos. Búsqueda vertical. Ai.miguel wallner es consultor sénior de datos e IA en los servicios profesionales de AWS y le apasiona permitir que los clientes en su viaje se vuelvan impulsados ​​por los datos y se conviertan en AWSome en la nube de AWS. Además, le gusta pensar en grande con los clientes para innovar e inventar nuevas ideas para ellos.

Construya y entrene modelos de visión por computadora para detectar posiciones de automóviles en imágenes utilizando Amazon SageMaker y Amazon Rekognition | Amazon Web Services PlatoBlockchain Inteligencia de datos. Búsqueda vertical. Ai.Aamna Najmi es un científico de datos con los servicios profesionales de AWS. Le apasiona ayudar a los clientes a innovar con tecnologías de Big Data e Inteligencia Artificial para aprovechar el valor comercial y los conocimientos de los datos. Tiene experiencia trabajando en plataformas de datos y proyectos de AI/ML en la vertical de salud y ciencias de la vida. En su tiempo libre, disfruta de la jardinería y de viajar a nuevos lugares.

Construya y entrene modelos de visión por computadora para detectar posiciones de automóviles en imágenes utilizando Amazon SageMaker y Amazon Rekognition | Amazon Web Services PlatoBlockchain Inteligencia de datos. Búsqueda vertical. Ai.David Sauerwein es un científico de datos sénior en AWS Professional Services, donde ayuda a los clientes en su viaje de IA/ML en la nube de AWS. David se enfoca en gemelos digitales, pronósticos y computación cuántica. Tiene un doctorado en física teórica de la Universidad de Innsbruck, Austria. También fue investigador doctoral y posdoctoral en el Max-Planck-Institute for Quantum Optics en Alemania. En su tiempo libre le encanta leer, esquiar y pasar tiempo con su familia.

Construya y entrene modelos de visión por computadora para detectar posiciones de automóviles en imágenes utilizando Amazon SageMaker y Amazon Rekognition | Amazon Web Services PlatoBlockchain Inteligencia de datos. Búsqueda vertical. Ai.Srikrishna Caitanya Konduru es un científico de datos sénior con servicios profesionales de AWS. Apoya a los clientes en la creación de prototipos y la puesta en funcionamiento de sus aplicaciones ML en AWS. Srikrishna se enfoca en visión por computadora y PNL. También dirige el diseño de la plataforma ML y las iniciativas de identificación de casos de uso para clientes en diversos sectores verticales de la industria. Srikrishna tiene una Maestría en Ingeniería Biomédica de la Universidad RWTH Aachen, Alemania, con un enfoque en Imágenes Médicas.

Construya y entrene modelos de visión por computadora para detectar posiciones de automóviles en imágenes utilizando Amazon SageMaker y Amazon Rekognition | Amazon Web Services PlatoBlockchain Inteligencia de datos. Búsqueda vertical. Ai.Ahmed Mansour es científico de datos en AWS Professional Services. Brinda soporte técnico a los clientes a través de su viaje de IA/ML en la nube de AWS. Ahmed se enfoca en aplicaciones de PNL al dominio de proteínas junto con RL. Tiene un doctorado en Ingeniería de la Universidad Técnica de Munich, Alemania. En su tiempo libre le encanta ir al gimnasio y jugar con sus hijos.

Sello de tiempo:

Mas de Aprendizaje automático de AWS