StableDiffusionで画像から画像を生成(image2image)したい場合にどの手法を使うと良いのか迷ったので実際に生成して、比較をしてみようと思います。
代表的なimage2imageの手法は以下の3種類です。今回はこれらにフォーカスを当てます。
- Latent Imageとして画像を入力する方法
- ControlNetを使う方法
- IPAdapterで画像をプロンプトとして入力する方法
手法1:Latent Imageとして画像を入力する方法
概要
画像をVAEでエンコードして得られる潜在変数(Latent Image)をStable Diffusionへの入力として画像生成を行います。このときDenoiseの強さを1より少し低めにしてください。
色味や色の大体の位置などは維持されますが、プロンプトやパラメーターによっては元の画像とは全く異なる画像になってしまったりする点がネックです。
ComfyUIの場合は以下のようにノードをつなげることで生成可能
生成結果
- prompt: 空欄
- model: flat2DAnimerge
- denoise: 0.65
※左上が元の画像です。
手法2:ControlNetを使う方法
概要
ControlNetは画像の構成を指定する手法の一つです。ControlNetで画像の構成を指定するために線画やOpenPoseなどのデータが用いられるのですが、以下のような流れで入力したい画像を線画やOpenPoseに変換し、それをControlNetに渡すことでimage2imageを行うことができます。
この手法を用いると構成はほぼ元画像と同様になりますが、色味などは残らないのでプロンプトで指定することができます。
ComfyUIの場合は以下のようなワークフローになります。
ControlNetの導入方法などは以下を参照ください。
生成結果
- prompt: 空欄
- model: flat2DAnimerge
※左上が元の画像です。
手法3:IPAdapterで画像をプロンプトとして入力する方法
概要
IPAdapterは画像をプロンプトとして利用する方法です。画像をAIモデル(ViT)に解釈させ、その解釈をStableDiffusionモデルに入力することで元画像と似た画像を生成することが可能になります。Text Encoderとは別の機構で動いているため、文字のプロンプトとも併用可能です。
ComfyUIでの使用方法は以下の記事で説明しています。
生成結果
- prompt: 空欄
- model: flat2DAnimerge
※左上が元の画像です。
比較
以下のようなメリット/デメリットがありそうです。
手法 | メリット | デメリット |
---|---|---|
手法1:Latent | 追加の拡張が必要ない、シンプルに利用可能 | パラメータの調整が必要、 失敗しやすい |
手法2:ControlNet | 構成をほぼ忠実に再現できる | 融通が利かない(特に線画系)、生成が若干重くなる、追加の拡張機能が必要 |
手法3: IPAdapter | 構成を大まかに再現しつつ調整が入る、文字のプロンプトで調整も行える | 元画像の再現度がまちまち、追加の拡張機能が必要 |
最後に
今回はそれぞれの特性を捉えるため別々で生成しましたが、併用することも可能なようです。その時々で必要なメリットを考えながら、使用してみると良いかと思います。