هذا هو التنفيذ الرسمي لـ instruct-nerf2nerf.

يتم بناء adctruct-nerf2nerf على nerfstudio وبالتالي لديه نفس التبعية. على وجه التحديد Pytorch و tinycudann مطلوب.
اتبع الإرشادات الموجودة في هذا الرابط لإنشاء البيئة وتثبيت التبعيات. اتبع فقط الأوامر حتى tinycudann. بعد تثبيت التبعيات ، العودة هنا.
بمجرد الانتهاء من تثبيت التبعيات ، يمكنك تثبيت addruct-nerf2nerf باستخدام الأمر التالي:
pip install git+https://github.com/ayaanzhaque/instruct-nerf2nerfاختياري : إذا كنت ترغب في العمل مع الكود مباشرة ، فقم بتثبيت الريبو:
git clone https://github.com/ayaanzhaque/instruct-nerf2nerf.git
cd instruct-nerf2nerf
pip install --upgrade pip setuptools
pip install -e . يجب أن يتضمن الأمر التالي in2n كأحد الخيارات:
ns-train -h
لتحرير NERF ، يجب أولاً تدريب مشهد nerfacto العادي باستخدام بياناتك. لمعالجة بياناتك المخصصة ، يرجى الرجوع إلى هذه الوثائق.
بمجرد حصولك على بياناتك المخصصة ، يمكنك تدريب NERF الأولي مع الأمر التالي:
ns-train nerfacto --data {PROCESSED_DATA_DIR}لمزيد من التفاصيل حول تدريب NERF ، راجع وثائق NerfStudio.
بمجرد تدريب المشهد الخاص بك بالكامل ، سيتم حفظ نقاط التفتيش على دليل outputs . انسخ المسار إلى مجلد nerfstudio_models .
لبدء التدريب لتحرير NERF ، قم بتشغيل الأمر التالي:
ns-train in2n --data {PROCESSED_DATA_DIR} --load-dir {outputs/.../nerfstudio_models} --pipeline.prompt { " prompt " } --pipeline.guidance-scale 7.5 --pipeline.image-guidance-scale 1.5 يجب أن يكون {PROCESSED_DATA_DIR} نفس المسار المستخدم في تدريب NERF الأصلي. باستخدام أوامر CLI ، يمكنك اختيار المطالبة ومقاييس التوجيه المستخدمة في instructPix2Pix.
بعد تدريب NERF ، يمكنك تقديم NERF باستخدام سير عمل NerfStudio القياسي ، الموجود هنا.
من المهم ، يرجى ملاحظة أن تدريب NERF على الصور ذات الدقة التي يزيد حجمها عن 512 من المحتمل أن يتسبب في إلقاء أخطاء adructPix2PIX. علاوة على ذلك ، يبدو أن InstructPix2Pix يؤدي أسوأ بكثير على الصور بدقة أعلى. نقترح التدريب مع دقة حوالي 512 (أقصى البعد) ، لذا أضف العلامة التالية إلى نهاية كل من nerfacto و in2n أمر التدريب: nerfstudio-data --downscale-factor {2,4,6,8} إلى نهاية أوامر ns-train . بدلاً من ذلك ، يمكنك تقليص مجموعة البيانات بنفسك وتحديث ملف transforms.json الخاص بك (Scale Down W ، H ، Fl_x ، Fl_y ، CX ، CY) ، أو يمكنك استخدام مقياس صورة أصغر توفره NerfStudio.
نوصي بالتقاط البيانات باستخدام الصور من polycam ، حيث تعمل مجموعات البيانات الأصغر بشكل أفضل وأسرع مع طريقتنا.
إذا كان لديك وحدات معالجة الرسومات المتعددة ، يمكن تسريع التدريب عن طريق وضع instructPix2pix على وحدة معالجة الرسومات المنفصلة. للقيام بذلك ، أضف- --pipeline.ip2p-device cuda:{device-number} إلى أمر التدريب الخاص بك.
تستخدم طريقتنا ~ 16k أشعة و LPIPs ، ولكن ليس كل وحدات معالجة الرسومات لديها ذاكرة كافية لتشغيل هذا التكوين. نتيجة لذلك ، قدمنا تكوينين بديلين يستخدمون ذاكرة أقل ، لكن كن على علم بأن هذه التكوينات تؤدي إلى انخفاض الأداء. الاختلافات هي الدقة المستخدمة في intructpix2pix وما إذا كانت LPIPs تستخدم (والتي تتطلب 4x أشعة أخرى). يتم توفير تفاصيل كل تكوين في الجدول أدناه.
| طريقة | وصف | ذاكرة | جودة |
|---|---|---|---|
in2n | نموذج كامل ، يستخدم في الورق | ~ 15 جيجابايت | أفضل |
in2n-small | نموذج نصف الدقة | ~ 12 جيجابايت | جيد |
in2n-tiny | نصف الدقة مع عدم وجود LPIPS | ~ 10 جيجابايت | نعم |
حاليا ، قمنا بتعيين عدد أقصى التكرارات لتدريب in2n ليكون 15k iteratios. في أغلب الأحيان ، سيبدو التحرير جيدًا بعد تكرارات ~ 10K. إذا كنت ترغب في التدريب لفترة أطول ، فما عليك سوى إعادة تحميل نقطة تفتيش in2n ومتابعة التدريب ، أو التغيير --max-num-iterations 30000 .
إذا كان التحرير الخاص بك لا يعمل كما تريد ، فمن المحتمل أن يكون ذلك بسبب تكافح instructPix2Pix مع صورك ومطالبة. نوصي بأخذ واحدة من وجهات نظر التدريب الخاصة بك ومحاولة تحريرها في 2D أولاً باستخدام instructPix2Pix ، والتي يمكن القيام بها في مساحة المعانقة هذه. يمكن العثور على المزيد من النصائح حول الحصول على تعديل جيد هنا.
لقد قمنا ببناء امتداد لـ instruct-nerf2nerf للتخلي عن غاوسي يسمى instruct-gs2gs. يمكن استخدام مستودعهم كمثال على كيفية بناء مشاريع مستقبلية استنادًا إلى addruct-nerf2nerf.
يرجى فتح مشكلات github لأي مشاكل التثبيت/الاستخدام التي تواجهها. لقد حاولنا دعم مجموعة واسعة من وحدات معالجة الرسومات ، ولكن قد يكون من الضروري توفير المزيد من الإصدارات ذات الطباعة المنخفضة. يرجى المساهمة في أي تغييرات لتحسين استخدام الذاكرة!
لبناء addruct-endruct-nerf2nerf ، نقدم تفسيرات لمكونات الكود الأساسي.
in2n_datamanager.py : هذا الملف متطابق تقريبًا مع base_datamanager.py في nerfstudio. الفرق الرئيسي هو أن موتر مجموعة البيانات بأكمله يتم حسابه مسبقًا في طريقة setup_train بدلاً من أخذ عينات من طريقة next_train في كل مرة.
in2n_pipeline.py : هذا الملف يبني على وحدة خط الأنابيب في nerfstudio. تقوم طريقة get_train_loss_dict بتأييد الصور والأماكن التي تم تحريرها إلى مجموعة البيانات.
ip2p.py : يضم هذا الملف نموذج instructPix2Pix (باستخدام تطبيق diffusers ). طريقة edit_image هي المكان الذي يتم فيه إزالة الصورة باستخدام نموذج الانتشار ، وترد مجموعة متنوعة من أساليب المساعدة في هذا الملف أيضًا.
in2n.py : نقوم بكتابة طريقة get_loss_dict لاستخدام LPIPS فقدان و L1loss.
يمكنك العثور على ورقتنا على Arxiv.
إذا وجدت هذا الرمز أو وجدت الورقة مفيدة لبحثك ، فيرجى التفكير في:
@inproceedings{instructnerf2023,
author = {Haque, Ayaan and Tancik, Matthew and Efros, Alexei and Holynski, Aleksander and Kanazawa, Angjoo},
title = {Instruct-NeRF2NeRF: Editing 3D Scenes with Instructions},
booktitle = {Proceedings of the IEEE/CVF International Conference on Computer Vision},
year = {2023},
}