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

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

image


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

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

Распознавание наоборот


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

image

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

Хороший способ проверить, действительно ли сеть научилась распознавать образ — это попросить её нарисовать его.

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

image

Нижние слои

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

image

Продвинутые слои

Если для интерпретации выбрать более продвинутый слой, то сеть постарается найти в картинке те образы, на которых тренировалась.

На вход нейронной сети, которая обучалась на фотках животных подали изображение облаков.

image

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

image

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

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

image

Техника обратного рисования дает разработчикам оценить качество распознавания того или иного слоя.

Сами разработчики называют эту технику «Inceptionism» (инцепционизм). Еще картины.

Итерации


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

image

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

Конспект


  1. Нейронная сеть имеет от 10 до 30 вложенных слоев с разным уровнем абстракции.
  2. Чтобы нейронная сеть начала рисовать картины на её вход подается картинка и ставится задача — найти в нем определенную форму и утрировать её.
  3. Техника «инцепционизм» помогает понять и визуализировать как нейронная сеть выполняет задачи классификации.

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


  1. Color
    10.07.2015 15:05
    +4

    Где можно скачать эти картинки в хорошем качестве? Хочу распечатать и повесить теперь :)


    1. VoidEx
      10.07.2015 15:12
      +2

      По ссылке Ещё картины


    1. Imp5
      10.07.2015 15:17
      +5

      Хочу распечатать

      Для начала надо будет спросить разрешения у автора.


      1. Anisotropic
        10.07.2015 15:18
        +2

        Зачем спрашивать у автора, если я хочу распечатку у себя дома повесить?


        1. KaneUA
          10.07.2015 15:44
          +20

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


      1. Color
        10.07.2015 15:29
        +7

        Разве исходники автора не в открытом доступе?


      1. radiolok
        10.07.2015 15:35
        +3

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


        1. Aquahawk
          11.07.2015 01:50
          +2

          Ну знаете, вы тоже не сами по себе сообразились.


          1. Mendel
            11.07.2015 10:06

            Я бы начал не от «кто включил» а от дееспособности.
            Автора софта могут назначить опекуном над сетью, ведь сеть недееспособна :)


  1. frog
    10.07.2015 16:02

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


    1. kenoma
      10.07.2015 16:23

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


      1. frog
        10.07.2015 16:28

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


        1. LaCTuK
          10.07.2015 16:39
          +1

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


          1. grafmishurov
            10.07.2015 16:58

            Supervised learning. Скорее всего чем больше фич, тем точнее можно решить проблему регрессии. В слоях у них разные аспекты изображения: цвет, форма, силуэт и т.д.


        1. MagicWolf
          10.07.2015 16:58

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

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


        1. ascending
          10.07.2015 16:59

          > Но каким образом из неё можно извлечь эти черты кошачьей морды в виде конкретного изображения?
          Если коротко, то оптимизируем входной сигнал, максимизируя L2-норму выходов нейронов зафиксированного слоя обычным градиентным методом. На самом деле ещё с парой трюков: github.com/google/deepdream/blob/master/dream.ipynb


  1. samodum
    10.07.2015 16:17
    +7

    >Как нейронные сети рисуют картины
    и тут же:
    >Хороший способ проверить, действительно ли сеть научилась распознавать образ — это попросить её нарисовать его.

    Так где ответ на вопрос в заголовке?

    Топик в стиле «как нарисовать сову»


  1. nickolaym
    10.07.2015 17:16
    +4

    Так и осталось нераскрытым — как нейросеть рисует.
    Одно дело классифицировать. «Этот пиксел — от собаки, этот пиксел — от пагоды». И другое — по классификации восстановить прообраз. Вот этот момент непонятен.


  1. agasper
    10.07.2015 19:16
    +12

    У меня вот что получилось из шума


    1. barabanus
      11.07.2015 01:38
      +4

      Какие-то инфернальные картинки получаются!


      1. arvitaly
        11.07.2015 02:49
        +2

        Так выглядит ваше подсознание)


    1. icoz
      11.07.2015 10:18
      +1

      жесть. А если несколько треугольников и квадратов нарисовать?


  1. agasper
    10.07.2015 19:18
    +3

    Ну и для тех кто хочет сам поковыряться

    Оригинальная статья:
    http://googleresearch.blogspot.jp/2015/07/deepdream-code-example-for-visualizing.html

    Докер контейнер:
    https://registry.hub.docker.com/u/mjibson/deepdream/


    1. Sabin
      11.07.2015 15:22
      +1

      И для тех, кто хочет просто посмотреть побольше картинок: deepdream.pictures


  1. engine9
    10.07.2015 19:22
    +3

    Скажите, а есть возможность заменить психособак на свои картинки, есть одна задумка клевая.


  1. michael_vostrikov
    10.07.2015 19:23
    +1

    Насколько я понимаю, рисование основано на механизме обратного распространения. То есть, некоторое изображение на входе дает сигнал на выходе: нейрон1 = 0.8, нейрон2 = 0.3,… Задаем сигнал на выходе, по коэффициентам нейронов рассчитываем, какой должна быть входная картинка.

    Только вот мне кажется, это сильно далеко от того, как распознает изображения человек, собака или даже лягушка.



  1. semenyakinVS
    11.07.2015 02:47
    +4

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

    Картины
    image
    Серия из шести работ Уэйна часто используется как пример в учебниках по психиатрии для иллюстрации изменения стиля творчества в результате развития психической болезни с течением времени.


    1. cjfynjy
      11.07.2015 06:17

      Все шесть картин — это рисунок одного и того же котика?


      1. semenyakinVS
        11.07.2015 11:36

        Скорее всего, нет. На них просто хорошо видно как человеческие картины изменяются под действием психологической болезни.

        Кстати, интересны методы лечения шизофрении:

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


  1. minoro
    11.07.2015 04:25

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


    1. semenyakinVS
      11.07.2015 11:15
      +2

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


    1. Yuuri
      12.07.2015 18:32
      +1

      А вы считаете, что человеческое творчество — это не наложение одного на другое?


  1. palantiron
    11.07.2015 11:51
    +9

    Хочется еще послушать музыку, написанную нейросетью


    1. a553
      11.07.2015 15:02
      +3

      Причём есть подозрение, что у нейросети получится лучше, чем у большинства современных «музыкантов».


      1. AlexanderG
        14.07.2015 17:44
        +1

        На здоровье:

        Music in the video is also generated by a deep neural net.


  1. Beholder
    11.07.2015 14:22
    +1

    Собака эта несчастная… Она теперь везде чудиться будет…


  1. 3dtim
    13.07.2015 08:44
    +1

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