Нейронное суперсэмплирование при рендеринге в реальном времени

Автор оригинала: Lei Xiao
  • Перевод
image

Рендеринг в реальном времени для виртуальной реальности создаёт уникальный спектр задач, и основными из них являются необходимость поддержки фотореалистичных эффектов, достижение высоких разрешений и увеличение частоты обновления. Для решения этих задач исследователи Facebook Reality Labs разработали DeepFocus — систему рендеринга, представленную нами в декабре 2018 года; она использует ИИ для создания сверхреалистичной графики в устройствах с переменным фокусным расстоянием. В этом году на виртуальной Конференции SIGGRAPH мы представили дальнейшее развитие этой работы, открывающее новый этап на нашем пути к созданию будущих дисплеев высокой чёткости для VR.

В нашей технической статье для SIGGRAPH под названием "Нейронное суперсэмплирование для рендеринга в реальном времени" представлено решение на основе машинного обучения, преобразующее входящие изображения низкого разрешения в изображения высокого разрешения для рендеринга в реальном времени. Такой процесс апсэмплинга (upsampling) использует нейронные сети, обучаемые на статистике сцены, для восстановления точных деталей, позволяя при этом снизить вычислительные затраты на рендеринг этих деталей в приложениях реального времени.

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


Анимация для сравнения отрендеренного цветного изображения с низким разрешением и выходного изображения с суперсэмплированием в 16 раз, созданным новым методом нейронного суперсэмплирования.

Чему посвящено это исследование?


Для снижения затрат на рендеринг на дисплеях высокого разрешения наш метод получает входящее изображение, в котором в 16 раз меньше пикселей, чем в нужном выходном изображении. Например, если целевой дисплей имеет разрешение 3840×2160, то наша сеть начинает с входящего изображения размером 960×540, отрендернного игровыми движками, а потом выполняет его апсэмплинг до разрешения целевого дисплея в процессе постобработки в реальном времени.

Хотя уже был проведён огромный объём исследований по апсэмплингу фотографических изображений на основе обучения, все эти работы не касались непосредственно уникальных потребностей такого отрендеренного контента, как изображения, создаваемые движками видеоигр. Так случилось потому, что существуют фундаментальные отличия в формировании изображения между отрендеренными и фотографическими изображениями. При рендеринге в реальном времени каждый сэмпл — это точка как в пространстве, так и во времени. Именно поэтому отрендеренный контент обычно имеет сильные искажения, создаёт зазубренные линии и другие артефакты сэмплирования, которые видны в примерах изображений с низким разрешением в этом посте. Из-за этого апсэмплинг отрендеренного контента становится задачей и сглаживания (антиалиасинга), и интерполирования, а не задачей устранения шумов и размытия, которая хорошо изучена специалистами по машинному зрению. То, что входящие изображения сильно искажены и что информация для интерполирования в пикселях совершенно отсутствует, создаёт значительные сложности в построении высокоточной реконструкции отрендеренного контента с временной целостностью.


Пример атрибутов рендеринга, используемых в качестве входящих данных для метода нейронного суперсэмплирования (векторы цвета, глубины и плотные векторы движения), отрендеренные с низким разрешением.

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

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

Принимая решение, наша нейронная сеть получает в качестве входящих данных атрибуты рендеринга (цвет, карта глубин и плотные векторы движения каждого кадра) и текущего, и нескольких предыдущих кадров, отрендеренных с низким разрешением. Выходящими данными сети становится цветное изображение высокого разрешения, соответствующее текущему кадру. Сеть использует обучение с учителем (supervised learning). Во время обучения с каждым входящим кадром низкого разрешения сопоставляется опорное изображение высокого разрешения с методами сглаживания, которое является целевым изображением для оптимизации обучения.


Примеры результатов. Сверху вниз показаны отрендеренные входящие цветовые данные в низком разрешении, результат суперсэмплинга в 16 раз, выполненного предлагаемым методом, и целевое изображение высокого разрешения, отрендеренное не в реальном времени.



Примеры результатов. Сверху вниз показаны отрендеренные входящие цветовые данные в низком разрешении, результат суперсэмплинга в 16 раз, выполненного предлагаемым методом, и целевое изображение высокого разрешения, отрендеренное не в реальном времени.



Примеры результатов. Слева направо показаны отрендеренные входящие цветовые данные в низком разрешении, результат суперсэмплинга в 16 раз, выполненного предлагаемым методом, и целевое изображение высокого разрешения, отрендеренное не в реальном времени.

Что дальше?


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

Полная техническая статья: Neural Supersampling for Real-time Rendering, Lei Xiao, Salah Nouri, Matt Chapman, Alexander Fix, Douglas Lanman, Anton Kaplanyan, ACM SIGGRAPH 2020.

См. также:

Комментарии 22

    +3
    Звучит круто. Но откуда она додумывает мелкие детали, которых просто нет на картинке низкого разрешения? В примерах это крючки вешалок в магазине или непонятные шевроны на чердаке домика слева, которые либо неразличимы, либо их вообще нет на исходной картинке.
      +2
      Тоже об этом подумал. Больше похоже на самообман. Мол, нейросети неким волшебным образом, за счёт обучения на куче материала «додумают» недостающие детали. Но в реальности мы сталкиваемся именно с тем, что пытаемся получить информацию «из ниоткуда». До тех пор пока шаблоны в сети будут подходящими картинка будет приемлемой, но когда возникнет артефакт избавиться от него будет невозможно. Ну или избавление в одном месте будет порождать артефакты в другом.
        +2

        Чёртов мобильный хабр — попытался прокрутить страницу наверх до статьи, а она решила обновиться и стёрла комментарий.


        В общем, смысл такого рода нейросеток в том, что им на вход подаются не только картинка 640×480, но и полноценные текстуры из памяти видеокарты, положение моделек в сцене (чтобы разделять грани смежных объектов), materialId и прочая. По сути — перекладывание работы с блоков растеризации на тензорные ядра.


        Но хотелось бы видеть не только картинки "before/after/target", но и попиксельную разницу между "after" и "target" через вычитание.
        Впрочем, надо оригинал почитать, может, я что-то неправильно понял.

          0
          Это решение получше, но всё равно не может быть безупречным. Если абстрагироваться от магии нейросетей, то по сути у нас хитрозапутанное сопоставление с образцом и последующей заменой. Типа, если такой входной набор данных — подставлять такие пиксели, если другой — другие. Однако из-за того, что у нас картинка низкого разрешения не удастся избежать коллизий.
            0

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


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

              0
              Тут нет ничего не возможного, если в нейросеть впихнуть достаточно данных. Для одной картинки. Проблема в том, что мы видели как нейросети апскейлят и раскрашивают старые фильмы. Результат может быть хорош, но заметные артефакты проскакивают регулярно и все проекты улучшения фильмов используют ручную доводку. Подозреваю, что это неустранимый недостаток для простых нейросетей (не полноценного ИИ).
            +1
            А смысл замещать работу блоков растеризации? РОПов на любой видеокарте и так «кот наплакал» в сравнении с числом и площадью других блоков.
        +7
        Какая-то брехня. Как он шрифт на стене дорисовал из такой каши пикселей?image
          0
          Ну так это нейросеть. В неё напихали кучу ракурсов высококачественной картинки и она теперь знает чему соответствует эта каша.
            +2
            Так в том и дело, что в ролике этого места в высоком разрешении нет.
              0

              А в обучающей выборке — есть.

            +6
            At inference time, our neural network takes as input the rendering attributes (color, depth map and dense motion vectors per frame) of both current and multiple previous frames, rendered at a low resolution. The output of the network is a high-resolution color image corresponding to the current frame. The network is trained with supervised learning. At training time, a reference image that is rendered at the high resolution with anti-aliasing methods, paired with each low-resolution input frame, is provided as the target image for training optimization.


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


              Вот откуда. С таким же успехом можно было просто пронумеровать кадры и сопоставить картинку высокого разрешения с номером.
                0
                Ну я же цитату из оригинального поста привел не случайно. Там с каждым выходным (в большом разрешении) сопоставляются серия кадров в малом разрешении и еще доп атрибуты моделей (цвета, глубина и векторы движения). Так что переводчик очень сильно все упростил.
                0
                При всем уважении — не утверждают они такого в цитируемом тексте. Только то, что на вход сети подают помимо картинки низкого разрешения и предыдущих кадров (что нужно для обеспечения стабильности и плавности работы с видеопотоком) еще другую информацию, которую можно вытащить из движка.
                –1

                Нейросеть видела что там написано на этапе обучения и по памяти восстановила, я так понял. Тоже обратил внимание на этот текст. Вот если бы текст был динамическим т.е. менялся каждый раз (допустим это часть головоломки в квесте), интересно как в таком случае она справилась?

                  0

                  Нейросеть-это когда персонажу глаз на ж@пе нарисовали, потому что там складка ткани очень похожая. а тут слишком все чистенько.

                    0
                    Это генеративные таким балуются. Тут другое.
                  +1
                  Напоминает DLSS от Nvidia где обучали модели по игре, но в DLSS2 они утверждают что одна модель может апсемплить даже ранее неизвестные игры.
                    0
                    Решение очень красивое и открывающее перспективы. Иной взгляд на проблему. Действительно, возможно в каких-то случаях вероятно будет эффективнее дорисовывать кадр нейросетью.
                      +1

                      Единственный вопрос насколько метод в этой статье отличается/способен конкурировать с Nvidia DLSS2, который уже в продакшене.

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое