Erstellen und trainieren Sie Computer-Vision-Modelle, um mit Amazon SageMaker und Amazon Rekognition | Fahrzeugpositionen in Bildern zu erkennen Amazon Web Services

Erstellen und trainieren Sie Computer-Vision-Modelle, um mit Amazon SageMaker und Amazon Rekognition | Fahrzeugpositionen in Bildern zu erkennen Amazon Web Services

Computer Vision (CV) ist eine der häufigsten Anwendungen von maschinellem Lernen (ML) und Deep Learning. Die Anwendungsfälle reichen von selbstfahrenden Autos, der Moderation von Inhalten auf Social-Media-Plattformen, der Krebserkennung und der automatisierten Defekterkennung. Amazon-Anerkennung ist ein vollständig verwalteter Dienst, der CV-Aufgaben wie Objekterkennung, Videosegmenterkennung, Inhaltsmoderation und mehr ausführen kann, um Erkenntnisse aus Daten zu gewinnen, ohne dass vorherige ML-Erfahrung erforderlich ist. In manchen Fällen ist neben dem Service möglicherweise auch eine individuellere Lösung erforderlich, um ein ganz bestimmtes Problem zu lösen.

In diesem Beitrag befassen wir uns mit Bereichen, in denen CV auf Anwendungsfälle angewendet werden kann, bei denen die Pose von Objekten, ihre Position und Ausrichtung wichtig sind. Ein solcher Anwendungsfall wären kundenorientierte mobile Anwendungen, bei denen ein Bild-Upload erforderlich ist. Dies kann aus Compliance-Gründen oder zur Bereitstellung einer konsistenten Benutzererfahrung und zur Verbesserung des Engagements geschehen. Auf Online-Shopping-Plattformen hat beispielsweise der Winkel, in dem Produkte in Bildern gezeigt werden, einen Einfluss auf die Kaufrate dieses Produkts. Ein solcher Fall ist die Erkennung der Position eines Autos. Wir zeigen, wie Sie bekannte ML-Lösungen mit Postprocessing kombinieren können, um dieses Problem in der AWS Cloud anzugehen.

Um dieses Problem zu lösen, nutzen wir Deep-Learning-Modelle. Das Training von ML-Algorithmen zur Posenschätzung erfordert viel Fachwissen und benutzerdefinierte Trainingsdaten. Beide Anforderungen sind schwer und kostspielig zu erfüllen. Daher stellen wir zwei Optionen vor: eine, die keine ML-Kenntnisse erfordert und Amazon Rekognition nutzt, und eine andere, die Amazon Rekognition nutzt Amazon Sage Maker um ein benutzerdefiniertes ML-Modell zu trainieren und bereitzustellen. Bei der ersten Option verwenden wir Amazon Rekognition, um die Räder des Autos zu erkennen. Mithilfe eines regelbasierten Systems leiten wir dann aus den Radpositionen die Ausrichtung des Fahrzeugs ab. Bei der zweiten Möglichkeit erkennen wir die Räder und andere Autoteile mithilfe des Detektor Modell. Diese werden wiederum verwendet, um mit regelbasiertem Code auf die Fahrzeugposition zu schließen. Die zweite Option erfordert ML-Erfahrung, ist aber auch anpassbarer. Es kann zur weiteren Nachbearbeitung des Bildes verwendet werden, um beispielsweise das gesamte Auto auszuschneiden. Beide Optionen können anhand öffentlich verfügbarer Datensätze trainiert werden. Abschließend zeigen wir, wie Sie diese Lösung zur Fahrzeughaltungserkennung mithilfe von Diensten wie in Ihre bestehende Webanwendung integrieren können Amazon API-Gateway und AWS verstärken.

Lösungsüberblick

Das folgende Diagramm zeigt die Lösungsarchitektur.

Erstellen und trainieren Sie Computer-Vision-Modelle, um mit Amazon SageMaker und Amazon Rekognition | Fahrzeugpositionen in Bildern zu erkennen Amazon Web Services PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Die Lösung besteht aus einer simulierten Webanwendung in Amplify, in der ein Benutzer ein Bild hochladen und entweder das Amazon Rekognition-Modell oder das benutzerdefinierte Detectron-Modell aufrufen kann, um die Position des Autos zu erkennen. Für jede Option hosten wir eine AWS Lambda Funktion hinter einem API-Gateway, das unserer Scheinanwendung ausgesetzt ist. Wir haben unsere Lambda-Funktion so konfiguriert, dass sie entweder mit dem in SageMaker trainierten Detectron-Modell oder mit Amazon Rekognition ausgeführt wird.

Voraussetzungen:

Für diese exemplarische Vorgehensweise sollten Sie die folgenden Voraussetzungen erfüllen:

Erstellen Sie eine serverlose App mit Amazon Rekognition

Unsere erste Option zeigt, wie Sie mithilfe von Amazon Rekognition die Fahrzeugausrichtung in Bildern erkennen können. Die Idee besteht darin, Amazon Rekognition zu verwenden, um den Standort des Autos und seiner Räder zu erkennen und dann eine Nachbearbeitung durchzuführen, um aus diesen Informationen die Ausrichtung des Autos abzuleiten. Die gesamte Lösung wird mit Lambda bereitgestellt, wie in der Abbildung gezeigt Github-Repository. Dieser Ordner enthält zwei Hauptdateien: eine Docker-Datei, die das Docker-Image definiert, das in unserer Lambda-Funktion ausgeführt wird, und die app.py Datei, die der Haupteinstiegspunkt der Lambda-Funktion sein wird:

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')

Die Lambda-Funktion erwartet ein Ereignis, das einen Header und einen Text enthält, wobei der Text das Bild sein sollte, das als Base64-dekodiertes Objekt gekennzeichnet werden soll. Angesichts des Bildes, der Amazon Rekognition detect_labels Die Funktion wird über die Lambda-Funktion aufgerufen Boto3. Die Funktion gibt als Teil der Antwort eine oder mehrere Bezeichnungen für jedes Objekt im Bild und Begrenzungsrahmendetails für alle erkannten Objektbezeichnungen zurück, zusammen mit anderen Informationen wie der Zuverlässigkeit der zugewiesenen Bezeichnung, ggf. den Vorfahrenbezeichnungen der erkannten Bezeichnung Aliase für das Label und die Kategorien, zu denen das erkannte Label gehört. Basierend auf den von Amazon Rekognition zurückgegebenen Labels führen wir die Funktion aus label_image, das den Fahrzeugwinkel aus den erkannten Rädern wie folgt berechnet:

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]]]

Beachten Sie, dass die Anwendung erfordert, dass nur ein Auto im Bild vorhanden ist und einen Fehler zurückgibt, wenn dies nicht der Fall ist. Die Nachbearbeitung kann jedoch angepasst werden, um detailliertere Orientierungsbeschreibungen bereitzustellen, mehrere Autos abzudecken oder die Orientierung komplexerer Objekte zu berechnen.

Verbessern Sie die Raderkennung

Um die Genauigkeit der Raderkennung weiter zu verbessern, können Sie verwenden Benutzerdefinierte Etiketten von Amazon Rekognition. Ähnlich wie bei der Feinabstimmung mit SageMaker zum Trainieren und Bereitstellen eines benutzerdefinierten ML-Modells können Sie Ihre eigenen beschrifteten Daten einbringen, sodass Amazon Rekognition in nur wenigen Stunden ein benutzerdefiniertes Bildanalysemodell für Sie erstellen kann. Mit Rekognition Custom Labels benötigen Sie nur einen kleinen Satz an Trainingsbildern, die speziell auf Ihren Anwendungsfall zugeschnitten sind, in diesem Fall Autobilder mit bestimmten Winkeln, da die vorhandenen Funktionen von Amazon Rekognition genutzt werden, um auf zig Millionen Bildern trainiert zu werden viele Kategorien. Benutzerdefinierte Rekognition-Labels können mit nur wenigen Klicks und kleinen Anpassungen an die Lambda-Funktion integriert werden, die wir für die Standardlösung von Amazon Rekognition verwenden.

Trainieren Sie ein Modell mit einem SageMaker-Trainingsjob

Bei unserer zweiten Option trainieren wir ein benutzerdefiniertes Deep-Learning-Modell auf SageMaker. Wir benutzen das Detectron2-Framework zur Segmentierung von Autoteilen. Diese Segmente werden dann verwendet, um auf die Position des Fahrzeugs zu schließen.

Das Detectron2-Framework ist eine Bibliothek, die modernste Erkennungs- und Segmentierungsalgorithmen bereitstellt. Detectron bietet eine Vielzahl von Mask-R-CNN-Modellen, die auf dem berühmten COCO-Datensatz (Common Objects in Context) trainiert wurden. Um unser Modell zur Erkennung von Autoobjekten zu erstellen, verwenden wir Transferlernen, um ein vorab trainiertes Mask R-CNN-Modell darauf abzustimmen Segmentierung von Autoteilen Datensatz. Mit diesem Datensatz können wir ein Modell trainieren, das Räder, aber auch andere Autoteile erkennen kann. Diese zusätzlichen Informationen können bei der Berechnung des Fahrzeugwinkels relativ zum Bild weiter verwendet werden.

Der Datensatz enthält kommentierte Daten von Autoteilen, die für Objekterkennungs- und semantische Segmentierungsaufgaben verwendet werden sollen: etwa 500 Bilder von Limousinen, Pickups und Sports Utility Vehicles (SUVs), aufgenommen in mehreren Ansichten (Vorder-, Rück- und Seitenansicht). Jedes Bild ist mit 18 Instanzmasken und Begrenzungsrahmen versehen, die die verschiedenen Teile eines Autos wie Räder, Spiegel, Lichter sowie Vorder- und Heckscheibe darstellen. Wir haben die Basisanmerkungen der Räder so geändert, dass jedes Rad als einzelnes Objekt betrachtet wird, anstatt alle verfügbaren Räder im Bild als ein Objekt zu betrachten.

Wir verwenden Amazon Simple Storage-Service (Amazon S3) zum Speichern des zum Training des Detectron-Modells verwendeten Datensatzes zusammen mit den trainierten Modellartefakten. Darüber hinaus wird der Docker-Container gespeichert, der in der Lambda-Funktion ausgeführt wird Amazon Elastic Container-Registrierung (Amazon ECR). Der Docker-Container in der Lambda-Funktion wird benötigt, um die erforderlichen Bibliotheken und Abhängigkeiten zum Ausführen des Codes einzuschließen. Wir könnten alternativ verwenden Lambda-Schichten, aber es ist auf ein entpacktes Bereitstellungspaketgrößenkontingent von 250 MB beschränkt und einer Lambda-Funktion können maximal fünf Ebenen hinzugefügt werden.

Unsere Lösung basiert auf SageMaker: Wir erweitern vorgefertigte Lösungen SageMaker Docker-Container damit PyTorch unser benutzerdefiniertes PyTorch ausführen kann Trainingscode. Als Nächstes verwenden wir das SageMaker Python SDK, um das Trainingsbild in einen SageMaker PyTorch-Schätzer einzubinden, wie in den folgenden Codeausschnitten gezeigt:

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)

Abschließend starten wir den Trainingsjob mit dem Aufruf von fit() Funktion auf dem erstellten PyTorch-Schätzer. Wenn das Training abgeschlossen ist, wird das trainierte Modellartefakt im Sitzungs-Bucket in Amazon S3 gespeichert, um für die Inferenzpipeline verwendet zu werden.

Stellen Sie das Modell mit SageMaker und Inferenzpipelines bereit

Wir verwenden SageMaker auch zum Hosten des Inferenzendpunkts, der unser benutzerdefiniertes Detectron-Modell ausführt. Die gesamte zur Bereitstellung unserer Lösung verwendete Infrastruktur wird mithilfe des AWS CDK bereitgestellt. Wir können unser benutzerdefiniertes Modell über a hosten SageMaker-Echtzeitendpunkt telefonisch deploy auf dem PyTorch-Schätzer. Dies ist das zweite Mal, dass wir einen vorgefertigten SageMaker PyTorch-Container um PyTorch Detectron erweitern. Wir verwenden es, um das Inferenzskript auszuführen und unser trainiertes PyTorch-Modell wie folgt zu hosten:

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)

Beachten Sie, dass wir für die Bereitstellung eine ml.g4dn.xlarge-GPU verwendet haben, da es sich um die kleinste verfügbare GPU handelt, die für diese Demo ausreichend ist. In unserem müssen zwei Komponenten konfiguriert werden Inferenzskript: Modellladen und Modellbereitstellung. Die Funktion model_fn() wird verwendet, um das trainierte Modell zu laden, das Teil des gehosteten Docker-Containers ist und auch in Amazon S3 zu finden ist, und ein Modellobjekt zurückzugeben, das wie folgt für die Modellbereitstellung verwendet werden kann:

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)

Die Funktion predict_fn() führt die Vorhersage durch und gibt das Ergebnis zurück. Neben der Verwendung unseres trainierten Modells verwenden wir eine vorab trainierte Version des Mask R-CNN-Modells, das auf dem COCO-Datensatz trainiert wurde, um das Hauptauto im Bild zu extrahieren. Dies ist ein zusätzlicher Nachbearbeitungsschritt, um Bilder zu bearbeiten, auf denen mehr als ein Auto vorhanden ist. Siehe den folgenden Code:

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

Ähnlich wie bei der Amazon Rekognition-Lösung werden die für die vorhergesagten Begrenzungsrahmen verwendet wheel Klasse werden aus den Erkennungsausgaben gefiltert und an das Nachverarbeitungsmodul geliefert, um die Fahrzeugposition relativ zur Ausgabe zu bewerten.

Schließlich haben wir auch die Nachbearbeitung für die Detectron-Lösung verbessert. Außerdem werden die Segmente verschiedener Autoteile verwendet, um die Lösung abzuleiten. Wenn beispielsweise eine vordere Stoßstange, aber keine hintere Stoßstange erkannt wird, wird davon ausgegangen, dass wir eine Vorderansicht des Fahrzeugs haben, und der entsprechende Winkel wird berechnet.

Verbinden Sie Ihre Lösung mit der Webanwendung

Die Schritte zum Verbinden der Modellendpunkte mit Amplify sind wie folgt:

  • Klonen Sie das Anwendungs-Repository, das der AWS CDK-Stack erstellt hat, mit dem Namen car-angle-detection-website-repo. Stellen Sie sicher, dass Sie in der Region suchen, die Sie für die Bereitstellung verwendet haben.
  • Kopieren Sie die API Gateway-Endpunkte für jede der bereitgestellten Lambda-Funktionen in die index.html Datei im vorherigen Repository (es gibt Platzhalter dort, wo der Endpunkt platziert werden muss). Der folgende Code ist ein Beispiel dafür, wie dieser Abschnitt der .html-Datei aussieht:
<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>

  • Speichern Sie die HTML-Datei und übertragen Sie die Codeänderung in den Remote-Hauptzweig.

Dadurch wird die HTML-Datei in der Bereitstellung aktualisiert. Die Anwendung ist nun einsatzbereit.

  • Navigieren Sie zur Amplify-Konsole und suchen Sie das von Ihnen erstellte Projekt.

Die Anwendungs-URL wird nach Abschluss der Bereitstellung sichtbar.

  • Navigieren Sie zur URL und haben Sie Spaß mit der Benutzeroberfläche.

Erstellen und trainieren Sie Computer-Vision-Modelle, um mit Amazon SageMaker und Amazon Rekognition | Fahrzeugpositionen in Bildern zu erkennen Amazon Web Services PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Zusammenfassung

Glückwunsch! Wir haben eine vollständige serverlose Architektur bereitgestellt, in der wir Amazon Rekognition verwendet haben, aber auch eine Option für Ihr eigenes benutzerdefiniertes Modell bereitgestellt haben. Dieses Beispiel ist hier verfügbar GitHub. Wenn Ihr Team nicht über ML-Expertise oder nicht über genügend benutzerdefinierte Daten zum Trainieren eines Modells verfügt, können Sie die Option auswählen, die Amazon Rekognition verwendet. Wenn Sie mehr Kontrolle über Ihr Modell haben möchten, es weiter anpassen möchten und über genügend Daten verfügen, können Sie sich für die SageMaker-Lösung entscheiden. Wenn Sie über ein Team von Datenwissenschaftlern verfügen, möchten diese möglicherweise auch die Modelle weiter verbessern und eine individuellere und flexiblere Option auswählen. Mit einer der beiden Optionen können Sie die Lambda-Funktion und das API-Gateway hinter Ihre Webanwendung stellen. Sie können diesen Ansatz auch für einen anderen Anwendungsfall verwenden, für den Sie den Code möglicherweise anpassen möchten.

Der Vorteil dieser serverlosen Architektur besteht darin, dass die Bausteine ​​vollständig austauschbar sind. Die Möglichkeiten sind nahezu grenzenlos. Also, legen Sie noch heute los!

Wie immer freut sich AWS über Feedback. Bitte senden Sie Kommentare oder Fragen.


Über die Autoren

Erstellen und trainieren Sie Computer-Vision-Modelle, um mit Amazon SageMaker und Amazon Rekognition | Fahrzeugpositionen in Bildern zu erkennen Amazon Web Services PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Michael Wallner ist Senior Consultant Data & AI bei AWS Professional Services und setzt sich leidenschaftlich dafür ein, Kunden auf ihrem Weg zu einem datengesteuerten und AWS-fähigen Unternehmen in der AWS-Cloud zu begleiten. Darüber hinaus denkt er gerne in großen Dimensionen mit Kunden zusammen, um Innovationen zu entwickeln und neue Ideen für sie zu erfinden.

Erstellen und trainieren Sie Computer-Vision-Modelle, um mit Amazon SageMaker und Amazon Rekognition | Fahrzeugpositionen in Bildern zu erkennen Amazon Web Services PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Aamna Najmi ist Datenwissenschaftler bei AWS Professional Services. Es ist ihr eine Leidenschaft, Kunden bei der Innovation mit Big Data und Technologien der künstlichen Intelligenz zu unterstützen, um aus Daten geschäftlichen Nutzen und Erkenntnisse zu ziehen. Sie verfügt über Erfahrung in der Arbeit an Datenplattform- und KI/ML-Projekten im Gesundheitswesen und in den Biowissenschaften. In ihrer Freizeit arbeitet sie gerne im Garten und reist gerne an neue Orte.

Erstellen und trainieren Sie Computer-Vision-Modelle, um mit Amazon SageMaker und Amazon Rekognition | Fahrzeugpositionen in Bildern zu erkennen Amazon Web Services PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.David Sauerwein ist Senior Data Scientist bei AWS Professional Services, wo er Kunden auf ihrer KI/ML-Reise in der AWS-Cloud unterstützt. David konzentriert sich auf digitale Zwillinge, Prognosen und Quantenberechnungen. Er hat einen Doktortitel in theoretischer Physik von der Universität Innsbruck, Österreich. Außerdem war er Doktorand und Postdoktorand am Max-Planck-Institut für Quantenoptik in Deutschland. In seiner Freizeit liest er gerne, fährt Ski und verbringt Zeit mit seiner Familie.

Erstellen und trainieren Sie Computer-Vision-Modelle, um mit Amazon SageMaker und Amazon Rekognition | Fahrzeugpositionen in Bildern zu erkennen Amazon Web Services PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Srikrishna Chaitanya Konduru ist Senior Data Scientist bei AWS Professional Services. Er unterstützt Kunden beim Prototyping und der Operationalisierung ihrer ML-Anwendungen auf AWS. Srikrishna konzentriert sich auf Computer Vision und NLP. Er leitet außerdem Initiativen zum Design von ML-Plattformen und zur Identifizierung von Anwendungsfällen für Kunden aus verschiedenen Branchen. Srikrishna hat einen M.Sc. in Biomedizintechnik von der RWTH Aachen, Deutschland, mit Schwerpunkt auf medizinischer Bildgebung.

Erstellen und trainieren Sie Computer-Vision-Modelle, um mit Amazon SageMaker und Amazon Rekognition | Fahrzeugpositionen in Bildern zu erkennen Amazon Web Services PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Ahmed Mansour ist Datenwissenschaftler bei AWS Professional Services. Er bietet Kunden technischen Support auf ihrer KI/ML-Reise in der AWS-Cloud. Ahmed konzentriert sich neben RL auf Anwendungen von NLP auf die Proteindomäne. Er hat einen Doktortitel in Ingenieurwissenschaften von der Technischen Universität München, Deutschland. In seiner Freizeit geht er gerne ins Fitnessstudio und spielt mit seinen Kindern.

Zeitstempel:

Mehr von AWS Maschinelles Lernen