15 بهمن 1401
تهران، خیابان آزادی، تقاطع قریب
یادگیری ماشین

نحوه استفاده از شبکه ‌Siamese برای Face Recognition

نحوه استفاده از شبکه ‌Siamese برای Face Recognition

در این آموزش با شبکه‌های Siamese و نحوه استفاده از آن‌ها برای توسعه سیستم‌های Face Recognition آشنا خواهید شد. ما انواع رویکردهای Face Recognition را مورد بحث قرار خواهیم داد و به جزئیات مفهومی شبکه‌های Siamese که آن‌ها را به بخشی جدایی‌ناپذیر از اپلیکیشن‌های قدرتمند Face Recognition تبدیل می‌کند، نگاهی عمیق خواهیم داشت.

استفاده از شبکه ‌Siamese برای Face Recognition

در ادامه به طور خاص به تفصیل موارد زیر خواهیم پرداخت:

  • Pipeline مربوط به Face Recognition و انواع رویکردهای آن
  • تفاوت بین Face Identification و Face Verification
  • Metric Learning و Contrastive Losses

برای یادگیری نحوه توسعه اپلیکیشن‌های Face Recognition با استفاده از شبکه‌های Siamese ، به خواندن این مطلب ادامه دهید.

تشخیص چهره با مدل‌های Deep Learning شبکه Siamese

مدل‌های Deep Learning تمایل به ایجاد سوگیری نسبت به توزیع داده‌هایی دارند که بر اساس آن آموزش دیده‌اند. این به مشکل سوگیری مجموعه داده اشاره دارد که در آن مدل‌های Deep با توزیع (به عنوان مثال ژست، پس‌زمینه، رنگ، بافت و شرایط نوری) تصاویر آموزشی، بیش از حد مطابقت دارند و قادر به تعمیم به نماها یا نمونه‌های جدید از همان اشیاء در زمان آزمایش نیستند. یک راه حل ساده انگارانه برای حل این مشکل، جمع‌آوری و حاشیه‌نویسی داده‌ها در تمام بک‌گراندها یا نماهای ممکن از تصویر اشیاء است. با این حال، این فرآیند خسته‌کننده و غیرممکن است و منجر به هزینه‌های بالای حاشیه‌نویسی می‌شود.

بنابراین، اپلیکیشن‌های عملی مستلزم توسعه مدل‌هایی هستند که در برابر مزاحمت‌ها مقاوم بوده و می‌توانند به نماهای نادیده یا تصاویر بدیع از یک شیء تعمیم دهند. به عنوان مثال، برای مقایسه این‌که «آیا این دو تصویر متعلق به یک دسته شیء هستند یا نه»، نیاز به موارد زیر دارید:

  • مدل‌های عمیقی ایجاد کنید که نسبت به عواملی مانند ژست، پس‌زمینه، رنگ و بافت تغییر نمی‌کنند.
  • بر روی ویژگی‌های اساسی که یک دسته شیء را متمایز می‌کنند، تمرکز کنید.

یکی از چنین تلاش‌هایی برای توسعه مدل‌های قدرتمند Deep به موفقیت انجامید و شروعی بر شبکه‌های Siamese بود. در آموزش‌های قبلی، مروری بر شهود و مکانیسم زیربنایی این شبکه‌ها داشتیم. در این آموزش، ما به توسعه یک سیستم Face Recognition مبتنی بر شبکه Siamese خواهیم پرداخت.

Face Recognition

Face Recognition یکی از تسک‌های مهم Computer Vision (بینایی کامپیوتری) است که به ما امکان می‌دهد هویت یک فرد را شناسایی و تآیید کنیم. این به طور گسترده در صنعت برای اپلیکیشن‌هایی مانند سیستم‌های حضور و غیاب، مراقبت‌های بهداشتی، تأیید امنیتی و غیره استفاده می‌شود.

یکی از جنبه‌های مهم در هر سیستم Face Recognition مؤثر، تغییرناپذیری آن نسبت به نماها و روش‌های مختلف برای شناسایی یک شخص است. به عنوان مثال یک سیستم حضور و غیاب کارمندان مبتنی بر تشخیص چهره، باید بر ویژگی‌های قابل تعمیمی تمرکز کند که هویت یک فرد را تشکیل می‌دهند و تغییرات قوی در ژست، ظاهر (مانند ریش، مدل مو و غیره) یا نماهای دیده‌نشده از یک فرد خاص را تشخیص دهد. این مهم است زیرا آموزش سیستم در مورد تمام تغییرات ممکن در ظاهر هر کارمند، غیر ممکن است.

بنابراین، در پیشرفت‌های اخیر تشخیص چهره، از تلفات کنتراست (Contrastive Losses) برای آموزش معماری‌های مبتنی بر شبکه Siamese برای ساخت مدل‌های قوی Face Recognition استفاده شده است.

تشخیص چهره: Identification و Verification

شکل 1 pipeline سیستم‌های  Face Recognition معمولی را نشان می‌دهد. همان‌طور که می‌بینیم، اولین مرحله، مرحله تشخیص است که در آن صورت از پس‌زمینه متمایز می‌شود. این مرحله همچنین ممکن است شامل یک عملیات هم‌ترازسازی باشد که حالت صورت را دوباره تنظیم می‌کند.

Pipeline تشخیص چهره
شکل 1: Pipeline تشخیص چهره (منبع: pyimagesearch.com)

سپس، چهره شناسایی‌شده کراپ می‌شود و به استخراج‌کننده ویژگی عمیق (deep feature extractor) منتقل می‌شود. همان‌طور که نشان داده شده است، خروجی feature extractor ، یک feature vector برای چهره است. deep network هم به گونه‌ای آموزش داده شده است که نمایش ویژگی‌های متمایز صورت را به عنوان خروجی به تصویر می‌کشد و در برابر تفاوت‌های ظریف (مانند نور، رنگ، بافت، ریش و غیره) مقاوم است.

در نهایت، ویژگی‌های آموزش داده شده برای شناسایی یا تأیید هویت فرد استفاده می‌شود.

در مرحله بعد، اجازه دهید تفاوت بین تسک‌های Face Identification و Face Verification را در فرآیند تشخیص چهره، به تفصیل بررسی کنیم.

Face Identification

Face Identification به شناسایی هویت شخص در فرآیند Face Recognition  اشاره دارد. و مستلزم اختصاص دادن هویت شخص، به یک تصویر ورودی است.

شکل 2 یک pipeline ابتدایی برای انجام Face Identification را نشان می‌دهد. Identification pipeline یک تصویر را به عنوان ورودی می‌گیرد و یک توزیع احتمال (Probability distribution) را بر روی هویت‌های احتمالی افراد خروجی می‌دهد.

Face Identification
شکل 2 : Face Identification (منبع: pyimagesearch.com)

در ابتدا، تصویر ورودی از طریق یک deep feature extractor عبور داده می‌شود تا نمایش ویژگی f (feature representation f) به دست آید. همان‌طور که در شکل 2 می‌بینید. سپس در این مرحله از Face Recognition ، این ویژگی از طریق یک شبکه classifier منتقل می‌شود که هویت یا ID شخص را به تصویر ورودی داده شده، اختصاص می‌دهد. توجه داشته باشید که این امر مستلزم یک مسئله multi-class classification ساده K way برای یک دیتابیس با تعداد K پرسنل است. (در این‌جا، K برابر با 4 نفر یا class است).

از آن‌جایی که Identification pipeline یک multi-class classification است، با softmax معمولی و cross entropy loss آموزش داده می‌شود.

Face Verification

از سوی دیگر، وظیفه Verification تأیید این است که آیا دو تصویر به یک هویت تعلق دارند یا خیر.

شکل 3 یک pipeline ابتدای برای انجام Face Verification در فرآیند تشخیص چهره را نشان می‌دهد. ورودی pipeline ، face image x و face id است که باید تأیید شود، و خروجی یک تصمیم باینری است که آیا تصویر متعلق به شخص دارای face id است یا خیر.

Face Verification
شکل 3: Face Verification (منبع: pyimagesearch.com)

در صورت تأیید، مطابق شکل، نمایش ویژگی (feature representation) را برای همه تصاویر چهره در دیتابیس خود، از قبل استخراج و ذخیره می‌کنیم. با توجه به یک image x جدید و یک Face ID (مثلاً id-1021 ، همان‌طور که در شکل 3 نشان داده شده است)، ما  feature representation fتصویر را محاسبه کرده و آن را با feature representation مربوط به Face ID-1021 مقایسه می‌کنیم. مقایسه بر اساس شباهت Metric است که بعداً در مورد آن خواهیم گفت. در نهایت، بر اساس یک آستانه، می‌توانیم بفهمیم که آیا تصویر ورودی متعلق به شخص خاصی در دیتابیس ما است یا خیر.

Identification از طریق Verification

همان‌طور که قبلاً گفتیم، Identification (شناسایی) ما را ملزم می‌کند تا یک classifier از نوع K way را آموزش دهیم تا به تصویر چهره ورودی، یک هویت خاص از K personnel در دیتابیس خود اختصاص دهیم. با این حال، اگر تعداد افراد در دیتابیس ما افزایش یابد، این نوع سیستم Identification برای Face Recognition مقیاس‌پذیر نیست.

به عنوان مثال، اگر فرد جدیدی به دیتابیس اضافه شود، باید سیستم شناسایی ساخته شده برای کلاس‌های K را دوباره و از ابتدا در کلاس‌های جدید K+1 آموزش دهیم. این به این دلیل است که قبلاً classifier نورن‌های K داشت، و اکنون به یک classifier با نورون‌های K+1 احتیاج داریم. این کارایی و مقیاس‌پذیری سیستم را محدود می‌کند، زیرا هر بار که یک چهره جدید اضافه می‌شود، کل روش آموزشی باید تکرار شود.

بنابراین، راه کارآمدتر و مؤثرتر برای Identification ، استفاده از رویکرد مقایسه مبتنی بر شباهت، درVerification است.

پیاده‌سازی در تشخیص چهره

 شکل 4 نشان می‌دهد که چگونه می‌توان Identification را با استفاده از تکنیک‌های Identification پیاده‌سازی کرد. با توجه به یک تصویر ورودی x ، می‌توانیم الگوریتم Verification خود را K بار برای هر یک از K Face ID ها در دیتابیس خود اجرا کنیم. می‌توانیم همچنین هویت چهره را به عنوان یک Face ID که خروجی باینری الگوریتم Face ID است (یعنی مطابقت با تصویر ورودی)، پیدا کنیم.

Identification از طریق Verification
شکل 4 : Identification از طریق Verification (منبع: pyimagesearch.com)

مزیت استفاده از Verification برای Identification این است که اگر یک چهره جدید به دیتابیس چهره‌های K خود اضافه کنیم، فقط باید الگوریتم Verification K+1 خود را بارها برای Identification ، بدون نیاز به آموزش مجدد شبکه اجرا کنیم.

بنابراین مشاهده می‌کنیم که رویکرد Identification مبتنی بر classifier ، به دلیل تعداد ثابت نورون‌ها در لایه نهایی، مقیاس‌پذیری را مهار می‌کند. با این حال، رویکرد مقایسه مبتنی بر شباهت که در Verification استفاده می‌شود، زمانی که چهره‌های جدید به دیتابیس چهره‌ها اضافه می‌شوند، در فرآیند Face Recognition کارآمدتر و مقیاس‌پذیرتر است.

Metric Learning: Contrastive Losses

همان‌طور که در بخش قبل بحث شد، رویکرد مقایسه مبتنی بر تشابه در Face Recognition ، به ما اجازه می‌دهد تا سیستم‌های کارآمدتر و مقیاس‌پذیرتری نسبت به رویکرد مبتنی بر classification بسازیم.

بنابراین برای ساختن سیستم‌های تشخیص چهره مؤثر و فریب نخوردن آن‌ها، باید استراتژی‌های آموزشی را توسعه دهیم. که این کار ما را قادر می‌سازد فضایی تعبیه‌شده بسازیم که در آن تصاویر چهره مشابه یا تصاویر چهره یک فرد معین، در کنار هم قرار می‌گیرند و تصاویر چهره افراد مختلف از هم جدا می‌شوند.

رایج‌ترین راه برای پیاده‌سازی این مورد برای شبکه‌های عصبی، استفاده از Deep Metric Learning است.

به عبارت ساده‌تر، Metric Learning الگویی در Face Recognition است که در آن شبکه ما به گونه‌ای آموزش داده می‌شود که نمایش تصاویر مشابه در یک فضای تعبیه‌شده به یکدیگر نزدیک باشد و تصاویر اشیاء متفاوت از هم دورتر باشند. ایده «شباهت» در این‌جا بر اساس یک Metric فاصله خاص در فضای تعبیه‌شده تعریف می‌شود، که شباهت معنایی و این‌که «آیا تصاویر متعلق به یک شیء یا شخص مشابه یا متفاوت هستند» را تعیین می‌کند.

Contrastive Losses (ضررهای متضاد)

Contrastive Losses گروهی از توابع Loss هستند که به ما اجازه می‌دهند فضای جداسازی را که در آن ورودی‌ها یا تصاویر مشابه از نظر معنایی در مقایسه ورودی‌های غیر مشابه، نزدیک‌تر به هم هستند، یاد بگیریم. این Loss ها یا تلفات، اغلب برای آموزش شبکه‌های عصبی برای یادگیری اندازه فاصله استفاده می‌شود. و می‌تواند شباهت بین تصاویر ورودی را به طور مؤثرتری نسبت به اندازه‌گیری‌های فاصله از پیش‌تعریف‌شده (مانند اقلیدسی، فاصله مطلق و غیره) تعیین کند.

فرمول‌های مختلفی از Contrastive Losses وجود دارد. (به عنوان مثال از دست دادن رنکینگ (ranking loss) ، از دست دادن متضاد زوجی (pairwise contrastive loss) ، از دست دادن سه‌گانه (triplet loss) ، از دست دادن چهارگانه (quadruplet loss) و غیره). با این حال، همه این گونه‌ها ایده و ویژگی‌های اساسی یکسانی دارند. اجازه دهید با یک مثال، این مورد را به تفصیل بررسی کنیم.

شکل 5 یک setup کلی را نشان می‌دهد که بیانگر این است که چگونه در Face Recognition از Contrastive Losses برای یادگیری نمایش یک ویژگی استفاده می‌شود.

یادگیری با Contrastive Loss
شکل 5: یادگیری با Contrastive Loss (منبع: pyimagesearch.com)

هدف ما یادگیری mapping G از ورودی فضای  X به ویژگی فضای f است. در این‌جا تابع G با وزن‌های W که بین دو شاخه مشترک است، پارامتر می‌شود. این را به توان به عنوان اعمال یک تبدیل پیچیده G در فضای ورودی X ، که ورودی‌ها را به فضای f نشان می‌دهد، تفسیر کرد.

هدف یادگیری پارامترهای W است. به طوری که ورودی‌های با ابعاد بالا X1 و X2 بر روی یک manifold با ابعاد پایین (یا فضای تعبیه‌شده) f ترسیم شوند. اگر ورودی‌های X1 و X2 مشابه باشند، نمایش‌های ویژگی متناظر f1 و f2 در فضای تعبیه‌شده باید به یکدیگر نزدیک باشند. در غیر این صورت باید از هم دورتر باشند.

فرمول‌های ریاضی Contrastive Loss

از نظر ریاضی، می‌خواهیم پارامترهای W را طوری یاد بگیریم که فاصله بین ویژگی‌های f1 = GW (X1) و f2 = GW (X2) باشد، یعنی:

DW(X1,X2) = ||GW(X1) – GW(X2) ||2

که شباهت بین ورودی‌های X1 و X2  را به طور تقریبی نشان می‌دهد.

این هدف را می‌توان با استفاده از یک تابع Contrastive Loss به دست آورد.

اگر تصاویر ورودی متعلق به یک کلاس یا شخص هستند، نقاط موجود در فضای ویژگی (یعنی f1 و f2) را به هم نزدیکتر کنید.

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

Pairwise Contrastive Loss

اجازه دهید مثال ساده‌ترین شکل Contrastive Loss در Face Recognition را برای درک بهتر این موضوع نشان دهیم:

Lcontrastive(W,Y,X1,X2) = (1 – Y)/2(Dw)2 + Y/2[max(0, m – D2W)]

که در آن m>0 یک margin است.

معادله بالا فرمول ریاضی pairwise contrastive loss را نشان می‌دهد. در اینجا، W پارامترهای تابع mapping ما را نشان می‌دهد. G و Y یک identifier باینری برابر با 0 هستند. ولی اگر X1 و X2 به یک کلاس یا شخص تعلق داشته باشند، 1 هستند.

برای حالتی که Y = 0، یعنی زمانی که X1 و X2 متعلق به یک کلاس یا شخص هستند، Loss به فرمول زیر کاهش می‌یابد:

Lcontrastive(W,Y,X1,X2) = 1/2(Dw)2

به حداقل رساندن این عبارت، DW را به حداقل می‌رساند. که فاصله بین نمایش‌های f1 و f2 است (یعنی ویژگی‌ها را به یکدیگر نزدیک می‌کند).

از طرف دیگر، در حالتی که Y = 1، یعنی زمانی که X1 و X2 متعلق به یک کلاس یا شخص متفاوت هستند، ضرر به فرمول زیر کاهش می یابد:

Lcontrastive(W,Y,X1,X2) = 1/2[max(0, m – D2W)]

توجه داشته باشید که حداقل مقدار این عبارت (که 0 است) زمانی رخ می‌دهد که m-D2W 0، یعنی D2W m. این به معنای به حداقل رساندن این تلفات (Loss) است. تا اطمینان حاصل شود که ویژگی‌های f1 و f2 در فضای ویژگی حداقل به اندازه m از هم فاصله دارند.

بنابراین، فرمول Loss تضمین می‌کند که نقاط مشابه در فضای ویژگی‌ها به هم نزدیک هستند و نقاط غیرمشابه حداقل با فاصله m در فضای ویژگی از هم جدا می‌شوند.

اصول نهایی در فرمول‌های Contrastive Loss

توجه داشته باشید اصول مهمی که به ما امکان می‌دهند چنین سیستمی را یاد بگیریم و باید در هر فرمول Contrastive Loss رعایت شوند، عبارتند از:

  • نقاط مشابه معنایی در فضای ورودی باید نزدیک به یکدیگر و در manifold با ابعاد پایین map شوند.
  • Metric فاصله آموخته شده باید بتواند ورودی‌های نادیده یا جدید را ترسیم کند.
  • Mapping آموزش داده شده باید نسبت به تحولات پیچیده ثابت عمل کند.

خلاصه

در این آموزش، مفاهیم Face Recognition را مورد بحث قرار دادیم و به درک عمیقی از pipeline معمولی تشخیص چهره دست یافتیم. همچنین به این نتیجه رسیدیم که به طور خاص، تفاوت‌های بین Identification و Verificationبه ما اجازه می‌دهد تا سیستم‌های تشخیص چهره کارآمد و مقیاس‌پذیری بسازیم.

در مرحله بعد، ما سعی کردیم شهود پشت Metric Learning و شبکه‌های Siamese را درک کنیم. که به ما امکان می‌دهد اپلیکیشن‌های Face Recognition قوی مبتنی بر شباهت بسازیم. در نهایت، ما در مورد راه‌اندازی و فرمول‌بندی ریاضی توابع Contrastive Loss ، که در آموزش شبکه‌های Siamese مبتنی بر شباهت، بسیار مهم هستند، بحث کردیم.

این پست از برنامه ملی آموزش پیشرفته تکنولوژی (NPTEL) با عنوان دوره Deep Learning برای Computer Vision الهام گرفته است. که نویسنده آن در حین کار در IIT حیدرآباد هندوستان، در آن مشارکت داشته است.

منبع ترجمه: pyimagesearch

Leave feedback about this

  • کیفیت
  • قیمت
  • خدمات

PROS

+
Add Field

CONS

+
Add Field
Choose Image
Choose Video
X