งานวิจัย · arXiv 2308.04079
3D Gaussian Splatting for Real-Time Radiance Field Rendering
สรุปสามบรรทัด
- 🎯 วิธี radiance field (เช่น NeRF) ให้คุณภาพของภาพสูง แต่มีข้อจำกัดเรื่อง volumetric ray-marching ที่ช้าและเวลาการเทรนที่นาน ส่วนวิธีแบบกริดที่รวดเร็วก็มักต้องแลกกับคุณภาพหรือความเร็วในการเรนเดอร์
- 🔧 นำเสนอฉากอย่างชัดแจ้ง (explicit) ด้วย 3D Gaussians แบบแอนไอโซทรอปิกที่สร้างขึ้นจากจุด SfM แบบเบาบาง ปรับค่าด้วยการควบคุมความหนาแน่นแบบปรับตัว (การโคลนและการแบ่ง) และเรนเดอร์ผ่าน GPU rasterizer แบบหาอนุพันธ์ได้ระดับไทล์ที่คำนึงถึงการบดบัง
- 📈 บรรลุคุณภาพของภาพระดับแถวหน้าเทียบเท่า Mip-NeRF360 ด้วยความเร็วการเรนเดอร์ระดับเรียลไทม์มากกว่า 130–160 FPS ที่ความละเอียด 1080p และใช้เวลาเทรนไม่ถึงหนึ่งชั่วโมง
บทคัดย่อ
วิธีการ Radiance Field ได้ปฏิวัติการสร้างมุมมองใหม่ (novel-view synthesis) ของฉากที่บันทึกด้วยภาพถ่ายหรือวิดีโอหลายมุมมอง อย่างไรก็ตาม การบรรลุคุณภาพของภาพในระดับสูงยังคงต้องพึ่งพาโครงข่ายประสาทเทียมที่มีค่าใช้จ่ายในการเทรนและการเรนเดอร์สูง ในขณะที่วิธีที่เร็วกว่าในปัจจุบันมักต้องยอมแลกคุณภาพเพื่อความเร็ว สำหรับฉากแบบ unbounded และฉากที่สมบูรณ์ (แทนที่จะเป็นวัตถุเดี่ยวๆ) พร้อมการเรนเดอร์ที่ความละเอียด 1080p ยังไม่มีวิธีใดในปัจจุบันที่สามารถทำความเร็วการแสดงผลได้แบบเรียลไทม์ เรานำเสนอองค์ประกอบหลักสามประการที่ช่วยให้ได้คุณภาพของภาพระดับแถวหน้า ควบคู่ไปกับเวลาการเทรนที่รวดเร็ว และที่สำคัญคือสามารถสร้างมุมมองใหม่คุณภาพสูงแบบเรียลไทม์ (>= 30 fps) ที่ความละเอียด 1080p ประการแรก เราเริ่มต้นจากจุดพอยต์คลาวด์แบบเบาบางที่ได้ระหว่างการปรับเทียบกล้อง และจำลองฉากด้วย 3D Gaussians ซึ่งยังคงคุณสมบัติที่ดีของ continuous volumetric radiance fields ไว้สำหรับการปรับค่าของฉาก ขณะเดียวกันก็หลีกเลี่ยงการคำนวณที่ไม่จำเป็นในพื้นที่ว่าง ประการที่สอง เราทำการสลับระหว่างการหาค่าที่เหมาะสมและการควบคุมความหนาแน่น (interleaved optimization/density control) ของ 3D Gaussians โดยเฉพาะการปรับ anisotropic covariance เพื่อให้ได้การแทนลักษณะของฉากที่แม่นยำ ประการที่สาม เราพัฒนาอัลกอริทึมการเรนเดอร์ที่คำนึงถึงระดับการมองเห็น (visibility-aware) ที่รวดเร็ว รองรับ anisotropic splatting ซึ่งทั้งช่วยเร่งการเทรนและทำให้สามารถเรนเดอร์ได้แบบเรียลไทม์ เราได้แสดงให้เห็นถึงคุณภาพของภาพระดับแถวหน้าและการเรนเดอร์แบบเรียลไทม์บนชุดข้อมูลมาตรฐานหลายชุด
บทคัดย่อต้นฉบับ (ภาษาอังกฤษ)
Radiance Field methods have recently revolutionized novel-view synthesis of scenes captured with multiple photos or videos. However, achieving high visual quality still requires neural networks that are costly to train and render, while recent faster methods inevitably trade off speed for quality. For unbounded and complete scenes (rather than isolated objects) and 1080p resolution rendering, no current method can achieve real-time display rates. We introduce three key elements that allow us to achieve state-of-the-art visual quality while maintaining competitive training times and importantly allow high-quality real-time (>= 30 fps) novel-view synthesis at 1080p resolution. First, starting from sparse points produced during camera calibration, we represent the scene with 3D Gaussians that preserve desirable properties of continuous volumetric radiance fields for scene optimization while avoiding unnecessary computation in empty space; Second, we perform interleaved optimization/density control of the 3D Gaussians, notably optimizing anisotropic covariance to achieve an accurate representation of the scene; Third, we develop a fast visibility-aware rendering algorithm that supports anisotropic splatting and both accelerates training and allows realtime rendering. We demonstrate state-of-the-art visual quality and real-time rendering on several established datasets.
คู่มือการอ่าน
ปัญหาและแรงจูงใจ
Neural Radiance Fields (NeRFs) ได้พลิกโฉมการสังเคราะห์มุมมองใหม่โดยการหาค่าที่เหมาะสมที่สุดของการแทนฉากแบบปริยายและต่อเนื่อง (continuous implicit scene representations) ผ่านโครงข่าย Multi-Layer Perceptrons (MLPs) อย่างไรก็ตาม การเรนเดอร์สนามความต่อเนื่องเหล่านี้ต้องพึ่งพา stochastic volumetric ray-marching ซึ่งจำเป็นต้องประเมินจุดตัวอย่างหลายสิบหรือหลายร้อยจุดต่อหนึ่งรังสี สิ่งนี้นำไปสู่ภาระการคำนวณที่หนักหน่วง เวลาการเทรนที่ยาวนาน (เช่น นานถึง 48 ชั่วโมงสำหรับ Mip-NeRF360) และความเร็วในการอนุมานที่ช้ามาก (หลายวินาทีต่อเฟรม) ซึ่งขัดขวางการนำทางแบบเรียลไทม์ที่ความละเอียดสูงระดับ 1080p
แม้ว่าตัวแปรของ radiance field ที่เร็วกว่า (เช่น Plenoxels และ InstantNGP) จะพึ่งพาวอกเซลหรือแฮชกริดเพื่อเร่งการเทรน แต่วิธีเหล่านี้มักแลกมาด้วยความถูกต้องของภาพที่ลดลง และจัดการกับพื้นที่ว่างหรือรายละเอียดความถี่สูงได้ยาก ในทางกลับกัน วิธีการที่อิงพอยต์คลาวด์จะให้รูปทรงเรขาคณิตที่ชัดแจ้ง (explicit geometry) ซึ่งทำงานร่วมกับ GPU ได้ดี แต่การแรสเตอร์ไรซ์พอยต์แบบดั้งเดิมนั้นต้องอาศัยเรขาคณิต Multi-View Stereo (MVS) ที่หนาแน่นเพื่อหลีกเลี่ยงการเกิดรู หรือต้องพึ่งพาขั้นตอนหลังการประมวลผลด้วย CNN ซึ่งก่อให้เกิดการกะพริบข้ามเฟรม (temporal flickering)
บทความนี้นำเสนอการแทนฉากแบบชัดแจ้งที่ไม่มีโครงสร้างแน่นอนโดยใช้ 3D Gaussians ร่วมกับแรสเตอร์ไรเซอร์ระดับไทล์ (tile-based rasterizer) ที่มีความเร็วสูง ซึ่งให้ความสมจริงในการเรนเดอร์เทียบเท่ากับ implicit radiance fields ระดับแถวหน้า ควบคู่ไปกับอัตราเฟรมเรตแบบเรียลไทม์และเวลาการปรับค่าที่แข่งขันได้
แนวคิดหลัก
- Unstructured 3D Gaussian Representation: แทนที่จะใช้เครือข่ายพิกัดต่อเนื่องหรือกริดหนาแน่น radiance field จะถูกกำหนดค่าผ่าน 3D Gaussians แบบไม่ต่อเนื่องที่มีเมทริกซ์ความแปรปรวนร่วมแบบแอนไอโซทรอปิก (anisotropic covariance matrices) เต็มรูปแบบ ซึ่งเริ่มต้นจากพอยต์คลาวด์ Structure-from-Motion (SfM) แบบเบาบางโดยไม่ต้องใช้เวกเตอร์แนวฉาก (normals) หรือ dense MVS
- Parameterization via Scale and Rotation: เพื่อให้แน่ใจว่าเมทริกซ์ความแปรปรวนร่วมยังคงมีคุณสมบัติกึ่งแน่นอนบวก (positive semi-definite) ตลอดกระบวนการ gradient descent จึงมีการแยกองค์ประกอบออกเป็นเวกเตอร์สเกล 3 มิติ และควอเทอร์เนียนหนึ่งหน่วย
- Adaptive Density Control: การปรับค่าจะจัดการความหนาแน่นของฉากแบบไดนามิกโดยการติดตามเกรเดียนต์ตำแหน่งในปริภูมิการมอง (view-space position gradients): โคลน Gaussians ที่สร้างรายละเอียดไม่เพียงพอ (under-reconstructed) และแบ่ง Gaussians ที่สร้างรายละเอียดเกิน (over-reconstructed) ขณะเดียวกันก็กำจัด splats ที่โปร่งแสงหรือมีขนาดใหญ่เกินไป
- Visibility-Aware Tile-Based Rasterization: แรสเตอร์ไรเซอร์บน GPU ที่ปรับแต่งขึ้นมาจะแบ่งพิกเซลบนหน้าจอออกเป็นไทล์ขนาด เรียงลำดับความลึกของ splats ในแต่ละเฟรมด้วย Radix sort ที่รวดเร็ว และผสมผสานค่าแอลฟาของการฉายภาพแบบแอนไอโซทรอปิกจากด้านหน้าไปด้านหลัง โดยไม่จำกัดจำนวน splats ที่สามารถรับการอัปเดตเกรเดียนต์
ระเบียบวิธีวิจัย
1. 3D Gaussian Scene Representation
3D Gaussian ที่มีจุดศูนย์กลางอยู่ที่ค่าเฉลี่ย ถูกกำหนดโดยเมทริกซ์ความแปรปรวนร่วม ในปริภูมิโลก (world space):
เพื่อรับประกันว่า จะคงคุณสมบัติกึ่งแน่นอนบวกระหว่างการหาค่าที่เหมาะสม จึงถูกแยกตัวประกอบออกเป็นเมทริกซ์การหมุน และเมทริกซ์การปรับขนาด : ในที่นี้ ถูกเก็บเป็นเวกเตอร์ 3 มิติ ซึ่งประเมินด้วยฟังก์ชันกระตุ้นแบบเอกซ์โปเนนเชียล และ ถูกกำหนดด้วยควอเทอร์เนียนหนึ่งหน่วยที่ปรับบรรทัดฐานแล้ว
สำหรับการเรนเดอร์ 3D Gaussians จะถูกฉายไปยังพิกัดภาพ 2 มิติตามเฟรมเวิร์ก EWA splatting เมื่อกำหนดการแปลงมุมมอง และจาโคเบียน ของการประมาณแบบแอฟฟีนของการแปลงโปรเจกชัน เมทริกซ์ความแปรปรวนร่วม 2 มิติ ในปริภูมิหน้าจอจะเป็น: แถวและคอลัมน์ที่สามจะถูกตัดทิ้ง ทำให้ได้เมทริกซ์ความแปรปรวนร่วมขนาด สำหรับ planar splatting
2. Rendering and Image Formation
แต่ละ Gaussian จะมีค่าความทึบแสง (ถูกจำกัดให้อยู่ในช่วง ผ่านฟังก์ชันซิกมอยด์) และสัมประสิทธิ์ฮาร์มอนิกทรงกลม (spherical harmonics หรือ SH) ที่อธิบายสีตามมุมมอง การผสมผสาน Gaussians ที่ซ้อนทับกันจำนวน ตัวที่เรียงลำดับแล้ว ณ พิกเซลหนึ่งๆ จะเป็นไปตามสูตรเชิงปริมาตรมาตรฐาน: โดยที่ หาได้จากการประเมิน Gaussian 2 มิติที่ฉายลงมาคูณด้วยค่าความทึบแสงของจุดที่เรียนรู้มา
3. Optimization and Adaptive Control
ฟังก์ชันการสูญเสียรวมการสูญเสีย เข้ากับการสูญเสีย D-SSIM (โดยมี ):
การควบคุมความหนาแน่นแบบปรับตัวจะทำงานทุกๆ 100 รอบ บน Gaussians ที่มีค่าเฉลี่ยเกรเดียนต์ตำแหน่งในปริภูมิการมองเกิน :
- การโคลน (Under-reconstruction): สำหรับ Gaussians ขนาดเล็ก จะสร้างสำเนาขึ้นมาและเลื่อนไปตามทิศทางของเกรเดียนต์ตำแหน่ง
- การแบ่ง (Over-reconstruction): สำหรับ Gaussians ขนาดใหญ่ ตัวดั้งเดิมจะถูกแทนที่ด้วย Gaussians ขนาดเล็กกว่าสองตัวซึ่งมีขนาดลดลงด้วยอัตราส่วน โดยสุ่มตำแหน่งเริ่มต้นจาก Gaussian ตัวแม่
- การตัดแต่ง (Pruning): ตัด Gaussians ที่มี หรือตัวที่มีขนาดใหญ่เกินไปในปริภูมิโลก/การมองออกไป ทุกๆ รอบ ค่าความทึบแสงจะถูกรีเซ็ตให้ใกล้ศูนย์เพื่อกรองวัตถุลอยฟุ้งที่ไม่พึงประสงค์ (floating artifacts)
4. Fast Differentiable Tile-Based Rasterizer
- หน้าจอจะถูกแบ่งออกเป็นไทล์ขนาด พิกเซล
- Gaussians ที่ผ่านการคัดกรองฟรัสตรัม (frustum culling) ที่ช่วงความเชื่อมั่น 99% จะได้รับคีย์ขนาด 64 บิตที่เข้ารหัส ID ของไทล์และความลึกในปริภูมิการมอง
- GPU Radix sort เพียงครั้งเดียวจะเรียงลำดับอินสแตนซ์ทั้งหมดทั่วทั้งเฟรม
- เธรดบล็อกจะรวมค่าสีในแต่ละไทล์จากด้านหน้าไปด้านหลังจนกว่า จะถึงจุดอิ่มตัว (หยุดก่อนที่จะเกิน )
- ขั้นตอนการส่งผ่านย้อนกลับ (backward pass) จะวนย้อนกลับไทล์จากหลังมาหน้า โดยฟื้นฟูค่าความทึบแสงระหว่างกลางด้วยการนำค่าความทึบแสงสะสมสุดท้ายมาหารด้วยค่า ของแต่ละรูปทรง ทำให้ไม่ต้องใช้บัฟเฟอร์หน่วยความจำแบบไดนามิกขนาดใหญ่ต่อพิกเซล
ผลการทดลอง
- ชุดข้อมูล Mip-NeRF360: หลังจากการเทรน 30K รอบ (เวลาเทรนเฉลี่ย 41 นาที 33 วินาที) 3D Gaussian Splatting ได้คะแนนเฉลี่ย SSIM ที่ 0.815, PSNR ที่ 27.21 dB และ LPIPS ที่ 0.214 ซึ่งเทียบเท่าหรือดีกว่า Mip-NeRF360 (SSIM 0.792, PSNR 27.69 dB, LPIPS 0.237, เวลาเทรน 48 ชั่วโมง) ขณะที่เรนเดอร์ได้เร็วถึง 134 FPS เทียบกับ Mip-NeRF360 ที่ทำได้ 0.06 FPS
- การกำหนดค่าแบบเร็ว (7K รอบ): ให้ค่า SSIM ที่ 0.770 และ PSNR ที่ 25.60 dB ในเวลาเพียง 6 นาที 25 วินาที ที่ความเร็ว 160 FPS ซึ่งเหนือกว่า InstantNGP-Base (SSIM 0.671, 11.7 FPS) และ Plenoxels (SSIM 0.626, 6.79 FPS) ภายใต้เวลาการเทรนที่ใกล้เคียงกัน
- Tanks&Temples และ Deep Blending: บน Tanks&Temples การเทรน 30K รอบได้ SSIM ที่ 0.841 และ PSNR ที่ 23.14 dB ที่ 154 FPS ส่วนบน Deep Blending ทำได้ SSIM ที่ 0.903 และ PSNR ที่ 29.41 dB ที่ 137 FPS
- Synthetic Blender: ทำคะแนนเฉลี่ย PSNR ได้ 33.32 dB จากการเริ่มต้นแบบสุ่มอย่างสมบูรณ์ด้วย 100K จุด และเรนเดอร์ได้ที่ 180–300 FPS
ข้อจำกัดและประเด็นที่ยังเปิดกว้าง
- มุมมองที่สังเกตได้ไม่ทั่วถึงและค่าผิดปกติ: การครอบคลุมที่เบาบางหรือมุมมองที่อยู่ห่างจากวิถีการเคลื่อนที่ของการเทรน อาจทำให้เกิดข้อผิดพลาดที่มองเห็นได้ชัด เช่น Gaussians ที่ยืดยาวหรือเป็นดวงผิดปกติ
- ปัญหาวัตถุปรากฏกะทันหัน (Popping Artifacts): การสลับลำดับความลึกอย่างกะทันหันหรือการคัดตัดขอบเขตที่รุนแรงเกินไปอาจทำให้เกิดการกะพริบหรือวัตถุโผล่ขึ้นมาระหว่างการเคลื่อนที่ ซึ่งชี้ให้เห็นถึงความจำเป็นในการทำ antialiasing ที่ดีขึ้น
- การใช้หน่วยความจำ: แม้จะกะทัดรัดเมื่อเทียบกับพอยต์คลาวด์แบบหนาแน่นดั้งเดิม แต่การแทนข้อมูลแบบชัดแจ้งนี้ยังคงต้องใช้พื้นที่หลายร้อยเมกะไบต์ (เช่น 400–750 MB สำหรับฉากที่มี 1–5 ล้าน Gaussians) และการเทรนด้วยโค้ดต้นแบบที่ยังไม่ได้รับการปรับแต่งอย่างเต็มที่อาจทำให้การใช้หน่วยความจำ GPU พุ่งสูงเกิน 20 GB
- การขาด Regularization: เฟรมเวิร์กนี้ไม่ได้ใส่ตัวปรับความเรียบเชิงเรขาคณิต (geometric smoothness) หรือตัวปรับความหนาแน่นที่ชัดเจน ทำให้ยังมีโอกาสเกิดเศษวัตถุลอยตัวในพื้นหลัง (background floaters) ในบริเวณที่รังสีกล้องมีข้อจำกัดไม่เพียงพอ
คำศัพท์สำคัญ
- 3D Gaussians
- องค์ประกอบเรขาคณิตสามมิติพื้นฐานแบบไร้โครงสร้างและหาอนุพันธ์ได้ ซึ่งถูกกำหนดโดยตำแหน่งเฉลี่ย เมทริกซ์ความแปรปรวนร่วมแบบแอนไอโซทรอปิก ความทึบแสง และสัมประสิทธิ์ลักษณะภายนอกแบบฮาร์มอนิกทรงกลม
- Anisotropic Covariance
- การกระจายตัวใน 3 มิติแบบมีทิศทาง ซึ่งถูกกำหนดพารามิเตอร์แยกเป็นเวกเตอร์สเกลและควอเทอร์เนียนการหมุนหนึ่งหน่วย ทำให้ Gaussians สามารถเปลี่ยนรูปเป็นทรงรีแบนที่วางตัวแนบไปกับพื้นผิวจริงได้
- Adaptive Density Control
- กลยุทธ์การปรับค่าแบบสลับขั้นตอนที่เพิ่ม Gaussians โดยการโคลนหรือแบ่งองค์ประกอบที่มีเกรเดียนต์ตำแหน่งสูง และตัดองค์ประกอบที่โปร่งใสหรือมีขนาดใหญ่เกินไปทิ้ง
- Tile-Based Rasterization
- ไปป์ไลน์การเรนเดอร์ที่ทำงานบน GPU ซึ่งแบ่งวิวพอร์ตออกเป็นช่องขนาด พิกเซล เพื่อเรียงลำดับและผสมผสาน Gaussian splats ที่ซ้อนทับกันแบบขนานได้อย่างมีประสิทธิภาพ
- Alpha-Blending
- การสะสมค่าสีและการส่องผ่านจากด้านหน้าไปด้านหลัง ซึ่งเลียนแบบการรวมเชิงปริมาตรของ NeRF มาตรฐาน บน splats 2 มิติที่ผ่านการฉายภาพและเรียงลำดับแล้ว
- Radix Sort
- อัลกอริทึมการเรียงลำดับบน GPU ที่ใช้จัดลำดับ Gaussians ทั้งหมดแบบขนานโดยอิงจากคีย์ 64 บิตที่รวม ID ของไทล์และความลึกในปริภูมิการมองเข้าด้วยกัน
- Spherical Harmonics (SH)
- ฐานของฟังก์ชันเชิงทิศทางที่อิงตามความถี่ ใช้สำหรับแทนสีที่แปรผันตามมุมมองบนแต่ละ Gaussian ได้สูงสุดถึง 4 แบนด์
คำถามที่พบบ่อย
3D Gaussians ถูกกำหนดค่าเริ่มต้นอย่างไรก่อนการปรับค่า?
พวกมันถูกสร้างขึ้นจากพอยต์คลาวด์แบบเบาบางที่ได้เป็นผลพลอยได้จากการปรับเทียบกล้องด้วย Structure-from-Motion (SfM) โดยมีสเกลเริ่มต้นแบบไอโซทรอปิกซึ่งคำนวณจากระยะทางเฉลี่ยไปยังจุดข้างเคียงที่ใกล้ที่สุดสามจุด สำหรับฉากสังเคราะห์ สามารถใช้การกำหนดค่าเริ่มต้นแบบสุ่มสม่ำเสมอได้เช่นกัน
การโคลน (cloning) กับการแบ่ง (splitting) Gaussians มีความแตกต่างกันอย่างไร?
การโคลนจะคัดลอก Gaussian ขนาดเล็กและเลื่อนไปตามทิศทางของเกรเดียนต์ตำแหน่งเพื่อชดเชยลักษณะเรขาคณิตที่ขาดหายไป (under-reconstruction) ในขณะที่การแบ่งจะแยก Gaussian ที่มีขนาดใหญ่เกินไปออกเป็น Gaussian ขนาดเล็กกว่าสองตัวที่มีขนาดลดลงด้วยปัจจัย 1.6 เพื่อจับรายละเอียดที่มีความแปรปรวนสูงได้ดียิ่งขึ้น (over-reconstruction)
เหตุใดแรสเตอร์ไรเซอร์จึงเรียงลำดับตามไทล์แทนที่จะเรียงลำดับตามพิกเซล?
การเรียงลำดับตามไทล์โดยใช้ GPU Radix sort เพียงครั้งเดียวบนคีย์ความลึกและไทล์ที่รวมกัน จะช่วยหลีกเลี่ยงภาระการคำนวณที่สูงมากจากการเรียงลำดับองค์ประกอบแบบแยกรายพิกเซล ทำให้สามารถทำอัตราเฟรมเรตได้สูงมากโดยสูญเสียความแม่นยำของภาพไปเพียงเล็กน้อยจนแทบสังเกตไม่ได้
ขั้นตอนการส่งผ่านย้อนกลับ (backward pass) หลีกเลี่ยงการจัดเก็บรายการองค์ประกอบขนาดยาวของแต่ละพิกเซลในโกลบอลเมมโมรีได้อย่างไร?
แรสเตอร์ไรเซอร์จะวนซ้ำผ่านรายการที่เรียงลำดับตามไทล์ที่มีอยู่แล้วจากหลังมาหน้า และสร้างค่าความทึบแสงระหว่างกลางขึ้นมาใหม่โดยนำค่าความทึบแสงสะสมสุดท้ายมาหารด้วยค่าแอลฟาของแต่ละ Gaussian ทำให้ใช้พื้นที่หน่วยความจำต่อพิกเซลคงที่เท่านั้น
คำอธิบายในหน้านี้เขียนโดย AI จากงานวิจัยและอาจมีข้อผิดพลาด โปรดอ่านต้นฉบับเพื่อดูรายละเอียด