encoderDecoderNetwork

Создайте сеть декодера энкодера

Описание

пример

net = encoderDecoderNetwork(inputSize,encoder,decoder) соединяет сеть энкодера и сеть декодера, чтобы создать сеть декодера энкодера, net.

Эта функция требует Deep Learning Toolbox™.

net = encoderDecoderNetwork(inputSize,encoder,decoder,Name,Value) изменяет аспекты сети декодера энкодера использование аргументов name-value.

Примеры

свернуть все

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

encoderBlock = @(block) [
    convolution2dLayer(3,2^(5+block),"Padding",'same')
    reluLayer
    convolution2dLayer(3,2^(5+block),"Padding",'same')
    reluLayer
    maxPooling2dLayer(2,"Stride",2)];
encoder = blockedNetwork(encoderBlock,4,"NamePrefix","encoder_");

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

decoderBlock = @(block) [
    transposedConv2dLayer(2,2^(10-block),'Stride',2)
    convolution2dLayer(3,2^(10-block),"Padding",'same')
    reluLayer
    convolution2dLayer(3,2^(10-block),"Padding",'same')
    reluLayer];
decoder = blockedNetwork(decoderBlock,4,"NamePrefix","decoder_");

Создайте мостоукладчики.

bridge = [
    convolution2dLayer(3,1024,"Padding",'same')
    reluLayer
    convolution2dLayer(3,1024,"Padding",'same')
    reluLayer
    dropoutLayer(0.5)];            

Задайте сетевой входной размер.

inputSize = [224 224 3];

Создайте сеть U-Net путем соединения модуля энкодера, моста и модуля декодера и добавления связей пропуска.

unet = encoderDecoderNetwork(inputSize,encoder,decoder, ...
    "OutputChannels",3, ...
    "SkipConnections","concatenate", ...
    "LatentNetwork",bridge)
unet = 
  dlnetwork with properties:

         Layers: [55x1 nnet.cnn.layer.Layer]
    Connections: [62x2 table]
     Learnables: [46x3 table]
          State: [0x3 table]
     InputNames: {'encoderImageInputLayer'}
    OutputNames: {'encoderDecoderFinalConvLayer'}
    Initialized: 1

Отобразите сеть.

analyzeNetwork(unet)

Создайте сеть энкодера GAN с четырьмя операциями субдискретизации от предварительно обученной сети GoogLeNet.

depth = 4;
[encoder,outputNames] = pretrainedEncoderNetwork('googlenet',depth);

Определите входной размер сети энкодера.

inputSize = encoder.Layers(1).InputSize;

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

exampleInput = dlarray(zeros(inputSize),'SSC');
exampleOutput = cell(1,length(outputNames));
[exampleOutput{:}] = forward(encoder,exampleInput,'Outputs',outputNames);

Определите количество каналов в блоках декодера как длина третьего канала в каждой активации.

numChannels = cellfun(@(x) size(extractdata(x),3),exampleOutput);
numChannels = fliplr(numChannels(1:end-1));

Задайте функцию, которая создает массив слоев для одного блока декодера.

decoderBlock = @(block) [
    transposedConv2dLayer(2,numChannels(block),'Stride',2)
    convolution2dLayer(3,numChannels(block),'Padding','same')
    reluLayer
    convolution2dLayer(3,numChannels(block),'Padding','same')
    reluLayer];

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

decoder = blockedNetwork(decoderBlock,depth);

Создайте сеть U-Net путем соединения модуля энкодера и модуля декодера и добавления связей пропуска.

net = encoderDecoderNetwork([224 224 3],encoder,decoder, ...
   'OutputChannels',3,'SkipConnections','concatenate')
net = 
  dlnetwork with properties:

         Layers: [139x1 nnet.cnn.layer.Layer]
    Connections: [167x2 table]
     Learnables: [116x3 table]
          State: [0x3 table]
     InputNames: {'data'}
    OutputNames: {'encoderDecoderFinalConvLayer'}
    Initialized: 1

Отобразите сеть.

analyzeNetwork(net)

Входные параметры

свернуть все

Сетевой входной размер в виде вектора с 3 элементами из положительных целых чисел. inputSize имеет форму [H W C], где H является высотой, W является шириной, и C является количеством каналов.

Пример: [28 28 3] задает входной размер 28 28 пикселей для изображения с 3 каналами.

Сеть Encoder в виде dlnetwork Объект (Deep Learning Toolbox).

Сеть Decoder в виде dlnetwork Объект (Deep Learning Toolbox). Сеть должна иметь один вход и один выход.

Аргументы name-value

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

Пример: 'SkipConnections',"concatenate" задает тип связи пропуска между сетями энкодера и декодера как конкатенация.

Сеть, соединяющая энкодер и декодер в виде слоя или массива слоев.

Сеть, соединенная с выходом декодера в виде слоя или массива слоев. Если вы задаете 'OutputChannels'аргумент, затем итоговая сеть соединяется после итогового слоя свертки 1 на 1 декодера.

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

Имена пар слоев энкодера/декодера, активации которых объединены связями пропуска в виде одного из этих значений.

  • "auto"encoderDecoderNetwork функция определяет имена пар слоев энкодера/декодера автоматически.

  • Массив строк M-2 — первый столбец является именем слоя энкодера, и второй столбец является именем соответствующего слоя декодера.

Когда вы задаете 'SkipConnections'аргумент как "none", encoderDecoderNetwork функция игнорирует значение 'SkipConnectionNames'.

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

Тип связи пропуска между сетями энкодера и декодера в виде "none"'auto', или "concatenate".

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

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

свернуть все

Сеть Encoder/decoder, возвращенная как dlnetwork Объект (Deep Learning Toolbox).

Введенный в R2021a