إسماعيل بن علا

SegNet Semantic Segmentation

توسيم البكسلات بإلغاء التجميع عبر مؤشرات التجميع

الرؤية الحاسوبية · شتنبر 2023 · مكتمل

أعطه صورة فيوسم كل بكسل فيها: طريق، سيارة، إشارة مرور، حيوان أليف أو خلفية.

التقنياتPyTorchtorchvisionpytestMatplotlibNumPyKaggleGoogle Colab

SegNet Semantic Segmentation — نظرة عامة

نظرة عامة

تمنح التجزئة الدلالية (Semantic Segmentation) كل بكسل فئة. يقوم SegNet بذلك عبر بنية مُرمِّز-مفكك (encoder-decoder): تقلّص طبقات الالتفاف الـ 13 في VGG16 الصورة 32 مرة، ثم يعيدها مفكك مرآوي إلى حجمها الكامل. فكرته المميزة هي طريقة رفع الدقة في المفكك: كل عملية max-pool في المُرمِّز تسجّل أيضاً أي البكسلات الأربعة في كل نافذة كان يحمل القيمة القصوى، ثم يعيد المفكك كل قيمة إلى ذلك الموضع. تبقى الحدود حادة، ويخزن المفكك بضع بتات لكل نافذة بدلاً من خرائط سمات كاملة.

نفّذته بـ PyTorch خالصة دون أوزان مدرَّبة مسبقاً ودون مكتبة تجزئة: مُرمِّز VGG16-BN، ومفكك max-unpooling القائم على المؤشرات، ودالة خسارة تجمع الإنتروبيا المتقاطعة وsoft dice وتتجاهل البكسلات غير الموسومة، ودقة البكسل وmIoU المحسوبين من مصفوفة التباس على مجموعة التحقق كاملة. العرض رقم واحد، فالشيفرة نفسها تعطي نموذج الورقة ذا 29.5M معاملاً على GPU أو نموذجاً بـ 1.8M معامل على المعالج المركزي.

بدأ المشروع عام 2023 كدفتر TensorFlow على إشارات المرور في Mapillary Vistas. وكشف نقله عدة أخطاء: كانت مجموعة التدريب قد استُبدلت بمجموعة التحقق، وكانت ملفات PNG لتسميات اللوحة اللونية تُفك كتدرج رمادي، وكانت الصورة وقناعها يُقلبان بشكل مستقل، وكانت الخسارة MSE على معرّفات الفئات. تصلح الحزمة كل واحد منها وتحتفظ بالدفتر في مجلد legacy مع قائمة الأخطاء. تتحقق مجموعة الاختبارات من أن SegNet صغيراً يحفظ أربع صور أشكال؛ أما أرقام التشغيلات الأطول فلم تُنشر بعد.

السؤال

ماذا يفعل فعلياً إلغاء التجميع عبر مؤشرات التجميع (pooling-index unpooling) في SegNet، وهل يستطيع تنفيذ من الصفر بلا أوزان مدرَّبة مسبقاً أن يتعلم توسيم كل بكسل في صور تجريبية وحقيقية؟

أهم الميزات

كيف يعمل

  1. الترميز وتذكّر القيم القصوى

    خمس مراحل من conv وbatch-norm وReLU، يلي كلاً منها max-pool بحجم 2 × 2، تقلّص صورة H × W إلى H/32 × W/32؛ ويعيد كل تجميع أيضاً أي بكسلاته الأربعة كان يحمل القيمة القصوى.

  2. إلغاء التجميع بالمؤشرات

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

  3. قيمة logit لكل فئة

    يعطي التفاف أخير 1 × 1 عدد num_classes من قيم logit لكل بكسل؛ ويستخدم التدريب إنتروبيا softmax المتقاطعة مع حد soft dice اختياري، ويأخذ التنبؤ قيمة argmax.

  4. القياس على القسم كاملاً

    تُجمَّع مصفوفة التباس على كل بكسل تحقق؛ ومنها تُحسب دقة البكسل وmIoU، وتُحفظ نقطة الحفظ ذات أفضل mIoU.

  5. اختيار البيانات

    تتحقق الأشكال من خط المعالجة في دقائق، ويقدم Oxford-IIIT Pet أولى الصور الحقيقية، وتُحوَّل تسميات اللوحة اللونية في Mapillary Vistas عبر جدول بحث إلى كل الفئات أو إلى مجموعة فرعية مختارة.

أمثلة

المدخل

segnet-train --dataset shapes --image-size 64 --base-channels 16 --shapes-train-size 1000 --epochs 12 --lr 3e-3 --output-dir checkpoints/shapes

المخرج

checkpoints/shapes/: best.pt (best validation mIoU, with configs and class names), last.pt, history.json (per-epoch train / val loss, pixel accuracy, mIoU, lr), history.png and predictions.png (image / ground truth / prediction for 4 validation images).

وصفة المعالج المركزي من ملف README: نموذج SegNet بـ 1.8M معامل على أشكال اصطناعية دون أي تنزيل.

المدخل

segnet-predict --checkpoint checkpoints/pets/best.pt --images cat.jpg dog.jpg

المخرج

outputs/cat_mask.png, outputs/cat_overlay.png, outputs/dog_mask.png, outputs/dog_overlay.png

الاستدلال على صورك الخاصة بنقطة حفظ مدرَّبة على Oxford-IIIT Pet: قناع لمعرّفات الفئات وتراكب ملوَّن لكل صورة.

التقنيات المستخدمة

ما تعلمته

الحدود

الكلمات المفتاحية

SegNet · التجزئة الدلالية · مُرمِّز-مفكك · max-unpooling · مؤشرات التجميع · VGG16 · PyTorch · mIoU · خسارة dice · Oxford-IIIT Pet · Mapillary Vistas · تجزئة إشارات المرور · الرؤية الحاسوبية · التعلم العميق