Траектория «Нейросети» · конспект 6 из 12

Деконволюция и шахматные артефакты

О чём эта тема
Последовательное, полное изложение статьи Augustus Odena, Vincent Dumoulin и Chris Olah «Deconvolution and Checkerboard Artifacts» (Distill, 2016) на русском языке: почему транспонированная свёртка (деконволюция) склонна создавать шахматный узор артефактов на сгенерированных изображениях, и как этого избежать.
Аннотация
Статья прослеживает происхождение шахматного узора до неравномерного перекрытия окон деконволюции: когда размер ядра не делится нацело на шаг, одни точки выхода получают больше вклада, чем другие. Затем показывается, что обучение весов не устраняет проблему полностью даже при кратном шагу размере ядра, и предлагается решение — resize-свёртка (масштабирование изображения с последующей обычной свёрткой), приведённое вместе с кодом. Выводы подтверждаются экспериментами на реальных моделях — GAN и переносе стиля. В заключительной части демонстрируется, что тот же эффект возникает и в градиентах свёрточных сетей, что объясняет часть артефактов DeepDream и влияние дискриминатора GAN на генерируемые изображения.
Пререквизиты
Конспект 4: свёртка, шаг (stride), паддинг, формула размера выхода (4.2).
Мотивация
При очень пристальном рассмотрении изображений, сгенерированных нейросетями, часто видна странная шахматная картина артефактов. В одних случаях она заметнее, чем в других, но она встречается у значительной доли современных на 2016 год моделей.

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

Сгенерированное изображение с шахматными артефактами, Radford et al., 2015
Radford, et al., 2015
Сгенерированное изображение с шахматными артефактами, Salimans et al., 2016
Salimans et al., 2016
Сгенерированное изображение с шахматными артефактами, Donahue, et al., 2016
Donahue, et al., 2016
Сгенерированное изображение с шахматными артефактами, Dumoulin, et al., 2016
Dumoulin, et al., 2016

Наведите курсор на любое изображение — увеличенный фрагмент под ним покажет шахматный узор крупным планом (как на самом сайте Distill).

1. Деконволюция и перекрытие

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

Для этого нужен способ перехода от изображения меньшего разрешения к большему. Обычно для этого используют операцию деконволюции. Грубо говоря, слои деконволюции позволяют модели использовать каждую точку маленького изображения, чтобы «закрасить» ею квадрат в большем.

(У деконволюции несколько интерпретаций и разных названий, включая «транспонированную свёртку» (transposed convolution) — так же называли эту операцию в конспекте 4. В этой статье для краткости используется название «деконволюция».)

К сожалению, у деконволюции легко возникает «неравномерное перекрытие»: в одни места метафорической краски попадает больше, чем в другие. В частности, у деконволюции неравномерное перекрытие возникает тогда, когда размер ядра (размер окна на выходе) не делится нацело на шаг (расстояние между точками входа). Теоретически сеть могла бы аккуратно подобрать веса, чтобы избежать этого — этот вопрос подробнее обсуждается ниже, — но на практике нейросетям трудно избежать этого полностью.

Интерактивная диаграмма (оригинал: deconv1d, Distill 2016)

Узор перекрытия формируется и в двух измерениях. Неравномерные перекрытия по двум осям перемножаются, создавая характерный шахматный узор из чередующихся по величине значений.

Интерактивная диаграмма (оригинал: deconv2d, Distill 2016)

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

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

Интерактивная диаграмма (оригинал: deconv1d_multi, Distill 2016)

Здесь показаны два слоя деконволюции подряд: артефакты первого слоя (нижняя часть схемы) становятся входом для второго (верхняя часть) и могут накапливаться.

Деконволюция с шагом 1 — которую часто ставят последним слоем в успешных моделях (например, у Salimans et al., 2016) — довольно эффективно приглушает артефакты. Она может полностью убрать артефакты той частоты, что делит нацело её размер, и ослабить артефакты меньшей частоты. Тем не менее артефакты могут просачиваться и через такой слой, что видно во многих современных на момент написания статьи моделях.

Помимо высокочастотных шахматных артефактов, о которых шла речь выше, более ранние (по счёту от начала сети) деконволюции могут создавать и низкочастотные артефакты.

Артефакты обычно наиболее заметны там, где на выходе должен быть необычный цвет. Поскольку у слоёв нейросети обычно есть смещение (обучаемое значение, прибавляемое к выходу — конспект 1, формула (1.5)), сети легко выдать средний цвет. Чем дальше нужный цвет — например, яркий красный — от среднего, тем больше деконволюции приходится «дотягивать» до него, и тем заметнее становится неравномерность вклада.

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

2. Перекрытие и обучение

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

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

Схема: обученное ядро при неравномерном перекрытии

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

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

Схема: обученное ядро при равномерном перекрытии всё равно может давать артефакты

Полностью избежать артефактов — всё ещё существенное ограничение на фильтры, и на практике в таких моделях артефакты по-прежнему присутствуют, хотя и кажутся более мягкими (пример — Dumoulin et al., 2016, где используется деконволюция с шагом 2 и размером ядра 4).

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

Здесь, вероятно, играет роль сразу несколько факторов. Например, в случае генеративно-состязательных сетей (GAN, конспект 11) одной из причин может быть дискриминатор и его градиенты (это обсуждается дальше, в разделе 4). Но существенная часть проблемы, по-видимому, — сама деконволюция. В лучшем случае деконволюция хрупка, потому что она очень легко представляет функции, создающие артефакты, даже при тщательно подобранном размере ядра. В худшем случае создание артефактов — поведение деконволюции по умолчанию.

Есть ли другой способ увеличивать разрешение, более устойчивый к артефактам?

3. Как увеличивать разрешение лучше

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

Один подход — использовать размер ядра, кратный шагу (раздел 1), избегая проблемы перекрытия. Это эквивалентно «субпиксельной свёртке» (sub-pixel convolution) — технике, недавно показавшей успех в задачах увеличения разрешения изображений (Shi et al., 2016). Однако, хотя такой подход и помогает, деконволюции всё ещё легко скатиться к созданию артефактов (раздел 2).

Другой подход — полностью отделить увеличение разрешения от свёртки, вычисляющей признаки. Например, можно изменить размер изображения (интерполяцией ближайшим соседом или билинейной интерполяцией), а затем применить свёрточный слой. Это выглядит естественным подходом, и похожие по духу методы уже успешно применялись в увеличении разрешения изображений (например, Dong et al., 2014).

Сравнение деконволюции, resize-свёртки ближайшим соседом и resize-свёртки билинейной интерполяцией

И деконволюция, и разные варианты resize-свёртки — линейные операции, которые можно представить в виде матриц. Это помогает увидеть разницу между ними: там, где у деконволюции для каждого выходного окна свой собственный набор весов, resize-свёртка неявно связывает веса (weight-tying) таким образом, что это противодействует высокочастотным артефактам.

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

Код

В оригинальной статье слои resize-свёртки реализуются в TensorFlow через tf.image.resize_images(), с рекомендацией дополнительно применить tf.pad() перед сверткой tf.nn.conv2d(), чтобы избежать краевых артефактов. В Keras та же идея — уже знакомые по конспекту 4 слои, просто в другом порядке и без транспонированной свёртки:

from tensorflow.keras.layers import UpSampling2D, ZeroPadding2D, Conv2D

model.add(UpSampling2D(size=(2, 2), interpolation='nearest'))
model.add(ZeroPadding2D(padding=1))  # избегаем краевых артефактов перед свёрткой
model.add(Conv2D(filters=32, kernel_size=(3, 3), padding='valid', activation='relu'))

4. Результаты на реальных моделях

По опыту авторов статьи, resize ближайшим соседом с последующей свёрткой хорошо работает в самых разных контекстах.

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

Сгенерированная лодка, деконволюция в последних двух слоях Сгенерированный олень, деконволюция в последних двух слоях Сгенерированный самолёт, деконволюция в последних двух слоях Сгенерированная птица, деконволюция в последних двух слоях
Деконволюция в последних двух слоях, остальные слои — resize-свёртка. Артефакты частоты 2 и 4.
Сгенерированная лодка, деконволюция только в последнем слое Сгенерированный олень, деконволюция только в последнем слое Сгенерированный самолёт, деконволюция только в последнем слое Сгенерированная птица, деконволюция только в последнем слое
Деконволюция только в последнем слое, остальные слои — resize-свёртка. Артефакты частоты 2.
Сгенерированная лодка, только resize-свёртка Сгенерированный олень, только resize-свёртка Сгенерированный самолёт, только resize-свёртка Сгенерированная птица, только resize-свёртка
Все слои — resize-свёртка. Артефактов нет.

Более того, разница в артефактах видна ещё до начала обучения. Если посмотреть на изображения, которые генератор выдаёт со случайно инициализированными весами, артефакты уже заметны:

Случайная инициализация, деконволюция в двух слоях, вариант 1 Случайная инициализация, деконволюция в двух слоях, вариант 2 Случайная инициализация, деконволюция в одном слое, вариант 1 Случайная инициализация, деконволюция в одном слое, вариант 2

Слева направо: деконволюция в двух последних слоях и только в последнем — артефакты видны ещё до обучения (случайные веса); при resize-свёртке во всех слоях артефактов нет ни до, ни после обучения.

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

Ещё одна причина считать, что эти артефакты не специфичны для GAN — то, что они встречаются и в других видах моделей и точно так же исчезают при переходе на resize-свёртку. Например, рассмотрим перенос стиля в реальном времени (Johnson et al., 2016), где нейросеть обучают напрямую генерировать изображение в заданном художественном стиле. Авторы статьи обнаружили, что такие сети уязвимы к шахматным артефактам (особенно когда функция потерь явно им не противодействует). Однако при замене слоёв деконволюции на resize-свёртку артефакты исчезают:

Перенос стиля с использованием деконволюции — сильные шахматные артефакты
С деконволюцией. Сильные шахматные артефакты.
Перенос стиля с использованием resize-свёртки — артефактов нет
С resize-свёрткой. Шахматных артефактов нет.

(Авторы отмечают, что готовящиеся публикации команды Google Brain на момент написания статьи должны были продемонстрировать пользу этого приёма на более обстоятельных экспериментах и результатах уровня state-of-the-art.)

5. Артефакты в градиентах

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

Наличие высокочастотного «шума» в градиентах моделей для изображений уже известно в сообществе, занимающемся визуализацией признаков (feature visualization), где это серьёзная проблема: методам визуализации приходится как-то компенсировать этот шум.

Например, у DeepDream (Mordvintsev et al., 2015), похоже, есть несколько способов гасить артефакты через что-то вроде деструктивной интерференции: оптимизация сразу многих признаков одновременно, оптимизация с разными сдвигами и на разных масштабах. В частности, «дрожание» (jitter) — оптимизация при каждом шаге со случайным смещением — гасит часть шахматных артефактов.

DeepDream без сдвига (jitter) — сильные шахматные артефакты
DeepDream применяется к фиксированной позиции. Сильные артефакты.
DeepDream со случайным сдвигом (jitter) на каждом шаге — артефакты ослаблены
DeepDream применяется к разным позициям на каждом шаге. Артефакты ослаблены.

(Часть артефактов здесь — тот же привычный шахматный узор, но часть — менее упорядоченный высокочастотный узор; авторы полагают, что он вызван пулингом (max pooling, конспект 4). Связь max pooling с высокочастотными артефактами ранее отмечалась и у Hénaff & Simoncelli, 2015.)

Более поздние на момент публикации статьи работы по визуализации признаков (например, Mordvintsev, 2016) уже явно учитывают и компенсируют эти высокочастотные составляющие градиента. Возникает вопрос: не отпала ли бы необходимость в таких мерах при более удачной архитектуре сети?

Затрагивают ли эти артефакты градиента генеративно-состязательные сети? Если артефакты градиента способны влиять на изображение, оптимизируемое по градиентам сети в задаче визуализации признаков, то логично ожидать, что они повлияют и на семейство изображений, параметризуемых генератором, пока он оптимизируется дискриминатором в GAN (конспект 11).

Авторы обнаружили, что в некоторых случаях так и происходит. Когда генератор не смещён ни в пользу шахматных артефактов, ни против них, свёртки с шагом больше 1 в дискриминаторе сами могут их вызывать:

Дискриминатор со свёрткой шага 2 в первом слое, пример 1 Дискриминатор со свёрткой шага 2 в первом слое, пример 2
У дискриминатора свёртка с шагом 2 в первом слое. Сильные артефакты частоты 2.
Дискриминатор с обычной свёрткой в первом слое, пример 1 Дискриминатор с обычной свёрткой в первом слое, пример 2
У дискриминатора обычная свёртка (шаг 1) в первом слое. Артефакты очень слабые.

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

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

6. Заключение

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

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

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

Этот конспект — последовательный перевод на русский язык статьи Augustus Odena, Vincent Dumoulin, Chris Olah. Deconvolution and Checkerboard Artifacts. Distill, 2016. distill.pub/2016/deconv-checkerboard (лицензия текста и рисунков статьи — CC-BY 4.0). Интерактивные диаграммы (разделы 1 и 3) встроены из открытого исходного кода той же статьи — github.com/distillpub/post--deconv-checkerboard (лицензия кода — Apache 2.0), без изменений в логике визуализации. Код на Keras/TensorFlow в разделе 3 добавлен переводчиком и в оригинальной статье отсутствует (там приведён набросок на TensorFlow 1.x).

Контрольные вопросы