التنفيذ الرسمي لـ "Splatter Image: إعادة بناء ثلاثي الأبعاد فائق السرعة للعرض الفردي" (CVPR 2024)
[16 أبريل 2024] العديد من التحديثات الكبيرة للمشروع منذ الإصدار الأول:
تحقق من العرض التوضيحي عبر الإنترنت. غالبًا ما يكون تشغيل العرض التوضيحي محليًا أسرع وستكون قادرًا على رؤية الحلقات المقدمة باستخدام Gaussian Splatting (على عكس كائن .ply المستخرج الذي يمكنه إظهار المصنوعات اليدوية). لتشغيل العرض التوضيحي محليًا، ما عليك سوى اتباع تعليمات التثبيت أدناه، ثم الاتصال بعد ذلك:
python gradio_app.py
conda create --name splatter-image
conda activate splatter-image
قم بتثبيت Pytorch باتباع التعليمات الرسمية. مجموعة Pytorch / Python / Pytorch3D التي تم التحقق من عملها هي:
تثبيت المتطلبات الأخرى:
pip install -r requirements.txt
قم بتثبيت جهاز عرض Gaussian Splatting، أي المكتبة الخاصة بتقديم سحابة Gaussian Point إلى صورة ما. للقيام بذلك، اسحب مستودع Gaussian Splatting، وبعد تنشيط بيئة conda الخاصة بك، قم بتشغيل pip install submodules/diff-gaussian-rasterization
. سوف تحتاج إلى تلبية متطلبات الأجهزة والبرامج. لقد قمنا بكل تجاربنا على وحدة معالجة الرسومات NVIDIA A6000 وقياسات السرعة على وحدة معالجة الرسومات NVIDIA V100.
إذا كنت ترغب في التدريب على بيانات CO3D، فستحتاج إلى تثبيت Pytorch3D 0.7.2. انظر التعليمات هنا. يوصى بالتثبيت باستخدام نقطة من ثنائي تم إنشاؤه مسبقًا. ابحث عن ثنائي متوافق هنا وقم بتثبيته باستخدام pip
. على سبيل المثال، مع Python 3.8، وPytorch 1.13.0، وCUDA 11.6، قم بتشغيل pip install --no-index --no-cache-dir pytorch3d -f https://anaconda.org/pytorch3d/pytorch3d/0.7.2/download/linux-64/pytorch3d-0.7.2-py38_cu116_pyt1130.tar.bz2
.
للتدريب/التقييم على فئات ShapeNet-SRN (السيارات والكراسي) يرجى تنزيل srn_*.zip (* = السيارات أو الكراسي) من مجلد بيانات PixelNeRF. قم بفك ضغط ملف البيانات وقم بتغيير SHAPENET_DATASET_ROOT
في datasets/srn.py
إلى المجلد الأصلي للمجلد الذي تم فك ضغطه. على سبيل المثال، إذا كانت بنية المجلد الخاص بك هي: /home/user/SRN/srn_cars/cars_train
، في datasets/srn.py
قم بتعيين SHAPENET_DATASET_ROOT="/home/user/SRN"
. ليست هناك حاجة إلى معالجة مسبقة إضافية.
للتدريب/التقييم على CO3D، قم بتنزيل فصول الصنبور والدمى من إصدار CO3D. للقيام بذلك، قم بتشغيل الأوامر التالية:
git clone https://github.com/facebookresearch/co3d.git
cd co3d
mkdir DOWNLOAD_FOLDER
python ./co3d/download_dataset.py --download_folder DOWNLOAD_FOLDER --download_categories hydrant,teddybear
بعد ذلك، قم بتعيين CO3D_RAW_ROOT
على DOWNLOAD_FOLDER
في data_preprocessing/preoprocess_co3d.py
. قم بتعيين CO3D_OUT_ROOT
إلى المكان الذي تريد تخزين البيانات المعالجة مسبقًا فيه. يجري
python -m data_preprocessing.preprocess_co3d
وقم بتعيين CO3D_DATASET_ROOT:=CO3D_OUT_ROOT
.
بالنسبة إلى ShapeNet متعدد الفئات، نستخدم مجموعة بيانات ShapeNet 64x64 بواسطة NMR والتي يستضيفها مؤلفو DVR والتي يمكن تنزيلها هنا. قم بفك ضغط المجلد وقم بتعيين NMR_DATASET_ROOT
على الدليل الذي يحتوي على مجلدات الفئات الفرعية بعد فك الضغط. بمعنى آخر، يجب أن يحتوي دليل NMR_DATASET_ROOT
على المجلدات 02691156
، 02828884
، 02933112
وما إلى ذلك.
للتدريب على Objaverse، استخدمنا عروضًا من Zero-1-to-3 والتي يمكن تنزيلها باستخدام الأمر التالي:
wget https://tri-ml-public.s3.amazonaws.com/datasets/views_release.tar.gz
إخلاء المسؤولية: لاحظ أنه يتم إنشاء العروض باستخدام Objaverse. يتم إصدار العروض ككل بموجب ترخيص ODC-By 1.0. يتم إصدار تراخيص عروض الكائنات الفردية بموجب نفس ترخيص المشاع الإبداعي الموجود في Objaverse.
بالإضافة إلى ذلك، يرجى تنزيل lvis-annotations-filtered.json
من مستودع النماذج. يحتوي ملف json هذا على قائمة معرفات الكائنات من مجموعة LVIS الفرعية. هذه الأصول ذات جودة أعلى.
قم بتعيين OBJAVERSE_ROOT
في datasets/objaverse.py
إلى دليل المجلد الذي تم فك ضغطه مع العروض، وقم بتعيين OBJAVERSE_LVIS_ANNOTATION_PATH
في نفس الملف إلى دليل ملف .json
الذي تم تنزيله.
لاحظ أن مجموعة بيانات Objaverse مخصصة للتدريب والتحقق من الصحة فقط. ليس لديها مجموعة فرعية للاختبار.
لتقييم النموذج الذي تم تدريبه على Objaverse، نستخدم مجموعة بيانات Google Scanned Objects لضمان عدم التداخل مع مجموعة التدريب. قم بتنزيل العروض المقدمة من Free3D. قم بفك ضغط المجلد الذي تم تنزيله وقم بتعيين GSO_ROOT
في datasets/gso.py
إلى دليل المجلد الذي تم فك ضغطه.
لاحظ أن مجموعة بيانات Google Scanned Objects ليست مخصصة للتدريب. يتم استخدامه لاختبار النموذج الذي تم تدريبه على Objaverse.
النماذج المُدربة مسبقًا لجميع مجموعات البيانات متاحة الآن عبر Huggingface Models. إذا كنت تريد فقط إجراء تقييم نوعي/كمي، فلا تحتاج إلى تنزيلها يدويًا، فسيتم استخدامها تلقائيًا إذا قمت بتشغيل البرنامج النصي للتقييم (انظر أدناه).
يمكنك أيضًا تنزيلها يدويًا إذا كنت ترغب في القيام بذلك، عن طريق النقر يدويًا على زر التنزيل الموجود في صفحة ملفات نماذج Huggingface. قم بتنزيل ملف التكوين معه وراجع eval.py
لمعرفة كيفية تحميل النموذج.
بمجرد تنزيل مجموعة البيانات ذات الصلة، يمكن تشغيل التقييم باستخدامها
python eval.py $dataset_name
$dataset_name
هو اسم مجموعة البيانات. نحن ندعم:
gso
(الكائنات الممسوحة ضوئيًا من Google)،objaverse
(أوبجافيرس-LVIS)،nmr
(ShapeNet متعدد الفئات)،hydrants
(صنابير مياه CO3D)،teddybears
(دمى الدببة CO3D)،cars
(سيارات ShapeNet) ،chairs
(كراسي ShapeNet). سيقوم الكود تلقائيًا بتنزيل النموذج ذي الصلة لمجموعة البيانات المطلوبة.يمكنك أيضًا تدريب النماذج الخاصة بك وتقييمها
python eval.py $dataset_name --experiment_path $experiment_path
يجب أن يحتوي $experiment_path
على ملف model_latest.pth
ومجلد .hydra
مع config.yaml
بداخله.
لتقييم تقسيم التحقق من الصحة، اتصل بالخيار --split val
.
لحفظ عرض الكائنات أثناء تحرك الكاميرا في حلقة، اتصل بالخيار --split vis
. باستخدام هذا الخيار، لا يتم إرجاع الدرجات الكمية نظرًا لعدم توفر صور الحقيقة الأرضية في جميع مجموعات البيانات.
يمكنك تعيين عدد الكائنات التي تريد حفظها باستخدام الخيار --save_vis
. يمكنك تعيين مكان حفظ العروض باستخدام الخيار --out_folder
.
يتم تدريب نماذج العرض الفردي على مرحلتين، أولاً بدون LPIPS (معظم التدريب)، يليها الضبط الدقيق باستخدام LPIPS.
python train_network.py +dataset=$dataset_name
opt.pretrained_ckpt
(افتراضيًا يتم تعيينه على null). python train_network.py +dataset=$dataset_name +experiment=$lpips_experiment_name
$lpips_experiment_name
الذي سيتم استخدامه على مجموعة البيانات. إذا كان $dataset_name موجودًا في [cars,hydrants,teddybears]، فاستخدم lpips_100k.yaml. إذا كان $dataset_name عبارة عن كراسي، فاستخدم lpips_200k.yaml. إذا كان $dataset_name هو nmr، فاستخدم lpips_nmr.yaml. إذا كان $dataset_name هو objaverse، فاستخدم lpips_objaverse.yaml. تذكر أن تضع دليل النموذج من المرحلة الأولى في ملف .yaml المناسب قبل إطلاق المرحلة الثانية.لتدريب تشغيل نموذج ثنائي العرض:
python train_network.py +dataset=cars cam_embd=pose_pos data.input_images=2 opt.imgs_per_obj=5
يتم تنفيذ حلقة التدريب في train_network.py
ورمز التقييم موجود في eval.py
يتم تنفيذ مجموعات البيانات في datasets/srn.py
و datasets/co3d.py
. تم تنفيذ النموذج في scene/gaussian_predictor.py
. يمكن العثور على استدعاء العارض في gaussian_renderer/__init__.py
.
يفترض جهاز المسح الغاوسي ترتيب الصف الرئيسي لمصفوفات تحويل الجسم الصلب، أي أن متجهات الموضع هي متجهات الصف. ويتطلب أيضًا وجود كاميرات في اتفاقية COLMAP / OpenCV، أي أن x يشير إلى اليمين، وy إلى الأسفل، وz بعيدًا عن الكاميرا (للأمام).
@inproceedings{szymanowicz24splatter,
title={Splatter Image: Ultra-Fast Single-View 3D Reconstruction},
author={Stanislaw Szymanowicz and Christian Rupprecht and Andrea Vedaldi},
year={2024},
booktitle={The IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
}
يتم دعم S. Szymanowicz من خلال منحة شراكات تدريب الدكتوراه EPSRC (DTP) EP/R513295/1 ومنحة أكسفورد-أشتون. A. Vedaldi مدعوم من قبل ERC-CoG UNION 101001212. نشكر Eldar Insafutdinov لمساعدته في متطلبات التثبيت.