はじめに
今回、ポケモン風キャラ特化のStable Diffusionがあると聞いて試してみました!
想像より簡単なコードなので、精度はどうなるのか気になるところです!
使用モデル、環境
今回使うモデルは、Hugging Faceにあったこちらのモデルを使うことにします!
実行環境は、Google Colabになります!
ライブラリのインストール
Google Colabを開いたら、まずはじめに使用するライブラリのインストールをしていきます!
!pip install diffusers==0.12.1 #バージョンが古いとエラー吐きます
!pip install transformers scipy ftfy
コラボでの実行なので、pipの前に!
をつけ忘れないようにしましょう!!
いよいよ実行...!?
では、ライブラリのインストールもできたのでいよいよ実行していこうと思います!
まずは以下のコードを記入してください!
import torch
from diffusers import StableDiffusionPipeline
from torch import autocast
pipe = StableDiffusionPipeline.from_pretrained("lambdalabs/sd-pokemon-diffusers", torch_dtype=torch.float16)
pipe = pipe.to("cuda")
prompt = "soothing cat" #ここにプロンプトを入力してください!
scale = 10
n_samples = 1 #ここの数字を変えることで、出力枚数が変わります!
# Sometimes the nsfw checker is confused by the Pokémon images, you can disable
# it at your own risk here
disable_safety = False
if disable_safety:
def null_safety(images, **kwargs):
return images, False
pipe.safety_checker = null_safety
with autocast("cuda"):
images = pipe(n_samples*[prompt], guidance_scale=scale).images
for idx, im in enumerate(images):
im.save(f"{idx:06}.png")
promptでお題を書くことによって、出力される絵が変わる仕組みとなっています!
ちなみに、prompt部分を訳すと、”癒し系猫”🐈
主が猫大好きなので作ってみてもらうことにしました(笑)
ってことでとりあえず実行...!
あれ、?どうやらエラーが出たようですね。 エラー文を読んでみると、どうやらこのコードはGPU環境で実行する必要があるとのこと。
そこで、Colabの実行環境をGPUに変更することに!!
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F3529811%2F8681ea52-8fa8-cdcb-9aa8-6ffc217bd78a.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e0543309ed7ffb76b22b9bff3223f2ee)
ランタイムを再起動し全てのセルを再実行すると、、、
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F3529811%2F53b2302e-9cf2-e21a-7a86-e330ba0395a9.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=54a58b6393da8b08c8d94ecd03f64bd5)
フォルダにこのような画像が出力されました!!🎉
なんかニャースとペルシアンを足して2で割ったような感じで癒し系かはわからないですが、ポケモンらしさは再現できてるのではないでしょうか...?
生成形AIにGPUが必要とされる理由
ここで、なぜ先ほどCPU環境で実行した際にエラーが出たのでしょうか?
実は、ディープラーニングにおいて基本的には中間層の数が多くなるほど複雑な判断ができるようになります。そのためには大規模な計算が必要となりますが、GPUは並列処理を得意としており、同じような計算を高速で繰り返すことができます。こうした処理性能が、高速な並列処理を求められるディープラーニングに向いているのです。
終わりに
今回は実際にポケモンのようなキャラ作りができるStable Diffusionを試してみました!
Hugging Faceなどを見ると面白くて簡単なモデルがたくさん転がっているので、興味のある人はぜひ触ってみてください☺️