إزالة الضوضاء من الصور باستخدام شبكة عصبية ذاتية التشفير – الجزء 4

إزالة الضوضاء من الصور باستخدام شبكة التشفير التلقائي

إنتاج صور صاخبة

الان، الصور المستهدفة للشبكة العصبية جاهزة للاستخدام. الآن علينا إنشاء صور الإدخال للشبكة عصبية ذاتية التشفير. ستكون هذه الصور هي النسخة الأصلية للصور، باستثناء أنه سيتم إضافة مجموعة ضوضاء عشوائية إليها. بالنسبة للضوضاء، سنستخدم التوزيع الطبيعي بمتوسط ​​صفر وانحراف معياري قدره 0.3. لهذا الغرض، فإن الوظيفة numpy.random.normal مناسبة:

trvaX = trvaY + np.random.normal(loc=0, scale=0.3, size=trvaY.shape)
teX = teY + np.random.normal(loc=0, scale=0.3, size=teY.shape)

بعد تطبيق الكود أعلاه، ستأخذ بعض قيم المصفوفة أرقامًا خارج النطاق [0،1]. لمنع حدوث ذلك، نستخدم وظيفة numpy.clip:

1.	trvaX = np.clip(a=trvaX, a_min=0, a_max=1)
2.	teX = np.clip(a=teX, a_min=0, a_max=1)

تقسيم مجموعة البيانات

تنقسم مجموعة بيانات MNIST في Keras في البداية إلى مجموعات بيانات تدريب واختبار. نظرًا لأننا نعتزم الحصول على مجموعة بيانات تحقق أيضًا، فإننا نستخدم وظيفة sklearn.model_selection.train_test_split:

1.	trX, vaX, trY, vaY = ms.train_test_split(trvaX,
2.	                                         trvaY,
3.	                                         test_size=sVa,
4.	                                         random_state=0,
5.	                                         shuffle=True)

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

تصور مجموعة البيانات

بعد تحضير مجموعة البيانات، يمكننا عرض بعض منها. بالنظر إلى أن هذه العملية يجب أن تكون عشوائية، فإننا نتصرف على النحو التالي:

1.	nDtr = trX.shape[0]
2.	I = np.arange(start=0, stop=nDtr, step=1)
3.	np.random.shuffle(I)
4.	
5.	for i in I[:2]:
6.	    plt.subplot(1, 2, 1)
7.	    plt.imshow(trY[i], cmap='gray')
8.	    plt.title('Main Image')
9.	    plt.subplot(1, 2, 2)
10.	    plt.imshow(trX[i], cmap='gray')
11.	    plt.title('Noised Image')
12.	    plt.show()

في السطر الخامس من هذا الرمز، يتم استخدام التعبير [: 2]، مما يؤدي إلى عرض عنصرين فقط. يمكن زيادة هذا الرقم حسب الحاجة. بعد تنفيذ الكود أعلاه، يتم الحصول على الرسمين البيانيين التاليين:

إزالة الضوضاء من الصور باستخدام شبكة عصبية ذاتية التشفير

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

إنشاء وتدريب شبكة عصبية ذاتية التشفير

في ما يلي، سنحاول إزالة التشويش من الصور ذات الشبكات العصبية ذاتية التشفير. يمكنك الآن إنشاء الشبكة باستخدام الفصل المكتوب:

1.	DN = AEDN(nConvolution, RandomState=RandomState)

بهذه الطريقة يتم إنشاء الكائن. الآن نقوم بإنشاء الشبكة العصبية عن طريق إدخال مجموعة بيانات التدريب X:

1.	DN.Create(trX)

ملخص النموذج

بعد إنشاء النموذج، يمكننا عرض summary:

1.	DN.Summary()

في إخراج الكود أعلاه، سيكون لدينا:

1.	Model Summary:
2.	Model: "Autoencoder"
3.	_________________________________________________________________
4.	 Layer (type)                Output Shape              Param #
5.	=================================================================
6.	 conv2d (Conv2D)             (None, 28, 28, 64)        640
7.	
8.	 leaky_re_lu (LeakyReLU)     (None, 28, 28, 64)        0
9.	
10.	 max_pooling2d (MaxPooling2D  (None, 14, 14, 64)       0
11.	 )
12.	
13.	 conv2d_1 (Conv2D)           (None, 14, 14, 32)        18464
14.	
15.	 leaky_re_lu_1 (LeakyReLU)   (None, 14, 14, 32)        0
16.	
17.	 max_pooling2d_1 (MaxPooling  (None, 7, 7, 32)         0
18.	 2D)
19.	
20.	 conv2d_transpose (Conv2DTra  (None, 14, 14, 32)       9248
21.	 nspose)
22.	
23.	 leaky_re_lu_2 (LeakyReLU)   (None, 14, 14, 32)        0
24.	
25.	 conv2d_transpose_1 (Conv2DT  (None, 28, 28, 64)       18496
26.	 ranspose)
27.	
28.	 leaky_re_lu_3 (LeakyReLU)   (None, 28, 28, 64)        0
29.	
30.	 conv2d_2 (Conv2D)           (None, 28, 28, 1)         577
31.	
32.	 activation (Activation)     (None, 28, 28, 1)         0
33.	
34.	=================================================================
35.	Total params: 47,425
36.	Trainable params: 47,425
37.	Non-trainable params: 0
38.	_________________________________________________________________

بهذه الطريقة، يمكننا أن نرى أن النموذج يحتوي على طبقة إخراج واحدة و 11 طبقة مخفية. تتم كتابة أبعاد الإخراج لكل طبقة أمامها. يتم أيضًا تقديم عدد المعلمات المستخدمة في كل طبقة في نهاية كل سطر. لاحظ أن الطبقات التلافيفية والطبقات الضوئية فقط لها معلمات وقابلية للتعلم. نقطة أخرى مهمة هي أبعاد 7x7x32 في نهاية شبكة التشفير. في إخراج هذه الشبكة، تم إرجاع 32 صورة بأبعاد 7×7، والتي تحتوي على أهم المعلومات الخاصة بالصورة المدخلة. كل طبقة Maxpolling2D تقسم أبعاد الصورة المدخلة إلى النصف، بينما تضاعف كل طبقة Conv2DTranspose أبعاد الصورة.

إخراج الطبقة الأخيرة من الصورة التلافيفية لها أبعاد 28x28x64، وهذا غير مناسب. الطبقة التلافيفية التالية، التي تحتوي على مرشح واحد فقط، تقوم بتصحيح هذه الأبعاد وإعادتها إلى القيمة الصحيحة. تحتوي هذه الشبكة على مجموعة من 47425 معلمة، يمكن تدريبها جميعًا.

مخطط نموذجي

يمكننا أيضًا استخدام طريقة الرسم لرؤية بنية النموذج بصريًا في شكل صورة. لاحظ أن وظيفة keras.utils.plot_model تستخدم مكتبات pydot و Graphviz وبرنامج Graphviz. إذا لم يتم تثبيت هذه العناصر، فسيواجه هذا السطر من التعليمات البرمجية مشاكل، والتي يمكن comment عليها ببساطة:

1.	DN.Plot()

في إخراج هذا الرمز، سيتم إنشاء صورة باسم Model.png بجوار البرنامج:

إزالة الضوضاء من الصور باستخدام شبكة عصبية ذاتية التشفير

بهذه الطريقة، يمكننا أن نرى أن المعلومات المتعلقة بالهيكل في summary يتم إنشاؤها أيضًا في هذه الصورة. هذه الوظيفة مفيدة جدًا لعرض تدفق المعلومات في الشبكات العصبية غير المتسلسلة.

تجميع نموذج لإزالة الضوضاء من الصور ذات الشبكات العصبية ذاتية التشفير

تم إنشاء النموذج. لتدريبه، نحتاج إلى تجميع النموذج. لهذا الغرض، نسمي الطريقة المكتوبة:

1.	DN.Compile(Optimizer, Loss)

بعد تجميع النموذج، يمكننا تدريبه على مجموعة البيانات. لهذا الغرض، نقوم بإدخال المدخلات المطلوبة واستدعاء طريقة Fit:

1.	DN.Fit(trX, trY, vaX, vaY, nEpoch, sBatch)

سيستغرق تشغيل هذا الجزء من الكود بعض الوقت. بعد الانتهاء، سيتم تدريب النموذج ويمكن رسم مخطط الخطأ في الخطوة الأولى:

1.	DN.LossPlot()

بعد تنفيذ هذا الكود يتم الحصول على الرسم البياني التالي:

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

رسم رسم بياني للنتائج بعد إزالة الضوضاء من الصور ذات الشبكات العصبية ذاتية التشفير

بعد مخطط الخطأ، يمكننا استدعاء طريقة PlotResults في مجموعة بيانات الاختبار:

1.	DN.PlotResults(teX, teY)

في إخراج الكود أعلاه، لكل 10 آلاف بيانات في مجموعة بيانات الاختبار، يمكن رسم رسم بياني، اثنان منها معروضان أدناه:

إزالة الضوضاء من الصور باستخدام شبكة عصبية ذاتية التشفير

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

ملخص إزالة التشويش من الصور ذات الشبكات العصبية ذاتية التشفير

بهذه الطريقة، يتم الانتهاء من تنفيذ شبكة عصبية ذاتية التشفير لإزالة الضوضاء من الصور ذات الشبكات العصبية ذاتية التشفير. لمزيد من الدراسة، يمكنك التحقق مما يلي:

  1. ماذا سيحدث إذا تم استخدام Mean Squared Error ؟
  2. كيف تعمل طبقة الصورة الملتفة؟ لماذا يسمى Convolution Transpose ؟
  3. قم بإزالة طبقات Maxpooling2D واضبط طبقات الالتواء على خطوة. ما الذي يغير دقة النموذج في هذه الحالة؟
  4. في بعض البنى، يتم أيضًا مراعاة طبقة Batch Normalization لكل كتلة. كيف ستؤدي إضافة هذه الطبقة إلى النموذج المكتوب إلى تغيير النتائج؟
  5. تدريب النموذج الذي تم إنشاؤه يستغرق وقتًا طويلاً ومكلفًا من الناحية الحسابية. حدد طريقتين لفئة AEDN يمكنهما الحفظ ثم استدعاء النموذج المدرب.
  6. الصورة المزعجة بها أخطاء مقارنة بالصورة الأصلية. ما العلاقة بين قيمة هذا الخطأ والانحراف المعياري للتوزيع الطبيعي للضوضاء؟
  7. تتوافق الطبقة الأخيرة من النموذج مع طبقة sigmoid. تحقق من نتائج النموذج إذا تمت إزالة هذه الطبقة.
  8. يعتبر حجم المرشحات التلافيفية والصورة التلافيفية 3×3. تحقق أيضًا من الوضعين 2 × 2 و 4 × 4 واختر الأفضل.
  9. قم بتدريب النموذج بعدد أكبر من الخطوات وتحقق مما إذا كان التجاوز يحدث أم لا.
منشور ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

السلة