Byg og træne computervisionsmodeller til at registrere bilpositioner i billeder ved hjælp af Amazon SageMaker og Amazon Rekognition | Amazon Web Services

Byg og træne computervisionsmodeller til at registrere bilpositioner i billeder ved hjælp af Amazon SageMaker og Amazon Rekognition | Amazon Web Services

Computer vision (CV) er en af ​​de mest almindelige anvendelser af machine learning (ML) og deep learning. Brugstilfælde spænder fra selvkørende biler, indholdsmoderering på sociale medieplatforme, opdagelse af kræft og automatisk defektdetektering. Amazon-anerkendelse er en fuldt administreret tjeneste, der kan udføre CV-opgaver som objektdetektion, videosegmentdetektion, indholdsmoderering og mere for at udtrække indsigt fra data uden behov for nogen forudgående ML-erfaring. I nogle tilfælde kan det være nødvendigt med en mere tilpasset løsning sammen med tjenesten for at løse et meget specifikt problem.

I dette indlæg behandler vi områder, hvor CV kan anvendes til at bruge tilfælde, hvor posituren af ​​objekter, deres placering og orientering er vigtig. En sådan anvendelse ville være kundevendte mobilapplikationer, hvor en billedupload er påkrævet. Det kan være af hensyn til overholdelse eller for at give en ensartet brugeroplevelse og forbedre engagementet. For eksempel, på online shopping platforme, har vinklen, hvormed produkter vises i billeder, en effekt på hastigheden af ​​køb af dette produkt. Et sådant tilfælde er at registrere en bils position. Vi demonstrerer, hvordan du kan kombinere velkendte ML-løsninger med postprocessing for at løse dette problem på AWS Cloud.

Vi bruger deep learning-modeller til at løse dette problem. Træning af ML-algoritmer til positur-estimering kræver en masse ekspertise og tilpassede træningsdata. Begge krav er svære og dyre at opnå. Derfor præsenterer vi to muligheder: en, der ikke kræver nogen ML-ekspertise og bruger Amazon Rekognition, og en anden, der bruger Amazon SageMaker at træne og implementere en tilpasset ML-model. I den første mulighed bruger vi Amazon Rekognition til at registrere bilens hjul. Vi udleder derefter bilens orientering ud fra hjulpositionerne ved hjælp af et regelbaseret system. I den anden mulighed registrerer vi hjulene og andre bildele ved hjælp af Detectron model. Disse bruges igen til at udlede bilens position med regelbaseret kode. Den anden mulighed kræver ML-erfaring, men er også mere tilpasselig. Den kan bruges til yderligere efterbehandling på billedet, for eksempel til at beskære hele bilen. Begge muligheder kan trænes på offentligt tilgængelige datasæt. Til sidst viser vi, hvordan du kan integrere denne løsning til registrering af bilstillinger i din eksisterende webapplikation ved hjælp af tjenester som f.eks Amazon API Gateway , AWS Amplify.

Løsningsoversigt

Følgende diagram illustrerer løsningsarkitekturen.

Build and train computer vision models to detect car positions in images using Amazon SageMaker and Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Løsningen består af en mock webapplikation i Amplify, hvor en bruger kan uploade et billede og påberåbe sig enten Amazon Rekognition-modellen eller den brugerdefinerede Detectron-model for at registrere bilens position. For hver mulighed er vi vært for en AWS Lambda funktion bag en API-gateway, der er udsat for vores mock-applikation. Vi konfigurerede vores Lambda-funktion til at køre med enten Detectron-modellen trænet i SageMaker eller Amazon Rekognition.

Forudsætninger

For denne gennemgang skal du have følgende forudsætninger:

Opret en serverløs app ved hjælp af Amazon Rekognition

Vores første mulighed viser, hvordan du kan registrere bilorienteringer i billeder ved hjælp af Amazon Rekognition. Ideen er at bruge Amazon Rekognition til at registrere placeringen af ​​bilen og dens hjul og derefter foretage efterbehandling for at udlede bilens orientering ud fra disse oplysninger. Hele løsningen implementeres ved hjælp af Lambda som vist i Github depot. Denne mappe indeholder to hovedfiler: en Dockerfil, der definerer Docker-billedet, der kører i vores Lambda-funktion, og app.py fil, som vil være hovedindgangspunktet for Lambda-funktionen:

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

Lambda-funktionen forventer en hændelse, der indeholder en header og body, hvor bodyen skal være det billede, der skal til for at blive mærket som base64-dekodet objekt. Givet billedet, Amazon-anerkendelsen detect_labels funktion påkaldes fra Lambda-funktionen vha Boto3. Funktionen returnerer en eller flere etiketter for hvert objekt i billedet og afgrænsningsrammens detaljer for alle de detekterede objektetiketter som en del af svaret, sammen med andre oplysninger, såsom tillid til den tildelte etiket, forfaderetiketterne for den detekterede etiket, evt. aliaser for etiketten, og de kategorier, den detekterede etiket tilhører. Baseret på de etiketter, der returneres af Amazon Rekognition, kører vi funktionen label_image, som beregner bilens vinkel ud fra de registrerede hjul som følger:

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

Bemærk, at applikationen kræver, at kun én bil er til stede på billedet og returnerer en fejl, hvis det ikke er tilfældet. Efterbehandlingen kan dog tilpasses til at give mere granulære orienteringsbeskrivelser, dække flere biler eller beregne orienteringen af ​​mere komplekse objekter.

Forbedre hjuldetektion

For yderligere at forbedre nøjagtigheden af ​​hjuldetektionen kan du bruge Tilpassede etiketter til Amazon-genkendelse. I lighed med finjustering ved at bruge SageMaker til at træne og implementere en brugerdefineret ML-model, kan du medbringe dine egne mærkede data, så Amazon Rekognition kan producere en tilpasset billedanalysemodel til dig på blot et par timer. Med Rekognition Custom Labels behøver du kun et lille sæt træningsbilleder, der er specifikke for dit brugstilfælde, i dette tilfælde bilbilleder med specifikke vinkler, fordi det bruger de eksisterende muligheder i Amazon Rekognition til at blive trænet på titusinder af billeder på tværs mange kategorier. Rekognition Custom Labels kan integreres med kun få klik og små tilpasninger til Lambda-funktionen, vi bruger til standard Amazon Rekognition-løsningen.

Træn en model ved hjælp af et SageMaker træningsjob

I vores anden mulighed træner vi en tilpasset dyb læringsmodel på SageMaker. Vi bruger Detectron2 rammeværk til segmentering af bildele. Disse segmenter bruges derefter til at udlede bilens position.

Detectron2-rammeværket er et bibliotek, der giver state-of-the-art detektions- og segmenteringsalgoritmer. Detectron leverer en række Mask R-CNN-modeller, der blev trænet på det berømte COCO-datasæt (Common objects in Context). For at bygge vores bilobjektdetektionsmodel bruger vi overførselslæring til at finjustere en fortrænet Mask R-CNN-model på segmentering af bildele datasæt. Dette datasæt giver os mulighed for at træne en model, der kan registrere hjul, men også andre bildele. Denne yderligere information kan bruges yderligere i bilens vinkelberegninger i forhold til billedet.

Datasættet indeholder annoterede data om bildele, der skal bruges til objektdetektering og semantiske segmenteringsopgaver: ca. 500 billeder af sedans, pickups og sportsbrugskøretøjer (SUV'er), taget i flere visninger (forfra, bagfra og fra siden). Hvert billede er kommenteret af 18 instansmasker og afgrænsningsfelter, der repræsenterer de forskellige dele af en bil som hjul, spejle, lys og front- og bagglas. Vi modificerede hjulenes basisannoteringer, så hvert hjul betragtes som et individuelt objekt i stedet for at betragte alle tilgængelige hjul i billedet som ét objekt.

Vi anvender Amazon Simple Storage Service (Amazon S3) for at gemme det datasæt, der bruges til træning af Detectron-modellen sammen med de trænede modelartefakter. Desuden er Docker-beholderen, der kører i Lambda-funktionen, gemt i Amazon Elastic Container Registry (Amazon ECR). Docker-beholderen i Lambda-funktionen er nødvendig for at inkludere de nødvendige biblioteker og afhængigheder til at køre koden. Vi kunne alternativt bruge Lambda lag, men det er begrænset til en udpakkede implementeringspakkestørrelseskvote på 250 MB, og der kan maksimalt tilføjes fem lag til en Lambda-funktion.

Vores løsning er bygget på SageMaker: vi udvider præbygget SageMaker Docker containere for PyTorch til at køre vores brugerdefinerede PyTorch træningskode. Dernæst bruger vi SageMaker Python SDK til at pakke træningsbilledet ind i en SageMaker PyTorch estimator, som vist i følgende kodestykker:

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)

Til sidst starter vi træningsjobbet ved at ringe til fit() funktion på den oprettede PyTorch-estimator. Når træningen er færdig, gemmes den trænede modelartefakt i sessionsbøtten i Amazon S3 for at blive brugt til inferenspipeline.

Implementer modellen ved hjælp af SageMaker og inferenspipelines

Vi bruger også SageMaker til at være vært for inferensslutpunktet, der kører vores tilpassede Detectron-model. Den fulde infrastruktur, der bruges til at implementere vores løsning, leveres ved hjælp af AWS CDK. Vi kan hoste vores tilpassede model gennem en SageMaker-endepunkt i realtid ved at ringe deploy på PyTorch-estimatoren. Det er anden gang, vi udvider en forudbygget SageMaker PyTorch-beholder til at omfatte PyTorch Detectron. Vi bruger det til at køre inferensscriptet og hoster vores trænede PyTorch-model som følger:

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)

Bemærk, at vi brugte en ml.g4dn.xlarge GPU til implementering, fordi det er den mindste tilgængelige GPU og tilstrækkelig til denne demo. To komponenter skal konfigureres i vores slutningsskrift: modelladning og modelservering. Funktionen model_fn() bruges til at indlæse den trænede model, der er en del af den hostede Docker-container og kan også findes i Amazon S3 og returnere et modelobjekt, der kan bruges til modelbetjening som følger:

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)

funktionen predict_fn() udfører forudsigelsen og returnerer resultatet. Udover at bruge vores trænede model, bruger vi en fortrænet version af Mask R-CNN-modellen trænet på COCO-datasættet til at udtrække hovedbilen i billedet. Dette er et ekstra efterbehandlingstrin for at håndtere billeder, hvor der findes mere end én bil. Se følgende kode:

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

I lighed med Amazon Rekognition-løsningen forudsigede afgrænsningsboksene for wheel klasse filtreres fra detektionsudgangene og leveres til efterbehandlingsmodulet for at vurdere bilens position i forhold til outputtet.

Endelig har vi også forbedret efterbehandlingen til Detectron-løsningen. Den bruger også segmenterne af forskellige bildele til at udlede løsningen. For eksempel, når der detekteres en forkofanger, men ingen bagkofanger, antages det, at vi har et billede forfra af bilen, og den tilsvarende vinkel beregnes.

Tilslut din løsning til webapplikationen

Trinene til at forbinde modelslutpunkterne til Amplify er som følger:

  • Klon det programlager, som AWS CDK-stakken oprettede, navngivet car-angle-detection-website-repo. Sørg for, at du leder efter det i den region, du brugte til implementeringen.
  • Kopier API Gateway-endepunkterne for hver af de implementerede Lambda-funktioner til index.html fil i det foregående lager (der er pladsholdere, hvor endepunktet skal placeres). Følgende kode er et eksempel på, hvordan denne sektion af .html-filen ser ud:
<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>

  • Gem HTML-filen, og skub kodeændringen til den eksterne hovedgren.

Dette vil opdatere HTML-filen i implementeringen. Applikationen er nu klar til brug.

  • Naviger til Amplify-konsollen, og find det projekt, du har oprettet.

Applikationens URL vil være synlig, når implementeringen er fuldført.

  • Naviger til URL'en og hav det sjovt med brugergrænsefladen.

Build and train computer vision models to detect car positions in images using Amazon SageMaker and Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Konklusion

Tillykke! Vi har implementeret en komplet serverløs arkitektur, hvor vi brugte Amazon Rekognition, men også gav mulighed for din egen brugerdefinerede model, med dette eksempel tilgængeligt på GitHub. Hvis du ikke har ML-ekspertise i dit team eller nok brugerdefinerede data til at træne en model, kan du vælge den mulighed, der bruger Amazon Rekognition. Hvis du ønsker mere kontrol over din model, gerne vil tilpasse den yderligere og har nok data, kan du vælge SageMaker-løsningen. Hvis du har et team af dataforskere, vil de måske også forbedre modellerne yderligere og vælge en mere tilpasset og fleksibel mulighed. Du kan placere Lambda-funktionen og API-gatewayen bag din webapplikation ved at bruge en af ​​de to muligheder. Du kan også bruge denne tilgang til en anden use case, som du måske ønsker at tilpasse koden til.

Fordelen ved denne serverløse arkitektur er, at byggeklodserne er fuldstændigt udskiftelige. Mulighederne er næsten ubegrænsede. Så kom i gang i dag!

Som altid modtager AWS gerne feedback. Indsend venligst eventuelle kommentarer eller spørgsmål.


Om forfatterne

Build and train computer vision models to detect car positions in images using Amazon SageMaker and Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Michael Wallner er Senior Consultant Data & AI med AWS Professional Services og brænder for at gøre det muligt for kunder på deres rejse at blive datadrevne og AWSome i AWS-skyen. Derudover kan han godt lide at tænke stort med kunderne for at innovere og opfinde nye ideer til dem.

Build and train computer vision models to detect car positions in images using Amazon SageMaker and Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Aamna Najmi er dataforsker med AWS Professional Services. Hun brænder for at hjælpe kunder med at innovere med Big Data og Artificial Intelligence-teknologier for at udnytte forretningsværdi og indsigt fra data. Hun har erfaring med at arbejde med dataplatforme og AI/ML-projekter inden for sundheds- og biovidenskabssektoren. I sin fritid nyder hun havearbejde og rejser til nye steder.

Build and train computer vision models to detect car positions in images using Amazon SageMaker and Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.David Sauerwein er Senior Data Scientist hos AWS Professional Services, hvor han sætter kunder i stand på deres AI/ML-rejse på AWS-skyen. David fokuserer på digitale tvillinger, prognoser og kvanteberegning. Han har en ph.d. i teoretisk fysik fra universitetet i Innsbruck, Østrig. Han var også doktor- og post-doc-forsker ved Max-Planck-instituttet for kvanteoptik i Tyskland. I sin fritid elsker han at læse, stå på ski og tilbringe tid med sin familie.

Build and train computer vision models to detect car positions in images using Amazon SageMaker and Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Srikrishna Chaitanya Konduru er en Senior Data Scientist med AWS Professional-tjenester. Han understøtter kunder i prototyping og operationalisering af deres ML-applikationer på AWS. Srikrishna fokuserer på computersyn og NLP. Han leder også initiativer til ML-platformdesign og brugscaseidentifikation for kunder på tværs af forskellige brancher. Srikrishna har en M.Sc i biomedicinsk teknik fra RWTH Aachen universitetet, Tyskland, med fokus på medicinsk billeddannelse.

Build and train computer vision models to detect car positions in images using Amazon SageMaker and Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Ahmed Mansour er Data Scientist hos AWS Professional Services. Han yder teknisk support til kunder gennem deres AI/ML-rejse på AWS-skyen. Ahmed fokuserer på anvendelser af NLP til proteindomænet sammen med RL. Han har en PhD i ingeniørvidenskab fra det tekniske universitet i München, Tyskland. I sin fritid elsker han at gå i fitnesscenter og lege med sine børn.

Tidsstempel:

Mere fra AWS maskinindlæring