Редактирование: Neural Style Transfer

Перейти к: навигация, поиск

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 10: Строка 10:
 
Рассмотрим 1-й [[Сверточные_нейронные_сети#Сверточный слой | сверточный слой]]  (англ. ''convolution layer'') VGG16, который использует ядро 3x3 и обучает 64 карты признаков (англ. ''feature map'') для генерации представления изображения размерности 224x224x64, принимая 3-канальное изображение размером 224x224 в качестве входных данных (''Рисунок 2''). Во время обучения эти карты признаков научились обнаруживать простые шаблоны, например, такие как прямые линии, окружности или даже не имеющие никакого смысла для человеческого глаза шаблоны, которые тем не менее имеют огромное значение для этой модели. Такое "обнаружение" шаблонов называется обучением представления признаков. Теперь давайте рассмотрим 10-й сверточный слой VGG16, который использует ядро 3x3 с 512 картами признаков для обучения и в итоге генерирует вывод представления изображения размерности 28x28x512. Нейроны 10-го слоя уже могут обнаруживать более сложные шаблоны такие как, например, колесо автомобиля, окно или дерево и т.д.
 
Рассмотрим 1-й [[Сверточные_нейронные_сети#Сверточный слой | сверточный слой]]  (англ. ''convolution layer'') VGG16, который использует ядро 3x3 и обучает 64 карты признаков (англ. ''feature map'') для генерации представления изображения размерности 224x224x64, принимая 3-канальное изображение размером 224x224 в качестве входных данных (''Рисунок 2''). Во время обучения эти карты признаков научились обнаруживать простые шаблоны, например, такие как прямые линии, окружности или даже не имеющие никакого смысла для человеческого глаза шаблоны, которые тем не менее имеют огромное значение для этой модели. Такое "обнаружение" шаблонов называется обучением представления признаков. Теперь давайте рассмотрим 10-й сверточный слой VGG16, который использует ядро 3x3 с 512 картами признаков для обучения и в итоге генерирует вывод представления изображения размерности 28x28x512. Нейроны 10-го слоя уже могут обнаруживать более сложные шаблоны такие как, например, колесо автомобиля, окно или дерево и т.д.
  
Собственно вышеперечисленные свойства характерны для любой [[Сверточные_нейронные_сети | сверточной нейронной сети]], работа которой обычно интерпретируется как переход от конкретных особенностей изображения к более абстрактным деталям вплоть до выделения понятий высокого уровня. При этом сеть самонастраивается и вырабатывает необходимую иерархию абстрактных признаков (последовательности карт признаков), фильтруя маловажные детали и выделяя существенное.
+
Собственно вышеперечисленные свойства характерны для любой [[Сверточные_нейронные_сети | сверточной нейронной сети]], работа которой обычно интерпретируется как переход от конкретных особенностей изображения к более абстрактным деталям, и далее к ещё более абстрактным деталям вплоть до выделения понятий высокого уровня. При этом сеть самонастраивается и вырабатывает необходимую иерархию абстрактных признаков (последовательности карт признаков), фильтруя маловажные детали и выделяя существенное.
  
 
Такая природа представления кодирования сама по себе является ключом к передаче стиля, который используется для вычисления функции потерь между сгенерированным изображением относительно изображения контента и изображения стиля. При обучении модели более десяти тысяч изображений на класс модель может генерировать аналогичное представление признаков для множества различных изображений, если они принадлежат к одному классу или имеют схожий контент или стиль.  
 
Такая природа представления кодирования сама по себе является ключом к передаче стиля, который используется для вычисления функции потерь между сгенерированным изображением относительно изображения контента и изображения стиля. При обучении модели более десяти тысяч изображений на класс модель может генерировать аналогичное представление признаков для множества различных изображений, если они принадлежат к одному классу или имеют схожий контент или стиль.  
Строка 31: Строка 31:
  
  
<math>L_{content}(C, G, L) = \frac{1}{2} \sum\limits_{ij}(a[l](C)_{ij} - a[l](G)_{ij})^2</math>, где <math>a</math> {{---}} тензор выходов слоев сети, <math>l</math> {{---}} номер сверточного слоя
+
<math>L_{content}(C, G, L) = \frac{1}{2} \sum\limits_{ij}(a[l](C)_{ij} - a[l](G)_{ij})^2</math>
  
 
Это поможет сохранить исходный контент в сгенерированном изображении, а также минимизировать разницу в представлении признаков, которое логически фокусируется на разнице между содержимым обоих изображений.
 
Это поможет сохранить исходный контент в сгенерированном изображении, а также минимизировать разницу в представлении признаков, которое логически фокусируется на разнице между содержимым обоих изображений.
Строка 42: Строка 42:
  
 
Рассмотрим, как мы передаем наше изображение стиля через VGG16 и получаем значения функции активации из 7-го уровня, который генерирует матрицу представления объектов размером 56x56x256.
 
Рассмотрим, как мы передаем наше изображение стиля через VGG16 и получаем значения функции активации из 7-го уровня, который генерирует матрицу представления объектов размером 56x56x256.
В этом трехмерном массиве имеется 256 каналов размером 56x56 каждый.  
+
В этом трехмерном массиве имеется 256 каналов размером 56x56 каждый. Теперь предположим, что есть канал ''A'', чьи блоки активации могут активироваться, когда они сталкиваются с разделом изображения, содержащим коричнево-черные полосы, а затем есть канал ''B'', чьи блоки активации могут активироваться, когда они сталкиваются с чем-то похожим на глазное яблоко. Если оба этих канала ''A'' и ''B'' активируются вместе для одного и того же входа, существует высокая вероятность того, что изображение может содержать лицо тигра (поскольку у него было два канала с высокими значениями, которые активируются для глазного яблока и коричнево-черных полос). Теперь, если оба эти канала будут запущены с высокими значениями активации, это означает, что они будут иметь высокую корреляцию по сравнению с корреляцией между каналом ''A'' и ''С'', где канал ''С'' может активироваться, когда он видит ромбовидный шаблон.
  
Теперь предположим, что есть канал ''A'', чьи нейроны могут активироваться на изображении, содержащем коричнево-черные полосы, а нейроны канала ''B'' {{---}} на изображение, содержащее глазное яблоко. Если оба этих канала ''A'' и ''B'' активируются вместе для одного и того же изображения, то высока вероятность того, что изображение может содержать, например, лицо тигра (поскольку у него было два канала с большими абсолютными значениями, которые активируются для коричнево-черных полос и глазного яблока). Теперь, если оба эти канала будут с большими значениями функции активации, то они будут иметь более высокую корреляцию между каналами ''A'' и ''В'', чем между каналами ''A'' и ''С'', где канал ''С'' активируется  на изображении, содержащем ромбовидный шаблон. Чтобы получить корреляцию всех этих каналов друг с другом, нам нужно вычислить нечто называемое матрицей Грама, будем использовать ее для измерения степени корреляции между каналами. Таким образом, именно значение корреляции между каналами служит показателем того, насколько итоговое изображение наследует элементы изображения со стилем.
+
Таким образом, чтобы получить корреляцию всех этих каналов друг с другом, нам нужно вычислить нечто называемое матрицей Грама, будем использовать ее для измерения степени корреляции между каналами, которая позже будет служить мерой самого стиля.
  
 
=== Функция потерь на основе корреляции матриц Грама ===
 
=== Функция потерь на основе корреляции матриц Грама ===
Строка 82: Строка 82:
 
       <font color="green"># b=number of feature maps</font>
 
       <font color="green"># b=number of feature maps</font>
 
       <font color="green"># (c,d)=dimensions of a f. map (N=c*d)</font>
 
       <font color="green"># (c,d)=dimensions of a f. map (N=c*d)</font>
       features = input.view(a * b, c * d)  <font color="green"># resize feature maps</font>
+
       features = input.view(a * b, c * d)  <font color="green"># resise F_XL into \hat F_XL</font>
 
       G = torch.mm(features, features.t())  <font color="green"># compute the gram product</font>
 
       G = torch.mm(features, features.t())  <font color="green"># compute the gram product</font>
 
       <font color="green"># we 'normalize' the values of the gram matrix</font>
 
       <font color="green"># we 'normalize' the values of the gram matrix</font>
Строка 245: Строка 245:
  
 
==См. также==
 
==См. также==
* [[Сверточные_нейронные_сети | Свёрточная нейронная сеть]]
+
* [https://ru.wikipedia.org/wiki/%D0%A1%D0%B2%D1%91%D1%80%D1%82%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D1%8C Свёрточная нейронная сеть]
 
* [https://ethereon.github.io/netscope/#/gist/3785162f95cd2d5fee77 Интерактивная архитектура сети VGG16]
 
* [https://ethereon.github.io/netscope/#/gist/3785162f95cd2d5fee77 Интерактивная архитектура сети VGG16]
  

Пожалуйста, учтите, что любой ваш вклад в проект «Викиконспекты» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Викиконспекты:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Чтобы изменить эту страницу, пожалуйста, ответьте на приведённый ниже вопрос (подробнее):

Отменить | Справка по редактированию (в новом окне)

Шаблон, используемый на этой странице: