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

activations

컨벌루션 신경망 계층의 활성화 결과 구하기

설명

CPU 또는 GPU에서 훈련된 컨벌루션 신경망(ConvNet, CNN)을 사용하여 특징을 추출할 수 있습니다. GPU를 사용하려면 Parallel Computing Toolbox™와 CUDA® 지원 NVIDIA® GPU(Compute Capability 3.0 이상)가 필요합니다. 하드웨어 요구 사항은 ExecutionEnvironment 이름-값 쌍 인수를 사용하여 지정하십시오.

예제

features = activations(net,X,layer)는 훈련된 네트워크 netX의 데이터를 사용하여 특정 계층에 대한 네트워크의 활성화 결과를 반환합니다.

이 함수는 imageInputLayer 또는 image3dInputLayer 이미지 입력 계층이 있는 네트워크만 지원합니다.

예제

features = activations(net,X,layer,Name,Value)는 하나 이상의 이름-값 쌍 인수로 지정된 추가 옵션을 사용하여 특정 계층에 대한 네트워크의 활성화 결과를 반환합니다. 예를 들어, 'OutputAs','rows'는 활성화 출력 형식을 'rows'로 지정합니다. 이름-값 쌍 인수는 다른 모든 입력 인수 다음에 지정하십시오.

예제

모두 축소

이 예제에서는 사전 훈련된 컨벌루션 신경망에서 학습된 이미지 특징을 추출한 다음 추출한 특징을 사용하여 이미지 분류기를 훈련시키는 방법을 보여줍니다. 특징 추출은 사전 훈련된 심층 네트워크의 강력한 표현 기능을 가장 쉽고 빠르게 사용하는 방법입니다. 예를 들어, 추출된 특징에 대해 fitcecoc(Statistics and Machine Learning Toolbox™)를 사용하여 서포트 벡터 머신(SVM)을 훈련시킬 수 있습니다. 특징 추출은 데이터를 한 번만 통과하면 되기 때문에 네트워크 훈련을 가속할 GPU가 없을 때 시도할 수 있는 좋은 시작점이 됩니다.

데이터 불러오기

샘플 이미지의 압축을 풀고 이미지 데이터저장소로서 불러옵니다. imageDatastore는 폴더 이름을 기준으로 이미지에 자동으로 레이블을 지정하고 데이터를 ImageDatastore 객체로 저장합니다. 이미지 데이터저장소를 사용하면 메모리에 담을 수 없는 데이터를 포함하여 다량의 이미지 데이터를 저장할 수 있습니다. 데이터를 훈련 데이터 70%와 테스트 데이터 30%로 분할합니다.

unzip('MerchData.zip');
imds = imageDatastore('MerchData', ...
    'IncludeSubfolders',true, ...
    'LabelSource','foldernames');

[imdsTrain,imdsTest] = splitEachLabel(imds,0.7,'randomized');

이 매우 작은 데이터 세트에는 이제 55개의 훈련 이미지와 20개의 검증 이미지가 있습니다. 샘플 이미지 몇 개를 표시합니다.

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

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

사전 훈련된 AlexNet 네트워크를 불러옵니다. Deep Learning Toolbox Model for AlexNet Network 지원 패키지가 설치되어 있지 않으면 이를 다운로드할 수 있는 링크가 제공됩니다. 1백만 개가 넘는 이미지에 대해 훈련된 AlexNet은 이미지를 1,000가지 사물 범주로 분류할 수 있습니다. 키보드, 마우스, 연필, 각종 동물 등을 예로 들 수 있습니다. 그 결과 이 모델은 다양한 이미지를 대표하는 다양한 특징을 학습했습니다.

net = alexnet;

네트워크 아키텍처를 표시합니다. 이 네트워크는 5개의 컨벌루션 계층과 3개의 완전 연결 계층을 갖습니다.

net.Layers
ans = 
  25x1 Layer array with layers:

     1   'data'     Image Input                   227x227x3 images with 'zerocenter' normalization
     2   'conv1'    Convolution                   96 11x11x3 convolutions with stride [4  4] and padding [0  0  0  0]
     3   'relu1'    ReLU                          ReLU
     4   'norm1'    Cross Channel Normalization   cross channel normalization with 5 channels per element
     5   'pool1'    Max Pooling                   3x3 max pooling with stride [2  2] and padding [0  0  0  0]
     6   'conv2'    Grouped Convolution           2 groups of 128 5x5x48 convolutions with stride [1  1] and padding [2  2  2  2]
     7   'relu2'    ReLU                          ReLU
     8   'norm2'    Cross Channel Normalization   cross channel normalization with 5 channels per element
     9   'pool2'    Max Pooling                   3x3 max pooling with stride [2  2] and padding [0  0  0  0]
    10   'conv3'    Convolution                   384 3x3x256 convolutions with stride [1  1] and padding [1  1  1  1]
    11   'relu3'    ReLU                          ReLU
    12   'conv4'    Grouped Convolution           2 groups of 192 3x3x192 convolutions with stride [1  1] and padding [1  1  1  1]
    13   'relu4'    ReLU                          ReLU
    14   'conv5'    Grouped Convolution           2 groups of 128 3x3x192 convolutions with stride [1  1] and padding [1  1  1  1]
    15   'relu5'    ReLU                          ReLU
    16   'pool5'    Max Pooling                   3x3 max pooling with stride [2  2] and padding [0  0  0  0]
    17   'fc6'      Fully Connected               4096 fully connected layer
    18   'relu6'    ReLU                          ReLU
    19   'drop6'    Dropout                       50% dropout
    20   'fc7'      Fully Connected               4096 fully connected layer
    21   'relu7'    ReLU                          ReLU
    22   'drop7'    Dropout                       50% dropout
    23   'fc8'      Fully Connected               1000 fully connected layer
    24   'prob'     Softmax                       softmax
    25   'output'   Classification Output         crossentropyex with 'tench' and 999 other classes

첫 번째 계층인 이미지 입력 계층에 입력되는 이미지는 크기가 227x227x3이어야 합니다. 여기서 3은 색 채널의 개수입니다.

inputSize = net.Layers(1).InputSize
inputSize = 1×3

   227   227     3

이미지 특징 추출하기

네트워크는 입력 이미지에 대한 계층 표현을 생성합니다. 보다 심층의 계층에는 앞쪽 계층의 하위 수준 특징을 사용하여 생성한 상위 수준의 특징이 포함됩니다. 훈련 이미지와 테스트 이미지의 특징 표현을 가져오려면 완전 연결 계층 'fc7'에서 activations를 사용하십시오. 이미지의 하위 수준 표현을 가져오려면 네트워크의 앞쪽 계층을 사용하십시오.

이 네트워크의 입력 이미지는 크기가 227x227x3이 되어야 하는데 이미지 데이터저장소의 이미지는 이와 다른 크기를 갖습니다. 네트워크에 입력하기 전에 훈련 이미지와 테스트 이미지의 크기를 자동으로 조정하려면 증대 이미지 데이터저장소를 만들고 원하는 이미지 크기를 지정한 다음 이러한 데이터저장소를 activations에 대한 입력 인수로 사용하십시오.

augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain);
augimdsTest = augmentedImageDatastore(inputSize(1:2),imdsTest);

layer = 'fc7';
featuresTrain = activations(net,augimdsTrain,layer,'OutputAs','rows');
featuresTest = activations(net,augimdsTest,layer,'OutputAs','rows');

훈련 데이터와 테스트 데이터로부터 클래스 레이블을 추출합니다.

YTrain = imdsTrain.Labels;
YTest = imdsTest.Labels;

이미지 분류기 피팅하기

훈련 이미지로부터 추출한 특징을 예측 변수로 사용하고 fitcecoc(Statistics and Machine Learning Toolbox)를 사용하여 다중클래스 서포트 벡터 머신(SVM)을 피팅합니다.

classifier = fitcecoc(featuresTrain,YTrain);

테스트 이미지 분류하기

훈련된 SVM 모델과 테스트 이미지로부터 추출한 특징을 사용하여 테스트 이미지를 분류합니다.

YPred = predict(classifier,featuresTest);

4개의 샘플 테스트 이미지를 예측된 레이블과 함께 표시합니다.

idx = [1 5 10 15];
figure
for i = 1:numel(idx)
    subplot(2,2,i)
    I = readimage(imdsTest,idx(i));
    label = YPred(idx(i));
    imshow(I)
    title(char(label))
end

테스트 세트에 대한 분류 정확도를 계산합니다. 정확도는 네트워크가 올바르게 예측하는 레이블의 비율입니다.

accuracy = mean(YPred == YTest)
accuracy = 1

이 SVM은 높은 정확도를 갖습니다. 특징 추출을 사용했을 때의 정확도가 충분히 높지 않다면 그 대신 전이 학습을 사용해 보십시오.

입력 인수

모두 축소

훈련된 네트워크로, SeriesNetwork 또는 DAGNetwork 객체로 지정됩니다. 사전 훈련된 네트워크를 가져오거나 trainNetwork 함수를 사용하여 자신만의 고유한 네트워크를 훈련시켜 훈련된 네트워크를 얻을 수 있습니다. 사전 훈련된 네트워크에 대한 자세한 내용은 사전 훈련된 심층 신경망 항목을 참조하십시오.

activationsimageInputLayer 또는 image3dInputLayer 이미지 입력 계층을 갖는 네트워크만 지원합니다.

이미지 데이터로, 다음 중 하나로 지정됩니다.

입력설명
3차원 배열단일 이미지를 나타내는 숫자형 배열. 배열은 크기가 hxwxc로, 여기서 h, w, c는 각각 이미지의 높이, 너비, 채널 개수입니다.
4차원 배열이미지 스택을 나타내는 숫자형 배열. 배열은 크기가 hxwxcxN으로, 여기서 N은 이미지 스택에 있는 이미지의 개수입니다.
이미지 데이터저장소

categorical형 레이블이 있는 ImageDatastore 객체.

자세한 내용은 trainNetworkimds 인수를 참조하십시오.

데이터저장소

데이터를 단일 이미지, 이미지로 구성된 셀형 배열 또는 첫 번째 열에 이미지가 포함된 테이블로 반환하는 데이터저장소.

자세한 내용은 Datastores for Deep Learning 항목을 참조하십시오.

테이블

테이블의 첫 번째 열은 이미지 경로 또는 이미지를 나타내는 3차원 배열을 포함합니다. 뒤에 오는 열들은 응답 변수를 포함합니다.

'OutputAs' 값이 'channels'인 경우, 입력 데이터 X의 이미지는 네트워크의 이미지 입력 계층의 입력 크기보다 클 수 있습니다. 그 밖의 다른 출력 형식의 경우에는 X의 이미지 크기가 네트워크의 이미지 입력 계층의 입력 크기와 같아야 합니다.

특징을 추출할 계층으로, 숫자형 인덱스 또는 문자형 벡터로 지정됩니다.

SeriesNetwork 객체의 활성화 결과를 구하려면 layer를 숫자형 인덱스로 지정하거나 계층 이름에 해당하는 문자형 벡터로 지정하십시오.

DAGNetwork 객체의 활성화 결과를 구하려면 layer를 계층 이름에 해당하는 문자형 벡터로 지정하십시오. 계층에 여러 개의 출력값이 있다면 계층 이름을 지정하고, 문자 “/”를 입력하고, 이어서 계층 출력값의 이름을 지정하여 계층과 출력값을 지정합니다. 즉, layer'layerName/outputName'과 같은 형식으로 지정합니다.

예: 3

예: 'conv1'

예: 'mpool/out'

이름-값 쌍의 인수

선택적으로 Name,Value 인수가 쉼표로 구분되어 지정됩니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. Name은 따옴표 안에 표시해야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍의 인수를 어떤 순서로든 지정할 수 있습니다.

예: activations(net,X,layer,'OutputAs','rows')

활성화 결과 출력 형식으로, 'OutputAs'와 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.

'OutputAs'활성화 결과 출력 형식
'channels'hxwxcxn 배열로, 여기서 h, w, c는 선택한 계층 출력값의 높이, 너비, 채널 개수이고 n은 X에 있는 관측값의 개수입니다. 각 hxwxc 부분배열은 단일 관측값에 대한 출력값입니다.
'rows'nxm 행렬로, 여기서 n은 관측값의 개수이고 m은 선택한 계층의 출력값 요소 개수입니다.
'columns'mxn 행렬로, 여기서 m은 선택한 계층의 출력값 요소 개수이고 n은 관측값의 개수입니다. 행렬의 각 열은 단일 관측값에 대한 출력값입니다.

'OutputAs' 값이 'channels'인 경우, 입력 데이터 X의 이미지는 네트워크의 이미지 입력 계층의 입력 크기보다 클 수 있습니다. 그 밖의 다른 출력 형식의 경우에는 X의 이미지 크기가 네트워크의 이미지 입력 계층의 입력 크기와 같아야 합니다.

예: 'OutputAs','rows'

예측에 사용할 미니 배치의 크기로, 양의 정수로 지정됩니다. 미니 배치가 클수록 메모리가 더 많이 필요하지만 예측 속도는 빨라질 수 있습니다.

예: 'MiniBatchSize',256

성능 최적화로, 'Acceleration'과 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.

  • 'auto' — 입력 네트워크 및 하드웨어 리소스에 적합한 여러 최적화를 자동으로 적용합니다.

  • 'mex' — MEX 함수를 컴파일하고 실행합니다. 이 옵션은 GPU를 사용하는 경우에만 사용할 수 있습니다. GPU를 사용하려면 Parallel Computing Toolbox와 CUDA 지원 NVIDIA GPU(Compute Capability 3.0 이상)가 필요합니다. Parallel Computing Toolbox 또는 적당한 GPU를 사용할 수 없는 경우, 오류가 반환됩니다.

  • 'none' — 모든 가속을 비활성화합니다.

디폴트 옵션은 'auto'입니다. 'auto'가 지정된 경우 MATLAB®은 호환되는 여러 최적화를 적용합니다. 'auto' 옵션을 사용할 경우 MATLAB은 절대로 MEX 함수를 생성하지 않습니다.

'Acceleration' 옵션 'auto''mex'를 사용하면 성능이 향상될 수 있는 대신 초기 실행 시간이 늘어납니다. 호환되는 파라미터를 사용한 후속 호출은 더 빨리 실행됩니다. 성능 최적화는 새 입력 데이터를 사용하여 함수를 여러 번 호출해야 하는 경우에 사용하십시오.

'mex' 옵션은 네트워크와 함수 호출에서 사용된 파라미터에 따라 MEX 함수를 생성하고 실행합니다. 단일 네트워크에 한 번에 여러 개의 MEX 함수가 연결되어 있을 수 있습니다. 네트워크 변수를 지우면 해당 네트워크에 연결된 모든 MEX 함수도 지워집니다.

'mex' 옵션은 GPU를 사용하는 경우에만 사용할 수 있습니다. C/C++ 컴파일러도 설치되어 있어야 합니다. 설정 지침은 MEX Setup (GPU Coder) 항목을 참조하십시오.

'mex' 가속은 모든 계층을 지원하지는 않습니다. 지원되는 계층 목록은 Supported Layers (GPU Coder) 항목을 참조하십시오.

예: 'Acceleration','mex'

하드웨어 리소스로, 'ExecutionEnvironment'와 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.

  • 'auto' — GPU를 사용할 수 있으면 GPU를 사용하고 그렇지 않으면 CPU를 사용합니다.

  • 'gpu' — GPU를 사용합니다. GPU를 사용하려면 Parallel Computing Toolbox와 CUDA 지원 NVIDIA GPU(Compute Capability 3.0 이상)가 필요합니다. Parallel Computing Toolbox 또는 적당한 GPU를 사용할 수 없는 경우, 오류가 반환됩니다.

  • 'cpu' — CPU를 사용합니다.

예: 'ExecutionEnvironment','cpu'

출력 인수

모두 축소

네트워크 계층에서의 활성화 결과로, 'OutputAs' 이름-값 쌍 인수의 값에 따라 다음 중 하나로 반환됩니다.

features'OutputAs'
hxwxcxn 배열'channels'
nxm 행렬'rows'
mxn 행렬'columns'

여기서 h, w, c는 선택한 계층 출력값의 높이, 너비, 채널 개수이고 n은 X에 있는 관측값의 개수이고 m = hwc는 특징의 총 개수입니다.

알고리즘

Deep Learning Toolbox™에 포함된 심층 학습 훈련, 예측 및 검증을 위한 모든 함수는 단정밀도 부동소수점 산술을 사용하여 계산을 수행합니다. 심층 학습을 위한 함수에는 trainNetwork, predict, classify, activations가 있습니다. CPU와 GPU를 모두 사용하여 네트워크를 훈련시키는 경우, 단정밀도 산술이 사용됩니다.

확장 기능

R2016a에 개발됨