見出し画像

【EVO-X2】LLM x StableDiffusionで日本語画像生成 ~ローカルLLMでプロンプト生成~

こんにちはRcatです。
前回は久しぶりにStable Diffusionで画像を生成しました。
今回は、下記で作ったBotを少し改造して、日本語から画像を生成しようと思います。

前回の記事はこちら



はじめに

利用規約

情報や作品の活用時は事前に利用規約をご確認ください。

コメントについて

利用規約のガイドラインを確認の上コメントしてください。
則っていないコメントは削除します。


概要

日本語で画像生成とは?

そもそも、今どきの商用AI(Gemini)なんかは、言えば画像作ってくれますよね。
しかし、同じことを個人でやろうと思うと少し大変です。

前提として指示は英語

Stable Diffusionで画像生成に用いられるプロンプト(いわゆる呪文)は絵を構成する要素の英単語の塊です。
こういうの見たことありませんか?

masterpiece,best quality, girl,wavy hair,school uniform

これをそのままかけると制服の女の子のイラストが生成されます。
さすがにこの程度なら英語が苦手な私でも書けますが、様々な要素を足していくと一苦労です。

さて、ここでじゃあどうする?と考えてすぐ浮かんでくるのは…そうLLMです。
生成AIに翻訳してもらえばいいんですね。
ついでに、入力した文章を上記の形に整形までできれば完璧です。

プロンプトを自動生成する

というわけで、まず最初に画像生成のためのプロンプトを、自動的に生成していきましょう。

使用するAI環境

自作のAIホストサーバーを使います。
データはこちらで配布しているので、気になる方はどうぞ

また、推論に使用するモデルはこちらの検証結果よりQwen3-30B-A3Bを使うこととします。

とりあえず結果から

まずは短い文章で試していきます。
自分ではパッと翻訳できない次の文章を使います。

秋葉原で金髪ツインテールのメイドさんが手を振っている

最近毎日通っているアキバ系のイラストを描いてもらおうと思います

結果がこちら

黒い部分はこの先で紹介する部分なので今だけ隠させてください。
一番下の部分が生成されたブロンプトですね。こういう感じの文章で出ました。
とりあえず1度これでかけてみましょうか。

full body,maid,golden_hair,twin_tails, waving_hand,Akihabara

イラストの質的にもちょっと微妙だな。そこら辺は設定だと思いますが。
しかし、日本語で入力した金髪ツインテールのメイドさんが手を振っているという部分はきちんと描けています。
背景は秋葉原と言いましたが、それは都市部であるということは理解できているみたいですね。

プロンプトエンジニアリング

では、早速画像生成に適したプロンプトを生成させるために指示を考えていきます。

Step1 そのまま入力する

とりあえず何も考えずに入力するとどうなるのか見てみます。
最低限英語に翻訳しつつ、カンマ区切りのリストにしなければならないので、そういった感じの入力とします。

以下の文章を英語に翻訳して、各単語(要素)ごとにカンマ区切りのリストとして出力して


本日は快晴で虹がかかっています。
秋葉原でメイドさんがステージの上で手を振っています。
彼女は金髪ツインテールです。

ちなみにあえてめちゃくちゃな順番かつ文章にしています。
知ってる方は知ってると思いますが、順番も大事なんですよね。また、"本日は"は生成に関係ないので要らない。
そういった部分を自動で最適化するのが目標となります。

応答がこちら
何と言うか、英語に翻訳したものとりあえず分の区切りでカンマ区切りにしましたって感じですね。
これはダメでしょう…。

Today, it is sunny, and a rainbow is hanging in the sky.
At Akihabara, a maid is waving her hands on a stage.
She has blonde twin tails.

とりあえず生成した見た感じがこちら。
まぁ悪くはないですが、後ろ向きなんですね。

Step2 詳細な指示をする

次はもっとまともな出力になるようにどういう風にすればいいのか、ちゃんと指示します。
具体的には最終的な出力に含めるものは何なのか、どういう風に変換するのかという例を含めた指示を行います。

というわけで指示をこのような感じにしてみました。

まず最初にやることと目的をはっきりさせます
その後、整形する方法をきちんと説明しています。
これでだいぶStable Diffusionのプロンプトっぽくなりました

応答がこちら
先ほどよりはだいぶマシですが、なんか残ってますね。注意はしたんですが、ちょっと難しいでしょうか?

快晴,虹,かかる,秋葉原,メイド,ステージ,手を振る,金髪,ツインテール

Sunny, rainbow, appearing, Akihabara, maid, stage, waving hand, blonde, twin tails

Step3 詳細なプロントを書けるようにする

高品質なイラストを書くには指示する順番が重要というのを聞いたことがあります。
というわけで少し調べて大体以下の順に並ぶように指示を変更します。
ビュー=>メイン=>詳細=>色合い=>光源
各順番と、その意味や単語例などを含ませています。

結果がこちら
だいぶいい感じに要素が整列してきました!

full body, golden hair, twin tails, maid, waving hands, stage, sunny day, rainbow, clear sky

優先順位がはっきりしてきたのかこっち向きました。

Step4出力形式を整える

最後に出力方法を指定します。
これがないとプログラムで使えません

ポイントとしては、JSON形式を指定したうえ、内容のスキーマを書き込んだことです。
こうすることでほぼ100%この形に則りだしてくれます。

{
  "reason": "文章を構成要素に分解し、ビュー/ショット、主題、詳細、カラー、照明/影の順序に従って整理。『虹がかかっている』は『虹』と『快晴』に分離。『秋葉原』を舞台として優先し、『ステージ』は削除。『金髪ツインテール』は『金髪』と『ツインテール』に分離。照明やカラーテーマに明示的な指示がなかったため省略。",
  "title": "虹とメイドの秋葉原",
  "prompt": "full shot,clear sky,rainbow,maid,Akihabara,posing,blonde,hair,twin tails,smile,looking at viewer,lighting"
}

また、出力させる順番も実は大事で、先にどう考えてこの結果に至ったのかの説明を出させます。

最近よくある思考過程のあるモデルと同じですね。先に考えを出させておくことで、最終的な出力を安定させる効果があります。

絵は何か微妙だけど当たり外れが大きい世界なので・・・

BOTに組み込む

BOTの変更

一年前に作ったものなのでなかなか壮絶な中身ですね!
とりあえず画像のアップスケーリングの仕組みがそのまま流用できそうなので、LLM用のチャンネルに発言したら、APIでLLMを呼んでJsonを得ます。
それをプロンプトに置き換えてキューに追加で行けるはず。

実行結果

というわけでさっそくBOTを起動してDiscord経由で生成してみました。
とうとう日本語入力でも任意のイラストが生成できるようになりました。
この改造版は末尾で配布案内をしています。


まとめ

今回はLLM x Stable Diffusionで描きたい絵の情景から自動でプロンプトを生成して画像を生成までをやってみました。
これがすべてローカルで動いているということに技術の進歩を感じます。
まぁやってみただけなので、だから?という感じではありますが、いろいろできるようにしておいて損はないでしょう。
例えば、LLMのパラメータはランダム性優先にしてあるので、同じ指示でも入力文章が複雑だとかなりばらつきます。それを逆手に取れば、一つの文章で複数パターンのプロンプトを全自動で生成しているとも言えます。

それではまたお会いしましょう。

配布情報

配布情報

今回の実施内容はこちらで配布しているファイルに追加しました。

追加の設定

本機能を利用するには次の設定や導入が必要です。

ローカルLLMサーバー
自分で改造できる方はいらないですが、まんま使う方はこれが必要
※当たり前ですがどこをどう改造すれば要らないというのは案内していません。

上記サーバーを起動しつつ、"rcatllamaclient"をbotと同じフォルダにコピーしておいて下さい。
※このファイルがないとエラーになります。


リンク集

ミニPCにLinuxをインストール


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

Rcat999 情報が役に立ったと思えば、僅かでも投げ銭していただけるとありがたいです。