Bygg og tren datamaskinsynsmodeller for å oppdage bilposisjoner i bilder ved hjelp av Amazon SageMaker og Amazon Rekognition | Amazon Web Services

Bygg og tren datamaskinsynsmodeller for å oppdage bilposisjoner i bilder ved hjelp av Amazon SageMaker og Amazon Rekognition | Amazon Web Services

Datasyn (CV) er en av de vanligste bruksområdene for maskinlæring (ML) og dyp læring. Brukstilfeller spenner fra selvkjørende biler, innholdsmoderering på sosiale medieplattformer, kreftoppdagelse og automatisert feiloppdagelse. Amazon-anerkjennelse er en fullstendig administrert tjeneste som kan utføre CV-oppgaver som objektgjenkjenning, videosegmentdeteksjon, innholdsmoderering og mer for å trekke ut innsikt fra data uten behov for noen tidligere ML-erfaring. I noen tilfeller kan det være nødvendig med en mer tilpasset løsning sammen med tjenesten for å løse et veldig spesifikt problem.

I dette innlegget tar vi for oss områder der CV kan brukes til brukssaker der posisjonen til objekter, deres posisjon og orientering er viktig. En slik brukstilfelle vil være kundevendte mobilapplikasjoner der en bildeopplasting er nødvendig. Det kan være av hensyn til samsvar eller for å gi en konsistent brukeropplevelse og forbedre engasjementet. For eksempel, på nettbaserte shoppingplattformer, har vinkelen som produktene vises i bilder en effekt på kjøpshastigheten for dette produktet. Et slikt tilfelle er å oppdage posisjonen til en bil. Vi viser hvordan du kan kombinere velkjente ML-løsninger med etterbehandling for å løse dette problemet på AWS Cloud.

Vi bruker dyplæringsmodeller for å løse dette problemet. Trening av ML-algoritmer for positur-estimering krever mye ekspertise og tilpassede treningsdata. Begge kravene er vanskelige og kostbare å oppnå. Derfor presenterer vi to alternativer: ett som ikke krever noen ML-ekspertise og bruker Amazon Rekognition, og et annet som bruker Amazon SageMaker å trene og distribuere en tilpasset ML-modell. I det første alternativet bruker vi Amazon Rekognition for å oppdage hjulene på bilen. Vi utleder deretter bilens orientering fra hjulposisjonene ved å bruke et regelbasert system. I det andre alternativet oppdager vi hjulene og andre bildeler ved hjelp av Detektron modell. Disse brukes igjen til å utlede bilens posisjon med regelbasert kode. Det andre alternativet krever ML-erfaring, men er også mer tilpassbart. Den kan brukes til videre etterbehandling av bildet, for eksempel for å beskjære hele bilen. Begge alternativene kan trenes på offentlig tilgjengelige datasett. Til slutt viser vi hvordan du kan integrere denne løsningen for bilstillingsdeteksjon i din eksisterende nettapplikasjon ved å bruke tjenester som Amazon API-gateway og AWS forsterke.

Løsningsoversikt

Følgende diagram illustrerer løsningsarkitekturen.

Bygg og tren datamaskinsynsmodeller for å oppdage bilposisjoner i bilder ved hjelp av Amazon SageMaker og Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Løsningen består av en mock webapplikasjon i Amplify hvor en bruker kan laste opp et bilde og påkalle enten Amazon Rekognition-modellen eller den tilpassede Detectron-modellen for å oppdage posisjonen til bilen. For hvert alternativ er vi vert for en AWS Lambda funksjon bak en API-gateway som er utsatt for vår falske applikasjon. Vi konfigurerte Lambda-funksjonen vår til å kjøre med enten Detectron-modellen opplært i SageMaker eller Amazon Rekognition.

Forutsetninger

For dette gjennomgangen bør du ha følgende forutsetninger:

Lag en serverløs app med Amazon Rekognition

Vårt første alternativ viser hvordan du kan oppdage bilretninger i bilder ved hjelp av Amazon Rekognition. Ideen er å bruke Amazon Rekognition for å oppdage plasseringen av bilen og dens hjul og deretter gjøre etterbehandling for å utlede orienteringen til bilen fra denne informasjonen. Hele løsningen er distribuert ved hjelp av Lambda som vist i Github depot. Denne mappen inneholder to hovedfiler: en Dockerfil som definerer Docker-bildet som skal kjøres i Lambda-funksjonen vår, og app.py fil, som vil være hovedinngangspunktet for Lambda-funksjonen:

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-funksjonen forventer en hendelse som inneholder en overskrift og brødtekst, der kroppen skal være bildet som trengs for å bli merket som base64-dekodet objekt. Gitt bildet, Amazon Rekognition detect_labels funksjonen påkalles fra Lambda-funksjonen ved hjelp av Boto3. Funksjonen returnerer én eller flere etiketter for hvert objekt i bildet og avgrensningsrammedetaljer for alle de oppdagede objektetikettene som en del av responsen, sammen med annen informasjon som tilliten til den tildelte etiketten, stamfaretikettene til den oppdagede etiketten, mulig aliaser for etiketten, og kategoriene den oppdagede etiketten tilhører. Basert på etikettene som returneres av Amazon Rekognition, kjører vi funksjonen label_image, som beregner bilvinkelen fra de oppdagede hjulene 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]]]

Merk at applikasjonen krever at kun én bil er til stede i bildet og returnerer en feil hvis det ikke er tilfelle. Imidlertid kan etterbehandlingen tilpasses for å gi mer granulære orienteringsbeskrivelser, dekke flere biler, eller beregne orienteringen til mer komplekse objekter.

Forbedre hjuldeteksjon

For ytterligere å forbedre nøyaktigheten til hjuldeteksjonen kan du bruke Amazon Rekognition Egendefinerte etiketter. I likhet med finjustering ved å bruke SageMaker til å trene og distribuere en tilpasset ML-modell, kan du ta med dine egne merkede data slik at Amazon Rekognition kan produsere en tilpasset bildeanalysemodell for deg på bare noen få timer. Med Rekognition Custom Labels trenger du bare et lite sett med treningsbilder som er spesifikke for bruksområdet ditt, i dette tilfellet bilbilder med spesifikke vinkler, fordi det bruker de eksisterende mulighetene i Amazon Rekognition for å bli trent på titalls millioner bilder på tvers av mange kategorier. Rekognition Custom Labels kan integreres med kun noen få klikk og små tilpasninger til Lambda-funksjonen vi bruker for standard Amazon Rekognition-løsning.

Tren en modell ved å bruke en SageMaker-treningsjobb

I vårt andre alternativ trener vi en tilpasset dyplæringsmodell på SageMaker. Vi bruker Detectron2 rammeverk for segmentering av bildeler. Disse segmentene brukes deretter til å utlede posisjonen til bilen.

Detectron2-rammeverket er et bibliotek som gir state-of-the-art deteksjons- og segmenteringsalgoritmer. Detectron tilbyr en rekke Mask R-CNN-modeller som ble trent på det berømte COCO-datasettet (Common objects in Context). For å bygge vår bilobjektdeteksjonsmodell bruker vi overføringslæring for å finjustere en forhåndstrent Mask R-CNN-modell på segmentering av bildeler datasett. Dette datasettet lar oss trene en modell som kan oppdage hjul, men også andre bildeler. Denne tilleggsinformasjonen kan brukes videre i bilvinkelberegningene i forhold til bildet.

Datasettet inneholder kommenterte data om bildeler som skal brukes til objektdeteksjon og semantiske segmenteringsoppgaver: omtrent 500 bilder av sedaner, pickuper og sportsbrukskjøretøyer (SUV), tatt i flere visninger (front, bak og sidevisning). Hvert bilde er kommentert av 18 forekomstmasker og avgrensningsbokser som representerer de forskjellige delene av en bil som hjul, speil, lys og front- og bakglass. Vi modifiserte grunnkommentarene til hjulene slik at hvert hjul betraktes som et individuelt objekt i stedet for å betrakte alle tilgjengelige hjul i bildet som ett objekt.

Vi bruker Amazon enkel lagringstjeneste (Amazon S3) for å lagre datasettet som brukes til å trene Detectron-modellen sammen med de trente modellartefaktene. Dessuten er Docker-beholderen som kjører i Lambda-funksjonen lagret i Amazon Elastic Container Registry (Amazon ECR). Docker-beholderen i Lambda-funksjonen er nødvendig for å inkludere de nødvendige bibliotekene og avhengighetene for å kjøre koden. Vi kan alternativt bruke Lambdalag, men det er begrenset til en utpakket distribusjonspakkestørrelseskvote på 250 MB og maksimalt fem lag kan legges til en Lambda-funksjon.

Vår løsning er bygget på SageMaker: vi utvider forhåndsbygget SageMaker Docker containere for at PyTorch skal kjøre vår egendefinerte PyTorch treningskode. Deretter bruker vi SageMaker Python SDK for å pakke treningsbildet inn i en SageMaker PyTorch-estimator, som vist i følgende kodebiter:

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 slutt starter vi treningsjobben ved å ringe til fit() funksjon på den opprettede PyTorch-estimatoren. Når treningen er ferdig, lagres den trente modellartefakten i øktbøtta i Amazon S3 for å brukes til inferensrørledningen.

Distribuer modellen ved å bruke SageMaker og inferensrørledninger

Vi bruker også SageMaker til å være vert for inferensendepunktet som kjører vår tilpassede Detectron-modell. Hele infrastrukturen som brukes til å distribuere løsningen vår, klargjøres ved hjelp av AWS CDK. Vi kan være vert for vår tilpassede modell gjennom en SageMaker sanntidsendepunkt ved å ringe deploy på PyTorch-estimatoren. Dette er andre gang vi utvider en forhåndsbygd SageMaker PyTorch-beholder til å inkludere PyTorch Detectron. Vi bruker den til å kjøre inferensskriptet og er vert for vår trente PyTorch-modell 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)

Legg merke til at vi brukte en ml.g4dn.xlarge GPU for distribusjon fordi det er den minste GPU som er tilgjengelig og tilstrekkelig for denne demoen. To komponenter må konfigureres i vår slutningsskrift: modelllasting og modellservering. Funksjonen model_fn() brukes til å laste den opplærte modellen som er en del av den vertsbaserte Docker-beholderen og kan også finnes i Amazon S3 og returnere et modellobjekt som kan brukes for modellservering 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)

Funksjonen predict_fn() utfører prediksjonen og returnerer resultatet. I tillegg til å bruke vår trente modell, bruker vi en forhåndstrent versjon av Mask R-CNN-modellen trent på COCO-datasettet for å trekke ut hovedbilen i bildet. Dette er et ekstra etterbehandlingstrinn for å håndtere bilder der det finnes mer enn é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 likhet med Amazon Rekognition-løsningen, spådde grenseboksene for wheel klasse filtreres fra deteksjonsutgangene og leveres til etterbehandlingsmodulen for å vurdere bilens posisjon i forhold til utgangen.

Til slutt forbedret vi også etterbehandlingen for Detectron-løsningen. Den bruker også segmentene til forskjellige bildeler for å utlede løsningen. For eksempel, når det oppdages en støtfanger foran, men ingen støtfanger bak, antas det at vi har et frontbilde av bilen og den tilsvarende vinkelen beregnes.

Koble løsningen din til nettapplikasjonen

Trinnene for å koble modellendepunktene til Amplify er som følger:

  • Klon applikasjonslageret som AWS CDK-stakken opprettet, navngitt car-angle-detection-website-repo. Sørg for at du leter etter den i regionen du brukte til distribusjon.
  • Kopier API Gateway-endepunktene for hver av de utplasserte Lambda-funksjonene til index.html fil i det foregående depotet (det er plassholdere der endepunktet må plasseres). Følgende kode er et eksempel på hvordan denne delen av HTML-filen ser ut:
<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>

  • Lagre HTML-filen og skyv kodeendringen til den eksterne hovedgrenen.

Dette vil oppdatere HTML-filen i distribusjonen. Applikasjonen er nå klar til bruk.

  • Naviger til Amplify-konsollen og finn prosjektet du opprettet.

Applikasjons-URLen vil være synlig etter at distribusjonen er fullført.

  • Naviger til URL-en og ha det gøy med brukergrensesnittet.

Bygg og tren datamaskinsynsmodeller for å oppdage bilposisjoner i bilder ved hjelp av Amazon SageMaker og Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

konklusjonen

Gratulerer! Vi har distribuert en komplett serverløs arkitektur der vi brukte Amazon Rekognition, men også ga en mulighet for din egen tilpassede modell, med dette eksemplet tilgjengelig på GitHub. Hvis du ikke har ML-ekspertise i teamet ditt eller nok tilpassede data til å trene en modell, kan du velge alternativet som bruker Amazon Rekognition. Ønsker du mer kontroll over modellen din, ønsker å tilpasse den ytterligere, og har nok data, kan du velge SageMaker-løsningen. Hvis du har et team av dataforskere, vil de kanskje også forbedre modellene ytterligere og velge et mer tilpasset og fleksibelt alternativ. Du kan plassere Lambda-funksjonen og API-gatewayen bak nettapplikasjonen din ved å bruke ett av de to alternativene. Du kan også bruke denne tilnærmingen for en annen brukssituasjon som du kanskje vil tilpasse koden for.

Fordelen med denne serverløse arkitekturen er at byggeklossene er fullstendig utskiftbare. Mulighetene er nesten ubegrensede. Så kom i gang i dag!

Som alltid tar AWS gjerne tilbakemeldinger. Send inn eventuelle kommentarer eller spørsmål.


Om forfatterne

Bygg og tren datamaskinsynsmodeller for å oppdage bilposisjoner i bilder ved hjelp av Amazon SageMaker og Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Michael Wallner er seniorkonsulent Data & AI med AWS Professional Services og brenner for å gjøre det mulig for kunder på deres reise å bli datadrevne og AWSome i AWS-skyen. På toppen liker han å tenke stort med kunder for å innovere og finne opp nye ideer for dem.

Bygg og tren datamaskinsynsmodeller for å oppdage bilposisjoner i bilder ved hjelp av Amazon SageMaker og Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Aamna Najmi er en dataforsker med AWS Professional Services. Hun brenner for å hjelpe kunder med å innovere med Big Data og Artificial Intelligence-teknologier for å utnytte forretningsverdi og innsikt fra data. Hun har erfaring med å jobbe med dataplattformer og AI/ML-prosjekter innen helsevesen og biovitenskap. På fritiden liker hun hagearbeid og reiser til nye steder.

Bygg og tren datamaskinsynsmodeller for å oppdage bilposisjoner i bilder ved hjelp av Amazon SageMaker og Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.David Sauerwein er Senior Data Scientist ved AWS Professional Services, hvor han lar kunder på deres AI/ML-reise på AWS-skyen. David fokuserer på digitale tvillinger, prognoser og kvanteberegning. Han har en doktorgrad i teoretisk fysikk fra Universitetet i Innsbruck, Østerrike. Han var også doktorgrads- og postdoktor ved Max-Planck-Institut for Quantum Optics i Tyskland. På fritiden elsker han å lese, stå på ski og tilbringe tid med familien.

Bygg og tren datamaskinsynsmodeller for å oppdage bilposisjoner i bilder ved hjelp av Amazon SageMaker og Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Srikrishna Chaitanya Konduru er en senior dataforsker med AWS Professional-tjenester. Han støtter kunder i prototyping og operasjonalisering av ML-applikasjonene deres på AWS. Srikrishna fokuserer på datasyn og NLP. Han leder også ML-plattformdesign og brukscaseidentifikasjonsinitiativer for kunder på tvers av ulike bransjevertikaler. Srikrishna har en M.Sc i biomedisinsk ingeniørvitenskap fra RWTH Aachen-universitetet, Tyskland, med fokus på medisinsk bildebehandling.

Bygg og tren datamaskinsynsmodeller for å oppdage bilposisjoner i bilder ved hjelp av Amazon SageMaker og Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Ahmed Mansour er dataforsker ved AWS Professional Services. Han gir teknisk støtte til kunder gjennom deres AI/ML-reise på AWS-skyen. Ahmed fokuserer på anvendelser av NLP til proteindomenet sammen med RL. Han har en doktorgrad i ingeniørfag fra det tekniske universitetet i München, Tyskland. På fritiden elsker han å gå på treningsstudio og leke med barna sine.

Tidstempel:

Mer fra AWS maskinlæring