Överför inlärning för TensorFlow-objektdetekteringsmodeller i Amazon SageMaker

Amazon SageMaker ger en svit av inbyggda algoritmer, förutbildade modelleroch färdigbyggda lösningsmallar för att hjälpa datavetare och utövare av maskininlärning (ML) komma igång med utbildning och implementering av ML-modeller snabbt. Du kan använda dessa algoritmer och modeller för både övervakat och oövervakat lärande. De kan bearbeta olika typer av indata, inklusive tabell, bild och text.

Det här inlägget är det andra i serien om de nya inbyggda algoritmerna i SageMaker. I den första inlägget, visade vi hur SageMaker tillhandahåller en inbyggd algoritm för bildklassificering. Idag tillkännager vi att SageMaker tillhandahåller en ny inbyggd algoritm för objektdetektering med TensorFlow. Denna övervakade inlärningsalgoritm stöder överföringsinlärning för många förtränade modeller tillgängliga i TensorFlow. Den tar en bild som indata och matar ut objekten som finns i bilden tillsammans med begränsningsrutorna. Du kan finjustera dessa förtränade modeller med hjälp av överföringsinlärning även när ett stort antal träningsbilder inte är tillgängliga. Det är tillgängligt via SageMaker inbyggda algoritmer såväl som genom SageMaker JumpStart UI in Amazon SageMaker Studio. För mer information, se Objektdetektering Tensorflöde och exempelanteckningsboken Introduktion till SageMaker Tensorflow – Objektdetektion.

Objektdetektering med TensorFlow i SageMaker ger överföringsinlärning på många förtränade modeller tillgängliga i TensorFlow Hub. Enligt antalet klassetiketter i träningsdatan ersätter ett nytt slumpmässigt initierat objektdetektionshuvud det befintliga huvudet för TensorFlow-modellen. Antingen kan hela nätverket, inklusive den förtränade modellen, eller bara det översta lagret (objektdetektionshuvud) finjusteras på den nya träningsdatan. I detta överföringsinlärningsläge kan du uppnå träning även med en mindre datauppsättning.

Hur man använder den nya TensorFlow-objektdetekteringsalgoritmen

Det här avsnittet beskriver hur du använder TensorFlow-objektdetekteringsalgoritmen med SageMaker Python SDK. För information om hur du använder det från Studio UI, se SageMaker JumpStart.

Algoritmen stöder överföringsinlärning för de förtränade modellerna som anges i TensorFlow-modeller. Varje modell identifieras av en unik model_id. Följande kod visar hur man finjusterar en ResNet50 V1 FPN-modell identifierad av model_id tensorflow-od1-ssd-resnet50-v1-fpn-640x640-coco17-tpu-8 på en anpassad träningsdatauppsättning. För varje model_id, för att lansera ett SageMaker-utbildningsjobb genom Uppskattare klass av SageMaker Python SDK måste du hämta Docker-bild-URI, träningsskript-URI och förtränad modell-URI genom verktygsfunktionerna i SageMaker. Utbildningsskriptets URI innehåller all nödvändig kod för databehandling, laddning av den förtränade modellen, modellträning och lagring av den tränade modellen för slutledning. Den förtränade modellens URI innehåller den förtränade modellarkitekturens definition och modellparametrarna. Observera att Docker-bild-URI och träningsskript-URI är samma för alla TensorFlow-objektdetekteringsmodeller. Den förtränade modellens URI är specifik för den specifika modellen. De förtränade modellens tarballs har förnedladdats från TensorFlow och sparats med lämplig modellsignatur i Amazon enkel lagringstjänst (Amazon S3) hinkar, så att träningsjobbet körs i nätverksisolering. Se följande kod:

from sagemaker import image_uris, model_uris, script_urisfrom sagemaker.estimator import Estimator

model_id, model_version = "tensorflow-od1-ssd-resnet50-v1-fpn-640x640-coco17-tpu-8", "*"
training_instance_type = "ml.p3.2xlarge"
# Retrieve the docker image
train_image_uri = image_uris.retrieve(model_id=model_id,model_version=model_version,image_scope="training",instance_type=training_instance_type,region=None,framework=None)# Retrieve the training script
train_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="training")# Retrieve the pre-trained model tarball for transfer learning
train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

output_bucket = sess.default_bucket()
output_prefix = "jumpstart-example-tensorflow-od-training"
s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"

Med dessa modellspecifika träningsartefakter kan du konstruera ett objekt av Uppskattare klass:

# Create SageMaker Estimator instance
tf_od_estimator = Estimator(
    role=aws_role,
    image_uri=train_image_uri,
    source_dir=train_source_uri,
    model_uri=train_model_uri,
    entry_point="transfer_learning.py",
    instance_count=1,
    instance_type=training_instance_type,
    max_run=360000,
    hyperparameters=hyperparameters,
    output_path=s3_output_location,)

Därefter, för att överföra inlärning på din anpassade datauppsättning, kan du behöva ändra standardvärdena för träningshyperparametrarna, som listas i Hyperparametrar. Du kan hämta en Python-ordlista med dessa hyperparametrar med deras standardvärden genom att anropa hyperparameters.retrieve_default, uppdatera dem vid behov och skicka dem sedan till klassen Estimator. Observera att standardvärdena för vissa av hyperparametrarna är olika för olika modeller. För stora modeller är standardbatchstorleken mindre och train_only_top_layer hyperparameter är inställd på True. Hyperparametern train_only_top_layer definierar vilka modellparametrar som ändras under finjusteringsprocessen. Om train_only_top_layer is True, ändras parametrarna för klassificeringsskikten och resten av parametrarna förblir konstanta under finjusteringsprocessen. Å andra sidan, om train_only_top_layer is False, alla parametrar i modellen är finjusterade. Se följande kod:

from sagemaker import hyperparameters# Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(model_id=model_id, model_version=model_version)# [Optional] Override default hyperparameters with custom values
hyperparameters["epochs"] = "5"

Vi tillhandahåller PennFudanPed dataset som en standarddatauppsättning för finjustering av modellerna. Datauppsättningen består av bilder av fotgängare. Följande kod tillhandahåller standardutbildningsdataset som är värd i S3-hinkar:

# Sample training data is available in this bucket
training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
training_data_prefix = "training-datasets/PennFudanPed_COCO_format/"

training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}"

Slutligen, för att lansera SageMaker-utbildningsjobbet för att finjustera modellen, ring .fit på objektet för Estimator-klassen, samtidigt som du passerar S3-platsen för träningsdatauppsättningen:

# Launch a SageMaker Training job by passing s3 path of the training data
tf_od_estimator.fit({"training": training_dataset_s3_path}, logs=True)

För mer information om hur du använder den nya SageMaker TensorFlow-objektdetekteringsalgoritmen för överföringsinlärning på en anpassad datauppsättning, distribuera den finjusterade modellen, kör inferens på den distribuerade modellen och distribuera den förtränade modellen som den är utan att först finjustera på en anpassad datauppsättning, se följande exempel på anteckningsboken: Introduktion till SageMaker TensorFlow – Objektdetektion.

Input/output-gränssnitt för TensorFlow-objektdetekteringsalgoritmen

Du kan finjustera var och en av de förtränade modellerna som listas i TensorFlow-modeller till varje given datauppsättning som består av bilder som tillhör valfritt antal klasser. Målet är att minimera prediktionsfel på indata. Modellen som returneras genom finjustering kan vidareutvecklas för slutledning. Följande är instruktionerna för hur träningsdata ska formateras för inmatning till modellen:

  • Ingång – En katalog med underkatalogbilder och en fil annotations.json.
  • Produktion – Det finns två utgångar. Först är en finjusterad modell, som kan användas för slutledning eller vidareutbildas med hjälp av inkrementell träning. Den andra är en fil som mappar klassindex till klassetiketter; detta sparas tillsammans med modellen.

Inmatningskatalogen ska se ut som följande exempel:

input_directory
      | -- images
            |--abc.png
            |--def.png
      |--annotations.json

Smakämnen annotations.json filen ska ha information om bounding_boxes och deras klassetiketter. Den ska ha en ordbok med nycklarna "images" och "annotations". Värdet för "images" nyckeln ska vara en lista med poster, en för varje bild av formuläret {"file_name": image_name, "height": height, "width": width, "id": image_id}. Värdet på "annotations" nyckeln ska vara en lista med poster, en för varje avgränsande ruta i formuläret {"image_id": image_id, "bbox": [xmin, ymin, xmax, ymax], "category_id": bbox_label}.

Slutledning med TensorFlow-objektdetekteringsalgoritmen

De genererade modellerna kan vara värd för slutledning och stödja kodade .jpg-, .jpeg- och .png-bildformat som application/x-image innehållstyp. Storleken på inmatningsbilden ändras automatiskt. Utdatan innehåller rutorna, förutspådda klasser och poäng för varje förutsägelse. TensorFlow-objektdetekteringsmodellen bearbetar en enda bild per begäran och matar bara ut en rad i JSON. Följande är ett exempel på ett svar i JSON:

accept: application/json;verbose

{"normalized_boxes":[[xmin1, xmax1, ymin1, ymax1],....], "classes":[classidx1, class_idx2,...], "scores":[score_1, score_2,...], "labels": [label1, label2, ...], "tensorflow_model_output":}

If accept är inställd på application/json, då matar modellen bara ut predikterade rutor, klasser och poäng. För mer information om träning och slutledning, se exempelanteckningsboken Introduktion till SageMaker TensorFlow – Objektdetektion.

Använd SageMaker inbyggda algoritmer genom JumpStart UI

Du kan också använda SageMaker TensorFlow-objektdetektering och någon av de andra inbyggda algoritmerna med några få klick via JumpStart UI. JumpStart är en SageMaker-funktion som låter dig träna och distribuera inbyggda algoritmer och förtränade modeller från olika ML-ramverk och modellhubbar genom ett grafiskt gränssnitt. Det låter dig också distribuera fullfjädrade ML-lösningar som sammanfogar ML-modeller och olika andra AWS-tjänster för att lösa ett målinriktat användningsfall.

Nedan följer två videor som visar hur du kan replikera samma finjusterings- och distributionsprocess som vi just gick igenom med några få klick via JumpStart UI.

Finjustera den förtränade modellen

Här är processen för att finjustera samma förtränade objektdetekteringsmodell.

Installera den finjusterade modellen

När modellutbildningen är klar kan du distribuera modellen direkt till en beständig, realtidsslutpunkt med ett klick.

Slutsats

I det här inlägget tillkännagav vi lanseringen av SageMaker TensorFlow-objektdetekteringsalgoritmen. Vi gav exempelkod om hur man gör överföringsinlärning på en anpassad datauppsättning med hjälp av en förtränad modell från TensorFlow med denna algoritm.

För mer information, kolla in dokumentation och exempel anteckningsbok.


Om författarna

Överför inlärning för TensorFlow-objektdetekteringsmodeller i Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Dr. Vivek Madan är en tillämpad vetenskapsman med Amazon SageMaker JumpStart-team. Han tog sin doktorsexamen från University of Illinois i Urbana-Champaign och var postdoktor vid Georgia Tech. Han är en aktiv forskare inom maskininlärning och algoritmdesign och har publicerat artiklar på EMNLP-, ICLR-, COLT-, FOCS- och SODA-konferenser.

Överför inlärning för TensorFlow-objektdetekteringsmodeller i Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.João Moura är en AI/ML Specialist Solutions Architect på Amazon Web Services. Han är mestadels fokuserad på NLP-användningsfall och att hjälpa kunder att optimera utbildning och implementering av djupinlärningsmodeller. Han är också en aktiv förespråkare för ML-lösningar med låg kod och ML-specialiserad hårdvara.

Överför inlärning för TensorFlow-objektdetekteringsmodeller i Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Dr Ashish Khetan är senior tillämpad forskare med Amazon SageMaker inbyggda algoritmer och hjälper till att utveckla maskininlärningsalgoritmer. Han tog sin doktorsexamen från University of Illinois Urbana Champaign. Han är en aktiv forskare inom maskininlärning och statistisk slutledning och har publicerat många artiklar i NeurIPS, ICML, ICLR, JMLR, ACL och EMNLP-konferenser.

Tidsstämpel:

Mer från AWS maskininlärning