这个例子展示了如何生成CUDA®墨西哥人从MATLAB®代码和降噪灰度图像通过去噪卷积神经网络(DnCNN [1])。您可以使用网络来估计噪声去噪在嘈杂的图像,然后删除它得到去噪图像。
要求
这个示例中生成CUDA墨西哥人,有以下第三方的要求。
CUDA®启用NVIDIA GPU®和兼容的驱动程序。
可选
等non-MEX构建静态、动态库或可执行文件,这个例子有以下额外的需求。
英伟达工具包。
英伟达cuDNN图书馆。
环境变量的编译器和库。有关更多信息,请参见第三方硬件(GPU编码器)和设置必备产品下载188bet金宝搏(GPU编码器)。
使用coder.checkGpuInstall
(GPU编码器)函数来确认所需的编译器和库运行这个例子是正确设置。
envCfg = coder.gpuEnvConfig (“主机”);envCfg。DeepLibTarget =“cudnn”;envCfg。DeepCodegen = 1;envCfg。安静= 1;coder.checkGpuInstall (envCfg);
加载一个嘈杂的灰度图像到工作区中并显示图像。
noisyI = imread (“noisy_cameraman.png”);图imshow (noisyI);标题(“嘈杂的图像”);
调用getDenoisingNetwork
helper函数图像去噪pretrained深层神经网络。
网= getDenoisingNetwork;
的getDenoisingNetwork
函数返回一个pretrained DnCNN[1],您可以用它来检测加性高斯白噪声(AWGN)未知的水平。网络是一个前馈去噪卷积网络实现剩余的学习技术预测剩余的形象。换句话说,DnCNN[1]计算不同噪声图像和潜在的清廉形象。
网络包含59层包括卷积,批正常化,和回归输出层。显示一个交互式可视化的深度学习网络体系结构,使用analyzeNetwork
函数。
analyzeNetwork(净);
denoisenet_predict
函数的denoisenet_predict
入口点函数接受一个嘈杂的图像输入,并返回一个使用pretrained去噪图像去噪的网络。
返回的函数加载网络对象getDenoisingNetwork
到一个持续的变量mynet在随后的预测调用和重用持久对象。
类型denoisenet_predict
函数= denoisenet_predict () % # codegen % MathWorks版权2018 - 2021,公司持续mynet;如果isempty (mynet) mynet =编码器。loadDeepLearningNetwork (“getDenoisingNetwork”、“DnCNN”);结束%的激活方法提取最后一层的输出。%的OutputAs“渠道”名称-值对的观点是为了打电话给%激活使用一个图像的输入尺寸大于或等于网络的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
的网络。
的激活
方法返回一个估计的噪声输入图像通过使用pretrained图像去噪。
一旦估计噪声,减去原始图像的噪声,得到去噪图像。
生成CUDA代码denoisenet_predict.m
入口点函数,创建一个GPU代码配置对象为一个墨西哥人的目标和目标语言设置为c++。使用coder.DeepLearningConfig
(GPU编码器)函数创建一个CuDNN
深度学习配置对象,并将其分配给DeepLearningConfig
GPU代码配置对象的属性。运行codegen
命令指定一个输入[256256]的大小。这个值对应于嘈杂的图像的大小,你打算消除干扰。
cfg = coder.gpuConfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig = coder.DeepLearningConfig (“cudnn”);codegen配置cfgdenoisenet_predictarg游戏{(256256年,“单”)}报告
代码生成成功:查看报告
的DnCNN[1]是训练输入图像输入区间[0,1]。调用im2single
(图像处理工具箱)函数noisyI
从[0255]重新调节值到[0,1]。
调用denoisenet_predict_predict
新输入图像。
denoisedI = denoisenet_predict_mex (im2single (noisyI));
图imshowpair (noisyI denoisedI,“蒙太奇”);标题(的嘈杂的图像(左)和(右)的去噪图像);
[1],K。陈,w .左,y,孟d, l .张。“超越一个高斯降噪:剩余的学习深度图像去噪的CNN。”IEEE Transactions on Image Processing. Vol. 26, Number 7, Feb. 2017, pp. 3142-3155.