深度神经网络去噪的代码生成
这个例子展示了如何从MATLAB代码生成CUDA®MEX,并使用去噪卷积神经网络(DnCNN[1])去噪灰度图像。您可以使用去噪网络来估计噪声图像中的噪声,然后将其去除以获得去噪图像。
第三方的先决条件
要求
本例生成CUDA MEX,第三方需求如下。
CUDA®启用NVIDIA®GPU和兼容驱动程序。
可选
对于非mex构建,例如静态、动态库或可执行文件,此示例具有以下附加要求。
英伟达工具包。
NVIDIA cuDNN库。
编译器和库的环境变量。有关更多信息,请参见第三方硬件而且设置必备产品s manbetx 845.
检查GPU环境
使用coder.checkGpuInstall
函数验证运行此示例所需的编译器和库是否正确设置。
envCfg = code . gpuenvconfig (“主机”);envCfg。DeepLibTarget =“cudnn”;envCfg。DeepCodegen = 1;envCfg。安静= 1;coder.checkGpuInstall (envCfg);
加载噪声图像
将有噪声的灰度图像加载到工作空间并显示图像。
noisyI = imread(“noisy_cameraman.png”);图imshow (noisyI);标题(“嘈杂的图像”);
得到预训练的去噪网络
调用getDenoisingNetwork
辅助函数得到预训练的图像去噪深度神经网络。
net = getDenoisingNetwork;
的getDenoisingNetwork
函数返回一个预训练的DnCNN[1],您可以使用它来检测具有未知水平的加性高斯白噪声(AWGN)。该网络是一个前馈去噪卷积网络,实现了残差学习技术来预测残差图像。换句话说,DnCNN[1]计算有噪声的图像和潜在的干净图像之间的差异。
该网络包含59层,包括卷积层、批归一化层和回归输出层。要显示深度学习网络体系结构的交互式可视化,请使用analyzeNetwork
(深度学习工具箱)函数。
analyzeNetwork(净);
的denoisenet_predict
函数
的denoisenet_predict
入口点函数接受有噪声的图像输入,并使用预先训练好的去噪网络返回去噪后的图像。
函数加载返回的网络对象getDenoisingNetwork
变成一个持久变量mynet并在后续的预测调用中重用持久对象。
类型denoisenet_predict
版权所有:The MathWorks, Inc. persistent mynet;如果isempty(mynet) mynet =编码器。loadDeepLearningNetwork(“getDenoisingNetwork”、“DnCNN”);激活方法从最后一层提取输出。% 'OutputAs' 'channels'名-值对参数用于在输入维数大于或等于%的图像上调用%激活到网络的imageInputLayer.InputSize。Res = mynet。激活(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;
在这里,激活
方法调用时,层数值索引为59,以从网络的最后一层提取激活。的“OutputAs”
“渠道”
名称-值对参数计算大于imageInputLayer。InputSize
网络的。
的激活
方法通过使用预训练的去噪图像返回输入图像中的噪声估计。
一旦估计出噪声,从原始图像中减去噪声,得到去噪图像。
运行MEX代码生成
生成CUDA代码denoisenet_predict.m
入口点函数,为MEX目标创建GPU代码配置对象,并设置目标语言为c++。使用编码器。DeepLearningConfig
函数创建CuDNN
深度学习配置对象,并将其分配给DeepLearningConfig
GPU代码配置对象的属性。运行codegen
命令指定输入大小为[256,256]。这个值对应于要去噪的噪声图像的大小。
cfg = code . gpuconfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“cudnn”);codegen配置cfgdenoisenet_predictarg游戏{(256256年,“单”)}报告
代码生成成功:查看报告
运行生成的MEX
DnCNN[1]在输入范围为[0,1]的输入图像上进行训练。调用im2single
(图像处理工具箱)函数noisyI
将值从[0,255]重新缩放为[0,1]。
调用denoisenet_predict_predict
在重新缩放的输入图像上。
降噪edi =降噪enet_predict_mex(im2single(noisyI));
查看去噪图像
图imshowpair (noisyI denoisedI,“蒙太奇”);标题(“噪声图像(左)和去噪图像(右)”);
参考文献
[1]张凯,左伟,陈勇,D.孟,张磊。超越高斯去噪器:深度CNN图像去噪的剩余学习。IEEE图像处理汇刊。卷26,第7期,2017年2月,第3142-3155页。