StableDiffusion でイラスト生成のクオリティを上げるプロンプト

# この記事は？
[StableDiffusion](https://huggingface.co/spaces/stabilityai/stable-diffusion) を使ってイラストを生成する際のクオリティを上げるためのプロンプトを検証しました。結果的にチェリーピックすれば割と見れるレベルのイラストが作れました。

![スクリーンショット 2022-08-28 14.02.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238125/aa7b597d-7e69-e15f-4588-be0aa7bc1614.png)

# 動作環境
動作環境は以下の記事と同じです。

https://qiita.com/Simossyi/items/4ed43b95cf4a212e608c

# プロンプト検証
[StableDiffusion のいい感じに生成できているサンプル](https://lexica.art/)を見るに、生成クオリティを上げるベストプラクティスは 「生成したいコンテンツの概略」＋「生成クオリティを上げるプロンプト連打」であることが推察されます。

本記事では生成クオリティを上げるプロンプト (おまじない) を付け加えていくことでどのようにクオリティが上がっていくかを検証します。

## 生成条件
- モデル半精度＋推論 mixed precision (上記記事参照)
- `width = 512`
- `height = 512`
- `guidance_scale = 7`
- `num_inference_steps = 50`
- `seed = 0`

## ベースライン
「生成したいコンテンツの概略」のみで生成した初音ミクさんをベースラインにします。以下のようなプロンプトを利用しました。

`Hatsune Miku performing live on stage`
![Hatsune_Miku_performing_live_on_stage_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238125/7f0495ec-965d-7593-e5c9-702aca5ef741.png)

ベースラインでの主要な課題点は以下のようなものになるかと思います。
- 生成が生っぽい (アニメ絵っぽくない)
    - おそらく `performing live on stage` が肉のアイドルを連想させるためイメージが混ざる
- パーツ (顔・手) が崩れている
- (なんかいっぱいいる[^not-treat])

これは初音ミクに限らずアニメキャラっぽいものを生成しようとすると高頻度で発生する問題な気がします。それぞれの課題をベースラインプロンプトにおまじないを付与することで改善していきます。

[^not-treat]: 複数人いても特に問題はないので今回は改善しません。

## 打ち手のリストアップ
イラストとしてのクオリティを上げるためには「リアルのオブジェクトに対しては用いられない、創作物を修飾するために使われる語」をプロンプトに利用するとそれっぽくなると考えられます。例えば、以下のようなワードが Lexica ではよく使われている感じがします。これらのおまじないは今回のケースに限らずイラストの質改善には全般的に効くと思います。

- イラストサイトの名称 (`trending on` がつくこともある)
    - `artstation`
    - `pixiv`
- イラストの種類 (おまじないとして単発で使う場合と、`An illustration of ~` のように文頭で使う場合がある)
    - `concept art`
    - `digital painting`
    - `illustration`
- イラストのジャンル
    - 作品名
        - `ghost-in-the-shell`
        - `hearthstone`
    - 作者名 (`art by` がつくこともある)
        - `Alphonse Mucha`
        - `Makoto Shinkai`
        - `Studio Ghibli`
- イラストの特徴
    - `cel shading/celshading`
    - `cyberpunk fashion`
    - `insanely/heighly detailed`
    - `intricate`
    - `masterpiece`
    - `matte`
    - `sharp focus`
    - `soft lighting`
    - `4K/8K`

種類が多くて全てを探索することは不可能なので、上記課題に関連してそうなものをまとめてブチ込んで結果を比較します。実際にイラストを錬成するときはそれっぽいのを足したり抜いたりして調整するといった感じになるかと思います。

## 改善結果
### イラストっぽくする
とりあえず細部は崩れていてもイラストっぽくすることを目的にします。上記でリストアップしたおまじないのうち以下のものをチョイスしました。

- `illustration`
- `concept art`
- `digital painting`
- `artstation`
- `Makoto Shinkai`
- `masterpiece`

結果として以下のプロンプトと生成画像が出来ました。
`An illustration of Hatsune Miku performing live on stage, trending on artstation, concept art, art by Makoto Shinkai, masterpiece, digital painting`
![An_illustration_of_Hatsune_Miku_performing_live_on_stage__trending_on_artstation__concept_art__art_by_Makoto_Shinkai__masterpiece__digital_painting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238125/7c8ba871-c3ac-978b-1ece-873b070c5c5d.png)

絵のクオリティは置いておいてとりあえずイラストにすることには成功しました。

### 細部のクオリティを上げる
上記でリストアップしたおまじないのうち、以下のものをチョイスしました。

- `cel shading`
- `insanely detailed`
- `intricate`
- `matte`
- `sharp focus`
- `soft lighting`

結果として以下のプロンプトと生成画像が出来ました。
`An illustration of Hatsune Miku performing live on stage, trending on artstation, concept art, art by Makoto Shinkai, masterpiece, digital painting, cel shading, insanely detailed, intricate, matte, sharp focus, soft lighting`
![An_illustration_of_Hatsune_Miku_performing_live_on_stage__trending_on_artstation__concept_art__art_by_Makoto_Shinkai__masterpiece__digital_painting__cel_shading__insanely_detailed__intricate__matte__sharp_focus__soft_lighting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238125/fa7f562e-25e6-17b8-5aeb-9335160bcd46.png)

まあまあ崩壊していますが1行2列のイラストは結構好きです。

# まとめ
チェリーピックすれば1枚くらいは好きなイラストが見つかるくらいまでは良くなった。
![スクリーンショット 2022-08-28 14.02.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238125/aa7b597d-7e69-e15f-4588-be0aa7bc1614.png)


# その他メモ
- **今回のように属性を足していくだけなら seed とコンテンツ概要で生成コンテンツの構図はほぼ決定できるので、seed と概要プロンプトで構図ガチャを引く→気に入った構図が出たら構図に影響の少ないクオリティを改善する呪文連打が生成の方針としてはよさそう**
    - 追加するプロンプトに固有の構造がある場合は構図が変わることがある気がします。例えば `Alphonse Mucha` は引きの画像で正面向いてることが多く symmetry っぽい構図になりやすいとか。逆に、そういう構図への影響が大きそうなものは先に入れ込んで構図を fix すると思った通りの画像を生成しやすそう
- おまじないの順番を変えると生成結果が微妙に変わるので、細部を求めていくなら調整の余地あり
- Tinder みたいなインターフェースで good/bad を選り分けていくといい感じの画像が生成できる、とかできそうですね (おまじないのプリセットをベイズ探索する的な)