تخمین عمق در وسایل نقلیه خودران
در این مقاله به توضیح برخی از پیشرفتهترین روشهای تخمین عمق در وسایل نقلیه خودران و یا همان پیشبینی عمق Depth در توالی عکسهایی میپردازیم که وسایل نقلیه ثبت کردهاند؛ این تصاویر بدون نیاز به استفاده از دوربینهای اضافی و حسگرها به ساخت و تولید مدلهای وسایل نقلیه خودران کمک میکنند.
تخمین عمق در وسایل نقلیه خودران
همانگونه که در مقاله چگونگی عملکرد وسایل نقلیه خودران: مقدمهای بر موقعیتیابی و نقشهبردای همزمان (SLAM) Simultaneous Localization And Mapping (SLAM) گفتم حسگرهای زیادی وجود دارند که در حین حرکت وسایل نقلیه، از آنها برای ثبت اطلاعات استفاده میشود.
اطلاعاتی که این حسگرها ثبت میکنند شامل سرعت، موقعیت، عمق، حرارت و غیره است. سپس این اطلاعات به یک سیستم بازخورد Feedback system تغذیه میشود و این سیستم مدلهای حرکت Motion models وسایل نقلیه را آموزش میدهد و وسایل نقلیه باید از آنها پیروی کنند. در این مقاله به بحث و گفتوگو راجع به تخمین عمق در وسایل نقلیه خودران میپردازیم که اغلب توسط یک حسگر LiDAR ثبت میشود.
[irp posts=”5325″]حسگر LiDAR با استفاده از یک لیزر Laser و یک حسگر که نور بازتابیده Reflected light را اندازه میگیرد، فاصله از یک شی را ثبت میکند. با توجه به اینکه استفاده از حسگر LiDAR در وسایل نقلیه روزمره مقرون به صرفه نیست، به چه روشهای دیگری میتوانیم تخمین عمق در وسایل نقلیه خودران را انجام دهیم؟
روشهای پیشرفتهای که قصد دارم در این مقاله معرفی کنم رویکردهای یادگیری عمیق بدون نظارت Unsupervised deep learning approaches هستند که برای اندازهگیری عمق، از اختلاف و یا تفاوت در پیکسلها از یک فریم تا فریم بعدی استفاده میکنند.
Monodepth2
نویسندگان مقاله روشی بسط دادهاند که در آن شبکه های عمق در کنار شبکههای ژست Pose netwroks قرار گرفته اند تا بدین وسیله عمق در یک فریم را پیشبینی میکنند. نویسندگان این مقاله برای تخمین عمق در وسایل نقلیه خودران، معماری خود را با رشتهای از فریمها آموزش میدهند و علاوه بر آن از چندین تابع زیان برای آموزش این دو شبکه استفاده میکنند. در این روش برای آموزش، به دیتاست برچسبدار Ground truth dataset نیازی نیست.
[irp posts=”19429″]در عوض در این روش از فریمهای متوالی زمانی Consecutive temporal frames یک عکس برای آموزش استفاده میشود. علاوه بر این در این روش برای کمک به یادگیری محدود، از یک شبکه تخمین ژست Pose estimation network استفاده میشود. مدل با تفاوتهای میان تصویر ورودی و تصویری که از خروجی شبکه ژست و شبکه عمق Depth network بازسازی شده آموزش میبیند. در آینده فرایند بازسازی را با جزئیات بیشتری شرح میدهیم. اصلیترین یافتههای این مقاله عبارتند از:
1- تکنیک ماسککردن خودکار Auto-masking technique برای تمرکز بر روی پیکسلهای مهمتر
2- اصلاح خطای فتومتریک بازسازی Photometric reconstruction error با استفاده از نگاشت عمق Depth map
معماری
در ادامه مقاله تخمین عمق در وسایل نقلیه خودران به موضوع معماری میپردازیم. در روشی که در این مقاله ارائه شده است از یک شبکه عمق و یک شبکه ژست استفاده میشود. شبکه عمق معماری انکودر- دیکودر U-Net (2) است. انکودر مدل ResNet است که از پیش آموزش دیده است. دیکودر عمق مشابه کار قبلی است که در آن خروجی سیگموئید Sigmoid output را به مقادیر عمق تبدیل میکند.
نویسندگان این مقاله از یک شبکه ژست ResNet18 استفاده میکنند؛ این شبکه به گونهای اصلاح شده که دو عکس رنگی را به عنوان ورودی بگیرد تا یک ، یا چرخش Rotation و ترجمه را پیشبینی کند.
شبکه ژست به جای استفاده از جفت استریو
Stereo pair از فریمهای زمانی به عنوان دو تصویر استفاده میکند. این شبکه، ظاهر تصویر مقصد را با در نظر گرفتن تصویر دیگری در همان دنباله، یک فریم قبل یا یک فریم بعد، پیشبینی میکند.
آموزش
تصویر مقابل نشاندهنده فرایند آموزش معماری است.
خطای فتومتریک بازسازی
تصویر مقصد در فریم 0 قرار دارد و تصاویر مورد استفاده جهت پیشبینی میتوانند فریم قبلی یا فریم بعدی یا به عبارت دیگر فریم +1 یا فریم – 1 باشند. زیان بر اساس شباهتهای میان تصویر مقصد و تصویر بازسازیشده مقصد محاسبه میشود. در فرایند بازسازی ابتدا باید با استفاده از شبکه ژست، ماتریس تبدیل Transformation matrix فریم مبدأ ، فریم +1 یا فریم – 1 ، محاسبه میشود.
[irp posts=”17495″]به عبارت دیگر با استفاده از اطلاعاتی راجع به چرخش و ترجمه ، نگاشت از فریم مبدأ به فریم مقصد را محاسبه میکنیم. سپس از نگاشت عمق که از شبکه ژست برای تصویر مقصد پیشبینی شده و از ماتریس تبدیلِ شبکه ژست استفاده میکنیم تا با ماتریس درونی k Intrinsics matrix k به دوربین راه پیدا کنیم و تصویر بازسازیشده مقصد را ثبت کنیم. در فرایند بازسازی لازم است ابتدا نگاشت عمق به یک اَبر نقطه سه بعدی 3D point تبدیل شود، سپس با استفاده از پارامترهای درونی دوربین camera intrinsics، موقعیتهای سه بعدی 3D position را به نقاط دو بعدی تبدیل میکنیم.
از نقاط به دست آمده به عنوان توری نمونه برداری Sampling grid برای درون یابی دو خطی Bilinearly interpolate تصویر مقصد استفاده میشود.
هدف زیان این است که تفاوتهای میان تصویر مقصد و تصویر بازسازیشده مقصد را کاهش دهد؛ در هر دو تصویر به ژست و عمق نیاز است.
معمولا روشهای مشابه، میانگین خطای بازنگاشت Reprojection error برای تصاویر مبدا (فریم +1 و فریم -1) را در نظر میگیرند. با وجود این، اگر پیکسلی در یکی از این فریمها قابل رویت نباشد اما در فریم مقصد وجود داشته باشد به این دلیل که به مرزهای تصویر نزدیک است و یا مسدود شده است، جریمه خطای فتومتریک بالا خواهد بود. برای حل و رفع مسائل مربوط به آن، در تمامی تصاویر مبدأ از خطای حداقلی فتومتریک استفاده میکنند.
ماسکگذاری خودکار
آخرین زیان فتومتریک در یک ماسک ضرب میشود تا بتوانند مسئله مربوط به تغییر در فرضیه حرکت دوربین در صحنه ای ثابت را در نظر بگیرد؛ برای مثال یک شی با سرعتی یکسان با دوربین در حرکت است یا زمانی که اشیای دیگر در حرکت هستند، دوربین متوقف شده است.
مشکلی که در این حالت با آن مواجه میشویم این است که نگاشت عمق، عمقی نامحدود Infinite depth پیشبینی میکند. نویسندگان این مقاله، این روش را روش ماسکگذاری خودکار مینامند که پیکسلهایی که ظاهر را از یک فریم به فریم بعدی تغییر نمیدهند را فیلتر میکند. آنها با استفاده از باینریای که در آن اگر خطای حداقلی فتومتریک میان تصویر مقصد و تصویر بازسازیشده مقصد کمتر از خطای حداقلی تصویر مقصد و تصویر مبدأ باشد 1 است و در غیر این صورت 0 (صفر) خواهد بود، ماسک تولید میکنند.
زمانیکه دوربین ثابت باشد، تمامی پیکسلهای یک عکس پوشانده میشوند. زمانی که شی با سرعتی مشابه با دوربین در حرکت باشد، پیکسلهای اشیای ثابت در تصویر پوشانده میشوند.
تخمین چند مقیاسی
نویسندگان این مقاله زیانها در هر مقیاس را با یکدیگر ترکیب میکنند. نویسندگان نگاشتهای عمق وضوح پایینتر را به تصاویر ورودی با وضوح بالاتر نمونهافزایی Upsample میکنند (ابعاد تصویر را افزایش میدهند) و سپس خطای فتومتریک را در ورودی با وضوح بالاتر تصویرسازی، بازنمونهگیری و محاسبه میکند. آنها ادعا میکنند این کار باعث میشود نگاشتهای عمق در هر مقیاس برای دستیابی به یک هدف واحد یعنی بازسازی تصویر مقصد با دقت وضوح بالا تلاش کنند.
سایر زیانها
علاوه بر این نویسندگان از زیان هموار لبه Edge-aware smoothness loss میان مقادیر نگاشت عمق که میانگین آنها نرمالسازی شده و تصاویر ورودی و خروجی استفاده میکنند. این کار مدل را تشویق میکند که لبههای تیز Sharp edges
را یاد بگیرند و نویزها را از بین ببرد.
آخرین تابع زیان عبارت است:
نتایج
نویسندگان این مقاله، مدل خود را در سه دیتاست که شامل سکانسهای رانندگی است ارزیابی کردهاند. روش آنها تقریبا از تمامی روشها عملکرد بهتری داشته است. تصویر مقابل نمونهای از عملکرد روش آنها است.
برای کسب اطلاعات بیشتر راجع به نتایج آنها میتوانید به مقاله مرجع برآورد عمق تک قطبی خودنظارتی رجوع کنید.
تعمیم Monodepth2: Struct2Depth
مدلسازی حرکت شی
نویسندگانی از Google brain مقالهای تألیف کردهاند و در آن Monodepth2 را بسط دادهاند. آنها به جای پیشبینی کل تصویر حرکات تک تک اشیا را پیشبینی میکنند و از این طریق شبکه ژست را ارتقا میدهند.
در این حالت به جای اینکه تصاویر بازسازیشده یک تصویرسازی واحد باشند، توالیای از تصویرسازیها خواهند بود که در آینده با هم ترکیب میشوند. آنها با استفاده از دو مدل – یک مدل حرکت شی و یک شبکه حرکت ego ( مشابه شبکه ژست که در قسمت قبلی توضیح دادیم) این کار را انجام میدهند. مراحل انجام این کار به ترتیب زیر است.
1- یک Mask R-CNN (2) از پیش آموزش داده شده اجرا میشود تا تقطیعبندی اشیایی که به صورت بالقوه متحرک هستند را ثبت کند.
2- از یک ماسک باینری استفاده میشود تا اشیایی که به صورت بالقوه متحرک هستند را از تصاویر ثابت حذف کنند ( فریم -1، فریم 0 و فریم +1)
3- تصویر ماسکگذاریشده به شبکه حرکت ego ارسال میشود و ماتریس تبدیل میان فریم -1 ، 0 و فریم 0 و +1 خروجی آن خواهند بود.
فرایند ماسکگذاری برای استخراج پسزمینه ثابت که به دنبال آن ماتریس تبدیل حرکت ego بدون اشیای متحرک قرار میگیرد. معادله از (3)
1- از ماتریس تبدیل حرکت ego که در مرحله 3 به دست آمده استفاده میشود و بر روی فریم -1 و فریم +1 اعمال میشود تا فریم اعوجاجشده 0 را بگیرد.
2- – از ماتریس تبدیل شبکه حرکت ego که در مرحله 3 به دست آمده استفاده میشود و در ماسک تقطیعبندی اشیایی که در فریم -1 و فریم +1 به صورت بالقوه متحرک هستند اعمال میشود تا به ازای تمامی اشیا یک ماسک تقطیعبندی اعوجاجشده برای فریم 0 را بگیرد.
3- از یک ماسک باینری برای حفظ پیکسلهای مرتبط با ماسک تقطیعبندی اعوجاجشده استفاده میشود.
4- عکسهای ماسکگذاریشده با تصاویر اعوجاجشده ترکیب میشوند و به مدل متحرک اشیا منتقل میشوند و خروجی این مدل حرکت پیشبینیشده شی خواهد بود.
در نتیجه چگونگی حرکت دوربین برای «توضیح دادن» تغییر در ظاهر اشیا نمایش داده خواهد شد. هدف ما این است که اشیا را مطابق مدلهای متحرک به دستآمده از مرحله 4 فرایند مدلسازی متحرک اشیا حرکت دهیم. در آخر حرکات اعوجاجشده اشیا را با پسزمینه ثابت اعوجاجشده ترکیب میکنیم تا اعوجاج نهایی را به دست آوریم:
یادگیری مقیاس اشیا
Monodepth2 با بهره گیری از تکنیک ماسکگذاری خودکار به مسائل مربوط به اشیای ثابت و یا اشیایی میپردازد که با سرعتی مشابه با دوربین حرکت میکنند، پیشنهاد نویسندگان این مقاله این است که مدل را آموزش دهیم تا مقیاس اشیا را تشخیص دهد و بدین وسیله مدلسازی متحرک اشیا را ارتقاء دهیم.
تصویر از Struct2Depth. ستون میانی نشاندهنده عمق نامحدودی است که به اشیایی اعمال شده که با سرعتی مشابه با دوربین در حرکت هستند. ستون سوم نشاندهنده روش آنها است که آن را ارتقاء داده است.
نویسندگان این مقاله برای هر شی بر مبنای دسته هر یک از اشیا، برای مثال «خانه» یک زیان تعریف میکنند. هدف از انجام این کار محدود کردن عمق بر مبنای اطلاعات مربوط به مقیاس اشیا است.
زیان، اختلاف میان نگاشت عمق خروجیِ شیِ دورن تصویر و نگاشت تقریبی عمق است که با استفاده از فاصله کانونی دوربین Camera’s focal length، ارتفاع بر مبنای دسته شی، ارتفاع حقیقیِ شی تقطیعشده در تصویر که هر دو با میانگین عمق برای تصویر مقصد مقیاسبندی شدهاند:
نتایج
مدلهایی که در (3) توضیح داده شدند مستقیماً با مدل Monodepth2 مقایسه شدند و پیشرفتهای چشمگیری نسبت به آن داشتند.