Differentiable Rendering
Kết xuất khả vi tính toán mức thay đổi của từng pixel được kết xuất theo hình dạng, vật liệu và camera của cảnh, nhờ đó có thể khớp cảnh 3D với ảnh chụp.
Kết xuất khả vi là quá trình kết xuất—chuyển mô tả về hình học, vật liệu, ánh sáng và camera của một cảnh 3D thành hình ảnh—được triển khai sao cho có thể tính đạo hàm của từng pixel đầu ra theo các tham số cảnh đó. Khi ấy, có thể tối thiểu hóa hàm mất mát so sánh ảnh kết xuất với ảnh chụp bằng gradient descent, với lan truyền ngược đi xuyên qua bộ kết xuất tới cảnh 3D. Đây là nền tảng của kết xuất ngược, tác vụ thị giác máy tính nhằm khôi phục một cảnh từ các hình ảnh của cảnh đó, và của các phương pháp kết xuất thần kinh như trường bức xạ thần kinh (NeRF) và Gaussian splatting, vốn huấn luyện model cảnh bằng cách kết xuất cảnh.
Vì sao kết xuất cần xử lý đặc biệt#
Bộ rasterizer tiêu chuẩn không khả vi ở những chỗ quan trọng. Việc một pixel có được tam giác phủ lên hay không là hàm bước theo vị trí đỉnh, nên dịch nhẹ một đỉnh không làm thay đổi pixel nào cho đến khi cạnh đi qua tâm pixel; do đó, gradient theo hình học bằng không ở hầu hết mọi nơi. Hiện tượng che khuất tạo thêm các điểm gián đoạn ở mọi vị trí một bề mặt che khuất bề mặt khác. Các bộ kết xuất khả vi xử lý những cạnh này theo nhiều cách:
- Gradient xấp xỉ: OpenDR (2014) và Neural 3D Mesh Renderer (2018) giữ nguyên rasterizer tiêu chuẩn ở lượt lan truyền tiến và xấp xỉ gradient ở lượt lan truyền ngược.
- Rasterization mềm: SoftRas (2019) thay vùng phủ cứng của mỗi pixel bằng một xác suất giảm mượt theo khoảng cách tới cạnh tam giác, đồng thời pha trộn các mặt chồng lấn, nhờ đó mọi pixel gần cạnh đều truyền gradient tới hình học.
- Kết xuất khả vi dựa trên vật lý: Các bộ dò tia như redner (2018) và Mitsuba 3 (2022) lấy mẫu cạnh đường bao hoặc tái tham số hóa tích phân kết xuất, qua đó tạo gradient cho bóng, phản xạ và ánh sáng gián tiếp.
- Kết xuất thể tích và splat: Phép ghép alpha của NeRF trên mật độ dọc mỗi tia và các Gaussian 3D được raster hóa trong Gaussian splatting vốn là những hàm trơn theo tham số của chúng.
Một rasterizer mềm cho một đĩa đơn minh họa ý tưởng này bằng PyTorch: độ phủ là sigmoid của khoảng cách có dấu tới cạnh đĩa, vì vậy gradient từ mọi pixel gần biên đều tới được tâm và bán kính của đĩa.
import torch
# Pixel coordinates of a 64x64 image
ys, xs = torch.meshgrid(torch.arange(64.0), torch.arange(64.0), indexing="ij")
def render(center, radius):
"""Soft-rasterize a disk: pixel coverage is a sigmoid of the signed distance to its edge."""
distance = torch.sqrt((xs - center[0]) ** 2 + (ys - center[1]) ** 2 + 1e-6)
return torch.sigmoid(radius - distance)
# Target image: a disk at (40, 24) with radius 12
target = render(torch.tensor([40.0, 24.0]), torch.tensor(12.0))
# Recover the scene from a wrong guess by backpropagating the pixel loss
center = torch.tensor([20.0, 40.0], requires_grad=True)
radius = torch.tensor(6.0, requires_grad=True)
optimizer = torch.optim.Adam([center, radius], lr=0.5)
for _ in range(300):
loss = ((render(center, radius) - target) ** 2).mean()
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f"center {center.detach().round(decimals=1).tolist()}, radius {radius.item():.1f}")Kết quả in ra center [40.0, 24.0], radius 12.0: bắt đầu ở vị trí cách khoảng 26 pixel với bán kính bằng một nửa giá trị đúng, bộ tối ưu Adam khôi phục được đĩa chỉ từ sai khác pixel. Với độ phủ cứng, (distance < radius).float(), hàm mất mát sẽ không truyền gradient tới tham số nào trong hai tham số.
Ứng dụng thực tế#
Các hàm mất mát đường bao như hàm trong đoạn code so sánh mask của vật thể được kết xuất với mask quan sát được; còn với ảnh chụp không có chú giải, model phân đoạn đối tượng như YOLO26 (yolo26n-seg.pt) cung cấp mask cho từng vật thể trong ảnh.
- Tái tạo 3D: NeRF (2020) và Gaussian splatting 3D (2023) khớp cảnh với hàng chục ảnh có sẵn pose camera; sau đó, Gaussian splatting kết xuất các góc nhìn mới trong thời gian thực, ở tốc độ 30 frame/giây trở lên với độ phân giải 1080p.
- Khớp cơ thể người: Các phương pháp dùng model cơ thể khớp một mesh tham số như SMPL với ảnh bằng cách so khớp đường bao được kết xuất và các khớp chiếu lên ảnh với mask và keypoint của người đó.
- Tạo nội dung từ văn bản sang 3D: DreamFusion (2022) tối ưu hóa một NeRF sao cho các hình ảnh kết xuất từ góc nhìn ngẫu nhiên đạt điểm cao theo model diffusion chuyển văn bản thành ảnh, tạo ra vật thể 3D mà không cần dữ liệu huấn luyện 3D.










