جستجو برای:
  • دوره‌های آموزشی
  • وبلاگ
  • آموزش‌های رایگان
    • آموزش پایتون رایگان
    • آموزش یادگیری ماشین رایگان
    • آموزش یادگیری عمیق رایگان
    • آموزش pytorch رایگان
    • آموزش رایگان matplotlib
    • آموزش گوگل کولب
  • نقشه راه AI
  • کلاس خصوصی
  • همکاری با ما💚
  • حساب کاربری
  • اساتید
  • درباره ما
     
    • 0902-546-9248
    • howsam.mail@gmail.com
    آکادمی هوش مصنوعی هوسم
    • دوره‌های آموزشی
    • آموزش‌های رایگان
      • آموزش پایتون
      • آموزش یادگیری ماشین رایگان
      • آموزش یادگیری عمیق رایگان
      • آموزش pytorch رایگان
      • آموزش گوگل کولب
    • نقشه راه AI
    • وبلاگ
    • درباره ما
      • اساتید
      • پشتیبانی
    0
    ورود / عضویت

    بلاگ

    آکادمی هوش مصنوعی هوسم وبلاگ بینایی کامپیوتر تشخیص اشیا

    تشخیص اشیا

    2021/07/21
    ارسال شده توسط هوسم
    بینایی کامپیوتر
    6.21k بازدید

    به نام خدا، سلام… در این پست می‌خواهیم موضوع تشخیص اشیا یا همان Object Detection را به شما معرفی کنیم. هدفمان این است که شما را با مقدمات این شاخه مهم بینایی کامپیوتر آشنا کنیم. بعد از معرفی موضوع، از چالش‌ها، کاربردها و دسته بندی روش های تشخیص اشیا خواهیم گفت. با هوسم همراه باشید…

    فهرست مطالب نمایش
    1. تشخیص اشیا چیست؟
    1.1. بلوک دیاگرام ساده برای تشخیص اشیا
    1.2. شناسایی اشیا با تشخیص اشیا چه تفاوتی دارد؟
    1.3. آیا می‌توانیم تشخیص اشیا را تعمیم‌یافته شناسایی اشیا بدانیم؟
    2. Bounding Box در تشخیص اشیا
    3. چالش در Object Detection
    4. دیتاست برای Object Detection
    4.1. دیتاست COCO
    4.2. دیتاست Pascal VOC
    5. معیار ارزیابی در Object Detection
    6. انواع روش های تشخیص اشیا در تصویر
    6.1. تشخیص اشیای دومرحله‌ای
    6.2. تشخیص اشیای تک مرحله‌ای
    7. نویسندگان آموزش آشنایی با تشخیص اشیا

    تشخیص اشیا چیست؟

    قبل از هرچیز بهتر است به این سوال پاسخ دهیم که تشخیص اشیا چیست؟ می‌خواهیم خیلی سریع و چکشی تعریف آن را بگوییم:

    تشخیص اشیا، یعنی موقعیت‌یابی و شناسایی اشیای موجود در تصویر

    پس ما به دنبال پیدا کردن اشیای موجود در تصویر هستیم. در تعریف بالا دو اصطلاح مهم وجود دارد. در واقع سیستم Object Detection دو وظیفه مهم برعهده دارد:

    • موقعیت‌یابی اشیا: دور اشیای مدنظر در تصویر کادر یا مستطیل کشیده می‌شود. پس سیستم تشخیص اشیا، مکان (موقعیت) اشیای موجود در تصویر را در اختیار ما قرار می‌دهد. به کادرهای موجود در تصویر زیر دقت کنید.
    • شناسایی اشیا: نام یا کلاس شی داخل هر کادر مشخص می‌شود. یعنی، تشخیص اشیا تعیین می‌کند که نام شی داخل هر کادر چیست. به نام‌های بالای هر کادر در تصویر زیر دقت کنید.

    تشخیص اشیا چیست؟

    در تصویر بالا مشاهده می‌کنید که عمل تشخیص اشیا (موقعیت‌یابی و شناسایی اشیا) به صورت کامل انجام شده است. چند نمونه جالب دیگر از خروجی Object Detection برای شما آوردیم که هم لذت ببرید و هم بیشتر با تشخیص اشیا آشنا شوید. روی هر تصویر کلیک کنید تا بزرگ شود…

    این از تعریف اولیه Object Detection. اما یک سوال؟ این خروجی‌های موقعیت و نام شی چگونه تولید می‌شوند؟ در ادامه، به این سوال با یک بلوک دیاگرام ساده پاسخ داده‌ایم…

    بلوک دیاگرام ساده برای تشخیص اشیا

    دراینجا، هدف‌مان این نیست که معماری شبکه های Object Detection معروف را به شما نشان دهیم. بلکه، تنها می‌خواهیم نشان دهیم که دو خروجی موقعیت و نام شی چگونه تولید می‌شود. به شکل زیر نگاه کنید؛ یک شبکه تشخیص اشیا داریم که محتویاتش فعلا مهم نیست. اما دو خروجی می‌سازد:

    • یک خروجی، نام شی را نشان می‌دهد. مشاهده می‌کنید که صرفا یک کلاسیفایر یا دسته‌بند هست.
    • خروجی بعدی، موقعیت اشیا هست که به‌صورت رگرسیون تعریف می‌شود. چهار مقدار (x,y,w,h) را تخمین می‌زند. براساس این دو خروجی است که آن تصویر نهایی با باکس و برچسب حاصل می‌شود.

    بلوک دیاگرام ساده برای Object Detection

    بیایید کمی معناگرا شویم! 😅 درادامه می‌خواهیم تفاوت دقیق تشخیص اشیا و شناسایی اشیا را توضیح دهیم.

    شناسایی اشیا با تشخیص اشیا چه تفاوتی دارد؟

    اول اینکه، شناسایی (بازشناسی) ترجمه کلمه Recognition و تشخیص هم معادل کلمه Detection است. در شناسایی اشیا (Object Recognition) به هر تصویر تنها یک نام اختصاص می‌دهیم. مثلا تصویری از یک سگ برچسب “سگ” را دریافت می‌کند. تصویری از دو سگ، هنوز برچسب “سگ” را دریافت می‌کند. اما، تشخیص اشیا کادری دور هر سگ می‌کشد و هر کادر را با عنوان “سگ” برچسب می‌زند. به تصویر زیر نگاه کنید و دو حالت را باهم مقایسه کنید. بنابراین، سیستم تشخیص پیش‌بینی می‌کند که هریک از اشیا کجا هستند و نام آنها چیست. به این ترتیب، تشخیص اشیا اطلاعات بیشتری نسبت به شناسایی اشیا در مورد یک تصویر به ما می‌دهد.

    تفاوت Object Detection و Image Recognition

    برتری تشخیص نسبت به شناسایی اشیا زمانی مشخص می‌شود که در تصویر چند شی متفاوت مانند گربه و سگ وجود داشته باشند. شناسایی اشیا نمی‌تواند برای این تصویر نامی انتخاب کند. اما تشخیص اشیا به‌راحتی دور هر شی کادری می‌کشد و نام آن شی را می‌نویسد. مثلا تصویر زیر با این همه شی، خوراک Object Detection است!

    آشنایی با Object Detection

    آیا می‌توانیم تشخیص اشیا را تعمیم‌یافته شناسایی اشیا بدانیم؟

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

    تا اینجا، واژه جدیدی به‌نام کادر یا مستطیل وجود داشت. درواقع، کادر معادل با عبارت Bounding Box است. درادامه می‌خواهیم شما را بیشتر با این مفهوم آشنا کنیم.

    Bounding Box در تشخیص اشیا

    به کادر دور اشیا، bounding box گفته می‌شود. در فارسی می‌توان آنرا مستطیل (کادر یا باکس) محیطی نامید. هرچند گروه هوسم نام چارچوب را انتخاب می‌کند. چارچوب واژه قشنگی است. حال بیایید ببینیم این چارچوب چگونه توصیف می‌شود. یک چارچوب را می‌توان با 4 پارامتر در فضای دوبعدی ترسیم کرد:

    • نقطه مبدا چارچوب (x,y): طبق تصویر زیر، این نقطه نشان‌دهنده گوشه بالا-چپ (top-left) چارچوب است. به (x,y) در تصویر زیر نگاه کنید.
    • پهنای چارچوب (w): این پارامتر نشان‌دهنده پهنای چارچوب هست. طبق تصویر زیر، پهنای چارچوب، فاصله افقی بین ابتدا تا انتهای چارچوب است. به w در تصویر زیر نگاه کنید.
    • ارتفاع چارچوب (h): این پارامتر نشان دهنده ارتفاع چارچوب است. به h در تصویر زیر نگاه کنید.

    bounding box در تشخیص اشیا

    البته، روش‌های دیگری برای نمایش چارچوب وجود دارد که برای شروع چندان نیاز نیست. بسیارخب، حالا بیایید به بررسی چالش‌های موجود در تشخیص اشیا بپردازیم.

    چالش در Object Detection

    می‌توان گفت که تشخیص اشیا، مساله مشکل‌تری نسبت به شناسایی اشیا است. درادامه، همراه با تصویر، چند چالش مهم در تصویر را معرفی کرده‌ایم:

    • انعطاف در اشیا: یک شی مانند انسان ممکن هست به شکل‌های مختلفی در تصویر ظاهر شود. (شکل الف)
    • انسداد: ممکن است بخش مهمی از اشیا پوشیده شده باشد. (شکل ب)
    • زاویه دید: ممکن است زوایای تصویربرداری از شی به‌گونه‌ای باشد که شی به‌صورت مناسب دیده نشود. (شکل پ)
    • روشنایی: تغییر نور در تصویر (شکل ت)
    • پس زمینه: شبیه بودن شی با پس زمینه (شکل ث)
    • تغییرات بین کلاسی: شکل‌های مختلف شی برای یک کلاس (شکل ج)

    انواع چالش در بینایی کامپیوتر

    دیتاست برای Object Detection

    تشخیص اشیا موضوع مهمی در بینایی کامپیوتر است. طبیعتا، تعداد دیتاست برای Object Detection بسیار زیاد است. دراینجا می‌خواهیم دو نمونه معروف را معرفی کنیم.

    دیتاست COCO

    دیتاست COCO یکی از بزرگ‌ترین دیتاست‌های موجود در Object Detection است. این دیتاست توسط شرکت‌های بزرگ فعال در حوزه هوش مصنوعی مانند مایکروسافت آماده شده است. این دیتاست شامل بیش از 200 هزار تصویر و 90 شی مختلف است. بسیاری از مقالات بزرگ و مطرح در  برروی این دیتاست آموزش و ارزیابی انجام داده‌اند. این دیتاست تنها برای تشخیص اشیا نیست و در سایر زمینه‌های بینایی کامپیوتر مانند سگمنت تصویر نیز استفاده می‌شود.

    دیتاست Pascal VOC

    دیتاست Pascal VOC یک مجموعه نسبتا قدیمی است که آخرین نسخه آن به سال 2012 برمی‌گردد. این دیتاست شامل 20 شی و حدود 5 هزار تصویر است.

    معیار ارزیابی در Object Detection

    فرض کنید که یک شبکه تشخیص اشیا را آموزش داده‌اید. حالا با چه متر و معیاری عملکرد این شبکه را باید سنجید؟ دیگر مانند شناسایی اشیا نمی‌توان از Accuracy استفاده کرد. برای Object Detection معیارهای ارزیابی دیگر وجود دارد. یکی از رایج‌ترین معیارهای ارزیابی، mean Average Precision یا به اختصار mAP هست. mAP برمبنای مقایسه چارچوب پیش بینی و چارچوب هدف محاسبه می‌شود. منطقی هست که دو چارچوب پیش بینی و هدف را باهم مقایسه کنیم تا ببینیم چقدر به هم نزدیک هستند.

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

    Intersection over Union (IoU)

    حالا چطور می‌توانیم این مقایسه بالا را به‌صورت عددی انجام دهیم؟ برای این مقایسه از معیار Intersection Over Union یا به اختصار IoU استفاده می‌شود. بیایید ببینیم IOU چگونه محاسبه می‌شود. به شکل زیر نگاه کنید. برای محاسبه میزان انطباق چارچوب پیش بینی و هدف، اشتراک دو چارچوب را بر اجتماع آنها تقسیم می‌کنیم.

    معیار IoU در تشخیص اشیا

    حالا باید براساس مقادیر IoU، معیار mAP محاسبه شود. برای محاسبه mAP، ابتدا نمودار Recall-Precision براساس IoU رسم می‌شود. مساحت زیر سطح این نمودار برابر با mAP خواهد بود. نحوه محاسبه mAP خود یک پست جداگانه می‌طلبد. ضمن اینکه برای شروع در تشخیص اشیا نیازی نیست که جزئیات نحوه محاسبه آنرا بدانید.

    حالا ممکن است بپرسید که پس چگونه شبکه را ارزیابی کنم؟! ساده هست؛ کافی است از کتابخانه COCO API استفاده کنید. یک کتابخانه پایتونی که بسیار ساده مقدار mAP را به شکل‌های مختلفی برای شما محاسبه می‌کند.

    رسیدیم به اصل مطلب! چه روش‌هایی برای تشخیص اشیا وجود دارد؟ درادامه می‌خواهیم به شما روش‌های رایج در این زمینه را معرفی کنیم.

    انواع روش های تشخیص اشیا در تصویر

    روش‌های موجود در تشخیص اشیا معمولا در یکی از دو دسته زیر قرار می‌گیرند:

    • روش‌های یک مرحله‌ای (one shot Networks)
    • روش‌های دو مرحله‌ای (two shot Networks)

    درادامه، هریک از این دو دسته را به صورت مختصر توضیح می‌دهیم. در هر بخش یک شبکه معروف را هم معرفی می‌کنیم. با روش‌های دو مرحله‌ای آغاز می‌کنیم…

    تشخیص اشیای دومرحله‌ای

    روش‌های دومرحله‌ای، فرآیند تشخیص اشیا را در دو مرحله پیشنهاد ناحیه (Region Proposal Network) و Detection Head انجام می‌دهند. طبق شکل زیر، این دو مرحله عبارتنداز:

    1. ابتدا، بخش Region Proposal Network یا RPN چندین کاندیدای شی را به عنوان نواحی مورد علاقه (Region of Interest یا RoI) پیشنهاد می‌دهند. (RPN در تصویر زیر)
    2. در بخش دوم (Detection Head)، مناطق پیشنهادی بررسی می‌شوند. تعدادی حذف می‌شوند و تعدادی هم دقیق‌تر تنظیم می‌شوند و نام شی درون چارچوب هم تعیین می‌شود.

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

    تشخیص اشیا دو مرحله ای

    شبکه Faster R-CNN دومرحله‌ای است و محبوبیت و قدرت بالایی دارد. روش‌های دومرحله‌ای، معمولا دقت بالایی دارند، اما معمولاً نسبت به تک‌مرحله‌ای‌ها کندتر هستند. برویم روش‌های تک‌مرحله‌ای را ببینیم…

    تشخیص اشیای تک مرحله‌ای

    در بخش قبل دیدید که خروجی RPN در روش‌های دومرحله‌ای چندان دقیق نبود و در بخش دومش آنرا اصلاح می‌کردیم. اما به خاطر دومرحله‌ای بودن، سرعت تشخیص پایین بود. روش‌های تک مرحله‌ای، با هدف حل چالش سرعت پایین در روش‌های دومرحله‌ای پشنهاد شدند. روش‌های تک‌مرحله‌ای شبیه این هستند که بلوک RPN در روش‌های دومرحله‌ای را حذف کنیم. بنابراین در این دسته، مطابق شکل زیر، بخش RPN وجود ندارد و فیچرمپ خروجی CNN مستقیما به Detection Head می‌رود.

    تشخیص اشیا تک مرحله ای

    در اصل روش‌های تک‌مرحله‌ای تشخیص شی را مشابه با دسته‌بندی حل می‌کنند. چون در دسته‌بندی هم تنها براساس فیچرمپ خروجی عمل دسته‌بندی/شناسایی اشیا انجام می‌شود. شبکه معروف YOLO ازجمله روش‌های تک‌مرحله‌ای است که پایه‌گذار روش‌های تک‌مرحله‌ای بود.

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

    نویسندگان آموزش آشنایی با تشخیص اشیا

    این آموزش برپایه دوره بینایی کامپیوتر هوسم تهیه شده است. نویسندگان این آموزش:

    • سحر احمدی
    • سید سجاد اشرفی

    بسیارخب، فعلا تشخیص اشیا به پایان رسید. اما به زودی برمی‌گردیم! چون می‌خواهیم تعدادی شبکه تشخیص اشیای تک‌مرحله‌ای و دومرحله‌ای معرفی کنیم. همچنین، قراراست توضیح مختصری درباره دو شبکه Faster R-CNN و RetinaNet اضافه کنیم. خوشحال می‌شویم که نظر و پیشنهادتان را درباره این پست بگویید. با هوسم همراه باشید…

    اشتراک گذاری:

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

    بینایی کامپیوتر چیست؟
    بینایی کامپیوتر چیست؟ وقتی به یک تصویر نگاه می‌کنیم، در کمتر از یک ثانیه می‌توانیم...
    شبکه ویژن ترنسفورمر
    شبکه ویژن ترنسفورمر (Vision Transformer) یا ViT یک شبکه عصبی مبتنی بر مدل ترنسفورمر هست...
    آموزش یولو 8
    یولو 8 واقعا تشخیص اشیا (Object Detection) و بخش‌بندی (Segmentation) را آسان کرده است. در...

    7 دیدگاه

    به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.

    • جمشیدی گفت:
      2022/09/28 در 12:27 ب.ظ

      سلام. مثل همیشه عالی .
      همیشه سایت و کانال شما را به دوستان علاقمند به حوزه هوش مصنوعی توصیه کردم.

      پاسخ
    • مصطفی گفت:
      2022/02/23 در 4:14 ق.ظ

      سلام وقت بخیر و خداقوت
      بنده سوالی که داشتم این است که چگونه می توانیم توجه را به این مدل های یعنی yolo , ssd این ها وارد کنیم.
      یعنی می توانیم از بلوک توجه کانال و توجه فضایی در اینگونه مدلها استفاده کنیم؟

      پاسخ
      • تیم هوسم گفت:
        2022/02/23 در 10:01 ق.ظ

        سلام
        بله، از مکانیزم توجه میتونیم در شبکه‌های دیتکشن استفاده کنیم. اما برای فهمیدن چگونگی انجام این کار، بهتر هست به مقاله‌های حوزه دیتکشن و مروری (survey) مراجعه کنید.

        پاسخ
    • علیرضا خداپرسیت شیرازی گفت:
      2022/01/22 در 3:00 ب.ظ

      سلام و خداقوت
      سوالی داشتم از آقای مهندس اشرفی

      تاثیر کیفیت ویدیو بر الگوریتم های آبجکت دیتکشنی از قبیل Yolo ، SSD و … تا چه میزان می تونه باشه و برای تحقیق در این حوزه باید دنبال چه کلید واژه هایی باشم؟

      پاسخ
      • تیم هوسم گفت:
        2022/01/23 در 12:41 ب.ظ

        سلام
        ویدئو، تشکیل‌شده از مجموعه‌ای فریم یا تصویر هست. بنابراین، بهتر هست درمورد کیفیت تصویر در تشخیص اشیا صحبت بشه. یکی از مهم‌ترین عوامل تاثیرگذار در کیفیت تصویر، سایز تصویر هست. معمولا سرعت اجرای شبکه‌ها با اندازه تصویر ارتباط مستقیم داره. فکر می‌کنم از مقاله‌های survey در زمینه object detection می‌تونید شروع کنید.

        پاسخ
    • yasser گفت:
      2021/08/10 در 7:45 ب.ظ

      ممنون استاد عالیه.

      پاسخ
      • تیم هوسم گفت:
        2022/01/23 در 12:37 ب.ظ

        ممنون 🌹🙏

        پاسخ

    دیدگاهتان را بنویسید لغو پاسخ

    جستجو برای:
    دوره‌های جامع هوسم
    • مسابقه Kaggle: تحلیل و پیش‌بینی رفتار با داده‌های چندحسگری سری زمانی
    • پیاده‌سازی ChatGPT از صفر با پایتورچ
    • آموزش OpenCV: از پردازش تا بینایی
    • دیپ کاتالیست: دوره افزایش مهارت
    • پایتون برای هوش مصنوعی 🤖
    • یادگیری ماشین جامع: از مفاهیم تا پیاده‌سازی🔥
    • یادگیری عمیق جامع: از مفاهیم تا پیاده‌سازی
    درباره هوسم

    آکادمی هوش مصنوعی هوسم با آموزش‌های تخصصی در حوزه هوش مصنوعی در خدمت شماست. روی کمک هوسم حساب کنید…

    • گیلان- شهرستان رودسر- شهرک انصاری- کوچه لاله 9
    • 09025469248
    • howsam.mail@gmail.com
    دسترسی سریع
    • صفحه اصلی
    • وبلاگ
    • حساب کاربری
    • سبد خرید
    شبکه‌های اجتماعی

     

    logo-samandehi
    تمامی حقوق برای آکادمی هوسم محفوظ است.
      کد تخفیف شما هست و فقط
      فرصت داری ازش استفاده کنی!
      کد تخفیف شما هست و فقط
      فرصت داری ازش استفاده کنی!
      کد تخفیف شما هست و فقط
      فرصت داری ازش استفاده کنی!
      کد تخفیف شما هست و فقط
      فرصت داری ازش استفاده کنی!
      کد تخفیف شما هست و فقط
      فرصت داری ازش استفاده کنی!
      ورود
      استفاده از موبایل
      استفاده از آدرس ایمیل
      آیا هنوز عضو نیستید؟ اکنون عضو شوید
      بازنشانی رمز عبور
      استفاده از موبایل
      استفاده از آدرس ایمیل
      عضویت
      استفاده از موبایل
      استفاده از ایمیل
      قبلا عضو شدید؟ اکنون وارد شوید

      ورود

      رمز عبور را فراموش کرده اید؟

      هنوز عضو نشده اید؟ عضویت در سایت