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

1. قبل از شروع

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

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

پیش نیازها

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

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

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

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

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

2. شروع کنید

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

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

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

4ee12554e75b103f.png

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

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

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

  1. TensorFlow Lite Model Maker را نصب کنید. شما می توانید این کار را با نصب پیپ انجام دهید. &> /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')

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

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

اگر تصاویر شما در پوشه‌ها سازماندهی شده‌اند و آن پوشه‌ها فشرده شده‌اند، اگر فایل فشرده را دانلود کرده و آن را از حالت فشرده خارج کنید، به‌طور خودکار تصاویر خود را بر اساس پوشه‌ای که در آن هستند برچسب‌گذاری می‌کنید. این فهرست به عنوان 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 برمی‌گردد آسان است. با وارد کردن 0.9 به آن، 90٪ آن را به عنوان داده های آموزشی و 10٪ را به عنوان داده های آزمایشی دریافت خواهید کرد:

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

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

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

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

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 نامیده می شود که از یک مدل از پیش آموزش دیده به عنوان نقطه شروع استفاده می کند و فقط چیزهایی را که آن مدل در مورد نحوه ساخت تصاویر آموخته و برای درک این 5 گل به کار می گیرد. این را می توانید در سطر اول ببینید:

hub_keras_layer_v1v2_2 (HubK (None, 1280)              3413024

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

این مدل 5 دوره را پشت سر گذاشت - که در آن یک دوره یک چرخه کامل آموزش است که در آن شبکه عصبی سعی می کند تصاویر را با برچسب آنها مطابقت دهد. زمانی که 5 دوره را پشت سر گذاشت، در حدود 1 دقیقه، 93.85٪ در داده های آموزشی دقیق بود. با توجه به اینکه 5 کلاس وجود دارد، یک حدس تصادفی 20٪ دقیق خواهد بود، بنابراین این پیشرفت است! (همچنین یک عدد "از دست دادن" را گزارش می کند، اما شما با خیال راحت فعلاً آن را نادیده می گیرید.)

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

loss, accuracy = model.evaluate(test_data)

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

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

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

6. مدل را صادر کنید

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

این هم کد:

model.export(export_dir='/mm_flowers')

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

cc5b9988775633b4.png

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

51e6ac47c992142a.png

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

57bad87f294fd189.png

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

aee14ad10c4a8a1a.png

پس از چند لحظه مدل شما در پوشه دانلودها دانلود می شود.

7. تبریک می گویم

اکنون آماده ادغام آن در برنامه تلفن همراه خود هستید! این کار را در آزمایشگاه بعدی انجام خواهید داد.