بینایی کامپیوتر چیست؟
بینایی کامپیوتر چیست؟ وقتی به یک تصویر نگاه میکنیم، در کمتر از یک ثانیه میتوانیم چیزهای زیادی را تشخیص دهیم؛ این یک خیابان شلوغ است، آن طرف یک ماشین در حال نزدیک شدن است، دو نفر کنار جاده ایستادهاند و چراغ عابر روشن است. برای ما این کار کاملا طبیعی است؛ اما برای کامپیوترها سالها یک چالش پیچیده و حلنشده بود. بینایی کامپیوتر شاخهای از هوش مصنوعی است که به کامپیوتر قابلیت دیدن و درک تصاویر و ویدئوها را میدهد. در این آموزش میخواهم با جزئیات درباره بینایی کامپیوتر صحبت کنم. با هوسم همراه باشید…

بینایی کامپیوتر چیست؟
بینایی کامپیوتر شاخهای از هوش مصنوعی است که به کامپیوترها امکان میدهد تصاویر و ویدئوها را درک و از آنها اطلاعات مفید استخراج کنند. با بینایی کامیپوتر میخواهیم کامپیوترها بتوانند ببینند، تحلیل کنند، بفهمند و بر اساس آنچه میبینند تصمیم بگیرند؛ درست شبیه انسان، اما در برخی موارد حتی سریعتر و دقیقتر.
برای درک سادهتر، میتوان بینایی کامپیوتر را با سیستم بینایی انسان مقایسه کرد. چشمها وظیفه دریافت اطلاعات بصری از محیط را دارند و مغز این اطلاعات را پردازش میکند تا انسان بتواند اشیا، افراد و صحنههای اطراف را تشخیص دهد. بینایی کامپیوتر تلاش میکند سازوکاری مشابه این فرایند را در ماشینها ایجاد کند. در اینجا دوربینها و سنسورها نقش «چشم» را ایفا میکنند و الگوریتمها و مدلهای بینایی کامپیوتر نقش «مغز» را دارند؛ یعنی دادههای تصویری را پردازش میکنند تا از دل آنها اطلاعات معنادار استخراج شود، اشیا شناسایی شوند و در نهایت سیستم بتواند بر اساس آنچه «میبیند» تصمیم بگیرد.

یادداشت عبارت بینایی کامپیوتر ترجمه اصطلاح انگلیسی Computer Vision است؛ یعنی دادن توانایی «دیدن» به کامپیوترها. در بسیاری از متون و گفتگوهای فنی نیز این حوزه را بهصورت کوتاه ویژن (Vision) مینامند. نگی ویزیون که عیبه! 😅 همچنین، از نماد CV (مخفف Computer Vision) در منابع این حوزه استفاده میشود.
مسائل بینایی کامپیوتر
بینایی کامپیوتر مجموعهای از مسائل و وظایف مختلف را شامل میشود که هر کدام به نوعی تلاش میکنند اطلاعات مفیدی از تصاویر یا ویدئوها استخراج کنند. در ادامه، چند مورد از مهمترین زیرشاخههای بینایی کامپیوتر را معرفی میکنم. من به این زیرشاخهها، مسائل مادر میگویم؛ چون بسیار کلیدی هستند.
طبقه بندی تصویر (Image Classification)
در مسئله طبقه بندی تصویر (Image Classification)، هدف این است که یک تصویر به یک یا چند دسته مشخص نسبت داده شود. به عبارت دیگر، سیستم باید تشخیص دهد تصویر ورودی مربوط به چه چیزی است. برای مثال اگر تصویری از یک گربه به مدل داده شود، خروجی باید نشان دهد که این تصویر متعلق به دسته «گربه» است.

این مسئله یکی از پایهایترین وظایف در بینایی کامپیوتر محسوب میشود و بسیاری از مدلها و روشهای جدید ابتدا روی همین مسئله آزمایش و ارزیابی میشوند. بهعنوان مثال، بسیاری از شبکههای عصبی کانولوشنی معروف مانند شبکه ResNet ،VGG و غیره ابتدا در مسئله طبقهبندی تصویر مطرح شدند.
تشخیص اشیا (Object Detection)
در تشخیص اشیا، علاوه بر اینکه سیستم باید تشخیص دهد چه چیزی در تصویر وجود دارد، باید محل قرارگیری یا موقعیت آن (Position) را نیز مشخص کند. برای مثال اگر تصویری شامل چند خودرو و چند انسان باشد، مدل باید همه آنها را شناسایی کرده و موقعیت هر کدام را در تصویر مشخص کند (معمولا با کادرهایی معروف به Bounding Box که دور هر شی کشیده میشود). این قابلیت در بسیاری از کاربردهای عملی مانند خودروهای خودران، سیستمهای نظارتی و تحلیل تصاویر شهری حیاتی است.

روشهای مشهور تشخیص اشیا شامل مدلهای کلاسیکی مثل R-CNN و Fast/Faster R-CNN و مدلهای سریعتر و مدرنتر مانند YOLO و SSD هستند. این مدلها هر کدام رویکرد متفاوتی برای پیدا کردن اشیا دارند، اما هدف همه آنها یک چیز است: تشخیص دقیق و سریع آنچه در تصویر وجود دارد و محل قرارگیری آنها.
بخشبندی تصویر (Image Segmentation)
در بخشبندی تصویر، هدف این است که تصویر به بخشهای مختلف تقسیم شود تا هر پیکسل تصویر به یک دسته/گروه مشخص تعلق بگیرد. برخلاف تشخیص اشیا که معمولا از کادر برای مشخص کردن محل شی استفاده میکند، در بخشبندی تصویر مرز دقیق هر شی در تصویر مشخص میشود. وقتی به خروجی یک مدل بخشبندی نگاه میکنیم، تصویر نسخهای سادهتر و رنگبندیشده از تصویر اصلی به نظر میرسد؛ انگار یک نقاشی انتزاعی و ساده از صحنه ساخته شده است.
برای مثال اگر ورودی، تصویری از طبیعت شامل یک گربه روی چمن باشد، سیستم میتواند مشخص کند کدام پیکسلها مربوط به گربه هستند، کدامها به چمن، کدامها به درخت و کدامها به آسمان تعلق دارند. به همین دلیل، این مسئله در کاربردهایی که دقت مکانی بالا مهم است، مانند تحلیل تصاویر پزشکی، خودروهای خودران و رباتیک، نقش بسیار مهمی دارد. تصور کنید، در یک تصویر پزشکی، سیستم بینای کامپیوتر بتواند نواحی مشکوک به یک بیماری خاص را دقیق مشخص کند و آن ناحیه را هایلایت کند.

از مدلهای شناختهشده در این حوزه میتوان به FCN ،U-Net ،Mask R-CNN و DeepLab اشاره کرد که هر کدام با روشهای متفاوتی تلاش میکنند مرز دقیق اشیا را در تصویر تشخیص دهند.
ردیابی در ویدئو (Object Tracking)
ردیابی ویدئو (Object Tracking) یا ردیابی اشیا در ویدئو به مسئله دنبال کردن یک یا چند شی در طول فریمهای مختلف یک ویدئو گفته میشود. پس از اینکه یک شی در تصویر شناسایی شد، سیستم تلاش میکند همان شی را در فریمهای بعدی نیز پیدا کرده و مسیر حرکت آن را دنبال کند. این قابلیت در کاربردهایی مانند تحلیل ویدئوهای نظارتی، خودروهای خودران، تحلیل مسابقات ورزشی و حتی تعامل انسان و ربات استفاده میشود.

در ردیابی ویدئو، هدف تنها تشخیص اشیا نیست بلکه حفظ هویت هر شی در طول زمان است؛ یعنی سیستم باید بتواند بفهمد که شخص الف را در فریم بعدی هم دنبال کند؛ بدون اینکه اشتباهی فرد دیگری را دنبال کند یا اصلا فرد الف را گم کند! این کار به هماهنگی دقیق بین تشخیص، پیشبینی حرکت در فریم بعدی و بهروزرسانی موقعیت نیاز دارد.
از روشها و مدلهای معروف در این حوزه میتوان به SORT ،MOSSE و CSRT اشاره کرد که از ترکیب بینایی کامپیوتر و یادگیری عمیق برای دنبال کردن اشیا با دقت بالا در شرایط واقعی، مانند تغییر نور یا زاویه دوربین، استفاده میکنند.
سایر مسائل مهم بینایی کامپیوتر
مواردی که تا اینجا بررسی کردیم، ستونهای اصلی و مسائل مادر در بینایی کامپیوتر هستند؛ اما دنیای بینایی کامپیوتر بسیار فراتر از اینهاست. امروزه با پیشرفت یادگیری عمیق، تسکهای متنوع و هیجانانگیز دیگری نیز معرفی شدهاند که هر کدام گره از چالشهای بزرگی باز میکنند. در ادامه به چند مورد از مهمترین آنها اشاره میکنم:
- بازسازی سهبعدی (3D Reconstruction): در این تسک، سیستم تلاش میکند با استفاده از یک یا چند تصویر دوبعدی، مدل سهبعدی و حجمدار اشیا یا محیط را بازسازی کند. این ویژگی در نقشهبرداری، واقعیت افزوده (AR) و ساخت مدلهای دیجیتال از دنیای واقعی کاربرد فراوانی دارد.
- تولید و سنتز تصویر (Image Generation & Synthesis): حتی اگر هیچ اطلاعات تخصصی از بینایی کامپیوتر و هوش مصنوعی نداشته باشید، باز هم احتمالا با مسئله تولید تصویر آشنا هستید. این مسئله شامل مدلهایی است که میتوانند تصاویر کاملا جدید خلق کنند یا تغییراتی روی تصاویر موجود اعمال کنند. تبدیل متن به تصویر، افزایش کیفیت تصاویر قدیمی (Super-Resolution) و تغییر سبک تصاویر (Style Transfer) در این دسته قرار میگیرند.
- تشریح تصویر (Image Captioning): این تسک جذاب پل ارتباطی بین بینایی کامپیوتر و پردازش زبان طبیعی (NLP) است. در اینجا مدل با نگاه کردن به تصویر، یک جمله یا توصیف متنی کامل درباره محتوای آن تولید میکند؛ مثلا برای تصویر زیر مینویسد: «یک سگ سفید در حال دویدن روی چمن».
- تخمین ژست حرکتی (Pose Estimation): هدف این تسک، تشخیص و ردیابی موقعیت مفاصل و نقاط کلیدی بدن انسان (مثل آرنج، زانو، شانه و مچ) در تصویر یا ویدئو است. این تکنولوژی در تحلیل حرکات ورزشی، بازیهای ویدئویی بدون کنترلر و سیستمهای ارگونومی کاربرد جدی دارد.
- تخمین عمق (Depth Estimation): در این تسک، کامپیوتر تلاش میکند بدون داشتن دوربینهای عمقسنج خاص و تنها از روی یک تصویر معمولی، فاصله هر کدام از اشیا موجود در صحنه تا دوربین را حدس بزند. این قابلیت برای ناوبری ایمن در رباتها و خودروهای خودران حیاتی است.
- بازشناسی چهره (Face Recognition): در این تسک، سیستم نه تنها چهره انسان را پیدا میکند، بلکه با استخراج ویژگیهای منحصربهفرد آن و مقایسه با یک پایگاه داده، هویت دقیق شخص را تشخیص میدهد. سیستمهای احراز هویت گوشیهای هوشمند (Face ID)، کنترل تردد در سازمانها و سیستمهای امنیتی فرودگاهها بر پایه این فناوری کار میکنند.

کاربردهای بینایی کامپیوتر
امروزه، بینایی کامپیوتر تقریبا در هر صنعتی ردپا دارد! اما بعضی از کاربردها آنقدر قدرتمند، الهامبخش و خفن هستند که نشان میدهند این فناوری چطور مرزهای توانایی ماشینها را جابجا کرده است. در ادامه چند مورد از نابترین و تاثیرگذارترین کاربردهای بینایی کامپیوتر را معرفی میکنم.
خودروهای خودران و بینایی کامپیوتر
خودروهای خودران برای دیدن جاده، تشخیص عابر، تابلوها، خطوط، سایر خودروها و موقعیتهای خطرناک، کاملا به بینایی کامپیوتر متکیاند. این سیستمها باید در هر لحظه محیط را مثل یک راننده باتجربه تحلیل کنند. بدون بینایی کامپیوتر، رانندگی خودکار عملا غیرممکن است.
بینایی کامپیوتر در پزشکی و تشخیص بیماری
امروزه مدلهای بینایی کامپیوتر میتوانند تومورها، ضایعات پوستی، بیماریهای چشمی و مشکلات رادیولوژی را با دقتی نزدیک به متخصصان تشخیص دهند. از خواندن اسکنها گرفته تا تشخیص زودهنگام سرطان، این حوزه یکی از ارزشمندترین کاربردهای CV است.
شناسایی چهره
تشخیص و شناسایی چهره در تلفنهای هوشمند، سیستمهای امنیتی، درگاههای خودکار فرودگاهها و سرویسهای احراز هویت آنلاین استفاده میشود. این یکی از ملموسترین کاربردها برای عموم مردم است. شاید با آنها در همین کشورمان ایران مواجه شده باشید.
تحلیل ویدئوهای نظارتی
سیستمهای نظارتی هوشمند میتوانند رفتارهای غیرعادی را تشخیص دهند؛ حرکت افراد یا خودروها را دنبال کنند و امنیت شهری را بهصورت هوشمند حفظ کنند. این سیستمها اغلب بهصورت خودکار هشدار میدهند و نیازی به نظارت انسانی ۲۴ ساعته ندارند. این سیستمها بهشدت وابسته به بینایی کامپیوتر، خصوصا تشخیص و ردیابی اشیا هستند.
رباتیک هوشمند
رباتهایی که میتوانند محیط را ببینند و با آن تعامل واقعی داشته باشند؛ از رباتهای انبارهای آمازون گرفته تا بازوهای جراحی، کاملا به بینایی کامپیوتر وابستهاند. این رباتها نهفقط اشیا را تشخیص میدهند، بلکه نحوه گرفتن، حرکت دادن یا تعامل صحیح با آنها را نیز یاد میگیرند.
بینایی کامپیوتر در صنعت سرگرمی و واقعیت افزوده
از فیلترهای اینستاگرام و اپلیکیشنهای واقعیت افزوده (AR) گرفته تا جلوههای ویژه سینما، تشخیص چهره، دنبالکردن حرکات بدن و ترکیب واقعیت و تصویر، همگی به بینایی کامپیوتر متکیاند. حتی ساخت بازیهای واقعیت افزوده (مثل Pokémon GO) با کامپیوتر ویژن ممکن شد.
فروشگاههای بدون صندوق و پرداخت خودکار
فروشگاههایی مثل Amazon Go از شبکهای گسترده از دوربینها و مدلهای بینایی کامپیوتر برای تشخیص کالای انتخابشده توسط مشتری استفاده میکنند. مشتری فقط وارد میشود، برمیدارد و بیرون میرود؛ سیستم همهچیز را متوجه میشود.
بینایی کامپیوتر و کشاورزی هوشمند
پهپادها و دوربینهای هوشمند سلامت گیاهان، آفات، سطح رطوبت و رشد محصول را بررسی میکنند. این سیستمها به کشاورزان کمک میکنند دقیقتر و سریعتر تصمیم بگیرند.
تولید و کنترل کیفیت مبتنی بر بینایی کامپیوتر
در کارخانهها، سیستمهای بینایی کامپیوتر محصولات خراب، اشکالات میکروسکوپی و ایرادات خط تولید را با دقت بالا تشخیص میدهند. چیزی که برای نیروی انسانی اگر غیرممکن نباشد، احتمالا در انجام آن خیلی کند یا پرخطا است.

بینایی کامپیوتر و یادگیری عمیق
بینایی کامپیوتر و یادگیری عمیق رابطه بسیار قوی و حیاتی دارند. یادگیری عمیق (Deep Learning) زیرمجموعهای از یادگیری ماشین است که شامل روشهایی مبتنی بر شبکههای عصبی است. تاریخچه پیوند بین بینایی کامپیوتر و یادگیری عمیق به اوایل دهه ۲۰۱۰ باز میگردد. پیش از آن، بینایی کامپیوتر عمدتا بر روشهای کلاسیک مبتنی بر ویژگیهای دستی (Handcrafted Features) مانند SIFT ،HOG و روشهای آماری استوار بود. روشهایی که با زحمت زیاد توسط محققان حوزه بینایی کامپیوتر طراحی میشدند، اما دقت و عملکرد بالایی در مسائل پیچیده بینایی کامپیوتر مثل تشخیص اشیا، بخشبندی تصویر و ردیابی اشیا نداشتند.

در سال ۲۰۱۲، یک نقطه عطف مهم رخ داد: شبکه عصبی کانولوشنی AlexNet در مسابقه ImageNet (جام جهانی بینایی کامیپوتر!) شرکت کرد و با اختلاف قابل توجهی نسبت به سایرین (روشهای مبتنی بر الگوریتمهای کلاسیک)، رتبه اول را بهدست آورد. این موفقیت آغاز انقلاب یادگیری عمیق در بینایی کامپیوتر بود. از آن پس، تقریبا تمام پیشرفتهای چشمگیر در وظایف (Task) مختلف بینایی کامپیوتر، مدیون یادگیری عمیق (بهخصوص شبکه کانولوشن (CNN) هستند.
پیوند بینایی کامپیوتر و یادگیری عمیق باعث شد نیاز به طراحی دستی ویژگیها از بین برود. این پیوند انقلابی باعث شده است که امروز برنامهها و سیستمهای بینایی کامپیوتر بتوانند حتی در مسائل پیچیده (مانند خودروهای خودران)، عملکرد خوبی داشته باشند.
بینایی کامپیوتر و پردازش زبان طبیعی
بینایی کامپیوتر و پردازش زبان طبیعی (Natural Language Processing یا NLP) دو شاخه مهم و مکمل در حوزه هوش مصنوعی هستند که در سالهای اخیر به صورت فزایندهای با هم پیوند خوردهاند. شاید عدهای این جمله من را اغراقآمیز بدانند، اما به نظرم پیوند بین بینایی کامپیوتر و پردازش زبان طبیعی یکی از جذابترین و کاربردیترین مسیرهای پژوهشی در هوش مصنوعی است!
بینایی کامپیوتر مسئول درک و تحلیل دادههای تصویری و ویدئویی است؛ در حالی که پردازش زبان طبیعی (NLP) بر فهم و تولید زبان انسانی تمرکز دارد. اگر بخواهیم این دو حوزه را با تواناییهای انسان مقایسه کنیم، میتوان بینایی کامپیوتر را معادل سیستم بینایی انسان دانست. اما NLP معادل کدام قابلیت انسانی است؟
در انسان، فرایند فهم زبان با دریافت اطلاعات از طریق حواس آغاز میشود. برای مثال، متن از طریق بینایی و گفتار از طریق شنوایی دریافت شده و برای پردازش به مغز منتقل میشوند. در سوی دیگر، تولید زبان از طریق ابزارهایی مانند دهان برای صحبت کردن یا دست برای نوشتن انجام میشود. به همین ترتیب، در NLP نیز بخشی به درک زبان و بخشی دیگر به تولید آن اختصاص دارد.
یادداشت در بسیاری از موارد وقتی از حوزه NLP صحبت میشود، تمرکز اصلی بر دادههای متنی است. پردازش دادههای صوتی و گفتاری معمولا در شاخهای نزدیک اما متمایز به نام پردازش گفتار یا پردازش صوت (Speech Processing) بررسی میشود.
ترکیب دو شاخه بینایی کامپیوتر و پردازش زبان طبیعی کاربردهای منحصر به فردی خلق کرده است؛ مانند:
- تشخیص و توصیف خودکار تصاویر (Image Captioning): با بینایی کامپیوتر تصویر ورودی را درک میکنیم و با پردازش زبان طبیعی، درک و تحلیل را به نوشتار تبدیل میکنیم.
- تولید تصویر (Image Generation): تصویر مدنظرمان را بهصورت متنی توصیف میکنیم؛ بخش NLP این متن را درک میکند؛ بخش CV متن درکشده را تبدیل به تصویر میکند.
از نظر فنی، این ترکیب نیازمند مدلهایی است که هم قابلیت استخراج ویژگیهای بصری از تصاویر و هم درک مفاهیم زبان طبیعی را داشته باشند. در سالهای اخیر، مدلهای ترکیبی بینایی-زبان (Vision-Language Models یا VLM) ترکیب تصویر و متن را امکانپذیر کردهاند.
به طور خلاصه، ارتباط بین بینایی کامپیوتر و پردازش زبان طبیعی، زمینهساز ساختن سیستمهایی شده که میتوانند محتوای بصری را ببینند و با زبان انسان توضیح دهند یا به سوالات متنی درباره تصاویر پاسخ دهند؛ تحولی که بسیاری از برنامههای هوشمند امروزی مانند چتباتها این توانایی را دارند.
کتابخانه بینایی کامپیوتر
پیادهسازی الگوریتمها و مدلهای پیچیده بینایی کامپیوتر نه تنها کار سادهای نیست، بلکه گاهی غیرممکن است! خوشبختانه در طول سالها، کتابخانههای قدرتمندی توسعه داده شدهاند که بسیاری از ابزارها و مدلهای موردنیاز را در اختیار ما قرار میدهند و باعث میشوند بتوانیم تمرکز خود را بیشتر روی حل مسئله و طراحی سیستمها بگذاریم.
در دنیای بینایی کامپیوتر چند کتابخانه بسیار مهم وجود دارد که تقریبا در اکثر پروژهها با آنها سروکار خواهید داشت:
کتابخانه OpenCV
اگر نام یک کتابخانه تقریبا در تمام پروژههای بینایی کامپیوتر شنیده شود، آن نام بدون شک OpenCV است. این کتابخانه متنباز مجموعه بزرگی از الگوریتمهای پردازش تصویر و بینایی کامپیوتر را در اختیار شما قرار میدهد؛ از کارهای سادهای مانند خواندن تصویر، تغییر اندازه و فیلترگذاری گرفته تا کارهای پیچیدهتری مانند تشخیص ویژگیها، ردیابی اشیا و پردازش ویدئو. هسته اصلی OpenCV به زبان ++C نوشته شده و به همین دلیل سرعت بسیار بالایی دارد، اما رابط پایتون آن باعث شده استفاده از آن بسیار ساده و محبوب باشد. البته، کتابخانه OpenCV بیشتر متمرکز بر پردازش تصویر و بینایی کامپیوتر کلاسیک (قبل از یادگیری عمیق) است. اما با اینحال، در اکثر پروژههای مدرن هم به کتابخانه OpenCV نیاز خواهید داشت.
کتابخانه PyTorch
همانطور که بارها تاکید شد، امروزه بسیاری از پیشرفتهای مهم در بینایی کامپیوتر به لطف یادگیری عمیق به دست آمدهاند. برای پیادهسازی مدلهای یادگیری عمیق، PyTorch یکی از محبوبترین کتابخانهها در میان پژوهشگران و مهندسان هوش مصنوعی است. این کتابخانه امکانات قدرتمندی برای ساخت و آموزش شبکههای عصبی فراهم میکند و به دلیل سادگی، انعطافپذیری و جامعه کاربری بزرگ، در بسیاری از پروژههای تحقیقاتی و صنعتی مورد استفاده قرار میگیرد.
کتابخانه TensorFlow
کتابخانه TensorFlow یکی دیگر از کتابخانههای مهم در حوزه یادگیری عمیق است که توسط گوگل توسعه داده شده است. این فریمورک نیز ابزارهای قدرتمندی برای ساخت مدلهای یادگیری عمیق ارائه میدهد. کتابخانه Keras که برای ساخت سریعتر مدلهای یادگیری عمیق طراحی شده نیز امروزه بهصورت یک رابط سطحبالا در TensorFlow ادغام شده است.
یادداشت لازم نیست هر دو فریمورک PyTorch و TensorFlow را بهصورت همزمان یاد بگیرید. در عمل، تسلط بر یکی از آنها برای شروع کاملا کافی است. با توجه به محبوبیت بیشتر PyTorch بهویژه در میان پژوهشگران و در بسیاری از دورههای آموزشی، معمولا توصیه میشود ابتدا یادگیری را با PyTorch آغاز کنید. پس از آن، چنانچه نیاز داشتید، یادگیری TensorFlow نیز کار دشواری نخواهد بود.
سایر کتابخانههای بینایی کامپیوتر
خوشبختانه در دهه اخیر این روند رایج شده است که بسیاری از پژوهشگران، در کنار مقاله علمی خود، کدهای پیادهسازی آن را نیز در گیتهاب (Github) منتشر میکنند. این موضوع باعث شده دسترسی به پیادهسازی بسیاری از ایدهها و مدلهای پیشرفته بسیار سادهتر شود.
علاوه بر این، کتابخانههای تخصصی جالبی نیز برای برخی مسائل خاص بینایی کامپیوتر توسعه داده شدهاند. برای مثال پروژههایی مانند YOLO که برای تشخیص اشیا طراحی شدهاند، استفاده از مدلهای تشخیص اشیا را بسیار سادهتر میکنند.
بنابراین در کنار کتابخانههای مهم و عمومی، نباید از ریپازیتوریهای ارزشمند گیتهاب و کتابخانههای تخصصی کوچکتر نیز غافل شد؛ چرا که بسیاری از آنها ابزارهای بسیار کاربردی و آمادهای برای حل مسائل واقعی در اختیار ما قرار میدهند.
نقشه راه بینایی کامپیوتر
اولین نکته مهم این است که بینایی کامپیوتر صرفا تشخیص اشیا با یولو (YOLO) نیست! گاهی در میان افراد تازهوارد و حتی برنامهنویس این تصور وجود دارد که بینایی کامیپوتر چیزی بیش از استفاده از شبکههای آموزشدیده و آماده نیست. در حالی که واقعیت بسیار فراتر از این است. استفاده از یک مدل آماده شاید بتواند مسئلهای خاص را حل کند، اما درک عمیق این حوزه، طراحی مدلهای مناسب، تحلیل نتایج و بهبود عملکرد سیستمها نیازمند دانش بنیادیتری است. اگر واقعا قصد دارید در بینایی کامپیوتر به مهارت و تخصص برسید، بهتر است این مسیر را بهصورت اصولی و گامبهگام طی کنید؛ مسیری که شباهت زیادی به گذراندن مجموعهای از دروس دانشگاهی مرتبط دارد.
پیشنهاد من برای یک نقشه راه یادگیری بینایی کامپیوتر اصولی بهصورت زیر است.
پیشنیاز: برنامه نویسی پایتون
اولین مهارت ضروری، برنامهنویسی است. در میان زبانهای مختلف، پایتون به دلیل سادگی، جامعه کاربری بزرگ و وجود کتابخانههای قدرتمند، به زبان اصلی در حوزه هوش مصنوعی و بینایی کامپیوتر تبدیل شده است. بنابراین تسلط مناسب بر پایتون، همچنین کار با کتابخانههایی مانند کتابخانه نامپای و کتابخانه متپلاتلیب اهمیت زیادی دارد. اگر هنوز در پایتون تسلط کافی ندارید، بهتر است ابتدا این مهارت را تقویت کنید. قبلا در یک پست جداگانه درباره ارزیابی مهارت پایتونی توضیح دادمایم. حتما پست زیر را مطالعه کنید.
پیشنیاز: ریاضی
بینایی کامپیوتر مانند بسیاری از حوزههای هوش مصنوعی بر پایه مفاهیم ریاضی بنا شده است. آشنایی با جبر خطی، احتمال و آمار و تا حدی حسابان میتواند به درک بهتر الگوریتمها و مدلها کمک کند. البته لازم نیست در ابتدای مسیر متخصص ریاضیات باشید. اگر مفاهیم ریاضی را در سطح دبیرستان بدانید، معمولا برای شروع کافی است. حتی اگر در این زمینه احساس ضعف میکنید، با کمی تلاش میتوان این مفاهیم را در طول مسیر یاد گرفت. چه بسیار دانشجویانی داشتهام که با همت و تلاش کافی آن را یاد گرفتهاند.
پردازش تصویر
یکی از پایههای مهم برای ورود به بینایی کامپیوتر، آشنایی با پردازش تصویر است. در این مرحله با مفاهیمی مانند نحوه تشکیل تصویر در دوربین، نحوه نمایش تصویر در کامپیوتر، فیلترهای تصویری، تشخیص لبه، تبدیلهای مختلف تصویری و تکنیکهای بهبود تصویر آشنا میشوید. همچنین، معمولا کار با ابزارهایی مانند OpenCV در این مرحله آغاز میشود. اگرچه امروزه بسیاری از مسائل بینایی کامپیوتر مستقیم با مدلهای یادگیری عمیق حل میشوند، اما دانستن مبانی پردازش تصویر درک عمیقتری از دادههای تصویری و نحوه پردازش آنها به شما میدهد.
یادگیری ماشین
گام بعدی آشنایی با مفاهیم یادگیری ماشین است. همانطور که پیشتر اشاره شد، پیشرفتهای بزرگ در بینایی کامپیوتر تا حد زیادی به کمک روشهای یادگیری ماشین و بهویژه یادگیری عمیق بهدست آمدهاند. در درس یادگیری ماشین با مفاهیم بنیادی مانند یادگیری باناظر و بدون ناظر، ارزیابی مدلها، بیشبرازش (Overfitting)، تنظیم هایپرپارامترها و همچنین مدلهایی مانند رگرسیون، درخت تصمیم و یادگیری گروهی آشنا میشوید. این مرحله پایهای برای ورود به یادگیری عمیق بسیار مهم است. اگر زمان و توانایی کافی دارید، میتوانید یادگیری ماشین و پردازش تصویر را تقریبا همزمان مطالعه کنید؛ درست شبیه گذراندن دو درس در یک ترم دانشگاهی.
یادگیری عمیق
اگرچه یادگیری عمیق زیرمجموعهای از یادگیری ماشین محسوب میشود، اما به دلیل گستردگی و پیچیدگی مباحث، معمولا بهعنوان یک درس مستقل آموزش داده میشود. در این مرحله با انواع شبکههای عصبی و معماریهای مهم آشنا میشوید؛ از جمله شبکه عصبی چندلایه (MLP)، شبکه کانولوشنی (CNN) که نقش بسیار مهمی در بینایی کامپیوتر دارند و معماریهای جدیدتر مانند ترنسفورمرها. همچنین در این مرحله معمولا کار با فریمورکهایی مانند PyTorch یا TensorFlow را یاد میگیرید.
بینایی کامپیوتر
پس از طی کردن مراحل قبلی، اکنون میتوانید یک دوره تخصصی برای بینایی کامپیوتر را شروع کنید. در این درس با مسائل اصلی بینایی کامپیوتر مانند طبقهبندی تصویر، تشخیص اشیا، بخشبندی تصویر و ردیابی در ویدئو آشنا میشوید و مدلهای معروف هر کدام را بررسی میکنید. همچنین معمولا پروژههای عملی با مجموعهدادههای واقعی انجام میشود تا بتوانید آموختههای خود را در عمل به کار بگیرید.
به پایان آموزش “بینایی کامپیوتر چیست؟” رسیدیم! بسیار طولانی بود. تمام تلاشم بر این بود که با زبانی ساده، هرآنچه که برای آشنایی با بینایی کامپیوتر نیاز هست را توضیح بدهم. اگر سوالی دارید، در کامنتها بپرسید. همچنین، منتظر نظر شما درباره این آموزش هم هستم.
دیدگاهتان را بنویسید