Одно суперразрешение изображений Используя глубокое обучение

Этот пример показывает, как обучить нейронную сеть Очень глубокого суперразрешения (VDSR), затем используйте сеть VDSR, чтобы оценить изображение с высоким разрешением от одного изображения с низкой разрешающей способностью.

Пример показывает, как обучить сеть VDSR и также обеспечивает предварительно обученную сеть VDSR. Если вы принимаете решение обучить сеть VDSR, использование CUDA-способного графического процессора NVIDIA™ с вычисляют возможность 3.0, или выше настоятельно рекомендован. Использование графического процессора требует Parallel Computing Toolbox™.

Введение

Суперразрешение является процессом создания изображений с высоким разрешением от изображений с низкой разрешающей способностью. Этот пример рассматривает одно суперразрешение изображений (SISR), где цель состоит в том, чтобы восстановить одно изображение с высоким разрешением с одного изображения с низкой разрешающей способностью. SISR сложен, потому что высокочастотное содержимое изображения обычно не может восстанавливаться с изображения с низкой разрешающей способностью. Без высокочастотной информации ограничивается качество изображения с высоким разрешением. Далее, SISR является плохо изложенной проблемой, потому что одно изображение с низкой разрешающей способностью может привести к нескольким возможным изображениям с высоким разрешением.

Несколько методов, включая алгоритмы глубокого обучения, были предложены, чтобы выполнить SISR. Этот пример исследует один алгоритм глубокого обучения для SISR, названного очень глубоким суперразрешением (VDSR) [1].

Сеть VDSR

VDSR является сверточной архитектурой нейронной сети, разработанной, чтобы выполнить одно суперразрешение [1] изображений. Сеть VDSR изучает отображение между низким - и изображениями с высоким разрешением. Это отображение возможно, потому что изображения с высоким разрешением и с низкой разрешающей способностью имеют подобное содержимое изображения и отличаются, в основном, по высокочастотным деталям.

VDSR использует остаточную стратегию обучения, означая, что сеть учится оценивать остаточное изображение. В контексте суперразрешения остаточное изображение является различием между ссылочным изображением с высоким разрешением и изображением с низкой разрешающей способностью, которое было увеличено масштаб с помощью бикубической интерполяции, чтобы совпадать с размером ссылочного изображения. Остаточное изображение содержит информацию о высокочастотных деталях изображения.

Сеть VDSR обнаруживает остаточное изображение от яркости цветного изображения. Канал яркости изображения, Y, представляет яркость каждого пикселя через линейную комбинацию красных, зеленых, и синих пиксельных значений. Напротив, два канала цветности изображения, Cb и Cr, являются различными линейными комбинациями красных, зеленых, и синих пиксельных значений, которые представляют информацию о цветовом различии. VDSR обучен с помощью только канал яркости, потому что человеческое восприятие более чувствительно к изменениям в яркости, чем к изменениям в цвете.

Если Yвысокоres яркость изображения с высоким разрешением и Yпонижается яркость изображение с низкой разрешающей способностью, которое было увеличено масштаб с помощью бикубической интерполяции, затем вход к сети VDSR Yпонижается и сеть учится предсказывать Yневязка=Yвысокого разрешения-Yпонижается от данных тренировки.

После того, как сеть VDSR учится оценивать остаточное изображение, можно восстановить изображения с высоким разрешением путем добавления предполагаемого остаточного изображения в сверхдискретизированное изображение с низкой разрешающей способностью, затем преобразования изображения назад в цветовое пространство RGB.

Масштабный коэффициент связывает размер ссылочного изображения к размеру изображения с низкой разрешающей способностью. Когда масштабный коэффициент увеличивается, SISR становится более плохо изложенным, потому что изображение с низкой разрешающей способностью теряет больше информации о высокочастотном содержимом изображения. VDSR решает эту проблему при помощи большого восприимчивого поля. Этот пример обучает сеть VDSR с несколькими масштабными коэффициентами с помощью увеличения шкалы. Масштабируйтесь увеличение улучшает результаты в факторах более широкого масштаба, потому что сеть может использовать в своих интересах контекст изображений от факторов меньшего масштаба. Кроме того, сеть VDSR может сделать вывод, чтобы принять изображения с масштабными коэффициентами нецелого числа.

Загрузите обучение и тестовые данные

Загрузите Сравнительный тест IAPR TC-12, который состоит из 20 000 все еще естественных изображений [2]. Набор данных включает фотографии людей, животных, города и т.д. Размер файла данных составляет ~1.8 Гбайт. Если вы не хотите загружать обучающий набор данных, то можно загрузить предварительно обученную сеть VDSR путем ввода load('trainedVDSR-Epoch-100-ScaleFactors-234.mat'); в командной строке. Затем перейдите непосредственно к разделу Perform Single Image Super-Resolution Using VDSR Network в этом примере.

Используйте функцию помощника, downloadIAPRTC12Data, чтобы загрузить данные. Эта функция присоединена к примеру как к вспомогательному файлу.

imagesDir = tempdir;
url = 'http://www-i6.informatik.rwth-aachen.de/imageclef/resources/iaprtc12.tgz';
downloadIAPRTC12Data(url,imagesDir);

Этот пример обучит сеть с небольшим подмножеством TC IAPR 12 Исходных данных. Загрузите imageCLEF данные тренировки. Все изображения являются 32-битными цветными изображениями JPEG.

trainImagesDir = fullfile(imagesDir,'iaprtc12','images','02');
exts = {'.jpg','.bmp','.png'};
pristineImages = imageDatastore(trainImagesDir,'FileExtensions',exts);

Перечислите количество учебных изображений.

numel(pristineImages.Files)
ans = 616

Подготовьте данные тренировки

Чтобы создать обучающий набор данных, сгенерируйте пары изображений, состоящих из сверхдискретизированных изображений и соответствующих остаточных изображений.

Сверхдискретизированные изображения хранятся на диске как файлы 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);

Задайте конвейер предварительной обработки для набора обучающих данных

В этом примере сетевые входные параметры являются изображениями с низкой разрешающей способностью, которые были сверхдискретизированы с помощью бикубической интерполяции. Желаемые сетевые ответы являются остаточными изображениями. Создайте datastore изображений под названием upsampledImages из набора входных файлов изображений. Создайте datastore изображений под названием residualImages из набора вычисленных остаточных файлов изображений. Оба хранилища данных требуют, чтобы функция помощника, matRead, считала данные изображения из файлов изображений. Эта функция присоединена к примеру как к вспомогательному файлу.

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

Используйте функцию combine, чтобы создать один datastore, который содержит связанные пары сверхдискретизированных изображений и остаточных изображений.

dsTrain = combine(upsampledImages,residualImages);

Создайте imageDataAugmenter, который задает параметры увеличения данных. Используйте увеличение данных во время обучения отличаться данные тренировки, который эффективно увеличивает сумму доступных данных тренировки. Здесь, увеличение задает случайное вращение 90 градусами и случайные отражения в направлении X.

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

Используйте функцию transform, чтобы применить случайное увеличение, заданное в imageDataAugmenter к набору обучающих данных. Функция augment принимает массивы ячеек связанных изображений и увеличивает каждое изображение тот же путь, который требуется в проблемах регрессии от изображения к изображению.

dsTrain = transform(dsTrain,@(imagePair) augment(augmenter,imagePair));

Как последний шаг в конвейере предварительной обработки, выполните рандомизированную экстракцию закрашенной фигуры с помощью функции transform. Экстракция закрашенной фигуры является процессом извлечения большого набора маленьких закрашенных фигур изображений или мозаик, из одного увеличенного изображения. Этот тип увеличения данных часто используется в проблемах регрессии от изображения к изображению, где много сетевой архитектуры могут быть обучены на очень небольших входных размерах изображения. Это означает, что большое количество закрашенных фигур может быть извлечено от каждого полноразмерного изображения в исходном наборе обучающих данных, который значительно увеличивает размер набора обучающих данных.

Этот пример задает рандомизированные операции экстракции закрашенной фигуры в функциональном extractImagePatches. Эта функция присоединена к примеру как к вспомогательному файлу.

patchSize = [41 41];
patchesPerImage = 64;
dsTrain = transform(dsTrain,@(imagePair) extractImagePatches(imagePair,patchesPerImage,patchSize));

Получившийся datastore, dsTrain, обеспечивает мини-пакеты данных к сети в каждой итерации эпохи. Предварительно просмотрите результат чтения от datastore.

inputBatch = preview(dsTrain);
disp(inputBatch)
    [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

Этот пример задает сеть VDSR с помощью 41 отдельного слоя от Deep Learning Toolbox™, включая:

  • Слой входа imageInputLayer - Image

  • convolution2dLayer - 2D слой свертки для сверточных нейронных сетей

  • reluLayer - Исправленный линейный модульный слой (ReLU)

  • regressionLayer - Regression слой вывода для нейронной сети

Первый слой, imageInputLayer, работает с закрашенными фигурами изображений. Размер закрашенной фигуры основан на сетевом восприимчивом поле, которое является пространственной областью изображений, которая влияет на ответ верхнего слоя в сети. Идеально, сетевое восприимчивое поле совпадает с размером изображения так, чтобы поле видело все высокоуровневые функции в изображении. В этом случае, для сети со сверточными слоями D, восприимчивое поле (2D+1) (2D+1).

VDSR имеет 20 сверточных слоев, таким образом, восприимчивое поле и размер закрашенной фигуры изображений 41 41. Входной слой изображений принимает изображения с одним каналом, потому что VDSR обучен с помощью только канал яркости.

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

Входной слой изображений сопровождается 2D сверточным слоем, который содержит 64 фильтра 3х3 размера. Мини-пакетный размер определяет количество фильтров. Нулевая клавиатура входные параметры к каждому сверточному слою так, чтобы карты функции остались тот же размер как вход после каждой свертки. Он - метод [3], инициализирует веса к случайным значениям так, чтобы была асимметрия в изучении нейрона. Каждый сверточный слой сопровождается слоем ReLU, который вводит нелинейность в сети.

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

Задайте слой ReLU.

relLayer = reluLayer('Name','ReLU1');

Средние слои содержат 18 переменных сверточных и исправленных линейных модульных слоев. Каждый сверточный слой содержит 64 фильтра размера 3 3 64, где фильтр работает с 3х3 пространственной областью через 64 канала. Как прежде, слой 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];

Также можно использовать функцию помощника vdsrLayers, чтобы создать слои VDSR. Эта функция присоединена к примеру как к вспомогательному файлу.

layers = vdsrLayers;

Задайте опции обучения

Обучите сеть с помощью стохастического спуска градиента с импульсом (SGDM) оптимизация. Задайте гиперустановки параметров для SDGM при помощи функции trainingOptions. Темпом обучения является первоначально 0.1 и уменьшенный фактором 10 каждых 10 эпох. Обучайтесь в течение 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);

Обучите сеть

После конфигурирования опций обучения и случайного datastore экстракции закрашенной фигуры, обучите сеть VDSR с помощью функции trainNetwork. Чтобы обучить сеть, установите параметр doTraining в следующем коде к true. CUDA-способный графический процессор NVIDIA™ с вычисляет возможность 3.0, или выше настоятельно рекомендован для обучения.

Если вы сохраняете параметр doTraining в следующем коде как false, то пример возвращает предварительно обученную сеть VDSR, которая была обучена, чтобы суперразрешить изображения для масштабных коэффициентов 2, 3 и 4.

Примечание: Обучение занимает приблизительно 6 часов на Титане NVIDIA™ X и может взять еще дольше в зависимости от вашего оборудования графического процессора.

doTraining = false;
if doTraining
    modelDateTime = datestr(now,'dd-mmm-yyyy-HH-MM-SS');
    net = trainNetwork(dsTrain,layers,options);
    save(['trainedVDSR-' modelDateTime '-Epoch-' num2str(maxEpochs*epochIntervals) 'ScaleFactors-' num2str(234) '.mat'],'net','options');
else
    load('trainedVDSR-Epoch-100-ScaleFactors-234.mat');
end

Выполните одно суперразрешение изображений Используя сеть VDSR

Чтобы выполнить одно суперразрешение изображений (SISR) с помощью сети VDSR, выполните остающиеся шаги этого примера. Остаток от примера показывает как:

  • Создайте демонстрационное изображение с низкой разрешающей способностью из ссылочного изображения с высоким разрешением.

  • Выполните SISR на изображении с низкой разрешающей способностью с помощью бикубической интерполяции, традиционное решение для обработки изображений, которое не полагается на глубокое обучение.

  • Выполните SISR на изображении с низкой разрешающей способностью с помощью нейронной сети VDSR.

  • Визуально сравните восстановленные изображения с высоким разрешением с помощью бикубической интерполяции и VDSR.

  • Оцените качество суперразрешенных изображений путем определения количества подобия изображений к ссылочному изображению с высоким разрешением.

Создайте демонстрационное изображение с низкой разрешающей способностью

Создайте изображение с низкой разрешающей способностью, которое будет использоваться, чтобы сравнить результаты суперразрешения с помощью глубокого обучения для результата с помощью традиционных методов обработки изображений, таких как бикубическая интерполяция. Набор тестовых данных, testImages, содержит 21 неискаженное изображение, поставленное в Image Processing Toolbox™. Загрузите изображения в imageDatastore.

exts = {'.jpg','.png'};
fileNames = {'sherlock.jpg','car2.jpg','fabric.png','greens.jpg','hands1.jpg','kobi.png', ...
    'lighthouse.png','micromarket.jpg','office_4.jpg','onion.png','pears.png','yellowlily.jpg', ...
    'indiancorn.jpg','flamingos.jpg','sevilla.jpg','llama.jpg','parkavenue.jpg', ...
    'peacock.jpg','car1.jpg','strawberries.jpg','wagon.jpg'};
filePath = [fullfile(matlabroot,'toolbox','images','imdata') filesep];
filePathNames = strcat(filePath,fileNames);
testImages = imageDatastore(filePathNames,'FileExtensions',exts);

Отобразите изображения тестирования как монтаж.

montage(testImages)

Выберите одно из изображений, чтобы использовать в качестве ссылочного изображения для суперразрешения. Можно опционально использовать собственное изображение с высоким разрешением в качестве ссылочного изображения.

indx = 1; % Index of image to read from the test image datastore
Ireference = readimage(testImages,indx);
Ireference = im2double(Ireference);
imshow(Ireference)
title('High-Resolution Reference Image')

Создайте версию с низкой разрешающей способностью ссылочного изображения с высоким разрешением при помощи imresize с масштабным коэффициентом 0,25. Высокочастотные компоненты изображения потеряны во время уменьшения масштаба.

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

Улучшите разрешение изображения Используя бикубическую интерполяцию

Стандартный способ увеличить разрешение изображения без глубокого обучения состоит в том, чтобы использовать бикубическую интерполяцию. Увеличьте масштаб изображение с низкой разрешающей способностью с помощью бикубической интерполяции так, чтобы получившееся изображение с высоким разрешением было одного размера как ссылочное изображение.

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

Улучшите разрешение изображения Используя предварительно обученную сеть VDSR

Вспомните, что VDSR обучен с помощью только канал яркости изображения, потому что человеческое восприятие более чувствительно к изменениям в яркости, чем к изменениям в цвете.

Преобразуйте изображение с низкой разрешающей способностью от цветового пространства RGB до яркости (Iy) и цветность (Icb и Icr) каналы при помощи функции rgb2ycbcr.

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

Увеличьте масштаб яркость и два канала цветности с помощью бикубической интерполяции. Сверхдискретизированные каналы цветности, Icb_bicubic и Icr_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 от последнего слоя (слой регрессии). Вывод сети является желаемым остаточным изображением.

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

Добавьте остаточное изображение в увеличенный масштаб компонент яркости, чтобы получить компонент яркости VDSR с высоким разрешением.

Isr = Iy_bicubic + Iresidual;

Конкатенация компонента яркости VDSR с высоким разрешением с увеличенными масштаб компонентами цвета. Преобразуйте изображение в цветовое пространство RGB при помощи функции ycbcr2rgb. Результатом является итоговое цветное изображение с высоким разрешением с помощью VDSR.

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

Визуальное и количественное сравнение

Чтобы получить лучшее визуальное понимание изображений с высоким разрешением, исследуйте небольшую область в каждом изображении. Задайте видимую область (ROI) с помощью векторного roi в формате [x y высота ширины]. Элементы задают x-и y-координату левого верхнего угла, и ширину и высоту ROI.

roi = [320 30 480 400];

Обрежьте изображения с высоким разрешением к этому ROI и отобразите результат как монтаж.

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

Изображение VDSR имеет более ясные детали и более резкие ребра.

Используйте метрики качества изображения, чтобы количественно сравнить изображение с высоким разрешением с помощью бикубической интерполяции для изображения VDSR. Ссылочное изображение является исходным изображением с высоким разрешением, Ireference, прежде, чем подготовить демонстрационное изображение с низкой разрешающей способностью.

Измерьте пиковое отношение сигнал-шум (PSNR) каждого изображения против ссылочного изображения. Большие значения PNSR обычно указывают на лучшее качество изображения. Смотрите psnr для получения дополнительной информации об этой метрике.

bicubicPSNR = psnr(Ibicubic,Ireference)
bicubicPSNR = 38.4747
vdsrPSNR = psnr(Ivdsr,Ireference)
vdsrPSNR = 39.2491

Измерьте структурный индекс подобия (SSIM) каждого изображения. SSIM оценивает визуальное влияние трех характеристик изображения: яркость, контраст и структура, против ссылочного изображения. Чем ближе значение SSIM к 1, тем лучше тестовое изображение соглашается со ссылочным изображением. Смотрите ssim для получения дополнительной информации об этой метрике.

bicubicSSIM = ssim(Ibicubic,Ireference)
bicubicSSIM = 0.9861
vdsrSSIM = ssim(Ivdsr,Ireference)
vdsrSSIM = 0.9875

Измерьте перцепционное качество изображения с помощью Средства анализа качества изображения естественности (NIQE). Меньшие очки NIQE указывают на лучшее перцепционное качество. Смотрите niqe для получения дополнительной информации об этой метрике.

bicubicNIQE = niqe(Ibicubic)
bicubicNIQE = 5.1721
vdsrNIQE = niqe(Ivdsr)
vdsrNIQE = 4.7006

Вычислите средний PSNR и SSIM целого набора тестовых изображений для масштабных коэффициентов 2, 3, и 4. Для простоты можно использовать функцию помощника, superResolutionMetrics, чтобы вычислить средние метрики.

scaleFactors = [2 3 4];
superResolutionMetrics(net,testImages,scaleFactors);
Results for Scale factor 2

Average PSNR for Bicubic = 31.809683
Average PSNR for VDSR = 31.926088
Average SSIM for Bicubic = 0.938194
Average SSIM for VDSR = 0.949278

Results for Scale factor 3

Average PSNR for Bicubic = 28.170441
Average PSNR for VDSR = 28.515179
Average SSIM for Bicubic = 0.884381
Average SSIM for VDSR = 0.895356

Results for Scale factor 4

Average PSNR for Bicubic = 27.010839
Average PSNR for VDSR = 27.849618
Average SSIM for Bicubic = 0.861604
Average SSIM for VDSR = 0.877360

Для каждого масштабного коэффициента, по сравнению с бикубической интерполяцией, VDSR имеет лучшие метрические очки.

Сводные данные

Этот пример показывает, как создать и обучить сеть VDSR для нескольких масштабных коэффициентов, затем используйте сеть, чтобы улучшить разрешение изображения через суперразрешение. Это шаги, чтобы обучить сеть:

  • Загрузите данные тренировки.

  • Предварительно обработайте данные тренировки с помощью функций transform и combine.

  • Задайте слои сети VDSR.

  • Задайте опции обучения.

  • Обучите сеть с помощью функции trainNetwork.

После обучения сети VDSR или загрузки предварительно обученной сети VDSR, пример выполняет суперразрешение по изображению с низкой разрешающей способностью. Пример сравнивает результат VDSR с суперразрешением с помощью бикубической интерполяции, которая не использует глубокое обучение. VDSR превосходит бикубическую интерполяцию по характеристикам и относительно перцепционного качества изображения и относительно количественных качественных измерений.

Ссылки

[1] Ким, J., Дж. К. Ли и К. М. Ли. "Точное Суперразрешение Изображений Используя Очень Глубокие Сверточные Сети". Продолжения Конференции IEEE® по Компьютерному зрению и Распознаванию образов. 2016, стр 1646-1654.

[2] Grubinger, M. P. Ущелье, Х. Мюллер и Т. Дезелэерс. "Сравнительный тест IAPR TC-12: Новый Ресурс Оценки для Визуальных Информационных систем". Продолжения ресурсов OntoImage 2006 Языка Для Извлечения Изображений На основе содержимого. Генуя, Италия. Издание 5, май 2006, p. 10.

[3] Он, K., С. Чжан, С. Жэнь и Дж. Сун. "Копаясь Глубоко в Выпрямителях: Превышение Производительности Человеческого Уровня на Классификации ImageNet". Продолжения Международной конференции IEEE по вопросам Компьютерного зрения, 2015, стр 1026-1034.

Смотрите также

| | | | | |

Похожие темы