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

الصفحات

إستعادة الصور-الجزء الأول (Image Retrieval-part one)

 



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

Image Retrieval - part one





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


مقدمة:

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

غالبا ماتوصف نماذج التعلم العميق بأنها غامضة (Black boxes) أي أن العمليات التي تجري داخلها سواءاً في مرحلة التدريب أو في مرحلة الفحص لايمكن فهمها من قبل الإنسان بشكل مباشر, وبما أننا نكون أحياناً بحاجة ماسة الى مراقبة مايجري في كلا طوري التشغيل (أي طور التدريب وطور الفحص) نلجأ إلى إستخدام بعض التقنيات اللازمة لتحويل هذه البيانات الى بيانات وأشكال يمكن فهمها من قبل الإنسان وتسمى الخصائص المرئية (visual features), وسوف نتطرق إلى بعض هذه التقنيات المستخدمة في هذا المجال وهو مايسمى بموضوع إسترجاع الصور (Image Retrieval).


متى نحتاج إلى عملية إسترجاع الصور؟

1 – نحتاج في بعض الحالات إلى مراقبة مايجري داخل النموذج لمعرفة السبب وراء خلل معين يحدث إثناء

     التدريب أو الإختبار.

2 – نحتاج إلى هذه العملية في محركات البحث عن الصور, حيث إن البحث عن صورة معينة من الأرشيف يمثل مشكلة صعبة في أبحاث رؤية الكمبيوتر, حيث إنَّ معظم محركات البحث تقوم بعملية البحث بإستخدام

الأساليب التقليدية القائمة على النصوص والتي تعتمد على التسميات التوضيحية والبيانات الوصفية. في العقدين الأخيرين ، تم إعتماد تقنية جديدة لاسترجاع الصور  تسمى إسترجاع الصور بناءاً على المحتوى

( CBIR Content Based Image Retrieval or).

3 – نحتاج في بعض الأحيان إلى معرفة مواصفات المرشحات (filters) في النموذج المدرب, وهذه المعرفة تتم من خلال إظهار شكل المرشح المدرب المعني بشكل مباشر وسوف نتعرف على نوع الخاصية (feature) التي يقوم بإستخراجها من البيانات القادمة إلى الطبقة (layer) الذي ينتمي لها هذا المرشح (filter).

4 – نحتاج في أحيان أخرى إلى التعرف على مواصفات الفلتر المدرب (trained filter) بشكل غير مباشر وذلك بتوليد صورة مدخلة إلى النموذج بحيث يكون الفلتر المعني قد ولد مصفوفة خصائص (feature map) تحمل أعلى القيم, وهذه النقطة سوف نقوم بتفصيلها لاحقاً إن شاء ألله.


توضيح مفهوم الخصائص المرئية

(Understanding visual features)

كثيراً ماتُنتَقد نماذج التعلم العميق بأنها غير ممكنة التفسير. غالبًا ما يُعتبر النموذج القائم على الشبكة العصبية وكأنه صندوق  أسود لأنه من الصعب على البشر تفسير عمل نموذج التعلم العميق ورؤية الصور أو الأشكال

التي تحويها الطبقات المخفية (Hidden layers) في النموذج, حيث إنَّ الصور الداخلة إلى النموذج تطرأ عليها تحولات غير خطية بسبب دوال التنشيط (Activation functions), وبالتالي تصبح غير مفهومة من قبل الإنسان إلا بعد إجراء معالجة معينة عليها حيث تصبح بعدها قابله للفهم من قبل الإنسان فتسمى حينئذٍ بالخصائص المرئية (visual features).

ذكرنا أنَّ هناك نوعين من الأشكال نحتاج إلى جعلها مرئية ومفهومة وهما:

1 – مصفوفات الخصائص (Feature maps) وتسمى أيضاً (Activations).

2 – المرشحات (Filters) وتسمى أيضاً (Gradients).

فلكي نجعل النوع الأول من الأشكال (Activations) قابل للرؤية نستخدم التقنيات التالية:

1 – تقنية أقرب الجيران (Nearest neighbour): في هذه التقنية تؤخذ الصورة الخارجة من الطبقة بعد عملية التنشيط (Activation), وتؤخذ صور أخرى كذلك بعد إدخالها إلى نفس الطبقة وتجرى عليها عملية تصنيف بإستخدام خوارزمية (K- Nearest Neighbour ), حيث يتم عرضها مع الصور القريبة منها جميعاً.

2 – تقنية تخفيض الأبعاد (Dimensionality reduction): في هذه التقنية يتم تخفيض أبعاد الصورة الخارجة من الطبقة بعد عملية التنشيط عن طريق إستخدام تقنية تسمى تحليل المكون الرئيسي (principal component analysis PCA) أو بإستخدام طريقة ثانية هي تقنية تضمين الجار العشوائي

(t-Distributed Stochastic Neighbor Embedding (t-SNE)),

 حيث تصبح قابلة للعرض ببعدين أو بثلاثة أبعاد.

3 – تقنية البقع القصوى (Maximal patches): يتم تنشيط واحدة من الخلايا العصبية ويتم أخذ البقعة المقابلة مع أقصى قدر من التنشيط.

4 – تقنية الحجب أو التغطية (Occlusion): يتم تغطية الصور أو حجبها في مواضع مختلفة ويظهر التنشيط (Activation)  كخرائط التمثيل الحراري (Heat maps)  لفهم الأجزاء المهمة من الصور.


مشاهدة البيانات الضمنية

(Embedding visualization):

المقصود بالبيانات الضمنية هي البيانات التي تقوم الطبقات المخفية في النموذج بإخراجها إثناء عملية التدريب أو إثناء عملية الإختبار وتكون في الأساس غير قابلة للمشاهدة كصور بالنسبة للإنسان لأنها تكون على شكل بيانات ذات أبعاد متعددة, لذلك يتم اللجوء إلى بعض التقنيات التي تقوم بتحويل هذه البيانات الى ثنائية أو ثلاثية الأبعاد.

ومثال على ذلك لو أخذنا نموذج مدرب على عملية تصنيف الصور التي تحتوي على أرقام مكتوبة بخط اليد

وقمنا بحفظ مايدور إثناء عملية التدريب لهذا النموذج في ملفات خاصة, ثم قمنا بإختباره من خلال إدخال بعض الصور الجديدة إليه وإستخدمنا أداة خاصة توفرها لنا مكتبة (Tensorflow) والتي تسمى (Tensorboard). وقد قمنا بإنشاء شبكة عصبية إصطناعية بسيطة وقمنا بتدريبها وسجلنا مايجري داخلها وقمنا بتخزين بياناتها في مجلد خاص إسمه ("logs_one") وكما موضح في الكود الأتي:




شرح الكود:

الأسطر من (1) لغاية (7): لأجل جلب المكتبات المطلوبة وقد مر ذكرها سابقاً.

السطر رقم (8): لأجل إستدعاء كلاس إضافي تحت إسم (TensorResponseBoard) يقوم بوراثة الكلاس الأصلي المسمى (TensorBoard) حيث إنَّ هذا الأخير لايفي بالغرض تماماً حيث إنَّه لايدعم إظهار الصور من نوع (Sprite images) والتي سوف نتعرف عليها لاحقاً. وقد قمنا بإنشاءه في ملف سميناه (tensor_response_board.py) ووضعناه في المجلد الخاص بالتطبيق.

الأسطر من (10) لغاية (14): لأجل الإعلان عن بعض الثوابت التي نحتاجها في التطبيق.

السطران (15) و (16): لأجل إنشاء المجلد الخاص بالسجلات.

الأسطر من (18) لغاية (24): لأجل تحميل البينات اللازمة لتدريب وإختبار النموذج, وكذلك إجراء بعض       التعديلات عليها.


الأسطر من (26) لغاية (40) : لإنشاء دالة (function) تقوم بتكوين صورة شاملة تتكون من جميع الصور التي نقوم بإدخالها إلى النموذج المدرب لأجل الإختبار وكذلك لإظهارها إثناء عملية ال(embeddings_visualization).  وتحفظ هذه الصورة في ملف إسمه ('sprite_images.png').

السطر رقم (40) : لإخبارنا بأنَّ عملية الإنشاء قد تمت بنجاح.

السطرين (42) و (43): لتغيير شكل البيانات من ثلاثة أبعاد إلى بعدين فقط, أي من (-1, 28, 28) إلى

(-1, 784), لأجل أن يكون مناسباً لإدخاله إلى النموذج إثناء عملية التدريب وكذلك الإختبار.

السطر رقم (55): لتعيين مكان تخزين الملف نوع (check point) والذي يمثل أهم ملف من ملفات تسجيل الأحداث التي تجري أثناء التدريب والإختبار.

الأسطر من (57) إلى (68): لتوليد المتغير الخاص بمتطلبات إظهار البيانات المنتخبة (Embeddings) والتي سوف تظهر على شكل صور مفهومة للإنسان, وهذه المتطلبات تسمى (callback).


الأسطر من (70) إلى (72): لإنشاء نموذج بسيط يتكون من طبقتين فقط هما طبقة مخفية (Hidden layer)  من نوع (Dense) تتكون من (128) من الوحدات (units)  وقد أعطيناها الإسم (features’), وهذه الطبقة هي التي سوف نقوم بإظهار القيم الخارجة منها والتي تسمى (Embeddings). والطبقة الثانية في هذا النموذج هي طبقة إخراج (output layer), حيث إنها من نوع (Dense)  أيضاً وتتكون من (10) من الوحدات (units)  بعدد الأرقام المكتوبة بخط اليد (Hand written digits).

الأسطر من (74) إلى (78): لإجراء عملية تهيئة للنموذج (compile) لكي يصبح جاهزاً لعملية التدريب حيث تعطى له المستلزمات المطلوبة في عملية تحديث الأوزان مثل دالة الفقد (loss function) وكذلك نختار أحد طرق التحسين (optimizer) المناسبة. وكذلك نختار المقياس الذي يظهر لنا إثناء عملية التدريب.

الأسطر من (80) إلى (88): لبدء عملية التدريب, وقد إخترنا البيانات الخاصة بالتدريب وهي (x_train, y_train), وكذلك حجم كل دفعة من البيانات التي تمرر تباعاً. كذلك نختار ال(Callback) الذي أنشأناه سابقاً.

وكذلك عدد المرات التي تكرر فيها البيانات المدخلة إلى النموذج (Epochs). وكذلك نختار قيمة الإطناب في عرض التفاصيل (Verbose), وأخيراً نختار البيانات التي ندخلها إلى النموذج بعد كل حقبة (Epoch) لأجل متابعة مسار التدريب وهذه البيانات تسمى (Validation data), حيث إستخدمنا هنا بيانات الإختبار.

الأسطر من (90) إلى (92):  لأجل تقييم النموذج بعد التدريب, حيث نقوم بإدخال بيانات الأختبار

 

(x_test, y_test), وقد إخترنا هنا قيمة الإطناب (verbose=0) لأننا سوف نظهر النتائج بشكل منفصل من خلال الأكواد الموجودة في السطرين اللاحقين (91, 92).

بعد التنفيذ نحصل على الدقة (96.9%) وكما موضح في الصورة التالية:

كذلك نلاحظ ظهور مجلد جديد تحت إسم (logs_one)  من ضمن مكونات المشروع وكما مبين في الصورة التالية:

إذا قمنا بفتح هذا المجلد سوف نلاحظ مجموعة من الملفات والتي تم تسجيل مجموعة الأحداث التي حصلت إثناء التدريب والإختبار فيها, وكما في الصورة التالية:

ولأجل تشغيل أداة (TensorBoard) وملاحظة النتائج التي نطمح بالحصول عليها من خلال هذا التطبيق الذي قمنا بإنشاءه وتنفيذه سوف نقوم بعمل الخطوات التالية:

1 – نقوم بتشغيل واجهة (Anaconda Prompt) ونقوم بالإنتقال للبيئة التي فيها (Tensorflow 1.15) وكما موضح في الصورة:

بعدها نكتب الأمر التالي:

بعد تنفيذ هذا الأمر ننتظر قليلاً  حتى تظهر النتيجة التالية:


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





وبهذا نكون قد إنتهينا من الجزء الأول من سلسلة المقالات التي تخص موضوع إسترجاع الصور (Image Retrieval), وقد تناولنا في هذا الجزء موضوع  مشاهدة البيانات الضمنية (Embeddings visualization), حيث تناولناه من الناحية النظرية حيث وضحنا أولاً مالمقصود به كمفهوم وماهي الحاجة إليه, ثم قمنا بإنشاء وتنفيذ أحد التطبيقات المبتنية عليه.

سوف نتطرق في المقالة اللاحقة إلى موضوع آخر من مواضيع عملية إستعادة الصور (Image Retrieval) إنشاء ألله تعالى.





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







 

هل اعجبك الموضوع :

تعليقات