การดำเนินการอย่างเป็นทางการของ "Splatter Image: การสร้างภาพ 3 มิติแบบมุมมองเดียวที่เร็วเป็นพิเศษ" (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 cloud ให้กับรูปภาพ ในการทำเช่นนั้น ให้ดึงพื้นที่เก็บข้อมูล Gaussian Splatting และเมื่อเปิดใช้งานสภาพแวดล้อม conda ของคุณ ให้รัน pip install submodules/diff-gaussian-rasterization
คุณจะต้องมีคุณสมบัติตรงตามข้อกำหนดด้านฮาร์ดแวร์และซอฟต์แวร์ เราทำการทดลองทั้งหมดกับ NVIDIA A6000 GPU และการวัดความเร็วบน NVIDIA V100 GPU
หากคุณต้องการฝึกฝนข้อมูล CO3D คุณจะต้องติดตั้ง Pytorch3D 0.7.2 ดูคำแนะนำที่นี่ ขอแนะนำให้ติดตั้งด้วย pip จากไบนารีที่สร้างไว้ล่วงหน้า ค้นหาไบนารี่ที่เข้ากันได้ที่นี่ และติดตั้งด้วย 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 ซึ่งสามารถดาวน์โหลดได้ด้วยคำสั่ง follownig:
wget https://tri-ml-public.s3.amazonaws.com/datasets/views_release.tar.gz
ข้อจำกัดความรับผิดชอบ: โปรดทราบว่าการเรนเดอร์ถูกสร้างขึ้นด้วย Objaverse การเรนเดอร์โดยรวมได้รับการเผยแพร่ภายใต้ลิขสิทธิ์ ODC-By 1.0 ใบอนุญาตสำหรับการเรนเดอร์วัตถุแต่ละรายการได้รับการเผยแพร่ภายใต้ใบอนุญาตครีเอทีฟคอมมอนส์เดียวกันกับที่อยู่ใน Objaverse
นอกจากนี้ โปรดดาวน์โหลด lvis-annotations-filtered.json
จากที่เก็บโมเดล json นี้เก็บรายการ ID ของออบเจ็กต์จากเซ็ตย่อย 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
(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 ที่เหมาะสมก่อนเปิดตัวสเตจที่สองวิธีฝึกรันโมเดล 2 มุมมอง:
python train_network.py +dataset=cars cam_embd=pose_pos data.input_images=2 opt.imgs_per_obj=5
Training loop ถูกนำมาใช้ใน train_network.py
และโค้ดการประเมินผลอยู่ใน eval.py
ชุดข้อมูลถูกนำมาใช้ใน datasets/srn.py
และ datasets/co3d.py
โมเดลถูกนำไปใช้ใน scene/gaussian_predictor.py
การเรียกไปยัง renderer สามารถพบได้ใน gaussian_renderer/__init__.py
Gaussian rasterizer จะถือว่าลำดับหลักของแถวของเมทริกซ์การแปลงร่างที่แข็ง กล่าวคือ เวกเตอร์ตำแหน่งเป็นเวกเตอร์แถว นอกจากนี้ยังต้องใช้กล้องตามแบบแผน 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 Doctoral Training Partnerships Scholarship (DTP) EP/R513295/1 และทุนการศึกษา Oxford-Ashton A. Vedaldi ได้รับการสนับสนุนจาก ERC-CoG UNION 101001212 เราขอขอบคุณ Eldar Insafutdinov สำหรับความช่วยเหลือเกี่ยวกับข้อกำหนดในการติดตั้ง