主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

ノイズ除去深層ニューラルネットワークのコード生成

この例では,ノイズ除去畳み込みニューラルネットワーク(DnCNN[1])を使用して,MATLAB®コードからCUDA®墨西哥人を生成し,グレースケールイメージのノイズを除去する方法を説明します。ノイズ除去ネットワークを使用して,ノイズを含むイメージ内のノイズを推定し,それらのノイズを除去してノイズのないイメージを取得できます。

サードパーティの必要条件

必須

この例では,CUDA墨西哥人を生成します。以下のサードパーティ要件が適用されます。

  • CUDA®対応NVIDIA GPU®および互換性のあるドライバー。

オプション

スタティックライブラリ,ダイナミックライブラリ,または実行可能ファイルなどの墨西哥人以外のビルドについて,この例では以下の要件も適用されます。

GPU环境の検证

関数Coder.CheckGPuInstall.(GPU编码器)を使用して,この例を実行するのに必要なコンパイラおよびライブラリが正しく設定されていることを検証します。

envCfg = coder.gpuEnvConfig ('主持人');envCfg。DeepLibTarget =“cudnn”;envcfg.deepcodegen = 1;Envcf​​g.quiet = 1;Coder.CheckGpuInstall(Envcf​​g);

ノイズを含むイメージの読み込み

ノイズを含むグレースケールイメージをワークスペースに読み込んでそのイメージを表示します。

noisyI = imread (“noisy_cameraman.png”);图imshow (noisyI);标题(“嘈杂的图像”);

事前学習済みのノイズ除去ネットワークの取得

補助関数getDenoisingNetworkを呼び出して,事前学習済みのイメージノイズ除去深層ニューラルネットワークを取得します。

网= getDenoisingnetwork;

関数getDenoisingNetworkは,不明なレベルの加法性ホワイトガウス(awgn)ををするするため使できる习习のdncnn [1]を返します。つまり,dncnn [1]は,ノイズノイズを含むイメージノイズ隠れているイメージイメージつまり差ているイメージイメージつまり差て计算し

このネットワークには,畳み込み層,バッチ正規化層,回帰出力層など,59個の層が含まれています。深層学習ネットワークアーキテクチャを対話的に可視化して表示するには,関数analyzeNetworkを使用します。

analyzeNetwork(净);

関数denoisenet_predict.

エントリポイント関数denoisenet_predict.は,ノイズを含むイメージ入力を受け取り,事前学習済みのノイズ除去ネットワークを使用してノイズ除去後のイメージを返します。

この関数は,getDenoisingNetworkによってによって返されたたネットワークオブジェクトを永続mynetに読み込み,それ以降の予测のではこの永続オブジェクトをを利用します。

类型denoisenet_predict.
function I = denoisenet_predict(in) %#codegen % Copyright 2018-2019 The MathWorks, Inc. persistent mynet;如果isempty(mynet) mynet = coder。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コード生成の行

エントリポイント関数denoisenet_predict.mのCUDAコードを生成するには,墨西哥人ターゲットのGPUコード構成オブジェクトを作成し,ターゲット言語をc++に設定します。関数coder.deeplearningconfig(GPU编码器)を使用してCuDNN深層学習構成オブジェクトを作成し,それをGPUコード構成オブジェクトのDeepLearningConfigプロパティに割り当てます。入力サイズを[256256]に指定してcodegenコマンドを実行します。この値は,ノイズ除去対象のノイズを含むイメージのサイズに対応します。

cfg = coder.gpuConfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“cudnn”);codegen配置cfgdenoisenet_predict.arg游戏{(256256年,“单”)}报告
代码生成成功:要查看报告,打开('codegen/mex/denoisenet_predict/html/report.mldatx')。

生成され梅克斯の実行

DnCNN[1]は入力範囲が[0,1]の入力イメージについて学習されています。noisyIに対して関数im2singleを呼び出して,値を[0255]から[0,1]に再スケーリングします。

再スケーリングした入力イメージに対してdenoisenet_predict_predictををます。

denoisedI = denoisenet_predict_mex (im2single (noisyI));

ノイズ除去後のイメージの表示

图imshowpair (noisyI denoisedI,“蒙太奇”);标题(“噪声图像(左)和去噪图像(右)”);

参考文献

(1)张凯,左伟,陈勇,张丹。超越高斯去噪:深度CNN图像去噪的残差学习IEEE图像处理汇刊。Vol. 26, Number 7, february 2017, pp. 3142-3155。

関連するトピック