joeylitalien/noise2noise-pytorch

PyTorch Implementation of Noise2Noise (Lehtinen et al., 2018)

noise2noise‑pytorch – クリーンデータなしでのノイズ除去

概要

  • Noise2Noise 論文(Lehtinen et al., 2018)の非公式な PyTorch 再実装です。この手法では、クリーンな参照画像が利用できない場合でも画像を復元できるよう、ノイズ 入力を ノイズ ターゲットにマッピングする画像間ネットワークを学習します。

主要コンポーネント

  • U‑Net 風の畳み込みネットワーク(エンコーダとデコーダが重みを共有する小さなバグが含まれていますが、動作には問題ありません)。
  • 複数の合成ノイズモデルをサポートする学習スクリプト (train.py):
    • ガウス分布(--noise-param で σ を制御)
    • ポアソン分布(--noise-param で λ を指定)
    • テキストオーバーレイ(--noise-param で確率 p を指定)
    • モンテカルロレンダリングノイズ(MonteCarlo.md を参照)。
  • チェックポイントを読み込み、ノイズ画像 / ノイズ除去済み画像 / クリーン画像を可視化するテストスクリプト (test.py)。
  • 学習中の損失 / PSNR 曲線の任意のプロット表示(--plot-stats)。

始め方

  1. 必要な Python パッケージ(PyTorch 0.4.1、torchvision 0.2.0、NumPy、Matplotlib、Pillow、OpenEXR)を pip3 install -r requirements.txtインストールします。
  2. データ準備 – 任意の画像コレクションが使用できます。README では COCO 2017 検証セットを trainvalidtest フォルダに分割する方法が示されていますが、スクリプトを独自のディレクトリに向けることも可能です。
  3. モデルを学習します。例えば、ガウスノイズの場合:
    python3 train.py \
      --train-dir data/train --train-size 1000 \
      --valid-dir data/valid --valid-size 200 \
      --ckpt-save-path ckpts \
      --nb-epochs 10 \
      --batch-size 4 \
      --loss l2 \
      --noise-type gaussian \
      --noise-param 50 \
      --crop-size 64 \
      --plot-stats \
      --cuda
    
    他の劣化に対しては --noise-type--noise-param を置き換えてください。
  4. 保存されたチェックポイントをテストします:
    python3 test.py \
      --data data/test \
      --load-ckpt ckpts/gaussian/n2n.pt \
      --noise-type gaussian \
      --noise-param 50 \
      --crop-size 256 \
      --show-output 3 \
      --cuda
    
    スクリプトは、ノイズ入力、ノイズ除去出力、および(利用可能な場合)クリーンターゲットの並列モンタージュを表示します。

リポジトリに示されている結果

  • ガウスノイズ(σ = 25)のノイズ除去画像は約 32 dB の PSNR に達し、クリーンターゲットのベースラインに近づいています。
  • テキストオーバーレイ(p = 0.25)のノイズ除去画像は約 28 dB の PSNR に達しています。
  • 学習は古い GTX 780 で数百エポック行われました。

既知の制限 / 未解決の問題

  • U‑Net 実装ではエンコーダの重みがデコーダと誤って共有されています。修正には小さなコード変更が必要です。
  • 活性化関数が逆になっています(論文では ReLU が推奨されていますが LeakyReLU が使用されており、その逆も同様です)。現在の設定は動作しますが、最適とは限りません。
  • ポアソンノイズはデータ依存性があるため、ポアソンノイズの処理は元の論文と完全に一致していません。適切な処理には、TensorFlow 参照実装の適応が必要になる場合があります。

対象ユーザー

  • 自己教師あり画像復元を実験する研究者や趣味のプログラマ。
  • クリーンな正解データが利用できないノイズ除去タスクで、軽量な PyTorch ベースラインが必要な開発者。

参考文献

  • Lehtinen, J. et al. “Noise2Noise: Learning Image Restoration without Clean Data”, ICML 2018.
  • 例示データ用の COCO データセットの引用。

このリポジトリは、機械学習による画像復元技術のための真面目な研究向けコードベースです。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト