Twórz i trenuj komputerowe modele wizyjne do wykrywania pozycji samochodów na obrazach za pomocą Amazon SageMaker i Amazon Rekognition | Usługi sieciowe Amazona

Twórz i trenuj komputerowe modele wizyjne do wykrywania pozycji samochodów na obrazach za pomocą Amazon SageMaker i Amazon Rekognition | Usługi sieciowe Amazona

Widzenie komputerowe (CV) to jedno z najpowszechniejszych zastosowań uczenia maszynowego (ML) i głębokiego uczenia się. Przykłady zastosowań obejmują samochody autonomiczne, moderowanie treści na platformach mediów społecznościowych, wykrywanie nowotworów i automatyczne wykrywanie defektów. Amazon Rekognition to w pełni zarządzana usługa, która może wykonywać zadania CV, takie jak wykrywanie obiektów, wykrywanie segmentów wideo, moderowanie treści i inne, w celu wydobywania spostrzeżeń z danych bez konieczności wcześniejszego doświadczenia w uczeniu maszynowym. W niektórych przypadkach może być potrzebne bardziej niestandardowe rozwiązanie wraz z usługą, aby rozwiązać bardzo specyficzny problem.

W tym poście zajmujemy się obszarami, w których można zastosować CV w przypadkach, w których ważna jest pozycja obiektów, ich położenie i orientacja. Jednym z takich przypadków użycia byłyby aplikacje mobilne skierowane do klientów, w których wymagane jest przesyłanie obrazu. Może to wynikać ze względów zgodności lub zapewnienia spójnego doświadczenia użytkownika i zwiększenia zaangażowania. Na przykład na platformach zakupów online kąt, pod jakim produkty są pokazane na zdjęciach, ma wpływ na współczynnik zakupów tego produktu. Jednym z takich przypadków jest wykrywanie położenia samochodu. Pokazujemy, jak można połączyć dobrze znane rozwiązania ML z przetwarzaniem końcowym, aby rozwiązać ten problem w chmurze AWS.

Aby rozwiązać ten problem, używamy modeli głębokiego uczenia się. Szkolenie algorytmów ML na potrzeby szacowania pozycji wymaga dużej wiedzy specjalistycznej i niestandardowych danych szkoleniowych. Oba wymagania są trudne i kosztowne do spełnienia. Dlatego przedstawiamy dwie opcje: jedną, która nie wymaga żadnej wiedzy specjalistycznej w zakresie ML i korzysta z Amazon Rekognition, oraz drugą, która wykorzystuje Amazon Sage Maker do trenowania i wdrażania niestandardowego modelu uczenia maszynowego. W pierwszej opcji wykorzystujemy Amazon Rekognition do wykrywania kół samochodu. Następnie wnioskujemy o orientacji samochodu na podstawie pozycji kół, korzystając z systemu opartego na regułach. W drugim wariancie wykrywamy koła i inne części samochodu za pomocą metody Detektor Model. Są one ponownie wykorzystywane do określania pozycji samochodu za pomocą kodu opartego na regułach. Druga opcja wymaga doświadczenia w uczeniu maszynowym, ale jest również bardziej konfigurowalna. Można go wykorzystać do dalszej obróbki obrazu, np. do wykadrowania całego samochodu. Obie opcje można trenować na publicznie dostępnych zbiorach danych. Na koniec pokażemy, jak zintegrować to rozwiązanie do wykrywania położenia samochodu z istniejącą aplikacją internetową, korzystając z usług takich jak Brama Amazon API i Wzmocnienie AWS.

Omówienie rozwiązania

Poniższy schemat ilustruje architekturę rozwiązania.

Twórz i trenuj komputerowe modele wizyjne w celu wykrywania pozycji samochodów na obrazach za pomocą Amazon SageMaker i Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Rozwiązanie składa się z próbnej aplikacji internetowej w Amplify, w której użytkownik może przesłać obraz i wywołać model Amazon Rekognition lub niestandardowy model Detectron w celu wykrycia pozycji samochodu. Dla każdej opcji udostępniamy AWS Lambda funkcję za bramą API, która jest wystawiona na działanie naszej próbnej aplikacji. Skonfigurowaliśmy naszą funkcję Lambda do działania z modelem Detectron przeszkolonym w SageMaker lub Amazon Rekognition.

Wymagania wstępne

W tej instrukcji należy spełnić następujące wymagania wstępne:

Utwórz aplikację bezserwerową za pomocą Amazon Rekognition

Nasza pierwsza opcja pokazuje, w jaki sposób można wykryć orientację samochodu na obrazach za pomocą usługi Amazon Rekognition. Pomysł polega na wykorzystaniu usługi Amazon Rekognition do wykrycia lokalizacji samochodu i jego kół, a następnie przeprowadzeniu przetwarzania końcowego w celu ustalenia orientacji samochodu na podstawie tych informacji. Całe rozwiązanie zostało wdrożone przy użyciu Lambdy, jak pokazano na rysunku Repozytorium Github. Ten folder zawiera dwa główne pliki: plik Dockerfile, który definiuje obraz Dockera, który będzie działał w naszej funkcji Lambda, oraz plik Dockerfile. app.py plik, który będzie głównym punktem wejścia funkcji Lambda:

def lambda_handler(event, context): body_bytes = json.loads(event["body"])["image"].split(",")[-1] body_bytes = base64.b64decode(body_bytes) rek = boto3.client('rekognition') response = rek.detect_labels(Image={'Bytes': body_bytes}, MinConfidence=80) angle, img = label_image(img_string=body_bytes, response=response) buffered = BytesIO() img.save(buffered, format="JPEG") img_str = "data:image/jpeg;base64," + base64.b64encode(buffered.getvalue()).decode('utf-8')

Funkcja Lambda oczekuje zdarzenia zawierającego nagłówek i treść, gdzie treścią powinien być obraz, który należy oznaczyć jako obiekt zdekodowany w formacie base64. Biorąc pod uwagę obraz, uznanie Amazon detect_labels funkcja jest wywoływana z funkcji Lambda za pomocą Boto3. Funkcja zwraca w odpowiedzi jedną lub więcej etykiet dla każdego obiektu na obrazie oraz szczegóły obwiedni dla wszystkich wykrytych etykiet obiektów, wraz z innymi informacjami, takimi jak pewność przypisanej etykiety, etykiety przodków wykrytej etykiety, możliwe aliasy etykiety i kategorie, do których należy wykryta etykieta. Na podstawie etykiet zwróconych przez Amazon Rekognition uruchamiamy funkcję label_image, który oblicza kąt samochodu na podstawie wykrytych kół w następujący sposób:

n_wheels = len(wheel_instances) wheel_centers = [np.array(_extract_bb_coords(wheel, img)).mean(axis=0)
for wheel in wheel_instances] wheel_center_comb = list(combinations(wheel_centers, 2))
vecs = [(k, pair[0] - pair[1]) for k,pair in enumerate(wheel_center_comb)]
vecs = sorted(vecs, key = lambda vec: np.linalg.norm(vec[1])) vec_rel = vecs[1] if n_wheels == 3 else vecs[0]
angle = math.degrees(math.atan(vec_rel[1][1]/vec_rel[1][0])) wheel_centers_rel = [tuple(wheel.tolist()) for wheel in
wheel_center_comb[vec_rel[0]]]

Należy pamiętać, że aplikacja wymaga, aby na obrazie znajdował się tylko jeden samochód i zwraca błąd, jeśli tak nie jest. Jednakże przetwarzanie końcowe można dostosować w celu zapewnienia bardziej szczegółowych opisów orientacji, uwzględnienia kilku samochodów lub obliczenia orientacji bardziej złożonych obiektów.

Popraw wykrywanie kół

Aby jeszcze bardziej poprawić dokładność wykrywania koła, możesz użyć Etykiety niestandardowe Amazon Rekognition. Podobnie jak w przypadku precyzyjnego dostrajania za pomocą SageMaker do uczenia i wdrażania niestandardowego modelu uczenia maszynowego, możesz przynieść własne dane oznaczone etykietami, dzięki czemu Amazon Rekognition może wygenerować dla Ciebie niestandardowy model analizy obrazu w ciągu zaledwie kilku godzin. Dzięki niestandardowym etykietom Rekognition potrzebujesz tylko niewielkiego zestawu obrazów szkoleniowych specyficznych dla Twojego przypadku użycia, w tym przypadku zdjęć samochodów pod określonymi kątami, ponieważ wykorzystuje istniejące możliwości Amazon Rekognition polegające na trenowaniu na dziesiątkach milionów obrazów w całym wiele kategorii. Etykiety Rekognition Custom Labels można zintegrować za pomocą kilku kliknięć i niewielkich dostosowań do funkcji Lambda, której używamy w standardowym rozwiązaniu Amazon Rekognition.

Wytrenuj model, korzystając z zadania szkoleniowego SageMaker

W naszej drugiej opcji szkolimy niestandardowy model głębokiego uczenia się w SageMaker. Używamy Struktura Detectron2 do segmentacji części samochodowych. Segmenty te są następnie wykorzystywane do określenia położenia samochodu.

Framework Detectron2 to biblioteka udostępniająca najnowocześniejsze algorytmy wykrywania i segmentacji. Detectron udostępnia różnorodne modele Mask R-CNN, które zostały przeszkolone na słynnym zbiorze danych COCO (Common Objects in Context). Aby zbudować nasz model wykrywania obiektów w samochodzie, używamy uczenia transferowego w celu dostrojenia wstępnie wytrenowanego modelu Mask R-CNN na segmentacja części samochodowych zbiór danych. Ten zbiór danych pozwala nam wytrenować model, który może wykrywać koła, ale także inne części samochodowe. Te dodatkowe informacje można dalej wykorzystać w obliczeniach kąta samochodu względem obrazu.

Zbiór danych zawiera adnotacje dotyczące części samochodowych, które można wykorzystać do wykrywania obiektów i zadań segmentacji semantycznej: około 500 zdjęć sedanów, pickupów i pojazdów typu SUV, wykonanych w wielu widokach (przód, tył i bok). Każdy obraz jest opatrzony adnotacjami za pomocą 18 masek instancji i ramek ograniczających reprezentujących różne części samochodu, takie jak koła, lusterka, światła oraz przednia i tylna szyba. Zmodyfikowaliśmy podstawowe adnotacje kół w taki sposób, że każde koło jest traktowane jako indywidualny obiekt, zamiast traktować wszystkie dostępne koła na obrazie jako jeden obiekt.

Używamy pliki Usługa Amazon Simple Storage (Amazon S3) do przechowywania zestawu danych używanego do uczenia modelu Detectron wraz z wyszkolonymi artefaktami modelu. Ponadto przechowywany jest kontener Docker, który działa w funkcji Lambda Rejestr elastycznego pojemnika Amazon (Amazon ECR). Kontener Docker w funkcji Lambda jest potrzebny, aby uwzględnić wymagane biblioteki i zależności do uruchomienia kodu. Moglibyśmy alternatywnie użyć Warstwy lambda, ale jest on ograniczony do przydziału rozmiaru rozpakowanego pakietu wdrożeniowego wynoszącego 250 MB, a do funkcji Lambda można dodać maksymalnie pięć warstw.

Nasze rozwiązanie opiera się na SageMakerze: rozszerzamy gotowe rozwiązanie Kontenery Docker SageMaker aby PyTorch mógł uruchomić nasz niestandardowy PyTorch kod szkoleniowy. Następnie używamy pakietu SageMaker Python SDK do zawinięcia obrazu szkoleniowego do estymatora SageMaker PyTorch, jak pokazano w poniższych fragmentach kodu:

d2_estimator = Estimator( image_uri=training_image_uri, role=role, sagemaker_session=sm_session, instance_count=1, instance_type=training_instance, output_path=f"s3://{session_bucket}/{prefix_model}", base_job_name=f"detectron2") d2_estimator.fit({ "training": training_channel, "validation": validation_channel, }, wait=True)

Na koniec rozpoczynamy zadanie szkoleniowe, wywołując funkcję fit() funkcję na utworzonym estymatorze PyTorch. Po zakończeniu uczenia wyszkolony artefakt modelu jest przechowywany w zasobniku sesji w Amazon S3 w celu wykorzystania go w potoku wnioskowania.

Wdróż model za pomocą SageMaker i potoków wnioskowania

Używamy również SageMaker do hostowania punktu końcowego wnioskowania, na którym działa nasz niestandardowy model Detectron. Pełna infrastruktura wykorzystywana do wdrożenia naszego rozwiązania jest udostępniana przy użyciu AWS CDK. Możemy hostować nasz niestandardowy model za pośrednictwem pliku Punkt końcowy SageMaker w czasie rzeczywistym poprzez dzwonienie deploy w estymatorze PyTorch. To już drugi raz, kiedy rozszerzamy gotowy kontener SageMaker PyTorch o PyTorch Detectron. Używamy go do uruchamiania skryptu wnioskowania i hostowania naszego wytrenowanego modelu PyTorch w następujący sposób:

model = PyTorchModel( name="d2-sku110k-model", model_data=d2_estimator.model_data, role=role, sagemaker_session=sm_session, entry_point="predict.py", source_dir="src", image_uri=serve_image_uri, framework_version="1.6.0") predictor = model.deploy( initial_instance_count=1, instance_type="ml.g4dn.xlarge", endpoint_name="detectron-endpoint", serializer=sagemaker.serializers.JSONSerializer(), deserializer=sagemaker.deserializers.JSONDeserializer(), wait=True)

Należy pamiętać, że do wdrożenia użyliśmy procesora graficznego ml.g4dn.xlarge, ponieważ jest to najmniejszy dostępny procesor graficzny i wystarczający dla tej wersji demonstracyjnej. W naszym pliku należy skonfigurować dwa komponenty skrypt wnioskowania: ładowanie modelu i udostępnianie modelu. Funkcja model_fn() służy do ładowania przeszkolonego modelu, który jest częścią hostowanego kontenera Docker i można go również znaleźć w Amazon S3 oraz zwraca obiekt modelu, który może zostać użyty do obsługi modelu w następujący sposób:

def model_fn(model_dir: str) -> DefaultPredictor: for p_file in Path(model_dir).iterdir(): if p_file.suffix == ".pth": path_model = p_file cfg = get_cfg() cfg.MODEL.WEIGHTS = str(path_model) return DefaultPredictor(cfg)

Funkcja predict_fn() wykonuje prognozę i zwraca wynik. Oprócz korzystania z naszego wyszkolonego modelu używamy wstępnie wyszkolonej wersji modelu Mask R-CNN wyszkolonej na zestawie danych COCO, aby wyodrębnić główny samochód na obrazie. Jest to dodatkowy etap przetwarzania końcowego, mający na celu radzenie sobie z obrazami, na których istnieje więcej niż jeden samochód. Zobacz następujący kod:

def predict_fn(input_img: np.ndarray, predictor: DefaultPredictor) -> Mapping: pretrained_predictor = _get_pretraind_model() car_mask = get_main_car_mask(pretrained_predictor, input_img) outputs = predictor(input_img) fmt_out = { "image_height": input_object.shape[0], "image_width": input_object.shape[1], "pred_boxes": outputs["instances"].pred_boxes.tensor.tolist(), "scores": outputs["instances"].scores.tolist(), "pred_classes": outputs["instances"].pred_classes.tolist(), "car_mask": car_mask.tolist() } return fmt_out

Podobnie jak w przypadku rozwiązania Amazon Rekognition, ramki ograniczające przewidywane dla wheel klasy są filtrowane z wyjść detekcyjnych i dostarczane do modułu przetwarzania końcowego w celu oceny pozycji samochodu względem sygnału wyjściowego.

Na koniec ulepszyliśmy także przetwarzanie końcowe dla rozwiązania Detectron. Wykorzystuje również segmenty różnych części samochodowych do wywnioskowania rozwiązania. Na przykład, jeśli wykryty zostanie przedni zderzak, ale nie zostanie wykryty tylny zderzak, zakłada się, że mamy widok z przodu samochodu i obliczany jest odpowiadający mu kąt.

Połącz swoje rozwiązanie z aplikacją internetową

Aby połączyć punkty końcowe modelu z Amplify, należy wykonać następujące czynności:

  • Sklonuj repozytorium aplikacji utworzone przez stos AWS CDK o nazwie car-angle-detection-website-repo. Upewnij się, że szukasz go w regionie użytym do wdrożenia.
  • Skopiuj punkty końcowe bramy API dla każdej wdrożonej funkcji Lambda do pliku index.html plik w poprzednim repozytorium (istnieją elementy zastępcze, w których należy umieścić punkt końcowy). Poniższy kod jest przykładem wyglądu tej sekcji pliku .html:
<td align="center" colspan="2">
<select id="endpoint">
<option value="https://ey82aaj8ch.execute-api.eu-central-1.amazonaws.com/prod/"> Amazon Rekognition</option>
<option value="https://nhq6q88xjg.execute-api.eu-central-1.amazonaws.com/prod/"> Amazon SageMaker Detectron</option>
</select>
<input class="btn" type="file" id="ImageBrowse" />
<input class="btn btn-primary" type="submit" value="Upload">
</td>

  • Zapisz plik HTML i wypchnij zmianę kodu do zdalnej gałęzi głównej.

Spowoduje to zaktualizowanie pliku HTML we wdrożeniu. Aplikacja jest teraz gotowa do użycia.

  • Przejdź do konsoli Amplify i znajdź utworzony projekt.

Adres URL aplikacji będzie widoczny po zakończeniu wdrażania.

  • Przejdź do adresu URL i baw się interfejsem użytkownika.

Twórz i trenuj komputerowe modele wizyjne w celu wykrywania pozycji samochodów na obrazach za pomocą Amazon SageMaker i Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Wnioski

Gratulacje! Wdrożyliśmy kompletną architekturę bezserwerową, w której wykorzystaliśmy Amazon Rekognition, ale daliśmy także opcję własnego, niestandardowego modelu, z tym przykładem dostępnym na GitHub. Jeśli w swoim zespole nie masz doświadczenia w zakresie uczenia maszynowego lub wystarczającej ilości danych niestandardowych, aby wytrenować model, możesz wybrać opcję wykorzystującą Amazon Rekognition. Jeśli chcesz mieć większą kontrolę nad swoim modelem, chcesz go bardziej dostosować i dysponujesz wystarczającą ilością danych, możesz wybrać rozwiązanie SageMaker. Jeśli masz zespół analityków danych, oni również mogą chcieć dalej udoskonalać modele i wybrać bardziej niestandardową i elastyczną opcję. Możesz umieścić funkcję Lambda i API Gateway za swoją aplikacją internetową, korzystając z jednej z dwóch opcji. Możesz także zastosować to podejście w innym przypadku użycia, do którego możesz chcieć dostosować kod.

Zaletą tej architektury bezserwerowej jest to, że elementy konstrukcyjne są całkowicie wymienne. Możliwości są niemal nieograniczone. Zacznij więc już dziś!

Jak zawsze, AWS chętnie przyjmuje opinie. Prosimy o przesyłanie wszelkich uwag lub pytań.


O autorach

Twórz i trenuj komputerowe modele wizyjne w celu wykrywania pozycji samochodów na obrazach za pomocą Amazon SageMaker i Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Michaela Wallnera jest starszym konsultantem ds. danych i sztucznej inteligencji w AWS Professional Services i z pasją umożliwia klientom korzystanie z danych i AWSome w chmurze AWS. Co więcej, lubi myśleć odważnie o klientach, aby wprowadzać dla nich innowacje i wymyślać nowe pomysły.

Twórz i trenuj komputerowe modele wizyjne w celu wykrywania pozycji samochodów na obrazach za pomocą Amazon SageMaker i Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Amna Najmi jest analitykiem danych w AWS Professional Services. Jej pasją jest pomaganie klientom we wprowadzaniu innowacji dzięki technologiom Big Data i sztucznej inteligencji w celu wykorzystania wartości biznesowej i wniosków z danych. Ma doświadczenie w pracy nad platformami danych i projektami AI/ML w pionie opieki zdrowotnej i nauk przyrodniczych. W wolnym czasie lubi pracować w ogrodzie i podróżować do nowych miejsc.

Twórz i trenuj komputerowe modele wizyjne w celu wykrywania pozycji samochodów na obrazach za pomocą Amazon SageMaker i Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Davida Sauerweina jest starszym analitykiem danych w AWS Professional Services, gdzie umożliwia klientom podróż w zakresie AI/ML w chmurze AWS. David koncentruje się na cyfrowych bliźniakach, prognozowaniu i obliczeniach kwantowych. Uzyskał stopień doktora fizyki teoretycznej na Uniwersytecie w Innsbrucku w Austrii. Był także doktorantem i pracownikiem naukowym podoktorskim w Instytucie Optyki Kwantowej Maxa-Plancka w Niemczech. W wolnym czasie uwielbia czytać, jeździć na nartach i spędzać czas z rodziną.

Twórz i trenuj komputerowe modele wizyjne w celu wykrywania pozycji samochodów na obrazach za pomocą Amazon SageMaker i Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Srikrishna Caitanya Konduru jest starszym analitykiem danych w usługach AWS Professional. Wspiera klientów w prototypowaniu i operacjonalizacji aplikacji ML na AWS. Srikrishna skupia się na wizji komputerowej i NLP. Kieruje także inicjatywami w zakresie projektowania platform uczenia maszynowego i identyfikacji przypadków użycia dla klientów z różnych branż. Srikrishna posiada tytuł magistra inżynierii biomedycznej uzyskany na uniwersytecie RWTH w Aachen w Niemczech, ze specjalizacją w obrazowaniu medycznym.

Twórz i trenuj komputerowe modele wizyjne w celu wykrywania pozycji samochodów na obrazach za pomocą Amazon SageMaker i Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Ahmed Mansour jest analitykiem danych w AWS Professional Services. Zapewnia wsparcie techniczne klientom podczas ich podróży AI/ML w chmurze AWS. Ahmed skupia się na zastosowaniach NLP w domenie białkowej wraz z RL. Uzyskał stopień doktora inżynierii na Uniwersytecie Technicznym w Monachium w Niemczech. W wolnym czasie uwielbia chodzić na siłownię i bawić się ze swoimi dziećmi.

Znak czasu:

Więcej z Uczenie maszynowe AWS