یک مدل سفارشی برای طبقه بندی کننده تصویر خود ایجاد کنید

۱. قبل از شروع

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

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

پیش‌نیازها

  • Codelab قبلی در این مسیر یادگیری.

آنچه خواهید ساخت و یاد خواهید گرفت

  • نحوه آموزش یک مدل سفارشی طبقه‌بندی تصویر با استفاده از TensorFlow Lite Model Maker.

آنچه نیاز دارید

  • هیچ سخت‌افزار خاصی مورد نیاز نیست - همه چیز را می‌توان با استفاده از Google Colab در مرورگر انجام داد.

۲. شروع کنید

تمام کدهایی که در ادامه خواهید خواند، برای شما آماده شده‌اند و می‌توانید آن‌ها را با استفاده از Google Colab در اینجا اجرا کنید. اگر به Google Colab دسترسی ندارید، می‌توانید مخزن را کپی کرده و از دفترچه یادداشتی به نام CustomImageClassifierModel.ipynb که در پوشه ImageClassificationMobile->colab قرار دارد، استفاده کنید.

اگر نمونه‌های زیادی از گل‌های خاص دارید، آموزش مدل با TensorFlow Lite Model maker برای تشخیص آنها نسبتاً آسان است.

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

4ee12554e75b103f.png

آن را زیپ کنید و روی یک سرور میزبانی کنید، و می‌توانید مدل‌ها را با آن آموزش دهید. از سروری که در ادامه این آزمایش برای شما آماده شده است، استفاده خواهید کرد.

این آزمایشگاه فرض می‌کند که شما از Google Colab برای آموزش مدل استفاده می‌کنید. می‌توانید colab را در colab.research.google.com پیدا کنید. اگر از محیط دیگری استفاده می‌کنید، ممکن است مجبور شوید وابستگی‌های زیادی را نصب کنید، از جمله TensorFlow.

۳. نصب و وارد کردن وابستگی‌ها

  1. TensorFlow Lite Model Maker را نصب کنید. می‌توانید این کار را با نصب pip انجام دهید. &> /dev/null در انتها، خروجی را سرکوب می‌کند. Model Maker چیزهای زیادی را که فوراً مرتبط نیستند، خروجی می‌دهد. این سرکوب شده است تا بتوانید روی کار مورد نظر تمرکز کنید.
# Install Model maker
!pip install -q tflite-model-maker &> /dev/null
  1. در مرحله بعد باید کتابخانه‌هایی را که نیاز به استفاده از آنها دارید وارد کنید و مطمئن شوید که از TensorFlow 2.x استفاده می‌کنید:
# Imports and check that we are using TF2.x
import numpy as np
import os

from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import image_classifier
from tflite_model_maker.image_classifier import DataLoader

import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')

حالا که محیط آماده است، وقت آن رسیده که مدل خود را بسازید!

۴. داده‌های خود را دانلود و آماده کنید

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

data_path = tf.keras.utils.get_file(
      'flower_photos',
      'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
      untar=True)

این مسیر داده سپس می‌تواند در یک مدل شبکه عصبی برای آموزش با کلاس ImageClassifierDataLoader از TensorFlow Lite Model Maker بارگذاری شود. فقط کافیست آن را به پوشه مورد نظر هدایت کنید و کار تمام است.

یکی از عناصر مهم در آموزش مدل‌ها با یادگیری ماشین این است که از تمام داده‌های خود برای آموزش استفاده نکنید. کمی صبر کنید تا مدل با داده‌هایی که قبلاً ندیده است، آزمایش شود. این کار با روش تقسیم مجموعه داده‌هایی که از ImageClassifierDataLoader برمی‌گردد، به راحتی قابل انجام است. با ارسال عدد ۰.۹ به آن، ۹۰٪ از آن را به عنوان داده‌های آموزشی و ۱۰٪ را به عنوان داده‌های آزمایشی دریافت خواهید کرد:

data = DataLoader.from_folder(data_path)
train_data, test_data = data.split(0.9)

اکنون که داده‌های شما آماده شده است، می‌توانید با استفاده از آن یک مدل ایجاد کنید.

۵. ایجاد مدل طبقه‌بندی تصویر

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

model = image_classifier.create(train_data)

وقتی این را اجرا کنید، خروجی‌ای خواهید دید که کمی شبیه به زیر است:

Model: "sequential_2"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
hub_keras_layer_v1v2_2 (HubK (None, 1280)              3413024
_________________________________________________________________
dropout_2 (Dropout)          (None, 1280)              0
_________________________________________________________________
dense_2 (Dense)              (None, 5)                 6405
=================================================================
Total params: 3,419,429
Trainable params: 6,405
Non-trainable params: 3,413,024
_________________________________________________________________
None
Epoch 1/5
103/103 [===] - 15s 129ms/step - loss: 1.1169 - accuracy: 0.6181

Epoch 2/5
103/103 [===] - 13s 126ms/step - loss: 0.6595 - accuracy: 0.8911

Epoch 3/5
103/103 [===] - 13s 127ms/step - loss: 0.6239 - accuracy: 0.9133

Epoch 4/5
103/103 [===] - 13s 128ms/step - loss: 0.5994 - accuracy: 0.9287

Epoch 5/5
103/103 [===] - 13s 126ms/step - loss: 0.5836 - accuracy: 0.9385

بخش اول، معماری مدل شما را نشان می‌دهد. کاری که Model Maker در پشت صحنه انجام می‌دهد ، Transfer Learning نام دارد که از یک مدل از پیش آموزش‌دیده موجود به عنوان نقطه شروع استفاده می‌کند و صرفاً چیزهایی را که آن مدل در مورد نحوه ساخت تصاویر آموخته است، می‌گیرد و آنها را برای درک این ۵ گل به کار می‌برد. می‌توانید این را در خط اول که به صورت زیر است، مشاهده کنید:

hub_keras_layer_v1v2_2 (HubK (None, 1280)              3413024

نکته کلیدی کلمه «Hub» است که به ما می‌گوید این مدل از TensorFlow Hub آمده است. به طور پیش‌فرض، TensorFlow Lite Model Maker از مدلی به نام «MobileNet» استفاده می‌کند که برای تشخیص ۱۰۰۰ نوع تصویر طراحی شده است. منطق اینجا این است که روشی که استفاده می‌کند، با یادگیری «ویژگی‌ها» برای تمایز بین ۱۰۰۰ کلاس، می‌تواند دوباره استفاده شود. همان «ویژگی‌ها» را می‌توان به ۵ کلاس گل ما نگاشت کرد، بنابراین لازم نیست آنها را از ابتدا یاد بگیریم.

این مدل ۵ دوره آموزشی را طی کرد - که هر دوره، یک چرخه کامل آموزش است که در آن شبکه عصبی سعی می‌کند تصاویر را با برچسب‌هایشان مطابقت دهد. زمانی که ۵ دوره آموزشی را طی کرد، یعنی در حدود ۱ دقیقه، روی داده‌های آموزشی به دقت ۹۳.۸۵٪ رسید. با توجه به اینکه ۵ کلاس وجود دارد، یک حدس تصادفی ۲۰٪ دقت خواهد داشت، بنابراین این پیشرفت است! (همچنین یک عدد «از دست دادن» را گزارش می‌دهد، اما فعلاً می‌توانید با خیال راحت آن را نادیده بگیرید.)

پیش از این، داده‌ها را به داده‌های آموزشی و آزمایشی تقسیم کرده‌اید، بنابراین می‌توانید معیاری برای عملکرد شبکه روی داده‌هایی که قبلاً ندیده‌اید، به دست آورید - شاخص بهتری از نحوه عملکرد احتمالی آن در دنیای واقعی با استفاده از model.evaluate روی داده‌های آزمایشی:

loss, accuracy = model.evaluate(test_data)

این چیزی شبیه به این خروجی خواهد داد:

12/12 [===] - 5s 115ms/step - loss: 0.6622 - accuracy: 0.8801

به دقت اینجا توجه کنید. ۸۸.۰۱٪ است، بنابراین با استفاده از مدل پیش‌فرض در دنیای واقعی باید انتظار این سطح از دقت را داشت. این برای مدل پیش‌فرضی که در حدود یک دقیقه آموزش داده‌اید، بد نیست. البته احتمالاً می‌توانید برای بهبود مدل، تغییرات زیادی اعمال کنید و این خودش یک علم است!

۶. مدل را اکسپورت کنید

حالا که مدل آموزش داده شده است، مرحله بعدی خروجی گرفتن از آن با فرمت .tflite است که یک برنامه موبایل بتواند از آن استفاده کند. Model maker یک روش خروجی آسان ارائه می‌دهد که می‌توانید از آن استفاده کنید - کافیست دایرکتوری مورد نظر برای خروجی را مشخص کنید.

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

model.export(export_dir='/mm_flowers')

اگر این را در Google Colab اجرا می‌کنید، می‌توانید با کلیک روی نماد پوشه در سمت چپ صفحه، مدل را مشاهده کنید:

cc5b9988775633b4.png

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

51e6ac47c992142a.png

در کدی که مشخص کرده‌اید به دایرکتوری mm_flowers صادر شود، آن را باز کنید. فایلی به نام ' model.tflite ' خواهید دید. این مدل آموزش‌دیده شماست.

57bad87f294fd189.png

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

aee14ad10c4a8a1a.png

بعد از چند لحظه، مدل شما در پوشه دانلودها دانلود خواهد شد.

۷. تبریک

حالا آماده‌اید تا آن را در اپلیکیشن موبایل خود ادغام کنید! این کار را در تمرین بعدی انجام خواهید داد.