Сверточная нейронная сеть «потерялась», CoordConv, чтобы заполнить дыру

Нейронные сети контрольная работа игра Uber

Из Uber, Розанна Лю и др., составлено Heart of the Machine.

Сверточные нейронные сети обладают отличными свойствами, такими как распределение веса, локальные связи и трансляционная изменчивость, что делает их чрезвычайно успешными в различных задачах зрения. Однако в задачах, связанных с координатным моделированием (таких как обнаружение объектов, генерация изображений и т. д.), его преимущества превратились в недостатки и потенциально влияют на конечную производительность модели. В этом исследовании Uber выявил, что суть проблемы заключается в трансляционной эквивариантности свертки, и соответственно предложил соответствующее решение CoordConv. CoordConv решает проблему преобразования координат, имеет лучшую способность к обобщению, в 150 раз более высокую скорость обучения, в 10-100 раз меньше параметров, чем свертка, и может значительно повысить производительность различных задач зрения.

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

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

Однако оказывается, что сверточные нейронные сети также испытывают трудности с некоторыми небольшими и простыми задачами. В нашей статье «Интригующий сбой сверточных нейронных сетей и решение CoordConv» раскрывается и анализируется производительность сверточных нейронных сетей при преобразовании двух пространственных представлений: декартовых пространственных координат (i, j) и пространственных координат с одним горячим пикселем. Общие дефекты. Результаты удивительны, потому что задача кажется такой простой, но ее важность необычайна, потому что для решения многих общих задач (таких как обнаружение объектов на изображениях, обучение генерирующих моделей изображений, обучение агентов обучения с подкреплением из пикселей и т. д.) требуется использовать этот тип преобразования координат. Оказывается, эти задачи могли страдать от недостатков свертки, и мы демонстрируем прирост производительности по всем направлениям при использовании ранее предложенного слоя под названием CoordConv в качестве решения.

Резюмируем наши выводы в следующем видео:


Первый вывод: контролируемый рендеринг не так прост для CNN.

Давайте представим себе простую задачу — контролируемый рендеринг, в котором мы даем позицию (i, j) в качестве входных данных для сети, которая генерирует изображение 64x64 и рисует квадрат в определенной позиции, такой как Как показано на рисунке 1a, какой тип сети вы бы использовали для выполнения этой задачи?

Мы могли бы нарисовать этот квадрат, используя несколько слоев деконволюции (транспонированной свертки), используя подход, используемый во многих исследовательских работах по созданию изображений. Чтобы проверить эту идею, мы создали набор данных, состоящий из нескольких случайно расположенных квадратов 9x9 и холста 64x64, как показано на рисунке 1b. Исчерпание всех возможных полностью видимых квадратов дает набор данных из 3136 выборок. Для оценки обобщающей способности модели определяем два обучающих/тестовых сплита: один — равномерный, то есть все возможные центральные области случайным образом делятся на обучающую и тестовую выборки с соотношением 8:2, — сегментация по квадрантам, т. е. холст делится на четыре квадранта: маленькие квадраты, сосредоточенные в первых трех квадрантах, помещаются в обучающую выборку, а маленькие квадратики в последнем квадранте помещаются в тестовую выборку. Распределение двух методов сегментации набора данных показано на рисунке 1c ниже:

Рисунок 1. (a) Задача контролируемого рендеринга требует, чтобы сеть рисовала квадраты на основе их (i, j) позиций. (b) Например, точки данных и (c) показать визуализации, разделяющие обучающие и тестовые наборы по униформе или квадранту.


Мы могли бы подумать, что CNN легко справятся с этой задачей, потому что, во-первых, задача настолько проста (весь набор данных может быть сгенерирован всего двумя строками кода Python, как показано в нашей статье), а во-вторых, этот набор данных настолько прост. слишком маленький, мы можем легко использовать чрезмерно параметризованные модели. Но результаты показывают, что производительность CNN сногсшибательна. Даже модели с параметрами до 1 млн и временем обучения более 90 минут (рис. 2b) не смогли получить IOU выше 0,83 на равномерно разделенном тестовом наборе или 0,36 на квадрантном разделении (рис. 2a).

Рисунок 2: (a) Результаты IoU для обучения и тестирования задач контролируемого рендеринга при однородной и квадрантной сегментации. Ни одна модель не может достичь IOU 1,0, и (b) требуется 90 минут, чтобы обучить одну из лучших моделей для достижения IOU 0,8.


Упрощенная задача и второй вывод: CNN изо всех сил пытаются решить контролируемую классификацию координат

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

Теперь мы можем сузить проблему, чтобы выяснить, какие факторы вызывают проблему. Теперь мы просим сеть сгенерировать простой пиксель вместо пикселя 9×9. Фактически, учитывая метод решения однопиксельной задачи, мы можем далее использовать транспонированную свертку для расширения этого одного пикселя до квадрата с большим количеством пикселей, эта интуитивная идея также подтверждается нашими экспериментами. Поэтому мы поставили задачу классификации координат под наблюдением (рис. 3а), где набор данных состоит из пар осей (i, j) и изображений с одним активационным пикселем, как показано на рис. 3б ниже:

Рисунок 3: (a) Классификация осей под наблюдением требует, чтобы сеть генерировала один пиксель с заданной позицией (i, j). (b) показывает выборочные точки данных, (c) показывает визуализацию разделенного поезда и тестовых наборов.


Мы обучили очень большое количество сетей с разными гиперпараметрами и заметили, что, хотя некоторые сети могли запомнить тренировочный набор, их точность теста никогда не превышала 86% (рис. 4а). Для достижения такой точности потребовалось больше часа тренировок.

Рисунок 4: (a) Обучение и проверка точности в задаче классификации координат под наблюдением с использованием равномерного и квадрантного разделения для обучающих и тестовых наборов. В то время как некоторые модели запоминали тренировочный набор, они были точны только до 86% на тестовом наборе с использованием простого равномерного разделения. Это означает, что свертка не может быть обобщена на этот случай даже с одним пикселем. (b) Обучение такой сети для достижения точности 86% заняло более часа.


Мы ожидаем, что свертка отлично справится с этим, но это не так. Чтобы выяснить, что делает сверточная сеть, мы берем наиболее обученную сеть и проверяем ее предсказания.

Мы просим сеть сгенерировать изображение только с одним пикселем, местоположение сгенерировано одним горячим способом. Чтобы точно увидеть, что делает сеть, мы можем увеличить небольшую область вокруг целевого пикселя. На рисунке 5 целевые пиксели отмечены красным, и мы показываем результаты модели с активацией SoftMax и прямым использованием логитов в качестве прогнозов. Первый пиксель (верхний ряд) — это результат в тренировочном наборе, как и ожидалось, модель имеет относительно правильные прогнозы, хотя все еще есть некоторые вероятности за пределами целевого пикселя. Следующий пиксель (центральный ряд справа) также является правильным в тестовом наборе, но поскольку окружающие пиксели объекта охватывают аналогичные вероятности, модель является правильной лишь незначительно. И последний пиксель (справа внизу) вообще неправильный. Это довольно удивительно, потому что почти все тестовые пиксели окружают тренировочные пиксели в результате разделения 80/20.

Рисунок 5: Прогнозы модели для меньшего количества соседних пикселей. Сеть переобучается, то есть точность обучения идеальна, а точность теста самая высокая на уровне 86%. Это удивительно, потому что почти все тестовые пиксели окружены тренировочными пикселями. Кроме того, сети трудно соответствовать обучающему набору, поскольку существуют значительные вероятности для пикселей, отличных от целевого пикселя.


Обратная задача и третий вывод: контролируемая регрессия также сложна для CNN

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

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

В заключение, тип задачи не имеет значения.

Казалось бы, простая задача переноса координат демонстрирует проблемы свертки на двух типах задач: из декартова (i, j) пространства в пространство с одним горячим пикселем и наоборот, из пространства с одним горячим пикселем в декартово пространство. Даже при обучении с учителем, когда отрисовывается только один пиксель, свертка по-прежнему не может изучить гладкую функцию между декартовым пространством и пространством пикселей, когда все обучающие выборки окружают тестовые выборки. Кроме того, самые эффективные сверточные модели имеют большой размер, в лучшем случае едва работают, и их обучение требует много времени.


Решение: КоординатКонв

Оказывается, есть простое решение этой проблемы.

Свертка является эквивариантной, то есть она не знает, где находится каждый фильтр, когда она применяется к входным данным для получения выходных данных. Мы можем помочь свертке, сообщив фильтру, где он находится. Для этого добавим на вход два канала — один для координаты i, а другой для координаты j. Назовем получившийся слой CoordConv, как показано на следующем рисунке:

Рисунок 6: Сравнение сверточных слоев и CoordConv. Слой CoordConv принимает в качестве входных данных дополнительные каналы с информацией о координатах, здесь координаты i и j.


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

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

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

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

from tensorflow.python.layers import base
import tensorflow as tf


class AddCoords(base.Layer):
    """Add coords to a tensor"""
    def __init__(self, x_dim=64, y_dim=64, with_r=False):
        super(AddCoords, self).__init__()
        self.x_dim = x_dim
        self.y_dim = y_dim
        self.with_r = with_r


    def call(self, input_tensor):
    """
    input_tensor: (batch, x_dim, y_dim, c)
    """
    batch_size_tensor = tf.shape(input_tensor)[0]
    xx_ones = tf.ones([batch_size_tensor, self.x_dim], dtype=tf.int32)
    xx_ones = tf.expand_dims(xx_ones, -1)

    xx_range = tf.tile(tf.expand_dims(tf.range(self.x_dim), 0), [batch_size_tensor, 1])
    xx_range = tf.expand_dims(xx_range, 1)

    xx_channel = tf.matmul(xx_ones, xx_range)
    xx_channel = tf.expand_dims(xx_channel, -1)

    yy_ones = tf.ones([batch_size_tensor, self.y_dim], dtype=tf.int32)
    yy_ones = tf.expand_dims(yy_ones, 1)

    yy_range = tf.tile(tf.expand_dims(tf.range(self.y_dim), 0), [batch_size_tensor, 1])
    yy_range = tf.expand_dims(yy_range, -1)

    yy_channel = tf.matmul(yy_range, yy_ones)
    yy_channel = tf.expand_dims(yy_channel, -1)
    xx_channel = tf.cast(xx_channel, ’float32’) / (self.x_dim - 1)
    yy_channel = tf.cast(yy_channel, ’float32’) / (self.y_dim - 1)
    xx_channel = xx_channel*2 - 1
    yy_channel = yy_channel*2 - 1

    ret = tf.concat([input_tensor, xx_channel, yy_channel], axis=-1)

    if self.with_r:
        rr = tf.sqrt( tf.square(xx_channel-0.5) + tf.square(yy_channel-0.5))
        ret = tf.concat([ret, rr], axis=-1)
    return ret


class CoordConv(base.Layer):
    """CoordConv layer as in the paper."""
    def __init__(self, x_dim, y_dim, with_r, *args, **kwargs):
        super(CoordConv, self).__init__()
        self.addcoords = AddCoords(x_dim=x_dim, y_dim=y_dim, with_r=with_r)
        self.conv = tf.layers.Conv2D(*args, **kwargs)

    def call(self, input_tensor):
    ret = self.addcoords(input_tensor)
    ret = self.conv(ret)
    return ret


CoordConv решает предыдущую задачу контроля

Сначала мы просматриваем предыдущие задачи, а затем смотрим, как работает CoordConv.

Как показано на рисунках 7 и 8, модель CoordConv имеет отличные характеристики обучения и тестирования как для разделения обучения/тестирования для контролируемой классификации координат, так и для задач контролируемого рендеринга. Кроме того, модель CoordConv имеет 1/100 - 1/10 количества параметров самой эффективной стандартной CNN, а время обучения составляет всего несколько секунд, что в 150 раз быстрее, чем у последней (время обучения стандартной CNN занимает больше времени). чем час).

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

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


Для дополнительной проверки на рис. 9 показана производительность простой деконволюции по сравнению с CoordConv при рисовании смежных пикселей.

Рис. 9. Как показано ранее, деконволюция плохо работает в задаче классификации координат под наблюдением, в то время как CoordConv достигает 100% точности обучения и тестирования. Решение также намного проще визуально.


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


Рисунок 10. Сверткам сложно моделировать задачи регрессии с учителем, в то время как CoordConv справляется с задачей.


CoordConv может помочь в нескольких областях

Пока что Uber показал неспособность сверточных сетей решить определенный класс простых задач и предложил исправление в виде слоев CoordConv. Естественно, возникает вопрос: неужели этот недостаток существует только в этой простой задаче? Или это основная проблема, скрывающаяся в других задачах и мешающая оптимизации производительности? Чтобы ответить на этот вопрос, Uber встраивает слои CoordConv в сетевые архитектуры, подготовленные для выполнения нескольких задач. Ниже приводится краткое изложение результатов исследования Uber, более подробная информация представлена ​​в статье.


Обнаружение цели

Поскольку обнаружение объектов выводит ограничивающие рамки в декартовом пространстве координат, глядя на пиксели изображения, они кажутся естественными для применения CoordConv. И исследователи обнаружили, что их интуиция была верна: в простой задаче обнаружения разбросанных цифр MNIST на пустом фоне они обнаружили, что Faster R-CNN улучшил IoU примерно на 24% при использовании CoordConv.


классификация изображений

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


генеративная модель

В генеративных моделях, таких как GAN и VAE, пиксели «вытягиваются» из пространства скрытых параметров, которые в идеале могут кодировать высокоуровневые концепции, такие как положение. Интуитивно CoordConv также может помочь. Используя простой набор данных, основанный на формах типа CLEVR, мы обучаем GAN и VAE и демонстрируем интерполяцию между скрытыми пространствами.

В качестве примера возьмем простую задачу создания цветных фигур. Интерполированное видео показано на рисунке 11, где обычная GAN слева и CoordConv GAN справа, показывая, как CoordConv улучшает производительность генеративной модели.

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

Рисунок 11: Движение (интерполяция) в скрытом пространстве обычного GAN (слева) и CoordConv GAN (справа). В vanilla GAN мы наблюдаем значительные искажения (например, прилипание к фону) и небольшое количество артефактов объектов. С CoordConv GAN цель становится связной, а движение более плавным.


Для нормального ГАН слева движение цели поначалу нормальное. Но при более внимательном рассмотрении можно заметить, что все части мишени не движутся вместе, визуальные искажения высоки (как бы прилипание к фону), а некоторые части мишени кажутся блеклыми (исчезли). При добавлении CoordConv в генератор и дискриминатор движение становится более плавным. Видно, что цель остается когерентной и движется плавно.

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

Рисунок 12: Интерполяция (движение) в скрытом пространстве между простой сверточной VAE (слева) и CoordConv VAE (справа). В обычном VAE у целей появляются артефакты, а в CoordConv VAE они двигаются более плавно.

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

Рисунок 13: Преобразование скрытого пространства с помощью ванильных сверточных GAN (слева) и CoordConv GAN (справа), обученных на наборе данных LSUN room. С помощью свертки мы снова наблюдаем артефакт жесткой цели на изображении. С добавлением CoordConv геометрические преобразования стали более плавными, включая перемещение и деформацию.


обучение с подкреплением

Обучение с подкреплением — интересная область исследований, и CoordConv может оказаться полезным. Мы обучили некоторых агентов играть в такие игры Atari, как Pac-Man. Мы думаем, что если сверточный фильтр сможет одновременно идентифицировать Pac-Man и извлечь ее положение в лабиринте, это поможет лучше изучить политику.

Мы попытались добавить CoordConv в реализацию документа «Распределенное воспроизведение приоритетного опыта» (Ape-X), но CoordConv не показал немедленного улучшения производительности. Мы также попробовали CoordConv для метода градиента политики A2C, что помогло чаще улучшать результаты. Это может отражать разницу между двумя подходами изучения явной политики и изучения Q-функции. A2C с CoordConv превзошла обычные сверточные сети (быстрее в обучении или выше результаты) в 6 из 9 протестированных игр. Также, как и ожидалось, мы заметили значительное улучшение оценки CoordConv в Pac-Man. В обеих играх CoordConv работал одинаково. В одной игре CoordConv ухудшился. В целом эти результаты показывают, что CoordConv очень полезен для обучения с подкреплением.

Рисунок 14: Результаты обучения играм Atari с использованием A2C. В 9 играх (а) CoordCov улучшает производительность свертки в 6 играх, (б) производительность в 2 играх не сильно отличается и (в) результаты на одной задаче становятся хуже.


Перспектива

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

Оригинальная ссылка:eng.uber.com/coordconv/