学習モデルを任意の画像に適応したい

3 ビュー (過去 30 日間)
陸
2022 年 11 月 6 日
Moved: Kojiro Saito 2022 年 11 月 7 日
今回実装したいものは、任意の画像を学習モデルに適応し、その精度・結果を確認したいです。
モデルはAlexNetを用いた転移学習で、画像分類を行うものです。
学習データと検証データの割合は7:3で、精度は93%程で検証用データの出力結果は正確に画像分類できています。
そこで、検証用データとは関係なく、全く別の画像fileにこのモデルを適応し、画像分類を行うことは可能でしょうか?
以下、転移学習を実装したソースコードになります。MathWorks公式のサンプルコードを用いて実装を行いました。
unzip('sample (3).zip');
imds = imageDatastore('sample', ...
'IncludeSubfolders',true, ...
'LabelSource','foldernames');
[imdsTrain,imdsValidation] = splitEachLabel(imds,0.7,'randomized');
numTrainImages = numel(imdsTrain.Labels);
idx = randperm(numTrainImages,16);
figure
for i = 1:16
subplot(4,4,i)
I = readimage(imdsTrain,idx(i));
imshow(I)
end
net = alexnet;
analyzeNetwork(net)
inputSize = net.Layers(1).InputSize;
layersTransfer = net.Layers(1:end-3);
numClasses = numel(categories(imdsTrain.Labels));
layers = [
layersTransfer
fullyConnectedLayer(numClasses,'WeightLearnRateFactor',20,'BiasLearnRateFactor',20)
softmaxLayer
classificationLayer];
pixelRange = [-30 30];
imageAugmenter = imageDataAugmenter( ...
'RandXReflection',true, ...
'RandXTranslation',pixelRange, ...
'RandYTranslation',pixelRange);
augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain, ...
'DataAugmentation',imageAugmenter, ...
'ColorPreprocessing','gray2rgb');
augimdsValidation = augmentedImageDatastore(inputSize(1:2),imdsValidation, ...
'ColorPreprocessing','gray2rgb');
options = trainingOptions('sgdm', ...
'MiniBatchSize',10, ...
'MaxEpochs',6, ...
'InitialLearnRate',1e-4, ...
'Shuffle','every-epoch', ...
'ValidationData',augimdsValidation, ...
'ValidationFrequency',3, ...
'Verbose',false, ...
'Plots','training-progress');
netTransfer = trainNetwork(augimdsTrain,layers,options);
[YPred,scores] = classify(netTransfer,augimdsValidation);
idx = randperm(numel(imdsValidation.Files),4);
figure
for i = 1:4
subplot(2,2,i)
I = readimage(imdsValidation,idx(i));
imshow(I)
label = YPred(idx(i));
title(string(label));
end
YValidation = imdsValidation.Labels;
accuracy = mean(YPred == YValidation);

採用された回答

Kojiro Saito
Kojiro Saito 2022 年 11 月 7 日
編集済み: Kojiro Saito 2022 年 11 月 7 日
新しい画像ファイルに適用することも可能です。
MATLABのワークスペースがクリアされても使えるように、まず学習済みのモデルをファイルに保存します。
save('netTransfer.mat', 'netTransfer')
netTransfer.matというファイルにモデルが保存されます。
matファイルからモデルをloadで読み込み、新しい画像ファイルをimageDatastoreで読み込みます。ここではnewというフォルダに画像が入っている前提です。
augmentedImageDatastoreで画像の前処理を行い、classifyで分類します。
% 学習済みモデルの読み込み
load('netTransfer.mat')
% 新しい画像ファイルの読み込み
imds = imageDatastore('new');
% または画像ファイルを指定するでもOK
% imds = imageDatastore('../new/image1.jpg');
% 画像のリサイズ、色の変換の前処理を実施
augImds = augmentedImageDatastore([227 227], imds, 'ColorPreprocessing','gray2rgb');
% 画像分類
[YPred,scores] = classify(netTransfer,augImds);
  1 件のコメント
陸
2022 年 11 月 7 日
Moved: Kojiro Saito 2022 年 11 月 7 日
実装できました!ありがとうございます!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Find more on イメージを使用した深層学習 in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!