الشبكات العصبية الالتفافية (Convolutional Neural Networks, CNNs)
شفنا قبل إن الشبكات العصبية ممتازة في التعامل مع الصور، وحتى البيرسيبترون (Perceptron) أحادي الطبقة يقدر يتعرّف على الأرقام المكتوبة باليد من مجموعة البيانات (Dataset) MNIST بدقة معقولة. لكن MNIST حالة خاصة؛ كل الأرقام متمركزة داخل الصورة، وهذا يسهّل المهمة.
في التطبيقات الواقعية، نبي نتعرّف على الجسم مهما كان موقعه داخل الصورة. وتختلف الرؤية الحاسوبية عن التصنيف العام؛ لأننا إذا بغينا نلقى جسمًا معيّنًا، نمسح الصورة بحثًا عن أنماط محددة وتركيبات منها. مثلًا، إذا كنا نبحث عن قطة، قد نبدأ بخطوط أفقية تمثّل الشوارب، وبعدها يدلنا تركيب معيّن من الشوارب إن الصورة فعلًا لقطة. المهم وجود الأنماط ومواقعها النسبية، مب موقعها الدقيق داخل الصورة.
لاستخراج الأنماط، بنستخدم مرشحات الالتفاف (Convolutional filters). الصورة ممثّلة بمصفوفة ثنائية الأبعاد (2D)، أو موتر ثلاثي الأبعاد (3D) إذا كان لها عمق لوني. لما نطبّق مرشحًا، ناخذ مصفوفة صغيرة نسبيًا اسمها نواة المرشح (Filter kernel)، وعند كل بكسل في الصورة الأصلية نحسب متوسطًا موزونًا له ولنقاطه المجاورة. تخيّلوا نافذة صغيرة تنزلق على كامل الصورة، وتجمع قيم البكسلات حسب الأوزان الموجودة في نواة المرشح.
وصف الشكل: مرشح للحافة العمودية | > وصف الشكل: مرشح للحافة الأفقية
----|----
مثلًا، إذا طبّقنا مرشحَي حواف عمودية وأفقية بمقاس 3x3 على أرقام MNIST، تطلع لنا قيم مرتفعة في الأماكن اللي فيها حواف عمودية أو أفقية. يعني نقدر نستخدم هالمرشحين «للبحث» عن الحواف. وبالطريقة نفسها، نقدر نصمم مرشحات ثانية تبحث عن أنماط أولية مختلفة:
وصف الشكل: حُذف الأصل لأن حقوق إعادة استخدامه غير موثّقة.
صورة بنك مرشحات Leung–Malik
نقدر نصمم المرشحات يدويًا عشان تستخرج أنماطًا معيّنة، لكن نقدر بعد نبني الشبكة بطريقة تخليها تتعلّم الأنماط تلقائيًا. وهذي من أهم الأفكار وراء CNN.
الأفكار الأساسية وراء CNN
تعتمد CNN على الأفكار المهمة التالية:
- مرشحات الالتفاف تقدر تستخرج الأنماط.
- نقدر نبني الشبكة بحيث تتدرّب المرشحات تلقائيًا.
- نقدر نستخدم الأسلوب نفسه للبحث عن أنماط داخل السمات عالية المستوى، مب بس داخل الصورة الأصلية. عشان كذا يستخرج CNN السمات على شكل هرم: يبدأ بتركيبات بسيطة من البكسلات، ثم ينتقل إلى تركيبات أعلى تمثّل أجزاء الصورة.

✍️ تمارين: الشبكات العصبية الالتفافية
خلونا نكمل استكشاف طريقة عمل الشبكة العصبية الالتفافية، وكيف نخلي المرشحات قابلة للتدريب، من خلال الدفترين:
البنية الهرمية
تتبع أغلب نماذج CNN لمعالجة الصور ما يسمّى البنية الهرمية. عادةً تحتوي أول طبقة التفاف تُطبّق على الصور الأصلية على عدد قليل نسبيًا من المرشحات، بين 8 و 16. تمثّل هالمرشحات تركيبات مختلفة من البكسلات، مثل الخطوط أو الضربات الأفقية والعمودية. في المستوى التالي نقلّل الأبعاد المكانية للشبكة ونزيد عدد المرشحات، وهذا يمكّنها من تمثيل تركيبات أكثر من السمات البسيطة. ومع كل طبقة نتجه فيها إلى المصنّف النهائي، تصغر الأبعاد المكانية للصورة ويزيد عدد المرشحات.
كمثال، خلونا نشوف بنية VGG-16، وهي شبكة حققت دقة 92.7% في تصنيف ImageNet ضمن أفضل 5 نتائج سنة 2014:
وصف الشكل: طبقات ImageNet
وصف الشكل: هرم ImageNet
الصورة من ResearchGate
أشهر بُنى CNN
كمّلوا التعلّم عن أشهر بُنى CNN
أشهر بُنى الشبكات العصبية الالتفافية (Convolutional Neural Networks, CNNs)
البُنى مثل VGG-16 وResNet وInception وMobileNet تصاميم شبكات تحدد ترتيب الطبقات وطريقة مرور البيانات. أما TensorFlow فهو إطار برمجي، مب بنية CNN بحد ذاته.
VGG-16
VGG-16 شبكة حققت دقة 92.7% في تصنيف ImageNet ضمن أفضل 5 نتائج سنة 2014. وتتكوّن طبقاتها كالتالي:
وصف الشكل: طبقات ImageNet
مثل ما تشوفون، تتبع VGG البنية الهرمية التقليدية: سلسلة من طبقات الالتفاف والتجميع.
وصف الشكل: هرم ImageNet
الصورة من ResearchGate
ResNet
ResNet عائلة نماذج اقترحتها Microsoft Research سنة 2015. فكرتها الأساسية استخدام الكتل المتبقية (Residual blocks):
وصف الشكل: حُذف الأصل لأن حقوق إعادة استخدامه غير موثّقة.
الصورة من هالبحث
نستخدم مسار الهوية (Identity pass-through) عشان تتنبأ الطبقة بالفرق بين ناتج الطبقة السابقة ومخرج الكتلة المتبقية؛ ومن هنا جا اسم المتبقية. تدريب هالكتل أسهل بكثير، ونقدر نبني شبكات فيها مئات الكتل. أشهر الإصدارات هي ResNet-52 وResNet-101 وResNet-152.
ونقدر نفهم الشبكة كأنها تضبط مستوى تعقيدها حسب مجموعة البيانات. في بداية التدريب تكون الأوزان صغيرة، فتمر أغلب الإشارة عبر مسارات الهوية. ومع تقدّم التدريب وكبر الأوزان، تزيد أهمية معاملات الشبكة، وتتكيّف الشبكة عشان تحصل على القدرة التعبيرية اللازمة لتصنيف صور التدريب بشكل صحيح.
Google Inception
تأخذ بنية Google Inception الفكرة خطوة أبعد، وتبني كل طبقة من عدة مسارات مختلفة تعمل مع بعض:
وصف الشكل: حُذف الأصل لأن حقوق إعادة استخدامه غير موثّقة.
الصورة من ResearchGate
هنا لازم نوضّح دور التفافات 1x1، لأنها قد تبدو غريبة أول مرة: وش الفايدة من تمرير مرشح 1x1 على الصورة؟ تذكّروا إن مرشحات الالتفاف تعمل على عدة قنوات عمق بعد؛ تكون في البداية قنوات ألوان RGB، ثم تصير في الطبقات اللاحقة قنوات ناتجة من مرشحات مختلفة. يخلط التفاف 1x1 قنوات الإدخال بأوزان قابلة للتدريب، ونقدر نفهمه بعد كخفض للأبعاد، أو تجميع، على بُعد القنوات.
بتلقون شرحًا أوسع في هالتدوينة، وهذا البحث الأصلي.
MobileNet
MobileNet عائلة نماذج صغيرة الحجم تناسب الأجهزة المحمولة. تفيد إذا كانت الموارد محدودة وكنا مستعدين نتنازل عن قدر بسيط من الدقة. تعتمد على الالتفاف القابل للفصل حسب العمق (Depthwise separable convolution)، اللي يمثّل مرشحات الالتفاف بتركيب من التفافات مكانية والتفاف 1x1 على قنوات العمق. بهالطريقة يقل عدد المعاملات كثيرًا، فيصغر حجم الشبكة ويسهل تدريبها ببيانات أقل.
اقرؤوا هالتدوينة عن MobileNet.
الخلاصة
تعلّمنا في هالوحدة الفكرة الأساسية وراء شبكات الرؤية الحاسوبية: الشبكات العصبية الالتفافية (CNN). البُنى المستخدمة فعليًا في تصنيف الصور واكتشاف الأجسام وحتى شبكات توليد الصور كلها مبنية على CNN، لكن بطبقات أكثر وبعض أساليب التدريب الإضافية.
🚀 التحدي
في أسفل الدفترين المرافقين ملاحظات عن رفع الدقة. جرّبوا بأنفسكم وشوفوا إذا تقدرون تحققون دقة أعلى.
المراجعة والتعلّم الذاتي
غالبًا نستخدم CNN في مهام الرؤية الحاسوبية، لكنها ممتازة عمومًا في استخراج أنماط ثابتة الحجم. إذا كنا نتعامل مع الصوت، مثلًا، نقدر نستخدم CNN للبحث عن أنماط داخل الإشارة الصوتية؛ وقتها تكون المرشحات أحادية البعد (1) وتسمّى الشبكة 1D-CNN. وأحيانًا نستخدم 3D-CNN لاستخراج سمات من فضاء متعدد الأبعاد، مثل الأحداث اللي تقع في الفيديو؛ لأن CNN تقدر تلتقط نمط تغيّر السمات مع الوقت. ابحثوا عن مهام ثانية نقدر ننجزها باستخدام CNN.
في هالمختبر، بتصنّفون سلالات مختلفة من القطط والكلاب. هالصور أعقد من صور مجموعة بيانات MNIST، وأبعادها أكبر، وعدد فئاتها أكثر من 10.