exponenta event banner

Генерация кода для деноизирующей глубокой нейронной сети

В этом примере показано, как генерировать CUDA ® MEX из кода MATLAB ® и закрывать изображения в градациях серого с помощью деноизирующей сверточной нейронной сети (DnCNN [1]). Можно использовать помехоустойчивую сеть для оценки шума в шумном изображении, а затем удалить ее для получения засоренного изображения.

Предварительные условия для сторонних производителей

Необходимый

В этом примере создается CUDA MEX со следующими требованиями сторонних производителей.

  • Графический процессор NVIDIA ® с поддержкой CUDA ® и совместимый драйвер.

Дополнительный

Для построений, отличных от MEX, таких как статические, динамические библиотеки или исполняемые файлы, этот пример имеет следующие дополнительные требования.

Проверка среды графического процессора

Используйте coder.checkGpuInstall для проверки правильности настройки компиляторов и библиотек, необходимых для выполнения этого примера.

envCfg = coder.gpuEnvConfig('host');
envCfg.DeepLibTarget = 'cudnn';
envCfg.DeepCodegen = 1;
envCfg.Quiet = 1;
coder.checkGpuInstall(envCfg);

Загрузить шумное изображение

Загрузите шумное изображение в оттенках серого в рабочее пространство и отобразите его.

noisyI = imread('noisy_cameraman.png');
figure
imshow(noisyI);
title('Noisy Image');

Получить предварительно обученную сеть защиты от угроз

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

net = getDenoisingNetwork;

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

Сеть содержит 59 уровней, включая уровни свертки, пакетной нормализации и регрессионного вывода. Для отображения интерактивной визуализации архитектуры сети глубокого обучения используйте analyzeNetwork (Deep Learning Toolbox).

analyzeNetwork(net);

denoisenet_predict Функция

denoisenet_predict функция точки входа принимает входное шумное изображение и возвращает деноизированное изображение с использованием предварительно обученной сети деноизменения.

Функция загружает сетевой объект, возвращенный getDenoisingNetwork в постоянный переменный mynet и повторно использует постоянный объект при последующих вызовах прогнозирования.

type denoisenet_predict
function I = denoisenet_predict(in)
%#codegen
% Copyright 2018-2019 The MathWorks, Inc.

persistent mynet;


if isempty(mynet)   
    mynet = coder.loadDeepLearningNetwork('getDenoisingNetwork', 'DnCNN');
end

% The activations methods extracts the output from the last layer. The
% 'OutputAs' 'channels' name-value pair argument is used inorder to call
% activations on an image whose input dimensions are greater than or equal
% to the network's imageInputLayer.InputSize.

res = mynet.activations(in, 59,'OutputAs','channels');


% Once the noise is estimated, we subtract the noise from the original
% image to obtain a denoised image.

I = in - res;
  

Здесь, activations метод вызывается с числовым индексом уровня 59 для извлечения активизаций из конечного уровня сети. 'OutputAs' 'channels' аргумент пары имя-значение вычисляет активации на изображениях, превышающих imageInputLayer.InputSize сети.

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

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

Запуск создания кода MEX

Создание кода CUDA для denoisenet_predict.m создание объекта конфигурации кода GPU для цели MEX и установка целевого языка на C++. Используйте coder.DeepLearningConfig для создания функции CuDNN глубокий объект конфигурации обучения и назначить его DeepLearningConfig свойства объекта конфигурации кода графического процессора. Запустить codegen команда, задающая размер ввода [256 256]. Это значение соответствует размеру шумного изображения, которое вы намереваетесь скрыть.

cfg = coder.gpuConfig('mex');
cfg.TargetLang = 'C++';
cfg.DeepLearningConfig = coder.DeepLearningConfig('cudnn');
codegen -config cfg denoisenet_predict -args {ones(256,256,'single')} -report
Code generation successful: To view the report, open('codegen/mex/denoisenet_predict/html/report.mldatx').

Выполнить сгенерированный MEX

DnCNN [1] обучается на входных изображениях, имеющих входной диапазон [0,1]. Позвоните в im2single(Панель инструментов обработки изображений) на noisyI для масштабирования значений от [0,255] до [0,1].

Звонить denoisenet_predict_predict на масштабированном входном изображении.

denoisedI = denoisenet_predict_mex(im2single(noisyI));

Просмотр запрещенного изображения

figure
imshowpair(noisyI,denoisedI,'montage');
title('Noisy Image (left) and Denoised Image (right)');

Ссылки

[1] Чжан, К., В. Цзо, Я. Чен, Д. Мэн и Л. Чжан. «За пределами гауссова денуазера: остаточное обучение глубокому CNN для обличения изображений». Транзакции IEEE при обработке изображений. Том 26, номер 7, февраль 2017 г., стр. 3142-3155.

См. также

Функции

Объекты

Связанные темы