pretrainedEncoderNetwork

Создайте сеть энкодера из предварительно обученной сети

Описание

пример

net = pretrainedEncoderNetwork(networkName,depth) создает сеть энкодера, net, из предварительно обученной сети, networkName. Сеть энкодера выполняет depth операции понижающей дискретизации.

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

пример

[net,outputNames] = pretrainedEncoderNetwork(networkName,depth) также возвращает имена, outputNames, слоев активации, которые происходят непосредственно перед операциями понижающей дискретизации. Эти активации соответствуют интересующим функциям при определенных пространственных разрешениях или шкалах.

Примеры

свернуть все

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

encoderNet = pretrainedEncoderNetwork('squeezenet',3)
encoderNet = 
  dlnetwork with properties:

         Layers: [33x1 nnet.cnn.layer.Layer]
    Connections: [36x2 table]
     Learnables: [26x3 table]
          State: [0x3 table]
     InputNames: {'data'}
    OutputNames: {'fire5-concat'}
    Initialized: 1

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

analyzeNetwork(encoderNet)

Создайте сеть энкодера с четырьмя операциями понижающей дискретизации от предварительно обученной сети 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)

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

свернуть все

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

  • "alexnet" - См. alexnet (Deep Learning Toolbox) для получения дополнительной информации.

  • "googlenet" - См. googlenet (Deep Learning Toolbox) для получения дополнительной информации.

  • "inceptionresnetv2" - См. inceptionresnetv2 (Deep Learning Toolbox) для получения дополнительной информации.

  • "inceptionv3" - См. inceptionv3 (Deep Learning Toolbox) для получения дополнительной информации.

  • "mobilenetv2" - См. mobilenetv2 (Deep Learning Toolbox) для получения дополнительной информации.

  • "resnet18" - См. resnet18 (Deep Learning Toolbox) для получения дополнительной информации.

  • "resnet50" - См. resnet50 (Deep Learning Toolbox) для получения дополнительной информации.

  • "resnet101" - См. resnet101 (Deep Learning Toolbox) для получения дополнительной информации.

  • "squeezenet" - См. squeezenet (Deep Learning Toolbox) для получения дополнительной информации.

  • "vgg16" - См. vgg16 (Deep Learning Toolbox) для получения дополнительной информации.

  • "vgg19" - См. vgg19 (Deep Learning Toolbox) для получения дополнительной информации.

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

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

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

свернуть все

Сеть энкодера, возвращается как dlnetwork (Deep Learning Toolbox) объект. Сеть имеет depth различные пространственные разрешения. Конечным слоем сети энкодера является слой, который приходит непосредственно перед следующей операцией понижающей дискретизации предварительно обученной сети.

Имена слоев в сетевом net которые приходят непосредственно перед операциями понижающей дискретизации, возвращаются как строковый вектор.

Введенный в R2021a