iw3-guiに関する覚書
前回の投稿で、FLAT3D動画に関して書きましたが、そこで、AIGCに触れました。Owl3Dというのを使っているという話と、iw3というのを使ってみようと思っているという話です。Owl3Dは設定項目が少なく、自分の好みでconvergenceを0に設定する以外は標準的な設定で使っていましたが、iw3ではいろいろな設定ができるようで、その検証が億劫だったのですが、使い始めてみました。変換しては視聴して確認し、また別の設定を試す、といった具合に、良い設定を探すのですが、如何せんPCが低スペなので、変換に時間がかかり、一向に進まない、という状況です。
過去にも書いていますが、私は基本的にゲームをしません。dGPU(グラフィックボード)が要らない人なのです。最近ではCPU内蔵のグラフィック機能であるiGPUで足りてしまう訳です。他の投稿にも書きましたが、性能はともかく、GPUには新しさが必要だとは思っていて、そんなには古くないPCもあります(とはいえ、AV1エンコードには対応していない)。ただ、そういったPCは、全てミニPCです。dGPUは要らないが、モニタは大きなものを使いたい、という事で、当然の選択肢としてミニPCを初期の頃から試し、現状は5台になっています。うち3台を常用していて、切替器に繋がっている4台のPCのうち、1台だけが自作機ですが、かなり古いです。CPUが、intelのCore i7 7700K で、iGPUは、HD Graphics(Iris Xe Graphics はまだ世に生まれていなかった)で、流石に心許ないのでdGPUも挿れてあるのですが、なんと、GTX 1050 Ti です。iw3はCUDAが使えないと、驚くべき遅さになるので、そこは回避できた訳ですが、それにしても遅いです。どうやら、GPUメモリ容量(4GB)が足枷になってるっぽいです。
こんなdGPUなので、この投稿が参考になるという人は、おそらくいないと思いますが、自身が忘れてしまったときに、同じ検証はしたくないので、覚書として書いておきます。まだまだ少ししか検証できていませんが、いろいろ試しているうちに、最初のほうで検証したことも忘れてしまう可能性が高いので、現時点での覚書です。今回はそんな話。
まずは、気付いた不具合(おま環かも)を2つ。低スペは無関係?
【1】ネットで入手した動画ファイルをソースに使ったところ、動いてくれない場合がありました。しっかり確認していませんが、ファイル名に絵文字とか使われている時かもしれません。MP4ファイルで、拡張子が.mp4でしたが、入力ファイル名を指定した際に、末尾の「4」が消えてしまっていて、そのまま「開始」ボタンを押しても反応しません。そこで、アプリ(GUI)を終了すると、起動できなくなります。設定をリセット(nunifフォルダ内のtmpフォルダを削除)すると、起動できますが、設定は初期化されてしまいます。ちなみに、消えてしまった「4」を書き加えれば普通に使えますから、GUIを終了せず(設定リセットが必要な状態にせず)、こちらの対処を使ったほうが良さそうです。
【2】「背景除去」を有効にするためのチェックボックスがグレーアウトされていることがありました。入力をファイル指定でなくフォルダ指定(事実上バッチ処理)したときにはチェックできるようです。
低スペならではの話。プロセッサ設定。
深度バッチサイズが2までしか意味をなさず(更に増やしても速度は上がらず)、その場合は、ワーカースレッドは2まで(更に増やしても速度は上がらず)、しかも、この設定の場合、ソースによっては遅くなることもしばしば。そこで、深度バッチサイズを1にすると、ワーカースレッドは8までいけました。前者の、遅くなった場合でなく普通に動いてくれている状態と、ほぼ同等の速度で処理できますから、ウチの環境では後者のが無難なようです。ちなみに、前者ではdGPUに負荷がかかり、後者ではCPUに負荷がかかりますが、どちらにしても、たいした負荷ではありません。つまり、演算能力は余っているのに、それを活かすメモリがない、ということのようです。ちなみに、どちらの場合も、iGPUには負荷がかかりません。あと、後者ではCPUに負荷がかかると書きましたが、dGPUの負荷は数%です。ですから、ミニPCでもいけるんじゃないか、と思って試すと、信じがたい遅さです。やはりCUDAは必要なようです。
検証のメイン。ステレオ生成設定(3D化設定)。
アニメ調の3DCGもひとつだけ試しましたが、検証とはいえないので無視して、実写に関して。
「収束平面」(convergence)は好みで「0」。被写体となる人物が画面に収まっていない状態で、はみ出した人物が画面枠でスパッと切れているのが気になる場合と、被写体となる人物よりも手前に目立つオブジェがある場合などで奥行き感が欲しい場合は、変更しても良いと思いますが、個人的には、そういった場合でも「0」。
「自分の大きさ」はスルー(デフォルトの「0」のまま)。再生環境に拠るのかもしれないですが、現状では変更する必要性を感じません。
「メソッド」は解らないのでデフォルトのまま「row_flow_v3」。
「ステレオ処理幅」もよく解らないので、デフォルトのまま。
「深度推定モデル」はオススメの3つと、それ以外も少し試したものの、「ZoeD_Any_N」が良さそうでした。何がどう良いのかは表現が難しいのですが、乱れが一番小さいと感じました。アニメ調の場合は違ってくる可能性もありそうなので、そのときは要再検証。
「深度解像度」は謎。「深度推定モデル」が「ZoeD_Any_N」の場合、説明に書かれている、ZoeDepthモデルに相当するのか、DepthAnythingに相当するのかが判りません。前者だと思っているのですが、後者の可能性もあるのかも、と「512」を試したところ、許容できないレベルの遅さだったので、この環境で試す気になれません。という訳で、デフォルト。
「境界修正」は「2」。「0」だと、輪郭部分の乱れを感じました。「4」は説明に書かれているデメリットが気になるので却下。
「ちらつき軽減」は試していません。ちらつきが気になってないので。以前、Owl3Dを使った場合では、輪郭線の細いアニメで気になったので、そういったソースを試すときに検証が必要になるかもしれません。
「フォーマット」は、今のところ「Full SBS」しか試していません。
「3Dの強さ」と「収束平面」と「深度解像度」と「前景拡大」と「背景除去」は絡んでくると認識しているので、そこに関して書きますが、説明を読んで理解できている訳ではなく、説明と検証結果からの推測です。読んでくれる人がいたら、鵜呑みにしないようお願いします。というか、誰か教えて欲しい。
画面のピクセル位置は、よくx座標とy座標で表現されるので、奥行方向をz座標すなわち深度方向をz軸とします。おそらく「3Dの強さ」はz軸自体の長さ。仮にz座標を0~511だとすれば、0と511をどれだけ離すか。「収束平面」はz軸の位置。原点が奥にあるとか手前にあるとか。「深度解像度」がz座標の目盛の細かさ。0~255なのか0~511なのか、みたいな感じ。「前景拡大」はz座標の目盛を一律の幅にするか偏らせるか。「背景除去」は背景部分に使うz座標の幅を無くす(背景を平面的にする)。と推測しています。
もうひとつの例。小学生の頃だったか、学校に、立体地図とかそんな感じのものがあったと記憶しています。日本地図が壁に掛けてあり、立体的になっていました。山が手前に出っ張っている状態。海は凹んでいなかったかもしれません。記憶が曖昧です。記憶通り海が平面だったとしたら、これが「背景除去」してある状態で、海が凹んでいたとしたら「背景除去」してない状態。海が凹んでいたとして、東京海底谷と富士山が画角内に入っていたとしたら、z軸が長く必要になるので、「3Dの強さ」を大きくすべき。海が凹んでいなかったらz軸はその分短くて済むので、「3Dの強さ」はその分小さくすべき。(ここは自動調整して欲しい気がするのだけど、そうなっていないということは、解釈が間違っている気もします。)でもって、富士山の斜面とかは滑らかになっていなくて階段状になっているとして、その階段の段数が「深度解像度」。海の深さまでは分からなくて良いよ、という場合に「背景除去」して海を平らにするのとは別の手法として、「前景拡大」にすると、海の中の深さは浅くされ、山は高くなる、といった偏りを生じさせる事ができます。
そんな感じで、「3Dの強さ」と「収束平面」と「深度解像度」と「前景拡大」と「背景除去」の設定を考える訳ですが、前述の通り、現時点では「深度解像度」はノータッチです。
具体的な例。壁の前の人物や、部屋の中の人物では「3Dの強さ」は3か4が良さそうに感じて、「3.2」と書いても動いてくれたので、それをメインに使っていますが、屋内映像でも奥行き方向が幾らか広い場合は「4.0」とかのが良いと感じることもあります。ただし、「4.0」だと強すぎるようで、違和感を感じ始めるのに、その割に人物の厚さが足りないと感じるので、その場合は「前景拡大」を使うのが良いと思います。そして「収束平面」は「0」で奥行き感でなく飛び出してる感(これは好み)。「背景除去」は無し、という設定が無難に感じました。
それに対して、屋外の無限遠まで映っているパターンでは、「背景除去」をする場合としない場合で設定が違ってきます。「背景除去」をしない場合、「3Dの強さ」を「5.0」にして(それ以上の値を書いても動いてくれましたが、映像がかなり乱れました)、理屈的に「収束平面」が「0」だとおかしそうなので「0.5」、「前景拡大」は「3」、が無難な感じでした。「背景除去」をする場合は、「3Dの強さ」を「2.0」にして、「収束平面」は「0」、「前景拡大」は「0」、にしています。ただし、「背景除去」にはリスクがあって、人物と背景の区別をAIにさせる訳ですが(「isnet-general-use」を使っています)、そこで失敗すると、人物の身体の一部がペシャンコになったりします。これさえなければ「背景除去」を使うほうが結果良好に見えるのですが、時間かけて変換してハズレひくとガッカリなので、「背景除去」しないパターンが無難という感じです。ただ、無理して作ってる感はあります。
ちなみに、「3Dの強さ」が合っていないとどうなるか。紳士な人には分かり易い例だと思いますが、グラビア的な映像で、プロポーションの良い水着女性が、横を向いた状態から正面を向いて奥から手前に歩いているとします。「3Dの強さ」が大きすぎると、歩いているときの手足の動きが変になります。手足が手前に向かったときに、手足が伸びる感じになります。モデルさんは、火を吹くヨガ使いではありません。そして「3Dの強さ」が小さすぎると、横を向いていた状態で期待されたお乳の膨らみが、正面を向いたときに、潰れてしまいます。残念です。
ともかく、試行錯誤して良い設定に辿り着いたとして、できた映像は、やはり、作られた映像です。現実を切り取ったものではありません。そもそも、右眼でしか見えない部分、左眼でしか見えない部分が欠落しているために歪んでしまいます。例えば、単色の壁の前に水着美女、といった映像であれば、歪みも目立たず、設定がうまくいけば、そこそこ良い仕上がりになるとは思いますが、それを見たいという状況でなければ意味がなく、検証のために、そういう映像を探していると、なかなか見つからず、最初から3Dカメラで撮影してある映像くらいレアだったりするので、結局、3Dカメラで撮影してくれー、と思ってしまう訳で、どのみち、前回の投稿の、FLAT3D動画に普及してもらいたい、という話になるのですね。
あと、再生環境に関しても、以前の投稿のおすすめの環境では、立体感を感じ易くて良いのですが、使い勝手の部分で難あり、といった具合に、普及のハードルは高いと感じます。今後も引き続きいろいろ試そうと思います。