Портретный режим на смартфонах Pixel позволяет вам делать профессионально выглядящие фотографии, привлекающие внимание к объекту съёмки при помощи размытия фона. В прошлом году мы описывали, как мы подсчитываем глубину, используя единственную камеру и автофокус с определением фазы (Phase-Detection Autofocus, PDAF), также известный, как автофокус с двойными пикселями. Это процесс использовал традиционный стерео-алгоритм без обучения. В этом году на Pixel 3 мы взяли на вооружение машинное обучение, чтобы улучшить оценку глубины и выдавать ещё более качественные результаты в портретном режиме.


Слева: первоначальное изображение, снятое в HDR+. Справа – сравнение результатов съёмки в портретном режиме с использованием глубины от традиционного стерео и от машинного обучения. У результатов работы с обучением получается меньше ошибок. У традиционного результата со стерео глубина многих горизонтальных линий за мужчиной неправильно оценивается равной глубине самого мужчины, в результате чего они остаются резкими.

Краткий экскурс в предыдущий материал


В прошлом году мы описывали, что портретный режим использует нейросеть для разделения пикселей, принадлежащих изображениям людей и изображению фона, и дополняет эту двухуровневую маску информацией о глубине, полученной из PDAF-пикселей. Всё это делалось для получения размытия, зависящего от глубины, близкого к тому, что может дать профессиональная камера.

Для работы PDAF делает два слегка различных снимка сцены. Переключаясь между снимками, можно увидеть, что человек не двигается, а фон сдвигается по горизонтали – этот эффект называют параллаксом. Поскольку параллакс – это функция от расстояния точки от камеры и от расстояния между двумя точками зрения, глубину мы можем определить, сопоставив каждую точку в одном снимке с соответствующей ей точкой в другом.


Изображения PDAF слева и в середине выглядят схожими, но справа в увеличенном фрагменте можно заметить параллакс. Легче всего его заметить по круглой структуре в центре увеличения.

Однако поиск таких соответствий в изображениях PDAF (этот метод называется глубиной из стерео) — чрезвычайно тяжёлая задача, поскольку точки между фотографиями сдвигаются очень слабо. Более того, все технологии, использующие стерео, страдают от проблемы апертуры. Если смотреть на сцену через малую апертуру, невозможно будет найти соответствие точек для линий, параллельных базовой линии стерео, то есть, линии, соединяющей две камеры. Иначе говоря, изучая на представленном фото горизонтальные линии (или вертикальные линии в снимках с портретной ориентацией) все сдвиги в одном изображении относительно другого выглядят примерно одинаково. В прошлогоднем портретном режиме все эти факторы могли привести к ошибкам в определении глубины и к появлению неприятных артефактов.

Улучшая оценку глубины


С портретным режимом у Pixel 3 мы исправляем эти ошибки, используя тот факт, что параллакс из стереофотографий – лишь одна из многих подсказок, присутствующих в изображениях. К примеру, точки, находящиеся далеко от плоскости фокусировки, кажутся менее резкими, и это будет подсказка от расфокусированной глубины. Кроме того, даже при просмотре изображения на плоском экране мы легко можем оценить расстояние до предметов, поскольку нам известен примерный размер повседневных объектов (то есть, можно использовать количество пикселей, изображающих лицо человека, чтобы оценить, насколько далеко он находится). Это будет семантическая подсказка.

Вручную разработать алгоритм, комбинирующий эти подсказки, чрезвычайно тяжело, но используя МО, мы можем это сделать, одновременно улучшая работу подсказок от параллакса PDAF. Конкретно, мы тренируем свёрточную нейронную сеть, написанную на TensorFlow, принимающую на вход пиксели от PDAF, и обучающуюся предсказывать глубину. Этот новый, улучшенный метод оценки глубины на базе МО и используется в портретном режиме Pixel 3.


Наша свёрточная нейросеть принимает на вход PDAF-изображения и выдаёт карту глубины. Сеть использует архитектуру в стиле кодировщик-декодировщик с дополнительными связями внутри слоя [skip connections] и остаточными блоками [residual blocks].

Тренировка нейросети


Чтобы натренировать сеть, нам нужно множество PDAF-изображений и соответствующие карты глубины высокого качества. А поскольку нам нужно, чтобы предсказания глубины оказались полезными в портретном режиме, нам нужно, чтобы тренировочные данные были похожи на фото, которые пользователи делают со смартфонов.

Для этого мы сконструировали специальное устройство «Франкенфон», в котором объединили пять телефонов Pixel 3 и наладили между ними WiFi связь, что позволяло одновременно делать фотографии со всех телефонов (с разницей не более 2 мс). С этим устройством мы рассчитывали высококачественные карты глубины на базе фотографий, используя как движение, так и стерео с нескольких точек зрения.


Слева: устройство для сбора тренировочных данных. В середине: пример переключения между пятью фотографиями. Синхронизация камер гарантирует возможность подсчёта глубины в динамических сценах. Справа: Итоговая глубина. Точки с низкой достоверностью, где сопоставление пикселей на разных фотографиях было неуверенным из-за слабости текстур, окрашены чёрным, и не используются в тренировке.

Полученные при помощи этого устройства данные оказались идеальными для тренировки сети по следующим причинам:

  • Пять точек зрения гарантируют наличие параллакса в нескольких направлениях, что избавляет нас от проблемы апертуры.
  • Расположение камер гарантирует, что любая точка изображения повторяется как минимум на двух фотографиях, что уменьшает количество точек, которым нельзя подобрать соответствие.
  • Базовая линия, то есть расстояние между камерами, больше, чем у PDAF, что гарантирует более точную оценку глубины.
  • Синхронизация камер гарантирует возможность подсчёта глубины в динамических сценах.
  • Портативность устройства гарантирует возможность съёмки фотографий на природе, симулирующих фотографии, которые пользователи делают при помощи смартфонов.

Однако, несмотря на идеальность данных, полученных при помощи этого устройства, предсказывать абсолютную глубину объектов сцены всё ещё чрезвычайно сложно – любая заданная PDAF-пара может соответствовать разнообразным картам глубины (всё зависит от характеристик линз, фокусного расстояния и т.п.). Чтобы учесть всё это, мы оцениваем относительную глубину объектов сцены, чего хватает для получения удовлетворительных результатов в портретном режиме.

Совмещаем всё это


Оценка глубины при помощи МО на Pixel 3 должна работать быстро, чтобы пользователям не приходилось слишком долго ждать результатов снимков в портретном режиме. Однако для получения хороших оценок глубины, использующих небольшие расфокусировку и параллакс, приходится скармливать нейросети фотографии в полном разрешении. Чтобы гарантировать быстрое получение результатов, мы используем TensorFlow Lite, кроссплатформенное решение для запуска МО-моделей на мобильных и встроенных устройствах, а также мощный GPU Pixel 3, что позволяет быстро рассчитывать глубину на необычно больших входных данных. Затем мы комбинируем полученные оценки глубины с масками от нашей нейросети, выделяющей людей, чтобы получить красивейшие результаты съёмки в портретном режиме.

Попробуйте сами


В приложении Google Camera App версий 6.1 и выше наши карты глубины встроены в изображения портретного режима. Это значит, что мы можете использовать редактор глубины Google Photos для изменения степени размытия и точки фокусировки после того, как уже сделали снимок. Вы также можете использовать сторонние программы для извлечения карт глубины из jpeg, и изучать их самостоятельно. Также по ссылке вы можете взять альбом, демонстрирующий относительные карты глубины и соответствующие изображения в портретном режиме, для сравнения традиционного стерео и МО-подхода.

Комментарии (15)


  1. nckma
    19.12.2018 10:36
    +2

    Я так понял, то, что раньше делалось с помощью простой диафрагмы (глубина резкости), теперь будет делаться с помощью ПО? А зачем?


    1. tumbler
      19.12.2018 10:46
      +2

      Для того чтобы получить это с помощью простой диафрагмы, ее размер должен быть как у полноформатных камер, с соответствующим расстоянием до матрицы. В телефоне это недостижимо.


      1. achekalin
        20.12.2018 13:11

        Переводя на русский: все, что говорят в рекламе «на телефоне вы получите качество съемки профессиональных камер» разбивается (никто и не сомневался!) о законы физики. Это относится и к размеру элементов матрицы, и к диафрагме, и к разрежающей способности телефонной «оптики».

        Причем, что особенно пугает неграмотных маркетологов, даже если написать на телефоне «Цейс» или «Лейка», снимок не получается даже близким к тому, что получается обычной камерой Leica.


  1. ProLimit
    19.12.2018 12:26
    +1

    В старой версии приложения «Камера» была функция, когда пользователь сам сдвигал телефон на большое расстояние для получения стереопары. Работала отлично на любом смартфоне, размывала достаточно хорошо, так как качество карты глубин было высокое из-за большого паралакса. Но зачем-то ее выпилили. Видимо, иначе не продать смартфон с двумя камерами. И спустя 5 лет, оказалось что две камеры дают плохую стереопару, внедряем новый софтовый алгоритм. Нельзя ли просто старый режим вернуть?


    1. korobkov-k
      19.12.2018 17:59

      Учитывая, что не все объекты статичны, особенно люди на портретах — как оно будет работать? Нет ли артефактов на снимках? Все-таки две камеры делают снимок одновременно.


      1. ProLimit
        20.12.2018 10:50

        Именно на портретах и селфи люди статичны. Понятно, что этот метод не идеален. Но даже если предмет движется в кадре, артефакты не будут ужасными, ведь страдает только карта глубин. Если добавить нейросеть, то можно будет достраивать области, где было движение и она не определена.


  1. betrachtung
    19.12.2018 15:55

    Ох, зря вообще они эту имитацию придумали. Не, примеры смотрятся неплохо, а реальных пользовательских фотографий я с пикселей особо и не видел, зверь в наших краях редкий. Но даже на фотках с айфонов искуственность размытия заметна невооружённым взглядом, я уж молчу о всяких китайцах.


    1. memtew
      19.12.2018 17:43

      Не читал, но осуждаю?


    1. 2Dzot
      20.12.2018 12:44

      Через пару лет допилят, будет во всех профессиональных фотоаппаратах. Крупные матрицы вымрут из-за ненадобности


    1. any2key
      20.12.2018 12:44
      -1

      «На всяких китайцах» камера на порядок лучше по всем характеристикам, чем у айфона. Я про huawei p20 pro.


  1. sinotix
    19.12.2018 18:48

    Могу ошибаться, но что-то мне подсказывает, что 99% результата достигается скорее за счет нейросети, обученной на большом объеме «обычных» пользовательский данных (портреты), и PDAF тут вообще ни при чем.
    И, полагаю, входная картинка может быть самая обычная…
    А вот снять какую-нибудь сетку-рабицу на фоне леса — будет уже проблематично. Но опять же, нужно знать целевую аудиторию и ее пожелания.



  1. anthonio
    20.12.2018 04:42

    Когда ожидать в продаже «Франкенфон»? :)


  1. Gryphon88
    21.12.2018 17:53
    +1

    Почитал про PDAF, ничего не понял, кроме того, что используется специальная матрица с «полупикселями». Вопрос: что именно детектируется и почему оно вообще должно работать? По ссылке в статье это не ясно.