شرکت ایر بی ان بی شرکتی است که میلیون ها خانه دارد. مسافران در سراسر جهان در این پلتفرم هوش مصنوعی جستجو میکنند و بهترین خانه ها را برای سفرهای خود پیدا میکنند. جدا از مکان و قیمت، فهرست عکس ها یکی از مهمترین عوامل برای تصمیم گیری در طول سفر جستجوی مهمان است. با این حال، تا همین اواخر، ما اطلاعات کمی در مورد این عکس های مهم داشتیم. وقتی میهمان با فهرست کردن عکسهای یک خانه ارتباط برقرار میکرد، ما راهی نداشتیم که به مهمانان کمک کنیم تا بهترین تصاویر را بیابند، اطمینان حاصل کنند که اطلاعات ارائه شده در عکس ها دقیق بوده است یا به میزبان در مورد چگونگی بهبود جذابیت تصاویر خود به شیوه ای مقیاس پذیر توصیه کنیم.
به لطف پیشرفت اخیر در بینایی رایانه ای و یادگیری عمیق، ما میتوانیم از فناوری برای حل این مشکلات در مقیاس بزرگ استفاده کنیم. ما با پروژه ای شروع کردیم که هدف آن دسته بندی عکسهای فهرست شده ما در انواع مختلف اتاق بود. از یک جهت، دسته بندی یک گشت ساده در خانه را ممکن میسازد که در آن عکس های با نوع اتاق یکسان میتوانند در کنار هم گروه بندی شوند. از سوی دیگر، طبقه بندی اعتبار تعدادی از اتاق ها و بررسی صحت اطلاعات اتاق را بسیار ساده تر میکند. در ادامه، ما معتقدیم که فرصتهای هیجان انگیز زیادی برای افزایش دانش خود در مورد محتوای تصویر در Airbnb وجود دارد. ما چند نمونه را در انتهای این پست نشان خواهیم داد.
طبقه بندی تصویر
توانایی طبقه بندی صحیح نوع اتاق برای یک عکس فهرست شده برای بهینه سازی تجربه کاربر فوق العاده مفید است. در سمت مهمان، رتبه بندی مجدد و چیدمان مجدد عکس ها را بر اساس انواع اتاق های مجزا تسهیل میکند، به طوری که ابتدا افرادی که بیشتر به آنها علاقه دارند ظاهر میشوند. از طرف میزبان، به ما کمک میکند تا فهرست ها را به طور خودکار مرور کنیم تا مطمئن شویم که آنها از استانداردهای بالای بازار ما پیروی میکنند. دسته بندی دقیق عکس ستون فقرات این عملکردهای اصلی است.
اولین دسته از انواع اتاقها که ما به دنبال طبقه بندی آنها بودیم شامل اتاق خواب، حمام، اتاق نشیمن، آشپزخانه، استخر و چشم انداز بود. ما انتظار داریم اتاق های دیگر را بر اساس نیاز تیم های محصول اضافه کنیم.
مشکل طبقه بندی نوع اتاق تا حد زیادی شبیه مشکل طبقه بندی ImageNet است با این تفاوت که نتایج مدل ما انواع اتاق های سفارشی هستند. این باعث میشود که مدلهای پیشرفته شبکه عصبی عمیق (DNN) مانند VGG، ResNet و Inception به طور مستقیم در مورد ما قابل اجرا نباشند. تعدادی پست عالی وجود دارد که به مردم میگوید چگونه با این مشکل کنار بیایند. اساساً ما باید 1) چند لایه آخر (بالا) DNN را تغییر دهیم تا مطمئن شویم که بعد خروجی با سطح ما مطابقت دارد و 2) DNN را تا حدی آموزش دهیم و به عملکرد رضایت بخشی دست یابیم. پس از چند آزمایش با این مدل ها، ResNet50 را انتخاب کردیمبعنوان نیروگاه ما به دلیل تعادل خوب بین عملکرد مدل و زمان محاسبه. برای سازگاری با مورد استفاده، دو لایه اضافی کاملاً متصل و یک فعال سازی Softmax در پایان اضافه کردیم. ما همچنین چند گزینه آموزشی را آزمایش کردیم ، که در بخش بعدی مورد بحث قرار میگیرد.
اکثر آموزش های آنلاین از روش اول استفاده می کنند زیرا سریع است و معمولاً نتایج مطلوبی را در پی دارد. ما روش اول را امتحان کردیم و در واقع به نتایج اولیه معقولی دست یافتیم. با این حال، برای راه اندازی محصول با کیفیت بالا، ما نیاز به بهبود چشمگیر عملکرد مدل داشتیم ر حالت ایده آل 95٪+ دقت و 80٪+ فراخوانی را به دست آوردیم.
برای دستیابی به دقت بالا و فراخوانی بالا به طور همزمان، متوجه شدیم که استفاده از داده های عظیم برای آموزش مجدد DNN اجتناب ناپذیر است. با این حال دو چالش عمده وجود داشت: 1) حتی اگر تعداد زیادی عکس فهرست شده توسط میزبان بارگذاری شده بود، برچسب های دقیق نوع اتاق مربوط به آنها را نداشتیم. 2) آموزش مجدد DNN مانند ResNet50 بسیار بی اهمیت بود-بیش از 25 میلیون پارامتر برای آموزش وجود داشت و این امر به پشتیبانی قابل توجه GPU نیاز داشت. این دو چالش در دو بخش بعدی مورد بررسی قرار خواهد گرفت.
نظارت با شرح تصاویر
بسیاری از شرکت ها از فروشندگان شخص ثالث برای دستیابی به برچسب های با کیفیت برای داده های تصویر استفاده میکنند. این بدیهی است که برای ما مقرون به صرفه ترین راه حل نیست ، زیرا میلیون ها عکس باید به کمک پردازش گفتار برچسب گذاری شوند. برای تعادل هزینه و عملکرد، ما به این مشکل برچسب زدن به صورت ترکیبی نزدیک شدیم. از یک طرف، ما از فروشندگان درخواست کردیم که تعداد نسبتاً کمی عکس، معمولاً در هزاران یا دهها هزار، علامت گذاری کنند. این بخش از داده های برچسب زده شده به عنوان مجموعه ای طلایی برای ارزیابی مدل ها مورد استفاده قرار میگیرد. ما از نمونه گیری تصادفی برای بدست آوردن این مجموعه طلایی استفاده کردیم و اطمینان حاصل کردیم که داده ها بی طرفانه هستند. در طرف دیگر، ما از زیرنویس های تصویر ایجاد شده توسط میزبان به عنوان پروکسی برای اطلاعات نوع اتاق استفاده کردیم و برچسب ها را از آن استخراج کردیم. این ایده برای ما بسیار مهم بود زیرا وظیفه برچسب زدن گران قیمت را اساساً رایگان میکرد.
یک روش وسوسه انگیز برای استخراج برچسب نوع اتاق از عنوان تصویر به شرح زیر است: اگر کلمه کلیدی نوع اتاق خاصی در زیرنویس یک تصویر یافت شود، تصویر با آن نوع برچسب گذاری می شود. با این حال دنیای واقعی پیچیده تر از آن است. اگر نتایج این قانون را بررسی کنید، بسیار ناامید خواهید شد. موارد متعددی را پیدا کردیم که زیرنویس تصویر با محتوای واقعی آن تصویر فاصله زیادی داشت. در زیر چند مثال بد وجود دارد.
برای فیلتر کردن نمونه های بد مانند این، هنگام استخراج برچسب های نوع اتاق از زیرنویس های تصویر، قوانین اضافی را اضافه کردیم. پس از چندین دور فیلتر و بررسی، کیفیت برچسب بسیار بهبود یافته است. در زیر مثالی برای نحوه فیلتر کردن داده های آشپزخانه برای به دست آوردن تصاویر نسبتاً “تمیز” آشپزخانه آورده شده است.
فیلترهای جذاب هوشمند
به دلیل این فیلترهای اضافی، اطلاعات زیادی از تصویر از دست دادیم. این برای ما خوب بود زیرا حتی با چنین فیلترینگ تهاجمی، ما همچنان چند میلیون عکس، چند صد هزار در هر نوع اتاق ، به دست آوردیم. علاوه بر این، کیفیت برچسب این عکس ها اکنون بسیار بهتر شده است. در اینجا ما فرض کردیم که توزیع داده ها با فیلترینگ تغییر نمیکند، که پس از آزمایش مدل بر روی مجموعه داده طلایی بی طرف، معتبر میشود.
با این وجود، شاید بتوانیم از برخی تکنیک های NLP برای خوشه بندی پویا زیرنویس های تصویر به جای استفاده از روشهای مبتنی بر قانون استفاده کنیم. با این حال ما تصمیم گرفتیم فعلاً با روش های اکتشافی بمانیم و کار NLP را به آینده سوق دهیم.
مدل سازی، ارزیابی و تولید
آموزش مجدد DNN مانند ResNet50 با استفاده از چند میلیون تصویر به منابع محاسباتی زیادی نیاز دارد. در اجرای ما از AWS P2.8xlarge Instance با کارت گرافیک Nvidia 8 هسته ای K80 استفاده کردیم و در هر مرحله، مجموعه ای از 128 تصویر را به 8 پردازنده گرافیکی ارسال کردیم. ما تمرینات موازی را با Tensorflow به عنوان پشتیبان انجام دادیم. ما مدل را پس از موازی سازی آن گردآوری کردیم زیرا در غیر این صورت آموزش کار نمیکند. بهترین مدل پس از 3 دوره آموزش به دست آمد که حدود 6 ساعت به طول انجامید. پس از آن مدل شروع به کار کرد و عملکرد در مجموعه اعتبار سنجی بهبود نیافت.
یک نکته مهم این است که ما به جای ساختن یک مدل چند کلاسی برای پوشش انواع اتاقها، مدلهای کلاس دوتایی برای انواع اتاقهای مختلف تولید کردیم. این ایده آل نبود، اما از آنجا که ارائه مدل ما عمدتا آفلاین بود، تأخیر اضافی به دلیل تماس های متعدد مدل حداقل ما را تحت تأثیر قرار داد. ما به زودی به یک مدل چند کلاسی در حال تولید منتقل می شویم.
ما مدلهای خود را بر اساس دقت و فراخوانی ارزیابی کردیم. ما همچنین معیارهایی مانند نمره F1 و دقت را زیر نظر داشتیم. تعاریف آنها به شرح زیر تکرار می شود. به طور خلاصه، دقت میزان اطمینان ما از صحت پیش بینی های مثبت ما را توصیف می کند و یادآوری توصیف می کند که چند درصد پیش بینی های مثبت ما همه موارد مثبت واقعی را پوشش میدهد. دقت و فراخوانی معمولاً بر خلاف یکدیگر است. در زمینه خود، ما یک نوار بالا (95) را برای دقت تعیین میکنیم زیرا وقتی ادعا می کنیم عکس از نوع اتاق خاصی است، ما واقعاً باید از این ادعا اطمینان بالایی داشته باشیم.
ماتریس گیجی کلید محاسبه این معیارها است. خروجی خام مدل ما نمره احتمال از 0 تا 1 برای هر تصویر است. برای محاسبه ماتریس سردرگمی برای مجموعه ای از پیش بینی ها، ابتدا باید یک آستانه خاص تعیین کرد تا نمرات پیش بینی شده را به 0 و 1 تبدیل کند. سپس با جابجایی آستانه ها از 0 تا 1، منحنی دقیق فراخوانی (PR) ایجاد می شود. اصل هرچه AUC (مساحت زیر منحنی) منحنی PR نزدیک به 1 باشد ، مدل دقیق تر است.
در ارزیابی مدل ها، ما از مجموعه طلایی فوق الذکر استفاده کردیم که برچسب های اصلی حقیقت توسط انسان ارائه شده بود. جالب اینجاست که ما متوجه شدیم دقت از نوع اتاق به نوع دیگر متفاوت است. مدلهای اتاق خواب و حمام دقیق ترین مدلها بودند که به کمک ماشین لرنینگ در حالی که مدلهای دیگر دقت کمتری داشتند. برای اختصار، ما فقط منحنی روابط عمومی اتاق خواب و اتاق نشیمن را در اینجا نشان میدهیم. نقطه متقاطع خطوط نقطه نقطه نشان دهنده عملکرد نهایی با توجه به یک آستانه خاص است. ما خلاصه ای از معیارها را در نمودار پیوست می کنیم.
دو نکته مهم وجود دارد:
عملکرد کلی مدل اتاق خواب بسیار بهتر از اتاق نشیمن است. دو توضیح می تواند وجود داشته باشد: 1) طبقه بندی اتاق خواب راحت تر از اتاق نشیمن است زیرا اتاق خواب نسبتاً استاندارد است در حالی که اتاق نشیمن می تواند تنوع بیشتری داشته باشد. 2) برچسب های استخراج شده از عکس های اتاق خواب از کیفیت بالاتری نسبت به عکس های اتاق نشیمن برخوردار است زیرا عکس های اتاق نشیمن گهگاه شامل اتاق های غذاخوری یا حتی آشپزخانه نیز می شوند.
در هر نوع اتاق ، یک مدل کاملاً آموزش دیده (منحنی قرمز) عملکرد بهتری نسبت به مدل نیمه بازآموزی (منحنی آبی) دارد و فاصله بین مدلهای اتاق نشیمن بیشتر از مدلهای اتاق خواب است. این نشان می دهد که آموزش مجدد یک مدل کامل ResNet50 تأثیر متفاوتی برای انواع اتاقهای مشکل دارد.
برای 6 مدلی که ارسال کردیم، دقت به طور کلی بالای 95 درصد و فراخوان به طور کلی بالای 50 درصد است. با تعیین مقادیر مختلف آستانه، افراد میتوانند معامله کنند. این مدل قرار است تعدادی از محصولات مختلف را در چندین تیم محصول در داخل Airbnb تغذیه کند.
کاربران نتایج ما را با API های شناخته شده تصویر شخص ثالث مقایسه کردند. گزارش شده است که مدل داخلی به طور کلی از مدل های عمومی شخص ثالث بهتر عمل کرده است. این بدان معناست که با استفاده از داده های شخصی خود ، می توانید حتی از مدل پیشرفته صنعت برای یک کار خاص که به آن علاقه دارید، بهتر عمل کنید.
طبقه بندی صحنه بدون نظارت
هنگامی که ما برای اولین بار طبقه بندی نوع اتاق را با استفاده از مدل ResNet50 از پیش آموزش دیده امتحان کردیم ، جاسازی تصویر (بردارهای 2048×1) را برای لیست عکس های صفحه جلد ایجاد کردیم. برای تفسیر معنای این جاسازی ها، ما این بردارهای بلند را با استفاده از تکنیک های PCA روی یک صفحه دو بعدی نشان دادیم. برای ما بسیار شگفت آور است که داده های پیش بینی شده به طور طبیعی در دو گروه قرار میگیرند. با نگاهی به این دو خوشه، متوجه شدیم که گروه چپ تقریباً منحصراً صحنه های داخلی و گروه راست تقریباً منحصراً صحنه های بیرونی بودند. این بدان معناست که بدون آموزش مجدد و به سادگی با ایجاد یک خط برش در اولین جزء اصلی جاسازی تصویر، میتوانیم صحنه های داخلی و خارجی را تعیین کنیم. این یافته راه را برای حوزه ای واقعاً جالب باز کرد که در آن یادگیری انتقال (جاسازی) با یادگیری بدون نظارت مواجه شد.
تشخیص شی
زمینه دیگری که ما سعی کردیم آن را دنبال کنیم ، تشخیص شی بود. یک مدل سریع از قبل آموزش داده شده در Open Images Dataset نتایج خیره کننده ای ارائه کرده است. همانطور که در مثال زیر مشاهده می کنید ، مدل قادر است پنجره، در ، میز ناهار خوری و مکان آنها را تشخیص دهد. استفاده از Tensorflow Object Detection API، ما برخی از ارزیابی های سریع را بر روی عکس های لیست خود انجام دادیم. بسیاری از امکانات خانه را می توان با استفاده از نتیجه خارج از قفسه تشخیص داد. در آینده، ما قصد داریم مدل سریعتر R-CNN را با استفاده از برچسب های رفاهی سفارشی Airbnb مجددا آموزش دهیم. از آنجا که برخی از این برچسب ها در داده های منبع باز وجود ندارد، ما احتمالاً خودمان برچسب ایجاد میکنیم. با استفاده از این امکانات ردیابی شده توسط الگوریتم، ما میتوانیم کیفیت لیستها را از میزبان ها بررسی کنیم و پیدا کردن خانه هایی با نیازهای رفاهی خاص را برای مهمانان بسیار آسان تر کنیم. این امر مرز هوش عکاسی در Airbnb را به سطح بعدی می رساند.
در اینجا چند نکته کلیدی است که ممکن است برای سایر تمرین کنندگان عمیق مفید باشد:
اول ، یادگیری عمیق چیزی نیست جز یک نوع یادگیری تحت نظارت. نمیتوان اهمیت برچسب های با کیفیت بالا را برای داده ها بیش از حد ارزیابی کرد. از آنجا که یادگیری عمیق معمولاً به مقدار قابل توجهی از داده های آموزشی برای دستیابی به عملکرد پیشرفته نیاز دارد، یافتن راهی کارآمد برای انجام برچسب زدن بسیار مهم است. خوشبختانه ما یک روش ترکیبی پیدا کردیم که اقتصادی، مقیاس پذیر و قابل اعتماد است.
دوم ، آموزش DNN مانند ResNet50 از ابتدا می تواند کاملاً دخیل باشد. سعی کنید با روشی ساده و سریع شروع کنید – فقط لایه های بالا را با استفاده از یک مجموعه داده کوچک آموزش دهید. اگر یک مجموعه داده بزرگ آموزش پذیر دارید، آموزش مجدد DNN از ابتدا ممکن است عملکرد فوق العاده ای را به شما ارائه دهد.
سوم، اگر می توانید آموزش را به موازات هم قرار دهید. در مورد ما ما با استفاده از 8 GPU سرعت 6 برابر (شبه خطی) را افزایش دادیم. این باعث می شود که یک مدل پیچیده DNN از نظر محاسباتی قابل اجرا باشد و تکرار بیش از حد پارامترها و ساختارهای مدل بسیار ساده تر است.