Supershipの名畑です。創刊50周年記念 花とゆめ展は、歴史を感じながら、自分の思い出を重ねられる、素晴らしい展示でした。本当に名作揃い。
はじめに
2023年7月に「Stable Diffusionの最新モデル「SDXL 1.0」と過去モデルの生成画像をひたすら比較して進化を実感してみた」という記事を書きました。Stability AIによる画像生成AIモデルであるStable Diffusionの各バージョンでの出力結果を比較してみるという内容でした。
あれから1年経ちましたので、同じように、現時点での最新モデルと過去のモデルを比較しようというのが今回の主旨となります。2022年〜2024年までを比較して進化を実感しようというものです。
最新の画像生成手段としてはStable Image Ultraを用います。
Our most advanced text to image generation service, Stable Image Ultra creates the highest quality images with unprecedented prompt understanding. Ultra excels in typography, complex compositions, dynamic lighting, vibrant hues, and overall cohesion and structure of an art piece. Made from the most advanced models, including Stable Diffusion 3, Ultra offers the best of the Stable Diffusion ecosystem.
日本語訳すると以下です。
私たちの最も高度なテキストから画像生成サービスであるStable Image Ultraは、これまでにないプロンプトの理解力で最高品質の画像を作成します。Ultraはタイポグラフィ、複雑な構図、動的な照明、鮮やかな色合い、そして芸術作品全体の一貫性と構造において卓越しています。Stable Diffusion 3を含む最先端のモデルを使用して作られており、UltraはStable Diffusionエコシステムの最高を提供します。
Ultra自体はモデル名ではなくサービス名であり、Stable Diffusion 3を含む最先端モデルを使用して最高品質な画像を出力してくれます。
画像の生成はPythonでAPIを呼び出すことで行なっています。
対象モデル / サービス
-
Stable Image Ultra
- 略称 Ultra / 2024年6月7日リリース
-
Stable Diffusion XL v1.0
- 略称 SDXL 1.0 / 2023年7月27日リリース
-
Stable Diffusion XL Beta v2.2.2
- 略称 SDXL Beta / 2023年4月13日リリース
-
Stable Diffusion v2.1
- 略称 SD 2.1 / 2022年12月7日リリース
今回はこの4つを比較していきます。
Ultraが最新で、そこから遡っていくとSDXL 1.0、SDXL Beta、SD 2.1の順番です。
モデルが配布されているものについても学習や調整といった類のことは一切せず、Web APIのレスポンスをそのまま比べます。
API Key
Developer PlatformでAPI Keyを発行する必要があります。価格はPricingをご参照ください。
ハードコーディングを避けるため、環境変数にでも保存しておきましょう。今回はSTABILITY_API_KEYという名称で保存されていると仮定して進めます。
export STABILITY_API_KEY =ここに取得したAPI keyを書く
コード
Ultraの画像生成に用いたPythonのコードは以下です。
import os
import requests
import time
api_host = os.getenv('API_HOST', 'https://api.stability.ai')
api_key = os.getenv("STABILITY_API_KEY")
prompt = "ここにプロンプトを記述する"
# API Keyの取得確認
if api_key is None:
raise Exception("Missing Stability API key.")
# API呼び出し
response = requests.post(
f"{api_host}/v2beta/stable-image/generate/ultra",
headers={
"Accept": "image/*",
"Authorization": f"Bearer {api_key}"
},
files={"none": ''},
data={
"prompt": prompt,
"output_format": "png",
},
)
# 画像保存。ファイル名にはタイムスタンプを含めています
if response.status_code == 200:
with open(f"./{int(time.time())}.png", "wb") as file:
file.write(response.content)
else:
raise Exception(str(response.json()))
過去のAPIではstyle_presetというパラメータでanimeやphotographic等のスタイル指定が可能だったのですが、Ultraにはそれがありません。そのため、プロンプトに直接スタイルを含める形を今回はとります。
以下はスタイルの指定例です。
# 過去の指定
json={
"style_preset": "anime",
"text_prompts": [
{
"text": "Japanese moe heroine"
}
],
}
# Ultraでの指定
data={
"prompt": "anime style, sweets that appear in popular Japanese anime",
}
画像解像度
画像は512x512にリサイズした上で記事に掲載しています。容量を考慮してのものです。
結果
ここからが結果です。
8つのプロンプトで画像を生成しました。
SD 2.1、SDXL Beta、SDXL 1.0の3モデルにつきましては、各3枚ずつの画像を表にまとめています。先述の過去記事で生成した画像を流用しています。
その次にUltraで生成した画像3枚を縦に並べています。
日本の萌えヒロイン
「日本の萌えヒロイン(Japanese moe heroine)」をanime指定で生成しました。
prompt = "anime style, Japanese moe heroine"
過去モデル 生成結果(旧 → 新)
まずは過去のモデルでの結果です。
SD 2.1(2022.12) | SDXL Beta(2023.4) | SDXL 1.0(2023.7) |
---|---|---|
パッと見ただけでもかなりの変化、進化が伝わるかと思います。
最新 Ultra 生成結果
次に最新のUltraでの結果です。
プロンプトへの忠実度が上がっているというか、余計なものが描かれなくなった感があります。これは以降に結果を紹介する他のプロンプトでも共通の印象です。
それと、言語化は難しいですが、絵としての描き込みなのか構図なのか、あるいはただの私の好みの問題かもしれませんが、高品質になったと感じます。
日本の人気アニメに登場するスイーツ
「日本の人気アニメに登場するスイーツ(Sweets that appear in popular Japanese anime)」です。これもanime指定です。
prompt = "anime style, sweets that appear in popular Japanese anime"
過去モデル 生成結果(旧 → 新)
SD 2.1(2022.12) | SDXL Beta(2023.4) | SDXL 1.0(2023.7) |
---|---|---|
最新 Ultra 生成結果
スイーツだけを描いてくれています。
また、過去の生成物と比べると、実際にありそうです。
修学旅行中の男子高校生
「修学旅行中の男子高校生(Male high school student on a school trip)」です。こちらもanime指定となります。
prompt = "anime style, male high school student on a school trip"
過去モデル 生成結果(旧 → 新)
SD 2.1(2022.12) | SDXL Beta(2023.4) | SDXL 1.0(2023.7) |
---|---|---|
最新 Ultra 生成結果
構図の違いによるものも大きいでしょうが、体型をはじめとして、不自然が減ったと思います。
前回の記事でも書きましたが、修学旅行中かどうかという判断はなかなか難しい。
ギターを演奏するお姫様
次は「ギターを演奏するお姫様(A princess playing guitar)」です。
ここから2プロンプトはfantasy-artを指定しています。
prompt = "fantasy-art style, a princess playing guitar"
過去モデル 生成結果(旧 → 新)
SD 2.1(2022.12) | SDXL Beta(2023.4) | SDXL 1.0(2023.7) |
---|---|---|
最新 Ultra 生成結果
これも言語化は難しいですが、絵としての描き込み等の差なのか、高品質と感じられます。
ノートパソコン上の可愛い妖精
「ノートパソコン上の可愛い妖精(A cute fairy on top of a white laptop)」です。ここからはphotographicを指定します。
prompt = "photographic style, a cute fairy on top of a white laptop"
過去モデル 生成結果(旧 → 新)
SD 2.1(2022.12) | SDXL Beta(2023.4) | SDXL 1.0(2023.7) |
---|---|---|
最新 Ultra 生成結果
妖精がより前面に出されたからか、かなり印象が変わりましたね。
手足の位置など、他のプロンプトに比べて違和感が目立ちます。
黒いボブヘアで可愛い28歳の日本人女性
「黒いボブヘアで可愛い28歳の日本人女性(28-year-old Japanese pretty woman with black bobbed hair)」です。
prompt = "photographic style, 28-year-old Japanese pretty woman with black bobbed hair"
過去モデル 生成結果(旧 → 新)
SD 2.1(2022.12) | SDXL Beta(2023.4) | SDXL 1.0(2023.7) |
---|---|---|
最新 Ultra 生成結果
より自然になった、でしょうか。
顔からAIっぽさが減って日本人っぽさが増した気がします。
気のせいだろうか。
見すぎてよくわからなくなってきました。
1980年代の香港の繁華街
「1980年代の香港の繁華街(Hong Kong downtown in the 1980s)」です。
prompt = "photographic style, Hong Kong downtown in the 1980s"
過去モデル 生成結果(旧 → 新)
SD 2.1(2022.12) | SDXL Beta(2023.4) | SDXL 1.0(2023.7) |
---|---|---|
最新 Ultra 生成結果
画像として自然になったように思います。
2020年の新宿歌舞伎町
最後です。「2020年の新宿歌舞伎町(Shinjuku Kabukicho in 2020)」です。
prompt = "photographic style, Shinjuku Kabukicho in 2020"
過去モデル 生成結果(旧 → 新)
SD 2.1(2022.12) | SDXL Beta(2023.4) | SDXL 1.0(2023.7) |
---|---|---|
最新 Ultra 生成結果
文字が正しくないという問題は以前として残っていますが、より写真っぽさというか、現実味は増した感があります。
最後に
説明するのはなかなか難しいですが
- プロンプトにない要素の描画が減った
- AIっぽさが減った
- 描き込みが増えた
というのが今回の印象です。
定性的な話なので、他の方はまったく違う印象を持つかもしれません。
なんにせよ、こうして並べてみると、かなりの進化を実感はします。
1年半でここまで変わるとは驚きだというのは本音です。
宣伝
SupershipのQiita Organizationを合わせてご覧いただけますと嬉しいです。他のメンバーの記事も多数あります。
Supershipではプロダクト開発やサービス開発に関わる方を絶賛募集しております。
興味がある方はSupership株式会社 採用サイトよりご確認ください。