erfan akbarnezhad
erfan akbarnezhad
خواندن ۳ دقیقه·۲ سال پیش

جست و جوی بصری (گوگل لنز) پارت 3 | visual search for fashion

visual search for fashion | عرفان اکبرنژاد
visual search for fashion | عرفان اکبرنژاد


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


part 3
part 3




در یادگیری ماشین (machine learning) و یادگیری عمیق (deep learning) روش هایی وجود دارد که با دقت زیاد به مسائل کلاس بندی (classification), رگرسیون ( برای object detection) در پردازش تصویر به خوبی پاسخ میدهد.

Prof. Laura Leal-Taixé
Prof. Laura Leal-Taixé


نوع دیگری مسئله وجود دارد که در آن مدل ورودی دو تصویر چهره بگیرد و خروجی جواب سوال " آیا این تصاویر یک شخص هست یا خیر؟ "را بدهد.

Prof. Laura Leal-Taixé
Prof. Laura Leal-Taixé





در یادگیری متریک (metric learning) ما به دنبال یادگیری شباهت بین دو تصویر یا چیز (موزیک و فیلم و …) هسیم.


یادگیری متریک (metric learning)

درک شباهت بین تصاویر یک مشکل کلیدی در بینایی کامپیوتر است. برای اندازه گیری شباهت بین تصاویر، معمولا تصاویر را در یک فضای ویژگی به عنوان بردار تعبیه میکنیم(embedded in a feature vector space) که فاصله ی بردار ها نسبت به هم در این فضا، تشابه نسبی برقرار است.


برگردیم به سوال " آیا این تصاویر یک شخص هست یا خیر؟ " برای جواب دادن به این سوال، ما میتوانیم هر شخص را یک کلاس در نظر بیریم و مدل را اموزش بدیم.

Prof. Laura Leal-Taixé
Prof. Laura Leal-Taixé


ولی این روش یه سری محدودیت هایی دارد، مهم ترینش این است که ما عکس همه ادم های روی کره زمین را نداریم تا با کلاس بندی آن ها و سپس تشخیص اون ادم بتوانیم قفل گوشی را باز کنیم.

به جای کلاس بندی هر شخص از یه تابعه شباهت (similarity function) استفاده میکنیم، به این صورت که دو تا تصویر به تابع بدهیم و ازش امتیاز شباهت بین دو تصویر را بخواهیم.


یادگیری تابع شباهت | Siamese Neural Networks

  • چگونه شبکه را طوری اموزش بدهیم که شباهت را یاد بگیرد؟


در پارت اول با استخراج ویژگی تصاویر در فضای n بعدی اشنا شدیم، بعد از استخراج ویژگی در تصویر، ما یک بردار 128 بعدی( 128-dim) که نشون دهنده ی ویژگی های تصویر هست.

  • هدف ما از این تابع این است که، فاصله بردار های تصاویر یک شخص تا حداقل (threshold) به هم نزدیک باشند تا مدل قفل صفحه را برایمان باز کنه.


دو نوع تابع هزینه (loss function) برای این شبکه وجود دارد. - Contrastive loss - Triplet loss



تابع Contrastive loss


در تابع هزینه contrastive loss مدل یک جفت عکس میگیرد، اگر این جفت از یک شخص باشد(positive pair) که *y برابر با 1 خواهد بود و فقط نیمه اول تابع هزینه محاسبه میشود و در اینجا باید فاصله این جفت عکس به هم نزدیک شود.

اگر این جفت عکس از یک شخص نباشد(negative pair)، در اینجا باید فاصله دو تصویر نسبت به هم زیاد شود (در فرمول ما m(مارجین) قرار میدهیم که اگر فاصله ی دو تصویر اندازه مارجین بود دیگر عمل بکپروپگیشن (backpropagation) و تغییر وزن های مدل را انجام نده.).


Contrastive loss
Contrastive loss


تابع Triplet loss

در تابع هزینه triplet loss مدل سه تا عکس به عنوان ورودی میگیرد anchor, positive, negative؛

anchor, positive, negative
anchor, positive, negative


در این نوع از آموزش دادن، مدل یک تصویر(anchor) را میگیرد و هم زمان با positive pair و negative pair مقایسه میکند؛ قطعا باید شباهت بین anchor و positive زیاد باشد (فاصله دو عکس نسبت به هم کم باشد) و شباهت anchor و negative کم باشد (فاصله دو عکس نسبت به هم زیادباشد).

برگردیم به موضوع اصلی مقاله که شباهت بین تی شرت های دیجی کالا بود، دیتا هارو طوری در یک فایل csv قرار میدهیم کهدر هر ردیف، ستون اول anchor، ستون دوم posetive و ستون سوم negative باشه؛ میتونیم برای قسمت posetive از طریق دیتا اگمنتیشن یک سری تغیرات(نویز،کراپ،تغییر سایز عکس و ... ) روی anchor انجام بدیم و برای قسمت negative هم به صورت رندوم یک تصویر دیگه از دیتاستون را انتخاب میکینم.

بعد از حدود دو ساعت اموزش مدل یه خروجی نسبتا قابل قبولی دریافت کردم.


ستون سمت چپ ورودی کاربر و ستون ها راست خروجی مدل (با توجه به دیتابیس)
ستون سمت چپ ورودی کاربر و ستون ها راست خروجی مدل (با توجه به دیتابیس)


ستون سمت چپ ورودی کاربر و ستون ها راست خروجی مدل (با توجه به دیتابیس)
ستون سمت چپ ورودی کاربر و ستون ها راست خروجی مدل (با توجه به دیتابیس)



تمام کد های siamese network به زبان پایتون (python) در گیت هابم موجود هست.

بخش سوم و این سری از مقالات را تمام میکنم امیدوارم خوشتان آمده باشد من تازه شروع کردم به نوشتن پروژه ها، اگر پیشنهادی یا انتقادی به نوع نوشتاری و کلا همه چی داشتید خوش حال میشم نظرتون را برای من بنویسید.

deep learningmachine learningneural networksبینایی کامپیوتر
عمیقا در حال یادگیری
شاید از این پست‌ها خوشتان بیاید