کاربرد بینایی کامپیوتری در رتبهبندی حالتهای یوگا
از چند سال قبل که دویدن را شروع کردهام به اهمیت حرکات کششی پی بردم، اما به خوبی از پس انجام این حرکات بر نمیآیم. وقتی با تکنیکهایی مثل برآورد ژست بدن و بینایی ماشین آشنا شدم، به این فکر افتادم که از آنها در مسائل واقعی مثل برآورد و ارزیابی حالتهای یوگا استفاده کنم.
برآورد ژست بدن یکی از زیرشاخههای حوزهی بینایی کامپیوتر است؛ هدف در این تکنیکها تشخیص اعضای بدن (معمولاً بدن انسان) است. برای دستیابی به این هدف تکنیکهای متعددی وجود دارد، اما روشی که من استفاده میکنم با اجرای تصاویر ورودی در یک کلسیفایر CNN (که برای جستجوی افراد آموزش دیده) آغاز میشود. زمانیکه (اگر) بدن یک انسان شناسایی شود، شبکهی برآوردکنندهی ژست بدن به دنبال مفاصل و اجزای بدن میگردد که به آن آموزش داده شدهاند. سپس تصویری تولید میشود که نشانهگذاریها یی براساس تشخیص کامپیوتر به آن اضافه شده است؛ کاربر با مشاهدهی این تصویر و نشانهگذاریها میتواند به محل درست قرارگیری اعضای بدن در حالتی خاص (از یوگا) پی ببرد.
از همان ابتدا میدانستم مدل برآوردکننده حالتی که میسازم باید حالتهای بدن را به صورت لحظهای و از روی تصاویر دوربین لپتاپ قضاوت کند. این موضوع تعداد مدلهای برآورد حالتی را که میتوانستم به کار ببرم، به شدت محدود میکرد. ابتدا از مدل متداول OpenPose (ارائه شده توسط دانشگاه کارنیگی ملون) استفاده کردم. در این مسئله نیز، همچون سایر مسائل بینایی کامپیوتر و تشخیص اشیاء، سرعت و دقت رابطهی عکس دارند.
اندازهی بزرگ مدل و قدرت محاسباتی محدود لپتاپ من باعث میشود این مدل برآوردکنندهی حالت (OpenPose) پاسخگوی هدف و نیاز من نباشد. به همین دلیل به سراغ MobileNet (مدلی برای تشخیص افراد) و یک مدل کوچک ResNet (برای تشخیص اجزاء) رفتم که هردو در سامانهی Modelzoo کتابخانهی Gluon قابل دسترس هستند. شبکههای کوچکتر به منابع محاسباتی محدود من این امکان را میدهند تا فریمهای ویدئویی گرفتهشده از وبکم لپتاپ (بعد از کمی دستکاری) را به صورت لحظهای پردازش کنند. اما حتی با طبقه بندی فریمها به صورت یکی در میان هم خروجی کیفیت کافی و موردانتظار را نداشت.
شبکه عصبی مصنوعی
در این مرحله کامپیوتر من قادر بود اجزای بدن انسانها را در یک فریم شناسایی کند، اما نمیتوانست در مورد حالت یوگای آنها نظری بدهد. برای دستیابی به این قابلیت تصمیم گرفتم یک شبکهی دیگر هم به روال پردازش تصویر اضافه کنم. بدین ترتیب به جای استفاده از یک CNN سنگین از یک ANN (شبکه عصبی مصنوعی) ساده استفاده کنم که زوایای بین اجزای بدن به آن آموزش داده شده است. فرض براین بود که اگر بتوانم زوایای بین مفصلی را در چندین حالت یوگا محاسبه/ضبط کنم، این حالتها از نظر خطی تفکیکپذیر خواهند بود (هرچند در ابعاد بالا).
در این صورت، هروقت کامپیوتر بدنی را شناسایی کند که در حال تشکیل حالتی مرکب از چندین زاویه است، میتواند حرکت یوگای مربوطه را تشخیص دهد. سطح اطمینان مدل در پیشبینی حالت را میتوان به عنوان شاخصی از کیفیت انجام آن حالت توسط فرد دانست؛ البته به شرطی که تصاویر استفادهشده برای آموزش مدل، از یک یوگی حرفهای گرفته شده باشد.
به همین دلیل برای آموزش مدل خود از فیلمهای یولیانا (یک یوگی معروف در یوتیوب) استفاده کردم. از ویدئوی “30 Most Common Beginning Yoga Poses” 15 حالتی را انتخاب کردم که به راحتی قابل تمیز باشند، سپس این فریمها را روی مدل برآوردکنندهی حالت خود اجرا و زوایای بین مفاصل را در هر فریم ضبط کردم. بدین ترتیب دیتاستی برچسبدار با صدها نمونه به دست آوردم که میتوانم برای آموزش ANN خود از آن استفاده کنم. من از یکی از مدلهای کوچک کتابخانه Keras (تنها با دولایه) استفاده کردم و توانستم 93% حالتهای موجود در مجموعهی اعتبارسنجی را به درستی پیشبینی کنم. یکی از مهمترین دستاوردها این بود که وقتی این پیشبینیکننده را به روال پردازشی خود (که از قبل بزرگ بود) اضافه کردم، نرخ فریم اصلاً کاهش نیافت.
کد کامل در این لینک Github وجود دارد.
گامهای بعدی
با سرعت خیرهکنندهی پیشرفت و تحول بینایی کامپیوتری، مدلها و تکنیکهای جدید برآورد حالت به زودی جای مدلهای کنونی را خواهند گرفت. تغییر شبکهها یا جایگزین کردن آنها با مدلهای پیشبینیکننده جدیدتر، مسئلهای است که در مقالات آینده به آن خواهم پرداخت.
یکی از محدودیتهای استفاده از این نرمافزار برای قضاوت در مورد کیفیت انجام یک حالت یوگا (توسط کاربر) این است که دادههای مربوط به حالتهای یوگا فقط از یک منبع گرفته شده بود. در آینده برای قویتر کردن این پروژه، ANN را روی حرکات چندین یوگی (هم مرد و هم زن) آموزش میدهم.
علاوه بر این من تنها 15 حالت اولینیا را به شبکهی ANN آموزش داده بودم، و این مسئله کاربرد پروژه را برای مبتدیان یوگا محدود میکند. میتوانم حالتهای جدید به دادههای آموزشی اضافه کنم و ANN را مجدداً آموزش دهم، اما این کار باعث عدم انعطافپذیری نرمافزار خواهد شد. در حال حاضر به دنبال راهحلی هستم که به حل این مشکل کمک کند، تا هربار برای افزودن چند حالت جدید، نیازی به آموزش یک شبکهی کاملاً جدید نباشد.
کاربرد
همهگیری کوید-19 منجر به افزایش استفاده از تجهیزات ورزشی خانگی شده است. یکی از این محصولات، آینه هوشمند است (مثل محصول ارائهشده توسط MIRROR) که کلاسهای ورزش را مستقیماً روی آینهی شما پخش میکند. این دست موارد میتوانند زمینهی خوبی برای کاربرد پروژهی من باشند؛ به خصوص در صورتی که بتوانم این مدل را برای تشخیص تمرینهای دیگر (مثل درازنشست یا دویدن) نیز سازگار کنم.