주요 콘텐츠

deeplabv3plus

의미론적 영상 분할을 위한 DeepLab v3+ 컨벌루션 신경망 생성

R2024a 이후

설명

deepLabNetwork = deeplabv3plus(imageSize,numClasses,network)는 지정된 기본 신경망, 클래스 개수, 영상 크기를 갖는 DeepLab v3+ 계층을 반환합니다.

예제

deepLabNetwork = deeplabv3plus(___,DownsamplingFactor=value)는 다운샘플링 인자(출력 스트라이드)[1]8 또는 16으로 추가로 설정합니다. 다운샘플링 인자는 DeepLab v3+의 인코더 섹션에서 입력 영상이 다운샘플링되는 정도를 설정합니다.

예제

모두 축소

ResNet-18을 기반으로 하는 DeepLab v3+ 신경망을 만듭니다.

imageSize = [480 640 3];
numClasses = 5;
network = "resnet18";
net = deeplabv3plus(imageSize,numClasses,network, ...
             DownsamplingFactor=16);

신경망을 표시합니다.

analyzeNetwork(net)

영상 데이터저장소를 사용하여 삼각형 데이터 세트 영상을 불러옵니다. 이 데이터저장소에는 무작위 삼각형의 회색조 영상 200개가 들어 있습니다. 각 영상은 32×32입니다.

dataSetDir = fullfile(toolboxdir("vision"),"visiondata","triangleImages");
imageDir = fullfile(dataSetDir,"trainingImages");
imds = imageDatastore(imageDir);

픽셀 레이블 데이터저장소를 사용하여 삼각형 데이터 세트 픽셀 레이블을 불러옵니다.

labelDir = fullfile(dataSetDir, "trainingLabels");
classNames = ["triangle","background"];
labelIDs   = [255 0];
pxds = pixelLabelDatastore(labelDir,classNames,labelIDs);

DeepLab v3+ 신경망을 만듭니다.

imageSize = [256 256];
numClasses = numel(classNames);
net = deeplabv3plus(imageSize,numClasses,"resnet18");

훈련을 위해 영상과 픽셀 레이블 데이터를 결합하고 전처리 변환을 적용하여 훈련 영상의 크기를 조정합니다.

cds = combine(imds,pxds);
tds = transform(cds, @(data)preprocessTrainingData(data,imageSize));

훈련 옵션을 지정합니다. 메모리 사용량을 줄이기 위해 미니 배치 크기를 낮춥니다.

opts = trainingOptions("sgdm",...
    MiniBatchSize=8,...
    MaxEpochs=3);

신경망을 훈련시킵니다.

net = trainnet(tds,net,"crossentropy",opts);
    Iteration    Epoch    TimeElapsed    LearnRate    TrainingLoss
    _________    _____    ___________    _________    ____________
            1        1       00:00:04         0.01         0.93844
           50        2       00:04:09         0.01        0.033749
           75        3       00:05:35         0.01        0.026353
Training stopped: Max epochs completed

테스트 영상을 읽어 들입니다.

I = imread("triangleTest.jpg");

테스트 영상의 삼각형이 훈련 중인 삼각형의 크기와 대략적으로 같아지도록, 입력 영상 크기를 32로 나눈 값에 해당하는 인자로 테스트 영상의 크기를 조정합니다.

I = imresize(I,Scale=imageSize./32);

영상을 분할합니다.

C = semanticseg(I,net);

결과를 표시합니다.

B = labeloverlay(I,C);
figure
imshow(B)

Figure contains an axes object. The axes object contains an object of type image.

지원 함수

function data = preprocessTrainingData(data, imageSize)
% Resize the training image and associated pixel label image.
data{1} = imresize(data{1},imageSize);
data{2} = imresize(data{2},imageSize);

% Convert grayscale input image into RGB for use with ResNet-18, which
% requires RGB image input.
data{1} = repmat(data{1},1,1,3);
end

입력 인수

모두 축소

신경망 입력 영상 크기로, RGB 영상으로 지정됩니다. 영상은 다음 형식 중 하나일 수 있습니다.

  • [height width] 형식의 요소를 2개 가진 벡터.

  • [height width, 3] 형식의 요소를 3개 가진 벡터.

imageSize를 요소를 2개 가진 벡터 [height width]로 지정하는 경우, 신경망은 자동으로 [height width 3]을 RGB 영상의 입력 크기로 사용합니다. 회색조 영상은 신경망에 전달하기 전에 먼저 RGB로 변환해야 합니다.

분류할 신경망의 클래스 개수로, 1보다 큰 정수로 지정됩니다.

기본 신경망으로, 다음 옵션 중 하나로 지정됩니다.

  • "resnet18" — 기본 신경망이 ResNet-18 신경망입니다.

  • "resnet50" — 기본 신경망이 ResNet-50 신경망입니다.

  • "mobilenetv2" — 기본 신경망이 MobileNet-v2 신경망입니다.

  • "xception" — 기본 신경망이 Xception 신경망입니다.

  • "inceptionresnetv2" — 기본 신경망이 Inception-ResNet-v2 신경망입니다.

각 기본 신경망 유형을 지정하려면 해당 신경망 애드온을 설치해야 합니다. 이러한 신경망에 대한 자세한 내용은 사전 훈련된 심층 신경망 (Deep Learning Toolbox) 항목을 참조하십시오.

출력 인수

모두 축소

DeepLab v3+ 신경망으로, 의미론적 영상 분할을 위한 dlnetwork (Deep Learning Toolbox) 객체로 반환됩니다. 영상 분할을 위해 신경망에는 인코더-디코더 아키텍처, 팽창된 컨벌루션 및 스킵 연결이 사용됩니다. 의미론적 분할에 신경망을 사용하려면 먼저 trainnet (Deep Learning Toolbox) 함수(Deep Learning Toolbox™가 필요함)를 사용하여 신경망을 훈련시켜야 합니다.

알고리즘

  • xception (Deep Learning Toolbox) 또는 mobilenetv2 (Deep Learning Toolbox) 기본 신경망을 사용하여 DeepLab v3+ 신경망을 만드는 경우, 아트루스(atrous, 즉 팽창된) 공간 피라미드 풀링(ASPP) 하위 신경망과 디코더 하위 신경망 내에서 심도별로 분리 가능한 컨벌루션이 사용됩니다. 그 외 모든 기본 신경망에는 컨벌루션 계층이 사용됩니다.

  • 이 DeepLab v3+ 구현의 ASPP에는 전역 평균값 풀링 계층이 포함되지 않습니다.

참고 문헌

[1] Chen, L., Y. Zhu, G. Papandreou, F. Schroff, and H. Adam. "Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation." Computer Vision — ECCV 2018, 833-851. Munic, Germany: ECCV, 2018.

확장 기능

모두 확장

버전 내역

R2024a에 개발됨

참고 항목

객체

함수