บาไซล์ ฟาน ฮูริค, รุนดี วู, เอเก้ ออซกูโรกลู, ไคล์ ซาร์เจนท์, รูโอชิ หลิว, พาเวล ต็อกมาคอฟ, อชาล เดฟ, ฉางซี เจิ้ง, คาร์ล วอนดริก
มหาวิทยาลัยโคลัมเบีย, มหาวิทยาลัยสแตนฟอร์ด, สถาบันวิจัยโตโยต้า
เผยแพร่ใน ECCV 2024 (ช่องปาก)
กระดาษ | เว็บไซต์ | ผลลัพธ์ | ชุดข้อมูล | โมเดล
พื้นที่เก็บข้อมูลนี้มีรหัส Python ที่เผยแพร่โดยเป็นส่วนหนึ่งของรายงานของเรา "Generative Camera Dolly: Extreme Monocular Dynamic Novel View Sclusion" (ตัวย่อ GCD )
เราให้คำแนะนำในการตั้งค่า แบบจำลองที่ได้รับการฝึกอบรม โค้ดการอนุมาน โค้ดการฝึก โค้ดการประเมินผล และการสร้างชุดข้อมูล
โปรดทราบว่าฉันได้ปรับโครงสร้างใหม่และทำความสะอาดโค้ดเบสเพื่อการเผยแพร่สู่สาธารณะ โดยส่วนใหญ่เพื่อทำให้โครงสร้างง่ายขึ้นรวมถึงเพิ่มความสามารถในการอ่านและการแยกส่วน แต่ฉันยังไม่ได้ตรวจสอบทุกอย่างอย่างละเอียดถี่ถ้วน ดังนั้นหากคุณพบปัญหาใดๆ โปรดแจ้งให้เราทราบโดยการเปิดปัญหา และอย่าลังเลที่จะแนะนำการแก้ไขข้อบกพร่องที่เป็นไปได้หากคุณมี
สารบัญ:
ฉันแนะนำให้ตั้งค่าสภาพแวดล้อมเสมือนและติดตั้งแพ็คเกจที่จำเป็นดังนี้:
conda create -n gcd python=3.10
conda activate gcd
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
pip install git+https://github.com/OpenAI/CLIP.git
pip install git+https://github.com/Stability-AI/datapipelines.git
pip install -r requirements.txt
โปรเจ็กต์ส่วนใหญ่ได้รับการพัฒนาด้วย PyTorch เวอร์ชัน 2.0.1 อย่างไรก็ตาม ก็ควรใช้ได้กับเวอร์ชันที่ใหม่กว่าเช่นกัน โดยเฉพาะอย่างยิ่ง ฉันไม่พบปัญหาใด ๆ กับ PyTorch 2.3.1 ซึ่งเป็นเวอร์ชันล่าสุดในขณะที่เขียน
โปรดทราบว่าไฟล์ข้อกำหนด ไม่ได้ ระบุเวอร์ชันของแพ็คเกจ เนื่องจากฉันชื่นชอบความยืดหยุ่น (การเพิ่มข้อจำกัดด้านเวอร์ชันจะทำให้การนำโค้ดเบสที่มีอยู่ในโปรเจ็กต์ใหม่ของคุณยุ่งยากมากขึ้น) หากคุณประสบปัญหาใดๆ โปรดแจ้งให้เราทราบโดยเปิดปัญหา ฉันยังระบุเวอร์ชันที่แน่นอนใน requirements_versions.txt
ไว้เพื่อใช้อ้างอิงด้วย
เดิมทีโฟลเดอร์ย่อย gcd-model
อิงตามพื้นที่เก็บข้อมูลโมเดล Stability AI generative อย่างเป็นทางการ
ด้านล่างนี้คือจุดตรวจ Kubric-4D หลักที่เราฝึกและใช้ในการทดลอง พร้อมด้วยค่า PSNR ในชุดทดสอบ คอลัมน์ด้านซ้ายแสดงถึงระยะการเคลื่อนที่สูงสุดของกล้องในแง่ของการหมุนในแนวนอน
ราบ | ค่อยเป็นค่อยไป | โดยตรง |
---|---|---|
สูงสุด 90 องศา | ลิงค์ (17.88 เดซิเบล) | ลิงค์ (17.23 เดซิเบล) |
สูงสุด 180 องศา | ลิงค์ (17.81 เดซิเบล) | ลิงค์ (16.65 เดซิเบล) |
ด้านล่างนี้คือจุดตรวจสอบ ParallelDomain-4D หลักที่เราฝึกและใช้ในการทดลอง พร้อมด้วยค่า PSNR หรือ mIoU ในชุดทดสอบ คอลัมน์ด้านซ้ายแสดงถึงโมแดลลิตี้เอาท์พุตที่คาดการณ์ไว้ (อินพุตจะเป็น RGB เสมอ)
กิริยา | ค่อยเป็นค่อยไป | โดยตรง |
---|---|---|
สี (RGB) | ลิงค์ (23.47 เดซิเบล) | ลิงค์ (23.32 เดซิเบล) |
ความหมาย | ลิงค์ (39.0%) | ลิงค์ (36.7%) |
จุดตรวจด้านบนทั้งหมดมีขนาด 20.3 GB วางไว้ใน pretrained/
เพื่อให้มีชื่อเดียวกันกับไฟล์ config .yaml
ที่เกี่ยวข้อง
ส่วนนี้มีไว้สำหรับการเรียกใช้โมเดลของเราในวิดีโอที่กำหนดเอง สำหรับการประเมินเชิงปริมาณอย่างละเอียดบน Kubric-4D หรือ ParallelDomain-4D หรือการอนุมานบรรทัดคำสั่งใดๆ ภายนอกชุดข้อมูลทั้งสองชุดที่จะบันทึกผลลัพธ์และการแสดงภาพลงในดิสก์ของคุณ โปรดดูส่วน การประเมิน ด้านล่างแทน
สำหรับรุ่น Kubric-4D ให้รัน:
cd gcd-model/
CUDA_VISIBLE_DEVICES=0 python scripts/gradio_app.py --port=7880
--config_path=configs/infer_kubric.yaml
--model_path=../pretrained/kubric_gradual_max90.ckpt
--output_path=../eval/gradio_output/default/
--examples_path=../eval/gradio_examples/
--task_desc='Arbitrary monocular dynamic view synthesis on Kubric scenes up to 90 degrees azimuth'
หากต้องการลองใช้รุ่นอื่นๆ เพียงเปลี่ยน config_path
, model_path
และ task_desc
เช่น สำหรับรุ่น ParallelDomain-4D :
cd gcd-model/
CUDA_VISIBLE_DEVICES=1 python scripts/gradio_app.py --port=7881
--config_path=configs/infer_pardom.yaml
--model_path=../pretrained/pardom_gradual_rgb.ckpt
--output_path=../eval/gradio_output/default/
--examples_path=../eval/gradio_examples/
--task_desc='Upward monocular dynamic view synthesis on ParallelDomain scenes (RGB output)'
สำหรับการฝึกอบรมและการประเมินผลบน Kubric-4D และ/หรือ ParallelDomain-4D คุณจะต้องประมวลผลชุดข้อมูลล่วงหน้าและจัดเก็บพอยต์คลาวด์ที่ผสานเข้าด้วยกัน เนื่องจากชุดข้อมูลนั้นให้เฉพาะวิดีโอ RGB-D จากมุมมองบางอย่างเท่านั้น แต่เราต้องการที่จะบินไปรอบๆ อย่างอิสระในฉาก 4D และอนุญาตให้เรียนรู้การควบคุมกล้องโดยพลการ (และการแก้ไขวิถี) เช่นกัน
สำหรับ Kubric-4D :
cd data-gen/
python convert_pcl_kubric.py --gpus=0,0,1,1 --start_idx=0 --end_idx=3000
--input_root=/path/to/Kubric-4D/data
--output_root=/path/to/Kubric-4D/pcl
ที่นี่ /path/to/Kubric-4D/data
ควรเป็นโฟลเดอร์ที่มี scn00000
, scn00001
และอื่นๆ สคริปต์จะอ่านจาก data
และเขียนไปที่ pcl/
(ตรวจสอบให้แน่ใจว่าคุณมีพื้นที่ว่าง 7.0 TB)
สำหรับ ParallelDomain-4D :
cd data-gen/
python convert_pcl_pardom.py --gpus=0,0,1,1 --start_idx=0 --end_idx=1600
--input_root=/path/to/ParallelDomain-4D/data
--output_root=/path/to/ParallelDomain-4D/pcl
ที่นี่ /path/to/ParallelDomain-4D/data
ควรเป็นโฟลเดอร์ที่มี scene_000000
, scene_000001
และอื่นๆ สคริปต์จะอ่านจาก data/
และเขียนไปที่ pcl/
(ตรวจสอบให้แน่ใจว่าคุณมีพื้นที่ว่าง 4.4 TB)
สคริปต์การแปลงทั้งสองข้างต้นอาศัย GPU เป็นหลักเพื่อการประมวลผลที่รวดเร็ว และสามารถใช้การทำงานแบบขนานในระดับกระบวนการได้ ตัวอย่างเช่น --gpus=0,0,1,1
หมายถึงวางไข่ 4 คน (2 คนต่อ GPU) ในระหว่างการฝึก ดิสก์ I/O ส่วนใหญ่จะรวมอยู่ภายในโฟลเดอร์ pcl/
ดังนั้นฉันขอแนะนำให้จัดเก็บไว้ใน SSD ภายในที่รวดเร็ว
หากคุณกำลังฝึกฝนชุดข้อมูลของคุณเอง ฉันขอแนะนำให้สร้างตัวโหลดข้อมูลใหม่โดยใช้โค้ดที่ให้มาเป็นข้อมูลอ้างอิง หากคุณใช้ข้อมูลของเรา โปรดปฏิบัติตามส่วน การประมวลผลชุดข้อมูล ด้านบนก่อน
ขั้นแรก ดาวน์โหลดหนึ่งในสองจุดตรวจสอบ Stable Video Diffusion ที่พร้อมใช้งานต่อไปนี้: SVD (14 เฟรม) หรือ SVD-XT (25 เฟรม) และวางไว้ใน pretrained/
(หรืออัปเดตเส้นทางจุดตรวจสอบในไฟล์กำหนดค่าที่อ้างอิงด้านล่าง) เราทำงานเฉพาะกับ SVD เวอร์ชัน 14 เฟรมในการทดลองของเราเนื่องจากข้อจำกัดด้านทรัพยากร ดังนั้นโปรดเปลี่ยนค่าการกำหนดค่าอื่นๆ ที่เกี่ยวข้องหากคุณใช้งาน SVD-XT 25 เฟรม
หากต้องการเริ่มการฝึก GCD บน Kubric-4D (ค่อยเป็นค่อยไป สูงสุด 90 องศา):
cd gcd-model/
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 python main.py
--base=configs/train_kubric_max90.yaml
--name=kb_v1 --seed=1234 --num_nodes=1 --wandb=0
model.base_learning_rate=2e-5
model.params.optimizer_config.params.foreach=False
data.params.dset_root=/path/to/Kubric-4D/data
data.params.pcl_root=/path/to/Kubric-4D/pcl
data.params.frame_width=384
data.params.frame_height=256
data.params.trajectory=interpol_linear
data.params.move_time=13
data.params.camera_control=spherical
data.params.batch_size=4
data.params.num_workers=4
data.params.data_gpu=0
lightning.callbacks.image_logger.params.batch_frequency=50
lightning.trainer.devices="1,2,3,4,5,6,7"
หากต้องการสลับไปใช้โมเดลการสังเคราะห์มุมมองโดยตรง (ไม่มีการประมาณค่า) ให้ปรับค่านี้: data.params.move_time=0
หากต้องการเพิ่มมุมการหมุนในแนวนอนสูงสุด (ราบ) ให้เลือกไฟล์กำหนดค่าอื่น: train_kubric_max180.yaml
โมเดลที่ได้จะสามารถสร้างการสังเคราะห์มุมมองแบบใหม่แบบตาข้างเดียวไดนามิก 3-DoF บนวิดีโอ RGB ใดๆ ได้ แต่โดยทั่วไปจะทำงานได้ดีที่สุดภายในโดเมน Kubric และวิดีโออื่นๆ ที่ไม่มีมนุษย์
หากต้องการเริ่มการฝึก GCD บน ParallelDomain-4D (แบบค่อยเป็นค่อยไป, RGB):
cd gcd-model/
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 python main.py
--base=configs/train_pardom_rgb.yaml
--name=pd_v1 --seed=1234 --num_nodes=1 --wandb=0
model.base_learning_rate=2e-5
model.params.optimizer_config.params.foreach=False
data.params.dset_root=/path/to/ParallelDomain-4D/data
data.params.pcl_root=/path/to/ParallelDomain-4D/pcl
data.params.split_json=../eval/list/pardom_datasplit.json
data.params.frame_width=384
data.params.frame_height=256
data.params.output_modality=rgb
data.params.trajectory=interpol_sine
data.params.move_time=13
data.params.modal_time=0
data.params.camera_control=none
data.params.batch_size=4
data.params.num_workers=4
data.params.data_gpu=0
lightning.callbacks.image_logger.params.batch_frequency=50
lightning.trainer.devices="1,2,3,4,5,6,7"
หากต้องการสลับไปใช้โมเดลการสังเคราะห์มุมมองโดยตรง (ไม่มีการประมาณค่า) ให้ปรับค่านี้: data.params.move_time=0
หากต้องการเปลี่ยนรูปแบบเอาต์พุตเป็นหมวดหมู่ความหมาย ให้เลือกไฟล์กำหนดค่าอื่น: train_pardom_semantic.yaml
โมเดลที่ได้จะสามารถสร้างการสังเคราะห์มุมมองแบบใหม่แบบไดนามิกแบบตาเดียวขึ้นไปบนวิดีโอ RGB ใดๆ ได้ แต่โดยทั่วไปจะทำงานได้ดีที่สุดในฉากการขับขี่ (ทั้งแบบสังเคราะห์และจริง) ที่บันทึกโดยหันหน้าไปข้างหน้าที่ระดับถนน ฉันยังมีโมเดลภายในที่วางอยู่รอบๆ ซึ่งมีความสามารถในการควบคุมกล้อง 3-DoF (การแปลงอัตตาสู่เซอร์ราวด์และการแปลงเซอร์ราวด์เป็นเซอร์ราวด์) บนชุดข้อมูลนี้ และถึงแม้ว่าพวกมันจะไม่ได้เป็นส่วนหนึ่งของการทดลองในรายงานของเรา แต่ฉันอาจ จัดแสดงและ/หรือเผยแพร่ที่นี่ในอนาคต
โปรดทราบว่าในคำสั่งข้างต้นทั้งหมด GPU ดัชนี 0 ( data.params.data_gpu
) ถูกสงวนไว้สำหรับการสร้างคู่ของวิดีโอ (อินพุต ความจริงภาคพื้นดิน) ได้ทันทีระหว่างการโหลดข้อมูลจาก point cloud ที่ผสานแคชใน pcl/
ฉันไม่แนะนำให้ฝึกอบรมเครือข่ายบน GPU เดียวกัน ซึ่งเป็นสาเหตุที่ lightning.trainer.devices
แยกจากกันและครอบคลุม GPU ที่เหลือทั้งหมดแทน
การใช้งาน VRAM สำหรับสิ่งเหล่านั้นจะอยู่ที่ประมาณ 50 GB ต่อ GPU ในตัวอย่างที่ให้ไว้ ปัจจัยกำหนดที่ใหญ่ที่สุดสามประการสำหรับ VRAM คือ: (1) ขนาดแบตช์ (2) ความละเอียดเชิงพื้นที่ ( frame_width
และ frame_height
) (3) จำนวนเฟรม (SVD เทียบกับ SVD-XT) และ (4) ไม่ว่าน้ำหนัก EMA จะเป็นอย่างไร ค่าเฉลี่ยใช้งานอยู่ การทดลองส่วนใหญ่ของเราดำเนินการบนโหนดเดียวที่มีอุปกรณ์ 8x NVIDIA A100 หรือ 8x NVIDIA A6000 ทั้งหมดนี้ไม่มี EMA เนื่องจากการประมวลผลที่จำกัด
บันทึกและการแสดงภาพจะถูกจัดเก็บไว้ในโฟลเดอร์ย่อยที่ลงวันที่ภายในโฟลเดอร์ logs/
ซึ่งอยู่ในระดับเดียวกับ gcd-model/
สำหรับการวิ่งแต่ละครั้ง การแสดงภาพการฝึกจะถูกจัดเก็บไว้ใน visuals/
โฟลเดอร์ย่อย หากการฝึกหยุดชะงัก คุณสามารถดำเนินการต่อได้โดยชี้ --resume_from_checkpoint
ไปยังไฟล์จุดตรวจสอบที่ถูกต้องล่าสุด เช่น --resume_from_checkpoint=../logs/2024-02-30T12-15-05_kb_v1/checkpoints/last.ckpt
สคริปต์ต่อไปนี้สร้างเอาต์พุตหลายประเภทสำหรับการตรวจสอบและประเมินผลด้วยภาพ และต้องได้รับการปรับเปลี่ยนสำหรับเกณฑ์มาตรฐานแต่ละรายการ สำหรับการดำเนินการที่เบากว่า โปรดดูส่วน การอนุมาน ด้านบน หากคุณกำลังใช้ข้อมูลของเรา ตรวจสอบให้แน่ใจว่าคุณได้ทำตามส่วน การประมวลผลชุดข้อมูล ด้านบนก่อน หากคุณกำลังประเมินชุดข้อมูลที่คุณกำหนดเองตามความเป็นจริง ฉันขอแนะนำให้สร้างตัวโหลดข้อมูลใหม่และแก้ไขสคริปต์ทดสอบด้านล่าง
หากต้องการประเมินโมเดลที่ได้รับการปรับแต่ง GCD บน Kubric-4D ให้อัปเดตเส้นทางใน kubric_test20.txt
และเรียกใช้:
cd gcd-model/
CUDA_VISIBLE_DEVICES=0,1 python scripts/test.py --gpus=0,1
--config_path=configs/infer_kubric.yaml
--model_path=../logs/*_kb_v1/checkpoints/epoch=00000-step=00010000.ckpt
--input=../eval/list/kubric_test20.txt
--output=../eval/output/kubric_mytest1
--control_json=../eval/list/kubric_valtest_controls_gradual.json
--control_idx=0 --autocast=1 --num_samples=2 --num_steps=25
เพื่อความสอดคล้องและยุติธรรม คำสั่งนี้ใช้ชุดมุมกล้องและขอบเขตเฟรมที่กำหนดซึ่งสัมพันธ์กับแต่ละฉาก ตามที่อธิบายไว้ใน kubric_valtest_controls_gradual.json
ตัวเลขเหล่านี้ถูกสร้างขึ้นแบบสุ่มเพียงครั้งเดียวและต่อมาได้รับการแก้ไข แต่เปอร์สเปคทีฟอินพุต (เช่น spherical_src
) สอดคล้องกับดัชนีมุมมอง 4 ในชุดข้อมูล เปลี่ยนสิ่งนี้เป็น kubric_valtest_controls_direct.json
หากคุณกำลังประเมินโมเดลการสังเคราะห์มุมมองโดยตรง นอกจากนี้คุณยังสามารถประเมินผลจากหลายตัวอย่างได้โดยการเพิ่ม --num_samples
(การควบคุมเดียวกัน) หรือโดยการเปลี่ยนแปลง --control_idx
(การควบคุมที่แตกต่างกันในแต่ละฉาก)
หากต้องการประเมินโมเดลที่ได้รับการปรับแต่ง GCD บน ParallelDomain-4D ให้อัปเดตพาธใน pardom_test20.txt
และรัน:
cd gcd-model/
CUDA_VISIBLE_DEVICES=0,1 python scripts/test.py --gpus=0,1
--config_path=configs/infer_pardom.yaml
--model_path=../logs/*_pd_v1/checkpoints/epoch=00000-step=00010000.ckpt
--input=../eval/list/pardom_test20.txt
--output=../eval/output/pardom_mytest1
--control_json=../eval/list/pardom_valtest_controls.json
--control_idx=0 --autocast=1 --num_samples=2 --num_steps=25
ในทำนองเดียวกัน เพื่อความสม่ำเสมอและความยุติธรรมอีกครั้ง สัญญาณควบคุม pardom_valtest_controls.json
จะมีขอบเขตเฟรมเท่านั้น (เช่น ออฟเซ็ตและช่วงเวลา) สำหรับแต่ละฉาก
ในทุกกรณี สำหรับอาร์กิวเมนต์ --model_path
นั้น grep
จะถูกนำไปใช้เพื่อจัดการกับไวด์การ์ด โดยที่คุณไม่ต้องกังวลว่าจะต้องเขียนวันที่ เฟรมความจริงภาคพื้นดินที่สอดคล้องกันจะถูกเรนเดอร์และจัดเก็บไว้ในโฟลเดอร์เอาท์พุต เพื่อให้สามารถประเมินเชิงตัวเลขได้ (ดู เมตริก ด้านล่าง)
หากคุณต้องการละเว้นการควบคุม JSON ที่ให้มา และเรียกใช้การประเมินในรูปแบบอิสระมากขึ้นด้วยมุมและขอบเขตเฟรมที่เลือกใน Kubric-4D ให้ทำดังนี้
cd gcd-model/
CUDA_VISIBLE_DEVICES=0,1 python scripts/test.py --gpus=0,1
--config_path=configs/infer_kubric.yaml
--model_path=../logs/*_kb_v1/checkpoints/epoch=00000-step=00010000.ckpt
--input=../eval/list/kubric_test20.txt
--output=../eval/output/kubric_mytest2_cc
--azimuth_start=70.0 --elevation_start=10.0 --radius_start=15.0
--delta_azimuth=30.0 --delta_elevation=15.0 --delta_radius=1.0
--frame_start=0 --frame_stride=2 --frame_rate=12
--reproject_rgbd=0 --autocast=1 --num_samples=2 --num_steps=25
ใน ParallelDomain-4D อาร์กิวเมนต์ที่เกี่ยวข้องกับท่าทางทั้งหกข้อจะไม่สามารถใช้ได้ แต่ยังคงสามารถเลือกขอบเขตเฟรมของคลิปวิดีโอได้
สคริปต์ test.py
ด้านบนจะบันทึกไฟล์ *_metrics.json
ต่อฉากภายใต้โฟลเดอร์ extra/
ย่อยที่มีหมายเลข PSNR และ SSIM โดยรวมและต่อเฟรม นอกจากนี้ยังบันทึกเฟรมอินพุต คาดการณ์ และเป้าหมายทั้งหมดเป็นรูปภาพสำหรับแต่ละตัวอย่างที่ประมวลผลโดยโมเดล คุณสามารถใช้ผลลัพธ์ต่างๆ เหล่านี้ในเวิร์กโฟลว์การประเมินเชิงปริมาณของคุณเองได้ตามใจชอบ หากคุณต้องการคำนวณเมตริกเพิ่มเติมและ/หรือเมตริกรวม
เมื่อเปรียบเทียบกับส่วน การประเมิน หลัก สคริปต์นี้ไม่ได้ขึ้นอยู่กับความจริงภาคพื้นดินซึ่งอาจไม่มีอยู่จริง เมื่อเปรียบเทียบกับส่วน การอนุมาน (Gradio) สคริปต์นี้จะส่งออกข้อมูลและการแสดงภาพมากกว่า
เตรียมเส้นทางตรงไปยังไฟล์วิดีโอหรือโฟลเดอร์รูปภาพ หรือรายการไฟล์วิดีโอหรือโฟลเดอร์รูปภาพ (ในไฟล์ .txt
ที่มีเส้นทางแบบเต็ม) แล้วเรียกใช้:
cd gcd-model/
CUDA_VISIBLE_DEVICES=0 python scripts/infer.py --gpus=0
--config_path=configs/infer_kubric.yaml
--model_path=../pretrained/kubric_gradual_max90.ckpt
--input=/path/to/video.mp4
--output=../eval/output/kubric_myinfer1
--delta_azimuth=30.0 --delta_elevation=15.0 --delta_radius=1.0
--frame_start=0 --frame_stride=2 --frame_rate=12
--autocast=1 --num_samples=2 --num_steps=25
โปรดทราบว่า --frame_rate
ควรสะท้อนถึง FPS เป้าหมาย หลังจาก การสุ่มตัวอย่างชั่วคราวของวิดีโออินพุต ไม่ใช่ ก่อน หากคุณต้องการประเมินหลายตัวอย่าง ฉันขอแนะนำให้ใช้รายการโดยการตั้งค่า --input=/path/to/list.txt
เพื่อลดค่าใช้จ่ายในการโหลดโมเดล
หากคุณต้องการใช้ข้อมูลที่เหมือนกันทุกประการกับในการทดลองของเรา โปรดดูลิงก์ดาวน์โหลดนี้สำหรับคำอธิบายและสำเนาของ Kubric-4D และ ParallelDomain-4D ส่วนที่เหลือของส่วนนี้จะเน้นว่าคุณต้องการปรับแต่งไปป์ไลน์ของเราและ/หรือสร้างข้อมูลสังเคราะห์ของคุณเองหรือไม่
ทำตามคำแนะนำเหล่านี้เพื่อติดตั้งไลบรารี OpenEXR จากนั้น รันคำสั่งต่อไปนี้เพื่อเตรียมสภาพแวดล้อมของคุณ:
conda activate gcd
pip install bpy==3.4.0
pip install pybullet
pip install OpenEXR
cd data-gen/kubric/
pip install -e .
โฟลเดอร์ย่อย data-gen/kubric
ส่วนใหญ่เหมือนกับคอมมิตนี้จากที่เก็บ Google Research Kubric อย่างเป็นทางการ แต่ฉันได้เพิ่มการแก้ไขข้อบกพร่องเล็กน้อยเพื่อหลีกเลี่ยงสภาวะการแข่งขันเมื่อจัดการแผนที่เชิงลึก
นี่คือคำสั่งที่เราใช้ในการสร้างชุดข้อมูล Kubric-4D สุดท้าย (สังเกตบรรทัด rm -rf /tmp/
):
cd data-gen/
for i in {1..110}
do
python export_kub_mv.py --mass_est_fp=gpt_mass_v4.txt
--root_dp=/path/to/kubric_mv_gen
--num_scenes=3000 --num_workers=10 --restart_count=30
--seed=900000 --num_views=16 --frame_width=576 --frame_height=384
--num_frames=60 --frame_rate=24 --save_depth=1 --save_coords=1
--render_samples_per_pixel=16 --focal_length=32
--fixed_alter_poses=1 --few_views=4
rm -rf /tmp/
done
โดยพื้นฐานแล้วชุดข้อมูลนั้นเป็นรูปแบบของ TCOW Kubric และรวมถึงการปรับปรุงต่างๆ เช่น ออบเจ็กต์ที่มีไดนามิกมากขึ้น และความสมจริงของมวลที่เพิ่มขึ้น ดูรายละเอียดเพิ่มเติมได้จาก TCOW
เพื่อวัตถุประสงค์ของ GCD เราเรนเดอร์วิดีโอหลายมุมมองที่ซิงโครไนซ์ 16 รายการจากกล้องคงที่ จุดชมวิวทั้ง 4 จุดอยู่ที่ระดับความสูง 45 องศา และจุดชมวิวอีก 12 จุดอยู่ที่ระดับความสูงต่ำ 5 องศา ฉันแนะนำให้ตรวจสอบ export_kub_mv.py
เพื่อรับข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับพารามิเตอร์และตรรกะ
ฉากทั้งหมดถูกสร้างขึ้น iid ดังนั้นในชุดข้อมูลเวอร์ชันของเรานี้ เราจึงกำหนด 2800 ตัวแรกเป็นชุดการฝึก และ 100 + 100 สุดท้ายเป็นชุดการตรวจสอบ + การทดสอบตามลำดับ ลูปภายนอกจะล้างโฟลเดอร์ /tmp/
เป็นประจำเพื่อหลีกเลี่ยงปัญหาพื้นที่ดิสก์
ชุดข้อมูลนี้มาจากบริการและไม่สามารถสร้างใหม่ได้ โปรดดูลิงค์ดาวน์โหลดสำหรับสำเนาของเรา
โปรดทราบว่าไม่มีโฟลเดอร์ฉากบางโฟลเดอร์ (มีโฟลเดอร์ฉาก 1531 โฟลเดอร์ แต่ดัชนีสูงถึง 2143) และบางฉากมีเฟรมที่ขาดหายไปสองสามเฟรม ซึ่งเป็นสาเหตุที่ตัวโหลดข้อมูลของเราได้รับการออกแบบมาให้ทนทานต่อปัญหาทั้งสอง คุณอาจเห็นข้อความเตือนเล็กน้อยระหว่างการฝึก แต่นี่เป็นเรื่องปกติ นอกจากนี้ ฉากต่างจาก Kubric ตรงที่ไม่เกี่ยวข้องกับการตกแต่งด้วยความเคารพต่อดัชนี ดังนั้นใน pardom_datasplit.json
เราจึงเลือกชุดย่อยแบบสุ่มไว้ล่วงหน้าสำหรับการฝึก การตรวจสอบ และการทดสอบ
เรากำหนดขนาดการตรวจสอบ + ชุดทดสอบเป็น 61 + 61 ฉากตามลำดับ (แต่ละประมาณ 4% ของชุดข้อมูลทั้งหมด)
ฉันได้เขียนเครื่องมือบางอย่างโดยใช้ TRI camviz เพื่อแสดงภาพตัวอย่างเชิงโต้ตอบจาก Kubric-4D และ ParallelDomain-4D บนเครื่องคอมพิวเตอร์ของคุณ ฉันอาจจะปล่อยพวกเขาที่นี่ในภายหลัง แต่โปรดติดต่อฉัน (Basile) ในระหว่างนี้เพื่อรับซอร์สโค้ด
หากคุณใช้โค้ดเบสนี้ในงานของคุณ (หรือส่วนสำคัญใดๆ เช่น การเปลี่ยนแปลงที่จำเป็นในการปรับแต่ง SVD) โปรดอ้างอิงเอกสารของเรา:
@article{vanhoorick2024gcd,
title={Generative Camera Dolly: Extreme Monocular Dynamic Novel View Synthesis},
author={Van Hoorick, Basile and Wu, Rundi and Ozguroglu, Ege and Sargent, Kyle and Liu, Ruoshi and Tokmakov, Pavel and Dave, Achal and Zheng, Changxi and Vondrick, Carl},
journal={European Conference on Computer Vision (ECCV)},
year={2024}
}
ฉันแนะนำให้อ้างอิงเอกสาร SVD ต้นฉบับด้วย:
@article{blattmann2023stable,
title={Stable video diffusion: Scaling latent video diffusion models to large datasets},
author={Blattmann, Andreas and Dockhorn, Tim and Kulal, Sumith and Mendelevitch, Daniel and Kilian, Maciej and Lorenz, Dominik and Levi, Yam and English, Zion and Voleti, Vikram and Letts, Adam and others},
journal={arXiv preprint arXiv:2311.15127},
year={2023}
}
หากคุณใช้ชุดข้อมูลชุดใดชุดหนึ่งของเราในงานของคุณ โปรดอ้างอิงแหล่งที่มาที่เกี่ยวข้องด้วย:
@article{greff2021kubric,
title = {Kubric: a scalable dataset generator},
author = {Klaus Greff and Francois Belletti and Lucas Beyer and Carl Doersch and Yilun Du and Daniel Duckworth and David J Fleet and Dan Gnanapragasam and Florian Golemo and Charles Herrmann and others},
booktitle = {IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
year = {2022},
}
@misc{parallel_domain,
title = {Parallel Domain},
year = {2024},
howpublished={url{https://paralleldomain.com/}}
}