Авторы: Давид Свитов, Владислав Тюшников, Тимур Фатыхов
Эта статья предназначена для знакомства и комфортного погружения в область 3D CV. Из нее вы узнаете, что стоит за популярными аббревиатурами SfM, SLAM, NeRF — и какие задачи они решают. Мы специально опустим некоторые детали и уточнения, и расскажем про них в будущих статьях, если получим позитивный отклик.
А для начала давайте поймем, какие задачи решает 3D CV.
Это первое что приходит на ум. И если автомобили только готовятся к массовому использованию и накатывают километры тестов, то автономных роботов используют уже давно. Роботы — это различные пылесосы и газонокосилки, дроны, милые доставщики Яндекса, робособаки Boston Dynamics, манипуляторы на заводах Теслы, роборуки, станки на производстве и так далее.
И всем автономным машинам необходимо ориентироваться в пространстве: вычислять расстояние до объектов, строить 3D карты, детектировать объекты, сегментировать поверхности, а некоторым даже предсказывать поведение объектов на 3D сцене.
Позиционирование в пространстве современных VR/AR устройств основано на восприятии мира через камеры, лидары, гироскопы, акселерометры и прочие датчики.
В области дополненной реальности надо не только позиционироваться в пространстве, но и воспринимать окружение: строить трехмерную карту, находить объекты, предсказывать модель освещения, чтобы отображаемые виртуальные объекты выглядели реалистично.
Для VR также важно отслеживать руки пользователя или контроллеров. Можно даже предсказывать положение ног человека по положению головы и рук с помощью нейронных сетей, как это делает Meta.
В эту же главу можно отнести задачи, в которых нам необходимо отсканировать объект. Например, получить 3D-модель человека и затем отобразить ее в игру или в виртуальную переговорную комнату. Работая с человеком, мы скорее всего будем использовать параметрическую модель, которая накладывает ограничение на результат сканирования. Например, рука не должна расти из ноги, а голова не может повернуться на 180 градусов. Затем мы даже можем анимировать результат нашего сканирования, сделав скан полноценным игровым персонажем.
При этом даже сканирование не анимируемого объекта часто является сложной задачей. Особенно когда перед инженерами встают вопросы:
В задачах, которые мы описали выше, есть кое-что общее: везде важно строить трехмерную сцену по двумерным картинкам. Картинка может быть получена с обычной камеры, радара или лидара. В случае с радаром и лидаром значение пикселя — это расстояние, а в случае с камерой — цвет точки, спроецированной на матрицу камеры.
Чем больше сенсоров, тем проще построить “3D слепок” окружения. Самый сложный случай — когда у вас всего одна камера. С двумя уже проще, добавим лидар и сможем быстро и точно оценить расстояние до ближайших объектов, а с радаром оценим расстояние и до дальних.