Gaussian Splatting
Гауссово сплаттинг-восстановление создаёт фотореалистичные 3D-сцены по фотографиям в виде миллионов 3D-гауссиан, которые отображаются в реальном времени. Рассматриваются обучение, NeRF и съёмка.
Gaussian splatting, также называемый 3D Gaussian splatting (3DGS), — метод реконструкции фотореалистичной 3D-сцены по обычным фотографиям и отрисовки новых видов сцены в реальном времени. Сцена представлена миллионами 3D-гауссиан — мягких эллипсоидов, каждый из которых имеет положение, форму, непрозрачность и зависящий от ракурса цвет. Изображение создаётся проецированием ("splatting") гауссиан на экран и их смешиванием. Метод представили на SIGGRAPH 2023 в работе 3D Gaussian Splatting for Real-Time Radiance Field Rendering. Он обеспечил качество изображения на уровне лучших нейронных полей излучения (NeRF) при частоте 30 кадров в секунду или выше и разрешении 1080p — такого прежде не удавалось достичь ни одному методу на больших неограниченных сценах. Это метод синтеза новых ракурсов и 3D-реконструкции.
Как работает гауссово сплаттинг-преобразование#
Каждая гауссиана хранит 59 обучаемых чисел: 3D-положение, 3D-масштаб и кватернион поворота из 4 чисел, вместе задающие ковариацию (форму и ориентацию), непрозрачность и 48 коэффициентов сферических гармоник — по 16 на цветовой канал. Они позволяют цвету меняться в зависимости от направления просмотра, передавая отражения и блеск. Обучение начинается с разреженного облака точек, которое создаёт метод восстановления структуры по движению (SfM) во время калибровки камер; в каждой точке размещают гауссиану. На каждой итерации рендерится один обучающий ракурс, он сравнивается с настоящей фотографией с помощью взвешенной комбинации функций потерь L1 и D-SSIM, а параметры каждой гауссианы обновляются градиентным спуском через дифференцируемый рендерер. Каждые 100 итераций адаптивное управление плотностью клонирует мелкие гауссианы в недостаточно реконструированных областях, разделяет крупные гауссианы, охватывающие слишком много деталей, и удаляет почти прозрачные. В результате каждая сцена в статье содержит от 1 до 5 миллионов гауссиан.
Чтобы отрисовать кадр, рендерер проецирует каждую 3D-гауссиану на плоскость изображения в виде 2D-эллипса, делит экран на тайлы размером 16×16 пикселей, сортирует гауссианы, пересекающие каждый тайл, по глубине с помощью одной радиальной сортировки на GPU, а затем смешивает их по альфа-каналу для каждого пикселя, от переднего плана к заднему. Поскольку сцена представляет собой явный список примитивов, рендеринг работает как растеризатор игрового движка и не вычисляет нейронную сеть для каждого пикселя.
Gaussian splatting, NeRF и сетки#
NeRF неявно хранит сцену в весах нейронной сети и рендерит её, запрашивая значения у сети во множестве точек вдоль каждого луча камеры. Gaussian splatting хранит сцену явно, поэтому рендеринг сводится к сортировке и смешиванию. На одинаковом оборудовании в оригинальной статье для обучения Mip-NeRF360 требовалось в среднем 48 часов, а рендеринг одного кадра занимал около 10 секунд. После 35–45 минут обучения качество Gaussian splatting совпадало с качеством Mip-NeRF360 или немного превосходило его, а рендеринг выполнялся в реальном времени. За явное представление приходится платить памятью: при 59 числах на гауссиану сцена из 3 миллионов гауссиан занимает около 700 МБ 32-битных чисел с плавающей точкой, а пиковое потребление памяти GPU при обучении крупных сцен в оригинальной реализации могло превышать 20 ГБ. У сплатов также нет заданной поверхности, поэтому приложениям, которым нужна геометрия столкновений или редактирование в стиле САПР, всё ещё приходится преобразовывать их в сетки с помощью дополнительных методов. Для движущихся сцен нужны расширения, например 4D Gaussian splatting.
Сбор данных для Gaussian splatting#
Набор данных для реконструкции состоит из перекрывающихся фотографий или видеокадров, снятых при перемещении вокруг статичной сцены. Всё, что движется во время съёмки, например прохожий или машина, присутствует в одних кадрах и отсутствует в других. В ходе оптимизации модель пытается объяснить такие объекты полупрозрачными артефактами, называемыми «поплавками». Поэтому конвейеры обучения принимают маски, исключающие движущиеся объекты. В формате данных Nerfstudio используются чёрно-белые маски, где чёрным отмечены пиксели, которые нужно игнорировать. Модели сегментации экземпляров YOLO26 автоматически создают такие маски, сегментируя каждого человека в каждом кадре.
import cv2
from ultralytics import YOLO
# Загрузить модель сегментации экземпляров YOLO26
model = YOLO("yolo26n-seg.pt")
# Сегментируй только людей (класс COCO 0) — они часто становятся источником «поплавков» при съёмке.
results = model("https://ultralytics.com/images/bus.jpg", classes=[0], retina_masks=True)
result = results[0]
# Белым отмечена статичная сцена для обучения, чёрным — люди, которых нужно игнорировать.
people = result.masks.data.sum(dim=0) > 0
keep_mask = (~people).cpu().numpy().astype("uint8") * 255
cv2.imwrite("bus_mask.png", keep_mask)У сохранённого bus_mask.png полное разрешение фотографии, поскольку retina_masks=True возвращает маски исходного размера изображения, а каждый человек в кадре отмечен чёрным.
Применение#
- Недвижимость и виртуальные туры: съёмка дома, музея или объекта культурного наследия телефоном или дроном превращается в сцену, которую посетители могут свободно осматривать в браузере или VR-шлеме; отражения на полу и окнах сохраняются.
- Визуальные эффекты и виртуальное производство: съёмочные группы и разработчики игр фиксируют реальные места в виде сплатов и используют их как фотореалистичные фоны и образцы декораций.
- Цифровые двойники и картографирование: геопространственные платформы передают крупные сплат-реконструкции городов, строительных площадок и инфраструктуры наряду с традиционными 3D-тайлами.
- Симуляция вождения и робототехники: реконструкции реальных поездок позволяют командам, работающим над автономными транспортными средствами, повторно рендерить записанные сцены с новых ракурсов камеры и тестировать модели восприятия.
Библиотеки с открытым исходным кодом, такие как gsplat, предоставляют растеризаторы CUDA для обучения сплатов. Khronos Group утвердила KHR_gaussian_splatting — расширение glTF 2.0 для хранения Gaussian splats, разработанное при участии специалистов из Cesium, Esri, Niantic Spatial, NVIDIA, Huawei и Autodesk.










