roop for Stable Diffusionで顔を入れ替える。顔写真から画像を生成する。

roopとは?顔を自然に入れ替える技術

roopは、人物の写真から顔を抽出し、別の写真の顔と置き換えるディープラーニングモデルを利用した技術です。これはStable Diffusionやfaceswapのようなテクノロジーとは異なる道筋で研究が進められています。Stable Diffusion Web UI(AUTO1111)の普及により、roopの使用が簡単になりました。以前は、直接ソースコードを実行する必要がありましたが、roop for Stable Diffusion Web UIという拡張機能の導入により、コードの記述なしで手軽に利用することが可能となりました。

sd-webui-roop: roop extension for StableDiffusion web-ui (github.com)

roop for Stable Diffusion Web UIでできることは?顔写真から画像生成できる

roopをStable Diffusion Web UIの画像生成に活用することで、人の映った写真を元に、その人の顔で画像を生成できます。具体的な実用例としては、架空のAIで生成した人物を使ったAIインフルエンサーです。Stable Diffusionなどの画像生成でたまたま生成できた人物にいろいろな服装やポーズで画像を作りたいときに有効な活用方法になります。

一番左が参照した画像でその他はroopで生成した画像です。

悪用厳禁!有名人の顔を使う場合は肖像権や著作権に注意

roopを使うと有名人の顔やアニメキャラクター顔を利用して様々な画像が生成できます。ただし、著作権や肖像権の問題などがあるのであくまで個人利用の範囲内にとどめておきましょう。歴史上の人物などはそこまで問題になることはなさそうですが、肖像権があったりすることもあるので注意してください。

デモ版も公開されている

以下のリンクでデモ版が公開されているのでお試しで使ってみるのをおすすめします。source_fileに顔が映った画像をtarget_fileに顔を入れたい画像を入力します。そして送信を押すと顔が入れ替わった画像が生成されます。生成に1分程度かかります。

Roop - a Hugging Face Space by ezioruan
Discover amazing ML apps made by the community

Stable Diffusionの他の顔入れ替え手法との比較

LoRAとの比較

LoRAでも顔を固定して画像生成することが可能です。ただしLoRAの場合は学習データとモデルのトレーニングが必要になりますが、roopの場合は一枚の画像で訓練も必要ないのでお手軽です。また画像生成でたまたまできた顔を流用したい場合は、そもそも1枚しか画像はないのでLoRAは使えません。品質については、よく工夫されたLoRAよりかは特徴を捉えられないですが、適当に作ったLoRAに比べるとroopのほうが良い印象です。

ControlNet reference onlyとroopの比較について

ControlNet reference onlyとroopは類似の技術を持っており、どちらも似た顔の画像生成が可能です。reference onlyは、服装や背景などの要素も取り込む形で画像を生成しやすい一方、roopは顔の部分を的確に模倣するため、余計な情報が影響することは少ないと言えます。

しかし、roopが一見優れているようにも感じられますが、特にWindows環境でのインストールなど、ControlNet reference onlyと比較すると少し手間が必要です。どちらが上であるか一概には言えませんので、実際に使用してみて最適な方を選択するのがベストだと思われます。

インストール手順

それではインストール手順について説明します。大まかな手順をまとめると次の通りです。

roop for Stable Diffusion Web UIのインストールに必要なこと一覧

  • Windowsユーザーのみ: C++のビルドツール群をインストール(Visual Studio)
  • insightfaceをインストール(pip install insightface==0.7.36)
  • “roop for stable diffusion web UI”をStable Diffusion Web UIにインストール
  • inswapper_128.onnxをダウンロード(2023/10/17時点では必須)

Windowsユーザーの場合: C++のビルドツール群をインストール(Visual Studio)

MacなどWindowsユーザーでない場合は次のステップへお進みください。

Windowsユーザーの場合はプログラミング言語C++のソースコードをビルドするツールのインストールが必要となります。このステップですがプログラムをインストールした後の再起動に1~2時間かかるため時間に余裕があるときに行ってください。

それでは解説します。まずは次のページからC++のビルドツールをインストールするためにVisual Studioのインストーラーをダウンロードしましょう。

Visual Studio Tools のダウンロード - Windows、Mac、Linux 用の無料インストール
Visual Studio IDE または VS Code を無料でダウンロードします。 Windows、Mac で Visual Studio Professional または Enterprise エディションをお試しください。

特にライセンスなどを持ってない場合はコミュニティを選択しましょう。

ダウンロードしたexeファイルを実行してインストーラーが起動したらライセンスを確認して続行を押しましょう。

インストーラーの準備が始まるので待ちます。2~3分かかることがあります。

次のような画面になったら不要なソフトウェアにチェックが入っているので、すべてのチェックを外すのをおすすめします。そして「C++によるデスクトップ開発」にチェックを入れましょう。他のソフトウェアが気になるかもしれませんが、後から必要になったときにインストールできます。なので、今回インストールしなくても問題はありません。

その状態でインストールを押すとインストールが開始されます。所要時間は~30分程度です。

その後再起動を求められるので再起動します。この再起動ですが時間が1~2時間かかるので注意が必要です。

insightfaceをインストール

コマンドプロンプトを開いて次のコマンドを入力して実行してください

pip install insightface==0.7.3

Stable Diffusion Web UIにroop for stable diffusion web UIをインストール

roop for stable Diffusionのインストール手順
  • 1/4
    URLから拡張機能をインストールタブへ切り替えて

    Stable Diffusion Web UIのタブをExtensionsへ切り替えます。そしてInstall from URLタブに切り替えてください。

  • 2/4
    roop for stable diffusion web UIをインストール

    URL for extension’s git repositoryに以下を入力します。

    https://github.com/s0md3v/sd-webui-roop

    そしてInstallをクリックしてインストールしてください。

    後はインストールが完了するまで待ちます。以下のようなローディングアイコンが消えるまで待ちましょう。

  • 3/4
    Stable Diffusion Web UIを再起動

    Installedタブへ切り替えて、sd-webui-roopがインストールされていることを確認します。問題なければApply and restart UIでStable Diffusion Web UIを再起動します。

  • 4/4
    roop for stable Diffusionがインストールされていることの確認

    トップページが表示されたらroopのメニューが追加されていることを確認しましょう。以下のようになっていれば問題ありません。

roopモデルを手動で配置する。

Stable Diffusion Web UIでインストールしても現時点(2023/09/28)ではモデルのダウンロードに失敗します。原因はHuggin Faceでroopモデルの公開が停止されているためです。

そこで手動でモデルをダウンロードして配置する必要があります。以下のgithubリンクからダウンロードできます。

Releases · facefusion/facefusion-assets (github.com)

inswapper_128.onnxをダウンロードしたらstable-diffusion-webui/models/roopに配置してください。roopフォルダがない場合は作成してください。

roopを使って画像を生成する

roop for stable diffusionの使い方
  • 1/3
    txt2imgの設定をしてroopメニューを開く

    いつも通りtxt2imgのプロンプトや生成した画像の設定をしてroopメニューが追加されているので開きます。

  • 2/3
    roopメニューの入力

    roopメニューを開いたら設定します。生成したい顔が映った画像をセットします。顔のアップの画像のほうが良いですがそうでなくてもそこそこ上手くいきます。次にEnableにチェックを入れてroopを有効化します。最後にモデルパスが先ほどダウンロードしたモデルのパスと一致するか確認します。もし異なるパスが選択されていたら変更するかモデルの位置を修正します。アップスケールの設定もできますが、今回は割愛します。

  • 3/3
    画像を生成

    後はいつもと同様に”Generate”をクリックすると画像を生成すると次のように画像が生成されます。

一番左が参照した画像でその他はroopで生成した画像です。

異なるシチュエーションで生成しました。

roopのFAQ

roopのgithubリンクがたくさんあるけどどれが正しい?

roop for stable diffusionはフォークされていて、なぜだかフォークされた方のリポジトリが引用されていることが多いですが正式なのは次のリポジトリなので気をつけてください。

GitHub - s0md3v/sd-webui-roop: roop extension for StableDiffusion web-ui
roop extension for StableDiffusion web-ui. Contribute to s0md3v/sd-webui-roop development by creating an account on GitH...

またよくある間違いがroop本体をStable Diffusion Web UIにインストールしてしまうことです。こちらをインストールしてもStable Diffusion Web UIに対応してないため動かないです。

GitHub - s0md3v/roop: one-click face swap
one-click face swap. Contribute to s0md3v/roop development by creating an account on GitHub.

roopで画像が生成できない、エラーが表示される。inswapper_128_fp16.onnxのダウンロード

Stable Diffusion Web UIを起動したときにコンソールに次のようなメッセージが表示されいる場合は、モデルをダウンロードに失敗しています。

*** urllib.error.HTTPError: HTTP Error 401: Unauthorized

もしくはroop利用時に次のようなエラーが発生します。

'NoneType' object has no attribute 'get' error,

どこでモデルをダウンロードするかですが、roop for stable diffusion web UIのgithubのissueで同じトラブルに遭遇している人がいて回答がなされていたのでそれを参考にします。

inswapper_128.onnx - "Repository not found" · Issue #232 · s0md3v/sd-webui-roop
In the link: Repository not found

githubの回答によると以下のリンクからダウンロードできることが確認できました。

Releases · facefusion/facefusion-assets (github.com)

コメント