В ожидании лучших 3D датасетов для ML
Для одного из своих проектов, я погрузился в чтение методов генерации трехмерных сцен и анимированных моделей. Не слишком удивительным фактом оказалось, что подавляющее большинство из них опираются на одну и ту же идею переноса градиента из генератора плоских изображений в дифференцируемое трехмерное представление модели. Меня заинтересовал вопрос — неужели плоские изображения являются наилучшим промежуточным этапом для данной задачи и нет формата лучше, такие как облака точек или гауссианы? Мои поиски наборов данных и перспектив их массового появления я хотел бы описать в этой статье.
Прежде чем говорить о том, какие данные я ищу, нужно добавить немного мотивации. В задачах машинного обучения наборы данных можно разбить условно на те, которые получаются в результате целенаправленного сбора данных, либо те, что получаются в результате попыток обработки большого объема данных сгенерированных «в природе». «Горький урок», подтвержденный взлетом языковых и генеративных моделей для изображений, звука, голоса и видео говорит, что для общих задач в долгой перспективе большой объем легкодоступных данных оказывается более эффективным, чем сложные специализированные решения. Потому я задался вопросом, не существует ли уже и не появится ли за следующие несколько лет огромный объем данных, соответствующих следующим требованиям:
Трехмерные данные, которые можно представить в виде примитивов, таких как гауссианы или surfels. .
Анимированные сцены в этом формате, желательна непрерывность представления между кадрами.
Массово доступные, как минимум на уровне доступности цифровых камер и диктофонов в двухтысячных.
Как дополнение к предыдущему — репрезентативность, хотелось бы чтоб не было большой разницы в типах контента между фото/видео и данным форматом.
То есть пожелание состоит именно в появлении нового стандарта представления данных, наилучшим образом соответствующим для работы в трехмерном пространстве. В зависимости от перспектив появления большого набора таких данных, можно ответить на вопрос стоит ли думать о алгоритмах и методах, опирающихся на такие примитивы, или же придется смириться с тем, что плоская картинка состоящая из пикселей останется бессменным промежуточным форматом.
Тут, наверное, стоит пояснить «что не так» с картинками, из пикселей и диффузионными методами генерации. Все так, но они во многом работают, исходя из ограничений изначального формата. Так, если создание объекта в формате облака точек или пикселей представляет одинаковую сложность , задача изобразить этот же объект в сложном движении является тривиальной в трехмерном представлении, но вовсе не является таковой в случае работы с пикселями, требуя сложных неявных представлений этого объекта внутри модели. Потому можно ожидать, что при наличии большого объема данных в трехмерном формате и смены подхода, большинство головных болей о корректности перспективы и схожести двух изображений одного объекта исчезнут естественным образом.
Наборы данных «из природы».
Сразу стоит сказать про гауссианы (Gaussian Splatting). Когда мы говорим про них, так или иначе подразумевается восстановление сцены по изображениям с нескольких камер. Уже есть и методы и студии для получения таких данных даже для динамических сцен. Практически каждая студия фотограмметрии может сканировать предметы для получения сцен в виде гауссиан, потребительский софт вроде Polycam уже использует их вовсю, а Scaniverse уже геймифицирует сбор подобных сканов. Есть возможность без особой сложности собрать собственный риг для захвата видео. Так что можно быть уверенным в наличии минимального потока подобных данных. В чем так же можно быть уверенным, так это в том, что такой формат для динамических сцен останется уделом профессионалов и энтузиастов, поскольку сложно представить человека, спонтанно достающего из кармана десяток камер чтоб запечатлеть момент.
Пример набора данных Habitat
Как следствие, большинство объектов съемок, предназначенных для перевода в гауссианы — перманентно статические объекты. Интерьеры и пейзажи, предметы и так далее. Практически все такие статические наборы данных перекочевали из задач локализации и картографирования (SLAM). Особенно богатым источником являются лаборатории, занимающиеся робототехникой, вроде беспилотников и домашних роботов. Эти наборы данных, хотя и полезны и имеют высокое качество, не охватывают разнообразие реальных объектов и ситуаций.
Иммерсивное видео от Apple
Другим источником данных из «природы» является стереосъемка, представленная форматами VR180 и RGBD. Первый — формат для шлемов виртуальной реальности и представляет из себя одновременную запись с двух fisheye камер. Хотя этот формат уже доступен на платформах вроде YouTube и появляются специализированные сервисы для проигрывания этого формата вроде DeoVR, популярность его сильно ограничена популярностью как шлемов виртуальной реальности, так и камерами для съемки. Второй — формат захвата видео вместе с данными о глубине через ToF сенсоры или через проекцию инфракрасной сетки. Хотя количество телефонов с той или иной технологией замера глубины растет, телефоны от Apple являются единственными, где эта технология широко доступна и предназначена для просмотра не только в виртуальной реальности, но и на самом телефоне.
С точки зрения доступности технологии захвата, можно быть уверенным, что формат стерео видео или формат видео с каналом глубины будет являться самым распространенным. Видео и фото котяток, вашего обеда в ресторане и чего-то подобного скорее всего будет запечатлен в формате RGBD, а помятый бампер и тыква-рекордсмен имеют слабый шанс появиться в вашем телефоне в виде фотограмметрии. RGBD формат легко превращается в формат точек в пространстве. Так что заранее стоит готовиться к решению проблем и артефактов этого формата — единственного ракурса, шума в оценке глубины и необходимости дополнительного поиска соответствия точек между двумя кадрами.
Синтетические данные.
Как я уже упомянул, в форматах, совместимых с трехмерным представлением сейчас нет приблизительно половины того что первым делом запрашивают в генераторах картинок — ни котят, ни моделей десертов. Есть ли методы временно заполнить эту дыру в наборе данных?
Поскольку RGBD удобно преобразуется в облако точек, можно искать возможности дополнения существующих фото и видео информацией о глубине. Поскольку это хорошо определенная и изолированная задача компьютерного зрения, поток открытых решений для нее постоянно развивается. Только в этом году вышли готовые модели Depth Anything V2, DepthCrafter, Depth Pro и Marigold, работающие над качеством оценки глубины мелких деталей и стабильностью оценки глубины в видео. Из разочаровывающего — все эти модели решают задачу оценки глубины, но не решают задачу оценки параметров камеры — фокусного расстояния и параметров искажения линзы. Над оценкой подобных параметров работают методы, используемые для построения статичных сцен, вроде FlowMap, но единого решения для динамических сцен пока нет.
Пример работы DepthCrafter
Если говорить о едином решении, есть лаборатории, которые подходят к задаче построения трехмерных моделей от картинки к облаку точек по одной или нескольким фотографиям. Так, модель DUSt3R демонстрирует успешную попытку решить эту задачу, собрав вместе все имеющиеся наборы данных по оценке глубины и наборам фотографий статичных сцен. Удивительным является то, что модели так же хорошо работают и для сцен и объектов, которые не были представлены в данных для обучения, вроде животных и людей. Успех этого подхода позволил пойти еще дальше и привел к появлению модели MonST3R, которая применила тот же подход к динамическому видео с единой камеры со столь же блестящими результатами. Недостатком является то, что сама по себе эта модель работает с довольно малым набором точек, так что результат ее работы является скорее черновой версией, чем готовым к работе набором данных.
Демонстрация работы MonST3R
Вывод довольно оптимистичен — представления, которые появятся в ближайшем будущем можно эмулировать уже сейчас, но они будут иметь все те же ожидаемые ограничения и артефакты.
Синтетические данные из игр.
Данные из игр, как ни странно, являются замечательным источником информации. Minecraft является золотым стандартом для демонстрации работы с агентами, как и GTA V часто играющую роль симулятора вождения. Что интереснее, так это что игры могут быть источником данных, гораздо более богатых чем возможно получить в реальной жизни. К примеру, в статье Playing for Data описывается возможность для игр с deferred rendering для каждого пикселя получить индексы моделей и текстур, автоматизируя сбор данных для задач сегментации.
Непрямой процесс прорисовки в игровом движке позволяет получить практически всю истинную информацию, которую собирают для общих задач компьютерного зрения. Практически каждая такая игра для прорисовки использует следующие буферы (разбор на хабре):
Результирующее реалистичное изображение.
Расстояние от точки до камеры.
Нормали поверхности в пространстве камеры.
Свойства материала такие как зеркальность, шероховатость и другие.
Собственный цвет поверхности.
Подмена текстур на уникальный идентификатор модели и текстуры позволяет запечатлеть принадлежность пикселя объекту.
В связке с предыдущим, подмена текстуры на простой градиент позволяет уникально идентифицировать точку в кадре.
Казалось бы, собственный шейдер и захват видео позволяют собирать прекрасные наборы данных, однако тут происходит столкновение с реальностью технической сложности реализации.
Пример содержания различных графических буферов в Red Dead Redemption 2
Первым набором инструментов является система отладки и профилирования, существуют решения и промышленные, как NVIDIA Nsight, так и открытые, вроде RenderDoc. И те и другие позволяют произвести захват кадра, модификацию шейдеров и сохранение содержания буферов. Грустной новостью является то, что захват одного кадра — ресурсоемкий процесс, как для машины, так и для человека. RenderDoc позволяет автоматизировать этот процесс при помощи Python скриптов, но как опенсорсный инструмент предназначенный для отладки своих собственных программ, он имеет массу проблем с совместимостью. Так или иначе, подобные инструменты для отладки не дают возможности вести запись хоть сколько-то продолжительных последовательностей кадров.
Вторым набором инструментов являются системы вроде ReShade, они позволяют писать собственные шейдеры для модификации изображения. Такие инструменты также имеют ряд ограничений. Первое заключается в том, что они имеют все те же проблемы с совместимостью, второе — доступ к буферам в сравнении с программами отладки сильно ограничен. В самом ReShade гарантирован доступ лишь к конечному изображению и к буферу глубины.
Nvidia Remix и Special K, одинаково не попадают в цель по одной и той же причине — они классно работают с играми до DirectX9, не слишком попадающими в диапазон реалистичности, но не слишком совместимы с играми DirectX11 и новее. С изменением философии DirectX12 на более динамичную работу с буферами и набором популярности технологии рейтрейсинга, которая подобные промежуточные данные не использует вовсе можно уверенно сказать что данный источник скорее останется вовсе недоступен.
Вывод заключается в том, что богатого дешевого набора данных за пределами значений глубины без запредельных инвестиций времени скорее всего не получить, хотя можно верить что такие данные легко получить внутри компании вроде Ubisoft.
Заключение.
Довольно очевидно, что хотя гауссианы являются замечательным форматом, не стоит ожидать что появится достаточно сцен для обучения генеративных моделей в ближайшие несколько лет, особенно если говорить о динамике. Однако, можно уже сейчас можно экспериментировать с облаками точек и даже в динамике, если построить несложные процессы получения их из существующих медиа с использованием предобученных моделей и новых форматах, доступных обычным пользователям. Основные проблемы для всех источников будут одни и те же — скрытые части объектов из-за недостатка ракурсов камер и сложности с мелкими деталями.