Construiește și antrenează modele de computer vision pentru a detecta pozițiile mașinilor în imagini folosind Amazon SageMaker și Amazon Rekognition | Amazon Web Services

Construiește și antrenează modele de computer vision pentru a detecta pozițiile mașinilor în imagini folosind Amazon SageMaker și Amazon Rekognition | Amazon Web Services

Viziunea computerizată (CV) este una dintre cele mai comune aplicații ale învățării automate (ML) și ale învățării profunde. Cazurile de utilizare variază de la mașini cu conducere autonomă, moderarea conținutului pe platformele de socializare, detectarea cancerului și detectarea automată a defectelor. Amazon Rekognition este un serviciu complet gestionat care poate efectua sarcini CV, cum ar fi detectarea obiectelor, detectarea segmentelor video, moderarea conținutului și multe altele, pentru a extrage informații din date fără a fi nevoie de vreo experiență anterioară de ML. În unele cazuri, poate fi necesară o soluție mai personalizată împreună cu serviciul pentru a rezolva o problemă foarte specifică.

În această postare, abordăm domenii în care CV-ul poate fi aplicat cazurilor de utilizare în care poziția obiectelor, poziția și orientarea acestora sunt importante. Un astfel de caz de utilizare ar fi aplicațiile mobile adresate clienților în care este necesară încărcarea unei imagini. Poate fi din motive de conformitate sau pentru a oferi o experiență consecventă utilizatorului și pentru a îmbunătăți implicarea. De exemplu, pe platformele de cumpărături online, unghiul în care sunt afișate produsele în imagini are un efect asupra ratei de cumpărare a acestui produs. Un astfel de caz este detectarea poziției unei mașini. Demonstrăm cum puteți combina soluțiile ML binecunoscute cu postprocesarea pentru a rezolva această problemă pe AWS Cloud.

Folosim modele de deep learning pentru a rezolva această problemă. Antrenarea algoritmilor ML pentru estimarea poziției necesită multă experiență și date de antrenament personalizate. Ambele cerințe sunt greu și costisitoare de obținut. Prin urmare, vă prezentăm două opțiuni: una care nu necesită nicio experiență ML și care utilizează Amazon Rekognition și alta care utilizează Amazon SageMaker pentru a instrui și a implementa un model ML personalizat. În prima opțiune, folosim Amazon Rekognition pentru a detecta roțile mașinii. Apoi deducem orientarea mașinii din pozițiile roților folosind un sistem bazat pe reguli. În a doua opțiune, detectăm roțile și alte piese auto folosind Detectron model. Acestea sunt din nou folosite pentru a deduce poziția mașinii cu un cod bazat pe reguli. A doua opțiune necesită experiență ML, dar este și mai personalizabilă. Poate fi folosit pentru o postprocesare ulterioară a imaginii, de exemplu, pentru a decupa întreaga mașină. Ambele opțiuni pot fi instruite pe seturi de date disponibile public. În cele din urmă, vă arătăm cum puteți integra această soluție de detectare a pozițiilor mașinii în aplicația dvs. web existentă folosind servicii precum Gateway API Amazon și Amplificare AWS.

Prezentare generală a soluțiilor

Următoarea diagramă ilustrează arhitectura soluției.

Construiți și antrenați modele de computer vision pentru a detecta pozițiile mașinilor în imagini folosind Amazon SageMaker și Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Soluția constă într-o aplicație web simulată în Amplify, unde un utilizator poate încărca o imagine și poate invoca fie modelul Amazon Rekognition, fie modelul personalizat Detectron pentru a detecta poziția mașinii. Pentru fiecare opțiune, găzduim un AWS Lambdas funcția din spatele unui gateway API care este expus aplicației noastre simulate. Am configurat funcția noastră Lambda să ruleze fie cu modelul Detectron antrenat în SageMaker, fie cu Amazon Rekognition.

Cerințe preliminare

Pentru această prezentare generală, ar trebui să aveți următoarele condiții prealabile:

Creați o aplicație fără server folosind Amazon Rekognition

Prima noastră opțiune demonstrează cum puteți detecta orientările mașinii în imagini folosind Amazon Rekognition. Ideea este să folosiți Amazon Rekognition pentru a detecta locația mașinii și a roților acesteia și apoi să faceți postprocesare pentru a deriva orientarea mașinii din aceste informații. Întreaga soluție este implementată folosind Lambda, așa cum se arată în Depozit Github. Acest folder conține două fișiere principale: un fișier Docker care definește imaginea Docker care va rula în funcția noastră Lambda și app.py fișier, care va fi punctul de intrare principal al funcției 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')

Funcția Lambda se așteaptă la un eveniment care conține un antet și un corp, unde corpul ar trebui să fie imaginea necesară pentru a fi etichetată ca obiect decodificat base64. Având în vedere imaginea, Amazon Rekognition detect_labels funcția este invocată din funcția Lambda folosind Boto3. Funcția returnează una sau mai multe etichete pentru fiecare obiect din imagine și detaliile casetei de delimitare pentru toate etichetele obiectului detectat ca parte a răspunsului, împreună cu alte informații precum încrederea etichetei atribuite, etichetele strămoșilor etichetei detectate, posibil aliasuri pentru etichetă și categoriile cărora le aparține eticheta detectată. Pe baza etichetelor returnate de Amazon Rekognition, rulăm funcția label_image, care calculează unghiul mașinii de la roțile detectate după cum urmează:

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

Rețineți că aplicația necesită ca o singură mașină să fie prezentă în imagine și returnează o eroare dacă nu este cazul. Cu toate acestea, postprocesarea poate fi adaptată pentru a oferi descrieri de orientare mai granulare, pentru a acoperi mai multe mașini sau pentru a calcula orientarea unor obiecte mai complexe.

Îmbunătățiți detectarea roților

Pentru a îmbunătăți și mai mult acuratețea detectării roții, puteți utiliza Etichete personalizate Amazon Rekognition. Similar cu reglarea fină folosind SageMaker pentru a antrena și a implementa un model ML personalizat, puteți aduce propriile date etichetate, astfel încât Amazon Rekognition să poată produce un model personalizat de analiză a imaginii pentru dvs. în doar câteva ore. Cu etichetele personalizate Rekognition, aveți nevoie doar de un set mic de imagini de antrenament care sunt specifice cazului dvs. de utilizare, în acest caz imagini de mașină cu unghiuri specifice, deoarece folosește capacitățile existente în Amazon Rekognition de a fi antrenat pe zeci de milioane de imagini pe tot parcursul multe categorii. Etichetele personalizate Rekognition pot fi integrate cu doar câteva clicuri și mici adaptări la funcția Lambda pe care o folosim pentru soluția standard Amazon Rekognition.

Antrenați un model folosind un job de formare SageMaker

În a doua opțiune, antrenăm un model personalizat de învățare profundă pe SageMaker. Noi folosim Cadrul Detectron2 pentru segmentarea pieselor auto. Aceste segmente sunt apoi folosite pentru a deduce poziția mașinii.

Cadrul Detectron2 este o bibliotecă care oferă algoritmi de ultimă generație de detectare și segmentare. Detectron oferă o varietate de modele Mask R-CNN care au fost antrenate pe faimosul set de date COCO (Obiecte comune în context). Pentru a construi modelul nostru de detectare a obiectelor de mașină, folosim învățarea prin transfer pentru a regla fin un model Mask R-CNN preantrenat pe segmentarea pieselor auto set de date. Acest set de date ne permite să antrenăm un model care poate detecta roțile, dar și alte piese auto. Aceste informații suplimentare pot fi utilizate în continuare în calculele unghiului mașinii în raport cu imaginea.

Setul de date conține date adnotate ale pieselor auto care vor fi utilizate pentru detectarea obiectelor și sarcinile de segmentare semantică: aproximativ 500 de imagini cu sedanuri, camionete și vehicule utilitare sport (SUV-uri), luate în mai multe vederi (față, spate și laterale). Fiecare imagine este adnotată de 18 măști de instanță și casete de delimitare reprezentând diferitele părți ale unei mașini, cum ar fi roți, oglinzi, lumini și sticla din față și din spate. Am modificat adnotările de bază ale roților astfel încât fiecare roată să fie considerată un obiect individual, în loc să considerăm toate roțile disponibile din imagine ca un singur obiect.

Noi folosim Serviciul Amazon de stocare simplă (Amazon S3) pentru a stoca setul de date folosit pentru antrenamentul modelului Detectron împreună cu artefactele modelului antrenat. Mai mult, containerul Docker care rulează în funcția Lambda este stocat în Registrul Amazon de containere elastice (Amazon ECR). Containerul Docker din funcția Lambda este necesar pentru a include bibliotecile și dependențele necesare pentru rularea codului. Am putea folosi alternativ Straturi lambda, dar este limitat la o cotă de dimensiune a pachetului de implementare dezarhivată de 250 MB și pot fi adăugate maximum cinci straturi la o funcție Lambda.

Soluția noastră este construită pe SageMaker: extindem preconstruit Containere Docker SageMaker pentru ca PyTorch să ruleze PyTorch-ul nostru personalizat cod de antrenament. Apoi, folosim SDK-ul SageMaker Python pentru a include imaginea de antrenament într-un estimator SageMaker PyTorch, așa cum se arată în următoarele fragmente de cod:

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)

În cele din urmă, începem munca de formare sunând la fit() funcția pe estimatorul PyTorch creat. Când antrenamentul este terminat, artefactul modelului antrenat este stocat în compartimentul de sesiune în Amazon S3 pentru a fi utilizat pentru conducta de inferență.

Implementați modelul folosind SageMaker și conducte de inferență

De asemenea, folosim SageMaker pentru a găzdui punctul final de inferență care rulează modelul nostru personalizat Detectron. Întreaga infrastructură utilizată pentru implementarea soluției noastre este furnizată folosind AWS CDK. Ne putem găzdui modelul personalizat printr-un Punct final în timp real SageMaker sunând deploy pe estimatorul PyTorch. Este a doua oară când extindem un container SageMaker PyTorch prefabricat pentru a include PyTorch Detectron. Îl folosim pentru a rula scriptul de inferență și pentru a găzdui modelul nostru antrenat PyTorch, după cum urmează:

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)

Rețineți că am folosit un GPU ml.g4dn.xlarge pentru implementare, deoarece este cel mai mic GPU disponibil și suficient pentru această demonstrație. Două componente trebuie configurate în nostru script de inferență: încărcarea modelului și servirea modelului. Functia model_fn() este utilizat pentru a încărca modelul antrenat care face parte din containerul Docker găzduit și poate fi găsit și în Amazon S3 și pentru a returna un obiect model care poate fi utilizat pentru a servi modelul după cum urmează:

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)

Funcția predict_fn() efectuează predicția și returnează rezultatul. Pe lângă utilizarea modelului nostru antrenat, folosim o versiune preantrenată a modelului Mask R-CNN antrenat pe setul de date COCO pentru a extrage mașina principală din imagine. Acesta este un pas suplimentar de postprocesare pentru a trata imaginile în care există mai multe mașini. Vezi următorul cod:

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

Similar cu soluția Amazon Rekognition, casetele de delimitare prezise pentru wheel clasa sunt filtrate de la ieșirile de detectare și furnizate la modulul de postprocesare pentru a evalua poziția mașinii în raport cu ieșirea.

În cele din urmă, am îmbunătățit și postprocesarea pentru soluția Detectron. De asemenea, utilizează segmentele diferitelor piese auto pentru a deduce soluția. De exemplu, ori de câte ori este detectată o bară de protecție față, dar nici o bară de protecție din spate, se presupune că avem o vedere frontală a mașinii și se calculează unghiul corespunzător.

Conectați-vă soluția la aplicația web

Pașii pentru a conecta punctele finale ale modelului la Amplify sunt următorii:

  • Clonează depozitul de aplicații creat de stiva AWS CDK, numit car-angle-detection-website-repo. Asigurați-vă că îl căutați în regiunea pe care ați folosit-o pentru implementare.
  • Copiați punctele finale API Gateway pentru fiecare dintre funcțiile Lambda implementate în index.html fișier în depozitul precedent (există substituenți în care trebuie plasat punctul final). Următorul cod este un exemplu despre cum arată această secțiune a fișierului .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>

  • Salvați fișierul HTML și împingeți modificarea codului în ramura principală la distanță.

Aceasta va actualiza fișierul HTML în implementare. Aplicația este acum gata de utilizare.

  • Navigați la consola Amplify și localizați proiectul pe care l-ați creat.

Adresa URL a aplicației va fi vizibilă după finalizarea implementării.

  • Navigați la adresa URL și distrați-vă cu interfața de utilizare.

Construiți și antrenați modele de computer vision pentru a detecta pozițiile mașinilor în imagini folosind Amazon SageMaker și Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Concluzie

Felicitări! Am implementat o arhitectură completă fără server în care am folosit Amazon Rekognition, dar am oferit și o opțiune pentru propriul model personalizat, cu acest exemplu disponibil pe GitHub. Dacă nu aveți experiență ML în echipa dvs. sau suficiente date personalizate pentru a pregăti un model, puteți selecta opțiunea care utilizează Amazon Rekognition. Dacă doriți mai mult control asupra modelului dvs., doriți să-l personalizați în continuare și aveți suficiente date, puteți alege soluția SageMaker. Dacă aveți o echipă de cercetători ai datelor, ar putea dori, de asemenea, să îmbunătățească modelele și să aleagă o opțiune mai personalizată și mai flexibilă. Puteți pune funcția Lambda și API Gateway în spatele aplicației dvs. web folosind oricare dintre cele două opțiuni. De asemenea, puteți utiliza această abordare pentru un caz de utilizare diferit pentru care s-ar putea să doriți să adaptați codul.

Avantajul acestei arhitecturi fără server este că elementele de bază sunt complet schimbabile. Oportunitățile sunt aproape nelimitate. Deci, începe azi!

Ca întotdeauna, AWS salută feedback-ul. Vă rugăm să trimiteți orice comentarii sau întrebări.


Despre Autori

Construiți și antrenați modele de computer vision pentru a detecta pozițiile mașinilor în imagini folosind Amazon SageMaker și Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Michael Wallner este consultant senior Data & AI cu AWS Professional Services și este pasionat de a permite clienților în călătoria lor să devină bazați pe date și AWSome în cloudul AWS. În plus, îi place să gândească mare cu clienții pentru a inova și a inventa idei noi pentru ei.

Construiți și antrenați modele de computer vision pentru a detecta pozițiile mașinilor în imagini folosind Amazon SageMaker și Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Aamna Najmi este un Data Scientist cu AWS Professional Services. Este pasionată de a ajuta clienții să inoveze cu tehnologiile Big Data și Inteligența Artificială pentru a valorifica valoarea afacerii și informațiile din date. Ea are experiență în lucrul pe platforme de date și proiecte AI/ML în sectorul sănătății și științele vieții. În timpul liber, îi place să facă grădinărit și să călătorească în locuri noi.

Construiți și antrenați modele de computer vision pentru a detecta pozițiile mașinilor în imagini folosind Amazon SageMaker și Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Căutare verticală. Ai.David Sauerwein este Senior Data Scientist la AWS Professional Services, unde permite clienților călătoria lor AI/ML în cloudul AWS. David se concentrează pe gemeni digitali, prognoză și calcul cuantic. Este doctor în fizică teoretică la Universitatea din Innsbruck, Austria. A fost, de asemenea, cercetător doctorat și post-doctoral la Institutul Max-Planck pentru Optică Cuantică din Germania. În timpul liber îi place să citească, să schieze și să petreacă timpul cu familia.

Construiți și antrenați modele de computer vision pentru a detecta pozițiile mașinilor în imagini folosind Amazon SageMaker și Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Srikrishna Chaitanya Konduru este un Data Scientist senior cu servicii AWS Professional. El sprijină clienții în crearea de prototipuri și operaționalizarea aplicațiilor ML pe AWS. Srikrishna se concentrează pe viziunea computerizată și pe NLP. De asemenea, conduce inițiativele de proiectare a platformei ML și de identificare a cazurilor de utilizare pentru clienți din diverse verticale din industrie. Srikrishna are un M.Sc în Inginerie Biomedicală de la Universitatea RWTH Aachen, Germania, cu accent pe Imagistica Medicală.

Construiți și antrenați modele de computer vision pentru a detecta pozițiile mașinilor în imagini folosind Amazon SageMaker și Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Ahmed Mansour este Data Scientist la AWS Professional Services. El oferă asistență tehnică clienților prin călătoria lor AI/ML pe cloud AWS. Ahmed se concentrează pe aplicațiile NLP în domeniul proteinelor împreună cu RL. Este doctor în inginerie la Universitatea Tehnică din München, Germania. În timpul liber îi place să meargă la sală și să se joace cu copiii săi.

Timestamp-ul:

Mai mult de la Învățare automată AWS