بيرنهارد كيربل*، جورجيوس كوباناس*، توماس ليمكولر، جورج دريتاكيس (* يشير إلى المساهمة المتساوية)
| صفحة ويب | ورقة كاملة | فيديو | منشورات GRAPHDECO الأخرى | صفحة مشروع FUNGRAPH |
| T&T+DB COLMAP (650 ميجابايت) | نماذج مدربة مسبقًا (14 جيجابايت) | المشاهدين لنظام التشغيل Windows (60 ميجابايت) | صور التقييم (7 جيجابايت) |
يحتوي هذا المستودع على التنفيذ الرسمي للمؤلفين المرتبط بالورقة "3D Gaussian Splatting for Real-Time Radiance Field Rendering"، والتي يمكن العثور عليها هنا. كما نقدم أيضًا الصور المرجعية المستخدمة لإنشاء مقاييس الخطأ المذكورة في الورقة، بالإضافة إلى النماذج المدربة مسبقًا التي تم إنشاؤها مؤخرًا.
الملخص: لقد أحدثت أساليب مجال الإشعاع مؤخرًا ثورة في تركيب المشاهد الجديدة التي تم التقاطها باستخدام صور أو مقاطع فيديو متعددة. ومع ذلك، فإن تحقيق جودة بصرية عالية لا يزال يتطلب شبكات عصبية مكلفة للتدريب والعرض، في حين أن الأساليب الأسرع الحديثة تستبدل حتماً السرعة بالجودة. بالنسبة للمشاهد الكاملة وغير المحدودة (بدلاً من الكائنات المعزولة) وعرض دقة 1080 بكسل، لا يمكن لأي طريقة حالية تحقيق معدلات عرض في الوقت الفعلي. نقدم ثلاثة عناصر رئيسية تسمح لنا بتحقيق جودة بصرية حديثة مع الحفاظ على أوقات التدريب التنافسية والأهم من ذلك السماح بتوليف عرض جديد عالي الجودة في الوقت الفعلي (≥ 30 إطارًا في الثانية) بدقة 1080 بكسل. أولاً، بدءًا من النقاط المتفرقة التي يتم إنتاجها أثناء معايرة الكاميرا، فإننا نمثل المشهد باستخدام أجهزة Gaussians ثلاثية الأبعاد التي تحافظ على الخصائص المرغوبة لحقول الإشعاع الحجمي المستمر لتحسين المشهد مع تجنب الحسابات غير الضرورية في المساحة الفارغة؛ ثانيًا، نقوم بإجراء تحسين مشذّر/التحكم في الكثافة للغاوسيين ثلاثي الأبعاد، ولا سيما تحسين التباين متباين الخواص لتحقيق تمثيل دقيق للمشهد؛ ثالثًا، قمنا بتطوير خوارزمية عرض سريعة ومدركة للرؤية تدعم الرش متباين الخواص وتسرع التدريب وتسمح بالعرض في الوقت الفعلي. نحن نعرض أحدث الجودة المرئية والعرض في الوقت الفعلي على العديد من مجموعات البيانات القائمة.
@Article{kerbl3Dgaussians, author = {Kerbl, Bernhard and Kopanas, Georgios and Leimk{"u}hler, Thomas and Drettakis, George}, title = {3D Gaussian Splatting for Real-Time Radiance Field Rendering}, journal = {ACM Transactions on Graphics}, number = {4}, volume = {42}, month = {July}, year = {2023}, url = {https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/} }
تم تمويل هذا البحث من خلال منحة ERC المتقدمة FUNGRAPH رقم 788065. المؤلفون ممتنون لشركة Adobe للتبرعات السخية، والبنية التحتية OPAL من جامعة كوت دازور ولموارد HPC من GENCI – IDRIS (منحة 2022-AD011013409). يشكر المؤلفون المراجعين المجهولين على تعليقاتهم القيمة، P. Hedman وA. Tewari على تدقيق المسودات السابقة، كما يشكرون T. Müller وA. Yu وS. Fridovich-Keil للمساعدة في المقارنات.
لدينا موارد محدودة لصيانة وتحديث التعليمات البرمجية. ومع ذلك، فقد أضفنا بعض الميزات الجديدة منذ الإصدار الأصلي المستوحاة من بعض الأعمال الممتازة التي قام بها العديد من الباحثين الآخرين على 3DGS. سنضيف ميزات أخرى في حدود قدرة مواردنا.
تحديث أكتوبر 2024 : قمنا بدمج تسريع سرعة التدريب وجعله متوافقًا مع تنظيم العمق ومكافحة التعرجات وتعويض التعرض. لقد قمنا بتحسين عارض SIBR في الوقت الفعلي من خلال تصحيح الأخطاء وإضافة ميزات في العرض العلوي الذي يسمح بتصور كاميرات الإدخال والمستخدم.
تحديث ربيع 2024 : أضافت Orange Labs دعم OpenXR لعرض الواقع الافتراضي.
قدم جوناثان ستيفنز برنامجًا تعليميًا رائعًا خطوة بخطوة لإعداد Gaussian Splatting على جهازك، بالإضافة إلى تعليمات لإنشاء مجموعات بيانات قابلة للاستخدام من مقاطع الفيديو. إذا كانت التعليمات الواردة أدناه جافة جدًا بالنسبة لك، فاستمر في التحقق منها هنا.
كان المستخدم camenduru لطيفًا بما يكفي لتوفير قالب Colab الذي يستخدم مصدر الريبو هذا (الحالة: أغسطس 2023!) للوصول السريع والسهل إلى الطريقة. يرجى التحقق من ذلك هنا.
يحتوي المستودع على وحدات فرعية، لذا يرجى التحقق منها
# استنساخ SSHgit [email protected]:graphdeco-inria/gaussian-splatting.git --recursive
أو
# استنساخ HTTPSgit https://github.com/graphdeco-inria/gaussian-splatting --recursive
تحتوي قاعدة التعليمات البرمجية على 4 مكونات رئيسية:
مُحسِّن قائم على PyTorch لإنتاج نموذج غاوسي ثلاثي الأبعاد من مدخلات SfM
عارض الشبكة الذي يسمح بالاتصال بعملية التحسين وتصورها
عارض في الوقت الفعلي يستند إلى OpenGL لعرض النماذج المدربة في الوقت الفعلي.
برنامج نصي لمساعدتك في تحويل صورك الخاصة إلى مجموعات بيانات SfM جاهزة للتحسين
المكونات لها متطلبات مختلفة لكل من الأجهزة والبرامج. لقد تم اختبارها على نظامي التشغيل Windows 10 وUbuntu Linux 22.04. يمكنك العثور على تعليمات إعداد وتشغيل كل منها في الأقسام أدناه.
يستخدم المحسن امتدادات PyTorch وCUDA في بيئة Python لإنتاج نماذج مدربة.
وحدة معالجة رسومات جاهزة لـ CUDA مع قدرة حسابية 7.0+
VRAM سعة 24 جيجابايت (للتدرب على جودة التقييم الورقي)
يرجى الاطلاع على الأسئلة المتداولة للتعرف على تكوينات VRAM الأصغر حجمًا
كوندا (موصى به لسهولة الإعداد)
مترجم C++ لامتدادات PyTorch (استخدمنا Visual Studio 2019 لنظام التشغيل Windows)
CUDA SDK 11 لملحقات PyTorch، يتم تثبيته بعد Visual Studio (استخدمنا 11.8، المشكلات المعروفة في 11.6 )
يجب أن يكون مترجم C++ وCUDA SDK متوافقين
تعتمد طريقة التثبيت الافتراضية لدينا على حزمة Conda وإدارة البيئة:
SET DISTUTILS_USE_SDK=1 # إنشاء Windows Onlyconda env - بيئة الملف.yml كوندا تفعيل gaussian_splatting
يرجى ملاحظة أن هذه العملية تفترض أن لديك CUDA SDK 11 مثبتًا، وليس 12 . للتعديلات، انظر أدناه.
نصيحة: قد يتطلب تنزيل الحزم وإنشاء بيئة جديدة باستخدام Conda قدرًا كبيرًا من مساحة القرص. افتراضيًا، ستستخدم Conda القرص الصلب الرئيسي للنظام. يمكنك تجنب ذلك عن طريق تحديد موقع مختلف لتنزيل الحزمة وبيئة على محرك أقراص مختلف:
تكوين كوندا - إضافة pkgs_dirs/ إنشاء كوندا env - بيئة الملف yml - بادئة / /gaussian_splatting كوندا تفعيل / /gaussian_splatting
إذا كنت تستطيع توفير مساحة القرص، فإننا نوصي باستخدام ملفات البيئة الخاصة بنا لإعداد بيئة تدريب مماثلة لبيئتنا. إذا كنت تريد إجراء تعديلات، يرجى ملاحظة أن التغييرات الرئيسية في الإصدار قد تؤثر على نتائج طريقتنا. ومع ذلك، تشير تجاربنا (المحدودة) إلى أن قاعدة التعليمات البرمجية تعمل بشكل جيد داخل بيئة أكثر حداثة (Python 3.8، PyTorch 2.0.0، CUDA 12). تأكد من إنشاء بيئة يتطابق فيها PyTorch وإصدار وقت تشغيل CUDA الخاص به ولا يحتوي CUDA SDK المثبت على اختلاف كبير في الإصدار مع إصدار CUDA الخاص بـ PyTorch.
يواجه بعض المستخدمين مشاكل في إنشاء الوحدات الفرعية على نظام التشغيل Windows ( cl.exe: File not found
أو ما شابه ذلك). يرجى النظر في الحل البديل لهذه المشكلة من الأسئلة الشائعة.
لتشغيل المحسن، استخدم ببساطة
python Train.py -s <المسار إلى مجموعة بيانات COLMAP أو NeRF الاصطناعية>
المسار إلى الدليل المصدر الذي يحتوي على مجموعة بيانات COLMAP أو Artificial NeRF.
المسار الذي يجب تخزين النموذج المدرب فيه ( output/
افتراضيًا).
دليل فرعي بديل لصور COLMAP ( images
بشكل افتراضي).
أضف هذه العلامة لاستخدام تقسيم التدريب/الاختبار بنمط MipNeRF360 للتقييم.
يحدد دقة الصور المحملة قبل التدريب. إذا تم توفير 1, 2, 4
أو 8
، فإنه يستخدم الدقة الأصلية أو 1/2 أو 1/4 أو 1/8، على التوالي. بالنسبة لجميع القيم الأخرى، يتم إعادة قياس العرض إلى الرقم المحدد مع الحفاظ على أبعاد الصورة. إذا لم يتم التعيين وتجاوز عرض الصورة المدخلة 1.6 كيلو بكسل، فسيتم إعادة قياس المدخلات تلقائيًا إلى هذا الهدف.
يحدد مكان وضع بيانات الصورة المصدر، cuda
افتراضيًا، ويوصى باستخدام cpu
إذا كان التدريب على مجموعة بيانات كبيرة/عالية الدقة، سيقلل من استهلاك VRAM، ولكنه يبطئ التدريب قليلاً. بفضل HrsPythonix.
أضف هذه العلامة لاستخدام خلفية بيضاء بدلاً من الأسود (افتراضي)، على سبيل المثال، لتقييم مجموعة بيانات NeRF الاصطناعية.
ترتيب التوافقيات الكروية المستخدمة (لا يزيد عن 3). 3
بشكل افتراضي.
ضع علامة لجعل خط الأنابيب يحسب للأمام والخلف لـ SHs باستخدام PyTorch بدلاً من نظامنا.
ضع علامة لجعل خط الأنابيب يحسب للأمام والخلف للتباين ثلاثي الأبعاد باستخدام PyTorch بدلاً من تبايننا.
تمكين وضع التصحيح إذا واجهت أخطاء. إذا فشلت أداة التنقيط، فسيتم إنشاء ملف dump
يمكنك إعادة توجيهه إلينا في مشكلة ما حتى نتمكن من إلقاء نظرة عليه.
تصحيح الأخطاء بطيء . يمكنك تحديد تكرار (يبدأ من 0) وبعد ذلك يصبح تصحيح الأخطاء أعلاه نشطًا.
إجمالي عدد التكرارات المطلوب التدريب عليها، 30_000
بشكل افتراضي.
عنوان IP لبدء تشغيل خادم واجهة المستخدم الرسومية، 127.0.0.1
بشكل افتراضي.
المنفذ المستخدم لخادم واجهة المستخدم الرسومية، 6009
بشكل افتراضي.
تكرارات مفصولة بمسافة يقوم فيها البرنامج النصي التدريبي بحساب L1 وPSNR عبر مجموعة الاختبار، 7000 30000
بشكل افتراضي.
تكرارات مفصولة بمسافات حيث يحفظ البرنامج النصي للتدريب النموذج الغوسي، 7000 30000
بشكل افتراضي.
تكرارات مفصولة بمسافات يتم فيها تخزين نقطة تفتيش للمتابعة لاحقًا، ويتم حفظها في دليل النموذج.
المسار إلى نقطة تفتيش محفوظة لمواصلة التدريب منها.
ضع علامة لحذف أي نص مكتوب في أنبوب الإخراج القياسي.
تتميز التوافقيات الكروية بمعدل تعلم 0.0025
بشكل افتراضي.
معدل تعلم العتامة هو 0.05
بشكل افتراضي.
تحجيم معدل التعلم، 0.005
بشكل افتراضي.
معدل التعلم بالتناوب، 0.001
بشكل افتراضي.
عدد الخطوات (من 0) التي ينتقل فيها معدل تعلم الموضع من initial
إلى final
. 30_000
بشكل افتراضي.
معدل تعلم الموضع ثلاثي الأبعاد الأولي، 0.00016
بشكل افتراضي.
معدل تعلم الموضع ثلاثي الأبعاد النهائي، 0.0000016
بشكل افتراضي.
مضاعف معدل تعلم الموضع (راجع Plenoxels)، 0.01
بشكل افتراضي.
التكرار حيث يبدأ التكثيف، 500
بشكل افتراضي.
التكرار حيث يتوقف التكثيف، 15_000
بشكل افتراضي.
الحد الذي يقرر ما إذا كان يجب تكثيف النقاط بناءً على تدرج الموضع ثنائي الأبعاد، 0.0002
بشكل افتراضي.
عدد مرات التكثيف، 100
(كل 100 تكرار) بشكل افتراضي.
عدد المرات التي يتم فيها إعادة تعيين العتامة، 3_000
بشكل افتراضي.
تأثير SSIM على الخسارة الإجمالية من 0 إلى 1، 0.2
افتراضيًا.
النسبة المئوية لمدى المشهد (0--1) يجب أن تتجاوز النقطة ليتم تكثيفها بالقوة، 0.01
بشكل افتراضي.
لاحظ أنه على غرار MipNeRF360، فإننا نستهدف الصور بدقة تتراوح بين 1-1.6 كيلو بكسل. للراحة، يمكن تمرير المدخلات ذات الحجم العشوائي وسيتم تغيير حجمها تلقائيًا إذا تجاوز عرضها 1600 بكسل. نوصي بالاحتفاظ بهذا السلوك، ولكن قد تضطر إلى التدريب على استخدام صورك ذات الدقة العالية عن طريق الإعداد -r 1
.
تتم استضافة مشاهد MipNeRF360 من قبل مؤلفي الورقة هنا. يمكنك العثور على مجموعات بيانات SfM الخاصة بنا للدبابات والمعابد والمزج العميق هنا. إذا لم تقم بتوفير دليل نموذج الإخراج ( -m
)، فستتم كتابة النماذج المدربة في مجلدات بأسماء فريدة عشوائية داخل دليل output
. عند هذه النقطة، يمكن عرض النماذج المدربة باستخدام المشاهد في الوقت الفعلي (انظر المزيد أدناه).
افتراضيًا، تستخدم النماذج المدربة جميع الصور المتوفرة في مجموعة البيانات. لتدريبهم أثناء حجب مجموعة اختبار للتقييم، استخدم علامة --eval
. بهذه الطريقة، يمكنك عرض مجموعات التدريب/الاختبار وإنتاج مقاييس الخطأ كما يلي:
python Train.py -s--eval # تدريب مع قطار/اختبار Splitpython render.py -m # إنشاء renderingspython metrics.py -m # حساب مقاييس الخطأ في العروض
إذا كنت ترغب في تقييم نماذجنا المدربة مسبقًا، فسيتعين عليك تنزيل مجموعات بيانات المصدر المقابلة والإشارة إلى موقعها render.py
.py باستخدام علامة --source_path/-s
إضافية. ملاحظة: تم إنشاء النماذج المدربة مسبقًا باستخدام قاعدة بيانات الإصدار. تم تنظيف قاعدة التعليمات البرمجية هذه وتتضمن إصلاحات للأخطاء، وبالتالي فإن المقاييس التي تحصل عليها من تقييمها ستختلف عن تلك الموجودة في الورقة.
python render.py -m <المسار إلى النموذج المُدرب مسبقًا> -s <المسار إلى مجموعة بيانات COLMAP>python metrics.py -m <المسار إلى النموذج المُدرب مسبقًا>
المسار إلى دليل النموذج المدرب الذي تريد إنشاء عروض له.
ضع علامة لتخطي عرض مجموعة التدريب.
ضع علامة لتخطي عرض مجموعة الاختبار.
ضع علامة لحذف أي نص مكتوب في أنبوب الإخراج القياسي.
ستتم قراءة المعلمات أدناه تلقائيًا من مسار النموذج، بناءً على ما تم استخدامه للتدريب. ومع ذلك، يمكنك تجاوزها من خلال توفيرها بشكل صريح في سطر الأوامر.
المسار إلى الدليل المصدر الذي يحتوي على مجموعة بيانات COLMAP أو Artificial NeRF.
دليل فرعي بديل لصور COLMAP ( images
بشكل افتراضي).
أضف هذه العلامة لاستخدام تقسيم التدريب/الاختبار بنمط MipNeRF360 للتقييم.
يغير دقة الصور المحملة قبل التدريب. إذا تم توفير 1, 2, 4
أو 8
، فإنه يستخدم الدقة الأصلية أو 1/2 أو 1/4 أو 1/8، على التوالي. بالنسبة لجميع القيم الأخرى، يتم إعادة قياس العرض إلى الرقم المحدد مع الحفاظ على أبعاد الصورة. 1
بشكل افتراضي.
أضف هذه العلامة لاستخدام خلفية بيضاء بدلاً من الأسود (افتراضي)، على سبيل المثال، لتقييم مجموعة بيانات NeRF الاصطناعية.
ضع علامة على عرض خط الأنابيب باستخدام SHs المحسوبة من PyTorch بدلاً من منتجاتنا.
ضع علامة على عرض خط الأنابيب باستخدام التباين المشترك ثلاثي الأبعاد المحسوب من PyTorch بدلاً من تبايننا.
قائمة مفصولة بمسافات لمسارات النماذج التي ينبغي حساب المقاييس لها.
نحن نقدم كذلك البرنامج النصي full_eval.py
. يحدد هذا البرنامج النصي الروتين المستخدم في تقييمنا ويوضح استخدام بعض المعلمات الإضافية، على سبيل المثال، --images (-i)
لتحديد أدلة الصور البديلة ضمن مجموعات بيانات COLMAP. إذا قمت بتنزيل واستخراج جميع بيانات التدريب، فيمكنك تشغيلها على النحو التالي:
python full_eval.py -m360-tat <مجلد الدبابات والمعابد> -db <مجلد المزج العميق>
في الإصدار الحالي، تستغرق هذه العملية حوالي 7 ساعات على أجهزتنا المرجعية التي تحتوي على A6000. إذا كنت تريد إجراء التقييم الكامل على نماذجنا المدربة مسبقًا، فيمكنك تحديد موقع تنزيلها وتخطي التدريب.
python full_eval.py -o <الدليل مع النماذج المدربة مسبقًا> -skip_training -m360-tat <مجلد الدبابات والمعابد> -db <مجلد المزج العميق>
إذا كنت تريد حساب المقاييس الموجودة على صور التقييم الخاصة بورقتنا البحثية، فيمكنك أيضًا تخطي العرض. وفي هذه الحالة، ليس من الضروري توفير مجموعات البيانات المصدر. يمكنك حساب المقاييس لمجموعات صور متعددة في المرة الواحدة.
python full_eval.py -m <دليل مع صور التقييم>/garden ... --skip_training --skip_rendering
نحن نقدم مشاهدين تفاعليين لطريقتنا: عن بعد وفي الوقت الحقيقي. تعتمد حلول العرض لدينا على إطار عمل SIBR، الذي طورته مجموعة GRAPHDECO للعديد من مشاريع تركيب المشاهد الجديدة.
وحدة معالجة الرسومات وبرامج التشغيل الجاهزة لـ OpenGL 4.5 (أو أحدث برامج MESA)
يوصى بـ 4 جيجابايت من VRAM
وحدة معالجة رسومات جاهزة لـ CUDA مع إمكانية حسابية 7.0+ (فقط للعارض في الوقت الفعلي)
Visual Studio أو g++، وليس Clang (استخدمنا Visual Studio 2019 لنظام التشغيل Windows)
CUDA SDK 11، التثبيت بعد Visual Studio (استخدمنا 11.8)
CMake (الإصدار الأخير، استخدمنا 3.24)
7zip (فقط على نظام التشغيل Windows)
نحن نقدم الثنائيات المعدة مسبقًا لنظام التشغيل Windows هنا. نوصي باستخدامها على نظام التشغيل Windows لإعداد فعال، نظرًا لأن إنشاء SIBR يتضمن العديد من التبعيات الخارجية التي يجب تنزيلها وتجميعها سريعًا.
إذا قمت بالاستنساخ باستخدام وحدات فرعية (على سبيل المثال، باستخدام --recursive
)، فسيتم العثور على الكود المصدري للمشاهدين في SIBR_viewers
. يعمل عارض الشبكة ضمن إطار عمل SIBR لتطبيقات العرض المستندة إلى الصور.
يجب أن يعتني CMake بتبعياتك.
قرص مضغوط SIBR_viewers cmake -Bbuild .cmake --build build --target install --config RelWithDebInfo
يمكنك تحديد تكوين مختلف، على سبيل المثال Debug
إذا كنت بحاجة إلى مزيد من التحكم أثناء التطوير.
ستحتاج إلى تثبيت بعض التبعيات قبل تشغيل إعداد المشروع.
# التبعياتsudo apt install -y libglew-dev libassimp-dev libboost-all-dev libgtk-3-dev libopencv-dev libglfw3-dev libavdevice-dev libavcodec-dev libeigen3-dev libxxf86vm-dev libembree-dev# Project setupcd SIBR_viewers cmake -Bbuild . -DCMAKE_BUILD_TYPE=الإصدار # أضف -G Ninja لبناء أسرعcmake --build build -j24 --target install
لم يتم اختبار التوافق مع الإصدارات السابقة مع Focal Fossa بشكل كامل، ولكن يجب أن يظل بناء SIBR باستخدام CMake يعمل بعد استدعاءه
بوابة الخروج fossa_compatibility
توفر واجهة SIBR عدة طرق للتنقل في المشهد. افتراضيًا، ستبدأ باستخدام متصفح FPS، والذي يمكنك التحكم فيه باستخدام W, A, S, D, Q, E
للترجمة بالكاميرا و I, K, J, L, U, O
للتدوير. وبدلاً من ذلك، قد ترغب في استخدام متصفح على نمط كرة التتبع (اختر من القائمة العائمة). يمكنك أيضًا التقاط الكاميرا من مجموعة البيانات باستخدام الزر Snap to
أو العثور على أقرب كاميرا باستخدام Snap to closest
. تتيح لك القوائم العائمة أيضًا تغيير سرعة التنقل. يمكنك استخدام Scaling Modifier
للتحكم في حجم Gaussians المعروضة، أو إظهار سحابة النقطة الأولية.
بعد استخراج العارضين أو تثبيتهم، يمكنك تشغيل تطبيق SIBR_remoteGaussian_app[_config]
المترجم في
، على سبيل المثال:
.//bin/SIBR_remoteGaussian_app
يتيح لك عارض الشبكة الاتصال بعملية تدريب جارية على نفس الجهاز أو على جهاز آخر. إذا كنت تتدرب على نفس الجهاز ونظام التشغيل، فلن تكون هناك حاجة إلى معلمات سطر الأوامر: يقوم المحسن بإبلاغ موقع بيانات التدريب إلى عارض الشبكة. افتراضيًا، سيحاول المحسن وعارض الشبكة إنشاء اتصال على المضيف المحلي على المنفذ 6009 . يمكنك تغيير هذا السلوك من خلال توفير معلمات --ip
و --port
متطابقة لكل من المحسّن وعارض الشبكة. إذا كان المسار الذي يستخدمه المحسن للعثور على بيانات التدريب لا يمكن الوصول إليه بواسطة عارض الشبكة لسبب ما (على سبيل المثال، بسبب تشغيله على أجهزة (افتراضية) مختلفة)، فيمكنك تحديد موقع تجاوز للعارض باستخدام -s
.
وسيطة لتجاوز مسار النموذج إلى مجموعة البيانات المصدر.
عنوان IP الذي سيتم استخدامه للاتصال ببرنامج نصي تدريبي قيد التشغيل.
المنفذ الذي سيتم استخدامه للاتصال ببرنامج نصي تدريبي قيد التشغيل.
يستغرق رقمين مفصولين بمسافات لتحديد الدقة التي يحدث بها عرض الشبكة، وهو عرض 1200
بشكل افتراضي. لاحظ أنه لفرض جانب يختلف عن الصور المدخلة، فإنك تحتاج إلى --force-aspect-ratio
أيضًا.
ضع علامة لتحميل صور مجموعة البيانات المصدر ليتم عرضها في العرض العلوي لكل كاميرا.
بعد استخراج العارضين أو تثبيتهم، يمكنك تشغيل تطبيق SIBR_gaussianViewer_app[_config]
المترجم في
، على سبيل المثال:
.//bin/SIBR_gaussianViewer_app -m <الطريق إلى النموذج المدرب>
يجب أن يكون كافيًا توفير المعلمة -m
التي تشير إلى دليل نموذج مُدرب. وبدلاً من ذلك، يمكنك تحديد موقع تجاوز لبيانات إدخال التدريب باستخدام -s
. لاستخدام دقة محددة بخلاف الدقة التي تم اختيارها تلقائيًا، حدد --rendering-size
. ادمجها مع --force-aspect-ratio
إذا كنت تريد الدقة الدقيقة ولا تمانع في تشويه الصورة.
لفتح معدل الإطارات الكامل، يرجى تعطيل V-Sync على جهازك وأيضًا في التطبيق (القائمة → العرض). في نظام متعدد وحدات معالجة الرسومات (على سبيل المثال، الكمبيوتر المحمول) يجب أن تكون وحدة معالجة الرسومات OpenGL/Display الخاصة بك هي نفس وحدة معالجة الرسومات CUDA الخاصة بك (على سبيل المثال، عن طريق تعيين تفضيلات وحدة معالجة الرسومات الخاصة بالتطبيق على نظام التشغيل Windows، انظر أدناه) للحصول على أقصى قدر من الأداء. بالإضافة إلى السحابة النقطية الأولية والبقع، لديك أيضًا خيار تصور Gaussians من خلال عرضها كأشكال إهليلجية من القائمة العائمة. يتمتع SIBR بالعديد من الوظائف الأخرى، يرجى الاطلاع على الوثائق للحصول على مزيد من التفاصيل حول العارض وخيارات التنقل وما إلى ذلك. يوجد أيضًا عرض علوي (متوفر من القائمة) يوضح موضع كاميرات الإدخال وسحابة نقطة SfM الأصلية؛ يرجى ملاحظة أن العرض العلوي يؤدي إلى إبطاء العرض عند تمكينه. يستخدم العارض في الوقت الفعلي أيضًا عملية إعدام أكثر عدوانية وسرعة، والتي يمكن تبديلها في القائمة العائمة. إذا واجهت مشكلة يمكن حلها عن طريق إيقاف التشغيل السريع، فيرجى إخبارنا بذلك.
تتوقع أدوات تحميل COLMAP لدينا بنية مجموعة البيانات التالية في موقع مسار المصدر:
|---images | |--- | |--- | |---... |---sparse |---0 |---cameras.bin |---images.bin |---points3D.bin
لإجراء عملية التنقيط، يجب أن تكون طرازات الكاميرا إما كاميرا SIMPLE_PINHOLE أو كاميرا PINHOLE. نحن نقدم برنامج تحويل نصي convert.py
، لاستخراج الصور غير المشوهة ومعلومات SfM من الصور المدخلة. اختياريًا، يمكنك استخدام ImageMagick لتغيير حجم الصور غير المشوهة. تشبه عملية إعادة القياس هذه طريقة MipNeRF360، أي أنها تقوم بإنشاء صور بدقة 1/2 و1/4 و1/8 في المجلدات المقابلة. لاستخدامها، يرجى أولاً تثبيت إصدار حديث من COLMAP (من الأفضل أن يعمل بنظام CUDA) وImageMagick. ضع الصور التي تريد استخدامها في الدليل
.
|---input |--- |--- |---...
إذا كان لديك COLMAP وImageMagick على مسار النظام لديك، فيمكنك ببساطة تشغيلهما
python Convert.py -s[--resize] # إذا لم يتم تغيير الحجم، فلن تكون هناك حاجة إلى ImageMagick
وبدلاً من ذلك، يمكنك استخدام المعلمات الاختيارية --colmap_executable
و-- --magick_executable
للإشارة إلى المسارات المعنية. يرجى ملاحظة أنه في نظام التشغيل Windows، يجب أن يشير الملف القابل للتنفيذ إلى ملف COLMAP .bat
الذي يعتني بإعداد بيئة التنفيذ. بمجرد الانتهاء من ذلك، سيحتوي
على بنية مجموعة بيانات COLMAP المتوقعة مع صور إدخال غير مشوهة تم تغيير حجمها، بالإضافة إلى صورك الأصلية وبعض البيانات المؤقتة (المشوهة) في الدليل distorted
.
إذا كان لديك مجموعة بيانات COLMAP الخاصة بك دون تشويه (على سبيل المثال، باستخدام كاميرا OPENCV
)، فيمكنك محاولة تشغيل الجزء الأخير من البرنامج النصي فقط: ضع الصور في input
ومعلومات COLMAP في دليل فرعي distorted
:
|---input | |--- | |--- | |---... |---distorted |---database.db |---sparse |---0 |---...
ثم اركض
python Convert.py -s--skip_matching [--resize] # إذا لم يتم تغيير الحجم، فلن تكون هناك حاجة إلى ImageMagick
ضع علامة لتجنب استخدام GPU في COLMAP.
ضع علامة للإشارة إلى أن معلومات COLMAP متاحة للصور.
موقع المدخلات.
طراز الكاميرا الذي سيتم استخدامه لخطوات المطابقة المبكرة، OPENCV
افتراضيًا.
وضع علامة لإنشاء إصدارات تم تغيير حجمها من الصور المدخلة.
المسار إلى الملف القابل للتنفيذ COLMAP ( .bat
على نظام التشغيل Windows).
المسار إلى ImageMagick القابل للتنفيذ.
لقد قمنا بدمج البدائل المنسدلة من Taming-3dgs 1 مع ssim المدمج في قاعدة التعليمات البرمجية الأصلية لتسريع أوقات التدريب. بمجرد التثبيت، يقوم أداة التنقيط المتسارعة بتسليم ملف --optimizer_type default
و --optimizer_type sparse_adam
.
للحصول على أوقات تدريب أسرع، يجب عليك أولاً تثبيت أداة التنقيط المسرَّعة في بيئتك:
إلغاء تثبيت النقطة diff-gaussian-rasterization -ycd الوحدات الفرعية/diff-gaussian-rasterization بناء جمهورية مقدونيا - ص بوابة الخروج 3dgs_accel تثبيت النقطة.
بعد ذلك يمكنك إضافة المعلمة التالية لاستخدام المُحسِّن المتفرق adam عند تشغيل train.py
:
--optimizer_type sparse_adam
لاحظ أن أداة المسح المخصصة هذه لها سلوك مختلف عن الإصدار الأصلي، لمزيد من التفاصيل حول أوقات التدريب، يرجى الاطلاع على إحصائيات أوقات التدريب .
1. ماليك وجويل، وآخرون. “ترويض 3DGS: حقول إشعاع عالية الجودة بموارد محدودة”. أوراق مؤتمر سيغراف آسيا 2024، 2024، https://doi.org/10.1145/3680528.3687694، جيثب
للحصول على مشاهد مُعاد بناؤها بشكل أفضل، نستخدم خرائط العمق كسابقات أثناء التحسين مع كل صورة مدخلة. إنه يعمل بشكل أفضل على الأجزاء غير المزخرفة، على سبيل المثال: الطرق ويمكنه إزالة العوائم. استخدمت العديد من الأبحاث أفكارًا مماثلة لتحسين جوانب مختلفة من 3DGS؛ (على سبيل المثال DepthRegularizedGS، SparseGS، DNGaussian). إن تنظيم العمق الذي قمنا بدمجه هو ذلك المستخدم في ورقة 3DGS الهرمية الخاصة بنا، ولكنه مطبق على 3DGS الأصلي؛ بالنسبة لبعض المشاهد (مثل مشاهد DeepBlending)، يتم تحسين الجودة بشكل ملحوظ؛ بالنسبة للآخرين، إما أن يحدث فرقًا بسيطًا أو قد يكون أسوأ. على سبيل المثال، تظهر النتائج الفوائد المحتملة والإحصائيات المتعلقة بالجودة، يرجى الاطلاع هنا: إحصائيات التنظيم المتعمق.
عند التدريب على مجموعة بيانات تركيبية، يمكن إنتاج خرائط عميقة ولا تتطلب مزيدًا من المعالجة لاستخدامها في طريقتنا.
بالنسبة لمجموعات البيانات الحقيقية، يجب إنشاء خرائط عميقة لكل صورة مدخلة، ولإنشاءها، يرجى القيام بما يلي:
استنساخ عمق أي شيء v2:
git clone https://github.com/DepthAnything/Depth-Anything-V2.git
قم بتنزيل الأوزان من Depth-Anything-V2-Large وضعها تحت Depth-Anything-V2/checkpoints/
إنشاء خرائط العمق:
python Depth-Anything-V2/run.py --encoder vitl --pred-only --grayscale --img-path--outdir
قم بإنشاء ملف depth_params.json
باستخدام:
python utils/make_depth_scale.py --base_dir--depths_dir
يجب تعيين معلمة جديدة عند التدريب إذا كنت تريد استخدام تنظيم العمق -d
.
للتعويض عن تغييرات التعريض الضوئي في الصور المدخلة المختلفة، نقوم بتحسين التحويل المتقارب لكل صورة تمامًا كما هو الحال في Hierarchical 3dgs.
يمكن أن يؤدي هذا إلى تحسين نتائج إعادة الإعمار بشكل كبير في اللقطات "في البرية"، على سبيل المثال، باستخدام الهاتف الذكي عندما لا يكون إعداد التعريض الضوئي للكاميرا ثابتًا. على سبيل المثال، تظهر النتائج الفوائد المحتملة والإحصائيات المتعلقة بالجودة، يرجى الاطلاع هنا: إحصائيات تعويض التعرض.
أضف المعلمات التالية لتمكينه:
--exposure_lr_init 0.001 --exposure_lr_final 0.0001 --exposure_lr_delay_steps 5000 --exposure_lr_delay_mult 0.001 --train_test_exp
مرة أخرى، استخدمت أوراق بحثية ممتازة أخرى أفكارًا مماثلة، على سبيل المثال NeRF-W، وURF.
أضفنا مرشح EWA من Mip Splatting إلى قاعدة التعليمات البرمجية لدينا لإزالة الأسماء المستعارة. يتم تعطيله افتراضيًا ولكن يمكنك تمكينه عن طريق إضافة --antialiasing
عند التدريب على مشهد باستخدام train.py
أو العرض باستخدام render.py
. يمكن تبديل الحواف في عارض SIBR، وهو معطل افتراضيًا ولكن يجب عليك تمكينه عند عرض مشهد تم تدريبه باستخدام --antialiasing
. تم تدريب هذا المشهد باستخدام --antialiasing
.
Views > Top view
يعرض Top view
سحابة نقطة SfM في عرض آخر باستخدام كاميرات الإدخال المقابلة وكاميرا مستخدم Point view
. يتيح ذلك تصور مدى بعد المشاهد عن كاميرات الإدخال على سبيل المثال.
إنه عرض ثلاثي الأبعاد بحيث يمكن للمستخدم التنقل من خلاله تمامًا كما هو الحال في Point view
(الأوضاع المتاحة: FPS، كرة التتبع، المدار).
تتوفر الخيارات لتخصيص هذا العرض، ويمكن تعطيل/تمكين الشبكات وتعديل مقاييسها.
هناك وظيفة إضافية مفيدة تتمثل في الانتقال إلى موضع صورة الإدخال، والتلاشي تدريجيًا إلى عرض نقطة SfM في ذلك الموضع (على سبيل المثال، للتحقق من محاذاة الكاميرا). يمكن عرض المشاهدات من كاميرات الإدخال في Top view
( لاحظ أنه يجب تعيين --images-path
في سطر الأوامر ). يمكن للمرء التقاط كاميرا Top view
إلى أقرب كاميرا إدخال من كاميرا المستخدم في Point view
عن طريق النقر فوق Top view settings > Cameras > Snap to closest
.دعم OpenXR
يتم دعم OpenXR في الفرع gaussian_code_release_openxr
داخل هذا الفرع، يمكنك العثور على وثائق لدعم الواقع الافتراضي هنا.
من أين يمكنني الحصول على مجموعات البيانات، على سبيل المثال، تلك المشار إليها في full_eval.py
؟ يتم توفير مجموعة بيانات MipNeRF360 من قبل مؤلفي الورقة الأصلية على موقع المشروع. لاحظ أنه لا يمكن مشاركة اثنتين من مجموعات البيانات بشكل علني ويتطلب منك استشارة المؤلفين مباشرة. بالنسبة إلى Tanks&Temples وDeep Blending، يرجى استخدام روابط التنزيل المتوفرة في أعلى الصفحة. وبدلاً من ذلك، يمكنك الوصول إلى البيانات المستنسخة (الحالة: أغسطس 2023!) من HuggingFace
كيف يمكنني استخدام هذا لمجموعة بيانات أكبر بكثير، مثل منطقة المدينة؟ لم يتم تصميم الطريقة الحالية لهذه الأشياء، ولكن مع وجود ذاكرة كافية، يجب أن تنجح. ومع ذلك، قد يواجه النهج صعوبة في المشاهد التفصيلية متعددة النطاق (اللقطات القريبة للغاية، الممزوجة بلقطات بعيدة). وهذا هو الحال عادةً، على سبيل المثال، في مجموعات بيانات القيادة (السيارات القريبة والمباني البعيدة). بالنسبة لمثل هذه المشاهد، يمكنك خفض --position_lr_init
و --position_lr_final
و --scaling_lr
(x0.3، x0.1، ...). كلما كان المشهد أكثر اتساعًا، كلما انخفضت هذه القيم. أدناه، نستخدم معدلات التعلم الافتراضية (يسار) و-- --position_lr_init 0.000016 --scaling_lr 0.001"
(يمين).
أستخدم نظام التشغيل Windows ولا أستطيع إنشاء الوحدات الفرعية، فماذا أفعل؟ ضع في اعتبارك اتباع الخطوات الواردة في الفيديو التعليمي الممتاز هنا، ونأمل أن تساعدك. الترتيب الذي تتم به الخطوات مهم! وبدلاً من ذلك، فكر في استخدام قالب Colab المرتبط.
لا يزال لا يعمل. يقول شيئا عن cl.exe
. ماذا أفعل؟ وجد المستخدم Henry Pearce حلاً بديلاً. يمكنك محاولة إضافة مسار الاستوديو المرئي إلى متغيرات البيئة الخاصة بك (قد يختلف رقم الإصدار الخاص بك)؛ C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.29.30133binHostx64x64
ثم تأكد من بدء تشغيل موجه conda جديد وقرص مضغوط إلى موقع الريبو الخاص بك وجرب ذلك؛
conda activate gaussian_splatting cd/gaussian-splatting pip install submodulesdiff-gaussian-rasterization pip install submodulessimple-knn
أنا أستخدم نظام التشغيل macOS/Puppy Linux/Greenhat ولا أستطيع البناء، فماذا أفعل؟ عذرًا، لا يمكننا تقديم الدعم للأنظمة الأساسية خارج تلك التي ندرجها في ملف README هذا. فكر في استخدام قالب Colab المرتبط.
ليس لدي 24 جيجابايت من VRAM للتدريب، ماذا أفعل؟ يتم تحديد استهلاك VRAM من خلال عدد النقاط التي يتم تحسينها، والتي تزداد بمرور الوقت. إذا كنت ترغب فقط في التدرب على تكرارات 7K، فستحتاج إلى أقل بكثير. للقيام بروتين التدريب الكامل وتجنب نفاد الذاكرة، يمكنك زيادة --densify_grad_threshold
أو --densification_interval
أو تقليل قيمة --densify_until_iter
. لكن لاحظ أن هذا سيؤثر على جودة النتيجة. حاول أيضًا ضبط --test_iterations
على -1
لتجنب ارتفاع الذاكرة أثناء الاختبار. إذا كان --densify_grad_threshold
مرتفعًا جدًا، فلن يحدث أي تكثيف ويجب أن يكتمل التدريب إذا تم تحميل المشهد نفسه بنجاح.
24 جيجابايت من VRAM للتدريب عالي الجودة لا يزال كثيرًا! لا يمكننا أن نفعل ذلك مع أقل؟ نعم على الأرجح. بواسطة كاليفورنيا لدينا