主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

YOLO v2意思オブジェクト検出ネットワークの作成

この例では,事前学習済みのMobileNet v2ネットワークを変更してYOLO v2意思オブジェクト検出ネットワークを作成する方法を示します。

事前学習済みネットワークをYOLO v2意思ネットワークに変換する手順は,イメージ分類の転移学習手順に似ています。

  1. 事前学習済みのネットワークを読み込みます。

  2. 事前学習済みのネットワークから特徴抽出に使用する層を選択します。

  3. 特徴抽出層の後のすべての層を削除します。

  4. オブジェクト検出タスクをサポートする新しい層を追加します。

事前学習済みのネットワークの読み込み

mobilenetv2を使用して事前学習済みのMobileNet v2ネットワークを読み込みます。これにはMobileNet v2网络™サポートパッケージの深度学习工具箱モデルが必要です。このサポートパッケージがインストールされていない場合,関数によってダウンロード用リンクが表示されます。ネットワークを読み込んだ後,そのネットワークをlayerGraphオブジェクトに変換して,層を操作できるようにします。

网= mobilenetv2 ();lgraph = layerGraph(净);

ネットワーク入力サイズの更新

学習データの要件を満たすよう,ネットワーク入力サイズを更新します。たとえば,学習データが300 x 300のRGBイメージだと仮定します。入力サイズを設定します。

imageInputSize = [300 300 3];

次に,元の層と同じ名前で,新しいイメージ入力層を作成します。

imgLayer = imageInputLayer (imageInputSize,“名称”“input_1”
imgLayer = ImageInputLayer with properties: Name: 'input_1' InputSize: [300 300 3] Hyperparameters dataugmentation: 'none' Normalization: 'zerocenter' NormalizationDimension: 'auto' Mean: []

古いイメージ入力層を,新しいイメージ入力層に置き換えます。

lgraph = replaceLayer (lgraph,“input_1”, imgLayer);

特徴抽出層の選択

YOLO v2意思の特徴抽出層は,出力特徴幅と高さが入力イメージより8 ~ 16倍小さいと最も効果的です。この量のダウンサンプリングは空間分解能と出力される特徴の品質とのトレードオフです。関数analyzeNetworkまたはディープネットワークデザイナーアプリを使用して,ネットワーク内の層の出力サイズを決定できます。最適な特徴抽出層の選択には,実証的評価が必要であることに注意してください。

特徴抽出層を“block_12_add”に設定します。この層の出力サイズは,300 x 300という入力イメージサイズの16分の1です。

featureExtractionLayer =“block_12_add”

特徴抽出層の後の層の削除

次に,特徴抽出層の後の層を削除します。そのためには,ネットワークをディープネットワークデザイナーアプリへインポートし,層を手動で削除し,変更済みのネットワークをワークスペースへエクスポートします。

この例では,変更済みのネットワークを読み込みます。この例にサポートファイルとして追加してあったネットワークです。

修改=负载(“mobilenetv2Block12Add.mat”);lgraph = modified.mobilenetv2Block12Add;

YOLO v2意思検出サブネットワークの作成

検出サブネットワークは直列で接続された畳み込み層,ReLU層,バッチ正規化層のグループで構成されます。これらの層にyolov2TransformLayeryolov2OutputLayerが続きます。

まず,直列で接続された畳み込み層,ReLU層,バッチ正規化層のグループを2つ作成します。畳み込み層のフィルターサイズを3 x 3に設定し,特徴抽出層の出力に含まれるチャネルの数に合わせてフィルター数を設定します。畳み込み層のパディングに“相同”を指定して,入力のサイズを保持します。

filterSize = [3 3];numFilters = 96;detectionLayers =[卷积2dlayer (filterSize,numFilters,“名称”“yolov2Conv1”“填充”“相同”“WeightsInitializer”@(深圳)randn(深圳)* 0.01)batchNormalizationLayer (“名称”“yolov2Batch1”) reluLayer (“名称”“yolov2Relu1”) convolution2dLayer (filterSize numFilters,“名称”“yolov2Conv2”“填充”“相同”“WeightsInitializer”@(深圳)randn(深圳)* 0.01)batchNormalizationLayer (“名称”“yolov2Batch2”) reluLayer (“名称”“yolov2Relu2”)]
detectionLayers = 6x1 Layer array with layers:1' yolov2Conv1' Convolution 96 3x3 convolutions with stride [1 1] and padding 'same' 2' yolov2Batch1' Batch Normalization Batch Normalization 3 'yolov2Relu1' ReLU ReLU 4 'yolov2Conv2' Convolution 96 3x3 convolutions with stride [1 1] and padding 'same' 5 'yolov2Batch2' Batch Normalization Batch Normalization 6 'yolov2Relu2' ReLU ReLU

次に,検出サブネットワークの最後の部分を作成します。この部分には畳み込み層があり,さらにyolov2TransformLayeryolov2OutputLayerが続きます。畳み込み層の出力は,各アンカーボックスについて以下を予測します。

  1. オブジェクトクラスの確率。

  2. xとyの位置のオフセット。

  3. 幅と高さのオフセット。

アンカーボックスとクラス数を指定し,畳み込み層のフィルター数を計算します。

numClasses = 5;anchorBoxes = [16 16 32 16];numAnchors =大小(anchorBoxes, 1);numPredictionsPerAnchor = 5;numFiltersInLastConvLayer = numAnchors * (numClasses + numPredictionsPerAnchor);

convolution2dLayeryolov2TransformLayer,およびyolov2OutputLayerを検出サブネットワークに追加します。

detectionLayers = [detectionLayers卷积2dlayer (1,numFiltersInLastConvLayer,“名称”“yolov2ClassConv”...“WeightsInitializer”@(深圳)randn(深圳)* 0.01)yolov2TransformLayer (numAnchors,“名称”“yolov2Transform”) yolov2OutputLayer (anchorBoxes“名称”“yolov2OutputLayer”)]
detectionLayers = 9x1 Layer array with layers:1' yolov2Conv1' Convolution 96 3x3 convolutions with stride [1 1] and padding 'same' 2' yolov2Batch1' Batch Normalization Batch Normalization 3 'yolov2Relu1' ReLU ReLU 4 'yolov2Conv2' Convolution 96 3x3 convolutions with stride [1 1] and padding 'same' 5 'yolov2Batch2' Batch Normalization Batch Normalization 6 'yolov2Relu2' ReLU ReLU 7'yolov2ClassConv' Convolution 20 1x1卷积与stride[1 1]和填充[0 0 0]8 'yolov2Transform' YOLO v2转换层。使用2个锚点变换图层。9 'yolov2OutputLayer' YOLO v2Output YOLO v2输出2个锚。

YOLO v2意思検出ネットワークの完了

特徴抽出ネットワークに検出サブネットワークを接続します。

lgraph = addLayers (lgraph detectionLayers);lgraph = connectLayers (lgraph featureExtractionLayer,“yolov2Conv1”);

analyzeNetwork (lgraph)を使用してネットワークを確認してから,関数trainYOLOv2ObjectDetectorを使用してYOLO v2意思オブジェクト検出器に学習させます。