قم ببناء وتدريب نماذج الرؤية الحاسوبية لاكتشاف مواضع السيارات في الصور باستخدام Amazon SageMaker و Amazon Rekognition | خدمات أمازون ويب

قم ببناء وتدريب نماذج الرؤية الحاسوبية لاكتشاف مواضع السيارات في الصور باستخدام Amazon SageMaker و Amazon Rekognition | خدمات أمازون ويب

تعد رؤية الكمبيوتر (CV) أحد أكثر تطبيقات التعلم الآلي (ML) والتعلم العميق شيوعًا. تتراوح حالات الاستخدام بين السيارات ذاتية القيادة ، والإشراف على المحتوى على منصات التواصل الاجتماعي ، واكتشاف السرطان ، والاكتشاف الآلي للعيوب. الأمازون إعادة الاعتراف هي خدمة مُدارة بالكامل يمكنها أداء مهام السيرة الذاتية مثل اكتشاف الكائنات واكتشاف مقطع الفيديو وتعديل المحتوى والمزيد لاستخراج الرؤى من البيانات دون الحاجة إلى أي خبرة سابقة في تعلم الآلة. في بعض الحالات ، قد تكون هناك حاجة إلى حل مخصص أكثر مع الخدمة لحل مشكلة محددة للغاية.

في هذا المنشور ، نتناول المجالات التي يمكن فيها تطبيق السيرة الذاتية لاستخدام الحالات التي يكون فيها وضع الأشياء وموضعها واتجاهها أمرًا مهمًا. قد تكون إحدى حالات الاستخدام هذه هي تطبيقات الهاتف المحمول التي تواجه العملاء حيث يلزم تحميل الصور. قد يكون ذلك لأسباب تتعلق بالامتثال أو لتوفير تجربة مستخدم متسقة وتحسين التفاعل. على سبيل المثال ، في منصات التسوق عبر الإنترنت ، تؤثر الزاوية التي تظهر بها المنتجات في الصور على معدل شراء هذا المنتج. إحدى هذه الحالات هي اكتشاف موضع السيارة. نوضح كيف يمكنك الجمع بين حلول ML المعروفة والمعالجة اللاحقة لمعالجة هذه المشكلة على سحابة AWS.

نستخدم نماذج التعلم العميق لحل هذه المشكلة. يتطلب تدريب خوارزميات ML لتقدير الوضع الكثير من الخبرة وبيانات التدريب المخصصة. كلا المطلبين صعب ومكلف الحصول عليهما. لذلك ، نقدم خيارين: أحدهما لا يتطلب أي خبرة في تعلم الآلة ويستخدم Amazon Rekognition ، والآخر يستخدم الأمازون SageMaker لتدريب ونشر نموذج ML مخصص. في الخيار الأول ، نستخدم Amazon Rekognition لاكتشاف عجلات السيارة. ثم نستنتج اتجاه السيارة من مواضع العجلة باستخدام نظام قائم على القواعد. في الخيار الثاني ، نكتشف العجلات وأجزاء السيارة الأخرى باستخدام ديكيترون نموذج. تُستخدم هذه مرة أخرى لاستنتاج موضع السيارة برمز قائم على القواعد. يتطلب الخيار الثاني خبرة ML ولكنه أيضًا أكثر قابلية للتخصيص. يمكن استخدامه لمزيد من المعالجة اللاحقة على الصورة ، على سبيل المثال ، لاقتصاص السيارة بأكملها. يمكن تدريب كلا الخيارين على مجموعات البيانات المتاحة للجمهور. أخيرًا ، نوضح كيف يمكنك دمج حل الكشف عن وضع السيارة هذا في تطبيق الويب الحالي الخاص بك باستخدام خدمات مثل بوابة أمازون API و تضخيم AWS.

حل نظرة عامة

يوضح الرسم البياني التالي بنية الحل.

قم ببناء وتدريب نماذج رؤية الكمبيوتر لاكتشاف مواضع السيارة في الصور باستخدام Amazon SageMaker وAmazon Rekognition | أمازون ويب سيرفيسز PlatoBlockchain Data Intelligence. البحث العمودي. منظمة العفو الدولية.

يتكون الحل من تطبيق ويب وهمي في Amplify حيث يمكن للمستخدم تحميل صورة واستدعاء إما نموذج Amazon Rekognition أو نموذج Detectron المخصص لاكتشاف موضع السيارة. لكل خيار ، نستضيف ملف AWS لامدا تعمل خلف بوابة API التي تتعرض لتطبيقنا الوهمي. لقد قمنا بتكوين وظيفة Lambda الخاصة بنا لتعمل إما باستخدام نموذج Detectron المدرب في SageMaker أو Amazon Rekognition.

المتطلبات الأساسية المسبقة

في هذا الدليل ، يجب أن يكون لديك المتطلبات الأساسية التالية:

قم بإنشاء تطبيق بدون خادم باستخدام Amazon Rekognition

يوضح خيارنا الأول كيف يمكنك اكتشاف اتجاهات السيارة في الصور باستخدام Amazon Rekognition. تكمن الفكرة في استخدام Amazon Rekognition لاكتشاف موقع السيارة وعجلاتها ثم إجراء معالجة لاحقة لاستنباط اتجاه السيارة من هذه المعلومات. يتم نشر الحل الكامل باستخدام Lambda كما هو موضح في ملف جيثب مستودع. يحتوي هذا المجلد على ملفين رئيسيين: ملف 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 الذي تم فك تشفيره. بالنظر إلى الصورة ، فإن Amazon Rekognition detect_labels يتم استدعاء الوظيفة من دالة Lambda باستخدام بوتو 3. تقوم الوظيفة بإرجاع تسمية واحدة أو أكثر لكل كائن في الصورة وتفاصيل المربع المحيط لجميع تسميات الكائنات المكتشفة كجزء من الاستجابة ، جنبًا إلى جنب مع معلومات أخرى مثل الثقة في التسمية المعينة ، وتسميات الأصل للتسمية المكتشفة ، ممكن الأسماء المستعارة للتسمية والفئات التي تنتمي إليها التسمية المكتشفة. بناءً على الملصقات التي أرجعها 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 Custom Labels ، لا تحتاج إلا إلى مجموعة صغيرة من صور التدريب الخاصة بحالة الاستخدام الخاصة بك ، وفي هذه الحالة صور السيارة بزوايا محددة ، لأنها تستخدم الإمكانات الحالية في Amazon Rekognition المتمثلة في التدريب على عشرات الملايين من الصور عبر العديد من الفئات. يمكن دمج Rekognition Custom Labels ببضع نقرات وتعديلات صغيرة على وظيفة Lambda التي نستخدمها لحل Amazon Rekognition القياسي.

تدريب نموذج باستخدام وظيفة تدريب SageMaker

في خيارنا الثاني ، نقوم بتدريب نموذج تعلم عميق مخصص على SageMaker. نحن نستخدم ال إطار Detectron2 لتجزئة قطع غيار السيارات. ثم يتم استخدام هذه الأجزاء لاستنتاج موضع السيارة.

إطار عمل Detectron2 عبارة عن مكتبة توفر أحدث خوارزميات الكشف والتجزئة. يوفر Detectron مجموعة متنوعة من نماذج Mask R-CNN التي تم تدريبها على مجموعة بيانات COCO (الكائنات المشتركة في السياق) الشهيرة. لبناء نموذج الكشف عن كائنات السيارة ، نستخدم نقل التعلم لضبط نموذج قناع R-CNN مُدرب مسبقًا على تجزئة قطع غيار السيارات مجموعة البيانات. تسمح لنا مجموعة البيانات هذه بتدريب نموذج يمكنه اكتشاف العجلات وأيضًا أجزاء السيارة الأخرى. يمكن استخدام هذه المعلومات الإضافية بشكل أكبر في حسابات زاوية السيارة بالنسبة للصورة.

تحتوي مجموعة البيانات على بيانات مشروحة لأجزاء السيارة لاستخدامها في مهام الكشف عن الأشياء والتجزئة الدلالية: ما يقرب من 500 صورة لسيارات السيدان والشاحنات الصغيرة والمركبات الرياضية متعددة الأغراض (SUVs) ، تم التقاطها بمناظر متعددة (أمامية وخلفية وجانبية). يتم وضع تعليقات توضيحية على كل صورة من خلال 18 قناع مثيل ومربعات إحاطة تمثل الأجزاء المختلفة للسيارة مثل العجلات والمرايا والأضواء والزجاج الأمامي والخلفي. قمنا بتعديل التعليقات التوضيحية الأساسية للعجلات بحيث يتم اعتبار كل عجلة كائنًا فرديًا بدلاً من اعتبار جميع العجلات المتاحة في الصورة ككائن واحد.

نستخدم خدمة تخزين أمازون البسيطة (Amazon S3) لتخزين مجموعة البيانات المستخدمة لتدريب نموذج Detectron جنبًا إلى جنب مع عناصر النموذج المدربة. علاوة على ذلك ، يتم تخزين حاوية Docker التي تعمل بوظيفة Lambda في سجل الأمازون المرنة للحاويات (أمازون 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 الذي تم إنشاؤه. عند انتهاء التدريب ، يتم تخزين الأداة النموذجية المدربة في حاوية الجلسة في Amazon 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 للنشر لأنها أصغر وحدة معالجة رسومات متاحة وكافية لهذا العرض التوضيحي. يجب تكوين مكونين في ملف نص الاستدلال: نموذج التحميل وخدمة النموذج. الوظيفة 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

على غرار حل Amazon Rekognition ، تنبأت المربعات المحيطة بـ wheel يتم تصفية الفئة من مخرجات الكشف وتزويدها بوحدة المعالجة اللاحقة لتقييم موضع السيارة بالنسبة للإخراج.

أخيرًا ، قمنا أيضًا بتحسين المعالجة اللاحقة لحل 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 console وحدد موقع المشروع الذي قمت بإنشائه.

سيكون عنوان URL للتطبيق مرئيًا بعد اكتمال النشر.

  • انتقل إلى عنوان URL واستمتع بواجهة المستخدم.

قم ببناء وتدريب نماذج رؤية الكمبيوتر لاكتشاف مواضع السيارة في الصور باستخدام Amazon SageMaker وAmazon Rekognition | أمازون ويب سيرفيسز PlatoBlockchain Data Intelligence. البحث العمودي. منظمة العفو الدولية.

وفي الختام

تهانينا! لقد نشرنا بنية كاملة بدون خادم استخدمنا فيها Amazon Rekognition ، ولكننا قدمنا ​​أيضًا خيارًا لنموذجك المخصص ، مع توفر هذا المثال على GitHub جيثب:. إذا لم يكن لديك خبرة ML في فريقك أو بيانات مخصصة كافية لتدريب نموذج ، يمكنك تحديد الخيار الذي يستخدم Amazon Rekognition. إذا كنت تريد المزيد من التحكم في نموذجك ، وترغب في تخصيصه بشكل أكبر ، ولديك بيانات كافية ، يمكنك اختيار حل SageMaker. إذا كان لديك فريق من علماء البيانات ، فقد يرغبون أيضًا في تحسين النماذج بشكل أكبر واختيار خيار أكثر تخصيصًا ومرونة. يمكنك وضع وظيفة Lambda و API Gateway خلف تطبيق الويب الخاص بك باستخدام أي من الخيارين. يمكنك أيضًا استخدام هذا الأسلوب لحالة استخدام مختلفة قد ترغب في تكييف الكود من أجلها.

ميزة هذه البنية التي لا تحتوي على خادم هي أن اللبنات الأساسية قابلة للاستبدال تمامًا. الفرص لا حدود لها تقريبا. لذا ، ابدأ اليوم!

كما هو الحال دائمًا ، ترحب AWS بالتعليقات. يرجى تقديم أي تعليقات أو أسئلة.


حول المؤلف

قم ببناء وتدريب نماذج رؤية الكمبيوتر لاكتشاف مواضع السيارة في الصور باستخدام Amazon SageMaker وAmazon Rekognition | أمازون ويب سيرفيسز PlatoBlockchain Data Intelligence. البحث العمودي. منظمة العفو الدولية.مايكل والنر هو مستشار أول للبيانات والذكاء الاصطناعي مع خدمات AWS الاحترافية وهو متحمس لتمكين العملاء في رحلتهم ليصبحوا مدفوعين بالبيانات و AWSome في سحابة AWS. علاوة على ذلك ، يحب التفكير الكبير مع العملاء للابتكار وابتكار أفكار جديدة لهم.

قم ببناء وتدريب نماذج رؤية الكمبيوتر لاكتشاف مواضع السيارة في الصور باستخدام Amazon SageMaker وAmazon Rekognition | أمازون ويب سيرفيسز PlatoBlockchain Data Intelligence. البحث العمودي. منظمة العفو الدولية.آمنة نجمي هو عالم بيانات مع خدمات AWS الاحترافية. إنها شغوفة بمساعدة العملاء على الابتكار باستخدام تقنيات البيانات الضخمة والذكاء الاصطناعي للاستفادة من قيمة الأعمال والرؤى من البيانات. لديها خبرة في العمل على منصة البيانات ومشاريع الذكاء الاصطناعي / التعلم الآلي في مجال الرعاية الصحية وعلوم الحياة. في أوقات فراغها ، تستمتع بالبستنة والسفر إلى أماكن جديدة.

قم ببناء وتدريب نماذج رؤية الكمبيوتر لاكتشاف مواضع السيارة في الصور باستخدام Amazon SageMaker وAmazon Rekognition | أمازون ويب سيرفيسز PlatoBlockchain Data Intelligence. البحث العمودي. منظمة العفو الدولية.ديفيد سوروين هو أحد كبار علماء البيانات في خدمات AWS الاحترافية ، حيث يمكّن العملاء في رحلة الذكاء الاصطناعي / التعلم الآلي على سحابة AWS. يركز ديفيد على التوائم الرقمية والتنبؤ والحساب الكمي. حصل على دكتوراه في الفيزياء النظرية من جامعة إنسبروك ، النمسا. كان أيضًا باحثًا في مرحلة الدكتوراه وما بعد الدكتوراه في معهد ماكس بلانك للبصريات الكمية في ألمانيا. في أوقات فراغه يحب القراءة والتزلج وقضاء الوقت مع عائلته.

قم ببناء وتدريب نماذج رؤية الكمبيوتر لاكتشاف مواضع السيارة في الصور باستخدام Amazon SageMaker وAmazon Rekognition | أمازون ويب سيرفيسز PlatoBlockchain Data Intelligence. البحث العمودي. منظمة العفو الدولية.سريكريشنا شيتانيا كوندورو هو عالم بيانات أقدم مع خدمات AWS الاحترافية. يدعم العملاء في وضع نماذج أولية وتشغيل تطبيقات ML الخاصة بهم على AWS. يركز Srikrishna على رؤية الكمبيوتر ومعالجة اللغات الطبيعية. كما أنه يقود تصميم منصة ML واستخدام مبادرات تحديد حالة العملاء عبر قطاعات الصناعة المتنوعة. سريكريشنا حاصل على ماجستير في الهندسة الطبية الحيوية من جامعة RWTH آخن ، ألمانيا ، مع التركيز على التصوير الطبي.

قم ببناء وتدريب نماذج رؤية الكمبيوتر لاكتشاف مواضع السيارة في الصور باستخدام Amazon SageMaker وAmazon Rekognition | أمازون ويب سيرفيسز PlatoBlockchain Data Intelligence. البحث العمودي. منظمة العفو الدولية.أحمد منصور هو عالم بيانات في خدمات AWS الاحترافية. يقدم الدعم الفني للعملاء من خلال رحلة الذكاء الاصطناعي / التعلم الآلي على سحابة AWS. يركز أحمد على تطبيقات البرمجة اللغوية العصبية في مجال البروتين جنبًا إلى جنب مع RL. حاصل على دكتوراه في الهندسة من جامعة ميونخ التقنية بألمانيا. يحب في أوقات فراغه الذهاب إلى صالة الألعاب الرياضية واللعب مع أطفاله.

الطابع الزمني:

اكثر من التعلم الآلي من AWS