1. قبل البدء
في الدرس العملي السابق، أنشأت تطبيقًا لنظامَي التشغيل Android وiOS يستخدم نموذجًا أساسيًا لتصنيف الصور يتعرّف على عدة مئات من فئات الصور. تعرّف على صورة زهرة بشكل عام جدًا، حيث رصد بتلات وزهرة ونباتًا وسماءً.
لتعديل التطبيق كي يتعرّف على أزهار معيّنة، مثل الأقحوان أو الورد، ستحتاج إلى نموذج مخصّص تم تدريبه على الكثير من الأمثلة لكل نوع من الأزهار التي تريد التعرّف عليها.
المتطلبات الأساسية
- Codelab السابق في هذا المسار التعليمي
ما ستنشئه وما ستتعلمه
- كيفية تدريب نموذج مخصّص لتصنيف الصور باستخدام أداة TensorFlow Lite Model Maker
المتطلبات
- لا تحتاج إلى أي أجهزة معيّنة، إذ يمكن إكمال كل شيء باستخدام Google Colab في المتصفّح.
2. البدء
تم إعداد جميع الرموز البرمجية التي يجب اتّباعها، وهي متاحة للتنفيذ باستخدام Google Colab هنا. إذا لم يكن بإمكانك الوصول إلى Google Colab، يمكنك استنساخ المستودع واستخدام دفتر الملاحظات المسمى CustomImageClassifierModel.ipynb الذي يمكن العثور عليه في الدليل ImageClassificationMobile->colab.
إذا كان لديك الكثير من الأمثلة على أنواع معيّنة من الزهور، سيكون من السهل نسبيًا تدريب نموذج باستخدام "أداة إنشاء النماذج" في TensorFlow Lite للتعرّف عليها.
أسهل طريقة لإجراء ذلك هي إنشاء ملف .zip أو .tgz يحتوي على الصور، ويتم ترتيبها في أدلة. على سبيل المثال، إذا كنت تستخدم صورًا للأقحوان والهندباء والورود وعباد الشمس والتوليب، يمكنك تنظيمها في أدلة على النحو التالي:

يمكنك ضغط هذا الملف واستضافته على خادم، وستتمكّن من تدريب النماذج باستخدامه. ستستخدم ملفًا تم إعداده لك في بقية هذا الدرس التطبيقي.
سيفترض هذا الدرس التطبيقي أنّك تستخدم Google Colab لتدريب النموذج. يمكنك العثور على Colab على colab.research.google.com. وإذا كنت تستخدم بيئة أخرى، قد تحتاج إلى تثبيت العديد من التبعيات، وأهمها TensorFlow.
3- تثبيت الموارد التابعة واستيرادها
- ثبِّت أداة TensorFlow Lite Model Maker. يمكنك إجراء ذلك باستخدام pip install. يؤدي الرمز &> /dev/null في النهاية إلى إيقاف الناتج. يُنتج تطبيق Model Maker الكثير من المحتوى غير المرتبط بالموضوع بشكل مباشر. تم إيقافها مؤقتًا حتى تتمكّن من التركيز على المهمة التي بين يديك.
# Install Model maker
!pip install -q tflite-model-maker &> /dev/null
- بعد ذلك، عليك استيراد المكتبات التي تحتاج إلى استخدامها والتأكّد من أنّك تستخدم 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. تنزيل بياناتك وإعدادها
إذا كانت صورك منظَّمة في مجلدات وتم ضغط هذه المجلدات، وعند تنزيل ملف ZIP وفك ضغطه، سيتم تلقائيًا تصنيف صورك استنادًا إلى المجلد الذي تم حفظها فيه. سيتم الإشارة إلى هذا الدليل باسم 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 الكثير من تفاصيل تصميم الشبكة العصبية، لذا لن تحتاج إلى التعامل مع تصميم الشبكة وأشياء مثل الالتفافات والكثافة و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 وراء الكواليس يُعرف باسم التعلّم النقلي، وهو يستخدم نموذجًا حاليًا مُدرَّبًا مسبقًا كنقطة بداية، ويستفيد من المعلومات التي تعلّمها هذا النموذج عن كيفية إنشاء الصور ويطبّقها على فهم هذه الزهور الخمس. يمكنك الاطّلاع على ذلك في السطر الأول الذي يظهر فيه ما يلي:
hub_keras_layer_v1v2_2 (HubK (None, 1280) 3413024
الكلمة الأساسية هي "Hub"، ما يشير إلى أنّ هذا النموذج مأخوذ من TensorFlow Hub. يستخدم TensorFlow Lite Model Maker تلقائيًا نموذجًا يُسمى MobileNet، وهو مصمَّم للتعرّف على 1, 000 نوع من الصور. والمنطق هنا هو أنّه يمكن إعادة استخدام المنهجية التي تستخدمها، من خلال تعلُّم "الميزات" للتمييز بين 1,000 فئة. يمكن ربط "الميزات" نفسها بفئات الزهور الخمس، وبالتالي لا يلزم تعلّمها من البداية.
مرّ النموذج بـ 5 دورات تدريبية، حيث إنّ الدورة التدريبية هي دورة تدريب كاملة تحاول فيها الشبكة العصبونية مطابقة الصور مع التصنيفات. وبعد 5 دورات تدريبية، أي بعد دقيقة واحدة تقريبًا، بلغت دقة البيانات التدريبية% 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.export(export_dir='/mm_flowers')
إذا كنت تنفّذ هذا الإجراء في Google Colab، يمكنك بعد ذلك الاطّلاع على النموذج من خلال النقر على رمز المجلد على يمين الشاشة:

ستظهر لك هنا قائمة بالدليل الحالي. استخدِم الزرّ المحدّد للانتقال "إلى أعلى" دليل:

في الرمز، حدّدت التصدير إلى الدليل mm_flowers. افتح هذا الملف، وسيظهر لك ملف باسم "model.tflite"، وهو النموذج المدرَّب.

اختَر الملف وستظهر لك 3 نقاط على يسار الشاشة. انقر على هذه الرموز للحصول على قائمة السياق، ويمكنك تنزيل النموذج من هناك.

بعد بضع لحظات، سيتم تنزيل النموذج إلى مجلد التنزيلات.
7. تهانينا
أنت الآن جاهز لدمجها في تطبيقك على الأجهزة الجوّالة. ستنفّذ هذه الخطوة في المختبر التالي.