メインコンテンツ

pretrainedEncoderNetwork

事前学習済みネットワークからの符号化器ネットワークの作成

R2021a 以降

説明

net = pretrainedEncoderNetwork(networkName,depth) は、事前学習済みネットワーク networkName から符号化器ネットワーク net を作成します。符号化器ネットワークはダウンサンプリング演算を depth 回実行します。

この関数には Deep Learning Toolbox™ が必要です。

[net,outputNames] = pretrainedEncoderNetwork(networkName,depth) は、ダウンサンプリング演算の直前に配置される活性化層の名前 outputNames も返します。これらの活性化は、特定の空間解像度またはスケールにおける対象の特徴に相当します。

すべて折りたたむ

SqueezeNet 事前学習済みネットワークに基づいて、3 つのダウンサンプリング演算を使用する符号化器を作成します。

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

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

  View summary with summary.

符号化器ネットワークを表示します。

analyzeNetwork(encoderNet)

事前学習済みの GoogLeNet ネットワークから、4 つのダウンサンプリング演算をもつ GAN 符号化器ネットワークを作成します。

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);

復号化器ブロック内のチャネル数を、各活性化の 3 番目のチャネルの長さとして決定します。

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

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: [139×1 nnet.cnn.layer.Layer]
    Connections: [167×2 table]
     Learnables: [116×3 table]
          State: [0×3 table]
     InputNames: {'data'}
    OutputNames: {'encoderDecoderFinalConvLayer'}
    Initialized: 1

  View summary with summary.

ネットワークを表示します。

analyzeNetwork(net)

入力引数

すべて折りたたむ

事前学習済みネットワークの名前。次のいずれかの string 値として指定します。選択した事前学習済みネットワークに関連付けられたアドオンをインストールしなければなりません。

  • "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 分の 1 にダウンサンプリングします。事前学習済みネットワークの深さを超える深さは指定できません。

出力引数

すべて折りたたむ

符号化器ネットワーク。dlnetwork (Deep Learning Toolbox) オブジェクトとして返されます。ネットワークは depth ごとに異なる空間解像度をもちます。符号化器ネットワークの最終層は、事前学習済みネットワークの次のダウンサンプリング演算の直前に位置する層になります。

ダウンサンプリング演算の直前に位置するネットワーク net 内の層の名前。string ベクトルとして返されます。

バージョン履歴

R2021a で導入