SILSA: 3D-генерация без потери топологии в 384 токена
Велосипедное колесо, у которого генератор залил центральное отверстие. Стул, чьи четыре ножки превратились в одну сросшуюся опору. Растение, чьи ветки слиплись в сплошной ком. Авторы SILSA, новой работы с ArXiv про генерацию 3D по изображению, приводят такие примеры не случайно. Современные модели научились выдавать гладкие меши с низкой ошибкой поверхности, но структурно эти меши часто неверны: дырка залита, тонкая опора порвана, два соседних компонента слились в один.
Такие меши бесполезны за пределами рендера. Их нельзя напечатать на 3D-принтере, неудобно импортировать в симулятор, а в игре они развалятся при первом тесте на физику. SILSA лечит это не размером модели, а сменой представления: вместо десятков тысяч воксельных токенов форма описывается 384 скользящими срезами вдоль трёх осей. На бенчмарках это даёт +8,7% к PSNR, 5,96 пункта абсолютного прироста coverage, на 9,2% меньшую ошибку топологии и инференс за 0,34 секунды вместо 0,82.
Что такое SILSA
SILSA расшифровывается как Sliding-Window Slice Latents. Это фреймворк генерации 3D по одному изображению, который представляет форму набором перекрывающихся срезов вдоль трёх канонических осей. Каждый токен описывает локальное окно глубины, поэтому размер представления фиксирован: 384 токена на любую форму, независимо от площади поверхности, занятости и сложности деталей. Генерация одностадийная, а за структурную корректность отвечает отдельная топологическая функция потерь.
Почему воксели ломают структуру
Стандартный путь в генеративном 3D выглядит так. Форму кодируют в воксельный латент, предсказывают, какие воксели заняты, а затем синтезируют локальную геометрию внутри занятых ячеек. Проблема в цене: плотная воксельная сетка растёт кубически с разрешением, а разреженные и иерархические варианты хоть и экономят память, но их число токенов зависит от данных. У Trellis это в среднем 19 847 токенов, у SparseFlex 87 453, у XCube 64 821. Причём первые два метода к тому же требуют двух стадий.
И дело даже не в размере. Воксельная токенизация фрагментирует непрерывную поверхность на множество локальных элементов, и модели становится трудно отслеживать связность. Компактные альтернативы вроде трипланов или множеств латентов решают проблему размера, но ослабляют связь между токеном и той локальной геометрией, которую он обязан сохранить. Итог: сеть с низкой ошибкой поверхности заполняет дырку, рвёт опору или сливает две части в одну.
Чтобы говорить об этом строго, нужен язык топологии. Числа Бетти считают то, чего не видит ни одна послойная метрика: β0 это количество связных компонент, β1 число петель и туннелей, β2 число замкнутых полостей. Для 3D-модели это разница между стулом с четырьмя отдельными ножками и стулом, у которого ножки срослись в сплошную плиту. Ошибка поверхности в обоих случаях может быть небольшой, но объекты получаются разные.
Срезы вместо вокселей
Ключевое наблюдение SILSA простое. Срез, пусть и небольшой толщины, захватывает топологию целой плоской области как единый связный объект, тогда как воксельная сетка разбивает эту же область на сотни независимых ячеек. А последовательность срезов показывает, как компоненты и отверстия появляются, исчезают и сливаются при движении плоскости через объект.
Работает это так. Форма режется на 128 бинов вдоль каждой из трёх осей, и для контекста каждый бин собирает точки из окна шириной 8 соседних бинов. Итого 3×128 = 384 токена, и это число фиксировано, что открывает дорогу одностадийной генерации без отдельного шага предсказания активных вокселей. Три оси дают взаимодополняющие виды одного объекта: то, что не видно в горизонтальных срезах, проявляется в вертикальных.
Абляции здесь говорят громче любых слов. Если убрать перекрытие окон, ошибка Бетти растёт с 1,58 до 3,24: без контекста срезы слишком бедны. Слишком широкое окно тоже хуже (1,83), потому что избыточная агрегация начинает сглаживать локальную структуру. Ещё показательнее число осей: одна ось даже с 384 срезами даёт ошибку Бетти от 5,92 до 8,07, две оси вплотную подбираются к 2,6, и только три оси выходят на 1,58. Каждая дополнительная ось добавляет то, чего не хватает ортогональным проекциям.
SliceVAE: кодирование и декодирование
За превращение формы в срезы отвечает SliceVAE. Энкодер сэмплирует с поверхности 200 тысяч точек с нормалями, обрабатывает каждую точку общим MLP вместе со смещением относительно центра бина, а окно агрегирует через max pooling, как это делается в PointNet-подобных архитектурах. На выходе каждой ячейки пара параметров гауссова распределения, из которого берётся срез-латент. Пустые ячейки получают обученный эмбеддинг, чтобы модель отличала пустоту от пропуска в данных.
Декодер собирает три потока латентов обратно в объём: срезы рассеиваются в общую сетку 16³, откуда разреженный трансформер поэтапно доращивает разрешение до 256³ с отсечением пустых областей. Финальная голова предсказывает SDF, деформации вершин и веса интерполяции, а меш извлекается через дифференцируемый Dual Marching Cubes. Обучение заняло 5 эпох на 8 ускорителях A100, и кроме стандартных лоссов на глубину, нормали и силуэт с KL-регуляризацией в нём участвует главный ингредиент метода.
Топология как функция потерь
Обычные лоссы сравнивают поверхности попиксельно и почти не чувствуют, что у колеса исчезла дырка. Поэтому авторы добавляют надзор на уровне топологии, опираясь на персистентные гомологии. Срез превращается в карту занятости, поверх которой строится фильтрация, а её эволюция записывается диаграммой персистентности: каждая топологическая особенность задаётся парой значений «рождение и смерть», и устойчивые особенности живут долго, а шум умирает быстро.
Дальше работают два слагаемых. Первое сопоставляет диаграммы предсказанного и эталонного среза: несовпавшие особенности штрафуются пропорционально своей персистентности, поэтому случайные мелкие компоненты подавляются, а реальные структуры сохраняются. Второе слагаемое следит за переходами между соседними срезами и требует, чтобы число компонент и дырок менялось на той же глубине, что и в эталоне. Проще говоря, отверстие должно закрываться или открываться не «как получилось», а в правильном месте вдоль оси. Дискретные числа Бетти пропускают градиент через straight-through оценку.
Эффект измеримый. Без топологического лосса ошибка Бетти составляет 4,43, с ним падает до 1,58. Причём нужны оба слагаемых: по отдельности они дают 2,91 и 2,87, а вместе заметно лучше каждого. Приятный побочный выигрыш: Chamfer Distance улучшается с 0,78 до 0,59, то есть топологический надзор не вредит геометрии поверхности, а помогает ей.
Volumetric Anchor Lattice: как оси договариваются
Три потока срезов должны описывать один объект, но денойзятся они как три независимые последовательности. Если не связать их вовсе, результат разваливается: Chamfer Distance взлетает до 5,87, IoU падает до 49,26, ошибка Бетти до 17,91. Поэтому в трансформере работает Volumetric Anchor Lattice (VAL): общая 3D-сетка, в которую каждый токен среза читает и пишет свою осевую плоскость. Токены разных осей складывают улики в одно пространство, и следующие блоки могут опираться на то, что успели оставить остальные.
Запись устроена как управляемый вентиль: по каждому каналу сеть решает, сколько старого содержимого сохранить и сколько заменить новым вкладом токена. В абляциях такая схема бьёт и полную перезапись (1,91 против 1,58 по ошибке Бетти), и простое сложение (1,74). Другой вариант связи, прямое cross-attention между токенами осей, даёт 1,64: работает, но чуть хуже структурированной разделяемой памяти. Разрешение сетки 16 оказалось оптимальным между дешёвым 8 и избыточным 32.
Сам генератор поверх этого простой. Латенты обучаются через rectified flow на условиях признаков DINOv2, 24 слоя, 300 тысяч шагов. Фиксированная раскладка срезов избавляет от отдельной стадии предсказания активной структуры, поэтому на инференсе хватает 50 шагов Эйлера.
Результаты
На генерации 3D по изображению SILSA обходит конкурентов по большинству метрик. PSNR растёт с 30,12 у SparseFlex до 32,74, coverage с 73,12% до 79,08%, лучшими становятся FD (10,16) и MMD (14,02), а по KD и LPIPS метод повторяет лучший результат. Одна метрика чуть отстаёт: CLIP-близость 87,94 против 88,22 у SparseFlex. То есть соответствие входному изображению держится на уровне лидеров, но не выше всех.
Реконструкция куда красноречивее. Ошибка Бетти снижается с 1,743 до 1,582, то есть на 9,2%. Chamfer Distance улучшается с 0,61 до 0,59, F-Score при пороге 0,01 с 96,18 до 96,79, IoU с 92,54 до 93,01. Прирост по каждой метрике небольшой, но распределение ошибок меняется качественно: меньше всего страдают тонкие и сильно связные структуры, на которых ломались предыдущие методы.
И всё это на 384 токенах. Это на 70% меньше, чем у Dora с её 1 280 токенами, и больше чем на 98% меньше, чем у Trellis, XCube и SparseFlex. Память на обучение падает с 14,6 ГБ до 8,7 ГБ, шаг обучения ускоряется с 0,38 до 0,21 секунды, а инференс одного объекта занимает 0,34 секунды против 0,82 у самого быстрого из бейзлайнов. Параметров в модели 96 миллионов: меньше, чем у Dora, и втрое меньше, чем у Trellis, которая считается одним из сильных опенсорсных ориентиров в этой нише. Оценка проводилась на 200 ассетах Toys4K и 50 фотографиях in-the-wild, а обучение шло на датасете Trellis-500K.
Отдельно проверены открытые поверхности на датасете DeepFashion3D. Одежда топологически проста, поэтому там все методы близки к нулевой ошибке Бетти, но SILSA всё же снижает Chamfer Distance с 0,05 до 0,04.
Что это меняет
Генеративный 3D последние два года соревнуется в основном размером моделей и объёмом данных. SILSA напоминает, что не менее важна ставка на представление. Срезы соединяют то, что раньше приходилось выбирать: пространственную привязку вокселей и компактность глобальных латентов. Для практики это означает более дешёвую высокодетальную генерацию. Фиксированная длина последовательности делает вычислительную нагрузку предсказуемой, а одностадийность заметно упрощает пайплайн.
Ограничения тоже честные. Качество зависит от обучающего распределения, а неоднозначные или бедные деталями входные изображения дают менее точную структуру. Топологический надзор считается по срезам, но не отменяет стоимости персистентных гомологий в процессе обучения. И как у любой генеративной модели, в списке рисков остаются несанкционированные копии реальных объектов, о чём авторы пишут прямым текстом.
Для индустрии ставка на топологию выглядит третьим фронтом после качества текстур и скорости. Игры, симуляторы и робототехника хотят меши, которые остаются рабочими после экспорта, и именно такие меши обещает подход срезов. Стоит ли добавление третьей оси и топологического лосса той сложности, которую оно приносит? Судя по абляциям, без них метод теряет почти всё своё преимущество.
Часто задаваемые вопросы
Что такое топологическая корректность 3D-модели?
Это свойство сохранять структуру объекта: число связных компонент, наличие отверстий и туннелей, а также их правильное расположение. Формально такие свойства измеряются числами Бетти и методами персистентных гомологий. Модель с низкой ошибкой поверхности может заполнить дырку или слить две детали, и попиксельные метрики почти не заметят подмены.
Почему срезы компактнее воксельных токенов?
Потому что срез представляет целую плоскую область одним токеном, а воксельная сетка фрагментирует ту же область на множество ячеек, и их количество зависит от занятости и площади поверхности. У SILSA представление фиксировано: 384 токена на форму, даже если у неё тысячи тонких деталей вроде спиц велосипедного колеса.
Почему топологический лосс не применяли раньше?
Применяли, но в основном в 2D-сегментации, где персистентные гомологии считаются сравнительно недорого. Для объёмной геометрии полное топологическое сопоставление оказывается слишком дорогим на высоких разрешениях. SILSA делает его вычислимым, разбивая надзор на два дешёвых уровня: топология внутри каждого среза плюс согласование переходов между соседними срезами.
Итог
SILSA показывает, что генерация 3D может быть одновременно компактнее и структурно честнее. 384 среза вместо 87 тысяч воксельных токенов, топологический надзор вместо надежды на масштаб, одностадийный генератор против двухстадийных пайплайнов. Результат: меньше памяти, реже ломаются тонкие детали, инференс в 2,4 раза быстрее самого быстрого из бейзлайнов при более высоком PSNR. Работа выложена на ArXiv под номером 2610.02201, и если вы строите пайплайны генеративного 3D или просто следите за тем, какие представления побеждают, срезы из SILSA точно стоят того, чтобы держать их в поле зрения.