בנה והכשרת דגמי ראייה ממוחשבת לזיהוי מיקומי מכוניות בתמונות באמצעות Amazon SageMaker ו-Amazon Rekognition | שירותי האינטרנט של אמזון

בנה והכשרת דגמי ראייה ממוחשבת לזיהוי מיקומי מכוניות בתמונות באמצעות Amazon SageMaker ו-Amazon Rekognition | שירותי האינטרנט של אמזון

ראיית מחשב (CV) היא אחד היישומים הנפוצים ביותר של למידת מכונה (ML) ולמידה עמוקה. מקרי השימוש נעים בין מכוניות בנהיגה עצמית, ניהול תוכן בפלטפורמות מדיה חברתית, זיהוי סרטן וזיהוי פגמים אוטומטי. אמזון הוא שירות מנוהל במלואו שיכול לבצע משימות קורות חיים כמו זיהוי אובייקטים, זיהוי קטעי וידאו, ניהול תוכן ועוד כדי לחלץ תובנות מנתונים ללא צורך בניסיון קודם ב-ML. במקרים מסוימים, ייתכן שיהיה צורך בפתרון מותאם אישית יותר יחד עם השירות כדי לפתור בעיה מאוד ספציפית.

בפוסט זה, אנו מתייחסים לתחומים שבהם ניתן ליישם קורות חיים כדי להשתמש במקרים בהם התנוחה של אובייקטים, מיקומם והכיוון שלהם חשובים. מקרה שימוש אחד כזה יהיה יישומים ניידים מול לקוחות שבהם נדרשת העלאת תמונה. זה עשוי להיות מטעמי תאימות או כדי לספק חווית משתמש עקבית ולשפר את המעורבות. לדוגמה, בפלטפורמות קניות מקוונות, לזווית שבה מוצגים מוצרים בתמונות יש השפעה על קצב הקנייה של מוצר זה. מקרה אחד כזה הוא זיהוי המיקום של מכונית. אנו מדגימים כיצד ניתן לשלב פתרונות ML ידועים עם עיבוד לאחר כדי לטפל בבעיה זו בענן AWS.

אנו משתמשים במודלים של למידה עמוקה כדי לפתור בעיה זו. אימון אלגוריתמי ML להערכת תנוחה דורש מומחיות רבה ונתוני אימון מותאמים אישית. שתי הדרישות קשות ויקרות להשגה. לכן, אנו מציגים שתי אפשרויות: אחת שאינה דורשת מומחיות ML ומשתמשת בזיהוי אמזון, ואחרת שמשתמשת אמזון SageMaker לאמן ולפרוס מודל ML מותאם אישית. באפשרות הראשונה, אנו משתמשים ב-Amazon Rekognition כדי לזהות את גלגלי המכונית. לאחר מכן אנו מסיקים את כיוון המכונית ממצבי הגלגלים באמצעות מערכת מבוססת כללים. באפשרות השנייה, אנו מזהים את הגלגלים וחלקי רכב אחרים באמצעות גלאי דֶגֶם. אלה משמשים שוב כדי להסיק את מיקום המכונית עם קוד מבוסס כללים. האפשרות השנייה דורשת ניסיון ב-ML אך היא גם ניתנת להתאמה אישית יותר. ניתן להשתמש בו להמשך עיבוד שלאחר התמונה, למשל, כדי לחתוך את המכונית כולה. ניתן לאמן את שתי האפשרויות על מערכי נתונים זמינים לציבור. לבסוף, אנו מראים כיצד תוכל לשלב את פתרון זיהוי תנוחות המכונית הזה ביישום האינטרנט הקיים שלך באמצעות שירותים כמו שער API של אמזון ו AWS להגביר.

סקירת פתרונות

התרשים הבא ממחיש את ארכיטקטורת הפתרונות.

בנה והכשרת דגמי ראייה ממוחשבת כדי לזהות מיקומי מכוניות בתמונות באמצעות Amazon SageMaker ו-Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

הפתרון מורכב מאפליקציית אינטרנט מדומה ב- Amplify שבה משתמש יכול להעלות תמונה ולהפעיל את דגם Amazon Rekognition או דגם Detectron המותאם אישית כדי לזהות את מיקום המכונית. עבור כל אפשרות, אנו מארחים an AWS למבדה פונקציה מאחורי שער API שנחשף ליישום המדומה שלנו. הגדרנו את פונקציית ה- Lambda שלנו כך שתפעל עם דגם Detectron שהוכשר ב- SageMaker או עם Amazon Rekognition.

תנאים מוקדמים

לפריצת דרך זו, יהיו עליכם התנאים המוקדמים הבאים:

צור אפליקציה ללא שרת באמצעות Amazon Rekognition

האפשרות הראשונה שלנו מדגימה כיצד ניתן לזהות כיווני רכב בתמונות באמצעות אמזון זיהוי. הרעיון הוא להשתמש ב-Amazon Rekognition כדי לזהות את מיקום המכונית והגלגלים שלה ולאחר מכן לבצע עיבוד לאחר כדי לגזור את כיוון המכונית מהמידע הזה. הפתרון כולו נפרס באמצעות Lambda כפי שמוצג ב- מאגר Github. תיקיה זו מכילה שני קבצים עיקריים: Dockerfile המגדיר את תמונת Docker שתפעל בפונקציית Lambda שלנו, וה- app.py קובץ, שיהיה נקודת הכניסה הראשית של פונקציית 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')

הפונקציה Lambda מצפה לאירוע שמכיל כותרת וגוף, כאשר הגוף צריך להיות התמונה הדרושה לתיוג כאובייקט מפוענח base64. בהתחשב בתמונה, ההכרה של אמזון detect_labels הפונקציה מופעלת מפונקציית Lambda באמצעות Boto3. הפונקציה מחזירה תווית אחת או יותר עבור כל אובייקט בתמונה ובפרטי התיבה התוחמת עבור כל תוויות האובייקט שזוהו כחלק מהתגובה, יחד עם מידע נוסף כמו ביטחון התווית שהוקצתה, תוויות האבות של התווית שזוהתה, אפשרי כינויים עבור התווית, והקטגוריות שהתווית שזוהתה שייכת אליהן. בהתבסס על התוויות שהוחזרו על ידי Amazon Rekognition, אנו מפעילים את הפונקציה label_image, אשר מחשב את זווית המכונית מהגלגלים שזוהו באופן הבא:

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

שימו לב שהאפליקציה דורשת שרק מכונית אחת קיימת בתמונה ומחזירה שגיאה אם ​​זה לא המקרה. עם זאת, ניתן להתאים את העיבוד שלאחר כך לספק תיאורי כיוון גרעיניים יותר, לכסות מספר מכוניות או לחשב את הכיוון של אובייקטים מורכבים יותר.

שפר את זיהוי הגלגלים

כדי לשפר עוד יותר את הדיוק של זיהוי הגלגלים, אתה יכול להשתמש תוויות מותאמות אישית של Amazon Rekognition. בדומה לכוונון עדין באמצעות SageMaker כדי להכשיר ולפרוס מודל ML מותאם אישית, אתה יכול להביא נתונים מתויגים משלך כך ש-Amazon Rekognition תוכל לייצר עבורך מודל ניתוח תמונה מותאם אישית תוך מספר שעות בלבד. עם תוויות מותאמות אישית של Rekognition, אתה צריך רק סט קטן של תמונות אימון הספציפיות למקרה השימוש שלך, במקרה זה תמונות מכוניות עם זוויות ספציפיות, מכיוון שהיא משתמשת ביכולות הקיימות בזיהוי אמזון של הכשרה על עשרות מיליוני תמונות ברחבי קטגוריות רבות. ניתן לשלב זיהוי תוויות מותאמות אישית בכמה לחיצות בלבד והתאמות קטנות לפונקציית Lambda שבה אנו משתמשים עבור פתרון הזיהוי הסטנדרטי של אמזון.

אימון מודל באמצעות עבודת אימון של SageMaker

באפשרות השנייה שלנו, אנו מאמנים מודל למידה עמוקה מותאם אישית ב- SageMaker. אנו משתמשים ב- Detectron2 framework לפילוח חלקי רכב. מקטעים אלה משמשים לאחר מכן כדי להסיק את מיקום המכונית.

המסגרת של Detectron2 היא ספרייה המספקת אלגוריתמי זיהוי ופילוח חדישים. Detectron מספקת מגוון דגמי Mask R-CNN שהוכשרו על מערך הנתונים המפורסם של COCO (Common objects in Context). כדי לבנות את מודל זיהוי אובייקטי המכונית שלנו, אנו משתמשים בלימוד העברה כדי לכוונן עדין דגם R-CNN של מסכה מיומן מראש על פילוח חלקי רכב מערך נתונים. מערך נתונים זה מאפשר לנו לאמן דגם שיכול לזהות גלגלים אך גם חלקי רכב אחרים. ניתן להשתמש במידע נוסף זה בחישובי זווית המכונית ביחס לתמונה.

מערך הנתונים מכיל נתונים מוערים של חלקי רכב שישמשו למשימות זיהוי אובייקטים ופילוח סמנטי: כ-500 תמונות של מכוניות סדאן, טנדרים ורכבי ספורט (SUV), שצולמו במספר תצוגות (מבטים מלפנים, מאחור וצד). כל תמונה מסומנת על ידי 18 מסכות מופע ותיבות תוחמות המייצגות את החלקים השונים של מכונית כמו גלגלים, מראות, אורות וזכוכית קדמית ואחורית. שינינו את ההערות הבסיסיות של הגלגלים כך שכל גלגל ייחשב לאובייקט בודד במקום להתייחס לכל הגלגלים הזמינים בתמונה כאובייקט אחד.

אנו משתמשים שירות אחסון פשוט של אמזון (Amazon S3) כדי לאחסן את מערך הנתונים המשמש לאימון מודל Detectron יחד עם חפצי המודל המאומנים. יתרה מכך, מיכל ה-Docker שפועל בפונקציית Lambda מאוחסן בו מרשם מיכל אלסטי של אמזון (Amazon ECR). יש צורך במיכל Docker בפונקציית Lambda כדי לכלול את הספריות והתלות הנדרשות להפעלת הקוד. נוכל לחלופין להשתמש שכבות למבדה, אך היא מוגבלת למכסת גודל ארוזה של פריסה פתוחה של 250 מגה-בייט וניתן להוסיף לכל היותר חמש שכבות לפונקציית Lambda.

הפתרון שלנו בנוי על SageMaker: אנו מרחיבים את הבנייה מראש מכולות SageMaker Docker עבור PyTorch להפעיל את PyTorch המותאם אישית שלנו קוד אימון. לאחר מכן, אנו משתמשים ב-SageMaker Python SDK כדי לעטוף את תמונת האימון לתוך מעריך SageMaker PyTorch, כפי שמוצג בקטעי הקוד הבאים:

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)

לבסוף, אנו מתחילים את עבודת ההדרכה על ידי התקשרות ל- fit() פונקציה על מעריך PyTorch שנוצר. כאשר האימון מסתיים, חפץ הדגם המאומן מאוחסן בדלי הפגישה באמזון S3 כדי לשמש עבור צינור ההסקה.

פרוס את המודל באמצעות SageMaker וצינורות מסקנות

אנו משתמשים גם ב- SageMaker כדי לארח את נקודת הקצה המסקנת שמריצה את מודל Detectron המותאם אישית שלנו. התשתית המלאה המשמשת לפריסת הפתרון שלנו מסופקת באמצעות AWS CDK. אנחנו יכולים לארח את הדגם המותאם אישית שלנו דרך א נקודת קצה של SageMaker בזמן אמת על ידי שיחה deploy על מעריך PyTorch. זו הפעם השנייה שאנו מרחיבים מיכל SageMaker PyTorch שנבנה מראש כך שיכלול את PyTorch Detectron. אנו משתמשים בו כדי להריץ את סקריפט ההסקה ולארח את מודל PyTorch המאומן שלנו באופן הבא:

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)

שימו לב שהשתמשנו ב-ml.g4dn.xlarge GPU לפריסה מכיוון שהוא ה-GPU הקטן ביותר שזמין ומספיק להדגמה זו. יש להגדיר שני רכיבים ב- שלנו תסריט מסקנות: טעינת דגם והגשת דגם. הפונקציה model_fn() משמש לטעינת הדגם המאומן שהוא חלק ממיכל ה-Docker המאוחסן וניתן למצוא אותו גם ב-Amazon S3 ולהחזיר אובייקט דגם שניתן להשתמש בו להגשת מודל באופן הבא:

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)

הפונקציה predict_fn() מבצע את החיזוי ומחזיר את התוצאה. מלבד השימוש במודל המאומן שלנו, אנו משתמשים בגרסה מאומנת מראש של דגם Mask R-CNN שאומן במערך הנתונים של COCO כדי לחלץ את המכונית הראשית בתמונה. זהו שלב נוסף של עיבוד לאחר להתמודדות עם תמונות שבהן קיימת יותר ממכונית אחת. ראה את הקוד הבא:

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

בדומה לפתרון הזיהוי של אמזון, התיבות התוחמות שחזו ל- wheel class מסוננים מיציאות הזיהוי ומסופקים למודול הפוסט-עיבוד כדי להעריך את מיקום המכונית ביחס לתפוקה.

לבסוף, שיפרנו גם את ה-postprocessing עבור פתרון Detectron. הוא גם משתמש בקטעים של חלקי רכב שונים כדי להסיק את הפתרון. לדוגמה, בכל פעם שמתגלה פגוש קדמי, אך אין פגוש אחורי, ההנחה היא שיש לנו מבט קדמי של המכונית ומחושבת הזווית המתאימה.

חבר את הפתרון שלך לאפליקציית האינטרנט

השלבים לחיבור נקודות הקצה של הדגם ל- Amplify הם כדלקמן:

  • שכפל את מאגר היישומים שיצרה מחסנית ה-AWS CDK, בשם car-angle-detection-website-repo. ודא שאתה מחפש אותו באזור שבו השתמשת לפריסה.
  • העתק את נקודות הקצה של שער ה-API עבור כל אחת מפונקציות Lambda הפרוסות לתוך index.html קובץ במאגר הקודם (יש מצייני מיקום שבהם צריך למקם את נקודת הקצה). הקוד הבא הוא דוגמה לאיך נראה החלק הזה של קובץ ה-.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>

  • שמור את קובץ ה-HTML ודחף את שינוי הקוד לסניף הראשי המרוחק.

פעולה זו תעדכן את קובץ ה-HTML בפריסה. האפליקציה מוכנה כעת לשימוש.

  • נווט אל קונסולת Amplify ואתר את הפרויקט שיצרת.

כתובת האתר של היישום תהיה גלויה לאחר השלמת הפריסה.

  • נווט אל כתובת האתר ותהנה עם ממשק המשתמש.

בנה והכשרת דגמי ראייה ממוחשבת כדי לזהות מיקומי מכוניות בתמונות באמצעות Amazon SageMaker ו-Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

סיכום

מזל טוב! פרסנו ארכיטקטורה שלמה ללא שרת שבה השתמשנו בזיהוי אמזון, אך גם נתנו אפשרות לדגם מותאם אישית משלך, כאשר דוגמה זו זמינה ב- GitHub. אם אין לך מומחיות ML בצוות שלך או מספיק נתונים מותאמים אישית כדי להכשיר מודל, תוכל לבחור באפשרות המשתמשת בזיהוי אמזון. אם אתה רוצה יותר שליטה על הדגם שלך, רוצה להתאים אותו יותר, ויש לך מספיק נתונים, אתה יכול לבחור בפתרון SageMaker. אם יש לך צוות של מדעני נתונים, אולי הם גם ירצו לשפר את המודלים עוד יותר ולבחור אפשרות מותאמת וגמישה יותר. אתה יכול לשים את פונקציית Lambda ואת ה-API Gateway מאחורי יישום האינטרנט שלך באמצעות אחת משתי האפשרויות. אתה יכול גם להשתמש בגישה זו עבור מקרה שימוש אחר שעבורו אולי תרצה להתאים את הקוד.

היתרון של ארכיטקטורה ללא שרת זו הוא שאבני הבניין ניתנות להחלפה מוחלטת. ההזדמנויות כמעט בלתי מוגבלות. אז, התחל היום!

כמו תמיד, AWS מקבלת בברכה משוב. נא לשלוח הערות או שאלות.


על הכותבים

בנה והכשרת דגמי ראייה ממוחשבת כדי לזהות מיקומי מכוניות בתמונות באמצעות Amazon SageMaker ו-Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.מייקל וולנר הוא יועץ בכיר לנתונים ובינה מלאכותית עם שירותים מקצועיים של AWS ונלהב לאפשר ללקוחות במסעם להיות מונעי נתונים ו-AWSome בענן AWS. בנוסף, הוא אוהב לחשוב בגדול עם לקוחות כדי לחדש ולהמציא עבורם רעיונות חדשים.

בנה והכשרת דגמי ראייה ממוחשבת כדי לזהות מיקומי מכוניות בתמונות באמצעות Amazon SageMaker ו-Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.אמנה נג'מי הוא מדען נתונים עם שירותים מקצועיים של AWS. היא נלהבת לעזור ללקוחות לחדש עם טכנולוגיות ביג דאטה ובינה מלאכותית כדי להפיק ערך עסקי ותובנות מהנתונים. יש לה ניסיון בעבודה על פלטפורמת נתונים ופרויקטים של AI/ML בתחום הבריאות ומדעי החיים. בזמנה הפנוי היא נהנית לעסוק בגינון ולטייל במקומות חדשים.

בנה והכשרת דגמי ראייה ממוחשבת כדי לזהות מיקומי מכוניות בתמונות באמצעות Amazon SageMaker ו-Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.דיוויד סאוורווין הוא מדען נתונים בכיר ב-AWS Professional Services, שם הוא מאפשר ללקוחות למסע AI/ML שלהם בענן AWS. דיוויד מתמקד בתאומים דיגיטליים, חיזוי וחישוב קוונטי. יש לו דוקטורט בפיזיקה תיאורטית מאוניברסיטת אינסברוק, אוסטריה. הוא גם היה דוקטור ופוסט-דוקטורט במכון מקס-פלנק לאופטיקה קוונטית בגרמניה. בזמנו הפנוי הוא אוהב לקרוא, לעשות סקי ולבלות עם משפחתו.

בנה והכשרת דגמי ראייה ממוחשבת כדי לזהות מיקומי מכוניות בתמונות באמצעות Amazon SageMaker ו-Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.Srikrishna Chaitanya Konduru הוא מדען נתונים בכיר עם שירותים מקצועיים של AWS. הוא תומך בלקוחות ביצירת אב טיפוס ובהפעלה תפעולית של יישומי ה-ML שלהם ב-AWS. Srikrishna מתמקד בראייה ממוחשבת ו-NLP. הוא גם מוביל יוזמות לתכנון פלטפורמת ML וזיהוי מקרי שימוש עבור לקוחות במגוון רחב של ענפים. ל-Srikrishna יש תואר שני בהנדסה ביו-רפואית מאוניברסיטת RWTH Aachen, גרמניה, עם התמקדות בהדמיה רפואית.

בנה והכשרת דגמי ראייה ממוחשבת כדי לזהות מיקומי מכוניות בתמונות באמצעות Amazon SageMaker ו-Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.אחמד מנצור הוא מדען נתונים בשירותים מקצועיים של AWS. הוא מספק תמיכה טכנית ללקוחות במהלך מסע ה-AI/ML שלהם בענן AWS. אחמד מתמקד ביישומים של NLP לתחום החלבון יחד עם RL. יש לו דוקטורט בהנדסה מהאוניברסיטה הטכנית של מינכן, גרמניה. בזמנו הפנוי הוא אוהב ללכת לחדר כושר ולשחק עם ילדיו.

בול זמן:

עוד מ למידת מכונות AWS