見出し画像

【ローカルAI画像編集】Qwen-Image-Editのインペイントで四苦八苦した話【部分編集】


はじめに

Qwen-Image-Editは、ChatGPTやFLUX.1 Kontext、Googleのnano-bananaのように、テキスト指示や入力画像を利用した画像編集が可能になるAIモデルです。

さらにFLUX.1-dev Kontextと同じくオープンAIモデルとして公開されているため、(無料で)ローカルで実行可能です。

最近はQwen-ImageのControlNetやインペイントが可能になっていますが、Qwen-Image-Editでインペイント利用すると、なかなか難しかったという話です。

※ AI画像生成では、一部のみをimg2imgとして再生成する技術をインペイントと言います。

※ ComfyUIでの作業です

ComfyUIインペイントの基本

インペイントはAI画像生成において基本(必須)機能の一つとして位置づけられているため、多くのAIモデルにおいて共通の手法で利用可能になっています。

画像を読み込み
ComfyUI内蔵のエディタを起動
マスクを設定
インペイント用VAEノードを利用する(画像とマスク画像を入力)と、
a bananaとして生成すると塗り潰した箇所のみ再生成できます

しかし上記手法は、Qwen-Image-Editのモデルはエラーで利用できません。

Qwen-Image-Editモデルの場合

そもそも画像編集AIモデルにおいて、インペイント手法が必要になる理由は、画像の劣化や変更を最小限にしたいからです。

画像全体に対して生成すると、(他の編集モデルも同じですが)画像全体やサイズまで微妙に変更してしまうため、レイヤー編集が困難になります。そこで、人間判断で変更すべき箇所を限定してやります。

※ ComyUIのプリインワークフローを利用します

Qwen Image Edit
変更したモデルや設定(GGUF量子化モデル+高速化LoRAの4ステップ)

※ 軽量化としてCLIPLoader(GGUF)を利用する場合は、ちょっとした変更が必要です。

インペイント用のVAEノードが利用できないため、単にLatent空間でマスクを設定するという指定をします。「Set Latent Noise Mask」を利用します。

「Scale Image to Total Pixels」は自動で画像サイズを調整してくれるものですが、悪さをする事もあるので無効化します(Ctl + B)
プロンプトは「Make the apple smile」とします
怖いですが、想定通りにできています

しかし、複雑なものは上手くいかない

マスクを設定し

Make her a peace sign (V shape) while keeping the person's face and original pose exactly the same.

(ピースサインさせる)プロンプトを設定
失敗します

主原因は、①マスク・クリッピングにおけるサイズ不一致と、②単純なマスクなので、文脈を考慮しないクソコラ貼り付けだと思います。

①は工夫によってある程度緩和できるのですが、②はどうしても解決できませんでした。

そこで、仕方なく下記の高度な手法(LanPaint)に頼る事にしました。

インペイント生成する際に、何度か生成して上手く文脈を一致させるという手法です。

ComfyUIマネージャから導入可能です

品質は上がりますが、デメリットは何度も生成するため激遅になります。

上記githubのREADMEから、LanPaintサンプルワークフロー(Masked Qwen Edit Workflow)をダウンロードできます。※ pngファイルをComfyUIへドラッグします

LANPaintのREADME

モデル変更はプリインワークフローと同じです。LanPaintKSamplerの設定を「Prompt First(プロンプト優先)」にします。

LANPaintワークフロー
その他の手法も同じです。「Scale Image to Total Pixels」は無効化にして、画像はあらかじめ8の倍数の解像度にしておきます
完璧とはいきませんが、ちゃんとできています。(RTX 3060で約3分)

まとめ

単にピースサインをさせたいだけならば、全体に対してQwen-Image-Editを利用するだけで終了です。また、単に一部を変更するだけなら、通常のQwen-Imageのインペイントで事足ります。

しかし、複雑な指示かつ顔や背景など1ピクセルも変えたくない場合には、範囲を限定してEditモデルのインペイントをする必要があります。

以下、関連する記事等の【PR】です。


いいなと思ったら応援しよう!