Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
анализ нейронных сетей.docx
Скачиваний:
11
Добавлен:
21.07.2024
Размер:
3.09 Mб
Скачать

Нейронные сети для ускорения алгоритмов графики

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

В 2019 году на конференции «Онтико», Deep Learning инженер в компании NVIDIA, Евгений Туманов, представил доклад, в котором рассказал об использовании нейронных сетей внутри компании. В качестве примера была представлена задача рендеринга облаков в трёхмерном пространстве. Задача состояла в том, чтобы нарисовать физически корректное облако, которое представлено, как плотность капель жидкости. На облако не получится просто наложить текстуру и отрендерить, потому что капли сложно геометрически расположены в 3D-пространстве.

Классическое решение

Облако – сложный объект и его рендеринг классическим алгоритмом требует очень много времени. В зависимости от входных параметров, процесс может занимать часы и даже дни.

Классический путь решения предполагает решение такого сложного уравнения:

Физический смысл его таков:

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

Рассмотрим отрезок внутри облака на луче - точки входа до точки выхода. Интегрирование ведется как раз по этому отрезку, и для каждой точки на нем мы считаем, так называемый, Indirect light energy L(x, ω) — смысл интеграла - опосредованное освещение в точке. Оно появляется за счет того, что капли по-разному пере отражают солнечный свет. Соответственно, в точку приходит огромное количество опосредованных лучей от окружающих капелек. - это интеграл по сфере, которая окружает точку на луче. В классическом алгоритме его считают с помощью метода Монте-Карло.

Способ решения с помощью нейронных сетей

Из главной идеи и описания классического алгоритма следует рецепт, как применить нейронные сети к этой задаче. Самое тяжелое — посчитать Монте-Карло оценку. Она дает число, которое означает опосредованное освещение в точке, и это именно то, что мы хотим предсказывать.

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

Для обучения были сгенерированы 100 разных облаков с разной топологией, их просто рендерили, применяя классический алгоритм и записывая, что алгоритм получает в той самой точке, где он осуществляет интегрирование методом Монте-Карло. Таким образом, был получен dataset на котором можно обучаться.

Для решения, NVIDIA использовали следующую архитектуру:

Для каждой точки есть 10 тензоров, каждый из которых посчитан на все более масштабной сетке. Каждый из этих тензоров попадает в соответствующий блок. Сначала в первый обычный fully connected слой. После выхода из первого fully connected слоя — во второй fully connected слой, у которого нет активации. Fully connected слой без активации — это просто перемножение на матрицу. К результату перемножения на матрицу добавляем выход с предыдущего residual-блока, и только потом применяем активацию.

По итогу NVIDIA получили намного более быстрый вызов нейронной сети по сравнению с оценкой методом Монте-Карло. Но есть еще одно наблюдение по результатам обучения — это сходимость по количеству сэмплов.

При рендеринге, картинка нарезается на маленькие тайлы — квадратики из пикселей, допустим, 16*16. Рассмотрим один тайл изображения без ограничения общности. Когда этот тайл рендерится, на каждый пиксель из камеры выпускается много лучей, соответствующих одному пикселю, и добавляем немного маленького шума к лучам, чтобы они были чуть-чуть разные. Эти лучи называются антиалиасинговыми и изобретены, чтобы понизить шум в итоговом изображении.

Еще есть сэмплы, которые соответствуют соединению с источниками света. Они появляются, когда соединяется точка с источником света, например, с солнцем. Это сделать легко, потому что солнце — это лучи падающие на землю параллельно друг другу. Например, небо, как источник света, гораздо сложнее, потому что представляется в виде бесконечно удаленной сферы, у которой есть функция цвета по направлению. Если вектор смотрит прямо вертикально в небо, то цвет — синий. Чем ниже — тем светлее. Внизу сферы обычно нейтральный цвет, имитирующий землю: зеленый, коричневый.

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

Главный результат, который хотели получить NVIDIA — это повышение скорости рендеринга. Для конкретного облака в конкретном разрешении с параметрами сэмплов видим, что картинки, полученные за счет сети и классического метода практически идентичны, но правую картинку получаем в 800 раз быстрее.

Выводы

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

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