Leren overdragen voor TensorFlow-objectdetectiemodellen in Amazon SageMaker

Amazon Sage Maker biedt een suite van ingebouwde algoritmen, voorgetrainde modellen en vooraf gebouwde oplossingssjablonen om datawetenschappers en machine learning (ML)-beoefenaars te helpen snel aan de slag te gaan met het trainen en implementeren van ML-modellen. U kunt deze algoritmen en modellen gebruiken voor zowel begeleid als niet-gesuperviseerd leren. Ze kunnen verschillende soorten invoergegevens verwerken, waaronder tabellen, afbeeldingen en tekst.

Dit bericht is het tweede in een serie over de nieuwe ingebouwde algoritmen in SageMaker. In de eerste bericht, hebben we laten zien hoe SageMaker een ingebouwd algoritme biedt voor beeldclassificatie. Vandaag kondigen we aan dat SageMaker een nieuw ingebouwd algoritme biedt voor objectdetectie met TensorFlow. Dit begeleide leeralgoritme ondersteunt transfer learning voor veel vooraf getrainde modellen die beschikbaar zijn in TensorFlow. Het neemt een afbeelding als invoer en voert de objecten uit die in de afbeelding aanwezig zijn, samen met de selectiekaders. U kunt deze vooraf getrainde modellen verfijnen met behulp van transfer learning, zelfs als er geen groot aantal trainingsafbeeldingen beschikbaar zijn. Het is beschikbaar via de SageMaker ingebouwde algoritmen evenals via de SageMaker JumpStart-gebruikersinterface in Amazon SageMaker Studio. Voor meer informatie, zie: Objectdetectie Tensorflow en het voorbeeldnotitieboekje Inleiding tot SageMaker Tensorflow - Objectdetectie.

Objectdetectie met TensorFlow in SageMaker biedt transfer learning op veel vooraf getrainde modellen die beschikbaar zijn in TensorFlow Hub. Volgens het aantal klasselabels in de trainingsgegevens vervangt een nieuwe willekeurig geïnitialiseerde objectdetectiekop de bestaande kop van het TensorFlow-model. Ofwel het hele netwerk, inclusief het voorgetrainde model, ofwel alleen de bovenste laag (objectdetectiekop) kan op de nieuwe trainingsdata worden afgesteld. In deze transfer learning-modus kun je zelfs met een kleinere dataset trainen.

Hoe het nieuwe TensorFlow-objectdetectiealgoritme te gebruiken?

In dit gedeelte wordt beschreven hoe u het TensorFlow-objectdetectie-algoritme gebruikt met de SageMaker Python-SDK. Voor informatie over het gebruik ervan vanuit de Studio UI, zie SageMaker JumpStart.

Het algoritme ondersteunt transfer learning voor de vooraf getrainde modellen die worden vermeld in TensorFlow-modellen. Elk model wordt geïdentificeerd door een unieke model_id. De volgende code laat zien hoe u een ResNet50 V1 FPN-model kunt verfijnen dat wordt geïdentificeerd door: model_id tensorflow-od1-ssd-resnet50-v1-fpn-640x640-coco17-tpu-8 op een aangepaste trainingsdataset. voor elk model_id, om een ​​SageMaker-trainingstaak te starten via de Taxateur klasse van de SageMaker Python SDK, moet u de Docker-image-URI, de trainingsscript-URI en de vooraf getrainde model-URI ophalen via de hulpprogrammafuncties in SageMaker. De URI van het trainingsscript bevat alle benodigde code voor gegevensverwerking, het laden van het vooraf getrainde model, modeltraining en het opslaan van het getrainde model voor gevolgtrekking. De vooraf getrainde model-URI bevat de vooraf getrainde modelarchitectuurdefinitie en de modelparameters. Houd er rekening mee dat de Docker-afbeeldings-URI en de trainingsscript-URI hetzelfde zijn voor alle TensorFlow-objectdetectiemodellen. De vooraf getrainde model-URI is specifiek voor het specifieke model. De vooraf getrainde model-tarballs zijn vooraf gedownload van TensorFlow en opgeslagen met de juiste modelhandtekening in Amazon eenvoudige opslagservice (Amazon S3) buckets, zodat de trainingstaak in netwerkisolatie wordt uitgevoerd. Zie de volgende code:

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"

Met deze modelspecifieke trainingsartefacten kunt u een object van de Taxateur klasse:

# 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,)

Vervolgens moet u voor het overdragen van leren op uw aangepaste dataset mogelijk de standaardwaarden van de trainingshyperparameters wijzigen, die worden vermeld in Hyperparameters. U kunt een Python-woordenboek van deze hyperparameters met hun standaardwaarden ophalen door aan te roepen hyperparameters.retrieve_default, werk ze indien nodig bij en geef ze vervolgens door aan de klasse Estimator. Merk op dat de standaardwaarden van sommige hyperparameters voor verschillende modellen verschillend zijn. Voor grote modellen is de standaard batchgrootte kleiner en de train_only_top_layer hyperparameter is ingesteld op True. De hyperparameter train_only_top_layer bepaalt welke modelparameters veranderen tijdens het finetuningproces. Als train_only_top_layer is True, parameters van de classificatielagen veranderen en de rest van de parameters blijven constant tijdens het fine-tuningproces. Aan de andere kant, als train_only_top_layer is False, worden alle parameters van het model verfijnd. Zie de volgende code:

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"

Wij bieden de PennFudanPed-gegevensset als een standaard dataset voor het verfijnen van de modellen. De dataset bestaat uit afbeeldingen van voetgangers. De volgende code biedt de standaard trainingsgegevensset die wordt gehost in S3-buckets:

# 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}"

Tot slot, om de SageMaker-trainingstaak te starten voor het verfijnen van het model, bel .fit op het object van de Estimator-klasse, terwijl de S3-locatie van de trainingsgegevensset wordt gepasseerd:

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

Voor meer informatie over het gebruik van het nieuwe SageMaker TensorFlow-objectdetectiealgoritme voor transfer learning op een aangepaste dataset, implementeert u het verfijnde model, voert u inferentie uit op het geïmplementeerde model en implementeert u het vooraf getrainde model zoals het is zonder eerst te finetunen Zie het volgende voorbeeldnotitieblok voor een aangepaste gegevensset: Inleiding tot SageMaker TensorFlow - Objectdetectie.

Invoer-/uitvoerinterface voor het TensorFlow-objectdetectiealgoritme

U kunt elk van de vooraf getrainde modellen verfijnen die worden vermeld in TensorFlow-modellen aan een gegeven dataset bestaande uit afbeeldingen die tot een willekeurig aantal klassen behoren. Het doel is om de voorspellingsfout op de invoergegevens te minimaliseren. Het model dat door fine-tuning wordt geretourneerd, kan verder worden ingezet voor gevolgtrekking. Hieronder volgen de instructies voor hoe de trainingsgegevens moeten worden opgemaakt voor invoer in het model:

  • Invoer – Een map met afbeeldingen in de submap en een bestand annotations.json.
  • uitgang – Er zijn twee uitgangen. De eerste is een verfijnd model, dat kan worden ingezet voor inferentie of verder kan worden getraind met behulp van incrementele training. Ten tweede is er een bestand dat klasse-indexen toewijst aan klasselabels; dit wordt samen met het model opgeslagen.

De invoermap moet er als volgt uitzien:

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

De annotations.json bestand moet informatie bevatten voor bounding_boxes en hun klassenlabels. Het zou een woordenboek met de toetsen moeten hebben "images" en "annotations". De waarde voor de "images" sleutel moet een lijst met items zijn, één voor elke afbeelding van het formulier {"file_name": image_name, "height": height, "width": width, "id": image_id}. De waarde van de "annotations" sleutel moet een lijst met items zijn, één voor elk selectiekader van het formulier {"image_id": image_id, "bbox": [xmin, ymin, xmax, ymax], "category_id": bbox_label}.

Inferentie met het TensorFlow-objectdetectiealgoritme

De gegenereerde modellen kunnen worden gehost voor inferentie en ondersteunen gecodeerde .jpg-, .jpeg- en .png-afbeeldingsformaten als de application/x-image inhoudstype. Het formaat van de invoerafbeelding wordt automatisch aangepast. De uitvoer bevat de vakken, voorspelde klassen en scores voor elke voorspelling. Het TensorFlow-objectdetectiemodel verwerkt één afbeelding per aanvraag en voert slechts één regel uit in de JSON. Het volgende is een voorbeeld van een reactie in 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 is ingesteld op application/json, dan voert het model alleen voorspelde dozen, klassen en scores uit. Voor meer details over training en inferentie, zie het voorbeeldnotitieblok Inleiding tot SageMaker TensorFlow - Objectdetectie.

Gebruik de ingebouwde algoritmen van SageMaker via de JumpStart-gebruikersinterface

U kunt ook SageMaker TensorFlow-objectdetectie en een van de andere ingebouwde algoritmen gebruiken met een paar klikken via de JumpStart-gebruikersinterface. JumpStart is een SageMaker-functie waarmee u ingebouwde algoritmen en vooraf getrainde modellen uit verschillende ML-frameworks en modelhubs kunt trainen en implementeren via een grafische interface. Het stelt u ook in staat om volwaardige ML-oplossingen te implementeren die ML-modellen en verschillende andere AWS-services aan elkaar rijgen om een ​​gerichte use case op te lossen.

Hieronder volgen twee video's die laten zien hoe u hetzelfde fine-tuning- en implementatieproces kunt repliceren dat we zojuist hebben doorlopen met een paar klikken via de JumpStart-gebruikersinterface.

Verfijn het voorgetrainde model

Hier is het proces om hetzelfde vooraf getrainde objectdetectiemodel te verfijnen.

Het verfijnde model implementeren

Nadat de modeltraining is voltooid, kunt u het model met één klik direct implementeren op een permanent, realtime eindpunt.

Conclusie

In dit bericht hebben we de lancering aangekondigd van het ingebouwde algoritme voor SageMaker TensorFlow-objectdetectie. We hebben voorbeeldcode gegeven over hoe u transfer learning kunt toepassen op een aangepaste dataset met behulp van een vooraf getraind model van TensorFlow met behulp van dit algoritme.

Voor meer informatie, check out documentatie en voorbeeld notebook.


Over de auteurs

Breng het leren voor TensorFlow-objectdetectiemodellen over in Amazon SageMaker PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.Dr Vivek Madan is een Applied Scientist met de Amazon SageMaker JumpStart-team. Hij promoveerde aan de Universiteit van Illinois in Urbana-Champaign en was een postdoctoraal onderzoeker bij Georgia Tech. Hij is een actief onderzoeker op het gebied van machine learning en algoritmeontwerp en heeft artikelen gepubliceerd op EMNLP-, ICLR-, COLT-, FOCS- en SODA-conferenties.

Breng het leren voor TensorFlow-objectdetectiemodellen over in Amazon SageMaker PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.Joao Moura is een AI/ML Specialist Solutions Architect bij Amazon Web Services. Hij is vooral gericht op NLP-gebruiksscenario's en helpt klanten bij het optimaliseren van training en implementatie van deep learning-modellen. Hij is ook een actief voorstander van low-code ML-oplossingen en ML-gespecialiseerde hardware.

Breng het leren voor TensorFlow-objectdetectiemodellen over in Amazon SageMaker PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.Dr Ashish Khetan is een Senior Applied Scientist met Ingebouwde algoritmen van Amazon SageMaker en helpt bij het ontwikkelen van algoritmen voor machine learning. Hij promoveerde aan de University of Illinois Urbana Champaign. Hij is een actief onderzoeker op het gebied van machine learning en statistische inferentie en heeft veel artikelen gepubliceerd op NeurIPS-, ICML-, ICLR-, JMLR-, ACL- en EMNLP-conferenties.

Tijdstempel:

Meer van AWS-machine learning