Bouw en train computervisiemodellen om autoposities in afbeeldingen te detecteren met behulp van Amazon SageMaker en Amazon Rekognition | Amazon-webservices

Bouw en train computervisiemodellen om autoposities in afbeeldingen te detecteren met behulp van Amazon SageMaker en Amazon Rekognition | Amazon-webservices

Computer vision (CV) is een van de meest voorkomende toepassingen van machine learning (ML) en deep learning. Gebruiksscenario's variëren van zelfrijdende auto's, contentmoderatie op sociale-mediaplatforms, kankerdetectie en geautomatiseerde defectdetectie. Amazon Rekognition is een volledig beheerde service die CV-taken kan uitvoeren zoals objectdetectie, videosegmentdetectie, contentmoderatie en meer om inzichten uit gegevens te extraheren zonder dat enige voorafgaande ML-ervaring nodig is. In sommige gevallen kan naast de service ook een meer op maat gemaakte oplossing nodig zijn om een ​​zeer specifiek probleem op te lossen.

In dit bericht behandelen we gebieden waar CV kan worden toegepast om gevallen te gebruiken waarin de houding van objecten, hun positie en oriëntatie belangrijk zijn. Een voorbeeld van zo'n gebruiksscenario zijn klantgerichte mobiele applicaties waarbij het uploaden van afbeeldingen vereist is. Dit kan zijn vanwege nalevingsredenen of om een ​​consistente gebruikerservaring te bieden en de betrokkenheid te verbeteren. Op online winkelplatforms heeft de hoek waarin producten in afbeeldingen worden weergegeven bijvoorbeeld invloed op de snelheid waarmee dit product wordt gekocht. Eén voorbeeld hiervan is het detecteren van de positie van een auto. We demonstreren hoe u bekende ML-oplossingen kunt combineren met nabewerking om dit probleem op de AWS Cloud aan te pakken.

We gebruiken deep learning-modellen om dit probleem op te lossen. Het trainen van ML-algoritmen voor pose-schatting vereist veel expertise en aangepaste trainingsgegevens. Beide vereisten zijn moeilijk en kostbaar om te verkrijgen. Daarom presenteren we twee opties: een die geen ML-expertise vereist en Amazon Rekognition gebruikt, en een andere die gebruik maakt van Amazon Sage Maker om een ​​aangepast ML-model te trainen en te implementeren. Bij de eerste optie gebruiken we Amazon Rekognition om de wielen van de auto te detecteren. Vervolgens leiden we de oriëntatie van de auto af uit de wielposities met behulp van een op regels gebaseerd systeem. Bij de tweede optie detecteren we de wielen en andere auto-onderdelen met behulp van de Detecteren model. Deze worden opnieuw gebruikt om de autopositie af te leiden met op regels gebaseerde code. De tweede optie vereist ML-ervaring, maar is ook beter aanpasbaar. Het kan worden gebruikt voor verdere nabewerking van de afbeelding, bijvoorbeeld om de hele auto uit te snijden. Beide opties kunnen worden getraind op openbaar beschikbare datasets. Ten slotte laten we zien hoe u deze oplossing voor autopositiedetectie kunt integreren in uw bestaande webapplicatie met behulp van diensten zoals Amazon API-gateway en AWS versterken.

Overzicht oplossingen

Het volgende diagram illustreert de oplossingsarchitectuur.

Bouw en train computer vision-modellen om autoposities in afbeeldingen te detecteren met behulp van Amazon SageMaker en Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

De oplossing bestaat uit een nep-webapplicatie in Amplify waar een gebruiker een afbeelding kan uploaden en het Amazon Rekognition-model of het aangepaste Detectron-model kan aanroepen om de positie van de auto te detecteren. Voor elke optie hosten we een AWS Lambda functioneren achter een API Gateway die wordt blootgesteld aan onze nep-applicatie. We hebben onze Lambda-functie geconfigureerd om te werken met het Detectron-model dat is getraind in SageMaker of Amazon Rekognition.

Voorwaarden

Voor deze walkthrough moet u aan de volgende vereisten voldoen:

Maak een serverloze app met Amazon Rekognition

Onze eerste optie laat zien hoe je de oriëntatie van auto's in afbeeldingen kunt detecteren met behulp van Amazon Rekognition. Het idee is om Amazon Rekognition te gebruiken om de locatie van de auto en de wielen te detecteren en vervolgens nabewerking uit te voeren om uit deze informatie de oriëntatie van de auto af te leiden. De hele oplossing wordt geïmplementeerd met behulp van Lambda, zoals weergegeven in de Github-repository. Deze map bevat twee hoofdbestanden: een Docker-bestand dat de Docker-image definieert die in onze Lambda-functie zal worden uitgevoerd, en de app.py bestand, dat het belangrijkste toegangspunt van de Lambda-functie zal zijn:

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

De Lambda-functie verwacht een gebeurtenis die een header en body bevat, waarbij de body de afbeelding moet zijn die moet worden gelabeld als een base64-gedecodeerd object. Gezien het imago, de Amazon Rekognition detect_labels functie wordt aangeroepen vanuit de Lambda-functie met behulp van Boto3. De functie retourneert een of meer labels voor elk object in de afbeelding en de details van het begrenzingsvak voor alle gedetecteerde objectlabels als onderdeel van het antwoord, samen met andere informatie zoals de betrouwbaarheid van het toegewezen label, de bovenliggende labels van het gedetecteerde label, eventuele aliassen voor het label en de categorieën waartoe het gedetecteerde label behoort. Op basis van de labels die door Amazon Rekognition zijn geretourneerd, voeren we de functie uit label_image, dat de autohoek als volgt berekent op basis van de gedetecteerde wielen:

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

Houd er rekening mee dat de applicatie vereist dat er slechts één auto in de afbeelding aanwezig is en een foutmelding retourneert als dat niet het geval is. De nabewerking kan echter worden aangepast om gedetailleerdere oriëntatiebeschrijvingen te geven, meerdere auto's te bestrijken of de oriëntatie van complexere objecten te berekenen.

Verbeter de wieldetectie

Om de nauwkeurigheid van de wieldetectie verder te verbeteren, kunt u gebruik maken van Aangepaste labels voor Amazon-herkenning. Net als bij het verfijnen met SageMaker om een ​​aangepast ML-model te trainen en te implementeren, kunt u uw eigen gelabelde gegevens meenemen, zodat Amazon Rekognition in slechts een paar uur een aangepast beeldanalysemodel voor u kan produceren. Met Rekognition Custom Labels heeft u slechts een kleine set trainingsafbeeldingen nodig die specifiek zijn voor uw gebruiksscenario, in dit geval autoafbeeldingen met specifieke hoeken, omdat het gebruikmaakt van de bestaande mogelijkheden in Amazon Rekognition om te worden getraind op tientallen miljoenen afbeeldingen verspreid over veel categorieën. Rekognition Custom Labels kunnen met slechts een paar klikken en kleine aanpassingen worden geïntegreerd in de Lambda-functie die we gebruiken voor de standaard Amazon Rekognition-oplossing.

Train een model met behulp van een SageMaker-trainingstaak

In onze tweede optie trainen we een aangepast deep learning-model op SageMaker. Wij gebruiken de Het Detector2-framework voor de segmentatie van auto-onderdelen. Deze segmenten worden vervolgens gebruikt om de positie van de auto af te leiden.

Het Detectron2-framework is een bibliotheek die geavanceerde detectie- en segmentatie-algoritmen biedt. Detectron biedt een verscheidenheid aan Mask R-CNN-modellen die zijn getraind op de beroemde COCO-dataset (Common Objects In Context). Om ons detectiemodel voor auto-objecten te bouwen, gebruiken we transfer learning om een ​​vooraf getraind Mask R-CNN-model op de segmentatie van auto-onderdelen gegevensset. Met deze dataset kunnen we een model trainen dat wielen maar ook andere auto-onderdelen kan detecteren. Deze aanvullende informatie kan verder worden gebruikt bij de autohoekberekeningen ten opzichte van het beeld.

De dataset bevat geannoteerde gegevens van auto-onderdelen die kunnen worden gebruikt voor objectdetectie en semantische segmentatietaken: ongeveer 500 afbeeldingen van sedans, pick-ups en SUV's, genomen in meerdere weergaven (voor-, achter- en zijaanzichten). Elke afbeelding wordt geannoteerd door 18 instantiemaskers en selectiekaders die de verschillende delen van een auto vertegenwoordigen, zoals wielen, spiegels, verlichting en voor- en achterruit. We hebben de basisannotaties van de wielen zodanig aangepast dat elk wiel als een afzonderlijk object wordt beschouwd in plaats van alle beschikbare wielen in de afbeelding als één object te beschouwen.

Wij gebruiken Amazon eenvoudige opslagservice (Amazon S3) om de dataset op te slaan die wordt gebruikt voor het trainen van het Detectron-model, samen met de getrainde modelartefacten. Bovendien wordt de Docker-container opgeslagen die in de Lambda-functie draait Amazon Elastic Container-register (Amazone ECR). De Docker-container in de Lambda-functie is nodig om de vereiste bibliotheken en afhankelijkheden op te nemen voor het uitvoeren van de code. We zouden het ook kunnen gebruiken Lambda-lagen, maar het is beperkt tot een uitgepakt quotum voor de pakketgrootte van 250 MB en er kunnen maximaal vijf lagen worden toegevoegd aan een Lambda-functie.

Onze oplossing is gebouwd op SageMaker: we breiden prebuilt uit SageMaker Docker-containers zodat PyTorch onze aangepaste PyTorch kan uitvoeren trainingscode. Vervolgens gebruiken we de SageMaker Python SDK om de trainingsafbeelding in een SageMaker PyTorch-schatter te plaatsen, zoals weergegeven in de volgende codefragmenten:

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)

Ten slotte starten we de trainingstaak door te bellen naar de fit() functie op de gemaakte PyTorch-schatter. Wanneer de training is voltooid, wordt het getrainde modelartefact opgeslagen in de sessiebucket in Amazon S3 om te worden gebruikt voor de gevolgtrekkingspijplijn.

Implementeer het model met behulp van SageMaker en inferentiepijplijnen

We gebruiken SageMaker ook om het inferentie-eindpunt te hosten waarop ons aangepaste Detectron-model draait. De volledige infrastructuur die wordt gebruikt om onze oplossing te implementeren, wordt ingericht met behulp van de AWS CDK. We kunnen ons aangepaste model hosten via een SageMaker realtime eindpunt door te bellen deploy op de PyTorch-schatter. Dit is de tweede keer dat we een vooraf gebouwde SageMaker PyTorch-container uitbreiden met PyTorch Detectron. We gebruiken het om het inferentiescript uit te voeren en ons getrainde PyTorch-model als volgt te 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)

Houd er rekening mee dat we voor de implementatie een ml.g4dn.xlarge GPU hebben gebruikt, omdat dit de kleinste beschikbare GPU is en voldoende voor deze demo. Er moeten twee componenten worden geconfigureerd in onze inferentiescript: model laden en model serveren. De functie model_fn() wordt gebruikt om het getrainde model te laden dat deel uitmaakt van de gehoste Docker-container en kan ook worden gevonden in Amazon S3 en retourneert een modelobject dat als volgt kan worden gebruikt voor modeldiensten:

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)

De functie predict_fn() voert de voorspelling uit en retourneert het resultaat. Naast het gebruik van ons getrainde model, gebruiken we een vooraf getrainde versie van het Mask R-CNN-model, getraind op de COCO-dataset, om de hoofdauto in de afbeelding te extraheren. Dit is een extra nabewerkingsstap voor het verwerken van afbeeldingen waarbij meer dan één auto aanwezig is. Zie de volgende 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

Net als bij de Amazon Rekognition-oplossing voorspelden de selectiekaders voor de wheel klasse worden gefilterd uit de detectie-uitgangen en geleverd aan de naverwerkingsmodule om de positie van de auto ten opzichte van de uitgang te beoordelen.

Ten slotte hebben we ook de nabewerking voor de Detectron-oplossing verbeterd. Het maakt ook gebruik van de segmenten van verschillende auto-onderdelen om de oplossing af te leiden. Wanneer bijvoorbeeld een voorbumper wordt gedetecteerd, maar geen achterbumper, wordt ervan uitgegaan dat we een vooraanzicht van de auto hebben en wordt de bijbehorende hoek berekend.

Koppel uw oplossing aan de webapplicatie

De stappen om de modeleindpunten te verbinden met Amplify zijn als volgt:

  • Kloon de applicatierepository die de AWS CDK-stack heeft gemaakt, met de naam car-angle-detection-website-repo. Zorg ervoor dat u ernaar zoekt in de regio die u voor de inzet hebt gebruikt.
  • Kopieer de API Gateway-eindpunten voor elk van de geïmplementeerde Lambda-functies naar de index.html bestand in de voorgaande repository (er zijn tijdelijke aanduidingen waar het eindpunt moet worden geplaatst). De volgende code is een voorbeeld van hoe dit gedeelte van het .html-bestand eruit ziet:
<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>

  • Sla het HTML-bestand op en push de codewijziging naar de externe hoofdvertakking.

Hiermee wordt het HTML-bestand in de implementatie bijgewerkt. De applicatie is nu klaar voor gebruik.

  • Navigeer naar de Amplify-console en zoek het project dat u hebt gemaakt.

De applicatie-URL is zichtbaar nadat de implementatie is voltooid.

  • Navigeer naar de URL en veel plezier met de gebruikersinterface.

Bouw en train computer vision-modellen om autoposities in afbeeldingen te detecteren met behulp van Amazon SageMaker en Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Conclusie

Gefeliciteerd! We hebben een complete serverloze architectuur geïmplementeerd waarin we Amazon Rekognition hebben gebruikt, maar ook een optie hebben gegeven voor uw eigen aangepaste model, waarbij dit voorbeeld beschikbaar is op GitHub. Als u niet over ML-expertise in uw team beschikt of niet over voldoende aangepaste gegevens beschikt om een ​​model te trainen, kunt u de optie selecteren die Amazon Rekognition gebruikt. Als u meer controle over uw model wilt, het verder wilt aanpassen en over voldoende gegevens beschikt, kunt u kiezen voor de SageMaker-oplossing. Als je een team van datawetenschappers hebt, willen zij misschien ook de modellen verder verbeteren en een meer aangepaste en flexibele optie kiezen. U kunt de Lambda-functie en de API Gateway achter uw webapplicatie plaatsen met een van beide opties. U kunt deze aanpak ook gebruiken voor een ander gebruik waarvoor u de code mogelijk wilt aanpassen.

Het voordeel van deze serverless architectuur is dat de bouwstenen volledig uitwisselbaar zijn. De mogelijkheden zijn vrijwel onbeperkt. Begin dus vandaag nog!

Zoals altijd verwelkomt AWS feedback. Dien uw opmerkingen of vragen in.


Over de auteurs

Bouw en train computer vision-modellen om autoposities in afbeeldingen te detecteren met behulp van Amazon SageMaker en Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.Michaël Wallner is een Senior Consultant Data & AI bij AWS Professional Services en heeft een passie om klanten in staat te stellen op hun reis datagedreven en AWSome in de AWS-cloud te worden. Bovendien houdt hij ervan om groots te denken met klanten, om te innoveren en nieuwe ideeën voor hen te bedenken.

Bouw en train computer vision-modellen om autoposities in afbeeldingen te detecteren met behulp van Amazon SageMaker en Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.Aamna Najmi is een datawetenschapper bij AWS Professional Services. Ze heeft een passie voor het helpen van klanten bij het innoveren met Big Data- en Artificial Intelligence-technologieën om bedrijfswaarde en inzichten uit data te halen. Ze heeft ervaring met het werken aan dataplatform- en AI/ML-projecten in de verticale gezondheidszorg en life sciences. In haar vrije tijd houdt ze van tuinieren en reizen naar nieuwe plekken.

Bouw en train computer vision-modellen om autoposities in afbeeldingen te detecteren met behulp van Amazon SageMaker en Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.David Sauerwein is Senior Data Scientist bij AWS Professional Services, waar hij klanten begeleidt op hun AI/ML-reis in de AWS-cloud. David richt zich op digitale tweelingen, prognoses en kwantumberekeningen. Hij heeft een doctoraat in de theoretische natuurkunde van de Universiteit van Innsbruck, Oostenrijk. Hij was ook doctoraal en postdoctoraal onderzoeker aan het Max-Planck-Instituut voor Quantum Optics in Duitsland. In zijn vrije tijd houdt hij van lezen, skiën en tijd doorbrengen met zijn gezin.

Bouw en train computer vision-modellen om autoposities in afbeeldingen te detecteren met behulp van Amazon SageMaker en Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.Srikrishna Chaitanya Konduru is een Senior Data Scientist met AWS Professional-services. Hij ondersteunt klanten bij het prototypen en operationeel maken van hun ML-applicaties op AWS. Srikrishna richt zich op computer vision en NLP. Hij leidt ook ML-platformontwerp en use case-identificatie-initiatieven voor klanten in diverse verticale sectoren. Srikrishna heeft een M.Sc in Biomedische Technologie van de RWTH Universiteit van Aken, Duitsland, met een focus op medische beeldvorming.

Bouw en train computer vision-modellen om autoposities in afbeeldingen te detecteren met behulp van Amazon SageMaker en Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.Ahmed Mansour is een datawetenschapper bij AWS Professional Services. Hij biedt technische ondersteuning aan klanten tijdens hun AI/ML-reis in de AWS-cloud. Ahmed richt zich naast RL op toepassingen van NLP op het eiwitdomein. Hij heeft een PhD in Engineering behaald aan de Technische Universiteit van München, Duitsland. In zijn vrije tijd gaat hij graag naar de sportschool en speelt hij graag met zijn kinderen.

Tijdstempel:

Meer van AWS-machine learning