Main Content

간단한 영상 분류 신경망 만들기

이 예제에서는 딥러닝 분류를 수행하는 간단한 컨벌루션 신경망을 만들고 훈련시키는 방법을 보여줍니다. 컨벌루션 신경망은 딥러닝 분야의 필수 툴로서, 특히 영상 인식에 적합합니다.

이 예제에서는 다음을 수행하는 방법을 보여줍니다.

  • 영상 데이터를 불러옵니다.

  • 신경망 아키텍처를 정의합니다.

  • 훈련 옵션을 지정합니다.

  • 신경망을 훈련시킵니다.

  • 새로운 데이터의 레이블을 예측하고 분류 정확도를 계산합니다.

간단한 영상 분류 신경망을 대화형 방식으로 만들고 훈련시키는 방법을 보여주는 예제는 영상 분류 시작하기 항목을 참조하십시오.

데이터 불러오기

샘플 숫자 데이터의 압축을 풀고 영상 데이터저장소를 만듭니다. imageDatastore 함수는 폴더 이름을 기준으로 영상에 자동으로 레이블을 지정합니다.

unzip("DigitsData.zip")
imds = imageDatastore("DigitsData", ...
    IncludeSubfolders=true, ...
    LabelSource="foldernames");

훈련 세트의 각 범주에 750개 영상이 포함되고 검증 세트에 각 레이블의 나머지 영상이 포함되도록 데이터를 훈련 데이터 세트와 검증 데이터 세트로 나눕니다. splitEachLabel은 영상 데이터저장소를 훈련 및 검증을 위한 2개의 새로운 데이터저장소로 분할합니다.

numTrainFiles = 750;
[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,"randomized");

클래스 이름을 확인합니다.

classNames = categories(imdsTrain.Labels)
classNames = 10x1 cell
    {'0'}
    {'1'}
    {'2'}
    {'3'}
    {'4'}
    {'5'}
    {'6'}
    {'7'}
    {'8'}
    {'9'}

신경망 아키텍처 정의하기

컨벌루션 신경망 아키텍처를 정의합니다. 신경망 입력 계층의 영상 크기와 완전 연결 계층의 클래스 개수를 지정합니다. 각 영상은 28×28×1 픽셀이고 클래스는 10개가 있습니다.

inputSize = [28 28 1];
numClasses = 10;

layers = [
    imageInputLayer(inputSize)
    convolution2dLayer(5,20)
    batchNormalizationLayer
    reluLayer
    fullyConnectedLayer(numClasses)
    softmaxLayer];

딥러닝 계층에 대한 자세한 내용은 딥러닝 계층 목록 항목을 참조하십시오.

훈련 옵션 지정하기

훈련 옵션을 지정합니다. 옵션 중에서 선택하려면 경험적 분석이 필요합니다. 실험을 실행하여 다양한 훈련 옵션 구성을 살펴보려면 Experiment Manager 앱을 사용합니다.

options = trainingOptions("sgdm", ...
    MaxEpochs=4, ...
    ValidationData=imdsValidation, ...
    ValidationFrequency=30, ...
    Plots="training-progress", ...
    Metrics="accuracy", ...
    Verbose=false);

신경망 훈련시키기

trainnet 함수를 사용하여 신경망을 훈련시킵니다. 분류에는 교차 엔트로피 손실을 사용합니다. 기본적으로 trainnet 함수는 GPU를 사용할 수 있으면 GPU를 사용합니다. GPU를 사용하려면 Parallel Computing Toolbox™ 라이선스와 지원되는 GPU 장치가 필요합니다. 지원되는 장치에 대한 자세한 내용은 GPU 연산 요구 사항 (Parallel Computing Toolbox) 항목을 참조하십시오. GPU를 사용할 수 없는 경우, 함수는 CPU를 사용합니다. 실행 환경을 지정하려면 ExecutionEnvironment 훈련 옵션을 사용하십시오.

net = trainnet(imdsTrain,layers,"crossentropy",options);

신경망 테스트하기

신경망을 테스트하기 위해 검증 데이터를 분류한 후 분류 정확도를 계산합니다.

minibatchpredict 함수를 사용하여 예측을 수행하고 scores2label 함수를 사용하여 점수를 레이블로 변환합니다. 기본적으로 minibatchpredict 함수는 GPU를 사용할 수 있으면 GPU를 사용합니다.

scores = minibatchpredict(net,imdsValidation);
YValidation = scores2label(scores,classNames);

분류 정확도를 계산합니다. 정확도는 올바르게 예측된 레이블의 비율입니다.

TValidation = imdsValidation.Labels;
accuracy = mean(YValidation == TValidation)
accuracy = 0.9896

딥러닝의 다음 단계로 넘어가서 다른 작업에도 사전 훈련된 신경망을 사용해 볼 수 있습니다. 전이 학습이나 특징 추출을 사용하여 영상 데이터를 대상으로 새로운 분류 문제를 풀어 보십시오. 예제는 전이 학습을 사용하여 더 빠르게 딥러닝 시작하기사전 훈련된 신경망에서 추출한 특징을 사용하여 분류기 훈련시키기 항목을 참조하십시오. 사전 훈련된 신경망에 대한 자세한 내용은 사전 훈련된 심층 신경망 항목을 참조하십시오.

참고 항목

| |

관련 항목