見出し画像

ChatGPTとStable Diffusionでキリンを美しく描く(続き)

ちょっと前に『ChatGPTとStable Diffusionでキリンを美しく描く』というノートを書いたのですが、その中で次回は、有料版Colabを使って、ガリガリ画像を生成したいと書きました。しかし、忙しくてなかなか着手できていませんでした。理由は、『生成AI・ChatGPTでPythonプログラミング アウトプットを10倍にする!』という本の校正をしていたからです。仕事も少し、落ち着き、キリンを美しく書く方法を、追求したいと思います。

# Colabでガリガリ画像を生成するには?

Colabで具体的な画像生成をする方法については、以下マイナビの連載でも書いているので、ぜひ参考にしてください。実質、このノートは、以下の連載の続き回でもあります。

(マイナビPython連載) 画像生成AIが自宅PCで動かない?!諦めるのはまだ早いColabで動くよ

# stable-diffusion-2-1を使ってみる

上記では、StableDiffusionのモデル「CompVis/stable-diffusion-v1-4」を使っていますが、今回は「stabilityai/stable-diffusion-2-1」を使ってみます。

それで、Colabで以下のようなPythonプログラムを実行します。

# --- 必要なパッケージのインストール ---
! pip install -U diffusers==0.17.1 \
        transformers==4.30.2 \
        scipy==1.11.0 \
        ftfy==6.1.1 \
        accelerate==0.20.3 \
        omegaconf
# --- 画像を生成するPythonのプログラム ---
from diffusers import StableDiffusionPipeline
from torch import autocast
# 利用するモデルを指定
model = 'stabilityai/stable-diffusion-2-1'
# プロンプトの指定
prompt = '(masterpiece, best quality:1.3), Giraff in the forest'
# 画像を生成
pipe = StableDiffusionPipeline.from_pretrained(model).to("cuda")
image = pipe(
    prompt,
    width=1024, 
    height=1024,
    num_inference_steps=29,
    guidance_scale=7.5,
    ).images[0]
image.save('image.png')
# 画像を表示
from IPython.display import Image,display_png
display_png(image)

それで、上記のプログラムを繰り返し実行するだけです。ほぼ、上記マイナビ連載で紹介したプログラムそのままです。すると、見事なキリンの画像を生成できます。

何の工夫もしていませんが悪くありません!

森に居るキリンという指定で作成してみた

なお、width / height に1024pxを指定している点ですが、、、どうやら、256pxとか小さな画像で作ってもらうと、変な画像しか作成できませんでした。それなりに大きな画像を指定することで正しく動作するモデルのようです。

# ChatGPTでプロンプトを作る

それでは、ChatGPTを使ってキリンを美しく描くプロンプトを作ってみたいと思います。前回の反省を含めて、以下のようなプロンプトを指定してみました。

森に居る美しいキリンを描画したいと思います。美しいキリンを描画する方法を200字で要約してください。箇条書きにしないでください。その後、英語で出力してください。

ChatGPTに与えたプロンプト

すると、以下のように美しいキリンが生成されました。これは、なかなか、うまくいったと言って良いのではないでしょうか。

ChatGPTと協力して描画した美しいキリン

ただし、何枚も作ってようやく成功したのであって、かなり絵が崩れる現象が起きます。

安定して美しいキリンを描きたいと思います。そのために、以下のサイトに書かれていたプロンプトを参考にしようと思いました。

【Stable Diffusion Web UI】画質・画風に関するプロンプト(呪文)一覧!

やはり、Masterpieceやbest qualityと指定するのが大切のようです。プロンプトを以下のように修正しました。

森に居る美しいキリンを描画したいと思います。美しいキリンを描画する方法を150字で要約してください。箇条書きにしないでください。その後、英語で出力してください。なお、「Masterpiece」と「best quality」を入れてください。

ChatGPTに与えたプロンプト

すると、比較的安定したキリンが描画されるようになりました。たまたま、生成された英語に影響されて、イラストっぽいものが描画されるようになりましたが、それほど悪くありません!味があります。

「Masterpiece」と「best quality」を入れて描画してもらった

# ネガティブプロンプトとシードの指定方法

ただ、上記だけで、まったく完全というわけではなく、八岐大蛇のように、体から複数の頭が生えた恐ろしいキリンが頻繁に生成されてしまいます。それで、ネガティブプロンプトとして「many head」などを指定することにしました。ネガティブプロンプトを指定することで、描いてほしくない指示を指定できます。

それで、以下のようなPythonプログラムに改造しました。

# --- ネガティブプロンプトを指定し、適当なシード値を指定できるようにした ---
import torch
prompt = '''
And in English: First, begin by lightly sketching the shape of the forest and giraffe. Decide on the overall shape before drawing the details. Next, taking advantage of the transparency of watercolors, start painting from light colors and gradually layer deeper colors. Draw the delicate pattern of the giraffe with a thin brush and dark colors. To create a masterpiece, spend time and attention to each step carefully. Don't forget that the best quality work comes from attention to detail and practice. In particular, it's important to express the delicate lines of the giraffe and the natural colors of the forest.
'''
n_prompt = 'logo, many head, frame'
size = 1024
seed = 1533567
head = 'ff'
for seed in range(seed, seed+5):
  generator = torch.Generator().manual_seed(seed)
  image = pipe(
    prompt,
    negative_prompt=n_prompt,
    width=size, 
    height=size,
    num_inference_steps=32,
    guidance_scale=7.5,
    generator=generator
    ).images[0]
  image.save(f'{head}_image_{seed}.png')
  # 画像を表示
  display_png(image)

それでもおかしなキリンが描画されますが、もう諦めました。以下のような綺麗なキリンも描画できたので。もう生成AIを使う以上、たくさん作って良いものを1つ選べば良いという方針にしました。

ネガティブプロンプトを指定した

また、num_inference_stepsを増やし過ぎると、おかしな感じのキリンがの確率が高まりました。何事もやり過ぎはよくないようです。

# 月夜の森のキリン

次に、少し条件を変えて描画させてみました。

月夜、森に居る美しいキリンを水彩画風に描画するプロンプトを作ってください。 プロンプトを100字で要約してください。ただし、箇条書きにしないでください。 冒頭に「(masterpiece, best quality:1.3)」と入れてください。 その後、英語で出力してください。

ChatGPTに与えたプロンプト

すると次のような絵を描いてくれました。いい感じです。

月夜のキリン

以下の絵も個性的で良い感じです!

月夜のキリン

また、次のような、次のような、ちょっと幻想的な感じのも描いてくれました。

幻想的、月と森とキリン!
月夜の森のキリン

# 遺跡の中のキリン

次に、遺跡の中にキリンを配置してみようと思います。

遺跡の中にキリンを配置してみた
夜の遺跡の中のキリン

# 花火とキリン

花火とキリンの組合せでも描いてもらいました。

花火とキリン

この要領で、いろいろなシチュエーションにキリンを配置すると、もっと楽しそうです。

# まとめ

以上、美しいキリンを描くミッションは、これからも続けていろいろ試行錯誤しようと思います。次回は、配置する場所をさらに工夫し、いろいろな画風を指定してみたいと思います。

# 改めて宣伝

生成AI・ChatGPTでPythonプログラミング アウトプットを10倍にする!』が、もうすぐ発売です!!

生成AI・ChatGPTの使いこなし方が分かる!

この記事が気に入ったらサポートをしてみませんか?