今回はStable Diffusionの拡張機能「roop」を使用して顔を入れ替える(スワップする)方法を紹介します。
導入に関してはGoogleColabを使用したのでそれほど手間はかかりませんでした。
まず最初に今回の「roop」導入方法についてですが、自分はPCに関する事はまったくの素人で、プログラミングの知識もありませんしPythonの知識も皆無です。
なので内容に間違いや勘違いもあるかもしれないという事をあらかじめご理解ください。
ほぼネットの検索やMicrosoft Bing(現在はCopilot)、そしてGoogle Bard(現在はGemini)で調べたりして導入したということを申し上げておきます。
尚、この記事は2023年8月時点での情報となります。将来的にアップデートなどで変更があったり動作に不具合が生じる可能性があるかもしれないということをご了承ください。
ちなみに今回の記事はGoogleColabでの導入となります。
ローカル環境で導入する場合はまたひと手間かかります。後半に簡単に導入方法を載せておきます。
プログラミング学習の一環として利用してくださるよう、お願いします。
*注 2023年8月31日にStable Diffusion web UI Ver.1.6.0がリリースされました。画面UIが変更され、新しいサンプラーの追加、Hires.fixやRefinerも仕様変更されてます。
顔をスワップする「roop」を使用するには
Google Colabの場合ですが、Stable Diffusionに拡張機能の「roop」をインストールします。
そして「insight face 0.7.3」をインストールする必要があります。
「roop」のインストールの方法はStable Diffusion web uiからインストールします。
まずは普通にGoogleColabからStable Diffusionを起動してweb uiを表示させます。
【Extensions】から「Install from URL」タブを開き、URL for extension’s git repositoryの欄にGitHubからコピーした「roop」のURLを貼り付けます。
とりあえずgithubのサイト検索から一番最初に表示されているURLを載せておきます。
↓Roopの改良版。
↓ReActor ●この拡張機能は、性別の検出、複数の顔に対応可能、NSFWのフィルターが無いことなどが挙げられます。
GitHubからコピーした「roop」のURLを貼り付けたら、下にあるオレンジ色のInstallボタンをクリックするとインストールが始まります。
しばらく待ってインストールが終了するとInstallボタンの下に
Installed into/content/sd-webui/・・・・・
と表示が出ればインストールは完了してます。
インストールした後はwebuiの再起動が必要になります。(After installation, you will need to restart the webui)一旦閉じて再起動(Restart the program)します。
再起動後、webuiを下へスクロールして「roop v0.0.2」といった表示があればOKです。
(この画面では上記のroopとは違うものをインストールしているので表示が違いますが、とりあえずroopと表示されていれば正常にインストールされています。ちなみに自分はReActorを採用してます)
ちなみにこの拡張機能の「roop」を調べたところ、かなり複数のソースが上がってます。しかしそれほど違いはないように思います。
中には動画にも対応できるroopもあるようですが、まったく知識が無いのでそれぞれの違いは全然わかりません、すみません(汗
![](https://hirohitorigoto.com/wp-content/uploads/2023/05/f97d4cf2d9aa2d61e6d886b9933edf50-160x90.jpg)
Insight face 0.7.3のインストール
次に「Insight face 0.7.3」のインストールですが、GoogleColabの実行コマンドの中にコードセルを追加します。
Colabのノートブックを開いて「+コード」をクリックすると、コマンドを入力する新しいテキストボックスが開くので、
(このコマンドは特定のバージョンをインストールするコマンドです)
もしくは、
(このコマンドはinsight faceの最新バージョンをインストールしてほしいときのコマンドになります。) ハイフンは半角のハイフンが2つです。
※コマンドの最初の記号は「!」exclamationマーク(エクスクラメーションマーク)です。
コマンド【 !pip install insightface==0.7.3
】
は、Pythonのパッケージマネージャ「pip」を使って「insightface」というライブラリの特定バージョン(0.7.3)をインストールするためのものです。ここで「!」はJupyter Notebookなどのインタラクティブ環境でシェルコマンドを実行するための記号です。
あとはそれぞれの▶実行ボタンを押していき、public URLが表示されたらクリックしてwebuiを立ち上げてください。
実際に「roop」を使ってみた
まず最初は簡単な方法で顔をスワップしてみます。
txt2imgでの方法は、まず画像を生成する前にroopの設定のEnableにチェックを入れ、入れ替えたい顔の画像をアップします。
(Enableは”有効にする”という意味です。発音は英語だとイネイブルとかエネイブルと発音してます)
そのままGenerateボタンを押して画像生成します。そうするとアップした顔に入れ替わってます。
もしくは生成し終えた画像の顔をスワップしたい場合、生成後のseed値をコピーして貼り付け、roopに入れ替えたい顔をアップしてGenerateボタンを押せば顔をスワップすることができます。
他の方法はimg2imgを使用する方法で、img2imgの「inpaint」を使います。
「inpaint」に入れ替えたい画像をアップして、その画像の顔の部分だけ黒く塗り潰し、それから「roop」に入れ替えたい顔をアップします。
Generateボタンを押して画像を生成すれば、顔の部分だけroopで指定した顔に入れ替わります。
試した結果
見た目とか出来栄えですが、ある程度の試行回数が必要かもしれません。
まだこの「roop」の機能は完璧とは言えないまでも、アップした顔の特徴は掴めているようです。
しかし、違和感なく自然な感じでスワップされている画像もあれば、微妙に肌の色が変わっていたり顔がちょっと違うものが生成されることもありますので、上手くいくかどうかは運任せの部分が多少あります。
もしtxt2imgでroopが上手くいかない場合はimg2imgで顔を入れ替えて試してみてください。
ただimg2imgの場合、サンプル画像によっては顔が変わってしまったり顔が崩れることもあります。
この対策として、サンプル画像にもっと解像度の高い画像を使用するか、もう少し参考になりそうなサンプルの画像を集めて「roop」に画像を何度か入れ替えて試行回数を増やしてみます。
このあたりは技術的な部分もあり、使用する画像や各種パラメーターなどの数値も関係してくると思います。
しかしこの「roop」機能を使えばそれほど手間をかけずに顔のスワップが可能ですから、手軽に顔を入れ替えたりするための一つの手段として導入してみて下さい。
追加で補足説明します。
img2imgの「inpaint」を使ってroop機能を使用する際の注意点として、ベースとなる画像の対象のモデルの顔が横を向いていたり、寝そべっていたり、極端ですが顔が逆さになっていたりすると顔が崩れやすくなります。
これは、roopが顔の特徴を抽出するためにInsightfaceというライブラリを使用しているので、顔の向きや角度によっては検出する精度が変わってしまいます。顔が正面を向いていないとroopがうまく機能しない可能性が高くなります。
ベースになる画像のモデルはなるべく正面を向いた画像を使用して下さい。もしどうしてもその画像を使いたい場合は画像の角度を変えたり回転させたりして、対象となるモデルがなるべく正面を向くように調整して下さい。
それともう一つ、img2imgの「inpaint」でroopを使用する場合は「Denoising strength」の数値を下げる方が良いと思います。
この機能については自分もよくわからないのですが、翻訳すると「ノイズ除去の強さ」を調整するようです。
img2imgにタブを切り替えると下の方に Denoising strength が表示されます。
デフォルトでは0.75という数値になっていますが、この値だとちょっと強めの調整になるので画像の細部や特徴が失われる可能性があり、顔が崩れることがあるようです。
またはスワップされた顔の特徴を掴んではいるが、あまり似ていない顔になったりすることがあります。
![デノイジング ストレングス パラメータ](https://hirohitorigoto.com/wp-content/uploads/2023/08/2ab2929cdbb43a7d758d73720fe31ff6.png)
デフォルトでは0.75という数値になっていますが、このパラメータを低めに設定して下さい。目安は0.3を基準として、生成された画像を確認しながらパラメータを調整して下さい。
逆に弱めの調整だと画像が粗くなったり元の画像と変わらない可能性があります。
img2imgの「inpaint」でroopを使用する際には、この数値をデフォルトより下げるようにパラメータを調整して下さい。
だいたいの目安としては0.3ぐらいだと思います。このあたりは画像を確認しながらパラメータを調整して下さい。
ローカル環境でroopを導入する場合
GoogleColabのようなクラウドではなく、個人のPCでローカル環境でStable Diffusionを構築している場合は「roop」導入前にいくつかインストールする必要があります。
前提として、画像生成には最新のCPUと高性能なGPUが必要になります。どのようなPCが良いのかを下記のブログに掲載しています。↓↓↓
![](https://hirohitorigoto.com/wp-content/uploads/2023/05/ec63b0efa3782db84377d0e71181fcad-1-160x90.jpg)
ローカル環境でSTABLE DIFFUSIONを構築している場合、Roop導入には、GIT、Microsoft Visual Studio 、insight face 0.7.3 のインストールが必要になります。
*Python 3.10.6に関しては、ユーザーがローカル環境でStable Diffusionを構築している時点でインストールされていると思います。
GITのインストール
ローカル環境でSTABLE DIFFUSIONを構築しているユーザーなら、「GIT」のインストールも済んでいるとは思いますが、念のため説明します。
GITは、ソースコードのバージョン管理システムです。STABLE DIFFUSIONのようなプロジェクトでは、以下の理由でGITが必要となります。
-
プロジェクトのクローン: GITを使用すると、GitHubなどのリモートリポジトリからプロジェクトのソースコードをローカル環境にクローン(コピー)することができます。これにより、ユーザーは自分のマシン上でプロジェクトを構築し、実行することができます。
-
最新の変更を取得: プロジェクトは常に進化しており、新しい機能が追加されたり、バグが修正されたりします。GITを使用すると、これらの最新の変更を簡単に取得して、自分のローカル環境に反映することができます。
-
バージョン管理: 何か問題が発生した場合や、特定のバージョンのコードを確認したい場合に、GITを使用して過去のバージョンに戻ることができます。
以上の理由から、STABLE DIFFUSIONをローカル環境で構築する際には、Pythonと共にGITのインストールが必要となります。
これにより、プロジェクトのソースコードを効率的に管理し、最新の変更を追跡することができます。また必要に応じて過去のバージョンに戻ることも可能となります。
Microsoft Visual Studioのインストール
![](https://visualstudio.microsoft.com/wp-content/uploads/2018/06/vscom_downloadsd_twitter.png)
Microsoft Visual Studio Windows版(Community 2022)をクリックするとインストーラがダウンロードされます。
ダウンロードしたらインストーラが準備されるので開きます。
インストールの項目ですが、
- Python開発
- C++によるデスクトップ開発
- VisualStudio拡張機能開発
この3つにチェックを入れてインストールします。インストールに多少時間が掛かる場合があります。
サインインする画面が出るのでサインインします。サインインが完了したらウィンドウを閉じます。
insight face 0.7.3のインストール
「GIT」、「Microsoft Visual Studio」、それぞれのインストールを終えたら、自分のPCのコマンドプロンプトを開いて【insight face 0.7.3】をインストールします。
pip install insightface==0.7.3 と入力します。
このインストールも少々時間が掛かるみたいです。
その後は上記のようにStable Diffusion Web UIから「roop」をダウンロードします。
ローカル環境で「roop」を導入するのは手間がかかる部分がありますが、自分でStable Diffusionを構築しているユーザーならそれほど難しくはないと思います。
まとめ
ただ顔を同じにするならControlNetの「Reference-only」を使えばいいのですが、顔を入れ替えるとなると「roop」は非常に役に立ちます。
完璧とはいかないまでもスワップ可能ですから、イラスト系などでは重宝する機能です。
この「roop」だけでも複数のソースが上がっていますから、細かな問題点は少しずつ解決していくと思います。
くどいようですがプログラミングに関してはまったくの素人ですから間違いや勘違いがあるかもしれません。
上記に挙げた方法で正しいかどうかはわかりませんが、なんとか導入して試すことはできたので興味がある方は参考にして下さい。
画像生成AIに関しては次々と新しいバージョンや機能が登場してますから、機能的な部分も徐々に改善されていくと思います。
また新しい機能や情報があれば発信していきます。