Gaussian Splatting
Gaussian splatting dựng lại các cảnh 3D chân thực từ ảnh dưới dạng hàng triệu Gaussian 3D có thể kết xuất theo thời gian thực. Nội dung đề cập đến huấn luyện, NeRF và quy trình thu thập dữ liệu.
Gaussian splatting, còn gọi là Gaussian splatting 3D (3DGS), là kỹ thuật tái tạo cảnh 3D chân thực từ ảnh thông thường và kết xuất các góc nhìn mới theo thời gian thực. Kỹ thuật này biểu diễn cảnh bằng hàng triệu Gaussian 3D, tức các ellipsoid mềm, mỗi phần tử có vị trí, hình dạng, độ mờ và màu phụ thuộc vào góc nhìn; ảnh được tạo bằng cách chiếu chúng lên màn hình ("splatting") rồi hòa trộn. Được giới thiệu tại SIGGRAPH 2023 trong bài báo Gaussian Splatting 3D cho kết xuất trường bức xạ thời gian thực, kỹ thuật này đạt chất lượng ảnh ngang với các trường bức xạ thần kinh (NeRF) tốt nhất, đồng thời kết xuất ở tốc độ 30 khung hình/giây trở lên tại độ phân giải 1080p; trước đó chưa phương pháp nào đạt được điều này trên các cảnh lớn, không giới hạn. Đây là phương pháp tổng hợp góc nhìn mới và tái tạo 3D.
Cách Gaussian Splatting hoạt động#
Mỗi Gaussian lưu trữ 59 giá trị có thể học: vị trí 3D, tỷ lệ 3D và quaternion xoay gồm 4 giá trị cùng xác định ma trận hiệp phương sai (hình dạng và hướng), độ mờ và 48 hệ số điều hòa cầu, 16 hệ số cho mỗi kênh màu, giúp màu thay đổi theo hướng quan sát để ghi lại phản xạ và độ bóng. Quá trình huấn luyện bắt đầu từ đám mây điểm thưa do Structure from Motion (SfM) tạo ra trong khi hiệu chuẩn camera, với một Gaussian đặt tại mỗi điểm. Mỗi vòng lặp kết xuất một góc nhìn huấn luyện, so sánh với ảnh thật bằng tổ hợp có trọng số của loss L1 và D-SSIM, rồi cập nhật mọi Gaussian bằng hạ gradient thông qua bộ kết xuất khả vi. Cứ mỗi 100 vòng lặp, cơ chế kiểm soát mật độ thích ứng sẽ nhân bản các Gaussian nhỏ ở vùng tái tạo chưa đầy đủ, chia các Gaussian lớn bao phủ quá nhiều chi tiết và loại bỏ các Gaussian gần như trong suốt; mỗi cảnh trong bài báo tăng lên từ 1 đến 5 triệu Gaussian.
Để vẽ một khung hình, bộ kết xuất chiếu từng Gaussian 3D thành một ellipse 2D trên mặt phẳng ảnh, chia màn hình thành các ô 16×16 pixel, sắp xếp theo độ sâu các Gaussian chồng lấp từng ô bằng một lần sắp xếp cơ số GPU, rồi alpha blending từ trước ra sau cho từng pixel. Vì cảnh là một danh sách tường minh gồm các primitive, quá trình kết xuất hoạt động như rasterizer của game engine và không đánh giá mạng nơ-ron cho từng pixel.
Gaussian splatting so với NeRF và mesh#
NeRF lưu trữ cảnh dưới dạng ngầm trong trọng số của một mạng nơ-ron và kết xuất bằng cách truy vấn mạng tại nhiều điểm dọc theo mỗi tia camera. Gaussian splatting lưu cảnh dưới dạng tường minh, nên việc kết xuất chỉ cần sắp xếp và hòa trộn. Trên cùng phần cứng trong bài báo gốc, Mip-NeRF360 mất trung bình 48 giờ để huấn luyện và khoảng 10 giây cho mỗi khung hình kết xuất; sau 35–45 phút huấn luyện, Gaussian splatting được huấn luyện đầy đủ đạt chất lượng tương đương hoặc nhỉnh hơn đôi chút, đồng thời kết xuất theo thời gian thực. Biểu diễn tường minh tiêu tốn bộ nhớ: với 59 giá trị mỗi Gaussian, một cảnh gồm 3 triệu Gaussian chứa khoảng 700 MB số thực 32-bit; trong bản triển khai gốc, bộ nhớ GPU tối đa khi huấn luyện cảnh lớn có thể vượt 20 GB. Các splat cũng không có bề mặt xác định, nên ứng dụng cần hình học va chạm hoặc chỉnh sửa kiểu CAD vẫn phải chuyển chúng thành mesh bằng các phương pháp bổ sung; cảnh chuyển động cần các phần mở rộng như Gaussian splatting 4D.
Thu thập dữ liệu cho Gaussian splatting#
Một bộ dữ liệu thu thập là tập ảnh chồng lấp hoặc khung hình video được ghi lại khi di chuyển quanh một cảnh tĩnh. Bất kỳ vật thể nào chuyển động trong lúc ghi hình, chẳng hạn người đi ngang qua hoặc ô tô, sẽ xuất hiện trong một số khung hình nhưng không có ở những khung hình khác; quá trình tối ưu cố giải thích hiện tượng đó bằng các tạo tác bán trong suốt gọi là floater. Vì vậy, pipeline huấn luyện chấp nhận mask để loại bỏ vật thể chuyển động; định dạng dữ liệu của Nerfstudio dùng mask đen trắng, trong đó màu đen đánh dấu pixel cần bỏ qua. Các model phân đoạn instance YOLO26 tự động tạo các mask này bằng cách phân đoạn mọi người trong từng khung hình.
import cv2
from ultralytics import YOLO
# Tải model phân đoạn instance YOLO26
model = YOLO("yolo26n-seg.pt")
# Chỉ phân đoạn người (class COCO 0), một nguồn floater phổ biến trong dữ liệu thu thập
results = model("https://ultralytics.com/images/bus.jpg", classes=[0], retina_masks=True)
result = results[0]
# Màu trắng đánh dấu cảnh tĩnh dùng để huấn luyện, màu đen đánh dấu người cần bỏ qua
people = result.masks.data.sum(dim=0) > 0
keep_mask = (~people).cpu().numpy().astype("uint8") * 255
cv2.imwrite("bus_mask.png", keep_mask)Tệp bus_mask.png đã lưu có độ phân giải đầy đủ của ảnh vì retina_masks=True trả về mask ở kích thước ảnh gốc, và mọi người trong khung hình đều có màu đen.
Ứng dụng#
- Bất động sản và chuyến tham quan ảo: Ảnh chụp bằng điện thoại hoặc drone về một ngôi nhà, bảo tàng hay di tích trở thành cảnh mà khách tham quan có thể tự do khám phá trên trình duyệt hoặc kính VR, trong khi phản chiếu trên sàn và cửa sổ vẫn được giữ nguyên.
- Hiệu ứng hình ảnh và sản xuất ảo: Các nhóm làm phim và game thu thập địa điểm thực dưới dạng splat để dùng làm phông nền chân thực và tư liệu tham khảo cho bối cảnh.
- Bản sao số và bản đồ: Các nền tảng không gian địa lý truyền phát những bản tái tạo splat quy mô lớn của thành phố, công trường và cơ sở hạ tầng cùng với các tile 3D truyền thống.
- Mô phỏng lái xe và robot: Bản tái tạo các hành trình thực cho phép các nhóm phát triển phương tiện tự hành kết xuất lại cảnh đã ghi từ vị trí camera mới để kiểm thử các model nhận thức.
Các thư viện mã nguồn mở như gsplat cung cấp rasterizer CUDA để huấn luyện splat; Khronos Group đã phê chuẩn KHR_gaussian_splatting, một phần mở rộng glTF 2.0 để lưu trữ Gaussian splat, được phát triển với sự đóng góp của Cesium, Esri, Niantic Spatial, NVIDIA, Huawei và Autodesk.










