استعادة الصور المستندة إلى الذكاء الاصطناعي



مرحباً بالجميع! أنا مهندس أبحاث في فريق رؤية الكمبيوتر Mail.ru Group. في هذه المقالة ، سأحكي قصة عن كيفية إنشاء مشروع استعادة الصور المستند إلى AI للصور العسكرية القديمة. ما هو "استعادة الصور"؟ يتكون من ثلاث خطوات:

  • نجد كل عيوب الصورة: الكسور ، يجرجر ، الثقوب.
  • نحن نفهم العيوب المكتشفة ، بناءً على قيم البكسل من حولهم ؛
  • نحن تلوين الصورة.

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

أبحث عن العيوب


نريد العثور على جميع وحدات البكسل المتعلقة بالعيوب في صورة تم تحميلها. أولاً ، نحتاج إلى معرفة نوع الصور التي سيقوم الأشخاص بتحميلها. تحدثنا إلى مؤسسي مشروع "Immortal Regiment" ، وهي منظمة غير تجارية تقوم بتخزين الصور القديمة للحرب العالمية الثانية ، التي شاركت بياناتنا معنا. عند تحليلها ، لاحظنا أن الأشخاص يحمّلون صورًا فردية أو جماعية غالبًا معتدلة إلى عدد كبير من العيوب.

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



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

نهج تجزئة الأكثر شعبية: تأخذ Unet مع التشفير المدربين مسبقا وتقليل مجموع BCE ( الانتروبيا الثنائية ) و DICE ( معامل Sørensen - Dice ).

ما هي المشاكل التي تنشأ عندما نستخدم نهج التجزئة هذا لمهمتنا؟

  • حتى إذا بدا أن هناك الكثير من العيوب في الصورة ، فهي قديمة جدًا ومتهالكة ، إلا أن المنطقة التي بها عيوب ما زالت أصغر بكثير من المنطقة غير التالفة. لحل هذه المشكلة ، يمكننا زيادة وزن الطبقة الإيجابية في BCE ؛ سيكون الوزن الأمثل هو نسبة البكسلات النظيفة إلى البيكسلات المعيبة.
  • المشكلة الثانية هي أننا إذا استخدمنا Unet خارج الصندوق مع تشفير مُدرَّب مسبقًا (Albunet-18 ، على سبيل المثال) ، فإننا نفقد الكثير من البيانات الموضعية. تتكون الطبقة الأولى من Albunet-18 من الإلتواء مع kernel 5 وخطوة تساوي اثنين. انها تسمح للشبكة للعمل بسرعة. قمنا بتبادل وقت تشغيل الشبكة للحصول على توطين عيوب أفضل: لقد أزلنا الحد الأقصى للتجميع بعد الطبقة الأولى ، وقللنا من الخطوة إلى 1 وقللنا نواة الالتواء إلى 3.
  • إذا عملنا مع صور صغيرة بضغطها ، على سبيل المثال ، إلى 256 × 256 أو 512 × 512 بكسل ، فسوف تختفي العيوب الصغيرة بسبب الاستيفاء. لذلك ، نحن بحاجة إلى العمل مع صور أكبر. نقوم حاليًا بتجزئة العيوب في صور بحجم 1024 × 1024 قيد الإنتاج. لهذا السبب اضطررنا إلى تدريب الشبكة على المحاصيل ذات الصور الكبيرة. ومع ذلك ، هذا يسبب مشاكل مع حجم دفعي صغير على GPU واحد.
  • أثناء التدريب ، يمكننا وضع حوالي 20 صورة في وحدة معالجة الرسومات واحدة. ولهذا السبب ، فإننا ننتهي بقيم الانحراف المعياري وغير الدقيقة في طبقات BatchNorm. يمكننا حل هذه المشكلة باستخدام BatchNorm in-place ، والذي ، من ناحية ، يوفر مساحة الذاكرة ، ومن ناحية أخرى ، يحتوي على إصدار BatchNorm متزامن ، يقوم بمزامنة الإحصاءات عبر جميع وحدات معالجة الرسومات. نحن الآن نحسب قيم الانحراف المعياري والمعياري ليس لـ 20 صورة على وحدة معالجة الرسومات واحدة ، ولكن بالنسبة لـ 80 صورة من 4 وحدات معالجة الرسومات. هذا يحسن صافي التقارب.

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



تتلاقى الشبكة في 18 ساعة على أربعة GeForce 1080Ti. يستغرق الاستدلال 290 مللي ثانية. إنه طويل جدًا ، لكن هذا هو سعر أدائنا الأفضل من الافتراضي. التحقق من صحة DICE يساوي 0.35 ، و ROCAUC - 0.93.

صورة inpainting


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

كيف يمكننا تعديل Unet لهذه المهمة؟

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



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

يستغرق net 50 ms لمعالجة صورة 512 × 512 واحد. المصادقة 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 يستخدم ResNet-50 prerained كبرنامج ترميز. بدأت الشبكة في إعطاء نتائج كافية: كان الجلد ورديًا ، والعينين - رماديًا أزرقًا ، ولوحات الكتف - صفراء. ومع ذلك ، كانت المشكلة أنه يترك بعض المناطق على الصورة دون مساس. كان السبب في ذلك أنه وفقًا للخطأ L1 ، يمكنك العثور على هذا المستوى الأمثل حيث لا يكون من الأفضل فعل شيء سوى محاولة التنبؤ ببعض الألوان.


نحن نقارن نتائجنا مع صورة "الحقيقة الأساسية" - تلوين يدوي قام به Klimbim

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



إجابة
يتم تلوين الصورة الموجودة على اليسار يدويًا ، على اليمين - تلقائيًا.

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



استغرق التدريب عملية يومين على أربعة غيفورسي 1080Ti. يستغرق net 30 ms لمعالجة صورة 512 × 512. التحقق من صحة MSE - 34.4. تمامًا كما هو الحال مع inpainting ، لا تريد الاعتماد على المقاييس. لهذا السبب اخترنا ستة نماذج مع أفضل مقاييس التحقق من الصحة وقمنا بالتصويت العمياء لأفضل طراز.

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



خلاصة


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

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

لقد التقطنا بعض الصور من مشروع War Album وعالجناها على هذه الخلايا العصبية. وهنا النتائج التي حصلنا عليها:



علاوة على ذلك ، هنا يمكنك إلقاء نظرة فاحصة على الصور الأصلية وجميع مراحل المعالجة.

Source: https://habr.com/ru/post/ar459696/


All Articles