Practical-RIFEのインストールと注意事項の解説
Flowframesアップデートしないかなぁーと待っていたのですが、寄付したPatron版でもRIFE4.6で、最新の4.21と比べると古すぎるので、本家のCLI(Command Line Interface)版Practical-RIFEをインストールしてみることにしました。
動画解説
個人的には動画での解説はまだるっこしいと感じるのですが、最近の子は倍速再生で学ぶと聞いて、なるほどなぁと思いました。
倍速だろうとテキスト検索できる文字コンテンツが一番という気持ちは変わりませんが、どっちも用意できるなら両方あったほうが良いよね。
Practical-RIFEのインストール手順
- Python 3.11のインストール
https://www.python.org/ - Gitのインストール
https://git-scm.com/ - Practical-RIFEのインストール
https://github.com/hzwer/Practical-RIFE
[OPTION]Visual C++ 再頒布可能パッケージ
CUDA Toolkit※やStable Diffusion入っているならvc_redistも入っているとは思うけれど、ない場合はMSのページからどうぞ。基本的にVCで開発されたアプリを使う場合に必要となるパッケージです。
https://aka.ms/vs/16/release/14.29.30153/VC_Redist.x64.exe※CUDAが入っていなくとも、CPUだけでAIフレーム補間は可能ですが、とても遅いのでnVidia製GPUをお持ちならインストールしておきましょう。
Practical-RIFEインストール時の注意点
Practical-RIFEのInstallationでは
git clone [email protected]:hzwer/Practical-RIFE.git
と書かれていますが、これだとGithubへのログイン認証が必要なため、こちらのコマンドを使いましょう。
git clone https://github.com/hzwer/Practical-RIFE.git
なんならGitすら入れず、Githubのページの[Code]ボタンから[Download ZIP]を選んでZIPファイルを解凍するだけでも構いません。それでも問題なく動作することを確認済です。
あとはいつものpip installでOK
cd Practical-RIFE pip3 install -r requirements.txt
インストールが終わったらサンプルにある
python inference_video.py --multi=2 --video=video.mp4
あたりのコマンドで動作確認をしましょう。
このとき、vc_redistが入ってねーぞ、と怒られたら先述のvc_redistをインストール。
fbgemm.dllにモジュールが見つからないぞ、と怒られたら、torchのバージョンをダウンしましょう。
※ffmpegが入ってない場合は下記URLからインストールhttps://ffmpeg.org/download.html#build-windows
fbgemm.dllの問題
「fbgemm.dll」でググれば同じ問題で困っている人がたくさん出てくるので、詳しくはそちらを参考にして欲しいですが、端的に言うと「このDLLで使われているlibomp140.x86_64.dll」が存在しないのが原因です。
「libomp140.x86_64.dll」は本来、Visual Studio等の開発ツールか、vc_redist.x64.exeで入るハズなのですが、なぜかWindows 11だと入らないという噂があります。
ぼくの場合はWindowsプログラミングもするのでVisual Studioが入っており、全く問題なかったのですが、普通は1個のDLLのためにクソデカい開発環境をインストールするなんてまっぴらごめんなハズ。
なので、信頼できるプログラマーの友人がいるなら、その人から「libomp140.x86_64.dll」だけもらってシステムフォルダにでもほおりこめば良いですが… それもハードル高いですよね。
ということで、目的がPractical-RIFEを使うことだけなら、torchのバージョンを2.3へダウンすればこのファイル使わないので良いのではないかなー、と。
torchをダウングレードするコマンドは以下のとおりです。
pip uninstall torch torchvision pip install torch==2.3.0 torchvision==0.18.0
torchのダウングレードなんてやだやだ!安全に「libomp140.x86_64.dll」をインストールする手段を教えて!という場合はこのあたりのトピックをどうぞ。
https://github.com/Acly/krita-ai-diffusion/issues/965
流し読みしただけですが、下記コマンドでVisual StudioのBuidToolsをインストールすれば必要なDLLも入るそうです。
winget install --id Microsoft.VisualStudio.2022.BuildTools --override "--passive --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64"
RIFEモデルのインストール
Practical-RIFEをインストールしただけではモデルデータがないため、まだフレーム補間が出来ません。AIといえば学習モデルとの組み合わせですよね。
ということで、GithubページのModel Listにあるモデルをダウンロードします。
この記事執筆時点では、2024.08.04にアップロードされた 4.21 が最新のモデルのようです。
ちなみに、つい先日までその前の 4.20 が最新だったので、ぼくはそれで試していたのですが、構文エラーで動きませんでした。学習モデルといいつつその中身はデータ+Pythonスクリプトなのですが、そのスクリプト中で空白とタブコードが混在してたんですね。Pythonのコーディングについては詳しく知りませんが、インデントする際にタブと空白を混在させちゃいけないらしい。
コミュニティでその件が指摘※され、2024年8月5日に修正されたようです。
※https://github.com/hzwer/Practical-RIFE/issues/86
尚、4.20より4.15のほうが優れているという意見も見られますが、変換する内容によって相性があるんじゃないかな。そのあたりはご自身で試すのが良いでしょう。
ZIPファイルの中にある train_log フォルダをそのままPractical-RIFEの直下に置くだけです。
C:\Practical-RIFE へインストールしたとしたら、C:\Practical-RIFE\train_log ですね。
連番画像のアニメ化にも inference_video.py を使う
inference_img.pyというスクリプトもあるため、静止画のフレーム補間ならそちらを使いたくなるのですが、実際使ってみると下記のとおり、
usage: inference_img.py [-h] --img IMG IMG [--exp EXP] [--ratio RATIO] [--rthreshold RTHRESHOLD] [--rmaxcycles RMAXCYCLES] [--model MODELDIR]
--imgオプションの後に指定できるのは2枚の静止画のみ。
つまり、2枚の画像のフレーム補間をするだけのスクリプトなんですね。
うちのブログでよくやっている6枚くらい中割作って、30fpsでぬるぬる動かす、なんて用途には使えません。
そのため、3枚以上の画像を一括でフレーム補間したいなら、下記のように inference_video.py に--imgオプションでディレクトリ名を指定し、そこにある画像ファイルを一括で変換させることになります。
python inference_video.py --img=input/ --multi=10
出力先の指定方法はよくわかりません。vid_outというディレクトリ固定かも。
inference_video.pyはSSIMで類似画像を判定している
inference_video.pyを使ってフレーム補間を試していて、とても気になったことがあります。
わずかな動きのフレームが無視されるのです。
女の子が指をほんのり曲げる動作とか。なぜか無視されてなかったことになる現象に悩みました。
- 同じ画像をFlowframes(RIFE4.00)でフレーム補間すると問題なし
- 先述した inference_img.py で指を曲げる前、曲げた後の2枚を変換すると問題ない
- inference_video.pyを使いRIFE4.10~4.21まで10種類以上のモデルを試しても、わずかな動きが無視される
ここまでテストしてようやく inference_video.py がおかしいのでは?と気が付きました。
テキストエディターで開いてみると、228行目に
if ssim > 0.996:
という一文があります。
ssim(類似性)が0.996を超える場合、次のフレームを読む(=無視する)という動作がこのスクリプトに組み込まれていたのです。
なんでやねーん!
まぁ、30fpsの動画を120fpsにするとか、そういう世界の話なら0.996以上のフレームなんて無視したほうが効率良いのでしょうけど、中割を楽にするために使っている自分としてはこのロジックいらん。
Pythonでコーディングしたことないので、あまり影響がないように0.996を1とすることで、ここを通らないように変更しました。
if ssim > 1:
これで無事、わずかな動きでもフレーム補間されるようになりましたとさ。
おまけ:Practical-RIFE用のバッチファイル
毎回、コマンドプロンプト開いて inference_video.py のオプションなんだったっけな…などと考えるのは無駄なので、参考までにぼくが使っているバッチファイルを置いておきます。
rmdir /S /Q .\frame mkdir .\frame del C:\Practical-RIFE\input\*.png del C:\Practical-RIFE\vid_out\*.png copy *.png C:\Practical-RIFE\input cd /d C:\Practical-RIFE\ python inference_video.py --img=input/ --multi=10 cd /d %~dp0 move C:\Practical-RIFE\vid_out\*.png .\frame
中割を作る際、01.png 02.png 03.png...と連番ファイルを同一フォルダに置くと思います。
そのフォルダにバッチファイルを置いて実行すれば、中割画像をinputディレクトリへコピー、フレーム補間を行い、vid_outに生成されたフレーム補間済画像を、元のディレクトリ直下の frame というディレクトリに置く仕組みです。
C:\Practical-RIFE以外にインストールした場合は、適宜買い換えてお使いください。
まとめ
- git cloneのURLが認証用になっている
- 環境によってはDLLの追加またはtorchのダウングレードが必要
- たまに動かないモデルがある(RIFE4.20とか)
- スクリプトそのままでは類似画像が無視される
などなど。今後使っていくとまた何かある気がしますが、これだけいろいろあっても素晴らしいものは素晴らしいのです。
そのへんは動画を見て頂くのがわかりやすいですが、RIFE4.00と比べて破綻しないケースが増えているので、個人的にはもう古いバージョンには戻れません。
万人にオススメできるかと言われると微妙ですが、多少苦労してでも使いこなす価値はあると思いますよー。












