Izdelajte in usposobite modele računalniškega vida za zaznavanje položajev avtomobilov na slikah z uporabo Amazon SageMaker in Amazon Rekognition | Spletne storitve Amazon

Izdelajte in usposobite modele računalniškega vida za zaznavanje položajev avtomobilov na slikah z uporabo Amazon SageMaker in Amazon Rekognition | Spletne storitve Amazon

Računalniški vid (CV) je ena najpogostejših aplikacij strojnega učenja (ML) in globokega učenja. Primeri uporabe segajo od samovozečih avtomobilov, moderiranja vsebin na platformah družbenih medijev, odkrivanja raka in avtomatiziranega odkrivanja napak. Amazonsko ponovno vžiganje je v celoti upravljana storitev, ki lahko izvaja naloge življenjepisa, kot so zaznavanje predmetov, zaznavanje segmentov videoposnetkov, moderiranje vsebine in drugo, da pridobi vpoglede iz podatkov, ne da bi potrebovali predhodne izkušnje z ML. V nekaterih primerih bo za rešitev zelo specifičnega problema skupaj s storitvijo morda potrebna rešitev po meri.

V tem prispevku obravnavamo področja, kjer je CV mogoče uporabiti za uporabo v primerih, kjer je pomembna poza predmetov, njihov položaj in orientacija. Eden takšnih primerov uporabe bi bile mobilne aplikacije, namenjene strankam, kjer je potrebno nalaganje slike. To je lahko zaradi skladnosti ali zagotavljanja dosledne uporabniške izkušnje in izboljšanja sodelovanja. Na primer, na spletnih nakupovalnih platformah kot, pod katerim so izdelki prikazani na slikah, vpliva na stopnjo nakupa tega izdelka. En tak primer je zaznavanje položaja avtomobila. Predstavljamo, kako lahko dobro znane rešitve ML združite s naknadno obdelavo, da rešite to težavo v oblaku AWS.

Za rešitev tega problema uporabljamo modele globokega učenja. Usposabljanje algoritmov ML za oceno položaja zahteva veliko strokovnega znanja in podatkov o usposabljanju po meri. Obe zahtevi je težko in drago doseči. Zato predstavljamo dve možnosti: eno, ki ne zahteva nobenega strokovnega znanja o ML in uporablja Amazon Rekognition, in drugo, ki uporablja Amazon SageMaker za usposabljanje in uvajanje modela ML po meri. Pri prvi možnosti uporabljamo Amazon Rekognition za zaznavanje koles avtomobila. Nato sklepamo o usmerjenosti avtomobila iz položajev koles z uporabo sistema, ki temelji na pravilih. Pri drugi možnosti zaznavamo kolesa in druge avtomobilske dele s pomočjo Detectron model. Ti se spet uporabljajo za sklepanje o položaju avtomobila s kodo, ki temelji na pravilih. Druga možnost zahteva izkušnje z ML, vendar je tudi bolj prilagodljiva. Uporablja se lahko za nadaljnjo naknadno obdelavo slike, na primer za izrez celotnega avtomobila. Obe možnosti je mogoče učiti na javno dostopnih zbirkah podatkov. Nazadnje pokažemo, kako lahko to rešitev za zaznavanje položaja avtomobila integrirate v svojo obstoječo spletno aplikacijo s storitvami, kot je Amazon API Gateway in Ojačaj AWS.

Pregled rešitev

Naslednji diagram prikazuje arhitekturo rešitev.

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.

Rešitev je sestavljena iz lažne spletne aplikacije v Amplifyju, kjer lahko uporabnik naloži sliko in prikliče bodisi model Amazon Rekognition ali model Detectron po meri za zaznavanje položaja avtomobila. Za vsako možnost gostimo AWS Lambda funkcijo za prehodom API, ki je izpostavljen naši lažni aplikaciji. Našo funkcijo Lambda smo konfigurirali tako, da deluje bodisi z modelom Detectron, ki je usposobljen v SageMakerju ali Amazon Rekognition.

Predpogoji

Za ta korak morate imeti naslednje predpogoje:

Ustvarite aplikacijo brez strežnika z uporabo Amazon Rekognition

Naša prva možnost prikazuje, kako lahko zaznate orientacije avtomobilov na slikah s pomočjo Amazon Rekognition. Ideja je uporabiti Amazon Rekognition za zaznavanje lokacije avtomobila in njegovih koles ter nato izvesti naknadno obdelavo, da bi iz teh informacij izpeljali orientacijo avtomobila. Celotna rešitev je nameščena z uporabo Lambda, kot je prikazano v Skladišče Github. Ta mapa vsebuje dve glavni datoteki: datoteko Docker, ki definira sliko Dockerja, ki se bo izvajala v naši funkciji Lambda, in app.py datoteka, ki bo glavna vstopna točka funkcije 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')

Funkcija Lambda pričakuje dogodek, ki vsebuje glavo in telo, kjer bi moralo biti telo slika, ki jo je treba označiti kot dekodiran objekt base64. Glede na sliko, Amazon Rekognition detect_labels funkcija se prikliče iz funkcije Lambda z uporabo Boto3. Funkcija vrne eno ali več oznak za vsak predmet na sliki in podrobnosti o omejevalnem polju za vse oznake zaznanih predmetov kot del odgovora, skupaj z drugimi informacijami, kot so zaupanje dodeljene oznake, oznake prednikov zaznane oznake, možne vzdevki za oznako in kategorije, ki jim zaznana oznaka pripada. Na podlagi oznak, ki jih vrne Amazon Rekognition, izvajamo funkcijo label_image, ki izračuna kot avtomobila iz zaznanih koles, kot sledi:

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

Upoštevajte, da aplikacija zahteva, da je na sliki samo en avtomobil, in vrne napako, če temu ni tako. Vendar pa je mogoče naknadno obdelavo prilagoditi tako, da zagotavlja natančnejše opise orientacije, zajema več avtomobilov ali izračuna orientacijo bolj zapletenih objektov.

Izboljšajte zaznavanje koles

Za nadaljnje izboljšanje natančnosti zaznavanja kolesa lahko uporabite Oznake po meri za ponovno odstranjevanje Amazon. Podobno kot pri natančnem prilagajanju z uporabo SageMakerja za usposabljanje in uvajanje modela ML po meri, lahko prinesete lastne označene podatke, tako da lahko Amazon Rekognition za vas v samo nekaj urah izdela model analize slike po meri. Z oznakami po meri Rekognition potrebujete le majhen nabor slik za usposabljanje, ki so specifične za vaš primer uporabe, v tem primeru slike avtomobilov z določenimi koti, ker uporablja obstoječe zmožnosti v storitvi Amazon Rekognition, da se učijo na več deset milijonih slik po vsem svetu. veliko kategorij. Rekognition Custom Labels je mogoče integrirati z le nekaj kliki in majhnimi prilagoditvami funkcije Lambda, ki jo uporabljamo za standardno rešitev Amazon Rekognition.

Usposobite model z uporabo učnega opravila SageMaker

Pri naši drugi možnosti usposabljamo model globokega učenja po meri na SageMakerju. Uporabljamo Okvir Detectron2 za segmentacijo avtomobilskih delov. Ti segmenti se nato uporabijo za sklepanje o položaju avtomobila.

Ogrodje Detectron2 je knjižnica, ki zagotavlja najsodobnejše algoritme za odkrivanje in segmentacijo. Detectron ponuja različne modele Mask R-CNN, ki so bili usposobljeni na znamenitem naboru podatkov COCO (Common objects in Context). Za izgradnjo našega modela zaznavanja avtomobilskih predmetov uporabljamo učenje prenosa za natančno nastavitev vnaprej pripravljenega modela Mask R-CNN na segmentacija avtomobilskih delov nabor podatkov. Ta nabor podatkov nam omogoča, da usposobimo model, ki lahko zazna kolesa, pa tudi druge avtomobilske dele. Te dodatne informacije je mogoče nadalje uporabiti pri izračunih kota avtomobila glede na sliko.

Nabor podatkov vsebuje označene podatke o avtomobilskih delih, ki se uporabljajo za naloge zaznavanja objektov in semantične segmentacije: približno 500 slik limuzin, pikapov in športnih terenskih vozil (SUV), posnetih v več pogledih (pogled od spredaj, zadaj in stran). Vsaka slika je označena z 18 maskami in omejevalnimi okvirji, ki predstavljajo različne dele avtomobila, kot so kolesa, ogledala, luči ter sprednje in zadnje steklo. Osnovne opombe koles smo spremenili tako, da se vsako kolo šteje za posamezen predmet, namesto da bi vsa razpoložljiva kolesa na sliki obravnavali kot en predmet.

Mi uporabljamo Preprosta storitev shranjevanja Amazon (Amazon S3) za shranjevanje nabora podatkov, ki se uporablja za usposabljanje modela Detectron, skupaj z artefakti usposobljenega modela. Poleg tega je vsebnik Docker, ki se izvaja v funkciji Lambda, shranjen v Registar elastičnih zabojnikov Amazon (Amazon ECR). Vsebnik Docker v funkciji Lambda je potreben za vključitev potrebnih knjižnic in odvisnosti za izvajanje kode. Lahko bi alternativno uporabili Lambda plasti, vendar je omejena na kvoto velikosti paketa razpakirane uvedbe 250 MB, funkciji Lambda pa je mogoče dodati največ pet plasti.

Naša rešitev je zgrajena na SageMakerju: razširimo vnaprej pripravljeno Vsebniki SageMaker Docker za PyTorch za zagon našega PyTorcha po meri kodo usposabljanja. Nato uporabimo SDK SageMaker Python, da sliko usposabljanja zavijemo v ocenjevalec SageMaker PyTorch, kot je prikazano v naslednjih izrezkih kode:

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)

Končno začnemo delo usposabljanja s klicem na fit() funkcijo na ustvarjenem ocenjevalcu PyTorch. Ko je usposabljanje končano, se artefakt usposobljenega modela shrani v vedro seje v Amazonu S3, da se uporabi za cevovod sklepanja.

Razmestite model z uporabo SageMakerja in cevovodov sklepanja

SageMaker uporabljamo tudi za gostovanje končne točke sklepanja, ki izvaja naš model Detectron po meri. Celotna infrastruktura, ki se uporablja za uvajanje naše rešitve, je zagotovljena z uporabo AWS CDK. Naš model po meri lahko gostimo prek a Končna točka SageMaker v realnem času s klicem deploy na ocenjevalcu PyTorch. To je že drugič, da razširimo vnaprej izdelan vsebnik SageMaker PyTorch, da vključuje PyTorch Detectron. Uporabljamo ga za zagon sklepnega skripta in gostovanje našega usposobljenega modela PyTorch, kot sledi:

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)

Upoštevajte, da smo za uvajanje uporabili GPE ml.g4dn.xlarge, ker je to najmanjši GPE, ki je na voljo in zadostuje za to predstavitev. Dve komponenti je treba konfigurirati v našem sklepni skript: nalaganje modela in serviranje modela. Funkcija model_fn() se uporablja za nalaganje usposobljenega modela, ki je del gostujočega vsebnika Docker in ga je mogoče najti tudi v Amazonu S3 ter vrne objekt modela, ki se lahko uporabi za serviranje modela, kot sledi:

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)

funkcija predict_fn() izvede napoved in vrne rezultat. Poleg uporabe našega naučenega modela uporabljamo vnaprej naučeno različico modela Mask R-CNN, naučeno na naboru podatkov COCO, da izvlečemo glavni avto na sliki. To je dodatni korak naknadne obdelave za obdelavo slik, kjer obstaja več kot en avtomobil. Oglejte si naslednjo kodo:

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

Podobno kot pri rešitvi Amazon Rekognition so omejevalni okvirji, predvideni za wheel razreda se filtrirajo iz izhodov zaznavanja in posredujejo modulu za naknadno obdelavo za oceno položaja avtomobila glede na izhod.

Na koncu smo izboljšali tudi naknadno obdelavo za rešitev Detectron. Za sklepanje rešitve uporablja tudi segmente različnih avtomobilskih delov. Kadar je na primer zaznan sprednji odbijač, zadnjega odbijača pa ni, se predpostavlja, da imamo sprednji pogled na avto, in izračuna se ustrezni kot.

Povežite svojo rešitev s spletno aplikacijo

Koraki za povezavo končnih točk modela z Amplify so naslednji:

  • Klonirajte imensko skladišče aplikacij, ki ga je ustvaril sklad AWS CDK car-angle-detection-website-repo. Prepričajte se, da ga iščete v regiji, ki ste jo uporabili za uvajanje.
  • Kopirajte končne točke prehoda API za vsako od nameščenih funkcij Lambda v index.html datoteko v prejšnjem repozitoriju (obstajajo ograde, kamor je treba postaviti končno točko). Naslednja koda je primer, kako izgleda ta del datoteke .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>

  • Shranite datoteko HTML in potisnite spremembo kode v oddaljeno glavno vejo.

To bo posodobilo datoteko HTML v razmestitvi. Aplikacija je zdaj pripravljena za uporabo.

  • Pomaknite se do konzole Amplify in poiščite projekt, ki ste ga ustvarili.

URL aplikacije bo viden po končani uvedbi.

  • Pomaknite se do URL-ja in se zabavajte z uporabniškim vmesnikom.

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.

zaključek

čestitke! Razmestili smo popolno brezstrežniško arhitekturo, v kateri smo uporabili Amazon Rekognition, vendar smo dali tudi možnost za vaš model po meri, s tem primerom, ki je na voljo na GitHub. Če v svoji ekipi nimate strokovnega znanja o ML ali dovolj podatkov po meri za usposabljanje modela, lahko izberete možnost, ki uporablja Amazon Rekognition. Če želite več nadzora nad svojim modelom, ga želite dodatno prilagoditi in imate dovolj podatkov, lahko izberete rešitev SageMaker. Če imate skupino podatkovnih znanstvenikov, bodo morda želeli še izboljšati modele in izbrati bolj prilagojeno in prilagodljivo možnost. Funkcijo Lambda in API Gateway lahko postavite za vašo spletno aplikacijo z uporabo ene od obeh možnosti. Ta pristop lahko uporabite tudi za drugačen primer uporabe, za katerega boste morda želeli prilagoditi kodo.

Prednost te brezstrežniške arhitekture je, da so gradniki popolnoma zamenljivi. Možnosti so skoraj neomejene. Torej, začnite danes!

Kot vedno, AWS pozdravlja povratne informacije. Prosimo, pošljite kakršne koli pripombe ali vprašanja.


O avtorjih

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 je višji svetovalec za podatke in umetno inteligenco pri AWS Professional Services in strastno želi strankam na njihovi poti omogočiti, da postanejo podatkovno vodeni in AWSome v oblaku AWS. Poleg tega rad razmišlja na veliko s strankami, da zanje uvaja inovacije in izumlja nove ideje.

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 je podatkovni znanstvenik pri AWS Professional Services. Strastno želi pomagati strankam pri inovacijah s tehnologijami velikih podatkov in umetne inteligence, da iz podatkov izkoristijo poslovno vrednost in vpoglede. Ima izkušnje z delom na podatkovni platformi in projektih AI/ML v vertikali zdravstva in znanosti o življenju. V prostem času rada vrtnari in potuje v nove kraje.

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 je višji podatkovni znanstvenik pri AWS Professional Services, kjer strankam omogoča na njihovi poti AI/ML v oblaku AWS. David se osredotoča na digitalne dvojčke, napovedovanje in kvantno računanje. Ima doktorat iz teoretične fizike na Univerzi v Innsbrucku v Avstriji. Bil je tudi doktorski in podoktorski raziskovalec na Inštitutu Max-Planck za kvantno optiko v Nemčiji. V prostem času rad bere, smuča in se druži z družino.

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 je višji podatkovni znanstvenik pri storitvah AWS Professional. Podpira stranke pri izdelavi prototipov in operacionalizaciji njihovih aplikacij ML na AWS. Srikrishna se osredotoča na računalniški vid in NLP. Vodi tudi načrtovanje platforme ML in pobude za identifikacijo primerov uporabe za stranke v različnih industrijskih vertikalah. Srikrishna ima magisterij iz biomedicinskega inženiringa na univerzi RWTH Aachen v Nemčiji, s poudarkom na medicinskem slikanju.

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 je podatkovni znanstvenik pri AWS Professional Services. Zagotavlja tehnično podporo strankam na njihovem potovanju AI/ML v oblaku AWS. Ahmed se osredotoča na aplikacije NLP na proteinsko domeno skupaj z RL. Ima doktorat iz inženiringa na Tehnični univerzi v Münchnu v Nemčiji. V prostem času rad hodi v telovadnico in se igra s svojimi otroki.

Časovni žig:

Več od Strojno učenje AWS