Создайте неконтролируемую сеть генератора преобразования изображений в изображения (UNIT)
создает сеть генератора UNIT, net
= unitGenerator(inputSizeSource
)net
, для входов размера inputSizeSource
. Для получения дополнительной информации об архитектуре сети смотрите UNIT Generator Network. Сеть имеет два входа и четыре выхода:
Двумя сетевыми входами являются изображения в исходных и целевых областях. По умолчанию целевой размер изображения совпадает с размером исходного изображения. Вы можете изменить количество каналов в целевом изображении, задав 'NumTargetInputChannels
'имя-значение аргумента.
Два сетевых выхода являются самовосстановленными выходами, другими словами, преобразованными изображениями от источника к источнику и от целевого к целевому. Другие два сетевых выхода являются преобразованными изображениями «источник-цель» и «цель-источник».
Эта функция требует Deep Learning Toolbox™.
изменяет аспекты сети генератора UNIT с помощью аргументов имя-значение.net
= unitGenerator(inputSizeSource
,Name,Value
)
Укажите размер сетевого входа для изображений 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)
inputSizeSource
- Входной размер исходного изображенияЗадайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'NumDownsamplingBlocks',3
создает сеть с 3 блоками понижающей дискретизации'NumDownsamplingBlocks'
- Количество блоков понижающей дискретизации2
(по умолчанию) | положительное целое числоКоличество блоков понижающей дискретизации в подсетях исходного энкодера и целевого энкодера в виде положительного целого числа. В целом модуль энкодера понижает значение входного и целевого входных параметров в 2 ^ NumDownsamplingBlocks
. Исходный декодер и подсеть целевого декодера имеют одинаковое количество блоков повышающей дискретизации.
'NumResidualBlocks'
- Количество остаточных блоков5
(по умолчанию) | положительное целое числоКоличество остаточных блоков в модуле энкодера, заданное в виде положительного целого числа. Модуль декодера имеет одинаковое количество остаточных блоков.
'NumSharedBlocks'
- Количество общих остаточных блоков2
(по умолчанию) | положительное целое числоКоличество остаточных блоков в подсети общего энкодера, заданное в виде положительного целого числа. Общая подсеть декодера имеет одинаковое количество остаточных блоков. Сеть должна содержать по крайней мере один общий остаточный блок.
'NumTargetChannels'
- Количество каналов в целевом изображенииКоличество каналов в целевом изображении, заданное как положительное целое число. По умолчанию 'NumTargetChannels
'совпадает с количеством каналов в исходном изображении, inputSizeSource
.
'NumFiltersInFirstBlock'
- Количество фильтров в первом слое свертки64
(по умолчанию) | положительное четное целое числоКоличество фильтров в первом слое свертки, заданное как положительное четное целое число.
'FilterSizeInFirstAndLastBlocks'
- Размер фильтра в первом и последнем слоях свертки7
(по умолчанию) | положительное нечетное целое число | 2-элементный вектор положительных нечетных целых чиселРазмер фильтра в первом и последнем слоях свертки сети, заданный как положительное нечетное целое или 2-элементный вектор положительных нечетных целых чисел вида [ширина высоты ]. Когда вы задаете размер фильтра как скаляр, фильтр имеет равные высоту и ширину.
'FilterSizeInIntermediateBlocks'
- Размер фильтра в промежуточных слоях3
(по умолчанию) | 2-элементный вектор положительных нечетных целых чисел | положительное нечетное целое числоРазмер фильтра в промежуточных слоях, заданный как положительное нечетное целое или 2-элементный вектор положительных нечетных целых чисел вида [ширина высоты ]. Промежуточные слои свертки являются слоями свертки, исключающими первый и последний слой свертки. Когда вы задаете размер фильтра как скаляр, фильтр имеет одинаковые высоту и ширину.
'ConvolutionPaddingValue'
- Стиль заполнения"symmetric-exclude-edge"
(по умолчанию) | "symmetric-include-edge"
| "replicate"
| числовой скалярСтиль заполнения, используемый в сети, задается как одно из следующих значений.
PaddingValue | Описание | Пример |
---|---|---|
Числовой скаляр | Панель с заданным числовым значением |
|
'symmetric-include-edge' | Заполните используя зеркальные значения входов, включая значения ребер |
|
'symmetric-exclude-edge' | Заполните используя зеркальные значения входов, исключая значения ребер |
|
'replicate' | Заполните с использованием повторяющихся элементов границы входов |
|
'UpsampleMethod'
- Метод, используемый для повышения активации"transposedConv"
(по умолчанию) | "bilinearResize"
| "pixelShuffle"
Метод, используемый для увеличения активации, заданный как одно из следующих значений:
"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
'ConvolutionWeightsInitializer'
- Массовая инициализация, используемая в слоях"he"
(по умолчанию) | "glorot"
| "narrow-normal"
| функцииИнициализация веса, используемая в слоях свертки, задается как "glorot"
, "he"
, "narrow-normal"
, или указатель на функцию. Для получения дополнительной информации смотрите Задать Пользовательскую Функцию Инициализации Веса (Deep Learning Toolbox).
'ActivationLayer'
- Функция активации"relu"
(по умолчанию) | "leakyRelu"
| "elu"
| объекта слояФункция активации для использования в сети за исключением первого и последнего слоев свертки, заданных в качестве одного из следующих значений. unitGenerator
функция автоматически добавляет утечку слоя ReLU после первого слоя свертки. Для получения дополнительной информации и списка доступных слоев смотрите Слои активации (Deep Learning Toolbox).
"relu"
- Использование reluLayer
(Deep Learning Toolbox)
"leakyRelu"
- Использование leakyReluLayer
(Deep Learning Toolbox) с масштабным коэффициентом 0,2
"elu"
- Использование eluLayer
(Deep Learning Toolbox)
Объект слоя
'SourceFinalActivationLayer'
- Функция активации после окончательной свертки в исходном декодере"tanh"
(по умолчанию) | "sigmoid"
| "softmax"
| "none"
| объекта слояФункция активации после последнего слоя свертки в исходном декодере, заданная в качестве одного из следующих значений. Для получения дополнительной информации и списка доступных слоев смотрите Выходные слои (Deep Learning Toolbox).
"tanh"
- Использование tanhLayer
(Deep Learning Toolbox)
"sigmoid"
- Использование sigmoidLayer
(Deep Learning Toolbox)
"softmax"
- Использование softmaxLayer
(Deep Learning Toolbox)
"none"
- Не используйте слой окончательной активации
Объект слоя
'TargetFinalActivationLayer'
- Функция активации после окончательной свертки в целевом декодере"tanh"
(по умолчанию) | "sigmoid"
| "softmax"
| "none"
| объекта слояФункция активации после последнего слоя свертки в целевом декодере, заданная в качестве одного из следующих значений. Для получения дополнительной информации и списка доступных слоев смотрите Выходные слои (Deep Learning Toolbox).
"tanh"
- Использование tanhLayer
(Deep Learning Toolbox)
"sigmoid"
- Использование sigmoidLayer
(Deep Learning Toolbox)
"softmax"
- Использование softmaxLayer
(Deep Learning Toolbox)
"none"
- Не используйте слой окончательной активации
Объект слоя
net
- БЛОЧНАЯ генераторная сетьdlnetwork
объектUNIT сеть генератора, возвращенная как dlnetwork
(Deep Learning Toolbox) объект.
Сеть генератора UNIT состоит из трех подсетей в модуле энкодера и затем трех подсетей в модуле декодера. Сеть по умолчанию соответствует архитектуре, предложенной Liu, Breuel и Kautz [1].
Модуль энкодера уменьшает вход в 2 ^ NumDownsamplingBlocks
. Модуль энкодера состоит из трех подсетей.
Подсеть исходного энкодера, называемая 'encoderSourceBlock', имеет начальный блок слоев, который принимает данные в исходной области, XS. Затем подсеть имеет NumDownsamplingBlocks
блоки понижающей дискретизации, которые понижают данные и NumResidualBlocks
– NumSharedBlocks
остаточные блоки.
Подсеть целевого энкодера, называемая 'encoderTargetBlock', имеет начальный блок слоев, который принимает данные в целевой области, XS. Затем подсеть имеет NumDownsamplingBlocks
блоки понижающей дискретизации, которые понижают дискретизацию данных и NumResidualBlocks
– NumSharedBlocks
остаточные блоки.
Выходы исходного энкодера и целевого энкодера объединяются в concatenationLayer
(Deep Learning Toolbox)
Общая подсеть остаточного энкодера, называемая 'encoderSharedBlock', принимает конкатенированные данные и имеет NumSharedBlocks
остаточные блоки.
Модуль декодера состоит из трех подсетей, которые выполняют в общей сложности NumDownsamplingBlocks
операции увеличения дискретизации данных.
Общая подсеть остаточного декодера, называемая 'decoderSharedBlock', принимает данные от энкодера и имеет NumSharedBlocks
остаточные блоки.
Подсеть исходного декодера, называемая 'decoderSourceBlock', имеет NumResidualBlocks
– NumSharedBlocks
остаточные блоки, NumDownsamplingBlocks
блоки понижающей дискретизации, которые понижают данные, и конечный блок слоев, который возвращает выход. Эта подсеть возвращает два выхода в исходной области: XTS и XSS. Выходным XTS является изображение, переведенное из целевой области в исходную область. Выходной XSS является самовосстановленным изображением из исходной области в исходную область.
Подсеть целевого декодера, называемая 'decoderTargetBlock', имеет NumResidualBlocks
– NumSharedBlocks
остаточные блоки, NumDownsamplingBlocks
блоки понижающей дискретизации, которые понижают данные, и конечный блок слоев, который возвращает выход. Эта подсеть возвращает два выхода в целевой области: XST и XTT. Выходным XTS является изображение, переведенное из исходной области в целевую область. Выходной XTT является самовосстановленным изображением из целевой области в целевую область.
Таблица описывает блоки слоев, которые состоят из подсетей.
Тип блока | Слои | Схема блока по умолчанию |
---|---|---|
Начальный блок |
|
|
Блок понижающей дискретизации |
|
|
Остаточный блок |
|
|
Блок повышающей дискретизации |
|
|
Конечный блок |
|
|
Вы можете создать сеть дискриминатора для МОДУЛЬ при помощи patchGANDiscriminator
функция.
Обучите сеть UNIT GAN с помощью пользовательского цикла обучения.
Чтобы выполнить область исходного изображения в целевое и наоборот, используйте unitPredict
функция.
Для кодировки общих скрытых функций аргументы 'NumSharedBlocks
'и' NumResidualBlocks
'должно быть больше 0.
[1] Лю, Мин-Ю, Томас Бреуэль и Ян Каутц. «Неконтролируемые сети перевода изображений в изображения». Усовершенствования в системах нейронной обработки информации 30 (NIPS 2017). Лонг Бич, Калифорния: 2017. https://arxiv.org/abs/1703.00848.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.