تصنيف الصور Tensorflow 2.0: تثبيت النموذج وتحميله وبناء النموذج وتدريبه
نشرت: 2020-04-21تصنيف الصورة هو فئة من التعرف على الأنماط. يصنف الصور وفقًا للعلاقة بين وحدات البكسل المجاورة. بمعنى آخر ، تستخدم المعلومات السياقية لتنظيم الصور وتحظى بشعبية كبيرة بين التقنيات المختلفة. إنه موضوع بارز في التعلم العميق ، وإذا كنت تتعرف عليه ، فستستمتع بالتأكيد بهذه المقالة.
هنا ، سنقوم بتصنيف صور TensorFlow. سنقوم ببناء نموذج ، وتدريبه ، ثم تحسين دقته لتصنيف صور الصبار. TensorFlow عبارة عن نظام أساسي للتعلم الآلي مفتوح المصدر ومنتج من منتجات Google.
هيا بنا نبدأ.
جدول المحتويات
قم بتثبيت TensorFlow 2.0
أولاً ، ستحتاج إلى تثبيت TensorFlow على Google Colab. يمكنك تثبيته من خلال النقطة:
! pip install tensorflow-gpu == 2.0.0-alpha0
ثم سنتحقق من التثبيت:

استيراد tensorflow مثل tf
طباعة (نسخة tf .__)
# المخرجات: 2.0.0-alpha0
مصدر
تعلم: أكثر 5 مشروعات TensorFlow شيوعًا للمبتدئين
تحميل البيانات
بعد التحقق ، يمكننا تحميل البيانات باستخدام tf.data.dataset. سنقوم ببناء مصنف يحدد ما إذا كانت الصورة تحتوي على صبار أم لا. يجب أن يكون الصبار عموديًا ، ويمكننا استخدام مجموعة بيانات Cactus Aerial Photos لهذا الغرض. الآن ، سنقوم بتحميل مسارات الملفات مع تسمياتها:
train_csv = pd.read_csv ('data / train.csv')
# إرفاق أسماء ملفات الصور في القطار / بالمسار النسبي
أسماء الملفات = ['train /' + fname لـ fname في train_csv ['id']. tolist ()]
labels = train_csv ['has_cactus']. tolist ()
train_filenames ، val_filenames ، train_labels ، val_labels =
train_test_split (أسماء الملفات ،
تسميات،
train_size = 0.9 ،
عشوائية = 42)
بمجرد أن نحصل على التسميات وأسماء الملفات ، نكون مستعدين لإنشاء كائنات tf.data.Dataset:
train_data = tf.data.Dataset.from_tensor_slices (
(tf.constant (train_filenames) ، tf.constant (train_labels))
)
val_data = tf.data.Dataset.from_tensor_slices (
(tf.constant (val_filenames) ، tf.constant (val_labels))
)
مصدر
في الوقت الحالي ، لا تحتوي مجموعة البيانات الخاصة بنا على الصور الفعلية. لديها فقط أسماء الملفات الخاصة بهم. سنحتاج إلى وظيفة لتحميل الصور الضرورية ومعالجتها حتى نتمكن من إجراء التعرف على الصور TensorFlow عليها.
IMAGE_SIZE = 96 # الحد الأدنى لحجم الصورة للاستخدام مع MobileNetV2
BATCH_SIZE = 32
# وظيفة لتحميل كل صورة ومعالجتها مسبقًا
def _parse_fn (اسم الملف ، التسمية):
img = tf.io.read_file (img)
img = tf.image.decode_jpeg (img)
img = (tf.cast (img، tf.float32) /127.5) - 1
img = tf.image.resize (img، (IMAGE_SIZE، IMAGE_SIZE))
عودة img ، التسمية
# قم بتشغيل _parse_fn فوق كل مثال في مجموعات بيانات القطار و val
# خلط أيضًا وإنشاء دفعات
train_data = (خريطة_بيانات القطار (_parse_fn)
.shuffle (buffer_size = 10000)
.batch (BATCH_SIZE)
)
val_data = (val_data.map (_parse_fn)
.shuffle (buffer_size = 10000)
.batch (BATCH_SIZE)
)
مصدر
بناء نموذج
في مثال تصنيف صور TensorFlow هذا ، سننشئ نموذجًا لتعليم النقل. هذه النماذج سريعة حيث يمكنها استخدام نماذج تصنيف الصور الحالية التي خضعت للتدريب من قبل. عليهم فقط إعادة تدريب الطبقة العليا من شبكتهم لأن هذه الطبقة تحدد فئة الصورة المطلوبة.
سنستخدم Keras API لـ TensorFlow 2.0 لإنشاء نموذج تصنيف الصور الخاص بنا. ولأغراض تعلم النقل ، سنستخدم MobileNetV2 ليكون كاشف السمات. إنه الإصدار الثاني من MobileNet وهو أحد منتجات Google. إنه أخف وزنًا من الموديلات الأخرى مثل Inception و ResNet ويمكن تشغيله على الأجهزة المحمولة. سنقوم بتحميل هذا النموذج على ImageNet ، وتجميد الأوزان ، وإضافة رأس تصنيف وتشغيله بدون الطبقة العليا.
IMG_SHAPE = (IMAGE_SIZE ، IMAGE_SIZE ، 3)
# نموذج مدرب مسبقًا مع MobileNetV2
base_model = tf.keras.applications.MobileNetV2 (
input_shape = IMG_SHAPE ،

include_top = خطأ ،
أوزان = 'imagenet'
)
# قم بتجميد أوزان النموذج المدربة مسبقًا
base_model.trainable = خطأ
# رئيس تصنيف التدريب
maxpool_layer = tf.keras.layers.GlobalMaxPooling2D ()
prediction_layer = tf.keras.layers.Dense (1 ، التنشيط = 'sigmoid')
# رئيس تصنيف الطبقة مع ميزة الكشف
النموذج = tf.keras.Sequential ([
نموذج القاعدة،
maxpool_layer ،
توقع_لاعبين
])
معدل التعلم = 0.0001
# تجميع النموذج
model.compile (المحسن = tf.keras.optimizers.Adam (lr = learning_rate) ،
الخسارة = 'binary_crossentropy' ،
المقاييس = ["الدقة"]
)
مصدر
يجب عليك استخدام محسنات TensorFlow إذا كنت ستقوم بتدريب نماذج tf.keras. المحسنون في tf.keras.optimizers و tf.train APIs متواجدين معًا في TensorFlow 2.0's tf.keras.optimizers. في TensorFlow 2.0 ، تلقى العديد من أدوات تحسين الأداء الأصلية لـ tf.keras ترقيات وبدائل من أجل أداء أفضل. إنها تمكننا من تطبيق المُحسِنين دون المساومة على الأداء وتوفير الوقت أيضًا.
قراءة: برنامج TensorFlow لاكتشاف الأشياء للمبتدئين
تعلم دورات علوم البيانات من أفضل الجامعات في العالم. اربح برامج PG التنفيذية أو برامج الشهادات المتقدمة أو برامج الماجستير لتتبع حياتك المهنية بشكل سريع.
تدريب النموذج
بعد أن قمنا ببناء النموذج ، يمكننا تعليمه. تدعم واجهة برمجة تطبيقات tf.keras لـ TensorFlow 2.0 واجهة برمجة تطبيقات tf.data ، لذلك يتعين عليك استخدام كائنات tf.data.Dataset لهذا الغرض. يمكن أن يؤدي التدريب بكفاءة ، ولن نضطر إلى تقديم أي تنازلات مع الأداء.
عدد_الرؤوس = 30
steps_per_epoch = round (num_train) // BATCH_SIZE
val_steps = 20
model.fit (train_data.repeat () ،
العهود = num_epochs ،
steps_per_epoch = steps_per_epoch ،
Validation_data = val_data.repeat () ،
Validation_steps = val_steps)
مصدر
بعد 30 حقبة ، زادت دقة النموذج بشكل كبير ، لكن يمكننا تحسينه بشكل أكبر. تذكر ، ذكرنا تجميد الأوزان أثناء نقل التعلم؟ حسنًا ، الآن بعد أن قمنا بتدريب رئيس التصنيف ، يمكننا إلغاء تجميد تلك الطبقات وتحسين مجموعة البيانات الخاصة بنا بشكل أكبر:
# قم بإلغاء تجميد جميع طبقات MobileNetV2
base_model.trainable = صحيح
# إعادة تجميد الطبقات حتى الطبقات التي نريد صقلها
للطبقة في base_model.layers [: 100]:
layer.trainable = خطأ
# استخدم معدل تعلم أقل
lr_finetune = معدل التعلم / 10
# إعادة تجميع النموذج
model.compile (الخسارة = 'binary_crossentropy' ،
محسن = tf.keras.optimizers.Adam (lr = lr_finetune) ،
المقاييس = ["الدقة"])
# زيادة فترات التدريب للضبط الدقيق
fine_tune_epochs = 30
total_epochs = num_epochs + fine_tune_epochs
# نموذج صقل
# ملاحظة: قم بتعيين initial_epoch لبدء التدريب بعد الحقبة الثلاثين منذ أن قمنا بذلك
# تم تدريبه مسبقًا لمدة 30 حقبة.
model.fit (train_data.repeat () ،
steps_per_epoch = steps_per_epoch ،
العهود = total_epochs ،
Init_epoch = num_epochs ،
Validation_data = val_data.repeat () ،
Validation_steps = val_steps)

مصدر
بعد 30 حقبة ، تحسنت دقة النموذج أكثر. مع المزيد من الحقب ، شهدنا مزيدًا من التحسن في دقة النموذج. الآن ، لدينا نموذج TensorFlow مناسب للتعرف على الصور يمكنه التعرف على الصبار العمودي في الصور بدقة عالية.
اقرأ أيضًا: أفكار مشروع Tensorflow للمبتدئين
تعرف على المزيد حول تصنيف الصور TensorFlow
تجعل واجهات برمجة التطبيقات عالية الأداء لـ TensorFlow وإمكانياتها تقنية قوية يستخدمها أي مبرمج. تعمل واجهات برمجة التطبيقات عالية المستوى أيضًا على إزالة التعقيد العام ، مما يجعلها أسهل في الاستخدام.
هل أنت مهتم بمعرفة المزيد عن TensorFlow وتصنيف الصور والموضوعات ذات الصلة؟ ثم نوصيك بالتحقق من دبلوم PG في IIIT-B & upGrad في التعلم الآلي والذكاء الاصطناعي المصمم للمهنيين العاملين ويقدم أكثر من 450 ساعة من التدريب الصارم ، وأكثر من 30 دراسة حالة ومهمة ، وحالة خريجي IIIT-B ، وأكثر من 5 عملي التدريب العملي على مشاريع التخرج والمساعدة في العمل مع الشركات الكبرى.