Logo Zephyrnet

Rilevamento di oggetti e riqualificazione del modello con Amazon SageMaker e Amazon Augmented AI

Data:

Settori come la sanità, i media e le piattaforme di social media utilizzano flussi di lavoro di analisi delle immagini per identificare oggetti ed entità all'interno delle immagini per comprendere l'intera immagine. Ad esempio, un sito Web di e-commerce potrebbe utilizzare oggetti presenti in un'immagine per mostrare risultati di ricerca pertinenti. A volte l'analisi delle immagini può essere difficile quando le immagini sono sfocate o più sfumate. In questi casi, potresti aver bisogno di un essere umano per completare il ciclo di machine learning (ML) e consigliarti sull'immagine usando il loro giudizio umano.

In questo post, usiamo Amazon Sage Maker per costruire, addestrare e distribuire un modello ML per il rilevamento e l'uso degli oggetti AI aumentata di Amazon (Amazon A2I) per creare e rendere un modello di lavoro personalizzato che consente ai revisori di identificare o rivedere gli oggetti trovati in un'immagine. Amazon SageMaker è un servizio completamente gestito che offre agli sviluppatori e ai data scientist la capacità di creare, formare e distribuire rapidamente modelli ML. Amazon SageMaker rimuove il sollevamento pesante da ogni fase del processo ML per facilitare lo sviluppo di modelli di alta qualità. Amazon A2I è un servizio completamente gestito che ti aiuta a creare flussi di lavoro di revisione umani per rivedere e convalidare le previsioni dei modelli ML.

È inoltre possibile utilizzare Rekognition di Amazon per il rilevamento di oggetti per identificare oggetti da un insieme predefinito di classi o utilizzare Etichette personalizzate Amazon Rekogition per formare il tuo modello personalizzato per rilevare oggetti e scene in immagini specifiche per le tue esigenze aziendali, semplicemente portando i tuoi dati.

Alcuni altri casi d'uso comuni che potrebbero richiedere flussi di lavoro umani sono la moderazione dei contenuti in immagini e video, l'estrazione di testo ed entità da documenti, traduzioni e analisi dei sentimenti. Sebbene sia possibile utilizzare modelli ML per identificare contenuti inappropriati o estrarre entità, gli esseri umani potrebbero dover convalidare le previsioni del modello in base al caso d'uso. Amazon A2I ti aiuta a creare rapidamente questi flussi di lavoro umani.

Puoi anche utilizzare Amazon A2I per inviare un campione casuale di previsioni ML ai revisori umani. È possibile utilizzare questi risultati per informare le parti interessate sulle prestazioni del modello e per controllare le previsioni del modello.

Prerequisiti

Questo post richiede di avere i seguenti prerequisiti:

Panoramica della procedura dettagliata

Per implementare questa soluzione, completare i seguenti passi:

  1. Ospita un modello di rilevamento di oggetti su Amazon SageMaker.
  2. Creare un modello di attività di lavoro.
  3. Crea un team di lavoro privato.
  4. Creare un flusso di lavoro di revisione umano.
  5. Chiama l'endpoint di Amazon SageMaker.
  6. Completa la recensione umana.
  7. Elaborare l'output JSON per la formazione incrementale.

Per questo post, abbiamo esaminato la procedura dettagliata us-east-1, ma Amazon A2I è disponibile in molte regioni. Per ulteriori informazioni, vedere Tabella delle regioni.

Passaggio 1: ospitare un modello di rilevamento degli oggetti su Amazon SageMaker

Questo passaggio è disponibile in quaderno di accompagnamento di Jupyter. Per impostare il tuo endpoint, inserisci il seguente codice Python (l'operazione potrebbe richiedere alcuni minuti):

# provided trained model in the public bucket
source_model_data_s3_uri = 's3://aws-sagemaker-augmented-ai-example/model/model.tar.gz' !aws s3 cp {source_model_data_s3_uri} {MODEL_PATH}/model.tar.gz model_data_s3_uri = f'{MODEL_PATH}/model.tar.gz' timestamp = time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime())
endpoint_name = 'DEMO-object-detection-augmented-ai-' + timestamp # the docker image for the SageMaker built-in object detection algorithm
image = sagemaker.amazon.amazon_estimator.get_image_uri(region, 'object-detection', repo_version='latest') # loading up a Model object from the provided trained model model = sagemaker.model.Model(model_data_s3_uri, image, role = role, predictor_cls = sagemaker.predictor.RealTimePredictor, sagemaker_session = sess)
# deploying the model into one ml.m4.xlarge instance
object_detector = model.deploy(initial_instance_count = 1, instance_type = 'ml.m4.xlarge', endpoint_name = endpoint_name)
# defining the input content type. We will be sending images of jpeg format to the endpoint. object_detector.content_type = 'image/jpeg' 

Quando l'endpoint è attivo e funzionante, dovresti vedere il InService stato sul Console di Amazon SageMaker. (Nota che l'URL ti porta alla console in us-east-1 che è dove abbiamo fatto la demo, ma Amazon A2I è disponibile in molti altri Regioni. Assicurati di passare alla tua regione.)

Per vedere come appare il rilevamento degli oggetti, inserisci il seguente codice. Vengono visualizzate la classe prevista e la probabilità di previsione, insieme al riquadro di selezione utilizzando le funzioni di supporto visualize_detection ed load_and_predict definito in quaderno di accompagnamento di Jupyter.

test_photos_index = ['980382', '276517', '1571457'] if not os.path.isdir('sample-a2i-images'): os.mkdir('sample-a2i-images') for ind in test_photos_index: !curl https://images.pexels.com/photos/{ind}/pexels-photo-{ind}.jpeg > sample-a2i-images/pexels-photo-{ind}.jpeg test_photos = ['sample-a2i-images/pexels-photo-980382.jpeg', # motorcycle 'sample-a2i-images/pexels-photo-276517.jpeg', # bicycle 'sample-a2i-images/pexels-photo-1571457.jpeg'] # sofa results, detection_filtered, f = load_and_predict(test_photos[1], object_detector, threshold=0.2) 

La seguente schermata mostra l'output di un'immagine con un'etichetta e un riquadro di selezione.

Abbiamo sotto-addestrato questo modello SSD a scopo dimostrativo in quaderno di addestramento per il rilevamento di oggetti. Sebbene il modello identifichi una bicicletta nell'immagine, una probabilità di 0.245 è considerata bassa come una previsione attendibile nella moderna visione computerizzata. Inoltre, la localizzazione dell'oggetto non è abbastanza accurata; il rettangolo di selezione non copre la ruota anteriore e la sella. Tuttavia, questo modello mal addestrato serve come esempio perfetto per portare revisori umani quando un modello non fa una previsione con elevata sicurezza.

Passaggio 2: creare un modello di attività di lavoro

Puoi utilizzare Amazon A2I per incorporare una recensione umana in qualsiasi flusso di lavoro ML. In questo post, per integrare Amazon A2I con l'endpoint ospitato Amazon SageMaker, è necessario creare un'attività personalizzata. Quando si utilizza un tipo di attività personalizzato, si crea e si avvia un ciclo umano utilizzando l'API runtime Amazon A2I per inviare i dati che richiedono la revisione utilizzando un modello di attività di lavoro. Per ulteriori informazioni, vedere Usa Amazon Augmented AI con tipi di attività personalizzate.

Folla di elementi HTML sono componenti Web che forniscono diversi widget di attività ed elementi di progettazione che è possibile personalizzare in base alla domanda che si desidera porre. Puoi utilizzare questi elementi folla per creare un modello di lavoratore personalizzato e integrarlo con un flusso di lavoro di revisione umana Amazon A2I per personalizzare la console di lavoro e le istruzioni. Forniamo oltre 60 modelli di attività personalizzate di esempio in Repository GitHub che puoi utilizzare così com'è o come punto di partenza per personalizzare i tuoi modelli. Per un caso d'uso del rilevamento di oggetti, il revisore deve in genere selezionare etichette e disegnare riquadri di delimitazione. Per questo post, usi uno dei modelli di attività di esempio, delimitazione-box.liquid.html, dal repository e apportare alcune personalizzazioni. Questo modello include istruzioni di etichettatura, funzionalità di etichettatura (disegno, ingrandimento e riduzione e ricerca di etichette) e legge un'immagine da un determinato percorso Amazon S3. Puoi anche personalizzare il modello in mostra i rettangoli con initial-value in modo che i lavoratori possano iniziare con un rettangolo di selezione previsto dal modello ML anziché estrarre da zero il rettangolo di selezione.

Questo passaggio è disponibile in quaderno di accompagnamento di Jupyter. Per creare un modello di lavoratore personalizzato sulla console Amazon A2I, completare i seguenti passi:

  1. Spostarsi Modelli di attività del lavoratore.
  2. Scegli Crea modello.
  3. Nel Nome modello, inserisci un nome univoco all'interno della Regione nel tuo account; per esempio, a2i-demo-object-detection-ui.
  4. Nel Tipo di modelloscegli Custom.
  5. Nel Editor di modelli, inserisci i modelli HTML dell'attività di esempio da delimitazione-box.liquid.html.
    1. modificare la labels variabile nell'editor in base alle classi incluse nel set di dati VAS PASCAL e nel modello di rilevamento oggetti: ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat','chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike', 'person','pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor']
  6. Scegli Creare.

Passaggio 3: creare un team di lavoro privato

Puoi inoltrare facilmente le recensioni alla tua forza lavoro privata con Amazon A2I. È inoltre possibile accedere a una forza lavoro di oltre 500,000 appaltatori indipendenti che stanno già svolgendo attività relative alla ML Amazon Mechanical Turk. In alternativa, se i tuoi dati richiedono riservatezza o competenze speciali, puoi utilizzare i fornitori di forza lavoro che hanno esperienza con progetti di revisione e sottoposti a screening da AWS per procedure di qualità e sicurezza.

Qualunque sia il tipo di forza lavoro che scegli, Amazon A2I si occupa di inviare compiti ai lavoratori. Per questo post, crei un team di lavoro utilizzando una forza lavoro privata e ti aggiungi al team per visualizzare in anteprima il flusso di lavoro di Amazon A2I.

Crea e gestisci la tua forza lavoro privata in Pagina della forza lavoro per l'etichettatura sulla console di Amazon SageMaker. Seguendo le istruzioni, è possibile creare una forza lavoro privata inserendo le e-mail dei lavoratori o importando una forza lavoro preesistente da un Amazzonia Cognito pool di utenti.

Se hai già un team di lavoro creato per Amazon SageMaker Ground Truth, puoi utilizzare lo stesso team di lavoro con Amazon A2I e passare alla sezione seguente.

Questo passaggio non è disponibile nel notebook Jupyter in dotazione.

Per creare il tuo team di lavoro privato, completa i seguenti passaggi:

  1. Sulla console di Amazon SageMaker, accedere a Etichettatura delle forze di lavoro
  2. Sulla Privata scheda, scegliere Crea team privato.
  3. Scegli Invita nuovi lavoratori via e-mail.
  4. Per questo post, inserisci il tuo indirizzo email per lavorare sulle tue attività di elaborazione dei documenti.

È possibile inserire un elenco di massimo 50 indirizzi e-mail, separati da virgole, nel campo Indirizzi e-mail scatola.

  1. Inserisci il nome di un'organizzazione e contatta l'e-mail.
  2. Scegli Crea team privato.

Dopo aver creato il team privato, ricevi un invito via e-mail. La seguente schermata mostra un esempio di email.

Dopo aver fatto clic sul collegamento e aver modificato la password, si è registrati come lavoratore verificato per questo team. La seguente schermata mostra le informazioni aggiornate sul Privata scheda.

Il tuo team composto da una sola persona è ora pronto e puoi creare un flusso di lavoro per la revisione umana.

sostituire 'IL TUO_TEAM_LAVORO_ARN' nel quaderno di accompagnamento di Jupyter con l'ARN del team di lavoro creato:

WORKTEAM_ARN = 'YOUR_WORKTEAM_ARN'

Passaggio 4: creare un flusso di lavoro di revisione umana

Un flusso di lavoro di revisione umana viene anche chiamato a definizione del flusso. Si utilizza la definizione del flusso per configurare il proprio team di lavoro umano e fornire informazioni su come eseguire l'attività di revisione. È possibile utilizzare una definizione di flusso per creare più loop umani.

Questo passaggio è disponibile in quaderno di accompagnamento di Jupyter. Per fare ciò sulla console Amazon A2I, completare i seguenti passi:

  1. Navigare Vai all’email Flussi di lavoro di revisione umana
  2. Scegli Creare un flusso di lavoro di revisione umano.
  3. Nel Impostazioni del flusso di lavoro sezione, per Nome, inserisci un nome univoco per il flusso di lavoro; per esempio, a21-demo-1.
  4. Nel Benna S3, inserisci il bucket S3 in cui desideri memorizzare i risultati della revisione umana.

Il bucket deve trovarsi nella stessa area del flusso di lavoro. Ad esempio, se si crea un bucket chiamato a2i-demos, inserisci il percorso s3://a2i-demos/.

  1. Nel Ruolo IAMscegli Crea un nuovo ruolo Dal menu a discesa.

Amazon A2I può creare automaticamente un ruolo per te.

  1. Nel Benne S3 specificate, selezionare Benne specifiche S3.
  2. Immettere il bucket S3 specificato in precedenza; ad esempio, a2i-demos.
  3. Scegli Creare.

Viene visualizzata una conferma quando la creazione del ruolo è completa e il tuo ruolo è ora precompilato in Ruolo IAM menu a discesa.

  1. Nel Tipo di attività, selezionare Custom.

Nei passaggi successivi, selezionare il modello di interfaccia utente creato in precedenza.

  1. Nel Modello di attività del lavoratore sezione, selezionare Usa il tuo modello.
  2. Nel Modello, scegli il modello che hai creato.
  3. Nel Descrizione del compito, inserisci una breve descrizione dell'attività.
  4. Nel Lavoratori sezione, selezionare Privato.
  5. Nel Squadre private, scegli il team di lavoro che hai creato in precedenza.
  6. Scegli Creare.

Si viene reindirizzati al Flussi di lavoro di revisione umana pagina e vedere un messaggio di conferma simile al seguente screenshot.

Registrare il nuovo ARN del flusso di lavoro di revisione umana, che verrà utilizzato per configurare il ciclo umano nella sezione successiva.

Passaggio 5: chiamare l'endpoint Amazon SageMaker

Ora che hai impostato il flusso di lavoro di revisione umana Amazon A2I, sei pronto a chiamare il tuo endpoint di rilevamento oggetti su Amazon SageMaker e avviare i tuoi loop umani. Per questo caso d'uso, si desidera avviare un ciclo umano solo se il punteggio di probabilità di previsione più elevato restituito dal modello per gli oggetti rilevati è inferiore al 50% (SCORE_THREHOLD). Con un po 'di logica (vedi il codice seguente), puoi controllare la risposta per ogni chiamata all'endpoint di Amazon SageMaker usando il load_and_predict funzione di supporto e se il punteggio di probabilità di previsione più elevato è inferiore al 50%, si crea un ciclo umano.

Si utilizza un ciclo umano per avviare il flusso di lavoro di revisione umana. Quando viene attivato un ciclo umano, le attività di revisione umana vengono inviate ai lavoratori come specificato nella definizione del flusso.

Questo passaggio è disponibile in quaderno di accompagnamento di Jupyter.

human_loops_started = []
SCORE_THRESHOLD = .50
for fname in test_photos: # Call SageMaker endpoint and not display any object detected with probability lower than 0.4. response, score_filtered, fig = load_and_predict(fname, object_detector, threshold=0.4) # Sort by prediction score so that the first item has the highest probability score_filtered.sort(key=lambda x: x[1], reverse=True) # Our condition for triggering a human review # if the highest probability is lower than the threshold, send it to human review # otherwise proceed to the next image if (score_filtered[0][1] < SCORE_THRESHOLD): s3_fname='s3://%s/a2i-results/%s' % (BUCKET, fname) print(s3_fname) humanLoopName = str(uuid.uuid4()) inputContent = { "initialValue": score_filtered[0][0], "taskObject": s3_fname # the s3 object will be passed to the worker task UI to render } # start an a2i human review loop with an input start_loop_response = a2i.start_human_loop( HumanLoopName=humanLoopName, FlowDefinitionArn=flowDefinitionArn, HumanLoopInput={ "InputContent": json.dumps(inputContent) } ) human_loops_started.append(humanLoopName) print(f'Object detection Confidence Score of %s is less than the threshold of %.2f' % (score_filtered[0][0], SCORE_THRESHOLD)) print(f'Starting human loop with name: {humanLoopName} n') else: print(f'Object detection Confidence Score of %s is above than the threshold of %.2f' % (score_filtered[0][0], SCORE_THRESHOLD)) print('No human loop created. n')

Il codice precedente utilizza una semplice istruzione if-else, ma per condizioni dinamiche è anche possibile utilizzare AWS Lambda per valutare se un oggetto necessita di una revisione umana. Quando decidi che è necessaria una revisione umana, puoi creare un ciclo umano usando a2i.start_human_loop.

Passaggio 6: completamento di una revisione umana

Dopo aver inviato le immagini con bassa probabilità di previsione ad Amazon A2I tramite start_human_loop chiama, tu o la persona assegnata come revisore potete accedere al portale delle etichette per rivedere le immagini. Puoi trovare l'URL sulla console di Amazon SageMaker, su Privata scheda del Etichettatura della forza lavoro pagina. Puoi anche recuperare a livello di codice l'URL con il seguente codice:

print('https://' + sagemaker_client.describe_workteam(WorkteamName=workteamName)['Workteam']['SubDomain'])

Per questo post, Nome del gruppo di lavoro is a2i-demo-1.

Per completare una revisione umana, completare i seguenti passi:

  1. Quando si accede al portale, viene richiesto di accedere con nome utente e password (se è la prima volta che si visita il portale, è necessario creare una nuova password).

Puoi vedere un nuovo lavoro per te in Offerte di lavoro .

  1. Scegli Demo di rilevamento oggetti a2i.
  2. Scegli Iniziare a lavorare.

La pagina contiene un pannello di istruzioni personalizzabile, l'immagine e le etichette disponibili.

  1. Dalla barra degli strumenti, selezionare Scatola .
  2. Sotto per il tuo brandscegli bicicletta.
  3. Disegna il rettangolo di selezione attorno all'oggetto.
  4. Scegli Invio.

Dopo aver completato tutte le recensioni delle immagini, è possibile analizzare l'output del ciclo umano. Amazon A2I memorizza i risultati nel tuo bucket S3 e ti invia un Amazon Cloud Watch evento.

I risultati dovrebbero essere disponibili nel percorso di output di Amazon S3 specificato nella definizione del flusso di lavoro di revisione umana al termine di tutto il lavoro. La risposta umana, l'etichetta e il rettangolo di selezione vengono restituiti e salvati nel file JSON. Il codice seguente mostra un file JSON di output Amazon A2I di esempio:

{'flowDefinitionArn': 'arn:aws:sagemaker:us-east-1:xxxxxxxx:flow-definition/fd-sagemaker-object-detection-demo-2020-05-01-18-08-47', 'humanAnswers': [{'answerContent': { 'annotatedResult': { 'boundingBoxes': [{'height': 1801, 'label': 'bicycle', 'left': 1042, 'top': 627, 'width': 2869}], 'inputImageProperties': {'height': 2608, 'width': 3911}}}, 'submissionTime': '2020-05-01T18:24:53.742Z', 'workerId': 'xxxxxxxxxx'}], 'humanLoopName': 'xxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxxx', 'inputContent': {'initialValue': 'bicycle', 'taskObject': 's3://sagemaker-us-east-1-xxxxxxx/a2i-results/sample-a2i-images/pexels-photo-276517.jpeg'}}

È possibile recuperare queste informazioni e analizzarle per ulteriori analisi. Nel passaggio successivo, ti mostreremo come utilizzare questi dati rivisti dall'uomo per la successiva iterazione di riqualificazione del tuo modello.

Passaggio 7: elaborazione dell'output JSON per la formazione incrementale

Nel quaderno di addestramento per il rilevamento di oggetti, hai utilizzato l'algoritmo di rilevamento degli oggetti integrato di Amazon SageMaker per addestrare la prima versione del modello. Hai utilizzato il modello per generare previsioni su alcune immagini casuali fuori campione e hai ottenuto una previsione non soddisfacente (bassa probabilità). Hai anche utilizzato Amazon A2I per esaminare ed etichettare l'immagine in base ai tuoi criteri personalizzati (soglia del punteggio di affidabilità <50%). Il passaggio successivo in un tipico ciclo di vita ML consiste nell'includere i casi in cui il modello ha avuto problemi nel successivo batch di dati di addestramento a scopo di riqualificazione. In questo modo, il modello può apprendere da una serie di nuovi dati di addestramento per il miglioramento continuo. In ML, questo si chiama allenamento incrementale.

Questo passaggio è disponibile in quaderno di accompagnamento di Jupyter.

È possibile fornire i dati dell'immagine e l'annotazione all'algoritmo di rilevamento degli oggetti in tre modi diversi. Per ulteriori informazioni, vedere Interfaccia di input / output per l'algoritmo di rilevamento degli oggetti. Per questo post, abbiamo formato il nostro modello originale con Formato RecordIO perché abbiamo convertito le immagini e le annotazioni VOC PASCAL in formato RecordIO. Per istruzioni sulla creazione di dati RecordIO personalizzati, vedere Preparare set di dati personalizzati per il rilevamento di oggetti.

In alternativa, l'algoritmo di rilevamento degli oggetti accetta anche un file JSON come input. È possibile creare un file JSON per immagine o trarne vantaggio Modalità pipe usando un manifest aumentato file come formato di input. La modalità pipe accelera il tempo complessivo di training del modello fino al 35% trasmettendo i dati in streaming all'algoritmo di training mentre è in esecuzione invece di copiare i dati nel Negozio di blocchi elastici di Amazon Volume (Amazon EBS) allegato all'istanza di formazione. Puoi costruire un file manifest aumentato dall'output Amazon A2I con il seguente codice:

object_categories_dict = {str(i): j for i, j in enumerate(object_categories)} def convert_a2i_to_augmented_manifest(a2i_output): annotations = [] confidence = [] for i, bbox in enumerate(a2i_output['humanAnswers'][0]['answerContent']['annotatedResult']['boundingBoxes']): object_class_key = [key for (key, value) in object_categories_dict.items() if value == bbox['label']][0] obj = {'class_id': int(object_class_key), 'width': bbox['width'], 'top': bbox['top'], 'height': bbox['height'], 'left': bbox['left']} annotations.append(obj) confidence.append({'confidence': 1}) augmented_manifest={'source-ref': a2i_output['inputContent']['taskObject'], 'a2i-retraining': {'annotations': annotations, 'image_size': [{'width': a2i_output['humanAnswers'][0]['answerContent']['annotatedResult']['inputImageProperties']['width'], 'depth':3, 'height': a2i_output['humanAnswers'][0]['answerContent']['annotatedResult']['inputImageProperties']['height']}]}, 'a2i-retraining-metadata': {'job-name': 'a2i/%s' % a2i_output['humanLoopName'], 'class-map': object_categories_dict, 'human-annotated':'yes', 'objects': confidence, 'creation-date': a2i_output['humanAnswers'][0]['submissionTime'], 'type':'groundtruth/object-detection'}} return augmented_manifest

Ciò si traduce in un oggetto JSON come il seguente codice, che è compatibile con il modo in cui Ground Truth genera il risultato e in che modo l'algoritmo di rilevamento oggetti incorporato di SageMaker prevede l'input:

{ 'source-ref': 's3://sagemaker-us-east-1-xxxxxxx/a2i-results/sample-a2i-images/pexels-photo-276517.jpeg', 'a2i-retraining': { 'annotations': [ { 'class_id': 1, 'height': 1801, 'left': 1042, 'top': 627, 'width': 2869}], 'image_size': [ { 'depth': 3, 'height': 2608, 'width': 3911}]}, 'a2i-retraining-metadata': { 'class-map': { '0': 'aeroplane', '1': 'bicycle', '2': 'bird', '3': 'boat', '4': 'bottle', '5': 'bus', '6': 'car', '7': 'cat', '8': 'chair', '9': 'cow' '10': 'diningtable', '11': 'dog', '12': 'horse', '13': 'motorbike', '14': 'person', '15': 'pottedplant', '16': 'sheep', '17': 'sofa', '18': 'train', '19': 'tvmonitor',}, 'creation-date': '2020-05-01T18:24:53.742Z', 'human-annotated': 'yes', 'job-name': 'a2i/fc3cea7e-ead8-4c5c-b52d-166ff6147ff0', 'objects': [{'confidence': 1}], 'type': 'groundtruth/object-detection'}}

Il codice precedente è solo un'immagine. Per creare una coorte di immagini di allenamento da tutte le immagini rietichettate dai revisori umani sulla console Amazon A2I, è possibile eseguire il ciclo di tutto l'output di Amazon A2I, convertire il file JSON e concatenarli in un file JSON Lines, con ogni riga rappresenta i risultati di un'immagine. Vedi il seguente codice:

with open('augmented.manifest', 'w') as outfile: for resp in completed_human_loops: # completed_human_loops contains a list of responses from a2i.describe_human_loop() calls splitted_string = re.split('s3://' + BUCKET + '/', resp['HumanLoopOutput']['OutputS3Uri']) output_bucket_key = splitted_string[1] response = s3.get_object(Bucket=BUCKET, Key=output_bucket_key) content = response["Body"].read() json_output = json.loads(content) augmented_manifest = convert_a2i_to_augmented_manifest(json_output) json.dump(augmented_manifest, outfile) outfile.write('n')
!head -n2 augmented.manifest
{"source-ref": "s3://sagemaker-us-east-1-xxxxxxx/a2i-results/sample-a2i-images/pexels-photo-276517.jpeg", "a2i-retraining": {"annotations": [{"class_id": 1, "width": 2869, "top": 627, "height": 1801, "left": 1042}], "image_size": [{"width": 3911, "depth": 3, "height": 2608}]}, "a2i-retraining-metadata": {"job-name": "a2i/fc3cea7e-ead8-4c5c-b52d-166ff6147ff0", "class-map": {"0": "aeroplane", "1": "bicycle", "2": "bird", "3": "boat", "4": "bottle", "5": "bus", "6": "car", "7": "cat", "8": "chair", "9": "cow", "10": "diningtable", "11": "dog", "12": "horse", "13": "motorbike", "14": "person", "15": "pottedplant", "16": "sheep", "17": "sofa", "18": "train", "19": "tvmonitor"}, "human-annotated": "yes", "objects": [{"confidence": 1}], "creation-date": "2020-05-21T18:36:33.834Z", "type": "groundtruth/object-detection"}}
{"source-ref": "s3://sagemaker-us-east-1-xxxxxxx/a2i-results/sample-a2i-images/pexels-photo-1571457.jpeg", "a2i-retraining": {"annotations": [{"class_id": 17, "width": 1754, "top": 1285, "height": 1051, "left": 657}], "image_size": [{"width": 3500, "depth": 3, "height": 2336}]}, "a2i-retraining-metadata": {"job-name": "a2i/8241d6e4-8078-4036-b065-ccdd5ebf955f", "class-map": {"0": "aeroplane", "1": "bicycle", "2": "bird", "3": "boat", "4": "bottle", "5": "bus", "6": "car", "7": "cat", "8": "chair", "9": "cow", "10": "diningtable", "11": "dog", "12": "horse", "13": "motorbike", "14": "person", "15": "pottedplant", "16": "sheep", "17": "sofa", "18": "train", "19": "tvmonitor"}, "human-annotated": "yes", "objects": [{"confidence": 1}], "creation-date": "2020-05-21T18:36:22.268Z", "type": "groundtruth/object-detection"}}

Dopo aver raccolto abbastanza punti dati, puoi costruirne uno nuovo Estimator per allenamento incrementale. Per ulteriori informazioni, vedere Addestra facilmente i modelli utilizzando i set di dati etichettati da Amazon SageMaker Ground Truth. In questo blog usiamo gli iperparametri esattamente come il modo in cui il primo modello è stato addestrato quaderno di addestramento per il rilevamento di oggetti, ad eccezione dell'utilizzo dei pesi dal modello addestrato anziché dei pesi predefiniti forniti con l'algoritmo (use_pretrained_model=0).

L'esempio di codice seguente mostra un addestramento incrementale con uno o due nuovi campioni. Poiché abbiamo esaminato solo due immagini in questo post, ciò non produce un modello con miglioramenti significativi.

s3_train_data = 's3://bucket/path/to/training/augmented.manifest'
s3_validation_data = 's3://bucket/path/to/validation/augmented.manifest'
s3_output_location = 's3://bucket/path/to/incremental-training/'
num_training_samples = 1234 from sagemaker.amazon.amazon_estimator import get_image_uri
training_image = get_image_uri(region, 'object-detection', repo_version='latest') # Create a model object set to using "Pipe" mode because we are inputing augmented manifest files.
new_od_model = sagemaker.estimator.Estimator(training_image, role, train_instance_count=1, train_instance_type='ml.p3.2xlarge', train_volume_size = 50, train_max_run = 360000, input_mode = 'Pipe', output_path=s3_output_location, sagemaker_session=sess) # the hyperparameters are the same from how the original model is trained new_od_model.set_hyperparameters(base_network='resnet-50', use_pretrained_model=0, num_classes=20, mini_batch_size=32, epochs=1, lr_scheduler_step='3,6', lr_scheduler_factor=0.1, optimizer='sgd', momentum=0.9, weight_decay=0.0005, overlap_threshold=0.5, nms_threshold=0.45, image_shape=300, label_width=350, num_training_samples=num_training_samples) train_data = sagemaker.session.s3_input(s3_train_data, distribution='FullyReplicated', content_type='application/x-recordio', record_wrapping='RecordIO', s3_data_type='AugmentedManifestFile', attribute_names=['source-ref', 'a2i-retraining'])
validation_data = sagemaker.session.s3_input(s3_validation_data, distribution='FullyReplicated', content_type='application/x-recordio', record_wrapping='RecordIO', s3_data_type='AugmentedManifestFile', attribute_names=['source-ref', 'a2i-retraining'])
# Use the output model from the previous job. model_data = sagemaker.session.s3_input(model_data_s3_uri, distribution='FullyReplicated', content_type='application/x-sagemaker-model', s3_data_type='S3Prefix', input_mode = 'File') data_channels = {'train': train_data, 'validation': validation_data, 'model': model_data} new_od_model.fit(inputs=data_channels, logs=True)

Dopo l'allenamento, ottieni un nuovo modello in s3_output_location. È quindi possibile distribuire questo modello su un nuovo endpoint di inferenza o aggiornare un endpoint esistente. Non si verifica alcuna perdita di disponibilità quando si aggiorna un endpoint esistente. Per aggiornare un endpoint, è necessario fornire una nuova configurazione dell'endpoint. Per ulteriori informazioni, vedere Aggiorna Endpoint.

Pulire

Per evitare spese future, elimina risorse come l'endpoint Amazon SageMaker, l'istanza del notebook e gli artefatti del modello in Amazon S3 quando non in uso.

Conclusione

Questo post ha semplicemente graffiato la superficie di ciò che Amazon A2I può fare in un tipico ciclo di vita ML. Abbiamo dimostrato come impostare tutto ciò di cui hai bisogno per avere un essere umano funzionante nel framework del loop: un'interfaccia del modello di attività del lavoratore Amazon A2I, un flusso di lavoro di revisione umana e un team di lavoro. Abbiamo anche mostrato come innescare un loop umano Amazon A2I a livello di codice dopo che un endpoint di rilevamento oggetti ospitato da Amazon SageMaker restituisce una bassa inferenza di confidenza. Infine, ti abbiamo spiegato come lavorare con il file JSON di output Amazon A2I per creare un nuovo batch di dati di allenamento in un formato manifest aumentato per l'addestramento incrementale utilizzando l'algoritmo di rilevamento oggetti incorporato di Amazon SageMaker.

Per presentazioni video, quaderni di esempio Jupyter o ulteriori informazioni su casi d'uso come elaborazione di documenti, moderazione dei contenuti, analisi dei sentimenti, traduzione di testi e altro, vedere Amazon Risorse Aumentate AI.

Riferimenti

  • Everingham, Mark, et al. "La sfida delle classi di oggetti visivi pascal: una retrospettiva." Rivista internazionale di visione artificiale 111.1 (2015): 98-136.
  • Liu, Wei, et al. "SSD: rilevatore multibox single shot." Conferenza europea sulla visione artificiale. Springer, Cam, 2016.

Circa gli autori

Michael Hsieh è Senior AI / ML Specialist Solutions Architect. Lavora con i clienti per avanzare nel loro viaggio ML con una combinazione di offerte AWS ML e la sua conoscenza del dominio ML. Come trapianto di Seattle, adora esplorare la grande madre natura che la città ha da offrire, come i sentieri escursionistici, i paesaggi in kayak nello SLU e il tramonto nella Baia di Shilshole.

Anuj Gupta è Senior Product Manager per Amazon Augmented AI. Si concentra sulla fornitura di prodotti che semplificano l'adozione dell'apprendimento automatico da parte dei clienti. Nel suo tempo libero, ama i viaggi su strada e guardare la Formula 1.

Fonte: https://aws.amazon.com/blogs/machine-learning/object-detection-and-model-retraining-with-amazon-sagemaker-and-amazon-augmented-ai/

spot_img

L'ultima intelligenza

spot_img