fc2ブログ
 

Robust Video Mattingによる背景透過

Robust Video Matting(RVM)と言うのを使って「通常の動画から背景を緑一色にした動画を作成できる」と教えていただいたので試してみました。
背景が緑一色の動画を作成できれば あとはアマレコVRのクロマキー合成により自動背景透過と同様の効果が得られます。

アマレコVRの自動背景透過は 固定カメラ、安定した照明、適度に被写体が動くなどかなり使用できる条件が限られますが、
RVMでは画像に映っている人物を検出する方式のため、背景が動いていてもほぼ影響無く幅広いシーンでの活用が期待できます。

・Robust Video Matting
https://github.com/PeterL1n/RobustVideoMatting

・RVM使用例
https://www.youtube.com/watch?v=VL-0K6HjhvQ



■テスト
次のサンプル動画(640x360)を上記使用例に沿ってRVMで処理
https://pixabay.com/ja/videos/%E3%82%AF%E3%83%AA%E3%82%B9%E3%83%9E%E3%82%B9-x-%E7%B7%9A%E3%83%9E%E3%82%B9-%E5%86%AC-57916/

作成された動画
http://www.amarectv.com/download/2180763146santa.mp4

アマレコVRへ簡易クロマキー合成を実装し試した結果はこのようになります。
2180763146santa.jpg


■課題
被写体が緑になる(曖昧な部分を半透明にするため?)
RVMの方で完全な透明か不透明の2値で処理してほしい
輪郭が緑になったり背景にできる影などはアマレコVRの方で何とかできるかもしれませんが
被写体内部まで緑になってしまうのは辛い

VR動画の左右の画像で異なる結果となってしまう
右眼に映る人は服着ているけど、左眼は服が透明になってしまうケースがある


■精度
RVMのデモとして公開されている動画と比べ
私のところで作成できたものはひどい結果のように見えます。
python、pytorch、RVMいずれも初めてなので私が上手くできていない可能性が
高いと思われますので上記サンプル動画をRVMで処理してもっとうまくできるよ
というのがありましたら アドバイス頂けるとありがたいです。
(うまく処理できている結果を見せていただければ もう少し頑張ってみようと思います)
関連記事


コメントの投稿

No title

まさかRVMをご検証いただいていたとは!本当にありがとうございます。RVMはTiktokで採用されるみたいですね。

すでに把握されているかもしれませんが、緑の2値化はpythonのスクリプトをちょっと書き換えれば可能です。

inference.pyの135行目の com = fgr * pha + bgr * (1 - pha)
を例えば
com = fgr * (pha >= 0.5)+ bgr * (pha < 0.5)
みたいな感じで閾値判定させるのが簡単だと思います(閾値は0~1の間)

閾値は、被写体内部を消しすぎないよう0.1ぐらいの低めの設定がよさそうです。
2値処理だと境界が多少荒くなると思いますので、アマレコ側でご実装いただける場合は何らかのスムージングが望ましいかもです。
(単色緑をピックアップ->ぼかしフィルタ->アルファ値として透過処理)

RVM側で--output-alphaオプションにより、アルファ値の動画を出力できるので、
そのアルファ値動画を本編動画と同時にリアルタイムに読み込んで透過処理、のような方法もありかもでしょうか。
もしくはアマレコVRの独自フォーマットとして、L/R/アルファを並べた動画に対応、とかも良さげです。
(勝手なことをばかり言ってすみません。。)

精度としては、得手不得手はありそうですが(サンタ動画はかなり難易度高そうです・・)、
自分の手持ちの動画は、デモ動画同等とは言えないまでも、実用的なレベルで判定できてる感じします。
体の一部が消去することはありますが、被写体の動きが激しい時も、静止状態に近い時も、比較的安定して検出できてる印象です。

自分のほうでは、アマレコVR Ver2.1.5 アルファ5で効果を確認するため、

1) RVMにより、手持ちのVRサンプル動画の背景色を目立ちにくい白で塗りつぶし(115行目のRGB値を[255,255,255])
2) その後、アマレコVRで再生。自動背景透過処理をオン(ぼかし時間0、閾値大)
3) 塗りつぶした単色背景がアマレコ透過処理によりいい感じに消されることを期待

で検証してみましたが、VR映像の人物実在感が非常に高まり、大変衝撃を受けました。正直未来を感じました。

背景色の白が被写体輪郭で少し残るので、被写体が発光してる感じに見えるのが若干残念ですが、
色指定で透過処理ができるようになると、どんなVR体験ができるか非常に楽しみです。。。

背景透過についてはRVM以外のアルゴリズムもあるようなので、時間ができたらほかのものも試してみたいと思います。

Re: No title

スクリプトのアドバイスありがとうございます。参考にしてもう少しやってみます。
RVMの根本的なこととして
「こういう画像を人物として認識してください」と登録する(AIに覚えてもらう)作業が必要でしょうか?
githubから入手できるデータは基本的なもの(モデル?)なので
私が扱いたい動画の内容と合わない場合もありうるのかなと思っています。
しゅうさんの方では そういった作業込みで良い結果が出ているのでしょうか?
それともgithubから入手できるデータのみで上手くできているのでしょうか。


https://twitter.com/i/status/1458166464339484677
これくらいまで出来たらと夢見てしまいます。




アマレコVR Ver2.1.6 クロマキー合成テスト版
http://www.amarectv.com/download/AmaRecVR216a6.zip

メイン画面設定の画像処理メニューから「クロマキー合成」を選択してください。
クロマキー合成を選択すると 同じメニューからクロマキー合成のパラメータを設定できます。

背景色
RVMの初期背景色は青緑に該当します。
背景色自動でも使えますが、赤い服を着た人がカメラへ近づいて画面全体が赤くなると
背景色が赤と判断されてしまう場合があります。

背景閾値
背景色と近い色を透明にする際の閾値です。
低いと背景に影があった場合に 影が見えてしまいます。
高いと被写体の一部が透明になってしまいます。

輪郭サイズ
輪郭部から背景色を除いて半透明にする領域を設定します。

No title

早速テスト版までご作成頂けるとは!ありがとうございます。後で試すのが本当に楽しみです

twitterの動画ぐらいの品質であれば十分出せると思います。
見栄え良いですが、拡大・スロー再生してみると、時々足先とか手先が消えていて、自分の環境と同じぐらいの品質です。
自分も同じ動画でちょっと試してみました→ https://imgur.com/a/EtRlaYX

以下のサイトでもRVM検証されてる方いますが、自分の環境でも同程度の精度だと思います。
http://cedro3.com/ai/rvm/

基本的にはgithubで提供してる学習済みモデルをそのまま使えば大丈夫で、自分含め他の方も提供されてるモデルをそのまま使ってると思います。

自分の動画のコンテンツにがっちり最適化したモデルが欲しい場合には、提供モデルを初期値に追加データを学習させてファインチューニングしてあげると良さそうですが、そこまで試してる人は今のところ作者以外はいないと思います。
データを用意するのが大変なので、時間があるときに検証してみたいです。

Re: No title

明らかに私のところの結果が悪いので自力でモデルを用意する必要があるのかと思い
憂鬱でしたが、提供されているモデルを使用しているとのことで再び試してみました。

ビートセーバーのプレイ動画
部屋のシーンは同じようにうまくできました。
RVMで初めて実用的な結果が得られホッとしました。


スクリプトのアルファ値
教えていただいた箇所で意図した結果がえられました。
指摘されている通り輪郭の整形が必要ですね。

Re: Re: No title

アマレコVR Ver2.1.6 クロマキー合成テスト版 不具合
画像処理でクロマキー合成を選択していない状態でメインプレイヤーの次のファイルを再生すると
メインプレイヤーが使えなくなる

クロマキー合成のテストと割り切って常にクロマキー合成を有効にした状態で使って下さい。

No title

RVM上手く動作したみたいでよかったです。
テスト版の一部不具合についても情報提供まことにありがとうございます。

VR動画をRVMで背景判定する際は、左右の絵で別々のモデルで処理させた方が若干良い結果得られました。
fgr, pha, *rec  = model(src[:,:,:,0:int(H/2),:], *rec, downsample_ratio)
fgr2, pha2, *rec2 = model2(src[:,:,:,int(H/2):H,:], *rec2, downsample_ratio) ←これを追加するイメージです。
VR動画だと一般の平面動画に比べて、被写体の一部が時々消える頻度は若干高い気がします。Python側でどうにか改善を試みたいところです(具体的なアイデアはまだないですが・・)

テスト版のご提供・不具合のご連絡まことにありがとうございます。
テスト版でVR動画を試したところ、時代の最先端を感じました。今は別ツールのRVM変換のひと手間はありますが、期待に近い結果で、ひと手間かける価値は十分あると感じました。

今でも非常にすばらしい動作ですが、改良点とすればやはりRVMアルファ2値化による輪郭部分の見栄えでしょうか。
(2値化により輪郭が荒くなる&境界部分は色が混ざり若干背景色が残る)

RVM出力のアルファ値動画を本編動画と同時に読み込み、そのアルファ値をもとに透過処理するのが見栄えとしては現状ベストな気がしますが、二つの動画で同期をとるのはやはり難しそうな感じでしょうか。。


Re: No title

RVMのモデルを左右で分ける
なるほど そんな使い方ができるんですね 今度試してみます。

輪郭処理、二値化、アルファチャンネル
まずはRVMを二値で処理して、あとはアマレコVR側の輪郭処理をもう少し
上手くできないか試みたいと思います。
最終的には、RVMの処理で輪郭部だけアルファ値を使って背景色を乗せられたら
いいなと思っています。それをアマレコVR側で読み取れれば理想ですね。
この方向で考えています。

オリジナル画像とアルファマットを並べて一つの動画に仕上げる案は
仕組みとしては確実ですね
他の案でどうにもならなかった場合の奥の手と思っています。
別々の動画2つを再生するのは、おっしゃる通り同期をとるのが困難と思われますので
無理としましょう。
 
 
あまラボへようこそ
このブログでは自作ソフトの最新情報やtips、PC動画に関する話題を掲載していきます。各記事へは下にあるカテゴリからアクセスして下さい。

ファイルのダウンロードはホームページの方でお願い致します。

質問・要望・不具合報告はこちら
アマレコTV
アマミキ!
アマレココ
アマレコ・ライト
ファンタジーリモート
AMVコーデック



ホームページ
カテゴリ
最新コメント
カレンダー
04 | 2022/05 | 06
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
最新記事
最新トラックバック
ブログ内タグ

アマレコTV ビデオキャプチャ AMVコーデック アマレコVR Oculus アマレココ Quest アマミキ! コーデック gQuest SC500 動画配信 Pico GO ファンタジーリモート 4K アマレコライト プラグイン G2 AMV4 oculus ライブ機能 SC512 Unity AVX2 デスクトップキャプチャ Passthrough リモートソフト FAQ 質問コーナー DirectShow ニコニコ動画 120Hz HDキャプチャ 遅延 可変再生速度 レゴ 解説動画 組み換え VR LEGO XL2420T GV-USB2 2 倍速液晶 AMV2MT 液晶モニター アマステ ベンチマーク デインターレース Intensity VRonVR PS4 パススルー機能 Meta Pro MonsterX3A designs VideoKeeper2 XCAPTURE-1 Alternate AVX インストール GV-USB SD-USB2CAP4 RDT233WX-Z 32ZP2 31006 ffmpeg Rift WindowsMR 60fps 背景透過 31024 T2 画像処理 RGBキャプチャ UtVideo Shadow Play RYZEN Haswell 電源オプション MP3 HDCP MonsterXU3.0R HDMI ゲームスムーズモード 音遅延 LameACM HT 倍速補完処理 31021 フィギュア ハイパースレッディングテクノロジー MPC NVEnc OBS QSV モノステ DirectShowFilter プレビュー 擬似NTSCキャプチャ Livetube AtomでHDキャプチャ キャプチャーツール シンクライアント イベント SD-USB2CUP4 IntensityPro 32ZP32 額縁遅延 REGZA 液晶テレビ 倍速駆動 DC-HD1 リプレイ機能 音ズレ ZP3 GV-USB3 passthrough APIパススルー機能 API 検証 60Hz 新アマレコVR 新プレイヤー機能 AMPlayer Robust Video Hand Tracking 2.0 SkyBox ファイルマネージャプラス Matting python pytorch 90Hz Windows キャプチャカード 可逆圧縮 GPU使用率 SKnet SSE オーバーレイ XCapture-1 Kabelake LAVFilters Preferred フレーム間圧縮 VRコントローラー MR VR動画 SteamVR Filter Tweaker 録画 

ブログ内検索
月別アーカイブ
アマレココに関するリンク
お世話になっているソフトのリンク
RSSリンクの表示
管理画面
  • 管理画面