Deep Sky Memories

横浜の空で撮影した星たちの思い出

Wavelet で BlurXTerminator と勝負!(追記あり)

最近巷をざわつかせている「AIによる deconvolution ツール」BlurXTerminator (BXT) に惑星写真の画像処理の経験で培った wavelet 処理で勝負を挑んでみました。

BlurXTerminator とは

BXT とは一体何物か?これは「PixInsight 本」でお馴染みの丹羽雅彦さんの動画を見ていただくのが手っ取り早いと思います。

「BlurXTerminatorは「すごいの民主化」- PixInsight」

最初の6分半で概要の説明があり、以降は実際の画像処理のデモンストレーションやパラメータ調整のコツ、インストール方法などです。最初のところだけでも見てください。

動画の解像度だと画像処理がどこまで上手く行ったのかわかりづらいので、作例についてはだいこもん(id:snct-astro)さんのブログ記事をどうぞ。

丹羽さんもだいこもんさんも触れていますが、当初は懐疑的な声が少なからずありました。ハッブル宇宙望遠鏡(HST)の撮影画像等が学習データに使われているとされており、実質的には AI によって元画像が HST の画像に置き換えられるような処理がされてしまっているのでは、という懸念です。

しかし、BXT の作者の説明によればあくまで deconvolusion の PSF (Point Spread Function: 点光源が光学系を通って結像した時にどう広がるかを表した関数)の推定に AI を使っているのだということ、学習済モデルのファイルサイズも約108MBと、画像生成系 AI として機能するには小さ過ぎるきらいはあり(最近流行りの画像生成AI「Stable Diffusion」は数GBのモデルを使用)、かといってクラウドサービス等に処理を投げている形跡もない(ネットワークを切ったスタンドアロン環境でも正常に動作)ということで、そこまで変なことはしていないだろう、という認識に落ち着きつつあります。

とはいえ、天体写真の場合、トレーニングに使った天体と同じ天体の画像が入力された場合に、学習した画像の特徴がダイレクトに出力結果に反映されてしまうのではないか?という懸念はあります。そういうことが起きるかどうかはAIが「知識」をどこまで抽象化・一般化された形で学習しているかにかかっています。

Wavelet とどっちが強い?

だいこもんさんのブログ記事では、だいこもんさんが日頃の画像処理で使用している PixInsight (PI) の deconvolution 機能を使った作例と比較して、BXT では deconvolution 以上に解像感があり、かつ自然な仕上がりになったことを報告しています。

これを見て僕が思ったのは…

「惑星写真で鍛えたワシの wavelet 処理のウデマエをもってすれば、解像感だけならこのくらいはイケるんじゃね?」

いや、思っただけでなくコメント欄に書き込んじゃいました。傲慢!

それならば、と、だいこもんさんがブログの作例で使用した M104 の写真の元データを送ってくださいました。というわけで BXT と勝負です!

と言っても、BXT に wavelet で勝てるということは裏を返せば BXT はあり得ない結果を出力しているわけではないという話にもなり得ますので、その場合は、ある意味「BXT の勝ち」とも言えるのですが…

それはさておき、まず頂いた元データを RegiStax 6 で処理します。元データは 32bit float のグレースケール画像です。PI からは無劣化でTIFFにエクスポートできますが、残念ながら RegiStax は 32bit float のTIFFは正常に読み込めません*1ので 16bit int のグレースケールTIFFでエクスポートしたものを処理しました。

なお、頂いたデータはプライムフォーカス鏡筒の RASA11 で撮影した撮って出し画像のようで、鏡像(裏返し)のものでした。だいこもんさんのブログ上でも鏡像のまま処理していますので、こちらでも鏡像のままでアップします。

まず、リニア画像のままではコントラストが低すぎて RegiStax ではうまく処理できませんでしたので、ArcsinhStretch (stretch=115, blackPoint=0.012, protectHighlights=true)で処理したものが以下です。

ArcsinhStretch(115/0.012/Protect highlighs)
wavelet 処理前

これを頑張って wavelet 処理しました。パラメータはリンク先の flickr のページの説明欄に全て掲載しています。マスクは RegiStax で設定できる輝度レンジの制限によるもののみ使用しています。星マスクは一切使用していません。

M104-AS-crop-wavelet-4-C95-DR10_240-M92_190R8F13
RegiStax 6 による wavelet 処理後

かなり解像してはいるのですが、銀河の淡い部分に空間周波数が低めのディザパターン状のノイズが浮いてしまっています。Linked wavelets を有効にすると出やすいのですが、これはノイズ処理ではうまく消せないんですよね…

とりあえずノイズ処理でどの程度目立たなくなるか Photoshop の Camera Raw で仕上げました。ノイズ感の確認のみを目的としているので星のリンギング等のケアはしていません。

M104-AS-crop-wavelet-4-C95-DR10_240-M92_190R8F13%20-cameraraw
ノイズ処理後

暗黒帯のディテールはそこそこイケてますが、やっぱり銀河の淡い部分のノイズが目立ってますね… ちなみに解像についてだいこもんさんの評価は deconvolution と同等という評価。個人的にはちょっと上かなと思ったんですが… でも BXT の結果とはだいぶ差があるという点は一致しています。ぐぬぬ

ひょっとして 16bit TIFF に画質を落としてから処理している分 wavelet 処理が不利になっているのでは?と思い、だいこもんさんに教えていただいた PI の MultiscaleLinearTransform (MLT) で再戦を挑みました。

MLT は日本の PI ユーザー界隈ではあまり研究が進んでいないとのことですが、月面や惑星写真の処理に RegiStax と同様に使えるらしいとのこと。これは PI で処理中の 32 bit 画像にそのまま適用できます。

実際触ってみるとパラメータの体系は RegiStax とよく似ていて、deringing や denoise の機能もあります。マスク処理は PI の共通機能のマスク処理を利用します。ただし linked wavelets に相当する設定は見つけられませんでしたので、素の wavelet 処理でやってみました。

マスクなしで暗部のノイズがどう出るかも知りたかったのでクロップ範囲を広げてマスクなしで処理してみました。

やはり事前にストレッチが必要でしたので、ArcsinhStretch、MLT 後に再度 ArcsinhStretch で階調を整えています。こちらもリンク先の flickr のページの説明欄にパラメータを全て掲載しています(PI の History からのコピペです)。

M104-CROP_AS_MLT_AS
MLT による wavelet 処理後

解像は BXT に迫っている気がします!でも、やっぱりノイズが… RegiStax の結果よりは空間周波数が高めのノイズなので処理はしやすそうですが、輝度の振れ幅がデカくてザラつきを消しきれるかどうか…

ということで、Camera Raw で仕上げたのがこちらです。何故か Photoshop の編集画面と出力画像で階調が食い違ってしまって(出力の方が暗くなってしまう)かなり背景が暗くなってしまいましたがご容赦を。

M104-CROP_AS_MLT_AS-cameraraw
ノイズ処理後

縮小画像だと目立ちませんが、等倍で見るとホットピクセルやダークピクセルみたいなノイズが散らばっていて結構目障りです。これを無理やり消そうとすると解像感もかなり落ちてしまうんですよね… Photoshop のダスト&スクラッチで消せるかもしれませんがさすがにそれはやりませんでした。

ちなみに自分でも BXT のトライアルライセンスを手に入れて使ってみました。パラメータは例によって flickr のページの説明欄に記載しています。

M104-CROP-BXT2-AS
BlurXTerminator による処理結果。

お、MLT の方が解像感は上!と言いたいところですが、だいこもんさんの記事の作例に比べるとなんかぼんやりしてますね… パラメータの違いでしょうか?

ということで、MLT で wavelet を追い込めばディテールの解像に関して言えば BXT に迫れる、上手くやれば越えられるかも?という手応えはありました。逆に言えばディテールの描写に関しては BXT は特に変なことはしてないのではないか?とも言えます。鏡像の M104 に対しても普通に鏡像のディテールを出力しているので、学習した画像の特徴がそのまま出てきているというわけでもなさそうです。

が、しかし… deconvolution やってるはずなのに、なんでこんなにノイズが少ないんでしょう?ていうか出力画像のノイズレベルはほぼ元画像と同じくらいに見えます。deconvolution でそんなことできるんでしょうか?*2

考察

マニュアルの解説では 512x512 のタイルに分割してある程度適応的に PSF を推定しているとのことなのですが、ノイズの出方(というか出なさ)を見るとそんな粗い区切りでどうにかなるとは思えません。ディテールが解像している部分の周辺でも明らかにノイズが少ないのです。

そもそもノイズの発生は PSF で表現できるのでしょうか?*3 ショットノイズはまばらに到着する光子のバラつきに由来するもので、PSF は関係ないように思われます。ダークノイズに至っては光学的な要素は一切ないので PSF で表現するのはおかしいと思います。

となると、事後的にディテールのあるところにマスクをかけて denoise しているか、もしくは事前にディテールのないところにマスクをかけて deconvolution がかからないようにする、というような処理をやっているのではないかと考えられます。そのマスクもまた AI が生成しているということなのでしょうか?

もしそうなら、それらの処理を分解して各段階で生成されたパラメータを出力するようにして欲しいところです。その方が PixInsight の設計思想にもマッチするはずですし…

しかし、上で推測した処理に相当する事を全部 AI が一気通貫にやってしまっていて、そもそも処理を分解できない、という可能性もあります。だとすると、それを deconvolution と呼ぶのは無理があるのではないでしょうか? Stable Diffusion のような画像生成系の AI とは一線を画した処理になっているのだとしても、それが実際に何をしているのか、もう少し的確な説明が必要なのではないかと思います。

AI がマスクを自動生成することを「お絵描き」として禁じ手にするかどうかは微妙な問題で、(科学的な測定の対象ではない)あくまで観賞用として仕上げた写真に適用するならば容認できる、という価値観は一概に否定できるものではありません。僕も StarNet なんかは容認しています。*4

しかし「どんなマスクが生成されたのか」というところがブラックボックスのままでは、個人個人が自分の価値観に従って妥当性を検証するということができないのではないでしょうか?

熟練した天体写真家なら処理結果を見るだけでもやり過ぎか否かという判断はできるのかもしれません。しかし、処理プロセスの段階で「今自分がやっている作業はやり過ぎか否か?」ということをユーザーが自覚して自重することが可能な仕組みになっていないと、操作が簡単だからといって万人に広くお勧めできるものとは言い難いのではないかと思います。

これが一貫した理論に基いて処理されて、条件が合えば妥当なマスクが生成可能で、条件が合わなかったり調整に失敗したりした場合はあからさまに変な結果になる、ということであれば、むしろお勧めしやすいのですが…

DeepL 翻訳や ChatGPT なんかがそうですが、一部の AI は実際には失敗している結果を「それっぽく」見せてしまって、失敗していることに人間がなかなか気付けない、という怖い特性を持っています。そういった AI を自己責任で使う分にはいいのですが、結果をそのまま人に見せるのには危うさがあります。「写真」というタテマエのある画像処理においてはなおさらです。

BXT がその手の「怖い」AI なのではないか?という疑念を僕はまだ拭いきれないでいます。丹羽さんは BXT も「すごいの民主化」だと歓迎していますが、僕は第三者が検証できないブラックボックスに身を委ねる「民主化」にはどうしても抵抗があります。

では、仮に BXT が OSS 化すれば「民主化」と言えるでしょうか?それは AI がどこまでやっているかによります。masking や denoise と deconvolution が AI 処理の中で一体化していて、何をやっているか外部から検証できないようであれば、問題は残るでしょう。

もっとも、それを言ったら日ごろ使っている画像処理ツールだって素人からすれば事実上のブラックボックスではないか?という疑問はあると思います。しかし、処理のバックグラウンドにある理論に対する信頼があり、理論通りに実装されていることが何らかの形で検証可能であるならば真のブラックボックスとは言えません。

AI も学習理論自体は科学的に信頼できるものだからブラックボックスではない、と言えるでしょうか?しかし AI の学習理論はメタ理論とでも言うべきもので、理論通りにトレーニングした AI が学習した画像処理の「理論」が信頼できるかどうかは別問題です。複雑なタスクを学習させた場合、その「理論」が信頼に足るという保証は学習理論自体にはないと思います。*5

もっとも、通常の理論に対する信頼も、理論が何かを保証しているというよりは経験によるところが少なくありません。画像処理のように人間の知覚が関わる分野では特にそうです。例えば JPEG 画像も最初は医療分野で画像診断に使って良いかどうか議論があったと聞きます。それが現在では一定の圧縮率以下なら診断に使ってOKということになっています。

AI も同様にして社会的な経験の積み重ねで容認されていくということはあると思います。しかし AI には学習を続けていくことで特性が変化するという流動的な部分があります。学習が進んだ結果、今までなかった欠点が出てくる可能性も否定できず、単純な経験の蓄積では信頼が深まらない可能性があります。

これを乗り越えるには、学習アルゴリズム自体にネガティブな流動性がまず出ない、というメタレベルの経験の蓄積が必要かもしれません。あるいは長年の使用に耐える、追加学習が不要な程に十分トレーニングされたモデルが登場すれば、モデルが「枯れる」頃には信頼が蓄積されているでしょう。いずれにせよ、そうなるにはまだまだ長い時間がかかると思います。

というわけで、今のところの僕の BXT に対するスタンスは「アリ寄りのナシ」といったところでしょうか…

追記(2022/12/23 12:00): これからの AI にどうして欲しいか

昨夜書きそびれたことを。天体写真の画像処理で AI を使う場合、何をやって欲しいかというと、wavelet とか deconvolution とかの複雑なパラメータ調整の最適化です。AI が直接画像を出力するのではなく、従来からある処理のパラメータを出力して欲しいのです。

そういう形であれば検証可能性という点でも理論の信頼性という意味でもブラックボックス化を避けられますし、出てきたパラメータをさらに人間がチューニングして AI に追加学習させるといった協働作業も可能になると思います。

レーニングによって上手い人の画像処理パラメータを再現できるようだといいんですけどねぇ。wavelet なら Damian Peach 風とか熊森照明風とか。そういうモデルを作って有償配布して利益を本人に分配するとか、そういう世界になったら楽しそうです。

*1:読ませると変なカラー画像として読み込まれてしまいます。

*2:ちなみにだいこもんさんの deconvolution の作例ではマスクをかけて deconvolution がかかる範囲を制限しているとのこと。BXT の作例の方はノーマスクだそうです。

*3:ニューラルネットの研究をやっていたので convolution はわかるのですが、deconvolution のことはあまりよくわかっていません。

*4:StarNet は主題(星雲)とそれ以外(星)の境目にしか効かないから、という理由ですが。

*5:僕が大学院でニューラルネットワークをやっていたのは30年近く前の話なので、今でもそうなのかは断言できませんが…