Scaling 한 데이터 복구 방법

Mailbox Restore를 사용하여 Exchange 데이터 복원

이 섹션에서는 Mailbox Restore를 사용하여 Rapid Recovery 복구 지점에 백업한 Exchange 데이터 저장소에서 이메일 항목을 복구하는 방법에 대해 설명합니다.

Mailbox Restore를 사용하여 데이터 복구 수행

Rapid Recovery 복구 지점에서 Exchange 데이터 또는 데이터 저장소를 복구할 경우 Local Mount Utility 및 Mailbox Restore를 사용합니다. 복구 지점에서 데이터베이스를 열고 Mailbox Restore 응용 프로그램을 열 때는 LMU를 사용하는 것이 좋습니다. 데이터베이스를 연 다음에는 모든 복원 절차가 Mailbox Restore 사용자 인터페이스 내에서 발생합니다. 복원을 완료한 다음에는 복잡해지지 않도록 데이터베이스를 닫고 LMU에서 사용한 복구 지점을 분리합니다.

백업된 Exchange 데이터베이스에서 데이터를 복구하려면 다음 절차를 사용하십시오.

  1. Local Mount Utility를 사용하여 Mailbox Restore에서 Exchange 데이터베이스를 엽니다.
  2. 복구할 Exchange 데이터를 찾습니다.
  3. 데이터를 원하는 대상으로 내보내 복원합니다.
  4. 데이터베이스를 닫습니다.
  5. 복구 지점을 분리합니다.

Exchange 항목 검색

특정 프로젝트나 퇴사한 직원의 이름과 같은 개인의 이름과 관련된 단어와 같은 키워드를 사용하여 항목을 검색할 수도 있습니다. 상황에 따라 검색 조건이 각각 다를 수 있습니다. Mailbox Restore에는 Exchange 데이터 저장소에서 항목을 검색하기 위해 상황에 맞게 사용할 수 있는 두 가지 방법이 있습니다.

  • 기본 검색: 하나 이상의 필드에 키워드를 입력하여 빠른 검색을 수행할 수 있습니다. 이 방법은 일반적으로 메시지를 검색할 때 사용됩니다.
  • 고급 검색. 트리 쿼리를 사용하여 여러 키워드를 검색할 수 있으며, Exchange 항목을 검색하기 위해 사용할 수 있습니다.

Exchange 항목에 대한 기본 검색 수행

Mailbox Restore를 사용하여 Exchange 데이터를 복구할 경우 특정 프로젝트나 퇴사한 직원의 이름과 같은 개인의 이름과 관련된 단어 등의 키워드를 사용하여 항목을 검색하려는 경우가 있습니다. 메뉴 모음의 텍스트 상자에서 이 작업을 수행할 수 있습니다. 다음 절차에 따라 열려 있는 Exchange 데이터 저장소를 검색하십시오.

  1. 모든 메일 폴더 창의 탐색 트리에서 검색할 폴더 또는 사서함을 선택합니다.
  2. 메뉴 모음의 텍스트 상자에 제목이나 이름과 같은 검색어를 입력합니다.
    • 검색할 검색어가 메시지 본문에 나타날 수 있는 경우 텍스트 상자를 클릭하여 드롭다운 메뉴를 표시한 다음 메시지 본문에서 검색 사용(느림)을 선택합니다.

      주: 엔진이 검색해야 하는 데이터 양으로 인해 검색 결과가 표시되는 속도가 평균 속도보다 느릴 수 있습니다.

  3. 검색을 시작하려면 돋보기 아이콘을 클릭합니다.

    결과가 검색 쿼리 창에 나타납니다.

  4. 결과를 정렬하려면 검색 쿼리 창의 맨 위 행에 있는 버튼을 사용합니다. 우선순위, 첨부파일, 제목 및 크기와 같은 기준으로 정렬할 수 있습니다.
  5. 텍스트 상자에서 검색어를 지우려면 X를 클릭합니다.
  6. 이전에 수행된 검색을 보려면 검색 기록 창에서 검색어를 선택합니다.

The document was helpful.

Select Rating

I easily found the information I needed.

Select Rating

딥러닝을 사용하여 영상 해상도 높이기

이 예제에서는 VDSR(Very-Deep Super-Resolution) 신경망을 사용하여 하나의 저해상도 영상에서 고해상도 영상을 만드는 방법을 보여줍니다.

초고해상도 기법은 저해상도 영상에서 고해상도 영상을 만드는 방법입니다. 이 예제에서는 단일 영상 초고해상도(SISR) 복원 기법을 다룹니다. 여기서 목표는 하나의 저해상도 영상에서 하나의 고해상도 영상을 복구하는 것입니다. 일반적으로 저해상도 영상에서는 고주파 영상 콘텐츠를 복구할 수 없기 때문에 SISR은 까다롭습니다. 고주파 정보가 없으면 고해상도 영상의 품질이 제한됩니다. 또한, 하나의 저해상도 영상이 여러 개의 가능한 고해상도 영상을 산출할 수 있기 때문에 SISR은 불량 조건 문제입니다.

Scaling 한 데이터 복구 방법

SISR을 수행하기 위해 딥러닝 알고리즘을 비롯한 몇 가지 기법이 제안되었습니다. 이 예제에서는 SISR을 위한 딥러닝 알고리즘의 하나인 VDSR(Very-Deep Super-Resolution) [1]을 살펴봅니다.

VDSR 신경망

VDSR은 단일 영상 초고해상도 복원을 수행하도록 설계된 컨벌루션 신경망 아키텍처입니다 [1]. VDSR 신경망은 저해상도 영상과 고해상도 영상 사이의 매핑을 학습합니다. 이 매핑은 저해상도 영상과 고해상도 영상이 비슷한 영상 콘텐츠를 가지고 있고 주로 고주파 세부 정보만 다르기 때문에 가능합니다.

VDSR은 잔차 학습 전략을 사용합니다. 즉, 이 신경망은 잔차 영상을 추정하도록 학습합니다. 초고해상도 기법에서 잔차 영상이란 참조 영상의 크기와 일치하도록 쌍삼차 보간을 사용하여 업스케일링된 저해상도 영상과 고해상도 참조 영상과 사이의 차이입니다. 잔차 영상은 영상의 고주파 세부 정보에 대한 정보를 포함합니다.

VDSR 신경망은 컬러 영상의 휘도로부터 잔차 영상을 검출합니다. 영상의 휘도 채널 Y는 빨간색, 녹색, 파란색 픽셀 값의 일차 결합을 통해 각 픽셀의 밝기를 나타냅니다. 이와 반대로, 영상의 두 색차 채널 CbCr은 빨간색, 녹색, 파란색 픽셀 값의 다른 일차 결합으로 색차 정보를 나타냅니다. 인간의 지각은 색의 변화보다 밝기의 변화에 더 민감하기 때문에 VDSR은 휘도 채널만 사용하여 훈련됩니다.

Scaling 한 데이터 복구 방법

Yhighres가 고해상도 영상의 휘도이고 Ylowres가 쌍삼차 보간을 사용하여 업스케일링된 저해상도 영상의 휘도라면 VDSR 신경망에 대한 입력값은 Ylowres가 되고 신경망은 훈련 데이터로부터 Yresidual=Yhighres-Y lowres를 예측하도록 학습합니다.

VDSR 신경망이 잔차 영상을 추정하도록 학습한 후에는 업샘플링된 저해상도 영상에 추정된 잔차 영상을 더한 다음 영상을 다시 RGB 컬러스페이스로 변환하여 고해상도 영상을 복원할 수 있습니다.

스케일링 인자가 참조 영상의 크기를 저해상도 영상의 크기와 연결시킵니다. 스케일링 인자가 커질수록 저해상도 영상에서 고주파 영상 콘텐츠의 정보가 더 많이 손실되므로 SISR은 더욱 불량한 조건이 됩니다. VDSR은 큰 수용 영역을 사용함으로써 이 문제를 해결합니다. 이 예제에서는 스케일 증대를 사용하여 여러 개의 스케일링 인자로 VDSR 신경망을 훈련시킵니다. 스케일 증대를 사용하면 신경망이 작은 스케일링 인자를 사용해서 얻은 영상 컨텍스트를 활용할 수 있기 때문에 더 큰 스케일링 인자를 사용했을 때 결과가 개선됩니다. 또한, VDSR 신경망은 정수가 아닌 스케일링 인자를 갖는 영상을 수용하도록 일반화될 수 있습니다.

훈련 데이터와 테스트 데이터 다운로드하기

20,000개의 스틸 자연 영상으로 이루어진 IAPR TC-12 Benchmark를 다운로드합니다 [2]. 이 데이터 세트에는 사람, 동물, 도시 등의 사진이 포함되어 있습니다. 데이터 파일의 크기는 최대 1.8GB입니다. 훈련 데이터 세트를 다운로드하기를 원치 않는 경우에는 명령줄에 load("trainedVDSRNet.mat");를 입력하여 사전 훈련된 VDSR 신경망을 불러올 수 있습니다. 그런 다음 이 예제의 VDSR 신경망을 사용하여 단일 영상 초고해상도 복원 수행하기 섹션으로 건너뜁니다.

헬퍼 함수 downloadIAPRTC12Data를 사용하여 데이터를 다운로드합니다. 이 함수는 예제에 지원 파일로 첨부되어 있습니다. dataDir을 원하는 데이터 위치로 지정합니다.

dataDir = 
Scaling 한 데이터 복구 방법
tempdir
; downloadIAPRTC12Data(dataDir);

이 예제에서는 IAPR TC-12 Benchmark 데이터의 작은 서브셋을 사용하여 신경망을 훈련시킵니다. imageCLEF 훈련 데이터를 불러옵니다. 모든 영상은 32비트 JPEG 컬러 영상입니다.

trainImagesDir = fullfile(dataDir,"iaprtc12","images","02");
exts = [".jpg",".bmp",".png"];
pristineImages = imageDatastore(trainImagesDir,FileExtensions=exts);

훈련 영상의 개수를 나열합니다.

numel(pristineImages.Files)

훈련 데이터 준비하기

훈련 데이터 세트를 만들려면 업샘플링된 영상과 그에 대응하는 잔차 영상으로 구성된 영상 쌍을 생성하십시오.

업샘플링된 영상은 MAT 파일로 디스크의 upsampledDirName 디렉터리에 저장됩니다. 신경망 응답을 나타내는 계산된 잔차 영상은 MAT 파일로 디스크의 residualDirName 디렉터리에 저장됩니다. 보다 높은 정밀도를 위해 MAT 파일은 신경망을 훈련시킬 때 double 데이터형으로 저장됩니다.

upsampledDirName = trainImagesDir+filesep+"upsampledImages";
residualDirName = trainImagesDir+filesep+"residualImages";

헬퍼 함수 createVDSRTrainingSet을 사용하여 훈련 데이터를 전처리합니다. 이 함수는 예제에 지원 파일로 첨부되어 있습니다.

헬퍼 함수는 trainImages에 있는 원래 그대로의 영상 각각에 다음 작업을 수행합니다.

  • 영상을 YCbCr 컬러스페이스로 변환합니다.

  • 샘플 저해상도 영상을 만들기 위해 다양한 스케일링 인자로 휘도(Y) 채널의 크기를 줄인 다음, 쌍삼차 보간을 사용하여 영상을 원본 크기로 재조정합니다.

  • 원래 그대로의 영상과 크기 조정된 영상의 차이를 계산합니다.

  • 크기 조정된 영상 및 잔차 영상을 디스크에 저장합니다.

scaleFactors = [2 3 4];
createVDSRTrainingSet(pristineImages,scaleFactors,upsampledDirName,residualDirName);

훈련 세트를 위한 전처리 파이프라인 정의하기

이 예제에서 신경망 입력값은 쌍삼차 보간을 사용하여 업샘플링된 저해상도 영상입니다. 원하는 신경망 응답은 잔차 영상입니다. 입력 영상 파일 모음에서 upsampledImages라는 영상 데이터저장소를 만듭니다. 계산된 잔차 영상 파일 모음에서 residualImages라는 영상 데이터저장소를 만듭니다. 두 데이터저장소 모두 영상 파일에서 영상 데이터를 읽어 들이기 위해 헬퍼 함수 matRead가 필요합니다. 이 함수는 예제에 지원 파일로 첨부되어 있습니다.

upsampledImages = imageDatastore(upsampledDirName,FileExtensions=".mat",ReadFcn=@matRead);
residualImages = imageDatastore(residualDirName,FileExtensions=".mat",ReadFcn=@matRead);

데이터 증대의 파라미터를 지정하는 imageDataAugmenter (Deep Learning Toolbox)를 만듭니다. 훈련 중에 데이터 증대를 사용하여 훈련 데이터를 바꿉니다. 이렇게 하면 사용 가능한 훈련 데이터의 양이 늘어납니다. 여기서 증대기는 90도만큼 무작위 회전하고 x 방향으로 무작위 반사하도록 지정합니다.

augmenter = imageDataAugmenter( ...
    RandRotatio=@()randi([0,1],1)*90, ...
    RandXReflection=true);

업샘플링된 영상의 데이터저장소와 잔차 영상의 데이터저장소로부터 무작위 패치 추출을 수행하는 randomPatchExtractionDatastore를 만듭니다. 패치 추출은 하나의 큰 영상에서 작은 영상 패치들로 이루어진 대규모 세트를 추출합니다. 이러한 유형의 데이터 증대는 image-to-image 회귀 문제에서 자주 사용되는데, 아주 작은 크기의 입력 영상에 대해 여러 신경망 아키텍처를 훈련시킬 수 있습니다. 이는 원래의 훈련 세트에 들어있는 전체 크기의 영상 각각으로부터 많은 수의 패치를 추출할 수 있음을 의미하며, 이로 인해 훈련 세트의 크기가 대폭 늘어나게 됩니다.

patchSize = [41 41];
patchesPerImage = 64;
dsTrain = randomPatchExtractionDatastore(upsampledImages,residualImages,patchSize, ...
    DataAugmentation=augmenter,PatchesPerImage=patchesPerImage);

결과로 생성되는 데이터저장소 dsTrain은 Epoch가 반복될 때마다 신경망으로 데이터의 미니 배치를 제공합니다. 데이터저장소에서 읽어 들인 결과를 미리 봅니다.

inputBatch = preview(dsTrain);
disp(inputBatch)

      InputImage      ResponseImage 
    ______________    ______________

    {41×41 double}    {41×41 double}
    {41×41 double}    {41×41 double}
    {41×41 double}    {41×41 double}
    {41×41 double}    {41×41 double}
    {41×41 double}    {41×41 double}
    {41×41 double}    {41×41 double}
    {41×41 double}    {41×41 double}
    {41×41 double}    {41×41 double}

VDSR 계층 설정하기

이 예제에서는 Deep Learning Toolbox™에서 제공하는 41개의 개별 계층을 사용하여 VSDR 신경망을 정의합니다. 여기에는 다음이 포함됩니다.

  • imageInputLayer (Deep Learning Toolbox) - 영상 입력 계층

  • convolution2dLayer (Deep Learning Toolbox) - 컨벌루션 신경망의 2차원 컨벌루션 계층

  • reluLayer (Deep Learning Toolbox) - ReLU(Rectified Linear Unit) 계층

  • regressionLayer (Deep Learning Toolbox) - 신경망의 회귀 출력 계층

첫 번째 계층 imageInputLayer는 영상 패치에 대해 연산을 수행합니다. 패치 크기는 신경망 수용 영역을 기반으로 합니다. 신경망 수용 영역은 신경망의 최상단 계층의 응답에 영향을 주는 공간 영상 영역입니다. 이상적인 경우에 신경망 수용 영역은 크기가 영상 크기와 같으므로 필드에서 영상에 포함된 모든 하이 레벨 특징을 볼 수 있습니다. 이 경우 컨벌루션 계층이 D개인 신경망에 대해 수용 영역은 (2D+1)×(2D+1)입니다.

VDSR에는 20개의 컨벌루션 계층이 있으므로 수용 영역 및 영상 패치 크기는 41×41이 됩니다. VDSR은 휘도 채널만 사용하여 훈련되므로 영상 입력 계층은 채널이 1개인 영상을 받습니다.

networkDepth = 20;
firstLayer = imageInputLayer([41 41 1],Name="InputLayer",Normalization="none");

영상 입력 계층 뒤에는 크기가 3×3인 필터를 64개 포함하는 2차원 컨벌루션 계층이 옵니다. 미니 배치 크기가 필터의 개수를 결정합니다. 각 컨벌루션 후에도 특징 맵의 크기가 입력값의 크기와 같은 상태로 유지되도록 각 컨벌루션 계층에 대한 입력값을 0으로 채웁니다. He의 방법 [3]은 뉴런 학습에 비대칭성이 존재하도록 가중치를 난수 값으로 초기화합니다. 각 컨벌루션 계층 뒤에는 신경망에 비선형성을 발생시키는 ReLU 계층이 옵니다.

convLayer = convolution2dLayer(3,64,Padding=1, ...
    WeightsInitializer="he",BiasInitializer="zeros",Name="Conv1");

ReLU 계층을 지정합니다.

relLayer = reluLayer(Name="ReLU1");

중간 계층에는 컨벌루션 계층과 ReLU 계층 18개가 번갈아 가며 포함되어 있습니다. 각 컨벌루션 계층은 크기가 3×3×64인 필터 64개를 포함하는데, 여기서 하나의 필터는 64개의 채널에서 3×3 공간 영역에 대해 연산을 수행합니다. 앞에서와 마찬가지로, 각 컨벌루션 계층 뒤에는 ReLU 계층이 옵니다.

middleLayers = [convLayer relLayer];
for layerNumber = 2:networkDepth-1
    convLayer = convolution2dLayer(3,64,Padding=[1 1], ...
        WeightsInitializer="he",BiasInitializer="zeros", ...
        Name="Conv"+num2str(layerNumber));
    
    relLayer = reluLayer(Name="ReLU"+num2str(layerNumber));
    middleLayers = [middleLayers convLayer relLayer];    
end

끝에서 두 번째 계층은 크기가 3×3×64인 필터를 한 개 가지는 컨벌루션 계층이며 영상을 복원합니다.

convLayer = convolution2dLayer(3,1,Padding=[1 1], ...
    WeightsInitializer="he",BiasInitializer="zeros", ...
    NumChannels=64,Name="Conv"+num2str(networkDepth));

마지막 계층에 ReLU 계층 대신 회귀 계층이 옵니다. 회귀 계층은 잔차 영상과 신경망 예측 사이의 평균 제곱 오차를 계산합니다.

finalLayers = [convLayer regressionLayer(Name="FinalRegressionLayer")];

모든 계층을 결합하여 VDSR 신경망을 형성합니다.

layers = [firstLayer middleLayers finalLayers];

훈련 옵션 지정하기

SGDM(Stochastic Gradient Descent with Momentum: 모멘텀을 사용한 확률적 경사하강법)을 사용하여 신경망을 훈련시킵니다. trainingOptions (Deep Learning Toolbox) 함수를 사용하여 SGDM의 하이퍼파라미터 설정을 지정합니다. 학습률은 초기에 0.1로 설정되고, Epoch 10회가 지날 때마다 10배만큼 줄어듭니다. 훈련을 Epoch 100회 수행합니다.

심층 신경망을 훈련시키는 데는 상당한 시간이 소요됩니다. 학습률을 높게 지정하여 훈련 시간을 줄일 수 있습니다. 그러나 이렇게 하면 신경망의 기울기가 통제할 수 없을 만큼 증가하여 신경망이 성공적으로 훈련되지 않을 수 있습니다. 기울기를 유의미한 범위 내로 유지하기 위해 "GradientThreshold"의 값을 0.01로 지정하고 "GradientThresholdMethod"가 기울기의 L2-노름을 사용하도록 지정하여 기울기 제한을 활성화합니다.

maxEpochs = 100;
epochIntervals = 1;
initLearningRate = 0.1;
learningRateFactor = 0.1;
l2reg = 0.0001;
miniBatchSize = 64;
options = trainingOptions("sgdm", ...
    Momentum=0.9, ...
    InitialLearnRate=initLearningRate, ...
    LearnRateSchedule="piecewise", ...
    LearnRateDropPeriod=10, ...
    LearnRateDropFactor=learningRateFactor, ...
    L2Regularization=l2reg, ...
    MaxEpochs=maxEpochs, ...
    MiniBatchSize=miniBatchSize, ...
    GradientThresholdMethod="l2norm", ...
    GradientThreshold=0.01, ...
    Plots="training-progress", ...
    Verbose=false);

신경망 훈련시키기

기본적으로 이 예제에서는 스케일링 인자 2, 3, 4에 대해 영상에 초해상도 기법을 적용하도록 훈련된 VDSR 신경망의 사전 훈련된 버전을 불러옵니다. 사전 훈련된 신경망을 사용하면 훈련이 완료될 때까지 기다리지 않고 테스트 영상의 초고해상도 복원을 수행할 수 있습니다.

VDSR 신경망을 훈련시키려면 다음 코드에서 doTraining 변수를 true로 설정하십시오. trainNetwork (Deep Learning Toolbox) 함수를 사용하여 신경망을 훈련시킵니다.

사용 가능한 GPU가 있으면 GPU에서 훈련시킵니다. GPU를 사용하려면 Parallel Computing Toolbox™와 CUDA® 지원 NVIDIA® GPU가 필요합니다. 자세한 내용은 릴리스별 GPU 지원 (Parallel Computing Toolbox) 항목을 참조하십시오. 훈련은 NVIDIA Titan X에서 6시간 정도 걸립니다.

doTraining = 
Scaling 한 데이터 복구 방법
false
; if doTraining net = trainNetwork(dsTrain,layers,options); modelDateTime = string(datetime("now",Format="yyyy-MM-dd-HH-mm-ss")); save("trainedVDSR-"+modelDateTime+".mat","net"); else load("trainedVDSRNet.mat"); end

VDSR 신경망을 사용하여 단일 영상 초고해상도 복원 수행하기

VDSR 신경망을 사용하여 단일 영상 초고해상도(SISR) 복원을 수행하려면 이 예제의 나머지 단계를 따르십시오.

  • 고해상도 참조 영상에서 샘플 저해상도 영상 만들기.

  • 딥러닝에 의존하지 않는 기존의 영상 처리 솔루션인 쌍삼차 보간을 사용하여 저해상도 영상에서 SISR 복원.

  • VDSR 심층망을 사용하여 저해상도 영상에서 SISR 복원.

  • 쌍삼차 보간과 VDSR을 사용하여 복원된 고해상도 영상을 시각적으로 비교.

  • 초고해상도 복원 영상과 고해상도 참조 영상의 유사도를 수치화하여 해당 영상의 품질 평가.

샘플 저해상도 영상 만들기

테스트 데이터 세트 testImages는 Image Processing Toolbox™에서 제공하는 20개의 왜곡되지 않은 영상을 포함합니다. 영상을 imageDatastore로 불러오고 몽타주에 표시합니다.

fileNames = ["sherlock.jpg","peacock.jpg","fabric.png","greens.jpg", ...
    "hands1.jpg","kobi.png","lighthouse.png","office_4.jpg", ...
    "onion.png","pears.png","yellowlily.jpg","indiancorn.jpg", ...
    "flamingos.jpg","sevilla.jpg","llama.jpg","parkavenue.jpg", ...
    "strawberries.jpg","trailer.jpg","wagon.jpg","football.jpg"];
filePath = fullfile(matlabroot,"toolbox","images","imdata")+filesep;
filePathNames = strcat(filePath,fileNames);
testImages = imageDatastore(filePathNames);

테스트 영상을 몽타주 형태로 표시합니다.

Scaling 한 데이터 복구 방법

초고해상도 신경망을 테스트하는 데 사용할 테스트 영상을 하나 선택합니다.

testImage = 
Scaling 한 데이터 복구 방법
"sherlock.jpg"
; Ireference = imread(testImage); Ireference = im2double(Ireference); imshow(Ireference) title("High-Resolution Reference Image")

Scaling 한 데이터 복구 방법

imresize를 스케일링 인자 0.25와 함께 사용하여 고해상도 참조 영상의 저해상도 버전을 만듭니다. 다운스케일링 과정에서 영상의 고주파 성분이 손실됩니다.

scaleFactor = 0.25;
Ilowres = imresize(Ireference,scaleFactor,"bicubic");
imshow(Ilowres)
title("Low-Resolution Image")

Scaling 한 데이터 복구 방법

쌍삼차 보간을 사용하여 영상 해상도 개선하기

딥러닝 없이 영상 해상도를 높이는 표준 방법은 쌍삼차 보간을 사용하는 것입니다. 결과로 생성되는 고해상도 영상이 참조 영상과 크기가 같아지도록 쌍삼차 보간을 사용하여 저해상도 영상을 업스케일링합니다.

[nrows,ncols,np] = size(Ireference);
Ibicubic = imresize(Ilowres,[nrows ncols],"bicubic");
imshow(Ibicubic)
title("High-Resolution Image Obtained Using Bicubic Interpolation")

Scaling 한 데이터 복구 방법

사전 훈련된 VDSR 신경망을 사용하여 영상 해상도 개선하기

인간의 지각은 색의 변화보다 밝기의 변화에 더 민감하기 때문에 VDSR은 영상의 휘도 채널만 사용하여 훈련된다는 사실을 기억하십시오.

rgb2ycbcr 함수를 사용하여 저해상도 영상을 RGB 컬러스페이스에서 휘도(Iy) 채널과 색차(IcbIcr) 채널로 변환합니다.

Iycbcr = rgb2ycbcr(Ilowres);
Iy = Iycbcr(:,:,1);
Icb = Iycbcr(:,:,2);
Icr = Iycbcr(:,:,3);

쌍삼차 보간을 사용하여 휘도 채널과 두 색차 채널을 업스케일링합니다. 업샘플링된 색차 채널 Icb_bicubicIcr_bicubic에는 추가 처리가 필요하지 않습니다.

Iy_bicubic = imresize(Iy,[nrows ncols],"bicubic");
Icb_bicubic = imresize(Icb,[nrows ncols],"bicubic");
Icr_bicubic = imresize(Icr,[nrows ncols],"bicubic");

업스케일링된 휘도 성분 Iy_bicubic을 훈련된 VDSR 신경망에 전달하여 통과시킵니다. 마지막 계층(회귀 계층)에서 activations (Deep Learning Toolbox)를 관찰합니다. 신경망의 출력값이 원하는 잔차 영상입니다.

Iresidual = activations(net,Iy_bicubic,41);
Iresidual = double(Iresidual);
imshow(Iresidual,[])
title("Residual Image from VDSR")

Scaling 한 데이터 복구 방법

업스케일링된 휘도 성분에 잔차 영상을 더하여 고해상도 VDSR 휘도 성분을 얻습니다.

Isr = Iy_bicubic + Iresidual;

고해상도 VDSR 휘도 성분에 업스케일링된 색 성분을 결합합니다. ycbcr2rgb 함수를 사용하여 영상을 RGB 컬러스페이스로 변환합니다. 결과로 생성된 영상이 VDSR을 사용한 최종 고해상도 컬러 영상입니다.

Ivdsr = ycbcr2rgb(cat(3,Isr,Icb_bicubic,Icr_bicubic));
imshow(Ivdsr)
title("High-Resolution Image Obtained Using VDSR")

Scaling 한 데이터 복구 방법

시각적 및 정량적 비교

고해상도 영상을 시각적으로 더 잘 이해하려면 각 영상 내부의 작은 영역을 살펴보십시오. 벡터 roi를 [x y 너비 높이] 형식으로 사용하여 관심 영역(ROI)을 지정합니다. 요소는 ROI의 왼쪽 위 코너 x, y 좌표와 너비 및 높이를 정의합니다.

고해상도 영상을 이 ROI로 자른 다음 결과를 몽타주 형태로 표시합니다. VDSR 영상이 쌍삼차 보간을 사용하여 만든 고해상도 영상보다 세부 묘사가 더 뚜렷하고 경계가 더 분명한 것을 볼 수 있습니다.

montage({imcrop(Ibicubic,roi),imcrop(Ivdsr,roi)})
title("High-Resolution Results Using Bicubic Interpolation (Left) vs. VDSR (Right)");

Scaling 한 데이터 복구 방법

영상 품질 메트릭을 사용하여 쌍삼차 보간을 사용한 고해상도 영상과 VDSR 영상을 정량적으로 비교합니다. 참조 영상은 샘플 저해상도 영상을 준비하기 전의 원본 고해상도 영상 Ireference입니다.

참조 영상 대비 각 영상의 피크 신호 대 잡음비(PSNR)를 측정합니다. 일반적으로 PSNR 값이 클수록 더 나은 영상 품질을 나타냅니다. 이 메트릭에 대한 자세한 내용은 psnr 항목을 참조하십시오.

bicubicPSNR = psnr(Ibicubic,Ireference)

vdsrPSNR = psnr(Ivdsr,Ireference)

각 영상의 구조적 유사도 지수(SSIM)를 측정합니다. SSIM은 참조 영상을 기준으로 영상의 3가지 특성인 휘도, 대비, 구조의 시각적 영향을 평가합니다. SSIM의 값이 1에 가까울수록 테스트 영상이 참조 영상에 더 잘 합치합니다. 이 메트릭에 대한 자세한 내용은 ssim 항목을 참조하십시오.

bicubicSSIM = ssim(Ibicubic,Ireference)

vdsrSSIM = ssim(Ivdsr,Ireference)

NIQE(Naturalness Image Quality Evaluator)를 사용하여 지각 영상 품질을 측정합니다. NIQE 점수가 낮을수록 더 나은 지각 품질을 나타냅니다. 이 메트릭에 대한 자세한 내용은 niqe 항목을 참조하십시오.

bicubicNIQE = niqe(Ibicubic)

스케일링 인자 2, 3, 4인 경우에 대해 테스트 영상 전체 세트의 평균 PSNR 및 SSIM을 계산합니다. 문제를 단순화하기 위해 헬퍼 함수 vdsrMetrics를 사용하여 평균 메트릭을 계산할 수 있습니다. 이 함수는 예제에 지원 파일로 첨부되어 있습니다.

scaleFactors = [2 3 4];
vdsrMetrics(net,testImages,scaleFactors);

Results for Scale factor 2

Average PSNR for Bicubic = 31.467070
Average PSNR for VDSR = 31.481973
Average SSIM for Bicubic = 0.935820
Average SSIM for VDSR = 0.947057

Results for Scale factor 3

Average PSNR for Bicubic = 28.107057
Average PSNR for VDSR = 28.430546
Average SSIM for Bicubic = 0.883927
Average SSIM for VDSR = 0.894634

Results for Scale factor 4

Average PSNR for Bicubic = 27.066129
Average PSNR for VDSR = 27.846590
Average SSIM for Bicubic = 0.863270
Average SSIM for VDSR = 0.878101

각 스케일링 인자에 대해 VDSR이 쌍삼차 보간보다 메트릭 점수가 높습니다.

참고 문헌

[1] Kim, J., J. K. Lee, and K. M. Lee. "Accurate Image Super-Resolution Using Very Deep Convolutional Networks." Proceedings of the IEEE® Conference on Computer Vision and Pattern Recognition. 2016, pp. 1646-1654.

[2] Grubinger, M., P. Clough, H. Müller, and T. Deselaers. "The IAPR TC-12 Benchmark: A New Evaluation Resource for Visual Information Systems." Proceedings of the OntoImage 2006 Language Resources For Content-Based Image Retrieval. Genoa, Italy. Vol. 5, May 2006, p. 10.

[3] He, K., X. Zhang, S. Ren, and J. Sun. "Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification." Proceedings of the IEEE International Conference on Computer Vision, 2015, pp. 1026-1034.

참고 항목

randomPatchExtractionDatastore | rgb2ycbcr | ycbcr2rgb | trainingOptions (Deep Learning Toolbox) | trainNetwork (Deep Learning Toolbox) | transform | combine

관련 항목

  • 딥러닝을 위해 영상 전처리하기 (Deep Learning Toolbox)
  • 딥러닝 계층 목록 (Deep Learning Toolbox)