Transfer uczenia się dla modeli klasyfikacji obrazów TensorFlow w Amazon SageMaker

Amazon Sage Maker zapewnia pakiet wbudowane algorytmy, wstępnie wytrenowane modele, gotowe szablony rozwiązań aby pomóc naukowcom zajmującym się danymi i praktykom uczenia maszynowego (ML) rozpocząć szybkie szkolenie i wdrażanie modeli ML. Możesz używać tych algorytmów i modeli zarówno do uczenia nadzorowanego, jak i nienadzorowanego. Mogą przetwarzać różne typy danych wejściowych, w tym tabelaryczne, graficzne i tekstowe.

Od dzisiaj SageMaker udostępnia nowy wbudowany algorytm klasyfikacji obrazów: Klasyfikacja obrazów – TensorFlow. Jest to nadzorowany algorytm uczenia, który obsługuje uczenie transferu dla wielu wstępnie wytrenowanych modeli dostępnych w Centrum TensorFlow. Pobiera obraz jako prawdopodobieństwo wejścia i wyjścia dla każdej z etykiet klasy. Te wstępnie wytrenowane modele można dostroić za pomocą uczenia transferu, nawet jeśli nie jest dostępna duża liczba obrazów szkoleniowych. Jest dostępny przez SageMaker wbudowane algorytmy jak również poprzez Interfejs programu SageMaker JumpStart wewnątrz Studio Amazon SageMaker. Aby uzyskać więcej informacji, zapoznaj się z jego dokumentacją Klasyfikacja obrazów – TensorFlow i przykładowy notatnik Wprowadzenie do SageMaker TensorFlow — klasyfikacja obrazów.

Klasyfikacja obrazów za pomocą TensorFlow w programie SageMaker zapewnia naukę transferu w wielu wstępnie wytrenowanych modelach dostępnych w TensorFlow Hub. Zgodnie z liczbą etykiet klas w danych uczących warstwa klasyfikacji jest dołączona do wstępnie wytrenowanego modelu TensorFlow Hub. Warstwa klasyfikacyjna składa się z warstwy usuwanej i warstwy gęstej, która jest w pełni połączoną warstwą z 2-normowym regulatorem, który jest inicjowany losowymi wagami. Trening modelu ma hiperparametry dotyczące wskaźnika porzucania warstwy porzucania i współczynnika regularyzacji L2 dla warstwy gęstej. Następnie można dostroić całą sieć, w tym wstępnie wytrenowany model, lub tylko najwyższą warstwę klasyfikacji na nowych danych uczących. W tym trybie uczenia transferu można przeprowadzić szkolenie nawet przy mniejszym zbiorze danych.

Jak korzystać z nowego algorytmu klasyfikacji obrazów TensorFlow

W tej sekcji opisano, jak korzystać z algorytmu klasyfikacji obrazów TensorFlow z: SageMaker SDK dla Pythona. Aby uzyskać informacje o tym, jak z niego korzystać w interfejsie użytkownika Studio, zobacz SageMaker Szybki start.

Algorytm obsługuje uczenie transferu dla wstępnie wytrenowanych modeli wymienionych w Modele z piastą TensorFlow. Każdy model jest oznaczony unikalnym model_id. Poniższy kod pokazuje, jak dostroić MobileNet V2 1.00 224 identyfikowany przez model_id tensorflow-ic-imagenet-mobilenet-v2-100-224-classification-4 na niestandardowym zestawie danych treningowych. Dla każdego model_id, w celu uruchomienia zadania szkoleniowego SageMaker poprzez Taksator klasy SageMaker Python SDK, musisz pobrać identyfikator URI obrazu platformy Docker, identyfikator URI skryptu szkoleniowego i wstępnie wytrenowany identyfikator URI modelu za pomocą funkcji narzędziowych dostępnych w programie SageMaker. Identyfikator URI skryptu szkoleniowego zawiera cały kod niezbędny do przetwarzania danych, ładowania wstępnie wytrenowanego modelu, trenowania modelu i zapisywania przeszkolonego modelu do wnioskowania. Wstępnie wytrenowany identyfikator URI modelu zawiera wstępnie wytrenowaną definicję architektury modelu i parametry modelu. Należy zauważyć, że identyfikator URI obrazu platformy Docker i identyfikator URI skryptu szkoleniowego są takie same dla wszystkich modeli klasyfikacji obrazów TensorFlow. Wstępnie wytrenowany identyfikator URI modelu jest specyficzny dla konkretnego modelu. Wstępnie wytrenowane archiwum modeli zostały wstępnie pobrane z TensorFlow Hub i zapisane z odpowiednią sygnaturą modelu w Usługa Amazon Simple Storage (Amazon S3), dzięki czemu zadanie szkoleniowe działa w izolacji sieciowej. Zobacz następujący kod:

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

model_id, model_version = "tensorflow-ic-imagenet-mobilenet-v2-100-224-classification-4", "*"
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-ic-training"
s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"

Dzięki tym artefaktom treningowym specyficznym dla modelu można skonstruować obiekt Taksator klasa:

# Create SageMaker Estimator instance
tf_ic_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,
)

Następnie, w celu przeniesienia uczenia się na niestandardowym zestawie danych, może być konieczna zmiana domyślnych wartości hiperparametrów uczenia, które są wymienione w Hiperparametry. Możesz pobrać słownik Pythona tych hiperparametrów z ich domyślnymi wartościami, wywołując hyperparameters.retrieve_default, zaktualizuj je w razie potrzeby, a następnie przekaż je do klasy Estimator. Zauważ, że wartości domyślne niektórych hiperparametrów są różne dla różnych modeli. W przypadku dużych modeli domyślny rozmiar partii jest mniejszy, a train_only_top_layer hiperparametr jest ustawiony na True. Hiperparametr Train_only_top_layer definiuje, które parametry modelu zmieniają się podczas procesu dostrajania. Jeśli train_only_top_layer is True, parametry warstw klasyfikacyjnych zmieniają się, a reszta parametrów pozostaje stała podczas procesu dostrajania. Z drugiej strony, jeśli train_only_top_layer is False, wszystkie parametry modelu są dostrojone. Zobacz następujący 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"

Poniższy kod zawiera domyślny treningowy zestaw danych hostowany w zasobnikach S3. Zapewniamy tf_flowers dataset jako domyślny zestaw danych do dostrajania modeli. Zestaw danych zawiera obrazy pięciu rodzajów kwiatów. Zbiór danych został pobrany z TensorFlow pod Licencja Apache 2.0.

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

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

Na koniec, aby uruchomić zadanie szkoleniowe SageMaker w celu dostrojenia modelu, zadzwoń .fit na obiekcie klasy Estimator, przekazując lokalizację S3 zestawu danych uczących:

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

Aby uzyskać więcej informacji na temat używania nowego algorytmu klasyfikacji obrazów SageMaker TensorFlow do uczenia transferu w niestandardowym zestawie danych, wdrażania modelu dostrojonego, uruchamiania wnioskowania na wdrożonym modelu i wdrażania wstępnie wytrenowanego modelu bez uprzedniego dostrajania w niestandardowym zestawie danych zobacz następujący przykładowy notatnik: Wprowadzenie do SageMaker TensorFlow — klasyfikacja obrazów.

Interfejs wejścia/wyjścia dla algorytmu klasyfikacji obrazów TensorFlow

Możesz dostroić każdy z przeszkolonych modeli wymienionych w Modele z piastą TensorFlow do dowolnego zestawu danych zawierającego obrazy należące do dowolnej liczby klas. Celem jest zminimalizowanie błędu predykcji w danych wejściowych. Model zwrócony przez dostrajanie może być dalej wdrażany do celów wnioskowania. Poniżej znajdują się instrukcje dotyczące formatowania danych uczących w celu wprowadzenia ich do modelu:

  • Wkład – Katalog zawierający tyle podkatalogów, ile jest klas. Każdy podkatalog powinien zawierać obrazy należące do tej klasy w formacie .jpg, .jpeg lub .png.
  • Wydajność – Dopracowany model, który można wdrożyć do wnioskowania lub można go dalej szkolić za pomocą szkolenia przyrostowego. Sygnatura przetwarzania wstępnego i przetwarzania końcowego jest dodawana do dostrojonego modelu, tak aby pobierał nieprzetworzony obraz .jpg jako dane wejściowe i zwracał prawdopodobieństwa klas. Wraz z modelami zapisywany jest plik mapujący indeksy klas do etykiet klas.

Katalog wejściowy powinien wyglądać jak w poniższym przykładzie, jeśli dane szkoleniowe zawierają obrazy z dwóch klas: roses i dandelion. Ścieżka S3 powinna wyglądać s3://bucket_name/input_directory/. Zwróć uwagę na końcowe / jest wymagane. Nazwy folderów i roses, dandelion, a nazwy plików .jpg mogą być dowolne. Plik mapowania etykiet, który jest zapisywany wraz z przeszkolonym modelem w zasobniku S3, mapuje nazwy folderów róże i mniszek lekarski na indeksy na liście prawdopodobieństw klas, które dane wyjściowe modelu. Mapowanie odbywa się w kolejności alfabetycznej nazw folderów. W poniższym przykładzie indeks 0 na liście danych wyjściowych modelu odpowiada dandelion, a indeks 1 odpowiada roses.

input_directory
    |--roses
        |--abc.jpg
        |--def.jpg
    |--dandelion
        |--ghi.jpg
        |--jkl.jpg

Wnioskowanie z algorytmem klasyfikacji obrazów TensorFlow

Wygenerowane modele mogą być hostowane w celu wnioskowania i obsługi zakodowanych formatów obrazów .jpg, .jpeg i .png jako application/x-image Typ zawartości. Obraz wejściowy jest automatycznie zmieniany. Dane wyjściowe zawierają wartości prawdopodobieństwa, etykiety klas dla wszystkich klas oraz przewidywaną etykietę odpowiadającą indeksowi klasy o najwyższym prawdopodobieństwie, zakodowane w formacie JSON. Model klasyfikacji obrazów TensorFlow przetwarza jeden obraz na żądanie i generuje tylko jeden wiersz w pliku JSON. Poniżej znajduje się przykład odpowiedzi w formacie JSON:

accept: application/json;verbose

 {"probabilities": [prob_0, prob_1, prob_2, ...],
  "labels":        [label_0, label_1, label_2, ...],
  "predicted_label": predicted_label}

If accept jest ustawione na application/json, wtedy model wyprowadza tylko prawdopodobieństwa. Więcej informacji na temat szkolenia i wnioskowania można znaleźć w przykładowym notatniku Wprowadzenie do SageMaker TensorFlow — klasyfikacja obrazów.

Korzystaj z wbudowanych algorytmów programu SageMaker w interfejsie użytkownika JumpStart

Możesz także użyć klasyfikacji obrazów SageMaker TensorFlow i dowolnego innego wbudowanego algorytmu za pomocą kilku kliknięć za pomocą interfejsu użytkownika JumpStart. JumpStart to funkcja programu SageMaker, która umożliwia trenowanie i wdrażanie wbudowanych algorytmów i wstępnie wytrenowanych modeli z różnych platform ML i centrów modeli za pośrednictwem interfejsu graficznego. Umożliwia także wdrażanie w pełni rozwiniętych rozwiązań ML, które łączą modele ML i różne inne usługi AWS w celu rozwiązania docelowego przypadku użycia. Kasy Uruchom klasyfikację tekstu za pomocą Amazon SageMaker JumpStart, korzystając z modeli TensorFlow Hub i Hugging Face aby dowiedzieć się, jak używać JumpStart do trenowania algorytmu lub wstępnie wytrenowanego modelu za pomocą kilku kliknięć.

Wnioski

W tym poście ogłosiliśmy uruchomienie wbudowanego algorytmu klasyfikacji obrazów SageMaker TensorFlow. Dostarczyliśmy przykładowy kod, jak wykonać uczenie transferu na niestandardowym zestawie danych przy użyciu wstępnie wytrenowanego modelu z TensorFlow Hub przy użyciu tego algorytmu. Aby uzyskać więcej informacji, sprawdź dokumentacja oraz przykładowy notatnik.


O autorach

Transfer nauki dla modeli klasyfikacji obrazów TensorFlow w Amazon SageMaker PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Dr Ashish Khetan jest Starszym Naukowcem Stosowanym z Wbudowane algorytmy Amazon SageMaker i pomaga rozwijać algorytmy uczenia maszynowego. Doktoryzował się na University of Illinois Urbana-Champaign. Jest aktywnym badaczem uczenia maszynowego i wnioskowania statystycznego, opublikował wiele artykułów na konferencjach NeurIPS, ICML, ICLR, JMLR, ACL i EMNLP.

Transfer nauki dla modeli klasyfikacji obrazów TensorFlow w Amazon SageMaker PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Dr Vivek Madan jest naukowcem z Zespół Amazon SageMaker JumpStart. Doktoryzował się na University of Illinois Urbana-Champaign i był badaczem podoktoranckim w Georgia Tech. Jest aktywnym badaczem uczenia maszynowego i projektowania algorytmów, publikował artykuły na konferencjach EMNLP, ICLR, COLT, FOCS i SODA.

Transfer nauki dla modeli klasyfikacji obrazów TensorFlow w Amazon SageMaker PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Joao Moura jest specjalistą ds. rozwiązań AI/ML w Amazon Web Services. Koncentruje się głównie na przypadkach użycia NLP i pomaga klientom zoptymalizować szkolenie i wdrażanie modelu uczenia głębokiego. Jest również aktywnym zwolennikiem rozwiązań ML typu low-code oraz sprzętu wyspecjalizowanego w ML.

Transfer nauki dla modeli klasyfikacji obrazów TensorFlow w Amazon SageMaker PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Raju Penmatcha jest starszym architektem rozwiązań AI/ML w AWS. Współpracuje z klientami edukacyjnymi, rządowymi i non-profit przy projektach związanych z uczeniem maszynowym i sztuczną inteligencją, pomagając im tworzyć rozwiązania przy użyciu AWS. Kiedy nie pomaga klientom, lubi podróżować do nowych miejsc.

Znak czasu:

Więcej z Uczenie maszynowe AWS