پیاده سازی مدل‌ دسته بندی تصاویر در پایتون — راهنمای کاربردی

۱۱۵۹ بازدید
آخرین به‌روزرسانی: ۲۰ تیر ۱۴۰۲
زمان مطالعه: ۱۴ دقیقه
پیاده سازی مدل‌ دسته بندی تصاویر در پایتون — راهنمای کاربردی

در این مطلب، هدف آشنا کردن مخاطبان و خوانندگان با مدل‌های دسته بندی تصاویر و پیاده‌سازی آن‌ها در «زبان برنامه‌نویسی پایتون» (Python Programming Language) است. یکی از شایع‌ترین رویکردها برای دسته بندی تصاویر، استفاده از مدل‌های «یادگیری عمیق» (Deep Learning) است. یادگیری عمیق، تابعی از «هوش مصنوعی» (Artificial Intelligence) محسوب می‌شود که فرایندهای کاری مغز انسان را، جهت پردازش داده‌های حس شده و شناسایی الگوهای موجود در آن‌ها برای تصمیم‌گیری، همانندسازی می‌کند.

یادگیری عمیق، زیر مجموعه‌ای از مدل‌های «شبکه‌های عصبی مصنوعی» (Artificial Neural Networks) در حوزه «یادگیری ماشین» (Machine Learning) محسوب می‌شود. بنابراین، مدل‌های یادگیری عمیق کلاسی از الگوریتم‌های یادگیری ماشین هستند که از لایه‌های متعدد و چندگانه برای استخراج تدریجی «ویژگی‌های سطح بالا» (High-Level Features) از داده‌های خام ورودی استفاده می‌کنند.

دسته بندی تصاویر

به عنوان نمونه، در کاربردهایی نظیر «پردازش تصویر» (Image Processing)، لایه‌های پایین‌تر شبکه عصبی یا مدل یادگیری عمیق ممکن است ویژگی‌هایی نظیر «لبه‌ها» (Edges) را تشخیص دهند، در حالی که لایه‌های بالاتر مفاهیم قابل فهم‌تر برای انسان‌ها نظیر ارقام، حروف و یا چهره افراد را شناسایی و استخراج می‌کنند.

شاید در نگاه اول تصور شود که پیاده‌سازی یک مدل یادگیری عمیق برای دسته بندی تصاویر، منابع زیادی نیاز داشته باشد؛ از یک سو، زمان زیادی برای «آموزش» (Train) مدل‌های یادگیری عمیق روی «مجموعه‌های داده» (Datasets) متشکل از داده‌های تصویری نیاز است و از سوی دیگر، قدرت محاسباتی لازم برای آموزش یک مدل یادگیری عمیق به مراتب بیشتر از یک مدل شبکه عصبی مصنوعی مرسوم است. به عبارت دیگر،  تصور شایع در میان برنامه‌نویسان  این است که در اختیار داشتن یک کامپیوتر قدرتمند با قدرت پردازشی قابل توجه، یکی از ملزومات آموزش مدل‌های یادگیری عمیق است.

در این مطلب، برای طراحی و آموزش یک مدل یادگیری عمیق در زبان پایتون، از سرویس محاسبات ابری گوگل به نام Google Colab notebook استفاده می‌شود. سرویس Google Colab notebook امکانات پردازشی بسیار قدرتمندی برای پیاده‌سازی مدل‌های یادگیری عمیق و آموزش آن‌ها در زبان پایتون فراهم می‌کند.

شایان توجه است که برای پیاده‌سازی یک سیستم دسته‌بندی تصاویر و آموزش آن، نیازی به در اختیار داشتن یک سیستم قدرتمند محاسبات (به صورت فیزیکی) و صرف زمان زیاد برای پیاده‌سازی و آموزش آن وجود ندارد. به عنوان نمونه، برخی از اعضای پلتفرم محبوب Fast.ai الگوریتمی را جهت دسته بندی تصاویر طراحی کردند که بر اساس معیارهای ارزیابی معروف نظیر DAWNbench، از کدهای گوگل بهتر عمل می‌کند.

مجموعه داده استفاده شده برای آموزش الگوریتم یادگیری توسعه داده شده توسط اعضای پلتفرم Fast.ai، مجموعه داده معروف Imagenet است. هزینه آموزش این مدل با استفاده از سیستم‌های محاسبات ابری عمومی (اجاره 16 سیستم محاسبات ابری شرکت آمازون)، چیزی حدود 40 دلار برآورد شده است. همچنین، برای آموزش مدل الگوریتم یادگیری توسعه داده شده توسط مجموعه داده Imagenet به چیزی حدود 18 دقیقه زمان نیاز است.

دسته بندی تصاویر

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

بیان مسأله در چالش پیاده‌سازی سیستم دسته بندی تصاویر

بیش از 25 درصد درآمد شرکت‌های فعال در حوزه «تجارت الکترونیک» (E-Commerce) به فروش پوشاک و تجهیزات جانبی مرتبط تعلق دارد. یکی از مسائل عمده شرکت‌های فعال در این حوزه، «طبقه‌بندی کردن» (Categorizing) پوشاک با استفاده از تصاویر آن‌ها است؛ به ویژه، زمانی که طبقه‌بندی‌های ارائه شده توسط برندهای مختلف پوشاک، ناسازگاری بسیار زیادی از خود نشان می‌دهند.

بنابراین، پیاده‌سازی سیستم‌های دسته بندی تصاویر جهت طبقه‌بندی پوشاک (با استفاده از تصاویر آن‌ها)، یکی از چالش‌هایی است که می‌تواند توسط محققان فعال در حوزه یادگیری عمیق و «بینایی کامپیوتر» (Computer Vision) مورد کاوش قرار بگیرد.

دسته بندی تصاویر

«مجموعه داده» (Dataset) قابل استفاده برای پیاده‌سازی سیستم‌های دسته بندی تصاویر جهت طبقه بندی تصاویر پوشاک، مجموعه داده Fashion MNIST نام دارد. مجموعه داده MNIST، یک مجموعه داده بسیار معروف برای پیاده‌سازی سیستم‌های دسته بندی تصاویر «ارقام» (Digits) و شناسایی اعداد موجود در تصاویر محسوب می‌شود. در این مجموعه داده، هر کدام از تصاویر نشان دهنده یک عدد (یا رقم) بین 0 تا 9 است. مجموعه داده Fashion MNIST، معادل مجموعه داده MNIST محسوب می‌شود؛ با این تفاوت که در این مجموعه داده، هر تصویر نشان دهنده یک نوع پوشاک (پیراهن، شلوار و سایر موارد) است.

دسته بندی تصاویر

دسته بندی تصاویر چیست؟‌

به تصویر زیر دقت کنید:

دسته بندی تصاویر

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

در چالش دسته بندی تصاویر، به طور بالقوه می‌توان تصاویر را در n کلاس یا طبقه دسته‌بندی کرد. بررسی و دسته‌بندی «دستی» (Manual) تصاویر، کار بسیار سخت و خسته کننده‌ای است. این چالش، زمانی که حجم زیادی از تصاویر (به عنوان نمونه، 10 هزار یا 100 هزار تصویر) باید بررسی و دسته‌بندی شوند، عملا غیر ممکن خواهد شد. در چنین حالتی، نقش محققان فعال در حوزه یادگیری عمیق و بینایی کامپیوتر، بیش از پیش پر رنگ‌تر خواهد شد؛ چنین افرادی قادر خواهند بود سیستم‌هایی را طراحی کنند که می‌‌توانند فرایند دسته‌بندی تصاویر را خودکار کنند و از این طریق، تصاویر را در کلاس یا طبقه صحیح دسته‌بندی کنند.

«اتومبیل‌های خودران» (Self-Driving Automobiles) نمونه بارز کاربردهای «جهان واقعی» (Real World) سیستم‌های دسته بندی تصاویر محسوب می‌شوند. برای تکامل و ارتقاء فناوری اتومبیل‌های خودران، می‌توان سیستم‌های دسته‌بندی تصاویر تولید کرد که قادر باشند «اشیاء» (Objects) مختلفی نظیر اتومبیل، اشخاص، اشیاء در حال حرکت و سایر موارد را شناسایی کنند. با این حال، موارد کاربرد سیستم‌های دسته بندی تصاویر به این مورد خاص ختم نمی‌شود و از این دسته از سیستم‌ها می‌توان در کاربردهای مختلفی و برای خودکارسازی وظایف گوناگون استفاده کرد.

دسته بندی تصاویر

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

راه‌اندازی ساختار داده‌های تصویری

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

برای آماده‌سازی داده‌های لازم برای پیاده‌سازی سیستم دسته بندی تصاویر نیاز است تا دو پوشه توسط کاربر تولید شود؛ یک پوشه برای نگه‌داری «داده‌های مجموعه آموزشی» (Train Set) و یک پوشه دیگر نیز برای نگه‌داری «داده‌های مجموعه تست» (Test Data). در پوشه مرتبط با داده‌های مجموعه آموزشی، یک فایل CSV. و یک پوشه حاوی تصاویر وجود خواهد داشت:

  • فایل CSV.، نام تمامی داده‌های موجود در مجموعه آموزشی و برچسب واقعی متناظر آن‌ها را شامل خواهد شد.
  • در پوشه حاوی تصاویر نیز تمامی تصاویر آموزشی لازم برای پیاده‌سازی (آموزش) سیستم دسته بندی تصاویر ذخیره خواهند شد.

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

بنابراین، بسیار حیاتی است که داده‌های آموزشی و تست لازم برای پیاده‌سازی و ارزیابی مدل دسته بندی تصاویر، در قالب شرح داده شده آماده‌سازی شوند. در غیر این صورت، ممکن است نتایج حاصل از آموزش و ارزیابی مدل قابل اطمینان نباشد.

مراحل لازم برای ساختن مدل دسته بندی تصاویر

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

فرایندهای لازم برای طراحی مدل دسته بندی تصاویر را می‌توان به 4 مرحله مجزا تقسیم‌بندی کرد:

  1. بارگیری و پیش پردازش داده‌ها
  2. تعریف معماری مدل یادگیری عمیق
  3. آموزش مدل دسته بندی تصاویر با استفاده از داده‌های آموزشی
  4. تخمین زدن عملکرد مدل طراحی شده

در ادامه، هر کدام از این مراحل، به همراه جزئیات آن‌ها شرح داده می‌شوند. آشنایی با جزئیات هر کدام از این مراحل، برای تضمین عملکرد بهینه سیستم دسته بندی تصاویر حیاتی است. برای تضمین عملکرد بهینه سیستم، بعضا لازم است پس از هر تکرار، مراحل پیاده‌سازی سیستم بازبینی و پارامترهای مدل «تنظیم دقیق» (Fine-Tune) شوند و در نهایت، مدل پیاده‌سازی دوباره اجرا شود. آشنایی با جزئیات هر کدام از مراحل بالا، نقش مهمی در شتاب بخشیدن به فرایند تنظیم دقیق پارامترهای مدل و تضمین عملکرد بهینه سیستم دسته بندی تصاویر خواهد داشت.

مرحله اول: بارگیری و پیش پردازش داده‌ها

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

یکی دیگر از مراحل مهم در فرایند پیاده‌سازی سیستم دسته بندی تصاویر، «صحت‌سنجی» (Validation) مدل آموزش داده شده است. به عبارت دیگر، برای مشخص کردن عملکرد سیستم دسته بندی تصاویر روی داده‌های «دیده نشده» (Unseen) و پیش از تست کردن سیستم روی داده‌های تست، نیاز است تا یک «مجموعه داده صحت‌سنجی» (Validation Dataset) ایجاد شود. برای انجام چنین کاری می‌توان داده‌های آموزشی را تقسیم بندی کرد و بخشی از این داده‌ها را برای صحت‌سنجی عملکرد سیستم دسته بندی تصاویر استفاده کرد.

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

دسته بندی تصاویر

مرحله دوم: تعریف معماری مدل یادگیری عمیق

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

در این مرحله، جزئیات طراحی مدل یادگیری عمیق از طریق پاسخ به سؤال‌های زیر مشخص می‌شود:

  • در مدل یادگیری عمیق، به چند «لایه پیچشی» (Convolutional Layer) نیاز است تا عملکرد بهینه سیستم دسته بندی تصاویر تضمین شود.
  • برای هر کدام از لایه‌ها، باید از کدام یک از «توابع فعال‌سازی» (Activation Function) استفاده کرد.
  • هر کدام از لایه‌های نهان مدل یادگیری عمیق، باید متشکل از چند «نرون» (Neuron) یا نود نهان باشد.

این سؤالات و دیگر سؤالات مشابه، «ابَرپارامترهای» (Hyperparameter) مدل یادگیری عمیق را مشخص می‌کند. مشخص کردن ابَرپارامترهای بهینه برای سیستم دسته بندی تصاویر، نقش مهمی در افزایش کیفیت پیش‌بینی‌های انجام شده روی تصاویر مجموعه داده تست خواهد داشت.

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

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

دسته بندی تصاویر

مرحله سوم: آموزش مدل دسته بندی تصاویر با استفاده از داده‌های آموزشی

پیش از آغاز مرحله آموزش مدل یادگیری عمیق، لازم است پیش‌نیازهای زیر در اختیار سیستم قرار گرفته شود:

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

با در اختیار داشتن پیش‌نیازهای تعریف شده، برای آموزش مدل دسته بندی تصاویر، لازم است مراحل زیر دنبال شوند:

  • آموزش دادن مدل یادگیری عمیق بر اساس داده‌های آموزشی و برچسب واقعی آن‌ها.
  • صحت‌سنجی مدل دسته بندی تصاویر بر اساس برچسب‌های واقعی متناظر با هر کدام از داده‌های صحت‌سنجی.

همچنین، در این مرحله تعداد «تکرارهای» (Epoch) لازم برای آموزش مدل یادگیری عمیق مشخص می‌شود. در این مطلب و جهت آموزش مدل دسته بندی تصاویر، تعداد تکرارها برابر 100 در نظر گرفته شده است.

دسته بندی تصاویر

مرحله چهارم: تخمین زدن عملکرد مدل طراحی شده

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

بنابراین، تا اینجا مراحل لازم برای پیاده‌سازی یک سیستم دسته بندی تصاویر جهت «شناسایی پوشاک» (Identifying the Apparels) ارائه شده است. همانطور که پیش از این نیز اشاره شد، هدف این سیستم دسته بندی تصاویر وارد شده به سیستم بر اساس نوع پوشاک (شلوار، پیراهن و سایر موارد) است.

در مجموعه داده Fashion MNIST، هفتاد هزار تصویر وجود دارد که 60 هزار تصویر در مجموعه آموزشی و 10 هزار تصویر نیز در مجموعه تست قرار گرفته است. داده‌های موجود در مجموعه آموزشی، بسته به نوع پوشاک، در 10 کلاس از پیش تعیین شده دسته‌بندی شده‌اند و برچسب آن‌ها مشخص شده است. برچسب داده‌های موجود در مجموعه تست نیز از دید سیستم مخفی شده است.

برای پیاده‌سازی سیستم دسته بندی تصاویر و طراحی مدل یادگیری عمیق، از سرویس محاسبات ابری گوگل (Google Colab notebook) استفاده می‌شود. سرویس Google Colab notebook امکانات پردازشی مبتنی بر «واحد پردازش گرافیکی» (Graphical Processing Unit) را جهت آموزش مدل‌های یادگیری عمیق در اختیار کاربران قرار می‌دهد.

دسته بندی تصاویر

مراحل لازم برای طراحی مدل یادگیری عمیق در زبان پایتون

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

  1. آماده‌سازی Google Colab.
  2. وارد (import) کردن کتابخانه‌های برنامه‌نویسی لازم برای طراحی، آموزش و پیش‌بینی دسته بندی تصاویر.
  3. بارگذاری و پیش پردازش داده‌ها (تصاویر).
  4. تولید مجموعه داده صحت‌سنجی جهت صحت‌سنجی عملکرد مدل آموزشی.
  5. تعریف و طراحی ساختار مدل یادگیری عمیق.
  6. آموزش مدل یادگیری عمیق.
  7. پیش‌بینی برچسب داده‌های موجود در مجموعه تست.

مرحله اول: آماده‌سازی Google Colab

در این مطلب، داده‌های لازم برای آموزش و تست مدل یادگیری عمیق، از لینک Google Drive وارد سیستم خواهند شد.

بنابراین، برای استفاده از لینک‌های Google Drive لازم است تا تعدادی خط کد به Google Colab notebook اضافه شود. در نتیجه، ابتدا یک Python 3 notebook جدید در Google Colab notebook ایجاد و قطعه کدهای زیر اضافه می‌شود:

1pip install PyDrive

این دستور، PyDrive را نصب خواهد کرد. در مرحله بعد، کتابخانه‌های برنامه‌نویسی لازم برای دریافت داده‌ها از لینک Google Drive، توسط قطعه کدهای زیر import می‌شوند:

1import os
2from pydrive.auth import GoogleAuth
3from pydrive.drive import GoogleDrive
4from google.colab import auth
5from oauth2client.client import GoogleCredentials

سپس، یک متغیر Drive برای دسترسی به Google Drive تولید خواهد شد.

1auth.authenticate_user()
2gauth = GoogleAuth()
3gauth.credentials = GoogleCredentials.get_application_default()
4drive = GoogleDrive(gauth)

برای دانلود فایل مجموعه داده Fashion MNIST، از ID فایل آپلود شده در Google Drive استفاده می‌شود.

1download = drive.CreateFile({'id': '1BZOv422XJvxFUnGh-0xVeSvgFgqVY45q'})

شایان توجه است که مقدار پارامتر id در کد بالا، باید با ID فایل آپلود شده در Google Drive جایگزین شود. با اجرای قطعه کد زیر، فایل train_LbELtWX.zip دانلود و از حالت فشرده خارج می‌شود:

1download.GetContentFile('train_LbELtWX.zip')
2!unzip train_LbELtWX.zip

شایان توجه است که قطعه کدهای مرحله اول، باید در تمامی دفعاتی که Google Colab notebook آغاز به کار می‌کند، اجرا شوند:

مرحله دوم: وارد (import) کردن کتابخانه‌های برنامه‌نویسی لازم

در این مرحله، کتابخانه‌های برنامه‌نویسی که در فاز ساختن مدل یادگیری عمیق مورد نیاز هستند، توسط قطعه کدهای زیر import می‌شوند:

1import keras
2from keras.models import Sequential
3from keras.layers import Dense, Dropout, Flatten
4from keras.layers import Conv2D, MaxPooling2D
5from keras.utils import to_categorical
6from keras.preprocessing import image
7import numpy as np
8import pandas as pd
9import matplotlib.pyplot as plt
10from sklearn.model_selection import train_test_split
11from keras.utils import to_categorical
12from tqdm import tqdm

مرحله سوم: بارگذاری و پیش پردازش داده‌ها

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

پس از بارگذاری داده‌ها در سیستم، لازم است تا این داده‌ها پیش پردازش شوند تا بتوان آن‌ها را برای آموزش مدل یادگیری عمیق مورد استفاده قرار داد. ابتدا داده‌های آموزش در سیستم بارگذاری می‌شوند:

1train = pd.read_csv('train.csv')

سپس، تصاویر آموزشی خوانده و در یک لیست نگه‌داری می‌شوند. در نهایت نیز، لیست تولید شده به ساختار داده‌ای آرایه از نوع numpy تبدیل می‌شود:

1# We have grayscale images, so while loading the images we will keep grayscale=True, if you have RGB images, you should set grayscale as False
2train_image = []
3for i in tqdm(range(train.shape[0])):
4    img = image.load_img('train/'+train['id'][i].astype('str')+'.png', target_size=(28,28,1), grayscale=True)
5    img = image.img_to_array(img)
6    img = img/255
7    train_image.append(img)
8X = np.array(train_image)

از آنجایی دسته‌بندی تصاویر پوشاک، یک «مسأله دسته‌بندی چندکلاسه» (Multi-class Classification Problem) محسوب می‌شود (هر یک از داده‌ها قرار است در یکی از ده کلاس از پیش تعریف شده در مجموعه داده Fashion MNIST دسته‌بندی شوند)، از روش one-hot برای «کدبندی» (Encoding) متغیر «هدف» (Target) مسأله استفاده می‌شود:

1y=train['label'].values
2y = to_categorical(y)

مرحله چهارم: تولید مجموعه داده صحت‌سنجی از روی مجموعه آموزشی

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

1X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42, test_size=0.2)

مرحله پنجم: تعریف و طراحی ساختار مدل یادگیری عمیق

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

در این مرحله، یک مدل یادگیری عمیق با دو لایه پیچشی، یک «لایه نهان متراکم» (Dense Hidden Layer) و یک لایه خروجی تولید خواهد شد.

1model = Sequential()
2model.add(Conv2D(32, kernel_size=(3, 3),activation='relu',input_shape=(28,28,1)))
3model.add(Conv2D(64, (3, 3), activation='relu'))
4model.add(MaxPooling2D(pool_size=(2, 2)))
5model.add(Dropout(0.25))
6model.add(Flatten())
7model.add(Dense(128, activation='relu'))
8model.add(Dropout(0.5))
9model.add(Dense(10, activation='softmax'))

در مرحله بعد، مدل طراحی شده با استفاده از قطعه کدهای بالا، «کامپایل» (Compile) می‌شود.

1model.compile(loss='categorical_crossentropy',optimizer='Adam',metrics=['accuracy'])

مرحله ششم: آموزش مدل یادگیری عمیق

در این مرحله، از مجموعه داده آموزشی برای آموزش مدل یادگیری عمیق و از مجموعه داده صحت‌سنجی برای صحت‌سنجی عملکرد مدل آموزش داده شده استفاده می‌شود:

1model.fit(X_train, y_train, epochs=100, validation_data=(X_test, y_test))

مرحله هفتم: پیش‌بینی برچسب داده‌های موجود در مجموعه تست

برای پیش‌بینی برچسب داده‌های موجود در مجموعه تست، ابتدا لازم است تا تمامی مراحل لازم برای پردازش داده‌های موجود در مجموعه آموزشی طی شود (بارگذاری و پیش‌پردازش داده‌های موجود در مجموعه تست).

سپس، از تابع ()model.predict_classes برای پیش‌بینی برچسب کلاسی داده‌های موجود در مجموعه تست استفاده می‌شود.

1download = drive.CreateFile({'id': '1KuyWGFEpj7Fr2DgBsW8qsWvjqEzfoJBY'})
2download.GetContentFile('test_ScVgIM0.zip')
3!unzip test_ScVgIM0.zip

در مرحله بعد، داده‌های موجود در مجموعه تست وارد (import) سیستم می‌شوند:

1test = pd.read_csv('test.csv')

سپس، تمامی داده‌های موجود در مجموعه تست خوانده و ذخیره می‌شوند:

1test_image = []
2for i in tqdm(range(test.shape[0])):
3    img = image.load_img('test/'+test['id'][i].astype('str')+'.png', target_size=(28,28,1), grayscale=True)
4    img = image.img_to_array(img)
5    img = img/255
6    test_image.append(img)
7test = np.array(test_image)

در مرحله آخر، از تابع ()model.predict_classes برای پیش‌بینی برچسب کلاسی داده‌های موجود در مجموعه تست استفاده می‌شود:

1# making predictions
2prediction = model.predict_classes(test)

پس از اجرای دستور بالا، برچسب کلاسی تمامی داده‌های موجود در مجموعه تست در خروجی نمایش داده می‌شود. همچنین، این امکان برای کاربران و برنامه‌نویسان فراهم شده است تا با استفاده از تکنیک‌هایی نظیر Hyperparameter Tuning و Regularization، عملکرد و دقت مدل دسته بندی تصاویر را افزایش دهند.

استفاده از مدل دسته بندی تصاویر برای تشخیص ارقام در عکس‌ها

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

برای پیاده‌سازی سیستم دسته بندی تصاویر جهت تشخیص ارقام، باز هم از سرویس محاسبات ابری گوگل (Google Colab notebook) استفاده می‌شود. برای چنین کاری کافی است یک Python 3 notebook جدید در Google Colab notebook ایجاد و قطعه کدهای زیر اجرا شوند:

1# Setting up Colab
2!pip install PyDrive
1import os
2from pydrive.auth import GoogleAuth
3from pydrive.drive import GoogleDrive
4from google.colab import auth
5from oauth2client.client import GoogleCredentials
1auth.authenticate_user()
2gauth = GoogleAuth()
3gauth.credentials = GoogleCredentials.get_application_default()
4drive = GoogleDrive(gauth)
1# Replace the id and filename in the below codes
2download = drive.CreateFile({'id': '1ZCzHDAfwgLdQke_GNnHp_4OheRRtNPs-'})
3download.GetContentFile('Train_UQcUa52.zip')
4!unzip Train_UQcUa52.zip
1# Importing libraries
2import keras
3from keras.models import Sequential
4from keras.layers import Dense, Dropout, Flatten
5from keras.layers import Conv2D, MaxPooling2D
6from keras.utils import to_categorical
7from keras.preprocessing import image
8import numpy as np
9import pandas as pd
10import matplotlib.pyplot as plt
11from sklearn.model_selection import train_test_split
12from keras.utils import to_categorical
13from tqdm import tqdm
1train = pd.read_csv('train.csv')
1# Reading the training images
2train_image = []
3for i in tqdm(range(train.shape[0])):
4    img = image.load_img('Images/train/'+train['filename'][i], target_size=(28,28,1), grayscale=True)
5    img = image.img_to_array(img)
6    img = img/255
7    train_image.append(img)
8X = np.array(train_image)
1# Creating the target variable
2y=train['label'].values
3y = to_categorical(y)
1# Creating validation set
2X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42, test_size=0.2)
1# Define the model structure
2model = Sequential()
3model.add(Conv2D(32, kernel_size=(3, 3),activation='relu',input_shape=(28,28,1)))
4model.add(Conv2D(64, (3, 3), activation='relu'))
5model.add(MaxPooling2D(pool_size=(2, 2)))
6model.add(Dropout(0.25))
7model.add(Flatten())
8model.add(Dense(128, activation='relu'))
9model.add(Dropout(0.5))
10model.add(Dense(10, activation='softmax'))
1# Compile the model
2model.compile(loss='categorical_crossentropy',optimizer='Adam',metrics=['accuracy'])
1# Training the model
2model.fit(X_train, y_train, epochs=100, validation_data=(X_test, y_test))
1download = drive.CreateFile({'id': '1zHJR6yiI06ao-UAh_LXZQRIOzBO3sNDq'})
2download.GetContentFile('Test_fCbTej3.csv')
1test_file = pd.read_csv('Test_fCbTej3.csv')
1test_image = []
2for i in tqdm(range(test_file.shape[0])):
3    img = image.load_img('Images/test/'+test_file['filename'][i], target_size=(28,28,1), grayscale=True)
4    img = image.img_to_array(img)
5    img = img/255
6    test_image.append(img)
7test = np.array(test_image)
1prediction = model.predict_classes(test)

جمع‌بندی

در این مطلب، با مبحث مدل‌های دسته بندی تصاویر و پیاده‌سازی آن‌ها در «زبان برنامه‌نویسی پایتون» (Python Programming Language) آشنا شدید. یکی از باورهای غلط در مورد پیاده‌سازی روش‌های یادگیری عمیق، نیاز به دسترسی فیزیکی به یک سیستم پردازشی بسیار قوی است.

در این مطلب، برای طراحی و آموزش یک مدل یادگیری عمیق در زبان پایتون، از سرویس محاسبات ابری گوگل به نام Google Colab notebook استفاده شده است. سرویس Google Colab notebook امکانات پردازشی بسیار قدرتمندی برای پیاده‌سازی مدل‌های یادگیری عمیق و آموزش آن‌ها در زبان پایتون (و دیگر زبان‌های برنامه‌نویسی) فراهم می‌کند.

استفاده از سرویس‌های محاسبات ابری نظیر Google Colab سبب می‌شود تا بتوان در مدت زمان بسیار کوتاهی، یک مدل دسته بندی تصاویر را آموزش داد و از آن برای پیش بینی برچسب کلاسی تصاویر استفاده کرد.

اگر نوشته بالا برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

بر اساس رای ۸ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
Analytics Vidhya
۱ دیدگاه برای «پیاده سازی مدل‌ دسته بندی تصاویر در پایتون — راهنمای کاربردی»

سلام آیا همین روند را می توان برای مسئله پیش بینی که ساختار رگرسیون دارند انجام داد؟

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *