Main Content

R-CNN 딥러닝을 사용하여 객체 검출기 훈련시키기

이 예제에서는 딥러닝과 R-CNN(Regions with Convolutional Neural Networks)을 사용하여 객체 검출기를 훈련시키는 방법을 다룹니다.

개요

이 예제에서는 정지 표지판을 검출하도록 R-CNN 객체 검출기를 훈련시키는 방법을 다룹니다. R-CNN은 컨벌루션 신경망(CNN)을 사용하여 영상 내의 영상 영역을 분류하는 객체 검출 프레임워크입니다 [1]. R-CNN 검출기는 슬라이딩 윈도우를 사용하여 각 영역을 분류하는 대신 사물을 포함할 가능성이 있는 영역만 처리합니다. 이로 인해 CNN을 실행할 때 발생하는 계산 비용이 크게 줄어듭니다.

R-CNN 정지 표지판 검출기를 훈련시키는 방법을 설명하기 위해, 이 예제는 딥러닝 활용 분야에서 널리 사용되는 전이 학습 워크플로를 따릅니다. 전이 학습에서는 ImageNet [2]과 같은 대규모의 영상 모음에 대해 훈련된 신경망을 새로운 분류 또는 검출 작업의 출발점으로 사용합니다. 이 방법의 이점은 사전 훈련된 신경망이 다양한 영상에 적용할 수 있는 다양한 영상 특징을 이미 학습했다는 데 있습니다. 이렇게 학습된 내용은 신경망의 미세 조정을 통해 새로운 작업에 옮겨 적용할 수 있습니다. 원래 작업을 위해 학습된 특징 표현이 새로운 작업에 사용될 수 있도록 맞춰질 수 있게 가중치를 소폭 변경함으로써 신경망이 미세 조정됩니다.

전이 학습의 이점은 훈련에 필요한 영상의 개수와 훈련 시간이 줄어든다는 데 있습니다. 이러한 이점을 보여주기 위해, 이 예제에서는 전이 학습 워크플로를 사용하여 정지 표지판 검출기를 훈련시킵니다. 먼저 50,000개의 훈련 영상을 포함하는 CIFAR-10 데이터 세트를 사용하여 CNN을 사전 훈련시킵니다. 그런 다음 단 41개의 훈련 영상을 사용하여 정지 표지판을 검출하도록 이 사전 훈련된 CNN을 미세 조정합니다. CNN을 사전 훈련시키지 않으면 정지 표지판 검출기를 훈련시키는 데 훨씬 더 많은 영상이 필요할 것입니다.

참고: 이 예제를 실행하려면 Computer Vision Toolbox™, Image Processing Toolbox™, Deep Learning Toolbox™ 및 Statistics and Machine Learning Toolbox™가 필요합니다.

이 예제를 실행할 때는 CUDA 지원 NVIDIA™ GPU를 사용하는 것이 권장됩니다. GPU를 사용하려면 Parallel Computing Toolbox™가 필요합니다. 지원되는 Compute Capability에 대한 자세한 내용은 GPU 연산 요구 사항 (Parallel Computing Toolbox) 항목을 참조하십시오.

CIFAR-10 영상 데이터 다운로드하기

CIFAR-10 데이터 세트 [3]를 다운로드합니다. 이 데이터셋은 CNN을 훈련시키는 데 사용될 50,000개의 훈련 영상을 포함합니다.

CIFAR-10 데이터를 임시 디렉터리로 다운로드합니다.

cifar10Data = tempdir;

url = 'https://www.cs.toronto.edu/~kriz/cifar-10-matlab.tar.gz';

helperCIFAR10Data.download(url,cifar10Data);

CIFAR-10 훈련 및 테스트 데이터를 불러옵니다.

[trainingImages,trainingLabels,testImages,testLabels] = helperCIFAR10Data.load(cifar10Data);

각 영상은 32x32 RGB 영상이고, 총 50,000개의 훈련 샘플이 있습니다.

size(trainingImages)
ans = 1×4

          32          32           3       50000

CIFAR-10에는 10개의 영상 범주가 있습니다. 영상 범주를 나열해 보겠습니다.

numImageCategories = 10;
categories(trainingLabels)
ans = 10×1 cell
    {'airplane'  }
    {'automobile'}
    {'bird'      }
    {'cat'       }
    {'deer'      }
    {'dog'       }
    {'frog'      }
    {'horse'     }
    {'ship'      }
    {'truck'     }

다음 코드를 사용하여 몇몇 훈련 영상을 표시할 수 있습니다.

figure
thumbnails = trainingImages(:,:,:,1:100);
montage(thumbnails)

컨벌루션 신경망(CNN) 만들기

CNN은 일련의 계층으로 구성되며, 각 계층은 특정 계산을 정의합니다. Deep Learning Toolbox™는 CNN을 계층별로 손쉽게 설계할 수 있는 기능을 제공합니다. 이 예제에서는 CNN을 만드는 데 다음 계층이 사용됩니다.

여기서 정의하는 신경망은 [4]에서 설명하는 신경망과 비슷하며, imageInputLayer로 시작합니다. 입력 계층은 CNN이 처리할 수 있는 데이터의 유형과 크기를 정의합니다. 이 예제에서는 32x32 RGB 영상인 CIFAR-10 영상을 처리하는 데 CNN이 사용됩니다.

% Create the image input layer for 32x32x3 CIFAR-10 images.
[height,width,numChannels, ~] = size(trainingImages);

imageSize = [height width numChannels];
inputLayer = imageInputLayer(imageSize)
inputLayer = 
  ImageInputLayer with properties:

                      Name: ''
                 InputSize: [32 32 3]
   Hyperparameters
          DataAugmentation: 'none'
             Normalization: 'zerocenter'
    NormalizationDimension: 'auto'
                      Mean: []

다음으로, 신경망의 중간 계층을 정의합니다. 중간 계층은 컨벌루션 계층, ReLU(Rectified Linear Unit) 계층, 풀링 계층의 반복되는 블록으로 구성됩니다. 이들 3개의 계층은 컨벌루션 신경망의 핵심 컴포넌트를 형성합니다. 컨벌루션 계층은 신경망 훈련 중에 업데이트되는 필터 가중치 세트를 정의합니다. ReLU layer 계층은 신경망이 영상 픽셀을 영상의 의미론적 콘텐츠에 매핑하는 비선형 함수를 근사할 수 있도록 신경망에 비선형성을 추가합니다. 풀링 계층은 데이터가 신경망을 통과하는 과정에서 데이터를 다운샘플링합니다. 계층이 많은 신경망에서는 신경망의 너무 앞쪽에서 데이터 다운샘플링이 이루어지지 않도록 풀링 계층을 조금만 사용해야 합니다.

% Convolutional layer parameters
filterSize = [5 5];
numFilters = 32;

middleLayers = [
    
% The first convolutional layer has a bank of 32 5x5x3 filters. A
% symmetric padding of 2 pixels is added to ensure that image borders
% are included in the processing. This is important to avoid
% information at the borders being washed away too early in the
% network.
convolution2dLayer(filterSize,numFilters,'Padding',2)

% Note that the third dimension of the filter can be omitted because it
% is automatically deduced based on the connectivity of the network. In
% this case because this layer follows the image layer, the third
% dimension must be 3 to match the number of channels in the input
% image.

% Next add the ReLU layer:
reluLayer()

% Follow it with a max pooling layer that has a 3x3 spatial pooling area
% and a stride of 2 pixels. This down-samples the data dimensions from
% 32x32 to 15x15.
maxPooling2dLayer(3,'Stride',2)

% Repeat the 3 core layers to complete the middle of the network.
convolution2dLayer(filterSize,numFilters,'Padding',2)
reluLayer()
maxPooling2dLayer(3, 'Stride',2)

convolution2dLayer(filterSize,2 * numFilters,'Padding',2)
reluLayer()
maxPooling2dLayer(3,'Stride',2)

]
middleLayers = 
  9x1 Layer array with layers:

     1   ''   Convolution   32 5x5 convolutions with stride [1  1] and padding [2  2  2  2]
     2   ''   ReLU          ReLU
     3   ''   Max Pooling   3x3 max pooling with stride [2  2] and padding [0  0  0  0]
     4   ''   Convolution   32 5x5 convolutions with stride [1  1] and padding [2  2  2  2]
     5   ''   ReLU          ReLU
     6   ''   Max Pooling   3x3 max pooling with stride [2  2] and padding [0  0  0  0]
     7   ''   Convolution   64 5x5 convolutions with stride [1  1] and padding [2  2  2  2]
     8   ''   ReLU          ReLU
     9   ''   Max Pooling   3x3 max pooling with stride [2  2] and padding [0  0  0  0]

이들 3개의 기본 계층을 반복함으로써 보다 깊은 층의 신경망을 만들 수 있습니다. 그러나 데이터가 너무 이르게 다운샘플링되지 않도록 풀링 계층의 개수는 줄여야 합니다. 신경망의 앞쪽에서 다운샘플링이 이루어지면 학습에 유용한 영상 정보가 사라지게 됩니다.

CNN의 마지막 계층은 보통 완전 연결 계층과 소프트맥스 손실 계층으로 구성됩니다.

finalLayers = [
    
% Add a fully connected layer with 64 output neurons. The output size of
% this layer will be an array with a length of 64.
fullyConnectedLayer(64)

% Add an ReLU non-linearity.
reluLayer

% Add the last fully connected layer. At this point, the network must
% produce 10 signals that can be used to measure whether the input image
% belongs to one category or another. This measurement is made using the
% subsequent loss layers.
fullyConnectedLayer(numImageCategories)

% Add the softmax loss layer and classification layer. The final layers use
% the output of the fully connected layer to compute the categorical
% probability distribution over the image classes. During the training
% process, all the network weights are tuned to minimize the loss over this
% categorical distribution.
softmaxLayer
classificationLayer
]
finalLayers = 
  5x1 Layer array with layers:

     1   ''   Fully Connected         64 fully connected layer
     2   ''   ReLU                    ReLU
     3   ''   Fully Connected         10 fully connected layer
     4   ''   Softmax                 softmax
     5   ''   Classification Output   crossentropyex

입력 계층, 중간 계층, 마지막 계층을 결합합니다.

layers = [
    inputLayer
    middleLayers
    finalLayers
    ]
layers = 
  15x1 Layer array with layers:

     1   ''   Image Input             32x32x3 images with 'zerocenter' normalization
     2   ''   Convolution             32 5x5 convolutions with stride [1  1] and padding [2  2  2  2]
     3   ''   ReLU                    ReLU
     4   ''   Max Pooling             3x3 max pooling with stride [2  2] and padding [0  0  0  0]
     5   ''   Convolution             32 5x5 convolutions with stride [1  1] and padding [2  2  2  2]
     6   ''   ReLU                    ReLU
     7   ''   Max Pooling             3x3 max pooling with stride [2  2] and padding [0  0  0  0]
     8   ''   Convolution             64 5x5 convolutions with stride [1  1] and padding [2  2  2  2]
     9   ''   ReLU                    ReLU
    10   ''   Max Pooling             3x3 max pooling with stride [2  2] and padding [0  0  0  0]
    11   ''   Fully Connected         64 fully connected layer
    12   ''   ReLU                    ReLU
    13   ''   Fully Connected         10 fully connected layer
    14   ''   Softmax                 softmax
    15   ''   Classification Output   crossentropyex

표준편차가 0.0001인 정규분포된 난수를 사용하여 첫 번째 컨벌루션 계층 가중치를 초기화합니다. 이렇게 하면 훈련의 수렴을 개선하는 데 도움이 됩니다.

layers(2).Weights = 0.0001 * randn([filterSize numChannels numFilters]);

CIFAR-10 데이터를 사용하여 CNN 훈련시키기

신경망 아키텍처를 정의했으므로 이제 CIFAR-10 훈련 데이터를 사용하여 신경망을 훈련시킬 수 있습니다. 먼저 trainingOptions (Deep Learning Toolbox) 함수를 사용하여 신경망 훈련 알고리즘을 설정합니다. 신경망 훈련 알고리즘은 초기 학습률을 0.001로 하여 SGDM(Stochastic Gradient Descent with Momentum: 모멘텀을 사용한 확률적 경사하강법)을 사용합니다. 초기 학습률은 훈련 중 매 8회의 Epoch마다 감소합니다(Epoch 1회는 전체 훈련 데이터 세트를 완전히 한 번 통과하는 것으로 정의됩니다). 훈련 알고리즘은 40회의 Epoch 동안 실행됩니다.

훈련 알고리즘에서 사용되는 미니 배치 크기는 128개 영상입니다. 훈련을 위해 GPU를 사용하는 경우에는 GPU에 부과되는 메모리 제약으로 인해 이 크기를 줄여야 할 수 있습니다.

% Set the network training options
opts = trainingOptions('sgdm', ...
    'Momentum', 0.9, ...
    'InitialLearnRate', 0.001, ...
    'LearnRateSchedule', 'piecewise', ...
    'LearnRateDropFactor', 0.1, ...
    'LearnRateDropPeriod', 8, ...
    'L2Regularization', 0.004, ...
    'MaxEpochs', 40, ...
    'MiniBatchSize', 128, ...
    'Verbose', true);

trainNetwork (Deep Learning Toolbox) 함수를 사용하여 신경망을 훈련시킵니다. 이는 완료하는 데 20~30분 정도 소요되는 계산 집약적인 절차입니다. 이 예제를 실행하는 동안 시간을 절약하기 위해 디스크에서 사전 훈련된 신경망을 불러옵니다. 신경망을 직접 훈련시키려면 아래에 표시된 doTraining 변수를 true로 설정하십시오.

훈련을 수행할 때는 CUDA 지원 NVIDIA™ GPU를 사용하는 것이 권장됩니다.

% A trained network is loaded from disk to save time when running the
% example. Set this flag to true to train the network.
doTraining = false;

if doTraining    
    % Train a network.
    cifar10Net = trainNetwork(trainingImages, trainingLabels, layers, opts);
else
    % Load pre-trained detector for the example.
    load('rcnnStopSigns.mat','cifar10Net')       
end

CIFAR-10 신경망 훈련 검증하기

신경망을 훈련시킨 후에는 신경망을 검증하여 훈련이 성공적인지 확인해야 합니다. 먼저 첫 번째 컨벌루션 계층의 필터 가중치를 간단하게 시각화하면 훈련이 갖고 있는 즉각적인 문제를 파악하는 데 도움이 됩니다.

% Extract the first convolutional layer weights
w = cifar10Net.Layers(2).Weights;

% rescale the weights to the range [0, 1] for better visualization
w = rescale(w);

figure
montage(w)

첫 번째 계층 가중치는 잘 정의된 구조를 가질 것입니다. 가중치가 여전히 무작위적으로 보인다면 신경망에 추가 훈련이 필요하다는 징후일 수 있습니다. 여기서는 위에서 보듯이 첫 번째 계층 필터가 CIFAR-10 훈련 데이터로부터 경계와 같은 특징을 학습했습니다.

훈련 결과를 완전히 검증하려면 CIFAR-10 테스트 데이터를 사용하여 신경망의 분류 정확도를 측정하십시오. 낮은 정확도 점수는 추가 훈련 또는 추가 훈련 데이터가 필요함을 나타냅니다. 이 예제의 목표는 테스트 세트에 대해 반드시 100%의 정확도를 달성하겠다는 것이라기보다는 객체 검출기를 훈련할 수 있을 정도로 충분히 신경망을 훈련시키는 것입니다.

% Run the network on the test set.
YTest = classify(cifar10Net, testImages);

% Calculate the accuracy.
accuracy = sum(YTest == testLabels)/numel(testLabels)
accuracy = 0.7456

훈련을 추가로 진행하면 정확도가 높아질 수 있겠으나 이는 R-CNN 객체 검출기 훈련이라는 목적을 위해서는 필요하지 않습니다.

훈련 데이터 불러오기

이제 신경망이 CIFAR-10 분류 작업에 대해 잘 작동하므로 정지 표지판 검출을 위해 신경망을 미세 조정하는 데 전이 학습 방법을 사용할 수 있습니다.

먼저 정지 표지판의 ground truth 데이터를 불러옵니다.

% Load the ground truth data
data = load('stopSignsAndCars.mat', 'stopSignsAndCars');
stopSignsAndCars = data.stopSignsAndCars;

% Update the path to the image files to match the local file system
visiondata = fullfile(toolboxdir('vision'),'visiondata');
stopSignsAndCars.imageFilename = fullfile(visiondata, stopSignsAndCars.imageFilename);

% Display a summary of the ground truth data
summary(stopSignsAndCars)
Variables:
    imageFilename: 41×1 cell array of character vectors
    stopSign: 41×1 cell
    carRear: 41×1 cell
    carFront: 41×1 cell

훈련 데이터는 영상 파일 이름과 정지 표지판, 차량 앞면 및 차량 뒷면의 ROI 레이블을 포함하는 테이블 내에 포함되어 있습니다. 각 ROI 레이블은 영상 내의 관심 사물을 둘러싸는 경계 상자입니다. 정지 표지판 검출기 훈련에는 정지 표지판 ROI 레이블만 필요합니다. 차량 앞면과 차량 뒷면의 ROI 레이블은 제거해야 합니다.

% Only keep the image file names and the stop sign ROI labels
stopSigns = stopSignsAndCars(:, {'imageFilename','stopSign'});

% Display one training image and the ground truth bounding boxes
I = imread(stopSigns.imageFilename{1});
I = insertObjectAnnotation(I,'Rectangle',stopSigns.stopSign{1},'stop sign','LineWidth',8);

figure
imshow(I)

이 데이터 세트에는 단 41개의 훈련 영상만 있습니다. 41개의 영상만 사용하여 CNN 객체 검출기를 처음부터 훈련시키기란 쉽지 않으며, 이를 통해 신뢰할 수 있는 정지 표지판 검출기를 생성할 수 없습니다. 이 정지 표지판 검출기는 규모가 더 큰 데이터셋(CIFAR-10에는 50,000개의 훈련 영상이 있음)에 대해 사전 훈련된 신경망을 미세 조정하여 훈련되므로 훨씬 작은 데이터셋을 사용하는 것이 가능한 것입니다.

R-CNN 정지 표지판 검출기 훈련시키기

마지막으로, trainRCNNObjectDetector를 사용하여 R-CNN 객체 검출기를 훈련시킵니다. 이 함수에 대한 입력값은 레이블이 지정된 정지 표지판 영상, 사전 훈련된 CIFAR-10 신경망 및 훈련 옵션을 포함하는 ground truth 테이블입니다. 훈련 함수는 영상을 10개의 범주로 분류한 원래 CIFAR-10 신경망을, 영상을 정지 표지판 클래스와 일반 배경 클래스라는 2개의 클래스로 분류할 수 있는 신경망으로 자동으로 수정합니다.

훈련 중에, 입력 신경망 가중치는 ground truth 데이터에서 추출된 영상 패치를 사용하여 미세 조정됩니다. 'PositiveOverlapRange' 파라미터와 'NegativeOverlapRange' 파라미터는 훈련에 어느 영상 패치를 사용할지 제어합니다. 양성 훈련 샘플은 0.5에서 1.0만큼 ground truth 상자와 중첩되는 샘플입니다. 이 값은 경계 상자 IoU(intersection-over-union) 메트릭을 사용해 측정됩니다. 음성 훈련 샘플은 0에서 0.3만큼 중첩되는 샘플입니다. 이들 파라미터에 대한 최적의 값은 훈련된 검출기를 검증 세트에 대해 테스트하여 선택해야 합니다.

R-CNN 훈련의 경우, 훈련 시간을 줄이기 위해 MATLAB 워커 병렬 풀을 사용하는 것을 강력히 권장합니다. trainRCNNObjectDetectorComputer Vision Toolbox 기본 설정을 바탕으로 병렬 풀을 자동으로 만들어서 사용합니다. 훈련 전에 병렬 풀을 사용하도록 설정되어 있는지 확인하십시오.

이 예제를 실행하는 동안 시간을 절약하기 위해 디스크에서 사전 훈련된 신경망을 불러옵니다. 신경망을 직접 훈련시키려면 아래에 표시된 doTraining 변수를 true로 설정하십시오.

훈련을 수행할 때는 CUDA 지원 NVIDIA™ GPU를 사용하는 것이 권장됩니다.

% A trained detector is loaded from disk to save time when running the
% example. Set this flag to true to train the detector.
doTraining = false;

if doTraining
    
    % Set training options
    options = trainingOptions('sgdm', ...
        'MiniBatchSize', 128, ...
        'InitialLearnRate', 1e-3, ...
        'LearnRateSchedule', 'piecewise', ...
        'LearnRateDropFactor', 0.1, ...
        'LearnRateDropPeriod', 100, ...
        'MaxEpochs', 100, ...
        'Verbose', true);
    
    % Train an R-CNN object detector. This will take several minutes.    
    rcnn = trainRCNNObjectDetector(stopSigns, cifar10Net, options, ...
    'NegativeOverlapRange', [0 0.3], 'PositiveOverlapRange',[0.5 1])
else
    % Load pre-trained network for the example.
    load('rcnnStopSigns.mat','rcnn')       
end

R-CNN 정지 표지판 검출기 테스트하기

이제 영상에서 정지 표지판을 검출하는 데 R-CNN 객체 검출기를 사용할 수 있습니다. 테스트 영상에서 사용해 봅니다.

% Read test image
testImage = imread('stopSignTest.jpg');

% Detect stop signs
[bboxes,score,label] = detect(rcnn,testImage,'MiniBatchSize',128)
bboxes = 1×4

   419   147    31    20

score = single
    0.9955
label = categorical categorical
     stopSign 

R-CNN 객체의 detect 메서드는 각 검출 건에 대한 사물 경계 상자, 검출 점수 및 클래스 레이블을 반환합니다. 레이블은 여러 개의 사물(예: 정지 표지판, 양보 표지판, 속도 제한 표지판 등)을 검출할 때 유용합니다. 검출 신뢰도를 나타내는 점수는 0과 1 사이의 값으로, 점수가 낮은 검출 건을 무시하는 데 사용할 수 있습니다.

% Display the detection results
[score, idx] = max(score);

bbox = bboxes(idx, :);
annotation = sprintf('%s: (Confidence = %f)', label(idx), score);

outputImage = insertObjectAnnotation(testImage, 'rectangle', bbox, annotation);

figure
imshow(outputImage)

디버그 팁

R-CNN 검출기 내에서 사용된 신경망은 전체 테스트 영상을 처리하는 데도 사용될 수 있습니다. 신경망 입력 크기보다 큰 전체 영상을 직접 처리함으로써 분류 점수의 2차원 히트맵을 생성할 수 있습니다. 이는 신경망에서 혼동을 유발하는 영상 내의 항목을 식별하는 데 도움이 되는 유용한 디버그 툴이며, 훈련 개선이 이루어질 수 있도록 식견을 제공할 수도 있습니다.

% The trained network is stored within the R-CNN detector
rcnn.Network
ans = 
  SeriesNetwork with properties:

    Layers: [15×1 nnet.cnn.layer.Layer]

신경망의 14번째 계층인 소프트맥스 계층에서 activations (Deep Learning Toolbox)를 추출합니다. 이것은 신경망이 영상을 살펴보는 과정에서 생성된 분류 점수입니다.

featureMap = activations(rcnn.Network, testImage, 14);

% The softmax activations are stored in a 3-D array.
size(featureMap)
ans = 1×3

    43    78     2

featureMap의 3번째 차원은 사물 클래스에 해당합니다.

rcnn.ClassNames
ans = 2×1 cell
    {'stopSign'  }
    {'Background'}

정지 표지판 특징 맵은 첫 번째 채널에 저장되어 있습니다.

stopSignMap = featureMap(:, :, 1);

활성화 출력값의 크기는 신경망 내 다운샘플링 연산 때문에 입력 영상보다 작습니다. 더 좋은 시각화를 생성하려면 stopSignMap의 크기를 입력 영상의 크기로 조정하십시오. 이는 활성화를 영상 픽셀로 매핑하는 매우 대략적인 근사이므로 설명을 돕는 목적으로만 사용해야 합니다.

% Resize stopSignMap for visualization
[height, width, ~] = size(testImage);
stopSignMap = imresize(stopSignMap, [height, width]);

% Visualize the feature map superimposed on the test image. 
featureMapOnImage = imfuse(testImage, stopSignMap); 

figure
imshow(featureMapOnImage)

테스트 영상의 정지 표지판은 신경망 활성화에 가장 큰 피크와 잘 대응됩니다. 이는 R-CNN 검출기 내에서 사용된 CNN이 정지 표지판을 식별하도록 효과적으로 학습했음을 확인하는 데 도움이 됩니다. 만일 다른 피크가 있었다면 이는 거짓양성을 방지하기 위해 훈련에 추가적인 음성 데이터가 필요함을 나타낼 수 있습니다. 이 경우 trainingOptions의 'MaxEpochs'를 늘려서 다시 훈련할 수 있습니다.

요약

이 예제에서는 CIFAR-10 데이터로 훈련된 신경망을 사용하여 R-CNN 정지 표지판 객체 검출기를 훈련시키는 방법을 다루었습니다. 딥러닝을 사용하여 다른 객체 검출기를 훈련시킬 때도 이와 비슷한 단계를 밟을 수 있습니다.

참고 문헌

[1] Girshick, R., J. Donahue, T. Darrell, and J. Malik. "Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation." Proceedings of the 2014 IEEE Conference on Computer Vision and Pattern Recognition. Columbus, OH, June 2014, pp. 580-587.

[2] Deng, J., W. Dong, R. Socher, L.-J. Li, K. Li, and L. Fei-Fei. "ImageNet: A Large-Scale Hierarchical Image Database." Proceedings of the 2009 IEEE Conference on Computer Vision and Pattern Recognition. Miami, FL, June 2009, pp. 248-255.

[3] Krizhevsky, A., and G. Hinton. "Learning multiple layers of features from tiny images." Master's Thesis, University of Toronto. Toronto, Canada, 2009.

[4] https://code.google.com/p/cuda-convnet/

참고 항목

| (Deep Learning Toolbox) | | | | | | (Deep Learning Toolbox) | | (Deep Learning Toolbox)

관련 항목