🎨

Qwen-Image-Edit-2509 に日本語を書いてもらう

に公開

Qwen-Image-Edit-2509 はローカル画像編集モデルとしては非常に高品質なのですが、日本語の生成がやや弱いという問題があります。

たとえば、次のようなプロンプトで Qwen-Image-Edit-2509 を使って画像を生成すると、一見漢字のようですが読めない文字が生成されてしまいます。

「芸術の秋」と縦書きで習字をするような字体で描いてください。右上に「芸」、右下に「術」、左上に「の」、左下に「秋」と書いて、背景は白一色にして、赤い四角の「通义千问」というハンコを最後、左下端に加えてください

そこで今回は、テキストを画像に変換してから読み込ませるというワークフローを作ることで、日本語のテキストを正確に描画してみたいと思います。

環境構築については前回記事を参照ください:

https://zenn.dev/kota_iizuka/articles/7925ff69aa2247

基本機能

本題に入る前に、大きく2つの基本機能を追加したワークフローを紹介します。

T2I / Edit モード変更

Qwen-Image-Edit-2509 は名前の通り Edit (TI2I / Text-Image to Image) モデルなのですが、画像を1枚も与えないと T2I (Text to Image) モデルとしても利用できます。

「画像生成は別モデルで行って、 Edit のためにモデルを入れ替える」という作業が必要ないのはかなり便利です。

ちなみに Technical Report にも、アーキテクチャに差がなく入力形式だけが異なるという図が書かれています。

T2I (Fig.6) Edit (Fig.14)

ComfyUI のワークフローはこのようになりました。下の画像入力のグループを無効化 (bypass) すれば T2I として動きます。

出力画像の例はこちらです。

https://github.com/kota-iizuka/comfyui-workflows/blob/main/qwen-image-edit-2509-t2i.json

LoRA 切り替え

4steps LoRA について、公式ワークフローではモデルの有効化だけではなく steps, cfg の値を調整する必要がありました。

LoRA steps の推奨値 cfg の推奨値
なし 20 2.5
あり 4 1.0

LoRA を使っていて品質が足りないと感じたときに、値の変更を手作業で毎回やるのは面倒です。そこで group node を作成して、 4steps LoRA の有効化・無効化に合わせて自動で調整するようにしました。

さきほどのワークフローで ctrl + B を押して 4steps LoRA を無効化し実行するとこのようになります。

(この例だと差が分かりづらいですね… いくつか試していますが、基本的には 4steps LoRA は常時オンでよいかなと考えています)

その他の変更点

上記2つの機能追加に加えて、いくつか小さな変更を加えています。

  • 入力画像から VAE Encode ノードで Latent を作るのが公式ワークフローですが、 T2I の設定で Latent がないとエラーになることと、 Edit を Empty Latent と比較して性能差が見られなかったことから、 Empty Latent をデフォルトとしています
    • 一応ノードのつなぎ方を変えれば変更可能にはなっている
  • 2枚目、3枚目のリサイズが公式ワークフローには入っていませんでしたが、1枚目と同様に計算負荷の問題で必要なのでは?と思ったので足しました
    • VAE Encode に使うためにサイズを小さくする必要がある、みたいな説明書きがあったので、もしかしたら不要かも

日本語テキスト生成

次に、画像を経由したもっとも単純なワークフローとして、テキスト生成を試してみます。

環境構築

テキストを画像変換する方法はいくつかありますが、今回は comfyui-kjnodes の Create Text Mask を使用します(導入方法は省略)。

https://github.com/kijai/ComfyUI-KJNodes

また、フォントとして M PLUS 1p を使用します。フォントファイルを custom_nodes/comfyui-kjnodes/fonts/ に配置することで、ノードで使用できるようになります。

https://fonts.google.com/specimen/M+PLUS+1p

ワークフロー作成

入力画像を入れるノードを下記のように変更します。 invert=true にして白地に黒の文字とし、4文字がちょうど画面に収まるように配置します。

文字の場所を指定する必要がなくなったので、プロンプトは最初と異なり、次のようにします。

画像に書かれたテキストを習字風のフォントに変換してください。1画ごとの配置を忠実になぞり、抜け漏れがないようにしてください。左下に、赤い四角形の「通义千问」という印をつけてください

https://github.com/kota-iizuka/comfyui-workflows/blob/main/qwen-image-edit-2509-jp-edit.json

結果

さきほどの T2I による結果と、今回の Edit の結果を比べてみます。見た目で達筆なのは T2I のほうですが、 Edit では1画ずつ忠実に書けていることがわかります。特に「術」の中央上の点が T2I (や Edit の一部フォントを使った場合)では欠けやすく、入力画像を与えた効果が出ています。

T2I Edit

ちなみに Nano Banana に同じプロンプトを渡した場合、 T2I は(1文字ずつ場所を指定したにもかかわらず)かなり忠実度が低く、 Edit は数回試しましたが 対応できる機能がないため、すみませんがお手伝いできません。 などとコメントされ生成できませんでした。

T2I Edit
(生成できず)

日本語テキスト埋め込み

最後に、日本語のテキストを正確に画像空間に埋め込むワークフローを作ります。入力画像は最初に生成したものとして、背景の抽象画を日本語テキストに置き換えてみます。

ポイントとして、埋め込む対象のテキストを背景の抽象画の位置におおまかに位置合わせすることで、描画すべき場所を指示します。

1枚目の画像として部屋の画像を、2枚目に埋め込みたいテキストを置いて、プロンプトで次のように指示します。

1枚目の部屋に飾られている絵について、額縁は残して、その内部を2枚目の画像で表す文字に置き換えてください。フォントは入力されたゴシック体ではなく、習字のような行書体に変更してください。最後に、赤い四角のハンコを絵の左下端に加えてください

https://github.com/kota-iizuka/comfyui-workflows/blob/main/qwen-image-edit-2509-jp-room.json

結果として次のような画像が得られました。書体のきれいさはかなり損なわれてしまっていて、入力したフォントに近いですが、空間に埋め込むという処理と日本語としての文字の正確さはうまく保てているのではないかと思います。

まとめ

  • 日本語を正確に出力するためのワークフローを作った
    • テキストを画像に変換する処理を前段に入れるだけ
    • 入力画像の一部にテキストを描画するという用途では、その場所にテキストを移動しておくと成功率が上がる
  • もともと中国語に強いモデルであり、 Nano Banana と比べて日本語の表現力は高いように感じる
    • ただし一発でなんでも思い通りに生成できるというものでは(当然)なく、プロンプトやワークフローに工夫が必要

おまけ

日本語テキスト埋め込みを試している途中で、偶然次のような画像が得られました。与えたプロンプトとは異なりますが、抽象画の上に文字がレタリングされていて、かなり芸術的な出力だと感じました。

参考

Discussion