مقدمة حول بيانات الصور
- 10 دقائق
في رؤية الحاسوب، عادة ما نحل واحدة من المسائل التالية:
- تصنيف الصور هو أبسط مهام، عندما نحتاج إلى تصنيف صورة إلى واحدة من العديد من الفئات المحددة مسبقا، مثل التمييز بين قطة وكلب في صورة، أو التعرف على رقم مكتوب بخط اليد.
- اكتشاف الكائنات مهمة أصعب قليلا، حيث نحتاج إلى إيجاد كائنات معروفة على الصورة وتحديد موقعها، أي إرجاع صندوق الإحاطة لكل كائن معترف به.
- التقسيم مشابه لاكتشاف الأجسام، لكن بدلا من إعطاء مربع حدود، نحتاج إلى إرجاع خريطة بكسل دقيقة تحدد كل كائن معترف به.
صورة من دورة CS231n في ستانفورد
الصور كموترات
تعمل رؤية الحاسوب مع الصور. كما تعلم على الأرجح، الصور تتكون من بكسل، لذا يمكن اعتبارها مجموعة مستطيلة (مصفوفة) من البكسلات.
في الجزء الأول من هذه الوحدة، سنتناول التعرف على الأرقام المكتوبة بخط اليد. سنستخدم مجموعة بيانات MNIST، التي تتكون من صور رمادية لأرقام مكتوبة بخط اليد، بحجم 28x28 بكسل. يمكن تمثيل كل صورة كمصفوفة 28x28، وعناصر هذه المصفوفة تدل على شدة البكسل المقابل - إما في النطاق من 0 إلى 1 (حيث تستخدم أعداد الفاصل العائمة)، أو من 0 إلى 255 (الأعداد الصحيحة). مكتبة بايثون شهيرة تسمى numpy غالبا ما تستخدم مع مهام رؤية الحاسوب، لأنها تتيح لك العمل مع مصفوفات متعددة الأبعاد بفعالية.
للتعامل مع الصور الملونة، نحتاج إلى طريقة لتمثيل الألوان. في معظم الحالات، نمثل كل بكسل بثلاث قيم شدة، تتوافق مع مكونات الأحمر (R)، الأخضر (G)، والأزرق (B). يسمى هذا الترميز اللوني RGB، وبالتالي فإن صورة ملونة بحجم W×H ستمثل كمصفوفة بحجم H×W×3 (أحيانا قد يختلف ترتيب المكونات، لكن الفكرة نفسها). في تمثيل المصفوفات، يأتي الارتفاع (عدد الصفوف) قبل العرض (عدد الأعمدة)، وهو عكس الاتفاقية الشائعة للصورة W×H.
تسمى المصفوفات متعددة الأبعاد أيضا بالموترات. استخدام الموترات لتمثيل الصور له ميزة أيضا، لأنه يمكننا استخدام بعد إضافي لتخزين تسلسل من الصور. على سبيل المثال، لتمثيل جزء فيديو مكون من 200 إطار بأبعاد 800x600 (عرض × ارتفاع)، يمكننا استخدام موتر بحجم 200x600x800x3. تذكر أن أبعاد الموتر تستخدم ترتيب H×W (الصفوف الكبرى)، وليس نظام W×H الشائع في محررات الصور. الترتيب هنا هو الإطارات × ارتفاع (600) × عرض (800) × القناة. يعرف هذا الترتيب باسم channels_last و هو الافتراضي في TensorFlow؛ بعض الأطر الأخرى تضع القنوات قبل الارتفاع والعرض (channels_first).
import tensorflow as tf
import keras
import matplotlib.pyplot as plt
import numpy as np
# Prints the installed TensorFlow version
print(tf.__version__)
سنستخدم إطار عمل كيراس في تجاربنا. خلال هذه الوحدة، نستخدم import keras (نمط استيراد Keras 3 المستقل)، والذي يتطلب TensorFlow 2.16 أو أحدث (أو تثبيت مستقل عبر pip install keras>=3.0). إذا كنت تستخدم نسخة TensorFlow 2.x أقدم، استبدلها import keras ب from tensorflow import keras.
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
# Output: (60000, 28, 28) (60000,)
print(x_train.shape, y_train.shape)
# Output: (10000, 28, 28) (10000,)
print(x_test.shape, y_test.shape)
تصور مجموعة بيانات الأرقام
الآن بعد أن قمنا بتحميل مجموعة البيانات، يمكننا تصور بعض الأرقام:
fig, ax = plt.subplots(1, 7)
for i in range(7):
ax[i].imshow(x_train[i])
ax[i].set_title(y_train[i])
ax[i].axis('off')
# Displays a row of seven handwritten digit images with their labels
هيكل مجموعة البيانات
لدينا ما مجموعه 60,000 صورة تدريبية و10,000 صورة اختبار، وكل صورة لها حجم 28×28 بكسل:
print('Training samples:', len(x_train))
print('Test samples:', len(x_test))
print('Tensor size:', x_train[0].shape)
print('First 10 digits are:', y_train[:10])
print('Type of data is ', type(x_train))
# Output:
# Training samples: 60000
# Test samples: 10000
# Tensor size: (28, 28)
# First 10 digits are: [5 0 4 1 9 2 1 3 1 4]
# Type of data is <class 'numpy.ndarray'>
كما ترى، نوع البيانات هو numpy المصفوفة. يتم تمثيل كل شدة بكسل بقيمة صحيحة بين 0 و255:
print('Min intensity value: ', x_train.min())
print('Max intensity value: ', x_train.max())
# Output:
# Min intensity value: 0
# Max intensity value: 255
السبب في كونها بين 0 و255 هو أن كل بكسل يمثل بواسطة عدد صحيح من 8 بت. في كثير من الحالات، خاصة عند العمل مع الشبكات العصبية، يكون من الأكثر ملاءمة تكبير جميع القيم إلى النطاق [0, 1] عن طريق القسمة على 255. تسمى هذه العملية التطبيع:
x_train = x_train.astype(np.float32) / 255.0
x_test = x_test.astype(np.float32) / 255.0
# Pixel values are now floating point numbers in the range [0, 1]
الآن لدينا البيانات، ونحن جاهزون لبدء تدريب أول شبكة عصبية لنا!
اختبر معلوماتك
الملاحظات
هل كانت هذه الصفحة مفيدة؟
لا
هل تحتاج إلى مساعدة مع هذا الموضوع؟
هل تريد محاولة استخدام Ask Learn لتوضيح هذا الموضوع أو إرشادك خلاله؟