في عام 1943 ، طور علماء النفس العصبيون الأمريكيون ماكالوك وبيتس نموذجًا للكمبيوتر على شبكة عصبية ، وفي عام 1958 تعرفت
أول شبكة تعمل على طبقة واحدة على بعض الحروف. الآن ، لا يتم استخدام الشبكات العصبية لما: التنبؤ بسعر الصرف ، وتشخيص الأمراض ، والطيار الآلي ، وبناء الرسومات في ألعاب الكمبيوتر. فقط عن الماضي والتحدث.
يفغيني تومانوف يعمل مهندسا للتعلم العميق في
NVIDIA . استنادًا إلى نتائج كلمته في مؤتمر HighLoad ++ ، قمنا بإعداد قصة حول استخدام التعلم الآلي والتعلم العميق في الرسومات. لا ينتهي التعلم الآلي بـ NLP و Computer Vision وأنظمة التوصية ومهام البحث. حتى لو لم تكن معتادًا على هذا المجال ، يمكنك تطبيق أفضل الممارسات من المقالة في مجالك أو مجالك.
ستتألف القصة من ثلاثة أجزاء. سنراجع المهام في الرسم البياني التي يتم حلها بمساعدة التعلم الآلي ، والحصول على الفكرة الرئيسية ، ووصف حالة تطبيق هذه الفكرة في مهمة محددة ، وتحديداً في
تقديم السحب .
يشرف DL / ML في الرسومات ، أو تدريب المعلمين في الرسومات
دعنا نحلل مجموعتين من المهام. بادئ ذي بدء ، فإننا نشير إليها لفترة وجيزة.
العالم الحقيقي أو تقديم المحرك :
- إنشاء الرسوم المتحركة يمكن تصديقها: الحركة ، الوجه الرسوم المتحركة.
- بعد تقديم الصور المقدمة: supersampling ، مكافحة التعرج.
- Slowmotion: إطار الاستيفاء.
- جيل من المواد.
المجموعة الثانية من المهام تسمى الآن بشكل تقليدي "
الخوارزمية الثقيلة ". نحن نقوم بتضمين مهام مثل تقديم كائنات معقدة ، مثل السحب ،
والمحاكاة الفيزيائية : الماء ، الدخان.
هدفنا هو فهم الفرق الأساسي بين المجموعتين. لننظر في المهام بمزيد من التفصيل.
إنشاء الرسوم المتحركة يمكن تصديقها: الحركة ، الوجه الرسوم المتحركة
في السنوات القليلة الماضية ،
ظهرت العديد من
المقالات ، حيث يقدم الباحثون طرقًا جديدة لتوليد رسوم متحركة جميلة. يعد استخدام أعمال الفنانين باهظ التكلفة ، واستبدالهم بخوارزمية سيكون مفيدًا جدًا للجميع. قبل عام ، في NVIDIA ، كنا نعمل على مشروع اشتركنا فيه في الرسوم المتحركة للوجه لشخصيات في الألعاب: مزامنة وجه البطل مع المسار الصوتي للكلام. حاولنا "إحياء" الوجه بحيث تتحرك كل نقطة عليه ، وقبل كل شيء الشفاه ، لأن هذه هي أصعب لحظة في الرسوم المتحركة. يدويا فنان للقيام بذلك غالية ولفترة طويلة. ما هي الخيارات لحل هذه المشكلة وعمل
مجموعة بيانات لها؟
الخيار الأول هو
تحديد أحرف العلة: يفتح الفم على أحرف العلة ، ويغلق الفم على الحروف الساكنة . هذه خوارزمية بسيطة ، ولكنها بسيطة للغاية. في الألعاب ، نريد المزيد من الجودة. الخيار الثاني هو
حث الناس على قراءة نصوص مختلفة وكتابة وجوههم ، ثم مقارنة الحروف التي نطقوها بتعابير الوجه. هذه فكرة جيدة ، وقد قمنا بذلك في
مشروع مشترك مع Remedy Entertainment. الفرق الوحيد هو أننا في اللعبة لا نعرض مقطع فيديو ، ولكن نموذج ثلاثي الأبعاد للنقاط. لتجميع مجموعة بيانات ، يجب أن تفهم كيف تتحرك نقاط محددة على الوجه. أخذنا ممثلين ، وطلبنا منهم قراءة نصوص ذات أشكال مختلفة ، وأطلقوا النار على كاميرات جيدة للغاية من زوايا مختلفة ، وبعد ذلك قمنا باستعادة النموذج ثلاثي الأبعاد للوجوه على كل إطار ، وتوقعنا وضع النقاط على الوجه بالصوت.
تقديم صورة بعد المعالجة: المضاعفة ، مكافحة التعرج
النظر في حالة من لعبة معينة: لدينا محرك يولد الصور في دقة مختلفة. نريد تقديم الصورة بدقة 1000 × 500 بكسل وإظهار المشغل 2000 × 1000 - سيكون هذا أجمل. كيفية تجميع مجموعة بيانات لهذه المهمة؟
أولاً ، اجعل الصورة عالية الدقة ، ثم خفض الجودة ، ثم حاول تدريب النظام لتحويل الصورة من دقة منخفضة إلى دقة عالية.
Slowmotion: إطار الاستيفاء
لدينا فيديو ، ونريد أن تضيف الشبكة إطارات في المنتصف - لإقحام الإطارات. الفكرة واضحة - تصوير فيديو حقيقي بعدد كبير من الإطارات وإزالة الإطارات الوسيطة ومحاولة التنبؤ بما تمت إزالته بواسطة الشبكة.
توليد المواد
لن نتناول الكثير من المواد. جوهرها هو أننا نأخذ ، على سبيل المثال ، قطعة من الخشب في عدة زوايا من الإضاءة ، ونحرف المنظر من زوايا أخرى.
درسنا المجموعة الأولى من المشاكل. والثاني هو اختلاف أساسي. سنتحدث عن تقديم كائنات معقدة ، مثل السحب ، في وقت لاحق ، ولكن الآن سنتعامل مع عمليات المحاكاة المادية.
المحاكاة الفيزيائية للماء والدخان
تخيل وجود تجمع توجد فيه الأجسام الصلبة المتحركة. نريد أن نتوقع حركة جزيئات السوائل. هناك جزيئات في حمام السباحة في الوقت
t ، وفي الوقت
t نريد أن نحصل على موقعهم. لكل جسيم ، ندعو الشبكة العصبية والحصول على إجابة حيث سيكون على الإطار التالي.
لحل المشكلة ، نستخدم
معادلة Navier-Stokes ، التي تصف حركة السائل. للحصول على محاكاة معقولة وجسدية للماء ، سيتعين علينا حل المعادلة أو التقريب. يمكن القيام بذلك بطريقة حسابية ، والتي تم اختراع العديد منها على مدار الخمسين عامًا الماضية: خوارزمية SPH أو FLIP أو الموضع القائم على الموضع.
الفرق بين المجموعة الأولى من المهام من الثانية
في المجموعة الأولى ، يكون معلم الخوارزمية عبارة عن شيء أعلاه: تسجيل من واقع الحياة ، كما في حالة الأفراد ، أو شيء من المحرك ، على سبيل المثال ، تقديم الصور. في المجموعة الثانية من المشاكل ، نستخدم طريقة الرياضيات الحسابية. من هذا التقسيم الموضوعي ، تنمو الفكرة.
الفكرة الرئيسية
لدينا مهمة معقدة حسابيا طويلة وصعبة ويصعب حلها من خلال طريقة جامعة الحوسبة الكلاسيكية. لحلها والتعجيل بها ، وربما حتى فقدانها قليلاً في الجودة ، نحتاج إلى:
- العثور على المكان الأكثر استهلاكا للوقت في المهمة حيث يستمر رمز أطول ؛
- انظر ماذا ينتج هذا الخط ؛
- حاول التنبؤ بنتيجة خط يستخدم شبكة عصبية أو أي خوارزمية أخرى للتعلم الآلي.
هذه منهجية عامة والفكرة الرئيسية هي وصفة حول كيفية العثور على تطبيق للتعلم الآلي. ما الذي يجب عليك فعله لجعل هذه الفكرة مفيدة؟ لا توجد إجابة دقيقة - استخدم الإبداع ، وانظر إلى عملك وابحث عنه. أقوم بعمل رسومات ، لست على دراية بمجالات أخرى ، لكن يمكنني أن أتخيل أنه في البيئة الأكاديمية - في الفيزياء والكيمياء والروبوتات - يمكنك بالتأكيد العثور على التطبيق. إذا قمت بحل معادلة جسدية معقدة في مكان عملك ، فقد تجد أيضًا طلبًا لهذه الفكرة. من أجل الوضوح ، والنظر في حالة محددة.
مهمة تقديم السحابة
لقد انخرطنا في هذا المشروع في NVIDIA منذ ستة أشهر: المهمة هي رسم سحابة صحيحة جسديًا ، والتي تمثل كثافة القطرات السائلة في الفضاء.
السحابة هي كائن معقد جسديًا ، وهو تعليق للقطرات السائلة التي لا يمكن تشكيلها ككائن صلب.
لن يكون من الممكن فرض نسيج وتجسيد على السحابة ، لأن قطرات الماء صعبة هندسيا في مساحة ثلاثية الأبعاد ومعقدة في ذاتها: فهي لا تمتص عمليا اللون ، ولكنها تعكسه ، متباين الخواص - في جميع الاتجاهات بطرق مختلفة.
إذا نظرت إلى قطرة ماء ، تشرق فيها الشمس ، وتكون متجهات العين والشمس على نقطة متوازية ، فسيتم رصد ذروة كبيرة من شدة الضوء. هذا ما يفسر الظاهرة المادية التي شاهدها الجميع: في الطقس المشمس ، تكون إحدى حدود السحابة مشرقة للغاية ، بيضاء تقريبًا. نحن ننظر إلى حدود السحابة ، وخط الأفق والمتجه من هذه الحدود إلى الشمس يكاد يكون متوازيًا.

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

المعادلة قاسية ، لكن دعونا نفهم معناها المادية. النظر في شعاع اخترقتها سحابة خارقة سحابة. كيف يدخل الضوء الكاميرا في هذا الاتجاه؟ أولاً ، يمكن أن يصل الضوء إلى نقطة خروج الأشعة من السحابة ، ثم ينتشر على طول هذه الأشعة داخل السحابة.
بالنسبة للطريقة الثانية من "انتشار الضوء على طول الاتجاه" ، فإن المصطلح لا يتجزأ من المعادلة. معناها المادي هو على النحو التالي.
النظر في قطعة داخل السحابة على الشعاع - من نقطة الدخول إلى نقطة الخروج. يتم التكامل على وجه التحديد على هذا الجزء ، ولكل نقطة عليه ، نعتبر ما يسمى
طاقة الإضاءة غير المباشرة L (x ، ω) - معنى الإضاءة المتكاملة I
1 - الإضاءة غير المباشرة في هذه النقطة. يبدو بسبب حقيقة أن القطرات بطرق مختلفة تعكس أشعة الشمس. تبعا لذلك ، فإن هناك كمية هائلة من الأشعة التي تتم بوساطة قطرات محيطة تأتي إلى هذه النقطة. I
1 هو جزء لا يتجزأ من الكرة التي تحيط نقطة على الشعاع. في الخوارزمية الكلاسيكية ، يتم حسابها باستخدام طريقة
مونت كارلو .
الخوارزمية الكلاسيكية.
- قم بنقل صورة من وحدات البكسل ، وقم بإنتاج شعاع ينتقل من مركز الكاميرا إلى بكسل ثم إلى أبعد من ذلك.
- نعبر شعاع مع سحابة ، نجد نقاط الدخول والخروج.
- نحن نعتبر المصطلح الأخير للمعادلة: العبور ، والتواصل مع الشمس.
- الشروع في أخذ العينات أهمية
كيف تفكر في تقدير مونت كارلو لـ I
1 لن نقوم بتحليلها ، لأنها صعبة وليست مهمة جدًا. يكفي القول أن هذا هو الجزء الأطول والأصعب في الخوارزمية بأكملها.
نحن نربط الشبكات العصبية
من الفكرة الرئيسية والخوارزمية الكلاسيكية ، توجد وصفة حول كيفية تطبيق الشبكات العصبية على هذه المهمة. أصعب شيء هو حساب درجة مونت كارلو. إنه يعطي رقمًا يعني إضاءة غير مباشرة عند نقطة ما ، وهذا بالضبط ما نريد التنبؤ به.

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

لبناء مدخل الشبكة العصبية ، نحن تصف الكثافة المحلية. هناك العديد من الطرق للقيام بذلك ، لكننا ركزنا على المقال "
الانتثار العميق: تقديم الغيوم الجوية مع توقع الإشعاع للشبكات العصبية" ، Kallwcit et al. 2017 وجاءت العديد من الأفكار من هناك.
باختصار ، تبدو طريقة التمثيل المحلي للكثافة حول نقطة ما هكذا.
- إصلاح ثابت صغير إلى حد ما . فليكن الطريق الحر المتوسط في السحابة.
- ارسم نقطة حول الجزء الخاص بنا بشبكة مستطيلة الحجم بحجم ثابت ، على سبيل المثال 5 * 5 * 9. في مركز هذا المكعب ستكون وجهة نظرنا. تباعد الشبكة ثابت ثابت صغير. في العقد الشبكية سوف نقيس كثافة السحابة.
- لنقم بزيادة الثابت مرتين ، ورسم شبكة أكبر ، ونفعل الشيء نفسه - قم بقياس الكثافة في العقد الخاصة بالشبكة.
- كرر الخطوة السابقة عدة مرات . لقد فعلنا ذلك 10 مرات ، وبعد الإجراء ، حصلنا على 10 شبكات - 10 تنسورات ، كل منها يخزن كثافة السحب ، ويغطي كل من التنسورات حيًا كبيرًا متزايدًا حول هذه النقطة.
يعطينا هذا النهج الوصف الأكثر تفصيلاً لمنطقة صغيرة - كلما اقتربنا من النقطة ، كان الوصف أكثر تفصيلاً. قررت على إخراج وإدخال الشبكة ، يبقى لفهم كيفية تدريبها.
التدريب
سنقوم بإنشاء 100 السحب المختلفة مع طبولوجيا مختلفة. سنجعلهم ببساطة يستخدمون الخوارزمية الكلاسيكية ، ونكتب ما تتلقاه الخوارزمية في نفس السطر الذي تؤدي فيه تكامل مونت كارلو ، ونكتب الخصائص التي تتوافق مع هذه النقطة. لذلك لدينا مجموعة بيانات يمكن أن نتعلمها.

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

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

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

التنفيذ
هناك برنامج مفتوح المصدر للنمذجة ثلاثية الأبعاد -
Blender ، والذي ينفذ الخوارزمية الكلاسيكية. نحن أنفسنا لم نكتب خوارزمية ، لكننا استخدمنا هذا البرنامج: لقد تدربنا على Blender ، وكتبنا كل ما نحتاجه للخوارزمية. تم الإنتاج أيضًا في البرنامج: قمنا بتدريب الشبكة في
TensorFlow ،
وقمنا بنقلها إلى C ++ باستخدام TensorRT ، وقمنا بالفعل بدمج شبكة TensorRT في Blender ، لأن الكود مفتوح.
نظرًا لأننا فعلنا كل شيء لصالح Blender ، فإن الحل الخاص بنا يحتوي على جميع ميزات البرنامج: يمكننا تقديم أي نوع من المشهد والكثير من السحب. يتم تعيين السحب في حلنا من خلال إنشاء مكعب ، نحدد من خلاله وظيفة الكثافة بطريقة محددة للبرامج ثلاثية الأبعاد. قمنا بتحسين هذه العملية - كثافة التخزين المؤقت. إذا أراد المستخدم رسم نفس السحابة على كومة من الإعدادات المختلفة للمشهد: في ظل ظروف الإضاءة المختلفة ، مع وجود كائنات مختلفة على المسرح ، فلن يحتاج إلى إعادة حساب كثافة السحابة باستمرار. ما حدث ، يمكنك مشاهدة
الفيديو .
في الختام ، أكرر مرة أخرى الفكرة الرئيسية التي أردت إيصالها:
إذا كنت في عملك لفترة طويلة وبصعوبة تعتبر شيئًا ما بعض الخوارزميات الحسابية المحددة ، وهذا لا يناسبك - ابحث عن أصعب مكان في الكود ، واستبدله بشبكة عصبية ، ربما هذا سوف يساعدك.تعد الشبكات العصبية والذكاء الاصطناعي أحد الموضوعات الجديدة التي سنناقشها في Saint HighLoad ++ 2019 في أبريل. لقد تلقينا بالفعل العديد من التطبيقات حول هذا الموضوع ، وإذا كان لديك تجربة رائعة ، وليس بالضرورة على الشبكات العصبية ، فأرسل طلبًا للتقرير قبل 1 مارس . سنكون سعداء برؤيتكم بين متحدثينا.
لمواكبة كيفية تشكيل البرنامج والتقارير المقبولة ، اشترك في النشرة الإخبارية . في ذلك ، ننشر فقط مجموعات مواضيعية من التقارير ، وهضم المقالات ومقاطع الفيديو الجديدة.