Overfør læring til TensorFlow objektdetektionsmodeller i Amazon SageMaker

Amazon SageMaker giver en suite af indbyggede algoritmer, fortrænede modellerog forudbyggede løsningsskabeloner at hjælpe dataforskere og maskinlæringsudøvere (ML) med at komme i gang med at træne og implementere ML-modeller hurtigt. Du kan bruge disse algoritmer og modeller til både superviseret og uovervåget læring. De kan behandle forskellige typer inputdata, herunder tabel, billede og tekst.

Dette indlæg er det andet i en serie om de nye indbyggede algoritmer i SageMaker. I den første indlæg, viste vi, hvordan SageMaker leverer en indbygget algoritme til billedklassificering. I dag annoncerer vi, at SageMaker leverer en ny indbygget algoritme til objektdetektering ved hjælp af TensorFlow. Denne overvågede læringsalgoritme understøtter overførselslæring for mange fortrænede modeller, der er tilgængelige i TensorFlow. Det tager et billede som input og udlæser objekterne i billedet sammen med afgrænsningsfelterne. Du kan finjustere disse fortrænede modeller ved hjælp af transfer learning, selv når et stort antal træningsbilleder ikke er tilgængelige. Det er tilgængeligt gennem SageMaker indbyggede algoritmer såvel som gennem SageMaker JumpStart UI in Amazon SageMaker Studio. For mere information, se Objektdetektion Tensorflow og eksemplet på notesbogen Introduktion til SageMaker Tensorflow – Objektdetektion.

Objektdetektion med TensorFlow i SageMaker giver overførselslæring på mange fortrænede modeller, der er tilgængelige i TensorFlow Hub. Ifølge antallet af klassemærker i træningsdataene erstatter et nyt tilfældigt initialiseret objektdetektionshoved det eksisterende hoved på TensorFlow-modellen. Enten hele netværket, inklusive den præ-trænede model, eller kun det øverste lag (objektdetektionshoved) kan finjusteres på de nye træningsdata. I denne overførselsindlæringstilstand kan du opnå træning selv med et mindre datasæt.

Sådan bruger du den nye TensorFlow-objektdetektionsalgoritme

Dette afsnit beskriver, hvordan du bruger TensorFlow-objektdetektionsalgoritmen med SageMaker Python SDK. For information om, hvordan du bruger det fra Studio UI, se SageMaker JumpStart.

Algoritmen understøtter overførselslæring for de fortrænede modeller, der er anført i TensorFlow modeller. Hver model er identificeret med en unik model_id. Følgende kode viser, hvordan man finjusterer en ResNet50 V1 FPN-model identificeret af model_id tensorflow-od1-ssd-resnet50-v1-fpn-640x640-coco17-tpu-8 på et tilpasset træningsdatasæt. For hver model_id, for at lancere et SageMaker-uddannelsesjob gennem Estimator klasse af SageMaker Python SDK, skal du hente Docker-image-URI, træningsscript-URI og forudtrænede model-URI gennem hjælpefunktionerne i SageMaker. Træningsscriptets URI indeholder al den nødvendige kode til databehandling, indlæsning af den præ-trænede model, modeltræning og lagring af den trænede model til slutning. Den præ-trænede model-URI indeholder den præ-trænede modelarkitekturdefinition og modelparametrene. Bemærk, at Docker-image-URI og træningsscript-URI er de samme for alle TensorFlow-objektdetektionsmodellerne. Den fortrænede model-URI er specifik for den pågældende model. De fortrænede model tarballs er blevet forhåndsdownloadet fra TensorFlow og gemt med den passende modelsignatur i Amazon Simple Storage Service (Amazon S3) buckets, sådan at træningsjobbet kører i netværksisolation. Se følgende kode:

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 disse modelspecifikke træningsartefakter kan du konstruere et objekt af Estimator 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,)

Dernæst, for at overføre læring på dit brugerdefinerede datasæt, skal du muligvis ændre standardværdierne for træningshyperparametrene, som er angivet i Hyperparametre. Du kan hente en Python-ordbog over disse hyperparametre med deres standardværdier ved at kalde hyperparameters.retrieve_default, opdater dem efter behov, og send dem derefter til Estimator-klassen. Bemærk, at standardværdierne for nogle af hyperparametrene er forskellige for forskellige modeller. For store modeller er standard batchstørrelsen mindre og train_only_top_layer hyperparameter er sat til True. Hyperparameteren train_only_top_layer definerer, hvilke modelparametre, der ændres under finjusteringsprocessen. Hvis train_only_top_layer is Trueparametrene for klassifikationslagene ændres, og resten af ​​parametrene forbliver konstante under finjusteringsprocessen. På den anden side, hvis train_only_top_layer is False, alle parametre i modellen er finjusteret. Se følgende kode:

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 leverer PennFudanPed datasæt som standarddatasæt til finjustering af modellerne. Datasættet består af billeder af fodgængere. Følgende kode giver standardtræningsdatasættet hostet i S3-bøtter:

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

Til sidst, for at lancere SageMaker træningsjobbet til finjustering af modellen, ring .fit på genstanden for Estimator-klassen, mens du passerer S3-placeringen af ​​træningsdatasættet:

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

For mere information om, hvordan du bruger den nye SageMaker TensorFlow objektdetektionsalgoritme til overførsel af læring på et brugerdefineret datasæt, implementer den finjusterede model, kør inferens på den implementerede model og implementer den forudtrænede model, som den er, uden først at finjustere på et brugerdefineret datasæt, se følgende eksempel på notesbog: Introduktion til SageMaker TensorFlow – Objektdetektion.

Input/output-interface til TensorFlow-objektdetektionsalgoritmen

Du kan finjustere hver af de fortrænede modeller, der er anført i TensorFlow-modeller til ethvert givet datasæt, der omfatter billeder, der tilhører et vilkårligt antal klasser. Målet er at minimere forudsigelsesfejl på inputdata. Den model, der returneres ved finjustering, kan videreudvikles til slutninger. Følgende er instruktionerne for, hvordan træningsdataene skal formateres til input til modellen:

  • Input – En mappe med undermappebilleder og en fil annotations.json.
  • Produktion – Der er to udgange. Først er en finjusteret model, som kan implementeres til slutninger eller videreuddannes ved hjælp af inkrementel træning. For det andet er en fil, som kortlægger klasseindekser til klasseetiketter; dette gemmes sammen med modellen.

Indtastningsmappen skal se ud som følgende eksempel:

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

annotations.json filen skal have oplysninger om bounding_boxes og deres klassebetegnelser. Den skal have en ordbog med tasterne "images" , "annotations". Værdien for "images" nøglen skal være en liste over poster, en for hvert billede af formularen {"file_name": image_name, "height": height, "width": width, "id": image_id}. Værdien af "annotations" nøglen skal være en liste over poster, en for hver afgrænsningsramme i formularen {"image_id": image_id, "bbox": [xmin, ymin, xmax, ymax], "category_id": bbox_label}.

Inferens med TensorFlow-objektdetektionsalgoritmen

De genererede modeller kan hostes til inferens og understøtter kodede .jpg, .jpeg og .png billedformater som application/x-image indholdstype. Størrelsen på inputbilledet ændres automatisk. Outputtet indeholder boksene, forudsagte klasser og score for hver forudsigelse. TensorFlow-objektdetektionsmodellen behandler et enkelt billede pr. anmodning og udsender kun én linje i JSON. Følgende er et eksempel på et 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 er sat til application/json, så udsender modellen kun forudsagte bokse, klasser og score. For flere detaljer om træning og slutninger, se eksempelnotesbogen Introduktion til SageMaker TensorFlow – Objektdetektion.

Brug SageMaker indbyggede algoritmer gennem JumpStart UI

Du kan også bruge SageMaker TensorFlow objektdetektion og enhver af de andre indbyggede algoritmer med et par klik via JumpStart UI. JumpStart er en SageMaker-funktion, der giver dig mulighed for at træne og implementere indbyggede algoritmer og fortrænede modeller fra forskellige ML-frameworks og modelhubs gennem en grafisk grænseflade. Det giver dig også mulighed for at implementere fuldt udbyggede ML-løsninger, der samler ML-modeller og forskellige andre AWS-tjenester for at løse en målrettet use case.

Følgende er to videoer, der viser, hvordan du kan replikere den samme finjusterings- og implementeringsproces, som vi lige har gennemgået med et par klik via JumpStart UI.

Finjuster den fortrænede model

Her er processen til at finjustere den samme præ-trænede objektdetekteringsmodel.

Implementer den finjusterede model

Når modeltræningen er færdig, kan du implementere modellen direkte til et vedvarende, real-time slutpunkt med et enkelt klik.

Konklusion

I dette indlæg annoncerede vi lanceringen af ​​SageMaker TensorFlow objektdetektions indbyggede algoritme. Vi leverede eksempelkode på, hvordan man udfører overførselslæring på et brugerdefineret datasæt ved hjælp af en forudtrænet model fra TensorFlow ved hjælp af denne algoritme.

For mere information, tjek dokumentation og eksempel notesbog.


Om forfatterne

Transfer learning for TensorFlow object detection models in Amazon SageMaker PlatoBlockchain Data Intelligence. Vertical Search. Ai.Dr. Vivek Madan er en anvendt videnskabsmand med Amazon SageMaker JumpStart team. Han fik sin ph.d. fra University of Illinois i Urbana-Champaign og var postdoktor ved Georgia Tech. Han er en aktiv forsker i maskinlæring og algoritmedesign og har publiceret artikler i EMNLP, ICLR, COLT, FOCS og SODA konferencer.

Transfer learning for TensorFlow object detection models in Amazon SageMaker PlatoBlockchain Data Intelligence. Vertical Search. Ai.João Moura er AI/ML Specialist Solutions Architect hos Amazon Web Services. Han er for det meste fokuseret på NLP-brugscases og hjælper kunder med at optimere træning og implementering af deep learning-modeller. Han er også en aktiv fortaler for lavkode ML-løsninger og ML-specialiseret hardware.

Transfer learning for TensorFlow object detection models in Amazon SageMaker PlatoBlockchain Data Intelligence. Vertical Search. Ai.Dr. Ashish Khetan er Senior Applied Scientist med Amazon SageMaker indbyggede algoritmer og hjælper med at udvikle maskinlæringsalgoritmer. Han fik sin ph.d. fra University of Illinois Urbana Champaign. Han er en aktiv forsker i maskinlæring og statistisk inferens og har publiceret mange artikler i NeurIPS, ICML, ICLR, JMLR, ACL og EMNLP konferencer.

Tidsstempel:

Mere fra AWS maskinindlæring