نشر على ١٢-٠٩-٢٠١٩

تعليم أجهزة الكمبيوتر لرسم مثل فان جوخ

حرم جامعة ستانفورد من تأليف AI Van Gogh

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

انتظر ماذا؟

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

لقد اتضح أن هذا النوع من الأشياء يسمى Neural Style Transfer (NST) ، الذي نُشر لأول مرة في ورقة في عام 2015 ، وهو أساسًا الرياضيات. لذلك ، قررت أن أحاول أن أتعلم ونصنع نموذج NST بنفسي.

ليلة مليئة بالنجوم في تورنتو من كمبيوتر محمول Alex

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

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

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

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

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

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

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

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

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

هيا نبدأ.

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

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

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

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

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

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

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

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

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

من المفيد أن تكون شيئًا كهذا ، إذا كنت مهتمًا:

نحن نحاول تقليل المبلغ المقيس على الاختلافات بين جميع عمليات التنشيط المخفية في المحتوى والصور التي تم إنشاؤها والتي تمثل ميزاتها

2. نمط التكلفة

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

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

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

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

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

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

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

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

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

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

هذا للأناقة.

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

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

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

التفاف كل شيء

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

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

يمكنك عرض تطبيقي على جيثب هنا.

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

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

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

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

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

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

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

أنظر أيضا

تعريف الفنون الثقافية: جعل المدن عظيمة#Sketchbook_Saturdayاللون والطاقة: ما تكشفه تفضيلاتنا للعين الثالثة المدربةفريسكو ترحب بالمستشار الجديد هو جاي كيمكيف يمكنك تخفيف الأعباء في حياتك؟كيفية الترويج لفنك بفعالية عندما تبدأ للتو