exponenta event banner

pretrainedEncoderNetwork

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

Описание

пример

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

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

пример

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

Примеры

свернуть все

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

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)

Создайте сеть кодера 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)

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

свернуть все

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

  • "alexnet" - См. alexnet (инструментарий глубокого обучения) для получения дополнительной информации.

  • "googlenet" - См. googlenet (инструментарий глубокого обучения) для получения дополнительной информации.

  • "inceptionresnetv2" - См. inceptionresnetv2 (инструментарий глубокого обучения) для получения дополнительной информации.

  • "inceptionv3" - См. inceptionv3 (инструментарий глубокого обучения) для получения дополнительной информации.

  • "mobilenetv2" - См. mobilenetv2 (инструментарий глубокого обучения) для получения дополнительной информации.

  • "resnet18" - См. resnet18 (инструментарий глубокого обучения) для получения дополнительной информации.

  • "resnet50" - См. resnet50 (инструментарий глубокого обучения) для получения дополнительной информации.

  • "resnet101" - См. resnet101 (инструментарий глубокого обучения) для получения дополнительной информации.

  • "squeezenet" - См. squeezenet (инструментарий глубокого обучения) для получения дополнительной информации.

  • "vgg16" - См. vgg16 (инструментарий глубокого обучения) для получения дополнительной информации.

  • "vgg19" - См. vgg19 (инструментарий глубокого обучения) для получения дополнительной информации.

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

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

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

свернуть все

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

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

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