MATLAB × 심층 학습 × 현미적외선 분광법

10763 단어 DeepLearningCNNmatlab

소개



· 이것은 분석 장치의 측정 데이터 처리 이야기입니다.
・기기 분석의 데이터 처리를 하고 있는 분, 앞으로 할 예정의 분, 분석 업계와는 무관하게 흥미를 가져 주신 여러분에게, 참고가 되면 기쁩니다.
・여기에서의 분석 기기는 「현미 적외 분광 광도계(이하, 현미 FTIR)」. 이 계측 데이터를 MATLAB에서 심층 학습해 보면 의외로 좋은 분류 정밀도가 나왔다는 내용입니다.

(!) 제목에 있는 「현미 적외 분광법」이란, 이 현미 FTIR를 사용한 분석 수법입니다(마지막에 보충 있음)

MATLAB 환경



MATLAB R2018b(개발 당시. R2019a에서도 동작)
+Deep Learning Toolbox
+ Statistics and Machine Learning Toolbox
(+Parallel Computing Toolbox (있는 경우 처리 가속화))

이니셔티브



생각한 것 : 「심층 학습」과 「현미 적외선 분광법」의 맛있는 코도리



외모는 비슷하지만 완전히 다른 것을 구분하기 위해서 「심층 학습」과 「현미적외분광법」을 사용할 수 있으면 좋았습니다. 그래서, 우선, 이러한 장점·단점을 표에 정리해 보았습니다.



 하면, 2자의 관계는 장점·단점을 상호 보완하고 있는 것처럼 보입니다. . .
거기서 양쪽의 맛있는 코도리를 해, 「RGB 화상(=가시 영역의 데이터)을 심층 학습시키도록, 적외 영역의 현미 FTIR의 계측 데이터를 심층 학습」할 수 없을까 생각했습니다.

구체적으로 시도한 것



시판의 판초코 2종류의 계측 데이터를, 심층 학습으로 분류할 수 있을까 시험해 보았습니다.

사진은 장치에 바르기 전 판 초콜릿.

포인트



RGB 이미지는 R, G, B의 3 채널.
이번에는 적외선 파장 영역, 236파수의 데이터. 이것을 236 채널의 이미지 데이터로 파악해, 심층 학습에.
실제로는 입구의 사이즈를 3에서 236으로 한 만큼(↓의 코드의*********로 끼운 부분).

코드


%% イメージデータストアの読み込み
% 次の「参考にしたコード」URL参照
load imds

%% データ(ラベル)を分割
numTrainingFiles = 0.8;%学習用 
numTestFiles = 0.1;%検証用(学習時)
[imdsTrain,imdsTest,imdsValid] = splitEachLabel(imds,numTrainingFiles,numTestFiles,'randomize');

%% ネットワーク構造の設定
imageSize = [16 16]; % 学習イメージ

%****************************
% inputSize = [imageSize 3]; %RGBの3チャンネル
inputSize = [imageSize 236]; %今回は236チャンネル(赤外領域236波数)
%****************************

numClasses = 2;%チョコ2種類

%% ネットワーク構造の定義
filterSize = 2; %畳み込みの大きさ
numFilters = 6; %畳み込みの数

layers = [
imageInputLayer(inputSize);

%畳み込み・正規化・ReLU・最大プールを3セット:
convolution2dLayer(filterSize,numFilters,'Padding',1,'Stride',1);
batchNormalizationLayer()
reluLayer()
maxPooling2dLayer([2 2],'stride',2)

convolution2dLayer(filterSize,numFilters,'Padding',1,'Stride',1);
batchNormalizationLayer
reluLayer()
maxPooling2dLayer([2 2],'stride',2)

convolution2dLayer(filterSize,numFilters,'Padding',1,'Stride',1);
batchNormalizationLayer
reluLayer()
maxPooling2dLayer([2 2],'stride',2)

%最後の3層
fullyConnectedLayer(numClasses);
softmaxLayer()
classificationLayer()

];

%% 学習オプションの設定
opts = trainingOptions('adam', ... 
'InitialLearnRate',0.001, ...
'MaxEpochs',200, ...
'MiniBatchSize',24,... 
'Plots', 'training-progress',...
'Shuffle','every-epoch',...
'ValidationData',imdsValid);

%% 学習
net = trainNetwork(imdsTrain,layers,opts);

%% 精度確認
% 未使用データ(imdsValid)を用いてnetの精度を確認
YPred = classify(net,imdsValid);
YValid = imdsValid.Labels;

%精度
accuracy = sum(YPred == YValid)/numel(YValid);

figure
plotconfusion(YValid,YPred) %混合行列表示

%% 結果の保存
saveas(gcf,'result.fig')%混合行列
save ('choco2Net','net')% 学習済みネット

참고로 한 코드



MATLAB 문서에 있었던 매우 유용한 샘플 코드. 알맞은 해설 첨부.
분류를 위한 간단한 심층 학습 네트워크 생성

결과



20회 했습니다. 90% 이상이라는 분류 정밀도가 나왔습니다.



요약



현미 FTIR의 계측 데이터를 MATLAB에서 빨리 심층 학습할 수 있었습니다. 분류 정밀도도 무사히 90% 나왔습니다.
이번은 정체를 알고 있는 초콜렛이었지만, 이것을 응용해, 어쩐지 모르는 것이 와도 「이것은 00사의 제품△△이다!」라고 특정할 수 있게 되면 좋겠다, 등 라고 생각하거나 합니다.
이상입니다. 여기까지 읽어 주셔서 감사합니다.

(보충) 현미적외선 분광법에 대하여



샘플 내의 성분 분포의 평가 등을 목적으로 폭넓은 분야에서 응용되고 있다.
(광학) 현미경으로 가시 이미지를 얻을 수 있도록 현미경 FTIR은 적외선 이미지를 얻을 수 있습니다.
※적외 스펙트럼등의 이야기는 여기에서는 자숙.

적외선 이미지



같은 파수에서의 강도 분포. 파수의 수=매수(예, 이번은 236파수이므로 236장 있다).

좋은 웹페이지 즐겨찾기