ChatGPTでNovelDiffusionを操る話

# はじめに

この記事は、[あくあたん工房 Advent Calendar 2022](https://adventar.org/calendars/7606)の11日目の記事です。


もうすぐ一年が終わりますが、今年を振り返ってみると実用的な機械学習モデルがいろんな分野で出現した年だったなぁ......という感じがします.
画像生成モデルでいえばStableDiffusionを筆頭NovelDiffusionやMidjourneyなど、**庶民でも使える画像生成モデル**が目白押しです。
会話モデルでも、ChatGPTが発表され、連日話題になっています。

ところで画像生成モデルで望み通りの絵を描くには、**呪文を詠唱する能力**が必要です。
人間の絵師に伝えるように自然言語で希望を伝えても、画像生成モデルはいい感じのイラストを返してくれません。
NovelDiffusion界隈では、「元素法典」なるシチュエーションや要素別のワード集まで作成されており、いかに意図した絵をAIに書かせるかというのは目下の課題になっています。

私自身も自分の妄想を絵に落とし込みたくてNovelDiffusionを使っていますが、やはり画像生成モデルに与えるワード選定に苦しめられていました。
(もっとも、その探求が楽しい分野でもあるのですが......）
そんなある日、魔が差した私はこう考えました。
**「ChatGPTに好みのシチュエーションを伝えて、NovelDiffusionへの入力ワードを生成してもらえばいいんじゃね？」**

もっともChatGPTのデータセットは2021年までの情報しか含んでいません。
対してNovelDiffusionやStableDiffusionが公開されたのは2022年の後半だったはずです。
つまり、ChatGPTには直接的にStableDiffusionやNovelDiffusionに関する知識は入っていないのです。
ただ、特にニッチな分野の英語のキーワード選定には我々日本人よりも知識があるでしょうし、ある程度の事であればChatGPTとの会話の中で修正していけるのではないかとも考えたので、とりあえずやってみることにしました

実際にやってみると効果は抜群で、ものの30分程度でかなり希望通りの絵を生成することに成功しました。
しかし、ここでその全貌をそのままお伝えするのは私の癖を世間様に公開することに他なりません。

それだけは勘弁願いたいので、アドベントカレンダーを書くにあたり良さそうなお題をサークルの後輩に考えてもらいました。(ありがとう)
というわけで本日のイラストのテーマは

**「橋の欄干でマフラーをまきながらコーヒーをすする女性」**

です。

# 用意するもの

用意するものは次の二つです

- 有料プランに加入したNovelAIのアカウント
  - プランはどれでも大丈夫です。最低で$10程度です。
- OpenAIのアカウント
  - ChatGPTを使うのに必要です。



# 「橋の欄干でマフラーをまきながらコーヒーをすする女性」を生成する


とりあえず対照実験としてGoogle翻訳で......

```
A woman sipping coffee while wearing a muffler on a bridge railing
```

![Bridge, railing, scarf, coffee, woman, river bank s-2792365904.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172855/75c86343-b56a-8a8c-eb7d-daa97a5b256b.png)

はい......ChatGPTを使うまでもなく希望通りの絵が生成されてしまいました。
NovelDiffusion君もとても優秀な子なので、よくあるシチュエーションであれば難なく生成できてしまいます。
これでは今回のネタになりませんので、あんまりなさそうなシチュエーションにお題を改変しましょう。

# 「橋の欄干に座ってマフラーをまきながらハイボールを飲む女性」を生成する

どんなシチュエーションやねん......
とりあえずGoogle翻訳で......

```
A woman drinking a highball while wearing a muffler on the railing of a bridge
```

![A woman drinking a highball while wearing a muffler on the railing of a bridge s-1403429342.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172855/d7d5a246-66da-3197-29f4-da071492e2ec.png)


何度か生成してみましたが、上のような涼しげな格好をした女性しか生成されません。
さて、ChatGPT君の出番のようですね。

## 手順1. 回答形式ガチャを回す

ChatGPTの特徴として、これまでの会話の文脈を考慮した返答ができるというものがあります。
そのため、始めにChatGPTからの回答の形式を指定しておくと後々やりやすくなります。

```
「橋の欄干に座ってマフラーをまきながらハイボールを飲む女性」のイラストをNovelDiffusionで描写するための英語のキーワードを教えてください
```
NovelDiffusionは日本語の入力も受け付けはしますが、英語指定の方が格段に精度が上がりますので英語のキーワードで返すように指定しましょう。
また、この質問への返答として、以下のような長文で返される場合があります。
このような長文で回答し始めた場合はそれ以降のやり取りも冗長になりますので、ChatGPTのスレッドをリセットしてやり直しましょう。

```ChatGPT
To describe the illustration of a woman drinking a highball while wearing a scarf around her neck on a bridge railing, some possible keywords in English are:

bridge
railing
scarf
highball
drink
woman
Here is an example sentence:

"The woman sat on the bridge railing, sipping her highball and draping a scarf around her neck to keep warm."
```

何度か質問を繰り返していると次のような形式で回答するタイミングがあります。

```ChatGPT
bridge, lamppost, scarf, highball glass, woman, drinking, relaxing, enjoying the view.
```

これこそが我々が待ち望んでいた形式です。
早速画像生成を始めていきましょう!!

## 手順2. 画像を生成する

ChatGPTの回答をNovelDiffusionにそのまま渡してあげましょう。


![g1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172855/8702946f-0fae-faa7-6fea-f6a60fd55f64.png)

いきなりそれっぽい感じになりました。

## 手順3. ひたすら修正点を伝える

しかし、雰囲気は出ていますがまだまだ微調整が必要そうです。
何度生成しても、飲んでいるものからハイボール感が出ていません。

```
生成されたイラストではグラスからストローで飲んでいます。ハイボールをストローとグラスではなく、ジョッキで飲んでいる絵になるように修正してください
```

```
bridge, lamppost, scarf, highball glass, woman, drinking, relaxing, enjoying the view, using a mug instead of a glass.
```

![g2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172855/a87abd4f-c9a6-ff3e-7240-2f2799561c96.png)


もう一息！！

```
テーブルに座って飲んでいる絵が生成されました。![bridge, lamppost, scarf, highball glass, woman, drinking, relaxing, enjoying the s-638492218 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172855/e5634880-4a86-f025-c840-c2849d6a195f.png)
欄干にもたれかかっている絵になるように修正してください
```

```
bridge, lamppost, scarf, highball glass, woman, drinking, relaxing, enjoying the view, leaning against the lamppost.
```

![g3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172855/7a5da06d-357f-ca68-c1f7-1fa5e4185fb5.png)
![g4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172855/6b2126d8-acac-3d78-4c5a-af2ba7ce85a8.png)


## 手順4 たまにキーワードを整理してやる
ここで、いきなり絵のクオリティが下がりました。

NovelDiffusion君はワードが多すぎると迷走する傾向にあるのでそれを考慮してあげましょう

```
キーワードの中から優先度の低いものをいくつか取り除いてください
```

```
bridge, lamppost, scarf, highball glass, woman, drinking, leaning against the lamppost.
```

![g5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172855/ed45fb93-b949-6450-65e7-734db36866bf.png)

クオリティが復活しましたね
完成です。お疲れさまでした。

## 最後に

今回の例ではChatGPTをキーワード生成に使うメリットを伝えきれた気がしていませんが、ChatGPTとNovelDiffusionの組み合わせはニッチな分野になればなるほどとても効果が出てきます。
私が個人的に試した例では、界隈のAI絵描きの方が2週間以上生成に苦しんでいらっしゃったテーマをChatGPTで生成させてみたのですが、ものの1時間で安定して生成できるようになったというケースもありました。

仮に2021年以降のNovelDiffusion等に関する情報を含んだデータセットのChatGPTモデルが出たら、さらにワード生成の精度が上がるのでは？？と期待が膨らみます。
皆さんもよきNovelDiffusionライフをお過ごしください!!