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

조회 수: 8 (최근 30일)
陸
2022년 11월 6일
이동: 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일
이동: Kojiro Saito 2022년 11월 7일
実装できました!ありがとうございます!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 イメージを使用した深層学習에 대해 자세히 알아보기

제품


릴리스

R2022b

Community Treasure Hunt

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

Start Hunting!