exponenta event banner

unitGenerator

Создание сети генератора преобразования изображения в изображение без контроля (UNIT)

Описание

пример

net = unitGenerator(inputSizeSource) создает сеть генератора UNIT, net, для ввода размера inputSizeSource. Дополнительные сведения об архитектуре сети см. в разделе Сеть генератора UNIT. Сеть имеет два входа и четыре выхода:

  • Два сетевых входа являются образами в исходном и целевом доменах. По умолчанию размер целевого изображения совпадает с размером исходного изображения. Можно изменить количество каналов в целевом изображении, указав 'NumTargetInputChannelsаргумент «имя-значение».

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

Для выполнения этой функции требуется Toolbox™ глубокого обучения.

пример

net = unitGenerator(inputSizeSource,Name,Value) изменяет параметры генераторной сети UNIT с помощью аргументов «имя-значение».

Примеры

свернуть все

Укажите размер сетевого входа для изображений RGB размером 128 на 128.

inputSize = [128 128 3];

Создайте генератор UNIT, генерирующий RGB-изображения входного размера.

net = unitGenerator(inputSize)
net = 
  dlnetwork with properties:

         Layers: [9x1 nnet.cnn.layer.Layer]
    Connections: [8x2 table]
     Learnables: [168x3 table]
          State: [0x3 table]
     InputNames: {'inputSource'  'inputTarget'}
    OutputNames: {1x4 cell}
    Initialized: 1

Отображение сети.

analyzeNetwork(net)

Укажите размер сетевого входа для изображений RGB размером 128 на 128.

inputSize = [128 128 3];

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

net = unitGenerator(inputSize,"NumResidualBlocks",5, ...
    "NumSharedBlocks",3)
net = 
  dlnetwork with properties:

         Layers: [9x1 nnet.cnn.layer.Layer]
    Connections: [8x2 table]
     Learnables: [152x3 table]
          State: [0x3 table]
     InputNames: {'inputSource'  'inputTarget'}
    OutputNames: {1x4 cell}
    Initialized: 1

Отображение сети.

analyzeNetwork(net)

Входные аргументы

свернуть все

Входной размер исходного изображения, заданный как 3-элементный вектор положительных целых чисел. inputSizeSource имеет вид [H W C], где H - высота, W - ширина, а C - количество каналов. Длина каждого размера должна быть равномерно разделена на 2 ^NumDownsamplingBlocks.

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: 'NumDownsamplingBlocks',3 создает сеть с 3 блоками понижающей дискретизации

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

Количество остаточных блоков в модуле кодера, указанное как положительное целое число. Модуль декодера имеет одинаковое количество остаточных блоков.

Количество остаточных блоков в совместно используемой подсети кодера, указанное как положительное целое число. Подсеть совместно используемого декодера имеет одинаковое количество остаточных блоков. Сеть должна содержать по крайней мере один общий остаточный блок.

Количество каналов в целевом изображении, указанное как положительное целое число. По умолчанию 'NumTargetChannels'совпадает с количеством каналов в исходном образе, inputSizeSource.

Число фильтров в первом слое свертки, указанное как положительное четное целое число.

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

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

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

PaddingValueОписаниеПример
Числовой скалярПлощадка с указанным числовым значением

[314159265]→[2222222222222222314222215922222652222222222222222]

'symmetric-include-edge'Pad с использованием зеркальных значений входных данных, включая значения краев

[314159265]→[5115995133144113314415115995622655662265565115995]

'symmetric-exclude-edge'Прокладка с использованием зеркальных значений входных данных, за исключением краевых значений

[314159265]→[5626562951595141314139515951562656295159514131413]

'replicate'Прокладка с использованием повторяющихся граничных элементов ввода

[314159265]→[3331444333144433314441115999222655522265552226555]

Метод, используемый для увеличения числа активаций, указанный как одно из следующих значений:

  • "transposedConv" - Использовать transposedConv2dLayer (Deep Learning Toolbox) с шагом [2 2].

  • "bilinearResize" - Использовать convolution2dLayer (Deep Learning Toolbox) с шагом [1 1], за которым следует resize2dLayer с масштабом [2 2].

  • "pixelShuffle" - Использовать convolution2dLayer (Deep Learning Toolbox) с шагом [1 1], за которым следует depthToSpace2dLayer с размером блока [2 2].

Типы данных: char | string

Инициализация веса, используемая в слоях свертки, указанная как "glorot", "he", "narrow-normal"или дескриптор функции. Дополнительные сведения см. в разделе Определение пользовательской функции инициализации веса (панель инструментов глубокого обучения).

Функция активации, используемая в сети, за исключением первого и последнего уровней свертки, указанных как одно из этих значений. unitGenerator функция автоматически добавляет протекающий слой ReLU после первого слоя свертки. Дополнительные сведения и список доступных слоев см. в разделе Слои активации (панель инструментов глубокого обучения).

  • "relu" - Использовать reluLayer (инструментарий для глубокого обучения)

  • "leakyRelu" - Использовать leakyReluLayer (Deep Learning Toolbox) с масштабным коэффициентом 0,2

  • "elu" - Использовать eluLayer (инструментарий для глубокого обучения)

  • Объект слоя

Функция активации после конечного уровня свертки в декодере источника, заданная как одно из этих значений. Дополнительные сведения и список доступных слоев см. в разделе Выходные слои (панель инструментов глубокого обучения).

  • "tanh" - Использовать tanhLayer (инструментарий для глубокого обучения)

  • "sigmoid" - Использовать sigmoidLayer (инструментарий для глубокого обучения)

  • "softmax" - Использовать softmaxLayer (инструментарий для глубокого обучения)

  • "none" - Не использовать окончательный уровень активации

  • Объект слоя

Функция активации после конечного уровня свертки в целевом декодере, заданная как одно из этих значений. Дополнительные сведения и список доступных слоев см. в разделе Выходные слои (панель инструментов глубокого обучения).

  • "tanh" - Использовать tanhLayer (инструментарий для глубокого обучения)

  • "sigmoid" - Использовать sigmoidLayer (инструментарий для глубокого обучения)

  • "softmax" - Использовать softmaxLayer (инструментарий для глубокого обучения)

  • "none" - Не использовать окончательный уровень активации

  • Объект слоя

Выходные аргументы

свернуть все

Генераторная сеть UNIT, возвращенная как dlnetwork(Панель инструментов глубокого обучения).

Подробнее

свернуть все

Сеть генератора UNIT

Генераторная сеть UNIT состоит из трех подсетей в модуле кодера, за которыми следуют три подсети в модуле декодера. Сеть по умолчанию соответствует архитектуре, предложенной Лю, Бреуэлем и Каутцем [1].

Inputs, encoder modules, decoder modules, and outputs of a UNIT network.

Модуль кодера понижает выборку входного сигнала на коэффициент 2 ^NumDownsamplingBlocks. Модуль кодера состоит из трех подсетей.

  • Подсеть исходного кодера, называемая «encureSourceBlock», имеет начальный блок уровней, который принимает данные в исходной области, XS. Затем подсеть имеет NumDownsamplingBlocks блоки понижающей дискретизации, которые понижают выборку данных и NumResidualBlocksNumSharedBlocks остаточные блоки.

  • Подсеть целевого кодера, называемая «encureTargetBlock», имеет начальный блок уровней, который принимает данные в целевом домене, XS. Затем подсеть имеет NumDownsamplingBlocks блоки понижающей дискретизации, которые понижают выборку данных, и NumResidualBlocksNumSharedBlocks остаточные блоки.

  • Выход исходного кодера и целевого кодера объединяются посредством concatenationLayer (инструментарий для глубокого обучения)

  • Подсеть общего остаточного кодера, называемая «encedSharedBlock», принимает конкатенированные данные и имеет NumSharedBlocks остаточные блоки.

Модуль декодера состоит из трех подсетей, которые выполняют в общей сложности NumDownsamplingBlocks операции повышения дискретизации данных.

  • Подсеть общего остаточного декодера, называемая «SharedBlock», принимает данные от кодера и имеет NumSharedBlocks остаточные блоки.

  • Исходная подсеть декодера, названная 'decoderSourceBlock', имеет NumResidualBlocksNumSharedBlocks остаточные блоки, NumDownsamplingBlocks блоки понижающей дискретизации, которые понижают выборку данных, и конечный блок уровней, который возвращает выходные данные. Эта подсеть возвращает два выхода в исходном домене: XTS и XSS. Выходной XTS является изображением, преобразованным из целевого домена в исходный домен. Выходной XSS представляет собой самовосстановленное изображение из исходного домена в исходный домен.

  • Целевая подсеть декодера, названная 'decoderTargetBlock', имеет NumResidualBlocksNumSharedBlocks остаточные блоки, NumDownsamplingBlocks блоки понижающей дискретизации, которые понижают выборку данных, и конечный блок уровней, который возвращает выходные данные. Эта подсеть возвращает два выхода в целевой области: XST и XTT. Выходной XTS является изображением, преобразованным из исходного домена в целевой домен. Выходной XTT представляет собой самовосстановленное изображение из целевого домена в целевой домен.

В таблице описаны блоки слоев, составляющих подсети.

Тип блокаСлоиСхема блока по умолчанию
Начальный блок
  • Один imageInputLayer (инструментарий глубокого обучения).

  • A convolution2dLayer (Deep Learning Toolbox) с шагом [1 1] и размером фильтра FilterSizeInFirstAndLastBlocks.

  • A leakyReluLayer (Deep Learning Toolbox) с масштабным коэффициентом 0,2.

Image input layer, 2-D convolution layer, leaky ReLU layer

Блок понижающей дискретизации
  • A convolution2dLayer (Deep Learning Toolbox) с шагом [2 2] для выполнения понижающей дискретизации. Сверточный слой имеет размер фильтра FilterSizeInIntermediateBlocks.

  • Один instanceNormalizationLayer (инструментарий глубокого обучения).

  • Уровень активации, указанный ActivationLayer аргумент «имя-значение».

2-D convolution layer, instance normalization layer, ReLU layer

Остаточный блок
  • A convolution2dLayer (Deep Learning Toolbox) с шагом [1 1] и размером фильтра FilterSizeInIntermediateBlocks.

  • Один instanceNormalizationLayer (инструментарий глубокого обучения).

  • Уровень активации, указанный ActivationLayer аргумент «имя-значение».

  • Секунда convolution2dLayer (инструментарий глубокого обучения).

  • Секунда instanceNormalizationLayer (инструментарий глубокого обучения).

  • Один additionLayer (Deep Learning Toolbox), которая обеспечивает пропуск соединения между каждым блоком.

2-D convolution layer, instance normalization layer, ReLU layer, 2-D convolution layer, instance normalization layer, addition layer

Блок повышающей дискретизации
  • Повышающий дискретизирующий слой, который увеличивает выборку в 2 раза согласно UpsampleMethod аргумент «имя-значение». Сверточный слой имеет размер фильтра FilterSizeInIntermediateBlocks.

  • Один instanceNormalizationLayer (инструментарий глубокого обучения).

  • Уровень активации, указанный ActivationLayer аргумент «имя-значение».

Transposed 2-D convolution layer, instance normalization layer, ReLU layer

Окончательный блок
  • A convolution2dLayer (Deep Learning Toolbox) с шагом [1 1] и размером фильтра FilterSizeInFirstAndLastBlocks.

  • Необязательный уровень активации, указанный SourceFinalActivationLayer и TargetFinalActivationLayer аргументы «имя-значение».

2-D convolution layer, tanh layer

Совет

  • Сеть дискриминаторов для UNIT можно создать с помощью patchGANDiscriminator функция.

  • Обучение сети GAN UNIT с использованием пользовательского цикла обучения.

  • Для выполнения преобразования исходного образа в целевой образ в домене и наоборот используйте unitPredict функция.

  • Для кодировки общих скрытых функций аргументы 'NumSharedBlocks«и»NumResidualBlocksЗначение «» должно быть больше 0.

Ссылки

[1] Лю, Мин-Ю, Томас Бреуэль и Ян Каутц. «Неподконтрольные сети преобразования изображений в изображения». Достижения в системах обработки нейронной информации 30 (NIPS 2017). Лонг-Бич, Калифорния: 2017. https://arxiv.org/abs/1703.00848.

Представлен в R2021a