Crea e addestra modelli di visione artificiale per rilevare le posizioni delle auto nelle immagini utilizzando Amazon SageMaker e Amazon Rekognition | Servizi Web Amazon

Crea e addestra modelli di visione artificiale per rilevare le posizioni delle auto nelle immagini utilizzando Amazon SageMaker e Amazon Rekognition | Servizi Web Amazon

La visione artificiale (CV) è una delle applicazioni più comuni del machine learning (ML) e del deep learning. I casi d'uso vanno da auto a guida autonoma, moderazione dei contenuti su piattaforme di social media, rilevamento del cancro e rilevamento automatico dei difetti. Rekognition di Amazon è un servizio completamente gestito in grado di eseguire attività CV come il rilevamento di oggetti, il rilevamento di segmenti video, la moderazione dei contenuti e altro ancora per estrarre informazioni dettagliate dai dati senza la necessità di alcuna precedente esperienza di ML. In alcuni casi, potrebbe essere necessaria una soluzione più personalizzata insieme al servizio per risolvere un problema molto specifico.

In questo post, affrontiamo le aree in cui il CV può essere applicato a casi d'uso in cui la posa degli oggetti, la loro posizione e l'orientamento sono importanti. Uno di questi casi d'uso sarebbero le applicazioni mobili rivolte ai clienti in cui è richiesto il caricamento di un'immagine. Potrebbe essere per motivi di conformità o per fornire un'esperienza utente coerente e migliorare il coinvolgimento. Ad esempio, sulle piattaforme di shopping online, l'angolazione con cui i prodotti vengono mostrati nelle immagini ha un effetto sul tasso di acquisto di questo prodotto. Uno di questi casi è rilevare la posizione di un'auto. Dimostriamo come combinare soluzioni ML ben note con la post-elaborazione per affrontare questo problema nel cloud AWS.

Utilizziamo modelli di deep learning per risolvere questo problema. L'addestramento degli algoritmi ML per la stima della posa richiede molta esperienza e dati di addestramento personalizzati. Entrambi i requisiti sono difficili e costosi da ottenere. Pertanto, presentiamo due opzioni: una che non richiede alcuna esperienza di ML e utilizza Amazon Rekognition e un'altra che utilizza Amazon Sage Maker per addestrare e distribuire un modello ML personalizzato. Nella prima opzione, utilizziamo Amazon Rekognition per rilevare le ruote dell'auto. Quindi deduciamo l'orientamento dell'auto dalle posizioni delle ruote utilizzando un sistema basato su regole. Nella seconda opzione, rileviamo le ruote e altre parti dell'auto utilizzando il rivelatore modello. Questi vengono nuovamente utilizzati per dedurre la posizione dell'auto con codice basato su regole. La seconda opzione richiede esperienza ML ma è anche più personalizzabile. Può essere utilizzato per un'ulteriore post-elaborazione dell'immagine, ad esempio per ritagliare l'intera vettura. Entrambe le opzioni possono essere addestrate su set di dati disponibili pubblicamente. Infine, mostriamo come puoi integrare questa soluzione di rilevamento della posizione dell'auto nella tua applicazione web esistente utilizzando servizi come Gateway API Amazon ed AWS Amplifica.

Panoramica della soluzione

Il diagramma seguente illustra l'architettura della soluzione.

Costruisci e addestra modelli di visione artificiale per rilevare le posizioni delle auto nelle immagini utilizzando Amazon SageMaker e Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

La soluzione consiste in una finta applicazione web in Amplify in cui un utente può caricare un'immagine e invocare il modello Amazon Rekognition o il modello Detectron personalizzato per rilevare la posizione dell'auto. Per ogni opzione, ospitiamo un AWS Lambda funzione dietro un gateway API esposto alla nostra applicazione fittizia. Abbiamo configurato la nostra funzione Lambda per l'esecuzione con il modello Detectron addestrato in SageMaker o Amazon Rekognition.

Prerequisiti

Per questa procedura dettagliata, è necessario disporre dei seguenti prerequisiti:

Crea un'app serverless utilizzando Amazon Rekognition

La nostra prima opzione mostra come rilevare l'orientamento delle auto nelle immagini utilizzando Amazon Rekognition. L'idea è di utilizzare Amazon Rekognition per rilevare la posizione dell'auto e delle sue ruote e quindi eseguire la post-elaborazione per ricavare l'orientamento dell'auto da queste informazioni. L'intera soluzione viene distribuita utilizzando Lambda come mostrato nella Repository Github. Questa cartella contiene due file principali: un Dockerfile che definisce l'immagine Docker che verrà eseguita nella nostra funzione Lambda e il app.py file, che sarà il punto di ingresso principale della funzione 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 funzione Lambda prevede un evento che contiene un'intestazione e un corpo, dove il corpo dovrebbe essere l'immagine necessaria per essere etichettata come oggetto decodificato in base64. Data l'immagine, Amazon Rekognition detect_labels La funzione viene richiamata dalla funzione Lambda utilizzando Boto3. La funzione restituisce una o più etichette per ciascun oggetto nell'immagine e i dettagli del riquadro di delimitazione per tutte le etichette degli oggetti rilevati come parte della risposta, insieme ad altre informazioni come la confidenza dell'etichetta assegnata, le etichette antenate dell'etichetta rilevata, possibili alias per l'etichetta e le categorie a cui appartiene l'etichetta rilevata. Sulla base delle etichette restituite da Amazon Rekognition, eseguiamo la funzione label_image, che calcola l'angolo dell'auto dalle ruote rilevate come segue:

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]]]

Si noti che l'applicazione richiede che nell'immagine sia presente solo un'auto e restituisce un errore in caso contrario. Tuttavia, la post-elaborazione può essere adattata per fornire descrizioni dell'orientamento più granulari, coprire diverse auto o calcolare l'orientamento di oggetti più complessi.

Migliora il rilevamento delle ruote

Per migliorare ulteriormente la precisione del rilevamento della ruota, è possibile utilizzare Etichette personalizzate Amazon Rekognition. Analogamente alla messa a punto utilizzando SageMaker per addestrare e distribuire un modello ML personalizzato, puoi portare i tuoi dati etichettati in modo che Amazon Rekognition possa produrre un modello di analisi delle immagini personalizzato per te in poche ore. Con Rekognition Custom Labels, hai solo bisogno di un piccolo set di immagini di addestramento specifiche per il tuo caso d'uso, in questo caso immagini di auto con angolazioni specifiche, perché utilizza le funzionalità esistenti in Amazon Rekognition per essere addestrato su decine di milioni di immagini in tutto molte categorie. Le etichette personalizzate di Rekognition possono essere integrate con pochi clic e piccoli adattamenti alla funzione Lambda che utilizziamo per la soluzione Amazon Rekognition standard.

Addestra un modello utilizzando un processo di addestramento SageMaker

Nella nostra seconda opzione, addestriamo un modello di deep learning personalizzato su SageMaker. Noi usiamo il Quadro Detectron2 per la segmentazione di parti di automobili. Questi segmenti vengono quindi utilizzati per dedurre la posizione dell'auto.

Il framework Detectron2 è una libreria che fornisce algoritmi di rilevamento e segmentazione all'avanguardia. Detectron fornisce una varietà di modelli Mask R-CNN che sono stati addestrati sul famoso set di dati COCO (oggetti comuni nel contesto). Per costruire il nostro modello di rilevamento di oggetti per auto, utilizziamo l'apprendimento del trasferimento per mettere a punto un modello Mask R-CNN preaddestrato sul segmentazione delle parti di automobili insieme di dati. Questo set di dati ci consente di addestrare un modello in grado di rilevare le ruote ma anche altre parti dell'auto. Queste informazioni aggiuntive possono essere ulteriormente utilizzate nei calcoli dell'angolo dell'auto rispetto all'immagine.

Il set di dati contiene dati annotati di parti di automobili da utilizzare per il rilevamento di oggetti e le attività di segmentazione semantica: circa 500 immagini di berline, pickup e veicoli sportivi (SUV), acquisite in più viste (anteriore, posteriore e laterale). Ogni immagine è annotata da 18 maschere di istanza e riquadri di delimitazione che rappresentano le diverse parti di un'auto come ruote, specchietti, luci e vetro anteriore e posteriore. Abbiamo modificato le annotazioni di base delle ruote in modo tale che ogni ruota sia considerata un singolo oggetto invece di considerare tutte le ruote disponibili nell'immagine come un unico oggetto.

Usiamo Servizio di archiviazione semplice Amazon (Amazon S3) per archiviare il set di dati utilizzato per l'addestramento del modello Detectron insieme agli artefatti del modello addestrato. Inoltre, il contenitore Docker che viene eseguito nella funzione Lambda è archiviato in Registro dei contenitori Amazon Elastic (Amazon ECR). Il contenitore Docker nella funzione Lambda è necessario per includere le librerie e le dipendenze richieste per l'esecuzione del codice. Potremmo in alternativa usare Strati Lambda, ma è limitato a una quota di dimensione del pacchetto di distribuzione decompressa di 250 MB ed è possibile aggiungere un massimo di cinque livelli a una funzione Lambda.

La nostra soluzione si basa su SageMaker: estendiamo il precostruito Contenitori SageMaker Docker per PyTorch per eseguire il nostro PyTorch personalizzato codice di formazione. Successivamente, utilizziamo SageMaker Python SDK per eseguire il wrapping dell'immagine di addestramento in uno stimatore SageMaker PyTorch, come mostrato nei seguenti frammenti di codice:

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)

Infine, iniziamo il lavoro di formazione chiamando il fit() funzione sullo stimatore PyTorch creato. Al termine dell'addestramento, l'artefatto del modello addestrato viene archiviato nel bucket di sessione in Amazon S3 per essere utilizzato per la pipeline di inferenza.

Distribuisci il modello utilizzando SageMaker e le pipeline di inferenza

Utilizziamo anche SageMaker per ospitare l'endpoint di inferenza che esegue il nostro modello Detectron personalizzato. Il provisioning dell'intera infrastruttura utilizzata per distribuire la nostra soluzione avviene tramite AWS CDK. Possiamo ospitare il nostro modello personalizzato tramite a Endpoint in tempo reale di SageMaker a chiamata deploy sullo stimatore PyTorch. Questa è la seconda volta che estendiamo un contenitore SageMaker PyTorch predefinito per includere PyTorch Detectron. Lo usiamo per eseguire lo script di inferenza e ospitare il nostro modello PyTorch addestrato come segue:

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)

Tieni presente che abbiamo utilizzato una GPU ml.g4dn.xlarge per l'implementazione perché è la GPU più piccola disponibile e sufficiente per questa demo. Due componenti devono essere configurati nel nostro script di inferenza: caricamento del modello e servizio del modello. La funzione model_fn() viene utilizzato per caricare il modello addestrato che fa parte del container Docker ospitato e può essere trovato anche in Amazon S3 e restituisce un oggetto modello che può essere utilizzato per servire il modello come segue:

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 funzione predict_fn() esegue la previsione e restituisce il risultato. Oltre a utilizzare il nostro modello addestrato, utilizziamo una versione preaddestrata del modello Mask R-CNN addestrato sul set di dati COCO per estrarre l'auto principale nell'immagine. Questo è un ulteriore passaggio di post-elaborazione per gestire le immagini in cui esiste più di un'auto. Vedere il seguente codice:

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

Simile alla soluzione Amazon Rekognition, i riquadri di delimitazione previsti per il wheel class vengono filtrate dagli output di rilevamento e fornite al modulo di post-elaborazione per valutare la posizione dell'auto rispetto all'output.

Infine, abbiamo anche migliorato il postprocessing per la soluzione Detectron. Utilizza anche i segmenti di diverse parti dell'auto per dedurre la soluzione. Ad esempio, ogni volta che viene rilevato un paraurti anteriore, ma nessun paraurti posteriore, si presume di avere una vista frontale dell'auto e viene calcolato l'angolo corrispondente.

Connetti la tua soluzione all'applicazione web

I passaggi per connettere gli endpoint del modello ad Amplify sono i seguenti:

  • Clona il repository dell'applicazione che lo stack AWS CDK ha creato, denominato car-angle-detection-website-repo. Assicurati di cercarlo nella regione che hai usato per la distribuzione.
  • Copia gli endpoint API Gateway per ciascuna delle funzioni Lambda distribuite nel file index.html file nel repository precedente (sono presenti dei segnaposto in cui è necessario posizionare l'endpoint). Il codice seguente è un esempio di come appare questa sezione del file .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>

  • Salva il file HTML e invia la modifica del codice al ramo principale remoto.

Questo aggiornerà il file HTML nella distribuzione. L'applicazione è ora pronta per l'uso.

  • Passa alla console Amplify e individua il progetto che hai creato.

L'URL dell'applicazione sarà visibile al termine della distribuzione.

  • Vai all'URL e divertiti con l'interfaccia utente.

Costruisci e addestra modelli di visione artificiale per rilevare le posizioni delle auto nelle immagini utilizzando Amazon SageMaker e Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Conclusione

Congratulazioni! Abbiamo implementato un'architettura serverless completa in cui abbiamo utilizzato Amazon Rekognition, ma abbiamo anche offerto un'opzione per il tuo modello personalizzato, con questo esempio disponibile su GitHub. Se non disponi di competenze di ML nel tuo team o di dati personalizzati sufficienti per addestrare un modello, puoi selezionare l'opzione che utilizza Amazon Rekognition. Se desideri un maggiore controllo sul tuo modello, desideri personalizzarlo ulteriormente e disporre di dati sufficienti, puoi scegliere la soluzione SageMaker. Se hai un team di data scientist, potrebbero anche voler migliorare ulteriormente i modelli e scegliere un'opzione più personalizzata e flessibile. Puoi inserire la funzione Lambda e il gateway API dietro la tua applicazione web utilizzando una delle due opzioni. Puoi anche utilizzare questo approccio per un caso d'uso diverso per il quale potresti voler adattare il codice.

Il vantaggio di questa architettura serverless è che gli elementi costitutivi sono completamente intercambiabili. Le opportunità sono quasi illimitate. Quindi, inizia oggi stesso!

Come sempre, AWS è lieto di ricevere feedback. Si prega di inviare commenti o domande.


Informazioni sugli autori

Costruisci e addestra modelli di visione artificiale per rilevare le posizioni delle auto nelle immagini utilizzando Amazon SageMaker e Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Michael Waller è un Senior Consultant Data & AI con AWS Professional Services ed è appassionato di consentire ai clienti nel loro viaggio di diventare data-driven e AWSome nel cloud AWS. Inoltre, gli piace pensare in grande con i clienti per innovare e inventare nuove idee per loro.

Costruisci e addestra modelli di visione artificiale per rilevare le posizioni delle auto nelle immagini utilizzando Amazon SageMaker e Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Amna Najmi è un Data Scientist con AWS Professional Services. È appassionata di aiutare i clienti a innovare con le tecnologie Big Data e Intelligenza Artificiale per sfruttare il valore aziendale e gli insight dai dati. Ha esperienza nel lavorare su piattaforme dati e progetti AI/ML nel settore sanitario e delle scienze della vita. Nel tempo libero le piace fare giardinaggio e viaggiare in posti nuovi.

Costruisci e addestra modelli di visione artificiale per rilevare le posizioni delle auto nelle immagini utilizzando Amazon SageMaker e Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.David Sauerwein è Senior Data Scientist presso AWS Professional Services, dove supporta i clienti nel loro percorso AI/ML nel cloud AWS. David si concentra su gemelli digitali, previsioni e calcolo quantistico. Ha conseguito un dottorato di ricerca in fisica teorica presso l'Università di Innsbruck, in Austria. È stato anche ricercatore di dottorato e post-dottorato presso il Max-Planck-Institute for Quantum Optics in Germania. Nel tempo libero ama leggere, sciare e stare con la sua famiglia.

Costruisci e addestra modelli di visione artificiale per rilevare le posizioni delle auto nelle immagini utilizzando Amazon SageMaker e Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Srikrishna Caitanya Konduru è un Senior Data Scientist con servizi AWS Professional. Supporta i clienti nella prototipazione e nell'operatività delle loro applicazioni ML su AWS. Srikrishna si concentra sulla visione artificiale e sulla PNL. Dirige anche la progettazione della piattaforma ML e le iniziative di identificazione dei casi d'uso per i clienti in diversi settori verticali. Srikrishna ha conseguito una laurea in ingegneria biomedica presso l'università RWTH Aachen, Germania, con specializzazione in imaging medico.

Costruisci e addestra modelli di visione artificiale per rilevare le posizioni delle auto nelle immagini utilizzando Amazon SageMaker e Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Ahmed Mansour è un Data Scientist presso AWS Professional Services. Fornisce supporto tecnico ai clienti durante il loro percorso AI/ML nel cloud AWS. Ahmed si concentra sulle applicazioni della PNL al dominio proteico insieme a RL. Ha conseguito un dottorato di ricerca in ingegneria presso l'Università Tecnica di Monaco di Baviera, in Germania. Nel tempo libero ama andare in palestra e giocare con i suoi figli.

Timestamp:

Di più da Apprendimento automatico di AWS