Overfør læring for TensorFlow-objektdeteksjonsmodeller i Amazon SageMaker

Amazon SageMaker gir en suite av innebygde algoritmer, ferdig trente modellerog forhåndsbygde løsningsmaler for å hjelpe dataforskere og maskinlæringsutøvere (ML) med å komme raskt i gang med opplæring og distribusjon av ML-modeller. Du kan bruke disse algoritmene og modellene for både veiledet og uovervåket læring. De kan behandle ulike typer inndata, inkludert tabeller, bilder og tekst.

Dette innlegget er det andre i en serie om de nye innebygde algoritmene i SageMaker. I første innlegg, viste vi hvordan SageMaker gir en innebygd algoritme for bildeklassifisering. I dag kunngjør vi at SageMaker tilbyr en ny innebygd algoritme for objektdeteksjon ved hjelp av TensorFlow. Denne overvåkede læringsalgoritmen støtter overføringslæring for mange forhåndstrente modeller tilgjengelig i TensorFlow. Den tar et bilde som input og sender ut objektene som er tilstede i bildet sammen med avgrensningsboksene. Du kan finjustere disse forhåndstrente modellene ved å bruke overføringslæring selv når et stort antall treningsbilder ikke er tilgjengelig. Den er tilgjengelig gjennom SageMaker innebygde algoritmer så vel som gjennom SageMaker JumpStart UI in Amazon SageMaker Studio. For mer informasjon, se Objektdeteksjon Tensorflow og eksempelnotisboken Introduksjon til SageMaker Tensorflow – Objektdeteksjon.

Objektdeteksjon med TensorFlow i SageMaker gir overføringslæring på mange ferdigtrente modeller tilgjengelig i TensorFlow Hub. I henhold til antall klasseetiketter i treningsdataene, erstatter et nytt tilfeldig initialisert objektdeteksjonshode det eksisterende hodet til TensorFlow-modellen. Enten hele nettverket, inkludert den forhåndstrente modellen, eller bare det øverste laget (objektdeteksjonshodet) kan finjusteres på de nye treningsdataene. I denne overføringslæringsmodusen kan du oppnå trening selv med et mindre datasett.

Slik bruker du den nye TensorFlow-objektdeteksjonsalgoritmen

Denne delen beskriver hvordan du bruker TensorFlow-objektdeteksjonsalgoritmen med SageMaker Python SDK. For informasjon om hvordan du bruker det fra Studio UI, se SageMaker JumpStart.

Algoritmen støtter overføringslæring for de forhåndstrente modellene som er oppført i TensorFlow-modeller. Hver modell er identifisert med en unik model_id. Følgende kode viser hvordan du finjusterer en ResNet50 V1 FPN-modell identifisert av model_id tensorflow-od1-ssd-resnet50-v1-fpn-640x640-coco17-tpu-8 på et tilpasset opplæringsdatasett. For hver model_id, for å lansere en SageMaker-treningsjobb gjennom Estimator klasse av SageMaker Python SDK, må du hente Docker-bilde-URI, treningsskript-URI og forhåndstrent modell-URI gjennom verktøyfunksjonene i SageMaker. Treningsskriptets URI inneholder all nødvendig kode for databehandling, lasting av den forhåndstrente modellen, modelltrening og lagring av den trente modellen for slutning. Den forhåndstrente modellen URI inneholder den forhåndstrente modellarkitekturdefinisjonen og modellparametrene. Merk at Docker-bilde-URI og treningsskript-URI er de samme for alle TensorFlow-objektdeteksjonsmodellene. Den forhåndstrente modellen URI er spesifikk for den aktuelle modellen. De forhåndstrente modell-tarballene er forhåndslastet ned fra TensorFlow og lagret med passende modellsignatur i Amazon enkel lagringstjeneste (Amazon S3) bøtter, slik at treningsjobben kjører i nettverksisolasjon. 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 modellspesifikke treningsartefaktene kan du konstruere et objekt av 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,)

Deretter, for å overføre læring på det tilpassede datasettet ditt, må du kanskje endre standardverdiene til treningshyperparametrene, som er oppført i Hyperparametere. Du kan hente en Python-ordbok med disse hyperparametrene med standardverdiene ved å ringe hyperparameters.retrieve_default, oppdater dem etter behov, og send dem deretter til Estimator-klassen. Merk at standardverdiene til noen av hyperparametrene er forskjellige for forskjellige modeller. For store modeller er standard batchstørrelse mindre og train_only_top_layer hyperparameter er satt til True. Hyperparameteren train_only_top_layer definerer hvilke modellparametre som endres under finjusteringsprosessen. Hvis train_only_top_layer is True, parametre for klassifiseringslagene endres og resten av parametrene forblir konstante under finjusteringsprosessen. På den annen side, hvis train_only_top_layer is False, alle parametere til modellen er finjustert. 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 tilbyr PennFudanPed datasett som standard datasett for finjustering av modellene. Datasettet består av bilder av fotgjengere. Følgende kode gir standard treningsdatasett som er vert 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 slutt, for å lansere SageMaker-treningsjobben for finjustering av modellen, ring .fit på objektet for Estimator-klassen, mens du passerer S3-plasseringen til treningsdatasettet:

# 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 mer informasjon om hvordan du bruker den nye SageMaker TensorFlow-objektdeteksjonsalgoritmen for overføringslæring på et tilpasset datasett, distribuer den finjusterte modellen, kjør inferens på den distribuerte modellen og distribuer den forhåndstrente modellen som den er uten første finjustering på et tilpasset datasett, se følgende eksempelnotatbok: Introduksjon til SageMaker TensorFlow – Objektdeteksjon.

Inn-/utgangsgrensesnitt for TensorFlow-objektdeteksjonsalgoritmen

Du kan finjustere hver av de forhåndstrente modellene som er oppført i TensorFlow-modeller til et gitt datasett som omfatter bilder som tilhører et hvilket som helst antall klasser. Målet er å minimere prediksjonsfeil på inndataene. Modellen som returneres ved finjustering kan distribueres videre for slutninger. Følgende er instruksjonene for hvordan treningsdataene skal formateres for input til modellen:

  • Input – En katalog med underkatalogbilder og en fil annotations.json.
  • Produksjon – Det er to utganger. Først er en finjustert modell, som kan distribueres for slutning eller videreutdannes ved hjelp av inkrementell trening. Den andre er en fil som tilordner klasseindekser til klasseetiketter; dette lagres sammen med modellen.

Inndatakatalogen skal se ut som følgende eksempel:

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

De annotations.json filen skal ha informasjon for bounding_boxes og klasseetikettene deres. Den skal ha en ordbok med nøklene "images" og "annotations". Verdien for "images" nøkkelen skal være en liste over oppføringer, en for hvert bilde av skjemaet {"file_name": image_name, "height": height, "width": width, "id": image_id}. Verdien av "annotations" nøkkelen skal være en liste over oppføringer, en for hver avgrensningsramme i skjemaet {"image_id": image_id, "bbox": [xmin, ymin, xmax, ymax], "category_id": bbox_label}.

Inferens med TensorFlow-objektdeteksjonsalgoritmen

De genererte modellene kan være vert for inferens og støtte kodede .jpg-, .jpeg- og .png-bildeformater som application/x-image innholdstype. Inndatabildet endres automatisk. Utdataene inneholder boksene, predikerte klasser og poengsum for hver prediksjon. TensorFlow-objektdeteksjonsmodellen behandler et enkelt bilde per forespørsel og sender bare ut é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 satt til application/json, da gir modellen bare predikerte bokser, klasser og poeng. For mer informasjon om trening og slutninger, se eksempelnotisboken Introduksjon til SageMaker TensorFlow – Objektdeteksjon.

Bruk SageMaker innebygde algoritmer gjennom JumpStart UI

Du kan også bruke SageMaker TensorFlow-objektdeteksjon og hvilken som helst av de andre innebygde algoritmene med noen få klikk via JumpStart UI. JumpStart er en SageMaker-funksjon som lar deg trene og distribuere innebygde algoritmer og forhåndstrente modeller fra ulike ML-rammeverk og modellhuber gjennom et grafisk grensesnitt. Den lar deg også distribuere fullverdige ML-løsninger som setter sammen ML-modeller og forskjellige andre AWS-tjenester for å løse en målrettet brukssituasjon.

Følgende er to videoer som viser hvordan du kan replikere den samme finjusterings- og distribusjonsprosessen som vi nettopp gikk gjennom med noen få klikk via JumpStart UI.

Finjuster den ferdigtrente modellen

Her er prosessen for å finjustere den samme forhåndstrente objektdeteksjonsmodellen.

Distribuer den finjusterte modellen

Etter at modellopplæringen er fullført, kan du distribuere modellen direkte til et vedvarende endepunkt i sanntid med ett klikk.

konklusjonen

I dette innlegget kunngjorde vi lanseringen av SageMaker TensorFlow objektdeteksjon innebygde algoritme. Vi ga eksempelkode på hvordan du utfører overføringslæring på et tilpasset datasett ved å bruke en forhåndstrent modell fra TensorFlow ved å bruke denne algoritmen.

For mer informasjon, sjekk ut dokumentasjon og eksempel notisbok.


Om forfatterne

Overfør læring for TensorFlow-objektdeteksjonsmodeller i Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Dr. Vivek Madan er en anvendt vitenskapsmann med Amazon SageMaker JumpStart-teamet. Han fikk sin doktorgrad fra University of Illinois i Urbana-Champaign og var postdoktor ved Georgia Tech. Han er en aktiv forsker innen maskinlæring og algoritmedesign og har publisert artikler på EMNLP-, ICLR-, COLT-, FOCS- og SODA-konferanser.

Overfør læring for TensorFlow-objektdeteksjonsmodeller i Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.João Moura er en AI/ML-spesialistløsningsarkitekt hos Amazon Web Services. Han er mest fokusert på NLP-brukstilfeller og å hjelpe kunder med å optimalisere opplæring og implementering av dyplæringsmodeller. Han er også en aktiv talsmann for lavkode ML-løsninger og ML-spesialisert maskinvare.

Overfør læring for TensorFlow-objektdeteksjonsmodeller i Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Dr. Ashish Khetan er Senior Applied Scientist med Amazon SageMaker innebygde algoritmer og hjelper til med å utvikle maskinlæringsalgoritmer. Han fikk sin doktorgrad fra University of Illinois Urbana Champaign. Han er en aktiv forsker innen maskinlæring og statistisk inferens og har publisert mange artikler i NeurIPS, ICML, ICLR, JMLR, ACL og EMNLP-konferanser.

Tidstempel:

Mer fra AWS maskinlæring