省型旧形国電の残影を求めて

戦前型旧形国電および鉄道と変褪色フィルム写真を中心とした写真補正編集の話題を扱います。他のサイトでは得られない、筆者独自開発の写真補正ツールや補正技法についても情報提供しています。写真補正技法への質問はコメント欄へどうぞ

Kubuntu + uv による仮想環境管理下で ART に nind-denoise を設定する

f:id:yasuo_ssi:20210904211415j:plain

 早いもので、2025年も本日で終わりです。皆様よいお年をお迎えください。

 ところで、昨日 ART の nind-denoise 連携機能を紹介しましたが、このマニュアルを見ただけでは導入はちょっと難しいと書きました。そこで、私の環境 (Kubuntu 24.02) でのインストール過程を紹介します。先日のマニュアルと異なる点は、uv により仮想環境を管理している点です。アレンジの一例としてご覧ください。もちろん、uv を使わず、python の仮想環境設定機能を使っても動きます。なお、uv は既にインストールされているという前提で進めますので、uv の設定については以下の記事をご覧下さい。

yasuo-ssi.hatenablog.com

1. 仮想環境管理の基本方針

 まず私の環境ですが、$HOME の下に scripts というディレクトリを作成し、その下に Python スクリプトなどを置くことにしています。さらに、各スクリプトに対応した仮想環境をそのスクリプトディレクトリの下に、.venv というディレクトリを作成して置くことにします。

 つまり、nind-denoise の場合、

$HOME/scripts/nind-denoise

にプログラムを置き、それに対する仮想環境は、

$HOME/scripts/nind-denoise/.venv

に置きます。

 なお、私の環境では、ART を $HOME/Programs/ART にインストールしていますが、このあたりは人によって違うと思いますので適宜読み替えてください

2. ユーザコマンドのダウンロード

 マニュアルにあるように、$HOME/.config/ART/usercommands に、nind_denoise.txt ユーザーコマンドとnind_denoise_raw.sh 補助スクリプトを置きます。これらのファイルに実行可能プロパティを設定しておきます。

3. nind-denoise のクローン

 カレントディレクトリを、$HOME/scripts に変更します。そこで、以下のコマンドを実行します。

 $ git clone --depth 1 https://github.com/agriggio/nind-denoise

これにより、$HOME/scripts/nind-denoise にプログラムのスクリプトがクローンされます。

4. uv による仮想環境の作成および有効化

 カレントディレクトリを、$HOME/scripts/nind-denoise にし、以下のコマンドを実行します。

$ uv venv .venv

これにより $HOME/scripts/nind-denoise/.venv に仮想環境が作成されます。そのまま、source .venv/bin/activate (もしくは source ~/scripts/nind-denoise/.venv/bin/activate) で、仮想環境を有効化します。

5. ライブラリのインストール

 以下のコマンドで、仮想環境にライブラリをインストールします。

$ uv pip install torch torchvision ConfigArgParse opencv-python pyyaml piqa

頭に uv をつけるのをお忘れなく。つけないとインストールできないとのエラーメッセージが出ます。

6. ARTユーザーコマンド設定

nind_denoise_raw.sh を開き、ファイル冒頭の変数を環境に合わせて編集します:

# ノイズ除去に使用するデバイスを選択 (cuda, mps, cpu, ...)
DEVICE=mps

 ここは自分のシステムで使えるデバイスを選択してください。GPU がなければ cpu を指定します。mps は Mac OS の ARM 版内臓 GPU で使えるようです。

# 使用するPythonインタプリタ
PYTHON=$HOME/scripts/nind-denoise/.venv/bin/python

# nind-denoise が存在するディレクト
NIND_DENOISE_DIR=$HOME/scripts/nind-denoise/

 上の、Python インタプリタの位置、および nind-denoise の位置は、マニュアルと変えていますので、このように指定しています。Python インタプリタの位置は仮想環境ディレクトリの下の、/bin/python になります。

export PATH=$HOME/Programs/ART:$HOME/.local/bin:/opt/local/bin:/usr/local/bin:$PATH
ART_CLI=ART-cli

 

 上の、export PATH 文は、基本的に ART のある場所にパスを通すために入れていると思います。おそらく自分でビルドしてシステムインストールしている場合は、/opt/local/bin の下に ART の実行ファイルがある可能性が高いですし、ユーザインストールしている場合は、$HOME/.local/bin の下にある可能性が高いので、マニュアル通りで OK かと思いますが、私の場合は、解凍したバイナリーを $HOME/Programs/ART に入れているので、上のように変更しています。

 なお、nind-denoise.txt の方は変更する必要はないはずです。

7. 動作確認

 正しく設定できていれば、ART のファイルブラウザ画面 (ファイル選択を行う画面) でカーソルを Raw ファイルの上に持ってきて右クリックでコンテキストメニューを表示すると、[AI denoise (nind-denoise)] という表示が出ます。

ファイルブラウザ画面で、右クリックで表示された
コンテキストメニュー上に AI denoise が追加された状態
※ 対象ファイルが Raw でないと表示されません

 表示が出ない場合は、設定の何処かが間違っています。なお、Raw ファイルでないファイルの上では表示されません。このメニューをクリックして、しばらくすると オリジナルファイル名-denoised.tif ができれば正常に作動しています。コンテキストメニューに表示されても、クリックして xx-denoised.tif ができない場合は、DEVICE 指定で、あなたの PC で使えないモデルを指定している可能性があります。とりあえず cpu を指定してできるかどうかを確認するのが良いでしょう。ただし、cpu モードだと結構時間がかかり、cpu の性能にもよりますが、数分から10分以上かかる場合もあります。

------

 なお、インストールが正しいかどうかチェックするプログラムを作りました。

discuss.pixls.us 上の、私が投稿した記事から、nind-test_4ART.py と read_sh.py を2つともダウンロードして、usercommands ディレクトリにおいてください。また、どんなファイルでもいいので、jpeg ファイルを "test.jpg" という名前で、同じディレクトリにおいてください。次にカレントディレクトリを usercommands ディレクトリに変更したら、以下のコマンドで実行します。

$ python3 nind-test_4ART.py

これを実行すると、もしシェルスクリプトのパス設定が間違っていると、以下のようなエラーメッセージが出ます。例えば...

 

Python interpreter path is not correct!
/home/username/scripts/nind-denoise/.venv/bin/python

 

もし、間違っていたら、パス設定を訂正して、再度実行してください。

 そして、パス設定が間違っていようがいなかろうが最後に nind-denoise を試すコマンドを以下のように出力します。

image

 

 パス設定が間違っていない場合は、このコマンドをコピーして、改めてコマンドラインに貼り付けて実行してください。問題がなければ、以下のような表示が出て、ノイズ低減が実行されます。

image

 このような表示が出ない場合は、依存関係がちゃんとインストールされていないなどの nind-denoise 自体の設定に問題があります。

 

----------

なお、以下に nind-denoise を実行してみた結果を示します。サンプルファイルは、以前に darktable などのノイズ低減を試した記事で使ったものです。

yasuo-ssi.hatenablog.com

まずノイズ低減前です。

ノイズ低減前

ノイズ低減後です。

ノイズ低減後

劇的にノイズが減ってスムーズになっています。

 

 以前の記事で見たものと同じ部分を見てみます。また以前お見せした darktable 3.6.1 プロファイル付きノイズ低減の結果も比較のため再掲示します。

ART ノイズ低減前

nind-denoise 実行後

f:id:yasuo_ssi:20210917212010p:plain

darktable 3.6.1 プロファイル付きノイズ低減適用

 粒状感は darktable 3.6.1 よりも減っていることは確実です。ただ、好みによっては、darktable 3.6.1 程度に粒状感が残っている方が良いという意見はあり得るかもしれません。darktable のプロファイル付きノイズ低減の良い点は粒状感が残ってもその粒状が比較的均質である点がメリットです。

 他の部分も見てみましょう。

ART ノイズ低減前

nind-denoise 適用後

f:id:yasuo_ssi:20210917212104p:plain

darktable 3.6.1 プロファイル付きノイズ低減適用

ART ノイズ低減前

nind-denoise 適用後

f:id:yasuo_ssi:20210917212230p:plain

darktable 3.6.1 プロファイル付きノイズ低減適用

 木目の表現などはかなり良くベストです。一方のれんの部分は、壁がややスムーズになり過ぎで若干ボケている感じが出ているという気もしなくもありません。その一方でエッジは鮮鋭度が増していて、全般的にメリハリがついています。のっぺりしすぎない darktable のほうが良いという意見もありえます。

 

 一つの事例に限られますが、テクスチャの複雑な部分に関しては nind-denoise に明らかに軍配が上がる一方、テスクチャのシンプルな部分は、nind-denoise はややのっぺりしすぎて、むしろ、粒状が残っても粒の均質性の高い darktable のプロファイル付きノイズ低減のほうが好ましいと見ることもできます。

 ただ、darktable のノイズ低減におけるプロファイルはすべてのカメラに用意されているわけではなく、またプロファイルがあったとしても、カメラ機種によってそのクオリティがまちまちの可能性があるので (実際 Nikon のプロファイルのクオリティは全体に 3.4 > 3.6.1 で上がっていますが、おそらくアルゴリズム改善差ではなくこの機種のプロファイルのクオリティが上がったためと推測されます)、その点でも nind-denoise の優位性はあると思います。

 また nind-denoise の使うモデルを変えたり、パラメータを変えると結果も変わると思いますが、このあたりまだ突き詰められていません。