به نام خدا

اسیرا 1 یکی از انواع آزمون‌های شناخت انسان از رایانه (کپچا2) است که از کاربر می خواهد از مجموعه ی 12 عکس سگ و گربه فقط تصاویر گربه‌ها را انتخاب کند. انجام این تست برای انسان بسیار ساده است. به‌طوری که 99/6% از انسان‌ها در کمتر 30 ثانیه به آن پاسخ می‌دهند. ولی شواهد نشان می دهند که تشخیص گربه و سگ به صورت خودکار از یکدیگر کار دشواری است. [1]

شکل 1-یک نمونه تست اسیرا

در این تست اگر اشاره‌گر موس روی هریک از تصاویر نگه داشته شود تصویر حیوان به صورت بزرگ تر نمایش داده شده و جمله‌ی"Adopt me" در زیر آن تصویر ظاهر می شود که در صورت کلیک بر آن کاربر را به صفحه‌ی آن حیوان در سایت 3Petfinder.comارجاع می‌دهد. لازم به ذکر است که این تست برای مجموعه‌ی داده‌4ای خود از آرشیو این سایت استفاده می‌کند.[2]

۱. مقدمه

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

-در دسته‌‌ی اول این اطلاعات صرفا اعداد و حروف تصادفی هستند.
-در دسته دوم این اطلاعات تصاویر هستند.

دسته دوم علاوه بر تصادفی بودن به پایگاه داده6ی بزرگی از تصاویر دسته‌بندی شده 7 نیاز دارد. اما دسته اول را می توان با چند خط کد پیاده‌سازی کرد. و این در حالی است که امکان موفقیت رایانه‌ها در این نوع تست بیشتر از نوع دوم است. در میان دلایل متعدد برتری دسته ی دوم می‌توان به این دلیل اشاره کرد که مجهز کردن ماشین به بینایی 8 بسیار دشوارتر از مجهز کردن آن برای تشخیص متن 9است. اما فراهم آوردن پایگاه داده‌ی مورد نیاز دسته دوم نیز کار دشواریست.

شکل 2-چند نمونه از کپچا‌های دسته‌ی دوم

اسیرا در دسته دوم از انواع کپچا‌‌‌ها قرار می‌‌گیرد و پایگاه داده ای خود را از سایت Petfinder.com تامین می کند. [3] Petfinder دارای پایگاه داده‌ای شامل بیش از 3 میلیون تصویر از سگ و گربه است که روزانه 10000 تصویر را به پروژه‌ی اسیرا اختصاص می‌دهد. همچنین لازم به ذکر است که اسیرا توسط شرکت مایکروسافت ابداع شده است.[4] انگیزه‌ی انجام این پروژه شناخت تصاویر سگ و گربه از یکدیگر به کمک الگوریتم های هوش مصنوعی به منظور عبور از اسیرا می باشد.

۲. شرح مسئله

در این مسئله وظیفه ی ما یافتن الگوریتمی با بالاترین میزان دقت در تشخیص تصاویر سگ و گربه برای دسته بندی آن‌هاست. ورودی این مسئله مجموعه داده‌ای جهت آموزش10 از تصاویر سگ و گربه و خروجی آن میزان دقت در طبقه بندی تصاویر در مجموعه داده‌ای مورد آزمایش 11 است.[5] مجموعه داده ای که توسط سایت Kaggle.com در اختیار ما قرار داده شده است قسمتی از پایگاه داده اسیرا است که توسط مایکروسافت ارائه شده است. مجموعه داده‌ای جهت آموزش آن شامل 25000 تصویر که 12500 تصویر آن سگ و 12500 تصویر دیگر آن گربه است. و همچنین مجموعه داده‌ای مورد آزمایش آن نیز شامل 12500 تصویر است. سایز متوسط تصاویر ارائه شده در حدود 500*350 پیکسل است.

شکل 3- کار یادگیری

با توجه به آنچه که در شکل 3 مشاهده می کنید در کار یادگیری، ورودی، مجموعه داده مخصوص آموزش است و خروجی که به کمک یکی از الگوریتم هایی که در
قسمت بعدی ذکر می شود به دست می‌آید، مدل طبقه بندی شده است و در قسمت عملکرد کار (شکل 4) از این مدل طبقه بندی شده استفاده کرده و مجموعه داده مخصوص آزمایش را مورد بررسی قرار می دهد.

شکل 4-عملکرد کار

۳. کارهای مرتبط

در ادامه به توضیح روش هایی که می توان برای حل این مسئله از آن‌ها بهره برد می‌پردازیم:

3.1. SIFT12

"تبدیل مستقل از مقیاس ویژگی" یک الگوریتم در بینایی ماشین است؛ که برای استخراج ویژگی‌های مشخص از تصاویر، استفاده در الگوریتم‌ کارهایی چون تطبیق نماهای مختلف یک جسم یا صحنه و شناسایی اجسام به کار می‌رود. در این الگوریتم ابتدا تصویر اصلی به طور پیش‌رونده با فیلترهای گاوسی با سیگما در بازه ۱ تا ۲ محو می‌شود که حاصلش یک سری تصاویر محو شده گاوسی است (به این کار فیلتر کردن آبشاری می گویند) سپس، این تصویرها از همسایگان بلافصل خود(از دید سیگما) کم می‌شوند تا یک سری جدید از تصاویر پدید آیند.[6]
گام‌های اصلی در محاسبه ویژگی‌های تصویر عبارت‌اند از:
1.آشکارسازی اکسترمم‌های فضای مقیاس هر پیکسل در تصاویر با هشت همسایه‌اش و نه پیکسل(پیکسل متناظر و هشت همسایه‌اش) از هر یک از تصاویر دیگر سری مقایسه می‌شود.
2.محلی‌سازی کلیدنقطه‌ها - کلیدنقطه‌ها از اکسترمم‌های فضای مقیاس گزیده می‌شوند.
3.گرایش گماری - برای هر کلیدنقطه در یک پنجره ۱۶x۱۶، نمودار فراوانی گرایش گرادیان‌ها به کمک درونیابی دوسویه محاسبه می‌شوند.
4.توصیفگر کلیدنقطه - نمایش در یک بردار ۱۲۸ عنصری.

شکل 5- توصیفگر SIFT

3.2. bag of words(BoW)

در بینایی کامپیوتر مدل BoW در صورتی که در آن با ویژگی‌های تصاویر مانند کلمات برخورد گردد می‌تواند برای دسته‌بندی تصاویر مورد استفاده قرار گیرد. در این مدل یک لغت‌نامه به وسیله خوشه‌بندی 13ویژگی‌های استخراج شده 14 مجموعه داده‌های آموزشی تشکیل می دهد. و همچنین هر خوشه15 یک کلمه از این فرهنگ لغت تصویری محسوب می شود. و تصاویر با بردار های فراوانی که در آن هر بعد نشان دهنده نسبت ویژگی های متعلق به یک خوشه است.[5]

شکل 6- bag of the words

۳.۳. یادگیری عمیق 16

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

در بخش بعد پیاده سازی این الگوریتم ها می پردازیم.

۴. آزمایش ها

۴.۱. داده های مورد استفاده

همان طوری که در قسمت شرح مسئله توضیح داده‌شد مجموعه داده‌ای که مسابقه‌ی Kaggle در اختیار ما قرار داده است به شرح زیر است :

مجموعه‌ی داده‌ای جهت آموزش : شامل 25000 تصویر سگ و گربه که تصاویر دارای برچسب می باشند.
مجموعه‌ی داده‌ای جهت آزمایش : شامل 12500 تصویر است (واضح است که این تصاویر فاقد برچسب می‌باشند.)

که تمام تصاویر این دو مجموعه دارای فرمت jpg بوده و می‌توان آن‌ها را از اینجا به دست آورد و همچنین سایز متوسط تصاویر ارائه شده در حدود 500*350 پیکسل است.

یک نمونه تصویر گربه از مجموعه‌ی داده‌ای جهت آموزش

۴.۲. پیاده سازی

در این قسمت مدل BoW را برای پیاده سازی پروژه و الگوریتم SIFT را جهت استخراج ویژگی‌های تصاویر انتخاب کردیم.( در قسمت کارهای مرتبط به توضیح آن‌ها پرداختیم.)

مراحل ابتدایی جهت این کار عبارتند از :

  1. خواندن تمام تصاویر از مجموعه داده‌ای جهت آموزش و برچسب‌های آن‌ها.

  2. استخراج ویژگی‌های هر تصویر به کمک روش bag of words.

  3. یادگیری از طریق بردار‌های تصاویر.

  4. ارائه‌ی تصاویر از مجموعه‌ی داده‌ای جهت آزمایش به الگوریتم برای پیش بینی دسته تصاویر.

برای پیاده‌سازی BoW از زبان برنامه نویسی پایتون17،کتابخانه‌ی scikit-learn 18 و کتابخانه openCV 19 استفاده می‌کنیم.

از الگوریتم SIFT جهت استخراج نقاط کلیدی20 و توصیف نقاط کلیدی21 هر تصویر بهره‌می‌بریم.در این مرحله الگوریتم آرایه‌ای از توصیفات را برمی‌گرداند. بعد از استخراج نقاط کلیدی و توصیفات آن‌ها باید فراداده‌ها را از هر فایل تصویر به‌دست‌آوردیم. فراداده‌ها22 شامل نام فایل‌ها،مسیر23 و کلاس یا دسته 24تصاویر می باشند.
مراحل پیاده سازی‌شده در کد را می توان به کمک تصویر زیر بهتر درک‌نمود.

مراحل پیاده سازی‌

همانطوری که در شکل مشاهده می کنید بعد از به‌دست‌آوردن آرایه‌ی ویژگی‌ها، به خوشه‌بندی ویژگی‌ها و استخراج واژه‌نامه‌ای از ویژگی‌ها25 می‌پردازیم. سپس استخراج‌کننده‌ی ویژگی 26 می‌تواند از واژه‌نامه‌ی به‌دست‌آمده برای پردازش تصاویر استفاده‌کند.
این الگوریتم صرفا از یک مدل آموزش‌یافته جهت پیش‌بینی نوع تصویر استفاده‌می‌کند.

کد کامل پروژه را می‌توان از اینجا دریافت‌کنید.

۴.۳. نتایج

نتایج زیر به کمک یک مجموعه‌ی داده‌ای جهت آموزش شامل 100 تصویر و مجموعه‌ی داده‌ای جهت آزمایش شامل 12 تصویر به‌دست‌آمده‌است.
از 12 تصویر 9 تصویر درست پیش‌بینی شده‌است. از این جمله می‌توان نتیجه‌گرفت که الگوریتم با 75% دقت درستی می‌تواند تصاویر سگ و گربه را از هم تشخیص‌دهد. در زیر بعضی از نمونه‌های درست و نادرست را نمایش‌می‌دهیم.

نمونه درست(1)

نمونه درست(2)

نمونه درست(3)

نمونه نادرست(1)

نمونه درست(4)

نمونه درست(5)

نمونه نادرست(2)

نمونه درست(6)

نمونه نادرست(3)

نمونه درست(7)

نمونه درست(8)

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

[1] Philippe Golle, Machine Learning Attacks Against the Asirra CAPTCHA
[2] Jeremy Elson, John R. Douceur, Jon Howell, Jared Saul, Asirra: A CAPTCHA that Exploits Interest-Aligned Manual Image Categorization, in Proceedings of 14th ACM Conference on Computer and Communications Security (CCS), Association for Computing Machinery, Inc., Oct. 2007
[3] Jared Saul. Petfinder. http://www.petfinder.com.
[4] Dogs vs. Cats competition from Kaggle
[5] Bang Liu, Yan Liu, Kai Zhou, Image Classification for Dogs and Cats
[6] David G. Lowe, Distinctive Image Features from Scale-Invariant Keypoints
[7] Yoshua Bengio,Deep Learning of Representations: Looking Forward

پیوندهای مفید
صفحه مربوط به مسابقه تشخیص سگ و گربه


  1. Asirra (Animal Species Image Recognition for Restricting Access)

  2. CAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart)

  3. بزرگترین سایت برای یافتن خانه برای حیوانات بی‌خانمان

  4. dataset

  5. agent

  6. database

  7. classified

  8. machine vision

  9. text recognition

  10. training dataset

  11. test dataset

  12. SIFT( تبدیل ویژگی مقیاس‌نابسته)

  13. clustering

  14. extracted

  15. cluster

  16. deep learning

  17. python :یک زبان برنامه نویسی همه منظوره،سطح بالا،شیءگرا و مفسر است

  18. یک کتابخانه‌ی یادگیری ماشین منبع باز برای زبان برنامه نویسی پایتون .

  19. یک کتابخانه‌ی بینایی ماشین منبع باز جهت دستکاری تصاویر.

  20. Keypoints

  21. نمایش یک بردار عددی از ویژگی‌های تصاویر : Keypoint descriptors

  22. metadata

  23. path

  24. category

  25. در اینجا منظور واژگان بصریست.

  26. feature extractor

تایید شده

سلام. با تشکر به خاطر زحماتی که کشیدید.
در ابتدا باید ذکر کنم کار شما تاکنون مناسب است. نکات ریز ویرایشی و نوشتاری را رعایت کنید. برای عکس ها مرجع ذکر کنید. سعی کنید قالب نوشته شما کامل و درست باشد.
من کدهای شما را دریافت کرده و بعد از کلی تلاش توانستم کتابخانه opencv را در ابونتو نصب کنم. کد شما اجرا می شود. برای داده های آموزش داده شده دقت شما صد در صد است. توقع داشتم دقتی برای داده های تست ذکر کنید. من نتوانستم برچسب داده های kaggle را برای داده های تست پیدا کنم. به نظرم بخشی از داده های آموزش را برای آموزش مدل اختصاص داده و بخشی دیگر را برای تست در نظر بگیرید. مثلا از هر کلاس ۱۰۰۰۰ عکس را برای آموزش و ۲۵۰۰ عکس را برای تست استفاده کنید.
داده های kaggle را به صورت کامل دریافت کرده‌ام. در صورت نیاز می‌توانید برای دریافت آن مراجعه کنید. مدل شما روی بخشی کمی از داده آموزش داده شده است و قطعا دقت بالایی نخواهد داشت. برای فاز بعدی علاوه بر بهبود مدل کنونی، از کل داده ها برای آموزش استفاده کرده و دقت را گزارش کنید.
برای بخشی از داده‌های آموزش که تمامی آنها از کلاس گربه بودند تست گرفتم. مدل شما ۳۶۸ عکس را گربه و ۲۴۳ عکس را سگ تشخیص داد. به نظرم عملکرد مدل شما مناسب است. چونکه بر روی تنها ۱۰۰ عکس آموزش صورت گرفته است.
کد شما مشکلات کمی برای بدست آوردن لیست تصاویر دارد که آن را درست کردم. حتما کدهای درست را در گیتهاب قرار داده و نحوه نصب ابزارهای لازم برای اجرای کد را نیز ذکر کنید.
در کل من کار شما را خوب ارزیابی می کنم. در مورد جزئیات کد نیازی به توضیحات نیست اما باید روش استفاده شده را بیشتر از این توضیح بدهید. امیدوارم برای فاز انتهایی کارتان بسیار بهتر از این فاز باشد. مشکلات خودتان را حتما قبل از مهلت فاز آخر بپرسید. برای فاز آخر باید آزمایش ها و گزارشتان کامل باشد

رد شده