تعليم الحاسوب للرسم مثل فان جوخ

حرم ستانفورد من قبل AI Van Gogh

واحدة من أروع مجالات التعلم العميق هي بدون شك جيل الفن.

انتظر ماذا؟

أتذكر عندما رأيت هذا لأول مرة ، كان ذهني ينفجر. عند الفحص الدقيق ، يمكن أن يكون تحفة بشرية بمقاييسي (ليس لأنني أعرف الكثير عن الفن). لكن ذلك لم يحدث.

اتضح أن هذا النوع من الأشياء يسمى نقل النمط العصبي (NST) ، الذي نشر لأول مرة في ورقة بحثية في عام 2015 ، وهو في الأساس رياضيات. لذا ، قررت أن أحاول التعلم وبناء نموذج NST بنفسي.

A Starry Night-Day في تورنتو بواسطة Alex's Laptop

إنها في الواقع ليست صعبة كما تظن.

إليك كيفية القيام بذلك:

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

بالنسبة إلى NST ، نقوم أولاً بتهيئة صورة تم إنشاؤها بشكل عشوائي لقيم RGB لكل بكسل:

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

لذا ، فإن مهمتنا بسيطة من الناحية النظرية:

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

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

  1. اكتب دالة تكلفة لمحتوى الصورة
  2. اكتب دالة تكلفة لنمط الصورة
  3. اجمع بين التكلفتين السابقتين في دالة التكلفة الإجمالية المرجحة.

هيا نبدأ.

1. تكلفة المحتوى

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

هذا يتعلق بكيفية تعلم CNN فعليًا. دعونا نستخدم الشبكة العصبية القوية VGG-19 كمثال. سنستخدمه أيضًا لتطبيق NST في النهاية.

فاز VGG-19 في تحدي ISLVRC-2014

يعمل هذا CNN من خلال الكشف أولاً عن تفاصيل صغيرة جدًا من مصفوفات قيم R و G و B المقابلة لكل بكسل ، مثل الحواف الصغيرة للكائنات ، والكشف عن أشكال أكبر وأكثر تعقيدًا ، حتى يتمكن من تخمين ما تصف الصورة بناءً على مكوناتها الضئيلة. في ما يلي تصور رائع:

تظهر الصور أعلاه ميزات مختلفة تزيد من تفعيل كل طبقة. هذا يعني أنه لكل طبقة ، يظهر كل مربع 3x3 في الشبكة ما تبحث عنه الخلايا العصبية ، بمعنى ما (نطبق ما يسمى بوظيفة التنشيط بعد كل طبقة لفصل البيانات التي نتعرف عليها من البيانات التي لا نتعرف عليها ، وبالتالي "التنشيط").

هذا هو المكان الذي يأتي فيه VGG-19 على وجه التحديد. وقد تم إجراء اختبار مسبق لـ 19 طبقة CNN مسبقًا على مجموعة بيانات ImageNet ، والتي تحتوي على ألف فئة من الصور والعديد من الصور التدريبية داخل كل فصل. هذا يجعل من المرجح أكثر للنموذج أن يحافظ على محتوى الصورة ، لأنه مهما كان المحتوى ، فمن المحتمل أن يتناسب مع واحدة من الألف فئة ، وإذا لم يكن كذلك ، فمن المحتمل أن أحد الخلايا العصبية يبحث عن شيء مشابه مكونات كائن المحتوى.

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

لذا ، يوجد لديك. إذا كان لديك تنشيطات مماثلة في طبقة ، فلديك محتوى مشابه. الآن من أجل وظيفة التكلفة لدينا ، نحتاج فقط للتأكد من التحقق من وجود محتوى مماثل في كل طبقة عندما نبدأ في تغيير النمط.

من الممكن أن يكون شيء مثل هذا ، إذا كنت فضوليًا:

نحن نحاول تقليل المجموع المعياري على الاختلافات في جميع التنشيطات المخفية في المحتوى والصور التي تمثّل ميزاتها

2. تكلفة الاسلوب

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

نريد موازنة ذلك مع نمط الصورة "الفنية" الأكثر. لكن المشكلة هنا هي ، كيف نستخرج "النمط" رياضياً؟

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

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

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

هذه هي دالة التكلفة للمصفوفة في طبقة واحدة:

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

لهذا السبب نحتاج إلى حساب مصفوفة النمط وتكلفة النمط لطبقات محددة متعددة في CNN. مثله:

تلخيص لجميع تكاليف نمط الطبقات المختارة مضروبة في وزن لامدا

تسمح لنا هذه الصيغة بعكس نمط الفنان بشكل أكثر شمولاً.

هذا هو الأسلوب.

3. التكلفة الإجمالية

الباقي بسيط جدا. علينا فقط أن نتولى هاتين الوظيفتين ؛ النمط والمحتوى ، ووضعهما في وظيفة كبيرة واحدة تحقق توازنًا معقولًا بينهما:

مجموع وزن ألفا مقابل تكلفة المحتوى ووزن بيتا مقابل تكلفة النمط. يتم ضبط Alpha و Beta كمعلمات مفرطة

التفاف كل شيء

لذلك باستخدام هذه الخوارزميات ، يتم تنفيذ NST في الخطوات التالية:

  1. قم بتشغيل صورة المحتوى من خلال VGG-19 وجمع التنشيط في طبقة معينة
  2. قم بتشغيل صورة النمط من خلال VGG-19 ، وجمع التنشيطات وحساب مصفوفات النمط في طبقات متعددة.
  3. توليد صورة ضجيج
  4. قم بتشغيل حساب الرسم البياني ، الذي يقوم بتشغيل صورة الضجيج من خلال VGG-19 ، ويجمع التنشيط ، ويحسب مقابل التكلفة الإجمالية ، ويقوم الرسم البياني بالانتشار العكسي ، ويغير صورة ضوضاء الإدخال ، والتي تصبح الإدخال للتكرار التالي. يكرر العدد المطلوب من التكرارات

يمكنك عرض التنفيذ على Github هنا.

أخذ خطوة إلى الوراء

الآن ، بالنظر إلى ما قمنا به وما أظهره لنا مؤلفو ورقة NST ، من الممكن أن نعيد هذا إلى المنظور.

آلة صنعت الفن.

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

هذا هو الأول في سلسلة من موضوعات التعلم الآلي التي سأكتب عنها.

إذا كان لديك أي أسئلة ، فلا تتردد في الاتصال بي على Linkedin أو أرسل لي بريدًا إلكترونيًا على zhual@utschools.ca.

شكرا للقراءة!