474просмотров
12 февраля 2024 г.
📷 ФотоScore: 521
Быстрей, компактней, Rust!
🔠🔠🔠🔠 Compressed GS for accelerating synthesis Project, Paper, Code
🔣Известный недостаток алгоритма Gaussian Splatting - большой объём памяти для описания сплатов.
🔣В статье предлагается модификация базового алгоритма, позволяющая сжать цветовое представление и параметры Гауссиан за счёт использования кодовых книг и Z-кривой.
➕Это позволяет в 30 уменьшить потребление памяти и в 4 раза ускорить рендеринг.
❓Использование языка RUST и WebGPU может быть как плюсом, так и минусом, в зависимости от ваших целей.
Если сумеете заставить его работать в вашем браузере, дайте знать! 🔣Главный объём в хранении гауссовых сплатов уходит на анизотропные коэффициенты поверхности, представленные сферическими гармониками и матрицой ковариации гауссиан.
Пайплайн сжатия состоит из трёх шагов:
1. Кластеризация на основе меры чувствительности. Для каждого параметра вычисляется вклад в обучающие изображения. Цвет и параметры Гауссиан кодируются в компактные codebooks путём векторной квантизации на основе чувствительности. Квантизация цвета и геометрических параметров Гауссиан происходит немного отличным друг от друга образом, но везде в основе лежит алгоритм k-средних.
2. Файнтьюнинг квантизованного представления. 3. Энтропийное и LRE-кодирование. 3D-Gaussian-ы закодированы вдоль Z-curve для сохранения пространственной связности параметров сцены. 🔣При рендеринге каждая гауссиана описывается двумя треугольниками. Вершинный шейдер вычисляет позиции вершин в экранном пространстве исходя из матрицы ковариации. Размер сплата выбирается для покрытия 99% процентов спроецированной Гауссианы. Вершинный шейдер передаёт цвета в пиксельный, а пиксельный уже выбрасывает пиксели вне интервала с 99% надёжности. 🔣Рендерер (репозиторий) написан на Rust с помощью графического API WebGPU, поэтому работает в браузере. Сравнение производилось на стандартном NeRF датасете на 13 реальных сценах. Флаги для запуска рендера на WebGPU в гугл-хроме из консоли:
google-chrome-stable --enable-unsafe-webgpu --enable-features=Vulkan