ساخت و آموزش مدل های بینایی کامپیوتری برای تشخیص موقعیت خودرو در تصاویر با استفاده از Amazon SageMaker و Amazon Rekognition | خدمات وب آمازون

ساخت و آموزش مدل های بینایی کامپیوتری برای تشخیص موقعیت خودرو در تصاویر با استفاده از Amazon SageMaker و Amazon Rekognition | خدمات وب آمازون

بینایی کامپیوتر (CV) یکی از رایج ترین کاربردهای یادگیری ماشین (ML) و یادگیری عمیق است. موارد استفاده از خودروهای خودران، تعدیل محتوا در پلتفرم های رسانه های اجتماعی، تشخیص سرطان و تشخیص خودکار نقص را شامل می شود. شناسایی آمازون یک سرویس کاملاً مدیریت شده است که می تواند وظایف CV مانند تشخیص اشیا، تشخیص بخش ویدیو، تعدیل محتوا و موارد دیگر را برای استخراج بینش از داده ها بدون نیاز به تجربه قبلی ML انجام دهد. در برخی موارد، ممکن است یک راه حل سفارشی تر همراه با سرویس برای حل یک مشکل بسیار خاص مورد نیاز باشد.

در این پست به مناطقی می‌پردازیم که می‌توان CV را برای استفاده از مواردی که موقعیت اشیا، موقعیت و جهت آنها مهم است، اعمال کرد. یکی از این موارد استفاده، برنامه‌های کاربردی موبایلی است که در آن‌ها نیاز به آپلود تصویر است. ممکن است به دلایل انطباق یا ارائه یک تجربه کاربری ثابت و بهبود تعامل باشد. به عنوان مثال در پلتفرم های خرید آنلاین، زاویه نمایش محصولات در تصاویر بر میزان خرید این محصول تاثیر دارد. یکی از این موارد تشخیص موقعیت خودرو است. ما نشان می دهیم که چگونه می توانید راه حل های شناخته شده ML را با پس پردازش ترکیب کنید تا به این مشکل در AWS Cloud رسیدگی کنید.

برای حل این مشکل از مدل های یادگیری عمیق استفاده می کنیم. آموزش الگوریتم های ML برای تخمین ژست نیاز به تخصص زیادی و داده های آموزشی سفارشی دارد. به دست آوردن هر دو الزام سخت و پرهزینه است. بنابراین، ما دو گزینه را ارائه می دهیم: یکی که نیازی به تخصص ML ندارد و از شناسایی آمازون استفاده می کند و دیگری که از شناسایی استفاده می کند. آمازون SageMaker برای آموزش و استقرار یک مدل ML سفارشی. در گزینه اول از Amazon Rekognition برای تشخیص چرخ های خودرو استفاده می کنیم. سپس جهت گیری خودرو را از موقعیت چرخ ها با استفاده از یک سیستم مبتنی بر قانون استنباط می کنیم. در گزینه دوم، چرخ ها و سایر قطعات خودرو را با استفاده از آشکارساز مدل. اینها دوباره برای استنباط موقعیت خودرو با کدهای مبتنی بر قانون استفاده می شوند. گزینه دوم به تجربه ML نیاز دارد اما همچنین قابل تنظیم تر است. می توان از آن برای پس پردازش بیشتر روی تصویر استفاده کرد، به عنوان مثال، برای برش دادن کل ماشین. هر دو گزینه را می توان بر روی مجموعه داده های در دسترس عموم آموزش داد. در نهایت، ما نشان می‌دهیم که چگونه می‌توانید این راه‌حل تشخیص وضعیت خودرو را با استفاده از سرویس‌هایی مانند برنامه وب موجود خود ادغام کنید دروازه API آمازون و AWS تقویت کنید.

بررسی اجمالی راه حل

نمودار زیر معماری راه حل را نشان می دهد.

ساخت و آموزش مدل های بینایی کامپیوتری برای تشخیص موقعیت خودرو در تصاویر با استفاده از Amazon SageMaker و Amazon Rekognition | خدمات وب آمازون هوش داده پلاتو بلاک چین. جستجوی عمودی Ai.

راه حل شامل یک برنامه وب ساختگی در Amplify است که در آن کاربر می تواند یک تصویر را آپلود کند و از مدل شناسایی آمازون یا مدل Detectron سفارشی برای تشخیص موقعیت ماشین استفاده کند. برای هر گزینه، ما میزبان یک AWS لامبدا عملکرد پشت دروازه API که در معرض برنامه ساختگی ما قرار دارد. ما تابع Lambda خود را طوری پیکربندی کردیم که با مدل Detectron آموزش دیده در SageMaker یا Amazon Rekognition اجرا شود.

پیش نیازها

برای این راهنما، شما باید پیش نیازهای زیر را داشته باشید:

با استفاده از Amazon Rekognition یک برنامه بدون سرور ایجاد کنید

اولین گزینه ما نشان می دهد که چگونه می توانید جهت گیری ماشین را در تصاویر با استفاده از آمازون Rekognition تشخیص دهید. ایده این است که از آمازون Rekognition برای شناسایی مکان خودرو و چرخ‌های آن و سپس پردازش پس‌پردازی برای استخراج جهت گیری خودرو از این اطلاعات استفاده شود. کل راه حل با استفاده از لامبدا همانطور که در نشان داده شده است مستقر شده است مخزن Github. این پوشه شامل دو فایل اصلی است: یک Dockerfile که تصویر داکر را که در تابع 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 باشد. با توجه به تصویر، آمازون Rekognition detect_labels تابع با استفاده از تابع Lambda فراخوانی می شود Boto3. این تابع یک یا چند برچسب را برای هر شی در تصویر و جزئیات جعبه مرزی را برای همه برچسب‌های شی شناسایی شده به عنوان بخشی از پاسخ، همراه با سایر اطلاعات مانند اطمینان برچسب اختصاص داده شده، برچسب‌های اجدادی برچسب شناسایی شده، ممکن برمی‌گرداند. نام مستعار برای برچسب، و دسته هایی که برچسب شناسایی شده به آن تعلق دارد. بر اساس برچسب‌هایی که توسط آمازون 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]]]

توجه داشته باشید که برنامه نیاز دارد که فقط یک ماشین در تصویر وجود داشته باشد و اگر اینطور نیست، خطا را برمی‌گرداند. با این حال، پس پردازش را می توان برای ارائه توضیحات جهت گیری دانه ای بیشتر، پوشش چندین اتومبیل، یا محاسبه جهت اشیاء پیچیده تر تطبیق داد.

بهبود تشخیص چرخ

برای بهبود بیشتر دقت تشخیص چرخ، می توانید استفاده کنید برچسب های سفارشی شناسایی آمازون. مشابه تنظیم دقیق با استفاده از SageMaker برای آموزش و استقرار یک مدل ML سفارشی، می‌توانید داده‌های برچسب‌گذاری شده خود را بیاورید تا آمازون Rekognition بتواند تنها در چند ساعت یک مدل تجزیه و تحلیل تصویر سفارشی را برای شما تولید کند. با برچسب‌های سفارشی Rekognition، شما فقط به مجموعه کوچکی از تصاویر آموزشی نیاز دارید که مخصوص مورد استفاده شما هستند، در این مورد تصاویر ماشین با زوایای خاص، زیرا از قابلیت‌های موجود در آمازون Rekognition برای آموزش ده‌ها میلیون تصویر در سراسر استفاده می‌کند. بسیاری از دسته ها برچسب‌های سفارشی شناسایی را می‌توان تنها با چند کلیک و سازگاری‌های کوچک با عملکرد لامبدا که برای راه‌حل استاندارد شناسایی آمازون استفاده می‌کنیم، ادغام کرد.

با استفاده از کار آموزشی SageMaker یک مدل را آموزش دهید

در گزینه دوم، ما یک مدل یادگیری عمیق سفارشی را در SageMaker آموزش می‌دهیم. ما استفاده می کنیم چارچوب Detecron2 برای تقسیم بندی قطعات خودرو سپس از این بخش ها برای استنباط موقعیت خودرو استفاده می شود.

چارچوب Detectron2 کتابخانه ای است که پیشرفته ترین الگوریتم های تشخیص و تقسیم بندی را ارائه می دهد. Detectron انواع مدل های Mask R-CNN را ارائه می دهد که بر روی مجموعه داده معروف COCO (اشیاء مشترک در زمینه) آموزش داده شده اند. برای ساختن مدل تشخیص اشیاء خودروی خود، از آموزش انتقال برای تنظیم دقیق مدل Mask R-CNN از پیش آموزش‌دیده استفاده می‌کنیم. تقسیم بندی قطعات خودرو مجموعه داده این مجموعه داده به ما امکان آموزش مدلی را می دهد که می تواند چرخ ها و همچنین سایر قطعات خودرو را تشخیص دهد. این اطلاعات اضافی را می توان بیشتر در محاسبات زاویه ماشین نسبت به تصویر استفاده کرد.

مجموعه داده حاوی داده‌های مشروح قطعات خودرو است که برای تشخیص اشیا و وظایف تقسیم‌بندی معنایی استفاده می‌شود: تقریباً 500 تصویر از خودروهای سدان، پیکاپ و وسایل نقلیه ورزشی (SUV) که در چند نما (نماهای جلو، عقب و جانبی) گرفته شده‌اند. هر تصویر با 18 ماسک نمونه و جعبه‌های مرزبندی نشان‌دهنده بخش‌های مختلف خودرو مانند چرخ‌ها، آینه‌ها، چراغ‌ها و شیشه‌های جلو و عقب است. ما حاشیه‌نویسی‌های پایه چرخ‌ها را طوری تغییر دادیم که هر چرخ به‌جای در نظر گرفتن تمام چرخ‌های موجود در تصویر به عنوان یک شی، یک شی جداگانه در نظر گرفته شود.

استفاده می کنیم سرویس ذخیره سازی ساده آمازون (Amazon S3) برای ذخیره مجموعه داده مورد استفاده برای آموزش مدل Detectron به همراه مصنوعات مدل آموزش دیده. علاوه بر این، ظرف Docker که در تابع Lambda اجرا می شود در آن ذخیره می شود رجیستری ظروف الاستیک آمازون (Amazon ECR). ظرف Docker در تابع Lambda برای گنجاندن کتابخانه‌ها و وابستگی‌های مورد نیاز برای اجرای کد مورد نیاز است. ما می توانیم به طور جایگزین استفاده کنیم لایه های لامبدا، اما محدود به حجم بسته بندی شده استقرار زیپ نشده 250 مگابایتی است و حداکثر پنج لایه را می توان به یک تابع Lambda اضافه کرد.

راه حل ما بر اساس SageMaker ساخته شده است: ما از پیش ساخته شده است ظروف SageMaker Docker برای PyTorch تا PyTorch سفارشی ما را اجرا کند کد آموزشی. در مرحله بعد، همانطور که در قطعه کد زیر نشان داده شده است، از SageMaker Python SDK برای قرار دادن تصویر آموزشی در تخمینگر PyTorch SageMaker استفاده می کنیم:

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 ارائه شده است. ما می توانیم مدل سفارشی خود را از طریق a میزبانی کنیم نقطه پایان بلادرنگ 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)

توجه داشته باشید که ما از یک GPU ml.g4dn.xlarge برای استقرار استفاده کردیم زیرا کوچکترین 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

مشابه راه‌حل آمازون Rekognition، جعبه‌های مرزی برای آن پیش‌بینی شده است wheel کلاس از خروجی های تشخیص فیلتر شده و به ماژول پس پردازش عرضه می شود تا موقعیت خودرو را نسبت به خروجی ارزیابی کند.

در نهایت، ما پس پردازش را برای راه حل Detectron نیز بهبود دادیم. همچنین از بخش های قطعات مختلف خودرو برای استنباط راه حل استفاده می کند. به عنوان مثال، هر زمان که سپر جلو تشخیص داده شود، اما سپر عقب وجود نداشته باشد، فرض بر این است که نمای جلویی از خودرو داریم و زاویه مربوطه محاسبه می شود.

راه حل خود را به برنامه وب متصل کنید

مراحل اتصال نقاط انتهایی مدل به Amplify به شرح زیر است:

  • مخزن برنامه ای که پشته AWS CDK ایجاد کرده است را با نام کلون کنید car-angle-detection-website-repo. مطمئن شوید که در منطقه ای که برای استقرار استفاده کرده اید به دنبال آن هستید.
  • نقاط پایانی API Gateway را برای هر یک از توابع 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 بروید و پروژه ای که ایجاد کرده اید را پیدا کنید.

URL برنامه پس از تکمیل استقرار قابل مشاهده خواهد بود.

  • به URL بروید و از رابط کاربری لذت ببرید.

ساخت و آموزش مدل های بینایی کامپیوتری برای تشخیص موقعیت خودرو در تصاویر با استفاده از Amazon SageMaker و Amazon Rekognition | خدمات وب آمازون هوش داده پلاتو بلاک چین. جستجوی عمودی Ai.

نتیجه

تبریک می گویم! ما یک معماری کامل بدون سرور را مستقر کرده‌ایم که در آن از Amazon Rekognition استفاده کرده‌ایم، اما گزینه‌ای را برای مدل سفارشی شما نیز ارائه کرده‌ایم، با این مثال در دسترس است GitHub. اگر در تیم خود تخصص ML ندارید یا داده های سفارشی کافی برای آموزش یک مدل ندارید، می توانید گزینه ای را انتخاب کنید که از شناسایی آمازون استفاده می کند. اگر می‌خواهید کنترل بیشتری بر مدل خود داشته باشید، می‌خواهید آن را بیشتر سفارشی کنید و داده‌های کافی در اختیار دارید، می‌توانید راه‌حل SageMaker را انتخاب کنید. اگر تیمی از دانشمندان داده دارید، ممکن است بخواهند مدل‌ها را بیشتر تقویت کنند و گزینه سفارشی‌تر و انعطاف‌پذیرتر را انتخاب کنند. شما می توانید تابع Lambda و API Gateway را در پشت برنامه وب خود با استفاده از یکی از دو گزینه قرار دهید. همچنین می‌توانید از این روش برای موارد استفاده متفاوتی استفاده کنید که ممکن است بخواهید کد را برای آن تطبیق دهید.

مزیت این معماری بدون سرور این است که بلوک های ساختمان کاملاً قابل تعویض هستند. فرصت ها تقریبا نامحدود هستند. بنابراین، امروز شروع کنید!

مثل همیشه، AWS از بازخورد استقبال می کند. لطفا هرگونه نظر یا سوالی را مطرح کنید.


درباره نویسنده

ساخت و آموزش مدل های بینایی کامپیوتری برای تشخیص موقعیت خودرو در تصاویر با استفاده از Amazon SageMaker و Amazon Rekognition | خدمات وب آمازون هوش داده پلاتو بلاک چین. جستجوی عمودی Ai.مایکل والنر یک مشاور ارشد داده و هوش مصنوعی با خدمات حرفه ای AWS است و مشتاق است که مشتریان را در سفر خود قادر به تبدیل شدن به داده محور و AWSome در ابر AWS کند. علاوه بر این، او دوست دارد با مشتریان بزرگ فکر کند و ایده های جدیدی برای آنها ابداع کند.

ساخت و آموزش مدل های بینایی کامپیوتری برای تشخیص موقعیت خودرو در تصاویر با استفاده از Amazon SageMaker و Amazon Rekognition | خدمات وب آمازون هوش داده پلاتو بلاک چین. جستجوی عمودی Ai.آمنه نجمی یک دانشمند داده با خدمات حرفه ای AWS است. او مشتاق کمک به مشتریان برای نوآوری با فناوری‌های کلان داده و هوش مصنوعی است تا از ارزش تجاری و بینش داده‌ها بهره ببرند. او تجربه کار بر روی پلتفرم داده و پروژه های AI/ML در بخش مراقبت های بهداشتی و علوم زندگی را دارد. او در اوقات فراغت خود از باغبانی و سفر به مکان های جدید لذت می برد.

ساخت و آموزش مدل های بینایی کامپیوتری برای تشخیص موقعیت خودرو در تصاویر با استفاده از Amazon SageMaker و Amazon Rekognition | خدمات وب آمازون هوش داده پلاتو بلاک چین. جستجوی عمودی Ai.دیوید ساوروین یک دانشمند ارشد داده در خدمات حرفه‌ای AWS است، جایی که مشتریان را قادر می‌سازد تا سفر AI/ML خود را در ابر AWS انجام دهند. دیوید بر دوقلوهای دیجیتال، پیش بینی و محاسبات کوانتومی تمرکز دارد. وی دارای مدرک دکترای فیزیک نظری از دانشگاه اینسبروک اتریش است. او همچنین یک محقق دکترا و فوق دکترا در موسسه ماکس پلانک برای اپتیک کوانتومی در آلمان بود. در اوقات فراغت او عاشق خواندن، اسکی و گذراندن وقت با خانواده است.

ساخت و آموزش مدل های بینایی کامپیوتری برای تشخیص موقعیت خودرو در تصاویر با استفاده از Amazon SageMaker و Amazon Rekognition | خدمات وب آمازون هوش داده پلاتو بلاک چین. جستجوی عمودی Ai.سریکریشنا چایتانیا کوندورو یک دانشمند ارشد داده با خدمات حرفه ای AWS است. او از مشتریان در نمونه سازی و عملیاتی کردن برنامه های ML خود در AWS پشتیبانی می کند. سریکریشنا روی بینایی کامپیوتر و NLP تمرکز دارد. او همچنین طراحی پلت فرم ML و استفاده از ابتکارات شناسایی مورد را برای مشتریان در بخش‌های مختلف صنعت رهبری می‌کند. سریکریشنا دارای مدرک کارشناسی ارشد مهندسی بیومدیکال از دانشگاه RWTH آخن، آلمان، با تمرکز بر تصویربرداری پزشکی است.

ساخت و آموزش مدل های بینایی کامپیوتری برای تشخیص موقعیت خودرو در تصاویر با استفاده از Amazon SageMaker و Amazon Rekognition | خدمات وب آمازون هوش داده پلاتو بلاک چین. جستجوی عمودی Ai.احمد منصور دانشمند داده در AWS Professional Services است. او پشتیبانی فنی را برای مشتریان از طریق سفر AI/ML آنها در ابر AWS ارائه می کند. احمد بر کاربردهای NLP در حوزه پروتئین همراه با RL تمرکز دارد. وی دارای مدرک دکترای مهندسی از دانشگاه فنی مونیخ آلمان است. در اوقات فراغتش دوست دارد به باشگاه برود و با بچه هایش بازی کند.

تمبر زمان:

بیشتر از آموزش ماشین AWS