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

قد يستغرق الأمر من ساعة إلى يوم عمل كامل لتمييز البيكسلات المتعلقة بالعيوب في صورة واحدة ، لذلك يصعب جمع عينة من أكثر من 100 صورة في غضون بضعة أسابيع. لذلك ، حاولنا أن نضيف إلى حد ما بياناتنا وكتبنا عيوبًا من تلقاء نفسها: لقد التقطنا صورة نظيفة وطبّقنا عليها عيوبًا اصطناعية وحصلنا على قناع يوضح لنا الأجزاء المعيّنة من الصورة التالفة. كان الجزء الرئيسي من نموذج التدريب الخاص بنا هو 79 صورة تم تعليمها يدويًا ، تم نقل 11 منها إلى عينة الاختبار.
الطريقة الأكثر شيوعًا لمشكلة التجزئة: خذ Unet مع مشفر مُدرَّب مسبقًا وتقليل المبلغ
Bce (
الانتروبيا الثنائية ) و

(
سورينسن - معامل النرد ).
ما هي المشاكل التي تنشأ مع هذا النهج في مشكلة تجزئة العيوب؟
- حتى إذا بدا لنا أن هناك الكثير من العيوب في الصورة ، فهي متسخة للغاية ومضطربة مع مرور الوقت ، فإن المنطقة التي تشغلها العيوب لا تزال أصغر بكثير من الجزء غير التالف من الصورة. لحل هذه المشكلة ، يمكنك زيادة وزن الطبقة الإيجابية في Bce ، والوزن الأمثل هو نسبة عدد البيكسلات الخالصة إلى عدد البيكسلات التي تنتمي إلى العيوب.
- المشكلة الثانية هي أننا إذا استخدمنا Unet خارج الصندوق مع برنامج تشفير تم تدريبه مسبقًا ، على سبيل المثال Albunet-18 ، فإننا نفقد الكثير من المعلومات الموضعية. تتكون الطبقة الأولى من Albunet-18 من الإلتواء مع جوهر 5 وخطوة تساوي اثنين. هذا يسمح للشبكة بالعمل بسرعة. لقد ضحينا بوقت تشغيل الشبكة من أجل توطين العيوب بشكل أفضل: لقد أزلنا أقصى تجمع بعد الطبقة الأولى ، وقللنا من الخطوة إلى 1 وقللنا جوهر الالتواء إلى 3.
- إذا عملنا مع صور صغيرة ، على سبيل المثال ، ضغط صورة على 256 × 256 أو 512 × 512 ، فإن العيوب الصغيرة ستختفي ببساطة بسبب الاستيفاء. لذلك ، تحتاج إلى العمل مع صورة كبيرة. الآن في الإنتاج ، نقوم بتجزئة العيوب في صور 1024 × 1024. لذلك ، كان من الضروري تدريب الشبكة العصبية في مجموعة كبيرة من الصور الكبيرة. ولهذا السبب ، هناك مشاكل في الحجم الصغير للدفعة على بطاقة فيديو واحدة.
- خلال التدريب ، لدينا حوالي 20 صورة وضعت على بطاقة واحدة. لهذا السبب ، فإن تقدير المتوسط والتباين في طبقات BatchNorm غير دقيق. يساعدنا BatchNorm الموضعي في حل هذه المشكلة ، التي توفر أولاً الذاكرة ، وثانيًا ، لديها إصدار من Synchronized BatchNorm ، الذي يقوم بمزامنة الإحصاءات بين جميع البطاقات. نحن الآن نعتبر المتوسط والتباين ليس بنسبة 20 صورة على بطاقة واحدة ، ولكن بنسبة 80 صورة من 4 بطاقات. هذا يحسن تقارب الشبكة.
في النهاية ، زيادة الوزن
Bce من خلال تغيير الهيكل واستخدام BatchNorm في المكان ، بدأنا في البحث عن عيوب في الصورة. لكن بثمن بخس ، يمكنك القيام بعمل أفضل قليلاً عن طريق إضافة اختبار زيادة الوقت. يمكننا تشغيل الشبكة مرة واحدة في صورة الإدخال ، ثم نسخها وتشغيلها مرة أخرى ، مما يساعدنا في العثور على عيوب صغيرة.

نتيجة لذلك ، تقاربت شبكتنا على أربعة GeForce 1080Ti في 18 ساعة. يستغرق الاستدلال 290 مللي ثانية. لقد تبيّن ذلك لفترة طويلة ، لكن هذا يمثل رسومًا لأننا نبحث جيدًا عن عيوب صغيرة. التحقق من صحة

يساوي 0.35 ، و
روك - 0.93.
شظية ترميم
ساعدنا في حل هذه المشكلة مرة أخرى. إلى المدخلات التي قدمناها له الصورة الأصلية وقناع نضع عليه علامات على المساحات النظيفة بوحدات ، وبكسلات البكسل التي نريد أن نرسم عليها بأصفار. لقد جمعنا البيانات على النحو التالي: أخذنا من الإنترنت مجموعة كبيرة من البيانات تحتوي على صور ، على سبيل المثال ، OpenImagesV4 ، وعيوب إضافية مصطنعة تشبه في الشكل تلك الموجودة في الحياة الحقيقية. وبعد ذلك قاموا بتدريب الشبكة لإصلاح الأجزاء المفقودة.
كيف يمكننا تعديل Unet لهذه المهمة؟
يمكنك استخدام الالتواء الجزئي بدلاً من الإلتواء المعتاد. فكرتها هي أنه عندما ننهار منطقة من صورة ذات نواة ، فإننا لا نأخذ في الاعتبار قيم البيكسل المتعلقة بالعيوب. هذا يساعد على جعل اللوحة أكثر دقة. مثال من
مقال NVIDIA . في الصورة المركزية ، استخدموا Unet مع الإلتواء المعتاد ، وعلى اليمين - مع الإلتفاف الجزئي:

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

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

يحتوي GitHub على
مستودع شهير لتلوين الصور. في المتوسط ، يقوم بهذا العمل بشكل جيد ، لكن لديه العديد من المشكلات. على سبيل المثال ، يحب طلاء الملابس باللون الأزرق. لذلك ، رفضناها أيضًا.
لذلك ، قررنا إنشاء شبكة عصبية للتلوين. الفكرة الأكثر وضوحا: التقاط صورة بالأبيض والأسود وتوقع ثلاث قنوات ، الأحمر والأخضر والأزرق. ولكن ، بشكل عام ، يمكننا تبسيط عملنا. لا يمكننا العمل مع تمثيل RGB للون ، ولكن مع تمثيل YCbCr. المكون Y هو السطوع (لمى). الصورة التي تم تنزيلها بالأبيض والأسود هي القناة Y ، وسوف نعيد استخدامها. بقيت للتنبؤ Cb و Cr: Cb هو الفرق في اللون الأزرق والسطوع ، و Cr هو الفرق في اللون الأحمر والسطوع.

لماذا اخترنا طريقة عرض YCbCr؟ العين البشرية أكثر عرضة للتغيرات في السطوع من التغييرات في الألوان. لذلك ، نعيد استخدام المكون Y (السطوع) ، وهو ما تكون العين في البداية حساسة بشكل جيد للتنبؤ به Cb و Cr ، ونتوقع أن نرتكب فيه خطأ أكبر قليلاً ، لأن الناس يلاحظون أقل "كاذبة" في الألوان. بدأت هذه الميزة تستخدم بنشاط في فجر التلفزيون الملون ، عندما لم يكن عرض النطاق الترددي للقناة كافياً لنقل جميع الألوان بالكامل. تم نقل الصورة إلى YCbCr ، وتم نقلها إلى المكون Y بدون تغيير ، وتم ضغط Cb و Cr مرتين.
كيفية تجميع خط الأساس
يمكنك مرة أخرى استخدام برنامج Unet مع برنامج ترميز تم تدريبه مسبقًا وتقليل خسارة L1 بين CbCr الحقيقي والآخر المتوقع. نريد تلوين صور ، لذلك بالإضافة إلى صور من OpenImages ، نحتاج إلى إضافة صور خاصة بمهمتنا.
أين يمكنني الحصول على صور ملونة لأشخاص يرتدون الزي العسكري؟ هناك أشخاص على الإنترنت يرسمون الصور القديمة كهواية أو حسب الطلب. يفعلون هذا بعناية فائقة ، في محاولة للامتثال الكامل لجميع الفروق الدقيقة. تلوين الزي الرسمي ، الكتّاب ، الميداليات ، يلجأون إلى المواد الأرشيفية ، لذلك يمكن الوثوق بنتيجة أعمالهم. في المجموع ، استخدمنا 200 صورة مرسومة باليد. المصدر الثاني المفيد للبيانات هو موقع
الجيش الأحمر للعمال والفلاحين . تم تصوير أحد مبدعيها في جميع المتغيرات الممكنة تقريبًا من الزي العسكري خلال الحرب الوطنية العظمى.

في بعض الصور الفوتوغرافية ، كرر أوضاع الأشخاص من صور المحفوظات الشهيرة. من الجيد بشكل خاص أن يتم تصويره على خلفية بيضاء ، مما سمح لنا بزيادة البيانات بشكل جيد للغاية ، وإضافة العديد من الكائنات الطبيعية إلى الخلفية. استخدمنا أيضًا صورًا عادية عادية للناس ، مكملة لهم بشارات وغيرها من سمات ملابس الحرب.
قمنا بتدريب AlbuNet-50 - هذا هو Unet ، حيث يتم استخدام AlbuNet-50 كبرنامج ترميز. بدأت الشبكة في إعطاء نتائج كافية: الجلد وردي ، والعينان رمادية اللون ، وأشرطة الكتف مصفرة. لكن المشكلة هي أنها رسمت الصور بالبقع. هذا يرجع إلى حقيقة أنه من وجهة نظر الخطأ L1 يكون في بعض الأحيان أكثر ربحية عدم القيام بأي شيء من محاولة التنبؤ ببعض الألوان.
نحن نقارن نتائجنا مع صورة "الحقيقة الأساسية" - التلوين اليدوي للفنان تحت الاسم المستعار Klimbimكيفية حل هذه المشكلة؟ نحتاج إلى أداة تمييز: شبكة عصبية ، والتي سنزود بها الصور بالإدخال ، وسوف توضح مدى واقعية هذه الصورة. أدناه ، صورة واحدة مرسومة باليد ، والثانية بواسطة شبكة عصبية. أي واحد رأيك؟

الجوابتم رسم الصورة اليسرى يدويًا.
بصفتك مُميِّزًا ، نستخدم أداة التمييز من المادة
GAN . هذه شبكة تلافيفية صغيرة ، في الطبقات الأخيرة منها ما يسمى بالانتباه الذاتي مدمج. انها تسمح لك لمزيد من "الاهتمام" لتفاصيل الصورة. نحن نستخدم أيضا التطبيع الطيفي. يمكن العثور على الشرح والتحفيز الدقيق في المقال. لقد قمنا بتدريب شبكة تضم مجموعة من L1 والخطأ الذي قام به المميّز. الآن ترسم الشبكة تفاصيل الصورة بشكل أفضل ، والخلفية أكثر تناسقًا. مثال آخر: على اليسار هو نتيجة الشبكة المدربة فقط مع خسارة L1 ، على اليمين - مع خسارة L1 وخطأ في التمييز.

على أربعة Geforce 1080Ti ، استغرق التدريب يومين. عملت الشبكة في 30 مللي ثانية في الصورة 512 × 512. كان التحقق من صحة MSE 34.4. كما في مشكلة inpainting ، المقاييس لا يمكن الوثوق بها بالكامل. لذلك ، اخترنا 6 نماذج تحتوي على أفضل مقاييس للتحقق من الصحة ، وصوتنا بشكل أعمى لأفضل نموذج.
بعد طرح النموذج في الإنتاج ، واصلنا التجارب وتوصلنا إلى نتيجة مفادها أنه من الأفضل تقليل خسارة L1 لكل بكسل ، ولكن خسارة الإدراك الحسي. لحساب ذلك ، تحتاج إلى تشغيل التنبؤ بالشبكة والصورة المصدر عبر شبكة VGG-16 ، والتقاط خرائط السمة على الطبقات السفلية ومقارنتها وفقًا لـ MSE. هذا النهج يرسم المزيد من المناطق ويساعد على الحصول على صورة أكثر سخونة.

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