이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

전이 학습 시작하기

이 예제에서는 사전 훈련된 컨벌루션 신경망인 ResNet-18이 새로운 영상 세트를 분류하도록 전이 학습을 사용하여 다시 훈련시키는 방법을 보여줍니다. 이 예제를 통해 MATLAB®에서 딥러닝을 사용하는 것이 얼마나 간단한지 알 수 있습니다.

전이 학습은 딥러닝 응용 분야에서 널리 사용됩니다. 사전 훈련된 네트워크를 새로운 작업을 학습하기 위한 출발점으로 사용할 수 있습니다. 전이 학습으로 네트워크를 미세 조정하는 것은 무작위로 초기화된 가중치를 사용하여 네트워크를 처음부터 훈련시키는 것보다 일반적으로 훨씬 더 빠르고 쉽습니다. 학습된 특징을 보다 적은 개수의 훈련 영상을 사용하여 새로운 작업으로 빠르게 전이할 수 있습니다.

데이터 불러오기

새 영상의 압축을 풀고 영상 데이터저장소로 불러옵니다. 데이터를 훈련 데이터 세트와 검증 데이터 세트로 나눕니다. 영상의 70%를 훈련용으로 사용하고 30%를 검증용으로 사용합니다.

unzip('MerchData.zip');
imds = imageDatastore('MerchData','IncludeSubfolders',true,'LabelSource','foldernames');
[imdsTrain,imdsValidation] = splitEachLabel(imds,0.7,'randomized');

사전 훈련된 네트워크 불러오기

사전 훈련된 ResNet-18 네트워크를 불러옵니다. Deep Learning Toolbox™ Model for ResNet-18 Network가 설치되어 있지 않으면 이를 다운로드할 수 있는 링크가 제공됩니다. 1백만 개가 넘는 영상에 대해 훈련된 ResNet-18은 영상을 키보드, 커피 머그잔, 연필, 각종 동물 등 1,000가지 사물 범주로 분류할 수 있습니다. 이 네트워크는 다양한 영상을 대표하는 다양한 특징을 학습했습니다. 이 네트워크는 영상을 입력값으로 받아서 영상에 있는 사물에 대한 레이블과 각 사물 범주의 확률을 출력합니다. 사전 훈련된 다른 네트워크를 사용하여 전이 학습을 수행하려면 새로운 영상을 분류하도록 딥러닝 신경망 훈련시키기 항목을 참조하십시오.

net = resnet18;

마지막 계층 바꾸기

ResNet-18이 새 영상을 분류하도록 다시 훈련시키려면 네트워크의 마지막 완전 연결 계층과 마지막 분류 계층을 바꾸십시오. ResNet-18에서 이러한 계층의 이름은 각각 'fc1000''ClassificationLayer_predictions'입니다. 새로운 완전 연결 계층이 새 데이터 세트의 클래스 개수(이 예제에서는 5)와 동일한 크기를 갖도록 설정합니다. 전이된 계층보다 새로운 계층에서 더 빠르게 학습할 수 있도록 하려면 완전 연결 계층의 학습률 인자 값을 높이십시오.

numClasses = numel(categories(imdsTrain.Labels));
lgraph = layerGraph(net);

newFCLayer = fullyConnectedLayer(numClasses,'Name','new_fc','WeightLearnRateFactor',10,'BiasLearnRateFactor',10);
lgraph = replaceLayer(lgraph,'fc1000',newFCLayer);

newClassLayer = classificationLayer('Name','new_classoutput');
lgraph = replaceLayer(lgraph,'ClassificationLayer_predictions',newClassLayer);

네트워크 훈련시키기

이 네트워크의 입력 영상은 크기가 224x224x3이어야 하는데 영상 데이터저장소의 영상은 이와 크기가 다릅니다. 증대 영상 데이터저장소를 사용하여 훈련 영상의 크기를 자동으로 조정합니다. 네트워크가 과적합되지 않도록 imageDataAugmenter를 사용하여 훈련 영상에 대해 추가로 수행할 증대 연산을 지정할 수도 있습니다.

inputSize = net.Layers(1).InputSize;
augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain);
augimdsValidation = augmentedImageDatastore(inputSize(1:2),imdsValidation);

미니 배치 크기와 검증 데이터를 비롯한 훈련 옵션을 지정합니다. 전이된 계층의 학습을 늦추려면 InitialLearnRate를 작은 값으로 설정하십시오. 이전 단계에서는 새로운 마지막 계층의 학습 속도를 높이기 위해 완전 연결 계층의 학습률 인자를 증가시켰습니다. 이러한 조합으로 학습률을 설정하면 새로운 계층에서는 학습이 빨라지고 나머지 계층에서는 학습이 느려집니다.

options = trainingOptions('sgdm', ...
    'MiniBatchSize',10, ...
    'MaxEpochs',8, ...
    'InitialLearnRate',1e-4, ...
    'Shuffle','every-epoch', ...
    'ValidationData',augimdsValidation, ...
    'ValidationFrequency',5, ...
    'Verbose',false, ...
    'Plots','training-progress');

훈련 데이터를 사용하여 네트워크를 훈련시킵니다. 기본적으로 trainNetwork는 GPU를 사용할 수 있으면 GPU를 사용합니다(Parallel Computing Toolbox™와 Compute Capability 3.0 이상의 CUDA® 지원 GPU 필요). GPU를 사용할 수 없으면 CPU를 사용합니다.

trainedNet = trainNetwork(augimdsTrain,lgraph,options);

검증 영상 분류하기

미세 조정된 네트워크를 사용하여 검증 영상을 분류한 다음 분류 정확도를 계산합니다.

YPred = classify(trainedNet,augimdsValidation);
accuracy = mean(YPred == imdsValidation.Labels)
accuracy = 1

자세히 알아보기

사전 훈련된 다른 네트워크를 사용하여 전이 학습을 수행하려면 새로운 영상을 분류하도록 딥러닝 신경망 훈련시키기 항목을 참조하십시오. 심층 네트워크 디자이너 앱을 사용하여 전이 학습을 수행해 보려면 심층 네트워크 디자이너를 사용한 전이 학습 항목을 참조하십시오. 사전 훈련된 네트워크의 목록 및 비교한 내용을 보려면 사전 훈련된 심층 신경망 항목을 참조하십시오.

참고 문헌

[1] Krizhevsky, Alex, Ilya Sutskever, and Geoffrey E. Hinton. "ImageNet Classification with Deep Convolutional Neural Networks." Advances in neural information processing systems. 2012.

[2] BVLC AlexNet Model. https://github.com/BVLC/caffe/tree/master/models/bvlc_alexnet

참고 항목

| |

관련 항목