[SOLVED] 代写 graph network 仮面ライダーを識別する

30 $

File Name: 代写_graph_network_仮面ライダーを識別する.zip
File Size: 536.94 KB

SKU: 8113753010 Category: Tags: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

Or Upload Your Assignment Here:


仮面ライダーを識別する
目次
概要……………………………………………………………………………………………………………………………………………………..1 データ…………………………………………………………………………………………………………………………………………………. 1 手法……………………………………………………………………………………………………………………………………………………..2 結果……………………………………………………………………………………………………………………………………………………..3 考察……………………………………………………………………………………………………………………………………………………..5 結論……………………………………………………………………………………………………………………………………………………..6
概要
仮面ライダーは石ノ森章太郎原作、東映製作による特撮シリーズである。1971年から始まり、現在も続 くシリーズである。長期に渡り続いているシリーズのため、似ている仮面ライダーも出てくる。そこで今回 は、転移学習を用いて、画像から2人の似ている仮面ライダーを識別する。
データ
今回学習の対象となったのは、仮面ライダー電王と仮面ライダーウィザードである。画像は、google画像 検索から取得したものを500×500のサイズに変換して使用した。画像はそれぞれ100枚取得した。ライダー が一人だけが写っていることと、顔が正面を向いていることを取捨選択の基準とした。また、検索キーワー ドには「仮面ライダー電王」と「仮面ライダーウィザード」を使用した。以降、簡単のために仮面ライダー 電王を「電王」、仮面ライダーウィザードを「ウィザード」と表記する。
取得した画像は、フォルダDataの中にあるフォルダdenoとwizardに保存した。denoには電王の画像 が、wizardにはウィザードの画像が保存されている。これらの画像のうち、7割の画像を学習用画像とし、 残りの3割の画像を評価用画像とした。学習用画像はimdsTrain、評価用画像はimdsValidationに格納した。
unzip(‘Data.zip’);
imds = imageDatastore(‘Data’, …
‘IncludeSubfolders’,true, …
‘LabelSource’,’foldernames’);
[imdsTrain,imdsValidation] = splitEachLabel(imds,0.7,’randomized’);
確認のため、以下に画像を載せておく。左が電王で、右がウィザードである。どちらも赤を基調とした
スーツで、仮面の形も似ている。
subplot(1,2,1);
imshow(‘Data/deno/deno_03.jpg’); title(‘仮面ライダー電王’); subplot(1,2,2); imshow(‘Data/wizard/wizard_01.jpg’); title(‘仮面ライダーウィザード’);
1

手法
まず、GoogleNet の再学習を行って新しいイメージを分類するために、ネットワークの最後の 3 つの層 「loss3-classifier」、「prob」、「output」 を置き換える。
net = googlenet;
lgraph = layerGraph(net);
inputSize = net.Layers(1).InputSize;
lgraph = removeLayers(lgraph, {‘loss3-classifier’,’prob’,’output’});
numClasses = numel(categories(imdsTrain.Labels));
newLayers = [
fullyConnectedLayer(numClasses,’Name’,’fc’,…
‘WeightLearnRateFactor’,10,’BiasLearnRateFactor’,10)
softmaxLayer(‘Name’,’softmax’)
classificationLayer(‘Name’,’classoutput’)];
lgraph = addLayers(lgraph,newLayers);
lgraph = connectLayers(lgraph,’pool5-drop_7x7_s1′,’fc’);
2

次に、ネットワークの初期の層の学習率を 0 に設定する。サポート関数 freezeWeight を使用して、最初 の 110 個の層の学習率を 0 に設定し、サポート関数 createLgraphUsingConnections を使用して、すべての 層を元の順序で再結合した。
layers = lgraph.Layers;
connections = lgraph.Connections;
layers(1:110) = freezeWeights(layers(1:110));
lgraph = createLgraphUsingConnections(layers,connections);
ネットワークの学習のために、画像をランダムに反転させる拡張演算と、水平方向および垂直方向に最大 30 ピクセルだけランダムに平行移動させる拡張演算を使用した。この拡張演算を施した新しい学習用画像 はaugimdsTrain、評価用画像はaugimdsValidationにそれぞれ格納した。実際の学習にはこれらの画像を使用 する。
pixelRange = [-30 30];
imageAugmenter = imageDataAugmenter( …
‘RandXReflection’,true, …
‘RandXTranslation’,pixelRange, …
‘RandYTranslation’,pixelRange);
augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain, …
‘DataAugmentation’,imageAugmenter);
augimdsValidation = augmentedImageDatastore(inputSize(1:2),imdsValidation);
最後に、学習オプションを指定する。以下のように指定することにより、新しい層では高速に学習が行わ
れ、中間層では学習速度が低下し、凍結された初期の層では学習が行われなくなる。
options = trainingOptions(‘sgdm’, …
‘MiniBatchSize’,10, …
‘MaxEpochs’,6, …
‘InitialLearnRate’,1e-4, …
‘ValidationData’,augimdsValidation, …
‘ValidationFrequency’,3, …
‘ValidationPatience’,Inf, …
‘Verbose’,false ,…
‘Plots’,’training-progress’);
結果
以下が学習過程である。今回の学習は、2分14秒かかった。Epoch1では正確性が低かったが、Epoch2以 降では正確性は90%から100%の間を維持している。最終的に、正確性は93.33%になった。
net = trainNetwork(augimdsTrain,lgraph,options);
3

以下に4枚の画像を表示する。タイトルは、予測ラベルと予測確率を表している。ラベルは、電王は 「deno」、ウィザードは「wizard」となっている。
[YPred,probs] = classify(net,augimdsValidation);
idx = randperm(numel(imdsValidation.Files),4);
for i = 1:4
subplot(2,2,i)
I = readimage(imdsValidation,idx(i));
imshow(I)
label = YPred(idx(i));
title(string(label) + “, ” + num2str(100*max(probs(idx(i),:)),3) + “%”);
end
4

考察
今回の学習では、正確性は93.33%だった。つまり、6.67%の確率で誤った解答をしてしまうという結果 だった。実際、電王の画像を66.7%の確率でウィザードだと認識してしまっている。
このような結果になった理由として考えられる原因が一つある。それは、全ての画像を500×500のサイズ に変換してしまったからである。画像は、全てgoogle画像検索から取得した。そのため、元の画像はそれぞ れ異なるものだった。学習のために、全ての画像サイズを統一させる必要があったのである。しかしそうす ると、次のように被写体が縦に長くなったり、横に長くなったりしてしまう。
subplot(2,2,1);
imshow(‘Data/deno/deno_07.jpg’); title(‘電王(横長)’);
subplot(2,2,2); imshow(‘Data/deno/deno_84.jpg’); title(‘電王(縦長)’);
subplot(2,2,3); imshow(‘Data/wizard/wizard_02.jpg’); title(‘ウィザード(横長)’); subplot(2,2,4); imshow(‘Data/wizard/wizard_51.jpg’); title(‘ウィザード(縦長)’);
5

今回の学習では、そのように被写体が変形してしまった画像は、電王とウィザードでそれぞれ5枚程度存在 した。つまり、全体の約5%の画像が大きく変形してしまったということである。これは、今回の学習の誤 答率6.67%に近い。
結論
以上の結果から、次の結論が得られる。それは、転移学習をさせるためには、画像をそのまま変換する
のは好ましくないということである。学習のためには、画像サイズを統一させる必要がある。しかし、画像
をそのまま変換すると、今回のように被写体が縦に長くなったり、横に長くなったりしてしまう。これは、
正確性の低下につながる。そのため、画像サイズを統一させる時、被写体が変形しないようにする必要があ
る。トリミングなどを利用して、画像を一部切り取るなどすれば、被写体を変形させずに画像の変換ができ
る。このような前処理を施せば、正確性の向上が期待される。
6

Reviews

There are no reviews yet.

Only logged in customers who have purchased this product may leave a review.

Shopping Cart
[SOLVED] 代写 graph network 仮面ライダーを識別する
30 $