اذهب إلى المحتوى

السؤال

Recommended Posts

  • 1
نشر

يمكنك استخدام هذا النموذج من خلال الموديول application.vgg16 في كيراس وتنسرفلو:

tf.keras.applications.vgg16.VGG16

وبالتالي لإنشاء النموذج نقوم بمايلي:

# نقوم أولاً بإنشاء المودل
from tensorflow.keras.applications.vgg16 import VGG16 # استيراده
model = VGG16() # تعريف كائن يمثل المودل
print(model.summary()) # يمكنك استعراض شكل النموذج بالشكل التالي
# كما يمكنك عرض رسم بياني يمثل النموذج 
from keras.utils.vis_utils import plot_model
plot_model(model, to_file='vgg.png')

الآن لتكن لدينا صورة ما ونريد تصنيفها من خلال هذا النموذج، فأول خطوة يجب القيام بها هي تحميل الصورة، ويمكننا القيام بذلك من خلال الدالة load image:

# نقوم بتحميل الصورة 
from tensorflow.keras.preprocessing.image import load_img
image = load_img('/car.jpg', target_size=(224, 224)) # تعديل حجم الصورة بشكل يتناسب مع الحجم الذي تتطلبه الشبكة

الصورة التي استخدمناها هي صورة سيارة:
car.jpg.3258bbd26eca4fe7496f8e82313b3e33.jpg

الآن يجب أن نقوم بتحويل الصورة إلى شكلها الرياضي (مصفوفة بكسلات) من خلال الدالة img_to_array:

# تحويل المصفوفة إلى مصفوفة 
from tensorflow.keras.preprocessing.image import img_to_array
image = img_to_array(image)
# أبعاد الصورة
image.shape
# (224, 224, 3)

الآن الصورة ستكون ب 3 أبعاد (طول وعرض وقنوات لونية)، لكن النموذج vgg16 (وأي نموذج آخر يتعامل مع الصور) يتوقع منك أن تمرر الصور في batches (حزم أو مجموعة من الصور دفعة واحدة). لذا يجب أن نقوم بتوسيع أبعاد الصورة  (جعلها رباعية الأبعاد) بحيث أن البعد الجديد سوف يمثل عدد العينات(عدد الصور):

# نقوم بتوسيع أبعاد الصورة
image = image.reshape((1, image.shape[0], image.shape[1], image.shape[2]))
# عرض حجمها الآن
image.shape
# (1, 224, 224, 3) # البعد الجديد يمثل عدد الصور وهنا لدينا صورة واحدة فقط

الآن علينا القيام ببعض عمليات المعالجة على الصورة، بشكل يتطابق مع العمليات التي تمت على الصور أثناء تدريب النموذج، وحسب الورقة البحثية بهذا النموذج:

اقتباس

Very Deep Convolutional Networks for Large-Scale Image Recognition, 2014

فإن مانحتاجه هو عملية واحدة فقط وهي طرح متوسط قيم ال RGB من كل بكسل، والخبر الجميل أنك لن تضطر للقيام بذلك بشكل يدوي وإنما هناك دالة preprocess_input تقوم بمايلزم:

# القيام بمعالجة الصورة بشكل يتطابق مع عمليات الممعالجة التي تمت على الصور التي تم تدريب النموذج عليها
from keras.applications.vgg16 import preprocess_input
image = preprocess_input(image)

الآن الصورة (أو مجموعة الصور) جاهزة لأن يتم إنشاء توقعات لها من خلال النموذج:

# إيجاد التوقعات
yhat = model.predict(image)
yhat.shape
# (1, 1000)

كما نعلم فإن هذا النموذج تم تدريبه على مجموعة بيانات ImageNet  التي تحوي ألف فئة مختلفة وبالتالي الخرج سيكون 1000 قيمة احتمالية تمثل احتمال انتماء هذه الصورة لكل فئة. لذا نحتاج لطريقة نستطيع فيها أخذ أكبر احتمال وهذا مايقدمه لنا decode_predictions:

from keras.applications.vgg16 import decode_predictions
# تحويل الاحتمالات إلى تسميات فئة 
label = decode_predictions(yhat)
label
"""
[[('n04037443', 'racer', 0.562338),  # لاحظ أن أقوى احتمال هو أن الصورة تمثل صورة متسابق باحتمالية قدرها 56 بالمئة
  ('n04285008', 'sports_car', 0.28281146), # ثاني أكبر احتمال هو أنها صورة سيارة سباق باحتمالية قدرها 28 بالمئة
  ('n03100240', 'convertible', 0.08739577),
  ('n02974003', 'car_wheel', 0.037510887),
  ('n03930630', 'pickup', 0.010782746)]]
"""

الآن إذا كنت تريد استخلاص أكبر احتمال (التوقع الأساسي):

# استرداد النتيجة الأكثر احتمالا ، على سبيل المثال أعلى احتمال 
label = label[0][0]
# طباعة التصنيف
print('%s (%.2f%%)' % (label[1], label[2]*100))
# racer (56.23%)

هذا كل شيئ...

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...