Uruchom segmentację obrazu za pomocą Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Uruchom segmentację obrazu za pomocą Amazon SageMaker JumpStart

W grudniu 2020, Ogłoszono AWS ogólna dostępność Amazon SageMaker JumpStart, zdolność Amazon Sage Maker który pomaga szybko i łatwo rozpocząć pracę z uczeniem maszynowym (ML). JumpStart zapewnia dostrajanie jednym kliknięciem i wdrażanie szerokiej gamy wstępnie przeszkolonych modeli w popularnych zadaniach ML, a także wybór kompleksowych rozwiązań, które rozwiązują typowe problemy biznesowe. Te funkcje eliminują konieczność podnoszenia ciężarów na każdym etapie procesu ML, ułatwiając opracowywanie modeli wysokiej jakości i skracając czas wdrażania.

Ten post jest trzecim z serii na temat używania JumpStart do określonych zadań ML. w pierwszy post, pokazaliśmy, jak uruchomić przypadki użycia klasyfikacji obrazów w programie JumpStart. w drugi post, pokazaliśmy, jak uruchomić przypadki użycia klasyfikacji tekstu w programie JumpStart. W tym poście zapewniamy przewodnik krok po kroku dotyczący dostrajania i wdrażania modelu segmentacji obrazu przy użyciu przeszkolonych modeli z MXNet. Badamy dwa sposoby uzyskania tego samego wyniku: poprzez interfejs graficzny JumpStart on Studio Amazon SageMakeri programowo przez Interfejsy API JumpStart.

Jeśli chcesz przejść bezpośrednio do kodu interfejsu API JumpStart, który wyjaśniliśmy w tym poście, możesz zapoznać się z następującymi przykładowymi notatnikami Jupyter:

Przegląd programu JumpStart

JumpStart pomaga rozpocząć pracę z modelami ML do różnych zadań bez pisania ani jednego wiersza kodu. W chwili pisania tego tekstu JumpStart umożliwia wykonanie następujących czynności:

  • Wdrażaj wstępnie wytrenowane modele do typowych zadań ML – JumpStart umożliwia rozwiązywanie typowych zadań ML bez wysiłku programistycznego, zapewniając łatwe wdrażanie modeli wstępnie wytrenowanych na dużych, publicznie dostępnych zestawach danych. Społeczność naukowa zajmująca się ML włożyła wiele wysiłku w publiczne udostępnienie do użytku większości niedawno opracowanych modeli. JumpStart zawiera kolekcję ponad 300 modeli, obejmującą 15 najpopularniejszych zadań ML, takich jak wykrywanie obiektów, klasyfikacja tekstu i generowanie tekstu, co ułatwia początkującym korzystanie z nich. Modele te pochodzą z popularnych hubów modelowych, takich jak TensorFlow, PyTorch, Hugging Face i MXNet.
  • Dostosuj wstępnie wytrenowane modele – JumpStart umożliwia precyzyjne dostrojenie wstępnie wytrenowanych modeli bez konieczności pisania własnego algorytmu treningowego. W ML umiejętność transferu wiedzy wyuczonej w jednej domenie do innej nazywa się przenieś naukę. Możesz użyć uczenia transferu do tworzenia dokładnych modeli na mniejszych zestawach danych, przy znacznie niższych kosztach uczenia niż te związane z trenowaniem oryginalnego modelu. JumpStart zawiera również popularne algorytmy szkoleniowe oparte na LightGBM, CatBoost, XGBoost i Scikit-learn, które można trenować od podstaw pod kątem regresji tabelarycznej i klasyfikacji.
  • Korzystaj z gotowych rozwiązań – JumpStart zapewnia zestaw 17 rozwiązań dla typowych przypadków użycia ML, takich jak prognozowanie popytu oraz aplikacje przemysłowe i finansowe, które można wdrożyć za pomocą kilku kliknięć. Rozwiązania to kompleksowe aplikacje ML, które łączą różne usługi AWS w celu rozwiązania określonego biznesowego przypadku użycia. Oni używają Tworzenie chmury AWS szablony i architektury referencyjne do szybkiego wdrażania, co oznacza, że ​​można je w pełni dostosować.
  • Zapoznaj się z przykładami z notatników, aby uzyskać informacje na temat algorytmów SageMaker – SageMaker zapewnia zestaw wbudowanych algorytmów, które pomagają naukowcom danych i praktykom ML w szybkim rozpoczęciu szkolenia i wdrażania modeli ML. JumpStart udostępnia przykładowe notesy, których można użyć do szybkiego wykorzystania tych algorytmów.
  • Przejrzyj filmy szkoleniowe i blogi – JumpStart udostępnia również liczne posty na blogu i filmy, które uczą, jak korzystać z różnych funkcji w SageMaker.

JumpStart akceptuje niestandardowe ustawienia VPC i Usługa zarządzania kluczami AWS (AWS KMS) klucze szyfrowania, dzięki którym możesz bezpiecznie korzystać z dostępnych modeli i rozwiązań w swoim środowisku korporacyjnym. Możesz przekazać swoje ustawienia bezpieczeństwa do JumpStart w Studio lub za pomocą pakietu SDK SageMaker Python.

Segmentacja semantyczna

Segmentacja semantyczna wyznacza każdą klasę obiektów pojawiających się na obrazie wejściowym. Oznacza (klasyfikuje) każdy piksel obrazu wejściowego etykietą klasy z predefiniowanego zestawu klas. Wiele obiektów tej samej klasy jest mapowanych na tę samą maskę.

Model dostępny do dostrajania buduje w pełni splotową „głowicę” sieci (FCN) na szczycie sieci bazowej. Krok dostrajania umożliwia precyzyjne dostrojenie głowicy FCNHead przy zachowaniu zamrożonych parametrów reszty modelu i zwraca model dostrojony. Celem jest zminimalizowanie strat entropii krzyżowej softmax na piksel w celu wytrenowania FCN. Model zwrócony przez dostrajanie może być dalej wdrażany do celów wnioskowania.

Katalog wejściowy powinien wyglądać jak poniższy kod, jeśli dane szkoleniowe zawierają dwa obrazy. Nazwy plików .png mogą być dowolne.

input_directory
    |--images
        |--abc.png
        |--def.png
    |--masks
        |--abc.png
        |--def.png
    class_label_to_prediction_index.json

Pliki masek powinny zawierać informacje o etykiecie klasy dla każdego piksela.

Segmentacja instancji

Segmentacja instancji wykrywa i wyznacza każdy odrębny obiekt zainteresowania pojawiający się na obrazie. Oznacza każdy piksel etykietą instancji. Podczas gdy segmentacja semantyczna przypisuje ten sam znacznik do pikseli wielu obiektów tej samej klasy, segmentacja instancji dalej oznacza piksele odpowiadające każdemu wystąpieniu obiektu na obrazie za pomocą oddzielnego znacznika.

Obecnie JumpStart oferuje modele tylko wnioskowania dla segmentacji instancji i nie obsługuje dostrajania.

Poniższe obrazy ilustrują różnicę między wnioskowaniem w segmentacji semantycznej a segmentacją instancji. Na oryginalnym obrazie widać dwie osoby. Segmentacja semantyczna traktuje wiele osób na obrazie jako jedną całość: Person. Jednak segmentacja instancji identyfikuje poszczególne osoby w obrębie Person kategorii.

Omówienie rozwiązania

Poniższe sekcje zawierają demonstrację krok po kroku, jak przeprowadzić segmentację semantyczną za pomocą JumpStart, zarówno za pośrednictwem interfejsu użytkownika Studio, jak i interfejsów API JumpStart.

Przechodzimy przez następujące kroki:

  1. Uzyskaj dostęp do JumpStart za pośrednictwem interfejsu użytkownika Studio:
    1. Uruchom wnioskowanie na wstępnie wytrenowanym modelu.
    2. Dostosuj wstępnie wytrenowany model.
  2. Używaj JumpStart programowo z pakietem SDK SageMaker Python:
    1. Uruchom wnioskowanie na wstępnie wytrenowanym modelu.
    2. Dostosuj wstępnie wytrenowany model.

Omawiamy również dodatkowe zaawansowane funkcje JumpStart.

Uzyskaj dostęp do JumpStart przez interfejs użytkownika Studio

W tej sekcji pokazujemy, jak trenować i wdrażać modele JumpStart za pomocą interfejsu użytkownika Studio.

Uruchom wnioskowanie na wstępnie wytrenowanym modelu

Poniższy film pokazuje, jak znaleźć wstępnie wytrenowany model segmentacji semantycznej w programie JumpStart i wdrożyć go. Strona modelu zawiera cenne informacje o modelu, sposobie jego używania, oczekiwanym formacie danych i niektórych szczegółach dostrajania. Możesz wdrożyć dowolny ze wstępnie przeszkolonych modeli dostępnych w programie JumpStart. Do wnioskowania wybieramy typ instancji ml.g4dn.xlarge. Zapewnia akcelerację GPU potrzebną do niskich opóźnień wnioskowania, ale za niższą cenę. Po skonfigurowaniu instancji hostingu SageMaker wybierz Rozmieścić. Uruchomienie trwałego punktu końcowego może zająć 5–10 minut.

Po kilku minutach punkt końcowy działa i jest gotowy do reagowania na żądania wnioskowania.

Podobnie można wdrożyć wstępnie wytrenowany model segmentacji wystąpień, wykonując te same kroki w poprzednim filmie podczas wyszukiwania segmentacji wystąpień zamiast segmentacji semantycznej na pasku wyszukiwania JumpStart.

Dostosuj wstępnie wytrenowany model

Poniższy film pokazuje, jak znaleźć i dostroić model segmentacji semantycznej w programie JumpStart. W filmie dostrajamy model za pomocą Zbiór danych PennFudanPed, dostarczany domyślnie w programie JumpStart, który można pobrać pod adresem Licencja Apache 2.0.

Dostrajanie własnego zestawu danych polega na prawidłowym formatowaniu danych (jak wyjaśniono na stronie modelu), przesłaniu ich do Usługa Amazon Simple Storage (Amazon S3) i określenie jego lokalizacji w konfiguracji źródła danych. Używamy tych samych wartości hiperparametrów ustawionych domyślnie (liczba epok, szybkość uczenia się i wielkość partii). Używamy również pliku ml.p3.2xlarge wspieranego przez GPU jako naszego wystąpienia szkoleniowego SageMaker.

Możesz monitorować swoje zadanie szkoleniowe bezpośrednio w konsoli Studio i otrzymywać powiadomienia o jego zakończeniu. Po zakończeniu szkolenia możesz wdrożyć dostrojony model z tej samej strony, na której znajdują się szczegóły zadania szkoleniowego. Przepływ pracy wdrażania jest taki sam, jak wdrażanie wstępnie wytrenowanego modelu.

Używaj programu JumpStart z pakietem SDK SageMaker

W poprzednich sekcjach pokazaliśmy, jak za pomocą interfejsu JumpStart można wdrożyć wstępnie wytrenowany model i dostroić go interaktywnie za pomocą kilku kliknięć. Można jednak również korzystać z modeli JumpStart i łatwego dostrajania programowego za pomocą interfejsów API zintegrowanych z pakietem SageMaker SDK. Omówimy teraz krótki przykład, w jaki sposób można zreplikować poprzedni proces. Wszystkie kroki opisane w tym demo są dostępne w dołączonych zeszytach Wprowadzenie do JumpStart – segmentacja instancji i Wprowadzenie do JumpStart – segmentacja semantyczna.

Uruchom wnioskowanie na wstępnie wytrenowanym modelu

W tej sekcji wybieramy odpowiedni wstępnie wytrenowany model w JumpStart, wdrażamy ten model w punkcie końcowym SageMaker i uruchamiamy wnioskowanie na wdrożonym punkcie końcowym.

SageMaker to platforma oparta na kontenerach Docker. JumpStart korzysta z dostępnej platformy specyficznej Kontenery do głębokiego uczenia SageMaker (DLC). Pobieramy wszelkie dodatkowe pakiety, a także skrypty do obsługi szkolenia i wnioskowania dla wybranego zadania. Na koniec wytrenowane artefakty modelu są pobierane osobno za pomocą model_uris, co zapewnia elastyczność platformy. Możesz użyć dowolnej liczby modeli wstępnie wytrenowanych dla tego samego zadania za pomocą jednego skryptu uczącego lub wnioskowania. Zobacz następujący kod:

model_id, model_version = "mxnet-semseg-fcn-resnet50-ade", "*"

# Retrieve the inference docker container uri
deploy_image_uri = image_uris.retrieve(
    region=None,
    framework=None,  # automatically inferred from model_id
    image_scope="inference",
    model_id=model_id,
    model_version=model_version,
    instance_type=inference_instance_type,
)

# Retrieve the inference script uri
deploy_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="inference")

base_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="inference")

Na przykład segmentację możemy ustawić model_id do mxnet-semseg-fcn-resnet50-ade. Jest w identyfikatorze odpowiada segmentacji instancji.

Następnie wrzucamy zasoby do Model SageMakera instancję i wdrożyć punkt końcowy:

# Create the SageMaker model instance
model = Model(
    image_uri=deploy_image_uri,
    source_dir=deploy_source_uri,
    model_data=base_model_uri,
    entry_point="inference.py",  # entry point file in source_dir and present in deploy_source_uri
    role=aws_role,
    predictor_cls=Predictor,
    name=endpoint_name,
)

# deploy the Model. Note that we need to pass Predictor class when we deploy model through Model class,
# for being able to run inference through the sagemaker API.
base_model_predictor = model.deploy(
    initial_instance_count=1,
    instance_type=inference_instance_type,
    predictor_cls=Predictor,
    endpoint_name=endpoint_name,
)

Po kilku minutach nasz model zostaje wdrożony i możemy uzyskać z niego prognozy w czasie rzeczywistym!

Poniższy fragment kodu daje wgląd w to, jak wygląda segmentacja semantyczna. Przewidywana maska ​​dla każdego piksela jest wizualizowana. Aby uzyskać wnioski z wdrożonego modelu, obraz wejściowy musi być dostarczony w formacie binarnym. Odpowiedzią punktu końcowego jest przewidywana etykieta dla każdego piksela na obrazie. Używamy query_endpoint i parse_response funkcje pomocnicze, które są zdefiniowane w towarzyszący notatnik:

query_response = query(base_model_predictor, pedestrian_img)
predictions, labels, image_labels = parse_response(query_response)
print("Objects present in the picture:", image_labels)

Dostosuj wstępnie wytrenowany model

Aby dostroić wybrany model, musimy uzyskać identyfikator URI tego modelu, a także skrypt uczący i obraz kontenera używany do uczenia. Na szczęście te trzy dane wejściowe zależą wyłącznie od nazwy modelu, wersji (lista dostępnych modeli znajduje się w Tabela dostępnych modeli JumpStart)i typ instancji, na której chcesz trenować. Widać to w następującym fragmencie kodu:

from sagemaker import image_uris, model_uris, script_uris

model_id, model_version = "mxnet-semseg-fcn-resnet50-ade", "*"
training_instance_type = "ml.p3.2xlarge"
train_image_uri = image_uris.retrieve(
    region=None,
    framework=None,
    model_id=model_id,
    model_version=model_version,
    image_scope="training",
    instance_type=training_instance_type,)# 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 to further fine-tune

train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

Odzyskujemy model_id odpowiadający temu samemu modelowi, którego używaliśmy wcześniej. Możesz teraz dostroić ten model JumpStart we własnym, niestandardowym zestawie danych, korzystając z pakietu SageMaker SDK. Używamy zestawu danych, który jest publicznie hostowany na Amazon S3, dogodnie skoncentrowanego na segmentacji semantycznej. Zestaw danych powinien mieć strukturę umożliwiającą dostrojenie, jak wyjaśniono w poprzedniej sekcji. Zobacz następujący przykładowy kod:

# URI of your training dataset
training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
training_data_prefix = "training-datasets/PennFudanPed_SemSeg/"
training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}"
training_job_name = name_from_base(f"jumpstart-example-{model_id}-transfer-learning")# Create SageMaker Estimator instance
semseg_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,)# Launch a SageMaker Training job by passing s3 path of the training data
semseg_estimator.fit({"training": training_dataset_s3_path}, logs=True)

Otrzymujemy te same domyślne hiperparametry dla naszego wybranego modelu, co te, które widzieliśmy w poprzedniej sekcji, używając sagemaker.hyperparameters.retrieve_default(). Następnie tworzymy instancję estymatora SageMaker i nazywamy .fit metody, aby rozpocząć dostrajanie naszego modelu, przekazując mu identyfikator URI Amazon S3 dla naszych danych treningowych. The entry_point dostarczony skrypt nosi nazwę transfer_learning.py (tak samo dla innych zadań i modeli), a kanał danych wejściowych jest przekazywany do .fit musi być nazwany training.

Podczas uczenia się algorytmu możesz monitorować jego postęp w notatniku SageMaker, w którym uruchamiasz sam kod, lub w Amazon Cloud Watch. Po zakończeniu szkolenia artefakty dostrojonego modelu są przesyłane do lokalizacji wyjściowej Amazon S3 określonej w konfiguracji szkolenia. Możesz teraz wdrożyć model w taki sam sposób, jak model wstępnie wytrenowany.

Zaawansowane funkcje

Oprócz dostrajania i wdrażania wstępnie przeszkolonych modeli, JumpStart oferuje wiele zaawansowanych funkcji.

Pierwszy jest automatyczne strojenie modelu. Umożliwia to automatyczne dostrojenie modeli ML w celu znalezienia wartości hiperparametrów z najwyższą dokładnością w zakresie zapewnianym przez interfejs API SageMaker.

Drugi jest szkolenie przyrostowe. Umożliwia to trenowanie modelu, który został już dostrojony, przy użyciu rozszerzonego zestawu danych, który zawiera podstawowy wzorzec, który nie został uwzględniony w poprzednich przebiegach dostrajania, co spowodowało słabą wydajność modelu. Szkolenie przyrostowe oszczędza czas i zasoby, ponieważ nie trzeba ponownie trenować modelu od podstaw.

Wnioski

W tym poście pokazaliśmy, jak dostroić i wdrożyć wstępnie wytrenowany model segmentacji semantycznej oraz jak dostosować go na przykład segmentację za pomocą JumpStart. Możesz to zrobić bez konieczności pisania kodu. Wypróbuj rozwiązanie samodzielnie i prześlij nam swoje uwagi.

Aby dowiedzieć się więcej o programie JumpStart i sposobach używania przeszkolonych modeli typu open source do różnych innych zadań ML, zapoznaj się z następującym artykułem AWS re:Wymyśl wideo 2020.


O autorach

Uruchom segmentację obrazu za pomocą Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Dr Vivek Madan jest naukowcem w zespole Amazon SageMaker JumpStart. Uzyskał doktorat na Uniwersytecie Illinois w Urbana-Champaign i był badaczem podoktoranckim w Georgia Tech. Jest aktywnym badaczem w dziedzinie uczenia maszynowego i projektowania algorytmów. Publikował artykuły na konferencjach EMNLP, ICLR, COLT, FOCS i SODA.

Uruchom segmentację obrazu za pomocą Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Santosz Kulkarni jest architektem rozwiązań dla przedsiębiorstw w Amazon Web Services, który współpracuje z klientami sportowymi w Australii. Pasjonuje się budowaniem rozproszonych aplikacji na dużą skalę do rozwiązywania problemów biznesowych, wykorzystując swoją wiedzę z zakresu AI/ML, big data i tworzenia oprogramowania.

Uruchom segmentację obrazu za pomocą Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Leonardo Bachegi jest starszym naukowcem i menedżerem w zespole Amazon SageMaker JumpStart. Jego pasją jest budowanie usług AI dla wizji komputerowej.

Znak czasu:

Więcej z Uczenie maszynowe AWS