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

البيانات
في هذه المقالة والمقالات اللاحقة ، سيتم استخدام مجموعة بيانات لتحليل التلوين العاطفي للصور. يحتوي على 1500 مثال للصور ، مقسمة إلى فئتين - إيجابية وسلبية. دعونا نلقي نظرة على بعض الأمثلة.
أمثلة سلبية
أمثلة إيجابيةتحويلات التنظيف
الآن ، ضع في اعتبارك مجموعة من التحولات المحتملة الشائعة الاستخدام لتنظيف البيانات وتنفيذها وتأثيرها على الصور.
يمكن العثور على جميع مقتطفات الشفرة في الكتاب
Preprocessing.ipynb .
إعادة التقييم
يتم تخزين الصور عادةً بتنسيق RGB (أحمر أخضر أزرق). في هذا التنسيق ، يتم تمثيل الصورة بمصفوفة ثلاثية الأبعاد (أو ثلاثية القنوات).
تحلل RGB للصورة. مخطط مأخوذ من Wikiwandيتم استخدام أحد الأبعاد للقنوات (الأحمر والأخضر والأزرق) ، ويمثل البعدان الآخران الموقع. وبالتالي ، يتم تشفير كل بكسل بثلاثة أرقام. يتم تخزين كل رقم عادةً كنوع عدد صحيح بدون إشارة من 8 بت (من 0 إلى 255).
إعادة القياس هي عملية تغير النطاق العددي للبيانات عن طريق تقسيمها ببساطة على ثابت محدد مسبقًا. في الشبكات العصبية العميقة ، قد يكون من الضروري قصر بيانات الإدخال على نطاق من 0 إلى 1 بسبب احتمال تجاوز الحد الأدنى ، ومشكلات التحسين ، والاستقرار ، وما إلى ذلك.
على سبيل المثال ، نعيد قياس بياناتنا من النطاق [0 ؛ 255] إلى النطاق [0 ؛ 1]. من الآن فصاعدا ، سوف نستخدم فئة Keras
ImageDataGenerator ، والتي تسمح لك بإجراء جميع التحولات
بسرعة .
لنقم بإنشاء مثيلين من هذه الفئة: واحدة للبيانات المحولة ، والأخرى للمصدر:

(أو للبيانات الافتراضية). من الضروري فقط تحديد ثابت التحجيم. علاوة على ذلك ، تتيح لك فئة
ImageDataGenerator دفق البيانات مباشرة من مجلد على محرك الأقراص الثابتة باستخدام طريقة
flow_from_directory .
يمكن العثور على جميع المعلمات في
الوثائق ، ولكن المعلمات الرئيسية هي: المسار إلى الدفق وحجم الصورة الهدف (إذا كانت الصورة لا تتطابق مع الحجم المستهدف ، يقوم المولد ببساطة بقصه أو إنشائه). أخيرًا ، نحصل على عينة من المولد وننظر في النتائج.
بصريا ، كلتا الصورتين متطابقتين ، ولكن السبب في ذلك هو أن أدوات Python * تقوم بتغيير حجم الصور تلقائيًا

إلى النطاق الافتراضي بحيث يمكن عرضها على الشاشة. ضع في اعتبارك البيانات الأولية (المصفوفات). كما ترى ، تختلف كتل الكتلة الخام 255 مرة بالضبط.
درجات الرمادي
نوع آخر من التحول الذي قد يكون مفيدًا هو
التدرج الرمادي ، والذي يحول صورة RGB ملونة إلى صورة يتم فيها تمثيل جميع الألوان بظلال الرمادي. قد تستخدم معالجة الصور التقليدية ترجمة درجات الرمادي مع عتبة لاحقة. يمكن لهذا الزوج من التحولات رفض وحدات البكسل المزعجة وتحديد الأشكال في الصورة. اليوم ، يتم تنفيذ جميع هذه العمليات من قبل الشبكة العصبية التلافيفية (CNN) ، ولكن التحويل الدرجات الرمادية كخطوة ما قبل المعالجة يمكن أن يكون مفيدًا. قم بتشغيل هذه الخطوة في Keras بنفس فئة المولد.

هنا نقوم بإنشاء مثيل واحد فقط من الفصل وأخذ مولدين مختلفين منه. يقوم المولد الثاني بتعيين معلمة
color_mode إلى "تدرج الرمادي" (القيمة الافتراضية هي "RGB").
توسيط العينات
لقد رأينا بالفعل أن قيم البيانات الخام تقع في النطاق من 0 إلى 255. وبالتالي ، فإن عينة واحدة هي مجموعة ثلاثية الأبعاد من الأرقام من 0 إلى 255. في ضوء مبادئ استقرار التحسين (التخلص من مشكلة اختفاء أو تشبع القيم) ،
قد يكون من الضروري تطبيع مجموعة البيانات بحيث يكون متوسط كل عينة بيانات صفرًا .

لهذا ، من الضروري حساب متوسط القيمة على العينة بأكملها وطرحها من كل رقم في العينة المحددة.
في Keras ، يتم ذلك باستخدام
معامل samplewise_center .
تطبيع الانحراف المعياري للعينات
تعتمد مرحلة المعالجة المسبقة هذه على نفس فكرة توسيط العينات ، ولكن بدلاً من تعيين المتوسط إلى 0 من ، فإنها تحدد الانحراف المعياري إلى 1.

يتم التحكم في تطبيع الانحراف المعياري بواسطة المعلمة
samplewise_std_normalization . وتجدر الإشارة إلى أن هاتين الطريقتين لتطبيع العينات غالبًا ما يتم استخدامهما معًا.
يمكن استخدام هذا التحول في نماذج التعلم العميق لتحسين استقرار التحسين من خلال تقليل تأثير انفجار التدرجات.
توسيط الميزة
استخدم القسمان السابقان تقنية التطبيع التي نظرت في كل عينة من البيانات الفردية. هناك نهج بديل لإجراء التطبيع. ضع في اعتبارك كل رقم في مصفوفة الصورة كعلامة. ثم
كل صورة متجه ميزة . هناك العديد من هذه المتجهات في مجموعة البيانات ؛ لذلك ، يمكننا اعتبارها بعض
التوزيع غير المعروف. هذا التوزيع متعدد المعلمات ، وسيكون بعده مساوياً لعدد الميزات ، أي العرض × الارتفاع × 3. على الرغم من أن التوزيع الحقيقي للبيانات غير معروف ، يمكنك محاولة تطبيعه بطرح متوسط قيمة التوزيع. تجدر الإشارة إلى أن متوسط القيمة هو متجه من نفس البعد ، أي أنه أيضًا صورة. بعبارة أخرى ، نحن نحسب متوسط مجموعة البيانات بالكامل ، وليس فوق عينة واحدة.
هناك معلمة Keras خاصة تسمى
featurewise_centering ، ولكن للأسف ، اعتبارًا من أغسطس 2017 ، حدث خطأ في تنفيذها ؛ لذلك ننفذها بأنفسنا. أولاً ، نعتبر مجموعة البيانات بالكامل في الذاكرة (يمكننا تحملها ، لأننا نتعامل مع مجموعة بيانات صغيرة). قمنا بذلك عن طريق تعيين حجم الحزمة على حجم مجموعة البيانات. ثم نحسب متوسط الصورة على مجموعة البيانات بالكامل ونطرحها أخيرًا من صورة الاختبار.

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

أثناء إعادة القياس ، لأن تطبيع الانحراف المعياري ليس أكثر من إعادة الحفظ مع ثابت محسوب بطريقة معينة ، ومع إعادة بسيطة ، يتم تحديد الثابت يدويًا. لاحظ أن فكرة مماثلة لتطبيع حزم البيانات هي في صميم تقنية التعلم العميق الحديثة التي تسمى
BatchNormalization .

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

يتم ضبط وضع التعبئة باستخدام معلمة
fill_mode . يدعم طرق التعبئة المختلفة ، ولكن هنا نستخدم الطريقة
الثابتة كمثال.

التحول الأفقي
هذا النوع من التحول يغير الصورة في اتجاه معين على طول المحور الأفقي (يسار أو يمين).

يمكن تحديد حجم التحول باستخدام المعلمة
width_shift_range وقياسها كجزء من إجمالي عرض الصورة.
التحول الرأسي

يغير الصورة على المحور الرأسي (لأعلى أو لأسفل). تُسمى المعلمة التي تتحكم في نطاق
النقل منشئ
height_shift وتُقاس أيضًا كجزء من الارتفاع الكلي للصورة.
التقليم
يؤدي تحويل الاقتصاص أو الاقتصاص إلى إزاحة كل نقطة في الاتجاه الرأسي بمقدار يتناسب مع المسافة من تلك النقطة إلى حافة الصورة. لاحظ أنه في الحالة العامة ، لا يجب أن يكون الاتجاه رأسيًا وتعسفيًا.

تسمى المعلمة التي تتحكم في الإزاحة
shear_range وتتوافق مع زاوية الانحراف (بالراديان) بين الخط الأفقي في الصورة الأصلية والصورة (بالمعنى الرياضي) لهذا الخط في الصورة المحولة.
تكبير / تصغير

هذا النوع من التحويل يقترب من الصورة الأصلية أو يزيلها.
تتحكم المعلمة
zoom_range في عامل التكبير / التصغير.

على سبيل المثال ، إذا كان
zoom_range 0.5 ، فسيتم تحديد عامل التكبير / التصغير من النطاق [0.5 ، 1.5].

الوجه الأفقي

قلب الصورة بالنسبة للمحور الرأسي. يمكن تشغيله أو إيقاف تشغيله باستخدام معلمة
أفقي .
الوجه الرأسي

قلب الصورة حول المحور الأفقي. تتحكم المعلمة
vertical_flip (من النوع البولي) في وجود أو عدم وجود هذا التحويل.
مزيج
نطبق جميع أنواع التحولات الموصوفة للمكمل في نفس الوقت ونرى ما سيحدث. تذكر أن المعلمات لجميع التحويلات يتم اختيارها عشوائيًا من نطاق معين ؛ لذلك ، يجب أن نحصل على مجموعة من العينات بدرجة كبيرة من التنوع.
نبدأ
ImageDataGenerator مع جميع المعلمات المتاحة والتحقق من صنبور أحمر على الصورة.

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

الخلاصة
تقدم هذه المقالة نظرة عامة على التقنيات الأساسية للمعالجة المسبقة للصور ، مثل: التحجيم ، والتطبيع ، والتدوير ، والتحويل ، والاقتصاص. كما أظهروا تنفيذ تقنيات التحويل هذه باستخدام Keras وإدخالها في عملية التعلم العميق سواء من الناحية الفنية (فئة
ImageDataGenerator ) وأيديولوجيًا (ملحق البيانات).