القائمة الرئيسية

الصفحات

إستعادة الصور – الجزء الرابع (Image Retrieval – Part four)

 



إستعادة الصور الجزء الرابع

part fourImage Retrieval – 




المهندس حسن فنجان عداي

 

مقدمة:

بسم إلله الرحمن الرحيم

تطرقنا في الأجزاء الثلاثة السابقة من هذه المقالة إلى ثلاثة أنواع من عمليات إستعادة الصور لأجل معرفة مايجري داخل الطبقات المختلفة المكونة للنموذج (Model) المتكون من عدة طبقات بعضها طبقات إلتفافية (Convolutional layers), ومعرفتنا تلك التي نحصل عليها تفيدنا كثيراً لمعرفة الإخفاقات التي قد تواجهنا في عملية التدريب أو لتحليل بعض الحالات المبهمة التي تواجهنا في طور الفحص للنموذج بعد كل حقبة تدريب.

في هذا الجزء سوف نتطرق إلى نوع رابع مهم جداً من أنواع إستعادة الصور ألا وهو المسمى بالإنتشار الخلفي الموجه (Guided backpropagation), والذي سوف نقوم بتوضيحه بشكل مفصل إنشاء ألله تعالى.


الإنتشار الخلفي الموجه

(Guided backpropagation)

 

تستخدم هذه التقنية للتعرف على طبيعة المرشحات (filters) الخاصة بكل طبقة إلتفافية (convolution layer) من طبقات النموذج المدرب (model), وذلك بتحديد المرشح المطلوب معرفة خواصه بعد التدريب ومن ثم القيام بتوليد صورة لإدخالها إلى النموذج ومقارنتها مع مصفوفة الخصائص (feature map) التي يولدها هذا المرشح لإيجاد دالة الفقد (loss function) وبعدها نقوم بعملية تحسين (optimization) للصورة التي ولدناها من خلال تقنية (gradient ascent), ونقوم بتكرار هذه العملية عدة مرات إلى أن تتكون لدينا صورة يمكن الإستفادة منها. من خلال شكل الصورة المتولدة لدينا سوف نتعرف على طبيعة المرشح (filter).

تشير كلمة (backpropagation) إلى التقنية المستخدمة في عملية تحديث الأوزان المكونة للمرشحات والتي تناولناها سابقاً, ولكن في حالتنا هذه تستخدم هذه التقنية في عملية تحديث لقيم بكسلات الصورة المتولدة. وتشير كلمة (Guided) الى الخلايا العصبية (neurons) المتولدة نتيجة عملية الإلتفاف (convolution)  لكل مرشح من هذه المرشحات على الصورة الداخلة إلى الطبقة (layer). وللتعرف على هذه التقنية بشكل أكثر تفصيلاً سوف نقوم بإنشاء تطبيق يقوم بإجتزاء المراحل الأولى من أحد النماذج المدربة المشهورة وقد إخترنا النموذج (VGG16) لهذا الغرض, وقد إخترنا الجزء الذي يبدأ من طبقة الإدخال (input layer) وحتى الطبقة الإلتفافية الأولى  من المرحلة الثالثة من النموذج أي (block3_conv1). وسوف نختار طبقات أخرى لاحقاً.

وسوف نبدأ الآن بمرحلة كتابة الكود وكما يلي:



شرح الكود:

الأسطر من رقم (1) إلى رقم (3): لإستدعاء المكتبات المطلوبة.

السطران (5) و (6): لتحديد قيمتين ثابتتين, وهما إسم الطبقة المراد التعرف على تفاصيلها, وكذلك حجم التحديث في بكسلات الصورة في كل خطوة تصحيح (iteration).

السطر رقم (8): لإنشاء النموذج (VGG16)  الأصلي وكذلك لتحميل الأوزان الخاصة به كما مر بنا في التطبيق السابق.

السطر رقم (13): لإنشاء النموذج الخاص بنا والذي هو جزء من النموذج الأصلي, حيث إنَّ نموذجنا هذا سوف يكون مدرباً لأنه إقتطعناه من نموذج مدرب على مجموعة البيانات المشهورة المسماة (ImageNet).


الأسطر من (21) إلى (30): لإنشاء دالة تقوم بإجراء بعض المعالجات الضرورية على الصورة المتولدة قبل القيام بعرضها حتى تكون قابلة أكثر للفهم.



السطر رقم (33): المباشرة بإنشاء الدالة الأساسية التي تقوم بكل مايلزم لتطبيق هذه التقنية.

السطر رقم (35): حيث نقوم أولاً بإنشاء صورة إفتراضية تتكون من قيم عشوائية, وهذه الصورة ذات حجم (224 x 224 x 3), وقد وضع لها بعد رابع (1) لأن النموذج الأصلي يحتاج إلى صورة ذات أربعة أبعاد.

السطر رقم (36): لإجراء بعض المعالجات على هذه الصورة لتكون أكثر ملائمة لعملية التحديث اللاحقة.

السطر رقم (39): لتحويل بيانات الصورة إلى متغير نوع (Tensor) لكي يكون قابلاً للتحديثات التي سوف تجرى عليه في المراحل اللاحقة, وكذلك لتغيير نوع البيانات التي يحملها إلى بيانات من نوع (float32).

السطر رقم (40): لإنشاء حلقة تكرارية لأجل إجراء عملية التحديث لبيانات الصورة.

السطر رقم (41): إستدعاء الدالة (GradientTape) التي تقوم بمراقبة وتسجيل قيم المتغيرات الواقعة تحتها, حيث تقوم في حالتنا هذه بتسجيل قيم الإخراج للنموذج بعد إدخال الصورة الإفتراضية التي أنشأناها سابقاً, وكذلك تسجيل قيمة (loss_value), والتي سوف نحتاجها لحساب المشتقة (gradient) لها بالنسبة الى بيانات الصورة.

السطر رقم (44): لإستدعاء الدالة (gradient) عن طريق أداة التسجيل (tape) للقيام بحساب المشتقة لقيمة (loss_value) بالنسبة لبيانات الصورة, أي إيجاد قيمة (d(loss_value) / d(input_img_data)).

السطر رقم (45): لإجراء عملية تطبيع (Normalization)  لقيمة المشتقة (grads) قبل إستخدامها في تحديث بيانات الصورة  ووضعها في المتغير الجديد (normalized_grad).

السطر رقم (46): إضافة جزء من المشتقة (normalized_grad) حسب قيمة (step_size) إلى بيانات الصورة عن طريق الدالة (assign_add).

السطر رقم (47): للتخلص من البعد الرابع للصورة وجعلها قابلة للعرض.

السطر رقم (48): لإجل إخراج الصورة من الدالة لأجل الإستخدام ولكن بعد إرسالها إلى الدالة (deprocess_image) لغرض تهيئتها للعرض.


السطر رقم (50): إستخدام الدالة (imshow) من  المكتبة (matplotlib) لإظهار الصورة المتولدة وذلك عن طريق إستدعاء الدالة (generate_pattern) وتمرير العدد (50) الذي يمثل عدد مرات إراء التحديث على بيانات الصورة المتولدة, وكذلك تمرير الرقم (0) والذي يمثل رقم المرشح (filter) التابع للطبقة المنتخبة وهي (block3_conv1).

وعند تنفيذ هذا الكود سوف تظهر لنا الصورة التالية:



وإذا رغبنا بإلتعرف على بقية المرشحات من خلال هذه التقنية أي توليد صورة تمثل الحالة المثلى للمرشح المعني بحيث يقوم بتوليد أعلى قيم للوحدات (units) المكونة لمصفوفة الخصائص (feature map) التي يولدها من خلال تمريره على بيانات الإدخال التي تدخل إلى الطبقة التي ينتمي لها هذا المرشح. ونستطيع تحقيق ذلك من خلال إضافة الكود التالي:





شرح الكود:

السطر رقم (52): لتحديد حجم الصورة المتولدة بسبب أحد المرشحات المنتخبة.

السطر رقم (53): لتحديد الحاشية التي تحيط بكل صورة.

السطر رقم (54): إنشاء صورة تكون قياساتها بحيث تستوعب مجموع الصور التي نرغب بإظهارها سويةً وكذلك الحواشي  وأعطينا لكل بكسل منها قيمة (0) ولها عمق (deep) مقداره (3) أي صورة ملونه وأودعناها في متغير سميناه (results).

السطر رقم (55): إنشاء حلقة تكرار بقدر عدد الصور بالإتجاه الأفقي.

السطر رقم (56): إنشاء حلقة تكرار بقدر عدد الصور بالإتجاه العمودي.

السطر رقم (57): الحصول على أحد الصور من ضمن (64) صورة وذلك بإستدعاء الدالة (generate_pattern) وتمرير المعاملات المطلوبة, وقمنا بإيداعها في متغير سميناه (filter_img).

الصورة أدناه تمثل نتائج تطبيق هذه التقنية على الطبقة (block4_conv1) من النموذج (VGG16) :




وبهذا نكون قد إنتهينا من هذا الجزء من المقالة والذي تطرقنا فيه إلى نوع رابع من أنواع إسترجاع الصور وهو النوع المسمى (Guided backpropagation).

وأرجو أن أكون قد وفقت بالمساهمة في توضيح هذا الموضوع, ومن ألله تعالى نستمد العون والسداد.





المهندس حسن فنجان عداي
هل اعجبك الموضوع :

تعليقات