NVlabs/noise 2 noiseコード(一)概要と実行


背景:github上のnoise 2 noiseの公式コードはNVlabsのコードで、私たちはこの基礎の上で修正することを望んで、だから初歩的な理解と運行が必要です.
目的:noise 2 noiseのコードを実行し、テストします.
論文の住所:https://arxiv.org/abs/1803.04189
ソースアドレス:https://github.com/NVlabs/noise2noise
論文の詳細:https://blog.csdn.net/weixin_36474809/article/details/86535639
目次
一、環境要求と配置
1.1 Anacondaでpython 3を構成する.6 tf pip
1.2インストール依存項目
二、訓練セットと検証セットの準備
2.1 ImageNetをトレーニングセットとして生成
2.2 BSD 300によるトレーニングファイルの生成
2.3 Kodak検証セット
三、訓練と検証
3.1訓練
3.2検証
3.3事前訓練されたネットワーク
四、MRI画像ノイズ除去
Preparing the MRI training dataset
Training

一、環境要求と配置


著者githubのソースコードはpython 3.6バージョンをインストールし、Anaconda 5.2を使用して対応するPython環境を構成する必要があります.適切な環境と構成を作成します.命令は以下のようにまとめられ、anaconda 3のアクティブ化環境はsource acitvate n 2 nであり、source deactivateでアクティブ化されることに注意する.
conda create -n n2n python=3.6
conda activate n2n
conda install tensorflow-gpu
python -m pip install --upgrade pip
pip install -r requirements.txt

1.1 Anacondaでpython 3を構成する.6 tf pip


2018.12のanacondaバージョンをインストールし、対応する構成を実現します.
Ubuntu14.04 Anaconda 3-2018.12-x 86_をインストールする64 https://blog.csdn.net/weixin_36474809/article/details/87804903
Anacondaによるpython 3.6とtensorflow-gpuとpip環境構成https://blog.csdn.net/weixin_36474809/article/details/87714182
前の2つのブログに従って環境を配置します

1.2インストール依存項目


pip install -r reauirements.txt
(n2n) jcx@smart-dsp:~/Desktop/xxr2019/NVlabs_noise2noise$ pip install -r requirements.txt

インストールが完了すると、次の情報が表示されます.
1.1.0->-r requirements.txt (line 4)) (1.15.4)
Building wheels for collected packages: nibabel
  Building wheel for nibabel (setup.py) ... done
  Stored in directory: /home/jcx/.cache/pip/wheels/7e/97/9b/7cf05225afac39de2dacef758fc06c0c0bdf3e6efb40fabb9c
Successfully built nibabel
Installing collected packages: Pillow, typeguard, nibabel, scipy
  Found existing installation: scipy 1.2.0
    Uninstalling scipy-1.2.0:
      Successfully uninstalled scipy-1.2.0
Successfully installed Pillow-5.2.0 nibabel-2.3.0 scipy-1.1.0 typeguard-2.2.2

 

二、訓練セットと検証セットの準備


プログラム、dataset_tool_tf.pyは、n 2 nネットワークを訓練するために使用できるtfrecordsファイルを生成するために使用される.

2.1 ImageNetをトレーニングセットとして生成

# This should run through roughly 50K images and output a file called `datasets/imagenet_val_raw.tfrecords`.
python dataset_tool_tf.py 
--input-dir "/ILSVRC2012_img_val" 
--out=datasets/imagenet_val_raw.tfrecords

コマンドライン、--input-dirは入力ファイル、--outは出力ファイル
正しく動作している場合は、次のような出力が表示されます.
<...long omitted...="">
49997 ./ImageNet/ILSVRC2012_img_val/ILSVRC2012_val_00002873.JPEG
49998 ./ImageNet/ILSVRC2012_img_val/ILSVRC2012_val_00031550.JPEG
49999 ./ImageNet/ILSVRC2012_img_val/ILSVRC2012_val_00009765.JPEG
Dataset statistics:
  Formats:
    RGB: 49100 images
    L: 899 images
    CMYK: 1 images
  width,height buckets:
    >= 256x256: 48627 images
    < 256x256: 1373 images

2.2 BSD 300によるトレーニングファイルの生成


BSD 300が訓練したネットワークの性能はImageNetより少し悪くて、BSD 300 datasetをダウンロードします
その後、対応するフォルダに解凍します.変換:
python dataset_tool_tf.py 
--input-dir datasets/BSDS300-images/BSDS300/images/train 
--out=datasets/bsd300.tfrecords

2.3 Kodak検証セット


Training tests validation loss against the Kodak Lossless True Color Image Suite dataset
# Download the kodak validation set from http://r0k.us/graphics/kodak/
python download_kodak.py --output-dir=datasets/kodak

三、訓練と検証


3.1訓練


ImageNetでN 2 Nのautoencoderを運用する
# try python config.py train --help for available options
python config.py 
--desc='-test' train 
--train-tfrecords=datasets/imagenet_val_raw.tfrecords 
--long-train=true 
--noise=gaussian

その後tensorboardで対応するトレーニングプロセスを表示できます
cd results
tensorboard --logdir .

Gaussノイズのノイズ除去ネットワークのような訓練過程はかなり時間がかかり,著者らはImageNetで訓練し,NVIDIA Titan V GPUに7.5時間近くかかった.
トレーニング終了フラグ:results/*フォルダの下にnetwork_を生成final.pickleのファイル.

3.2検証


運転後の結果がresults/00001-autoencoder-1gpu-L-n2n であると仮定
コマンドラインは次のように入力されます.
python config.py validate 
--dataset-dir=datasets/kodak 
--network-snapshot=results/00001-autoencoder-1gpu-L-n2n/network_final.pickle

3.3事前訓練されたネットワーク


ポアソン雑音とGauss雑音の予備訓練のネットワークは以下の通りである.https://drive.google.com/drive/folders/1-84ORv4wB8W3M6WngFTtccuW7SlPku0V
論文実験の結果:
トレーニング
Noise
Noise2Noise
Command line
Gaussian
Yes
python config.py train --noise=gaussian --noise2noise=true --long-train=true --train-tfrecords=datasets/imagenet_val_raw.tfrecords
Gaussian
No
python config.py train --noise=gaussian --noise2noise=false --long-train=true --train-tfrecords=datasets/imagenet_val_raw.tfrecords
Poisson
Yes
python config.py train --noise=poisson --noise2noise=true --long-train=true --train-tfrecords=datasets/imagenet_val_raw.tfrecords
Poisson
No
python config.py train --noise=poisson --noise2noise=false --long-train=true --train-tfrecords=datasets/imagenet_val_raw.tfrecords
検証:
Noise
Dataset
Command line
Expected PSNR (dB)
Gaussian
kodak
python config.py validate --dataset-dir=datasets/kodak --noise=gaussian --network-snapshot=<.../>
32.38 (n2c)/32.39 (n2n)
Gaussian
bsd300
python config.py validate --dataset-dir=datasets/bsd300 --noise=gaussian --network-snapshot=<.../>
31.01 (n2c)/31.02 (n2n)
Poisson
kodak
python config.py validate --dataset-dir=datasets/kodak --noise=poisson --network-snapshot=<.../>
31.66 (n2c)/31.66 (n2n)
Poisson
bsd300
python config.py validate --dataset-dir=datasets/bsd300 --noise=poisson --network-snapshot=<.../>
30.27 (n2c)/30.26 (n2n)

四、MRI画像ノイズ除去


Preparing the MRI training dataset


Use the dataset_tool_mri.py script to generate training and validation datasets for the N2N MRI case.
Step #1: Download the IXI-T1 dataset from: https://brain-development.org/ixi-dataset/. Unpack to some location.
Step #2: Convert the IXI-T1 dataset into a set of PNG files:
# Assumes you have downloaded and untarred IXI-T1 under ~/Downloads/IXI-T1.

python dataset_tool_mri.py genpng --ixi-dir=~/Downloads/IXI-T1 --outdir=datasets/ixi-png

Step #3: Convert a subset of the IXI-T1 dataset into training and validation sets:
python dataset_tool_mri.py genpkl --png-dir=datasets/ixi-png --pkl-dir=datasets

Training

python config_mri.py

A successful invocation should output the following:
dnnlib: Running train_mri.train() on localhost...
Loading training set.
Loading dataset from datasets\ixi_train.pkl
<...long log="" omitted...="">
Epoch 297/300: time=107.981, train_loss=0.0126064, test_db_clamped=31.72174, lr=0.000002
Epoch 298/300: time=107.477, train_loss=0.0125972, test_db_clamped=31.73622, lr=0.000001
Epoch 299/300: time=106.927, train_loss=0.0126012, test_db_clamped=31.74232, lr=0.000001
Saving final network weights.
Resetting random seed and saving a bunch of example images.
dnnlib: Finished train_mri.train() in 8h 59m 19s.

The expected average PSNR on the validation set (named test_db_clamped in code) is roughly 31.74 dB.
Noise-to-noise training is enabled by default for the MRI case. To use noise-to-clean training, edit config_mri.py and change corrupt_targets=True to corrupt_targets=False .
Training for 300 epochs takes roughly 9 hours on an NVIDIA Titan V GPU.