このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
この例では,事前学習済みの畳み込みニューラルネットワークから学習済みのイメージの特徴を抽出し,これらの特徴を使用してイメージ分類器に学習させる方法を説明します。特徴抽出は,事前学習済みの深いネットワークの表現能力を活用できる最も簡単で時間のかからない方法です。たとえば,抽出した特徴に対してfitcecoc.
(统计和机器学习的工具箱™)を使用してサポートベクターマシン(SVM)に学習させることができます。特徴抽出が必要とするものはデータを一巡する1つのパスのみであるため,ネットワークの学習を加速するためのGPUがない場合,これは適切な開始点となります。
サンプルイメージを解凍してイメージデータストアとして読み込みます。imageageAtastore.
は,フォルダー名に基于てに自动的にラベルを付け,データをImageDatastore
オブジェクトとして格納します。イメージデータストアを使用すると,メモリに収まらないデータを含む大きなイメージデータを格納できます。データを70%の学習データと30%のテストデータに分割します。
解压缩('merchdata.zip');imds = imageageatastore(“MerchData”,'insertumbfolders',真的,'labelsource',“foldernames”);[imdsTrain, imdsTest] = splitEachLabel (imd, 0.7,'随机');
このとき,この非常に小さなデータセットは,55个の学习イメージ20个の検证イメージが纳れていますます表示れをを表示表示ますますます。
numtrainimages = numel(imdstrain.labels);idx = randperm(numtrainimages,16);数字为i = 1:16 subplot(4,4,i) i = readimage(imdsTrain,idx(i));imshow(我)结束
事前学習済みのResNet-18ネットワークを読み込みます。深度学习工具箱模型ResNet-18网络サポートパッケージがインストールされていない場合,ダウンロード用リンクが表示されます。100年ResNet-18は万枚を超えるイメージについて学習済みであり,イメージを1000個のオブジェクトカテゴリ(キーボード,マウス,鉛筆,多くの動物など)に分類できます。結果として,このモデルは広範囲のイメージに対する豊富な特徴表現を学習しています。
网= resnet18
net = DAGNetwork with properties: Layers: [71x1 net.cnn.layer. layer] Connections: [78x2 table] InputNames: {'data'} OutputNames: {'ClassificationLayer_predictions'}
。
inputSize = net.Layers (1) .InputSize;analyzeNetwork(净)
ネットワークにはサイズが224 x 224 x 3の入力イメージが必要ですが,イメージデータストアにあるイメージのサイズは異なります。学習およびテストイメージのサイズをネットワークへの入力前に自動的に変更するには,拡張イメージデータストアを作成して,目的のイメージサイズを指定し,これらのデータストアを激活
のの力量引ますますし。
augimdsTrain = augmentedImageDatastore (inputSize (1:2), imdsTrain);augimdsTest = augmentedImageDatastore (inputSize (1:2), imdsTest);
ネットワークは,入力イメージの阶层を构筑ます。深い深いにはます构筑层は,初ののの低レベル特徴を使しし构筑たたたた,高度レベルのが含まれ。学习イメージとイメージイメージが。特价表现を取得するには,ネットワークの最后のグローバルプーリング层激活
で'pool5',
を使用します。グローバルプーリング層は,すべての空間位置に対して入力の特徴をプーリングします。512年合計で個の特徴が得られます。
层=“pool5”;featuresTrain =激活(净、augimdsTrain层,“OutputAs”,“行”);featuresTest =激活(净、augimdsTest层,“OutputAs”,“行”);谁featuresTrain
名称大小字节类属性特性55x512 112640单
学習データおよびテストデータからクラスラベルを抽出します。
YTrain = imdsTrain.Labels;欧美= imdsTest.Labels;
学習イメージから抽出された特徴を予測子変数として使用し,fitcecoc.
(统计和机器学习工具箱)をを用してマルチクラスサポートマシン(svm)をあてはめます。
分类器= fitcecoc (featuresTrain YTrain);
テストイメージから抽出された特徴を使用する学習済みのSVMモデルで,テストイメージを分類します。
Ypred =预测(分类器,FeatureStest);
4個のサンプルテストイメージと,その予測ラベルを表示します。
Idx = [1 5 10 15];数字为i = 1:numel(idx) subplot(2,2,i) i = readimage(imdsTest,idx(i));标签= YPred (idx (i));imshow (I)标题(char(标签)结束
テストセットに対する分類精度を計算します。精度とは,ネットワークによって予測が正しく行われるラベルの割合です。
精度=平均值(YPred == YTest)
精度= 1
ネットワークの初期の層から特徴を抽出し,これらの特徴について分類器に学習させることもできます。通常,初期の層ではより少数の浅い特徴が抽出され,空間分解能が高く,活性化の合計数が大きくなります。“res3b_relu”
層から特徴を抽出します。128年これは個の特徴を出力する最後の層であり,活性化の空間サイズは28行28列になります。
层=“res3b_relu”;featuresTrain =激活(净、augimdsTrain层);featuresTest =激活(净、augimdsTest层);谁featuresTrain
名称大小字节类属性属性FeatureStrain 28x28x128x55 22077440单个
この例の最初の部分で使用した抽出された特徴は,グローバルプーリング層によってすべての空間位置に対してプーリングされています。初期の層で特徴を抽出する際に同じ結果を得るには,すべての空間位置に対して活性化を手動で平均化します。N
——- - - - - -
C
(Nは観測値の数でCは特徴の数)の形式で特徴を取得するには,大きさが1の次元を削除し転置します。
FeatureStrain =挤压(平均值(featurestrain,[1 2])';FeatureStest =挤压(平均值(FeatureStest,[1 2])';谁featuresTrain
名称大小字节类属性属性FeatureStrain 55x128 28160单一
浅い特徴についてSVM分類器に学習させます。テスト精度を計算します。
分类器= fitcecoc (featuresTrain YTrain);YPred =预测(分类器,featuresTest);精度=平均值(YPred == YTest)
精度= 0.9500.
学習済みのSVMはいずれも精度が高くなります。特徴抽出を使用しても十分な精度が得られない場合,代わりに転移学習を試してください。例については,新しいイメージを分類するための深層学習ネットワークの学習を参照してください。事前学習済みのネットワークの一覧と比較については,事前学习済みの深层深层ネットワークネットワークを参照してください。
fitcecoc.
(统计学和机器学习工具箱)|resnet50.