حوزههای بینایی ماشین (Machine Vision) و بینایی کامپیوتر (Computer Vision) دو زمینه کاملا مرتبط به یکدیگر بوده و خیلی از اوقات در مکان و زمانهای مختلف معنی یکسانی میدهند که در این متن تفاوتهای برای آن بیان خواهیم کرد. ابتدای به بینایی ماشین میپردازیم و اکثر توضیحات آن قابل تعمیم به بینایی کامپیوتر نیز هست. هر دو این حوزهها کاملا در ارتباط با هوش مصنوعی و یادگیری ماشین هستند که برای جزییات بیشتر میتوانید به مطالب قبلی گذاشته شده در این زمینه مراجعه کنید. بینایی ماشین به برنامههای کامپیوتری اجازه داده تا وظایف و کاربردهای مختلف را به صورت خودکار انجام دهند؛ وظایفی که پیش از این و برای انجام آنها، نیازمند نظارت انسانی بود. هدف حال حاضر سیستمهای بینایی ماشین، پیادهسازی یک چارچوب کلی برای حل بسیاری از مسائل باز و در نهایت، ایجاد یک سامانه کاربردی در حوزه هوش مصنوعی و روباتیک است. همچنین میتوان گفت که قابلیتی است که بهواسطهی آن، کامپیوتر قادر به تحلیل و پردازش محیط اطراف خود است.
تاریخچه بینایی ماشین
برای بیان یک تاریخچه مختصر بهتر است در مورد تاریخچه پردازش تصویر به عنوان ابزار بینایی ماشین بپردازیم. در دهه ۱۹۵۰ بدنبال مسئله هوش مصنوعی ریشه سیستم پردازش تصویر به قبل از مطالعه و تحقیق در رابطه با کاربردهای نظامی و تحقیقات بر روی هوش مصنوعی بر می گردد. در دهه ۱۹۶۰ و ۱۹۷۰ اولین دسته بندی هوش مصنوعی به دو گروه مطالعاتی نظریه پرداز منطقی و تشخص الگو تقسیم شد. در این دهه موسسه تکنولوژی ماساچوست (MIT) برای اولین بار استفاده از پردازش تصویر واقعی در یک پروژه برای حرکت دادن بازوی ربات بهره برد و نظریه پرداز David Marran ، در این موسسه به خاطر نظریه هایش درباره پردازش بینایی پیشرو در استفاده از سیستم های بینایی میباشد. در دهه ۱۹۸۰ پردازش تصویر و بینایی ماشین جایگاه تحقیقاتی را به دست آوردند. پیشرفت الگوریتم بینایی ماشین Grayscale – 8bit و موجود بودن بردهای تکی پردازش تصویر و ارائه ویندوز ۱.۰ در سال ۱۹۸۵ باعث پیشرفت شگرفی گردید. در سال ۱۹۸۸ عقب نشینی وسیعی در صنعت بینایی صورت گرفت که دلیل عمده آن فروپاشی موسسه بین المللی بینایی ماشین بود و بعد از مدتی در اواخر این دهه تولید دوربینها مخصوصاً برای کاربردهای صنعتی و بازار بینایی ماشین و پردازش تصویر آغاز شد. در دهه ۱۹۹۰ پیشرفت عظیم صنعت بینایی ماشین با سیستم های صنعتی موجود و پیشرفت صنعت با انتشار ویندوز ۳۲ بیت ( ویندوز ۹۵) یکی از دستاوردهای این دهه بود. تولید دوربین های هوشمند با استفاده از چیپ های پردازنده و افزایش استفاده از تکنولوژی استاندارد PC و سیستم عامل برای ماشین های بینایی و معرفی الگوریتم های شبکه ای به شاخه های اصلی سیستم های بینایی باعث پیشرفت رابطه های گرافیکی و برنامه نویسی راحت تر در اینگونه سیستم ها شد. در دهه ۲۰۰۰ با پیشرفت سیستم های ارگونومیک برای یکپارچه سازی کارخانه و اتخاذ تکنولوژی FireWire-IEEE1394 دوربین های دیجیتال برای صنعت بینایی ماشین باعث گسترش سریع بازار دوربین ها و سنسورها شد. پذیرفته شدن تکنولوژی GigE به FireWire به عنوان استاندارد صنعت بینایی ماشین و افزایش استفاده از کدهای دیتاماتریکس در صنعت یک دستاورد متفاوت در این دوره بود. در دهه ۲۰۱۰ با شروع پیشرفت الگوریتم های سه بعدی و شکل دهی پایه PC Base سیستم های بینایی با تکنولوژی NET. و ویندوز ۷ ، ۶۴ بیتی همچنان رو به گسترش سیستم های پردازش تصویر هستیم. با رشد هوش مصنوعی و شبکههای عصبی عمیق مخصوص تصویر به عنوان ابزارهای یادگیری ماشین رشدی بسیار سریعتر از دهههای پیش را در این زمینه شاهد هستیم.
دستهبندی بینایی ماشین
در این بخش سعی میکنیم مقدمه جامعی از این مبحث به زبان ساده بیان کنیم. بینایی ماشین یکی از حوزههای در حال پیشرفت سریع است که میتوان به عنوان زیرشاخههای از رشته علوم کامپیوتر(Computer Science) و هوش مصنوعی قرار بگیرد. بینایی ماشین به سه شاخه تقسیم میشود که با ترتیب خاصی به معرفی جامع این سه شاخه میپردازیم:
- مطابقت دو سویی (Stereo Correspondence)
- بازسازی صحنه (Scene Reconstruction)
- بازشناسی یا تشخیص اشیاء (Object Recognition)
همچنین در دستهبندی دیگری بینایی ماشین به دو دسته بینایی فعال (Active Vision) و بینایی غیرفعال (منفعل یا Passive Vision) تقسیم می شود. دسته اول مربوط به ماشین هایی است که به طور مستقیم با محیط ارتباط می گیرند و اطلاعات را دریافت می کنند. فرض کنید دستگاه شما یک موج را به سمت بیرون تابیده و بازتاب آن را دریافت کند. این موج می تواند نوری، صوتی و یا در هر فرکانس دیگه باشد. فناوری هایی مانند LIDAR و RADAR به این شکل عمل می کنند. دسته دوم مربوط به ماشینهایی هست که فقط دریافت کننده هستند. به عنوان مثال دوربین عکاسی تصویر محیط را ذخیره کرده و می توان بینایی غیرفعال را به عمل بیاورد. تشخیص چهره نمونهای از کاربرد آن است. بحث ما در اینجا بیشتر در زمینه یادگیری غیرفعال است و بیش از این نیز در این زمینه بحث نمیکنیم تا به سراغ سه دستهبندی گفته شده در بالا برویم.
شاخه اول: مطابقت دو سویی
فرض کنید با دو دوربین با زاویههای مختلف از یک صحنه (یا شی) عکس میگیرید. گرفتن تصویر از دو زاویه مختلف چه نکات اضافهتری به ما میدهد؟ بگذارید با یک مثال سادهتر شروع کنیم. فرض کنید دونفر شاهد یک تصادف بودند. قطعا بدلیل ناگهانی بودن خطا هر کدام در شرح واقعه دارای خطاهایی هستند که با تجمیع نظر شاهدین میتوان به اطلاعات مطمئنتری دست پیدا کرد. حال به مسئله خود بر میگردیم. ما با کمک دو دوربین به اطلاعات بیشتری دست پیدا کرده و همچنین برخی از موارد در صحنه را با تضمین(کیفیت) بیشتری ارائه خواهیم داد. دو دوربین از یک صحنه با زوایای مختلف عکس میگیرند و بخشهای از تصویر دو دوربین کاملا یکسان بوده و بخشهایی نیز متفاوت است. وجود تفاوت به دلیل این است که صحنه ما سه بعدی بوده و زاویه عکس گرفتن معنای خاصی به تصویر وارد میکند و همچنین لبههای اجسام بهتر درک میشود. حال اگر با دوربین های مختلف از زوایای مختلف عکس بگیریم اطلاعات ما بسیار جامعتر میشود و در نهایت میتوانیم مفهوم عمق را از تفاوت بین تصویر درک کرده و در آینده حتی صحنی را شبیهسازی کنیم.
به عنوان مثال در شکل ۱ از یک اتاق کنفرانس از دو تصویر در زاویههای مختلف گرفته شده است و نقشه تفاوت آن ها رسم شده است. همانطور که میبینیم نمودار پایین و سمت راست با رنگ قرمز تفاوت زیاد و با رنگ آبی تفاوت جزئی بین دو تصویر را نمایان میکند. اما عکس گرفتن با دوربینهای مختلف و زوایای مختلف ممکن است نویزهایی را وارد کند و ما بین نواحی یکسان تفاوت بی معنی ببینیم. به همین دلیل تصاویر قبل از مقایسه باید دچار پیش پردازشهایی بشوند و محاسباتی روی آنها صورت گیرد که خارج از بحث امروز ما است و تنها عنوان مراحل آن را که کاملا تخصصی است بیان میکنیم:
- مرحله تطبیق
۱.۱ روش مجموع مربعات فاصلهها
۲.۱ روش مجموع فاصلههای مطلق
۳.۱ روش همبستگی متقابل نرمال شده
- تجمیع
۱.۲ روش پنجره قابل انتقال
۲.۲ روش پنجره تطابقی
- مرحله بهینهسازی
۱.۳ رویکرد همه برای برنده
۲.۳ رویکرد برنامهنویسی پویا
۳.۳ رویکرد شبیهسازی تبرید
۴.۳ رویکرد برشهای گرافی
۵.۳ رویکرد بهینهسازی
- مرحله اصلاح یا پالایش
۱.۴ گرادیان کاهشی تکراری
۲.۴ روش برازش منحنی
شاخه دوم: بازسازی صحنه
بازسازی صحنه فرایندی است که باعث ساخته شدن یک مدل سهبعدی از صحنهای میشود که از آن عکسهایی در زوایای مختلف گرفتهایم. از جمله کاربردهای مهم این سیستم بینایی ماشین در جهان واقعی میتوان به بازسازی محیط واقعی و تحلیل آن اشاره کرد. علاوه بر این، ساختن نقشههای سهبُعدی ساختمانها برای به نمایش گذاشتن قبل از ساخت و بازسازی لحظات خاطرهانگیز و … از جمله کاربردهای مهم فرایند بازسازی صحنه در سیستمهای بینایی ماشین محسوب میشوند. بازسازی صحنه باعث میشود انسان اطلاعات جامعتری از یک موقعیت بدست آورد. در تصویر زیر هدف فرایند بازسازی صحنه آورده شده است.
برای بازسازی صحنه در بینایی ماشین و کاربردهای مرتبط، حداقل از دو دوربین باید استفاده کرد و در صورت داشتن همه اطلاعات و مشخصات سخت افزاری و نرم افزاری دوربین ما با وضعیت کالیبره بودن دوربینها رو به رو میشویم. در صورت نداشتن این اطلاعات مسئله سخت شده و باید با آزمایشهایی بدنبال آن باشیم. دوربینهای کالیبره شده، نقطه کانونی، میدان دید و نوع لنز مشخص است و همچنین، فاصله و جهت دوربینها نسبت به یکدیگر شناخته شده است، سیستم قادر خواهد بود تا در مرحله مطابقت دو سویی از محاسبات هندسه Epipolar استفاده کند.
در نهایت مدل سه بعدی میتواند با کمک یک داده ۳+۱ بعدی داده شود که هر خانه در این داده دارای سه بعد مکانی و یک بعد مقدار است و به آن Voxel(بجای پیکسل دوبعدی) گفته میشود. البته این روش ذخیره سازی دادهها حافظه زیادی میگیرد و میتوان از روش دیگری به نام مشبندی و با کمک مثلثهایی در فضای سه بعدی اشیا را ذخیره کرد و نشان داد. در شکل زیر یک خرگوش با کمک همین مثلثها به نمایش درآمده است. با داشتن راسها، و اضلاع متصل کننده این راسها میتوان داده این مدل سه بعدی را ذخیره کرد. همچنین این روش از مدلسازی در بازیهای کامپیوتری نقش مهمی ایفا میکند.
شاخه سوم: بازشناسی اشیاء
در ادامه دو شاخه دیگر فرض کنید ما موفق به بازسازی صحنه در یک موقعیت شدیم. هدف بعدی پیدا کردن اشیا در این صحنه است و اینکه هر شی نمایانگر چه چیزی در دنیای واقعی است. البته این کار میتوان بدون بازسازی صحنه و در تصاویر دوبعدی نیز انجام گیرد که غالبا با شرایطی نظیر همپوشانی جزئی، شرایط نوری متغیر و پس زمینههای ناهنجار و به هم ریخته مواجه میشویم. به همین دلیل بازسازی صحنه کمک کننده خواهد بود. ما ابتدا باید یک پایگاه داده از اشیا مختلف (به عنوان داده آموزش) جمع آوری کنیم و به شکلی اشیا موجود در صحنه را با اشیا این پایگاه داده مقایسه کنیم. به شکلی انگار با مسئله Kامین همسایه نزدیک رو به رو هستیم که قبلا در مورد آن صحبت کردیم(رفرنس به مطلب یادگیری ماشین). این مقایسه میتواند به روشهای بازشناسی الگو (Pattern Recognition) و روشهای بازشناسی هندسی مبتنی بر ویژگی (Feature-based Geometric Recognition) انجام گیرد که روش اول عمومی و سطح پایین بوده و به رنگبندی نیز حساس است ولی در روش دوم ناورداهای هندسی از اشیا بدست آمده که به تبدیلات جابهجایی اقلیدسی، چرخش، تبدیل آفین و … حساس نیست و بالاترین دقت را ارائه میدهد.
ما با مفهومی بنام تشخیص اشیاء نیز روبهرو هستیم که متفاوت از بازشناسی اشیا است. تشخیص اشیا سعی در پیدا کردن نمونهای مشابه در تصویر است و هنگامی که از ابزارهای یادگیری عمیق در تشخیص اشیا استفاده میشود(ویژگیها استخراج میشود) به صورت زیر مجموعههای از بازشناسی اشیا فرض میگردد. تشخیص اشیا را میتوان بیشتر زیرمجموعهای از حوزه بینایی کامپیوتر درنظر گرفت.
بینایی کامپیوتر و تفاوت آن با بینایی ماشین
بینایی کامپیوتر فرایندی است که باعث خودکارسازی دریافت و تحلیل تصاویر گفته میشود. در دامنه وسیع کاربردهای عملی و تئوری حوزه بینایی کامپیوتر، تأکید سیستمهای بینایی کامپیوتر بیشتر روی قابلیتهای تحلیل تصاویر، استخراج اطلاعات مفید از آنها و درک و فهم اشیاء یا موجودیتهای موجود در آنها با کمک تکنیکهای یادگیری ماشین و پردازش تصویر است. فناوریهای احراز هویت مانند تشخیص اثر انگشت، خواندن پلاک اتومبیلها، شمار تعداد افرادی که در یک نمایشگاه وجود دارند و… کاربردیهایی بینایی کامپیوتر هستند.
همانطور که در ابتدای متن گفتیم بینایی ماشین و بینایی کامپیوتر مفهوم بسیار نزدیکی به یکدیگر دارند ولی بینایی کامپیوتر گستردهتر از بینایی ماشین است و در نگاه کلی به تمامی پردازش و تجزیه و تحلیلهایی که بر روی تصاویر در دستگاهها، اپلیکیشنها و… انجام میگیرد، اطلاق میشود در صورتی که بینایی ماشین بیشتر به صورت صنعتی کاربرد دارد. بینایی کامپیوتر کاربردی علمی و تحقیقاتی دارد، در صورتی که بینایی ماشین کاربردی عملی و اجرایی دارد. ما در بینایی کامپیوتر نیازی به سختافزار اختصاصی نداریم(البته نه همیشه) و با مجموعه دادههای مختلف با قیدهای کمتر میتوانیم کارمان را شروع کنیم و حتی تصاویر را شبیهسازی کنیم. این در صورتی است که در مورد بینایی ماشین همانطور که در متن بحث شد به حداقل دو دوربین نیاز است. بینایی کامپیوتری تاکید زیادی بر روشها و راهحلهای الگوریتمی دارد در صورتی که بینایی ماشین از راهحلهای غیر الگوریتمی نیز بهره میبرد. خروجی بینایی کامپیوتری دادههایی پیچیده است که به انسانها ارائه میشود در صورتی که خروجی بینایی ماشین سیگنالهایی ساده است که بتوان به صورت عملی و جهت کارهای مهمی همچون کنترل تجهیزات مورد استفاده قرار گیرد.
بینایی کامپیوتری کارکردی شبیه به انسان دارد(برخلاف بینایی ماشین). مفاهیم دیدن، توصیف کردن و درک کردن در حوزه بینایی کامپیوتر قابل بحث است. مفهوم دیدن برای انسان در چشم خلاصه میشود این در صورتی است که بیش از چند دهه است که مردم تلاش میکنند حسگرهایی بهتر بسازند تا حتی بهتر از چشم انسان تصاویر را ضبط و ذخیره سازی کنند. در تصویر زیر حسگر تلسکوپ LSST نشان داده شده است که میتواند تصاویری با دقت ۳.۲ گیگاپیکسل ضبط کند و به زودی شروع به کار میکند. مغز انسان با کمک میلیاردها نورونی که دارد سعی میکند تصویر رسیده به چشم را با تغییرات و فیلترهایی آماده کند تا درک شود. به عنوان مثال در تصویر رسیده مقدار زیادی نویز و سیگنالهای بدرد نخور وجود دارد که مغز آنها را حذف و سعی میکند بخش مفید را با انجام پردازش روی آن آماده فرایند درک و فهمیدن از یک صحنه کند. در دوربینهای دیجیتال نیز کم و بیش این فرایندها به صورت مصنوعی صورت میگیرد تا خروجی مناسب به همراه ویژگیهای مناسب مثل لبههای یک جسم ارائه شود. درنهایت فرایند درک در مغز انسان با کمک آنچه دیده، آنچه در حافظههای کوتاه مدت و بلندمدت خود دارد، اطلاعات رسیده از دیگر حواس پنج گانه و … فرایند درک را انجام میدهد. در اینجا نقص بزرگ در سیستمهای بینایی کامپیوتر دیده میشود که تنها از تصویر برای درک صحنه استفاده میکند. در صورتی که در آینده مدلهای هوش مصنوعی معرفی شوند که این قابلیت ها را داشته باشند، میتوانند ما را به هوش مصنوعی قوی نزدیک کنند که قبلا در مورد آن صحبت شد(رفرنس به مطلب هوش مصنوعی).
ازجمله کاربردهای بینایی کامپیوتر میتوان به موارد زیر اشاره کرد:
- دستهبندی اشیاء
- شناسایی اشیاء(محل اشیاء مهم نیست)
- صحتسنجی اشیاء
- تشخیص اشیاء(محل اشیاء مهم است)
- تشخیص نقاط کلیدی برای شناسایی اشیاء در تصویر
- قطعهبندی اشیاء(Segmentation)
- بازشناسی اشیاء
به عنوان مثال کاوشگرها باید خودشان توانایی تصمیم در لحظه را با توجه به آنچه در دوربینها و حسگرها دریافت میکنند، داشته باشند به این دلیل که نمیتوان بخاطر تاخیر چند دقیقهای در ارسال و دریافت پیام از مریخ، اجسام روی آن را کنترل کرد. این امر بدون بینایی کامپیوتر غیر ممکن است.
جمعبندی:
در این متن در مورد بینایی ماشین و بینایی کامپیوتر صحبت کردیم که دو حوزه رو به رشد سریع هستند و کاربردهای بسیار زیادی در زندگی روزمره ما دارند. بینایی کامپیوتر در حوزه تصاویر پزشکی(تشخیص و بررسی سیر تحول) نیز بسیار پرکابرد است و تلاش میشود در آینده سامانههای جامعی برای این ظرفیت آماده شود. قطعا این دو حوزه بخش بسیار مهمی در هوش مصنوعی هستند و اخیرا هم در برخی از موقعیتها بهتر(دقت و سرعت) از انسانها عمل کردهاند (که بدلیل وجود دادههای بزرگ و سختافزار کافی بوده است) ولی راهی دراز در پیش دارند تا در مجموع به کیفیت انسانها برسند.
منبع:
- https://www.semanticscholar.org/paper/Machine-vision%3A-a-survey-Phillips/3841e170b42bdbc8bd1f5caf963da419db871f19
- https://blog.faradars.org/machine-vision/
- https://consent.yahoo.com/v2/collectConsent?sessionId=3_cc-session_94e2c017-7d8d-4244-8879-b715fca40527
- https://towardsdatascience.com/what-even-is-computer-vision-531e4f07d7d0