nikkie-ftnextの日記

イベントレポートや読書メモを発信

Gemini Proでプロンプトを作り、Stable Diffusionでお絵描きする(つまり、ジェミ×デフ)

はじめに

エミリーちゃん、おめでとう。nikkieです。
明日1/8がお誕生日なのでイブから前祝いです!1

12月にGoogleから発表されたGemini2
触ってみる時間が取れたので、気になっていたnotebookに沿って(嘘です。かなり暴走して)触りました。

目次

notebook: Use Gemini to prompt Stable Diffusion

以下のツイートを見かけて「動かしてみたいな〜」と思っていました

notebookはこちら
https://colab.research.google.com/github/googlecolab/colabtools/blob/main/notebooks/Gemini_and_Stable_Diffusion.ipynb

このnotebookでやっていることなのですが、

  • コンピュータをタイプしている子猫の絵を描きたい
    • Stable Diffusionでお絵描き
  • Stable DiffusionのプロンプトをGemini Proで作る
    • ここはGPT-4など他のLLMに交換可能だと思います
  • Gemini Proで作ったプロンプトに基づいてStable Diffusionがお絵描き

つまり、2つのAIで合作させるという理解です。

Gemini Proの出力がStable Diffusionに入力できればよいと理解したので、(小さいものが好きな私は)環境を分けて動かしました

  • Gemini Pro: ローカル環境
    • Web API呼び出しだけで、GPUは不要
  • Stable Diffusion: Google Colab
    • 画像生成にGPUを使いたい!

2つの間を埋めるアダプタが私、nikkieです🙋‍♂️

Gemini Proでプロンプト生成

ローカル環境構築

インストールされたライブラリのバージョン

cachetools==5.3.2
certifi==2023.11.17
charset-normalizer==3.3.2
google-ai-generativelanguage==0.4.0
google-api-core==2.15.0
google-auth==2.26.1
google-generativeai==0.3.2
googleapis-common-protos==1.62.0
grpcio==1.60.0
grpcio-status==1.60.0
idna==3.6
proto-plus==1.23.0
protobuf==4.25.1
pyasn1==0.5.1
pyasn1-modules==0.3.0
requests==2.31.0
rsa==4.9
tqdm==4.66.1
typing_extensions==4.9.0
urllib3==2.1.0

Gemini APIの概要を掴む

PythonのQuickstartがありました。

同内容がnpakaさんにより日本語でカバーされていそうです。

以下でテキスト生成できると完全理解しました。

import google.generativeai as genai

genai.configure()

model = genai.GenerativeModel("gemini-pro")
response = model.generate_content("こんにちは")
# response.text に生成されたテキスト

GeminiのAPIキーは、(プログラム中で指定しない場合)環境変数GOOGLE_API_KEYを見ます3

Stable Diffusionのプロンプトを作るスクリプト

「Use Gemini to prompt Stable Diffusion」notebookのプロンプトを日本語にした上で、何回かプロンプトエンジニアリングを試しました(まだよくできると思います)。

「地球に飛来した隕石を野球バットで打ち返そうとする猫を描いて」に対して生成された1つが

A highly detailed illustration of a cartoon cat standing on two legs with a determined expression, swinging a baseball bat at a large flaming asteroid hurtling towards Earth. The muscular cat is wearing a red baseball cap, a blue baseball shirt with white sleeves, and black baseball pants. The sky is dark and stormy with bolts of lightning illuminating the scene.

このプロンプトは、私には絶対書けないですね〜

GPT-4でいうtemperatureに当たるものはなにかはまだ分かっていなくて、現状スクリプトを走らせるたびに生成されるプロンプトは変わります。

Stable Diffusionで画像生成

ColabでGPUを使って動かしていきます。

Colab環境

  • Python 3.10.12
  • インストールしたライブラリ
    • diffusers==0.25.0
    • accelerate==0.25.0
    • mediapy==1.2.0

Stable Diffusionでお絵描きnotebook

以下のモデルを使ってるんですね。

動かし方はpipelineを作ってと、transformersで親の顔を見るより見てきたやつ4ですね。

そして、GPUだと画像生成が速い5!🙌

こんなムッキムキのネコチャン🐈💪が生成されました(おま、隕石に勝ってね? ヤバいw)

ちなみにプロンプトの指定は全部守られていなくて、

The muscular cat is wearing(着ているものについて)

  • a red baseball cap
    • ✅ 赤い帽子ですね
  • a blue baseball shirt with white sleeves
    • ❌ 赤と白のシャツですね
  • black baseball pants
    • ❌ 赤いズボンですね

めっちゃ赤推しです。
Stable Diffusion先生の好きな色なのかな?

あれ、ひょっとして、この組合せ相性悪い?(もうちょい試行錯誤してみたい)

終わりに

Gemini Proで作ったプロンプトから、Stable Diffusionでお絵描きしました。
ジェミ×デフカップリング爆誕です!(ムフフ... しかも、このカップリングはGoogle公式ということですよ)

どちらも初めて触りましたが、

  • Gemini APIはキーの払い出しで簡単に使える
  • Stable Diffusionはtransformersと使い方が共通しているし、ColabのGPU環境でサクサク

と簡単に使い出せました🙌

引き続き生成AIのカップリングを妄想していきたいと思います!(「Python界の七尾百合子」目指してるのでね!6

P.S. プロンプトの秘密

本日発売、『生成AIで世界はこう変わる』で知ったプロンプトです(※そのままではありません)。
手を動かしたくなっちゃったんですよ〜

P.S. GeminiのAPIキー周りのトラブル

解決策は以下を参照したものです。ありがとうございました!


  1. エミリーちゃんについてはこちらの怪文書をどうぞ! ただただ か わ い い です
  2. ♊️
  3. https://github.com/google/generative-ai-python/blob/v0.3.2/google/generativeai/client.py#L53-L54
  4. 例えば
  5. webuiをCPUで動かすと、20秒は待ちます
  6. 読み返して思ったのですが、この暴走の仕方、松田亜利沙みもありますな〜