AI Chat GPT Stable Diffusion イベントレポ インディーゲーム キースイッチ デスク周り 推し活 水族館
Category:
2022年に話題をさらったMidjourneyに始まり、最近の画像生成AIの進歩は目を見張りますね。
特に注目を集めているのが、オープンソースで有志による開発がさかんな「Stable Diffusion」。モデルが一般公開されており、誰でも無料で利用することが可能です。
ただ、MacではGPUの制限があるため、そのままでは自前のPC上で使用することはできません。
私自身Macユーザーなので長く導入を見送っていたのですが、Google colabなどを活用すればMacでもStable Diffusionを動かすことができます。
さっそく試してみたので、コードの説明を添えながら導入方法を紹介します。
StableDiffusionをデスクトップで起動させる場合、NDVIAのGPUが必要です。外付けGPUを使用した旧Intel Macなら条件を満たすことができますが、Apple silicon(M1/M2)モデルのMacは対象外。
一応、M1/M2 Mac上で StableDiffusionを動かす方法もあるのですが、Githubで公開されている「apple-silicon-mps-support」というブランチを利用して、Apple SiliconのGPUを使えるように環境を構築しないといけません。
Mac内部で動かすのは少し手間なので、今回はブラウザ上で動作する「Google colab」を使用することにしました。
Google colabはGoogleが提供しているPythonの仮想実行環境です。
Google colabは基本無料な上、GPUが使用可能。機械学習やデータビジュアライゼーションなどの用途に活用されるサービスで、Googleアカウントにログインしていれば誰でも使えます。
無償版では、標準GPUとしてTesla T4(16GB)が使用できます。有償版ではTesla T4/V100/A100の3種のGPUがランダムで割り当てられるので、以下のコマンドで事前にGPUを確認しておくといいでしょう。
!nvidia-smi
さっそくColabにアクセスし、新しいノートブックを作成します。
編集→ノートブックの設定→ハードウェアアクセラレータを「GPU」に設定。
Google ColabではPythonの汎用ライブラリが既に用意されていますが、それ以外に必要なライブラリを追加でインストールする必要があります。
「Diffusers」のパッケージをインストールします。Diffusersは画像や音声の機械学習に使用するライブラリです。
以下のコードを実行します。
!pip install diffusers[torch]==0.11 transformers
!pip install --upgrade --pre triton
StableDiffusionで用いる学習済みパラメータは、ディープラーニングのコミュニティ「Hugging Face」のサーバーで配布されています。
かつてはモデルを利用するためにHugging Faceのアカウントを作成し、アクセストークンの取得が必要でした。現在はトークンを使わず利用できるので省略して構いません。[2022年11月28日のアナウンス]
ですが、各種モデルの検索や自然言語処理を学べる学習コンテンツなどを利用できるため、アカウントを作成しておいた方が何かと便利です。
以下のコードを実行します。
from diffusers import StableDiffusionPipeline import torch
model_id = “stabilityai/stable-diffusion-2-1”
scheduler = DPMSolverMultistepScheduler.from_pretrained(model_id, subfolder=“scheduler”)
pipe = StableDiffusionPipeline.from_pretrained(
model_id,
scheduler = scheduler,
torch_dtype = torch.float16,
revision = “fp16”
).to(“cuda”)
pipe.enable_attention_slicing()
それぞれのコードの説明は次の通りです。
解説が不要な場合は「③ StableDiffusionで画像生成する」へどうぞ。
diffusersを用いてStableDiffusionPipelineをインポートします。
続いて、使用したい学習モデル名をmodel idに指定します。モデル名はHugging faceで公開されているモデルカードに記載されています。今回はStableDiffusion 2.1を使用することにしました。
このidをパイプラインクラス(pipe)のfrom_pretrainedメソッドに渡します。
# 基本のコード
from diffusers import StableDiffusionPipeline import torch
model_id = “stabilityai/stable-diffusion-2-1”
pipe = StableDiffusionPipeline.from_pretrained(model_id).to(“cuda”)
この状態で画像生成を試してみてもいいのですが、より高速な処理のために「DPM-Solver++(DPMSolverMultistepScheduler)」というスケジューラを使用してみることにしました。
スケジューラ(Scheduler)は画像生成時のノイズ処理をするアルゴリズムで、出力の結果やスピードに影響します。モデルによってサンプラーと読んだりもするようです。
DiffusersからStableDiffusionPipelineと合わせて「DPMSolverMultistepScheduler」をインポートし、パイプラインクラスの中でスケジューラを指定します。
# スケジューラを追加したコード
from diffusers import StableDiffusionPipeline import torch
model_id = “stabilityai/stable-diffusion-2-1”
scheduler = DPMSolverMultistepScheduler.from_pretrained(model_id, subfolder=“scheduler”)
pipe = StableDiffusionPipeline.from_pretrained(
model_id,
scheduler = scheduler,
).to(“cuda”)
Hugging faceのドキュメント「Memory and speed」を参考に、以下のコードを追加しました。
torch_dtype = torch.float16,
revision = “fp16”
モデルを半精度データ型で使用することでメモリと処理時間を削減できます。
float16というブランチに格納されているので指定します。
enable_attention_slicing()
計算処理をステップごとに分けて実行することでGPU負荷を減らします。
速度は10%程度遅くなりますが、GPUへの負荷は大幅に軽くなるようです。
これらの処理を追加し、最終的にセットアップで実行したコードが以下の通りです。
# セットアップで実行したコード
from diffusers import StableDiffusionPipeline import torch
model_id = “stabilityai/stable-diffusion-2-1”
scheduler = DPMSolverMultistepScheduler.from_pretrained(model_id, subfolder=“scheduler”)
pipe = StableDiffusionPipeline.from_pretrained(
model_id,
scheduler = scheduler,
torch_dtype = torch.float16,
revision = “fp16”
).to(“cuda”)
pipe.enable_attention_slicing()
下準備ができたので、画像を生成させてみます。
「prompt」 が生成させる画像の要素を指示するワード(いわゆる詠唱)、「image」で画像サイズを指定しています。stable-diffusion-2モデルでは最大768×768ピクセルの画像が生成できるようになりました。
prompt = “a photo of an astronaut riding a horse on mars”
image = pipe(prompt, height=768, width=768).images[0]
image
テストプロンプトではこのような画像が生成されました。
予想以上にクオリティが高くて驚いています。
さっそく色々な画像を生成させてみました。
プロンプト:
“a kawaii anime girl with bluegreen short weavy hair wearing white coat,japanese anime style,full body illustration,high resolution,perfect beautiful face with blush cheeks,fine detailed face, white background”
背景の指示は無視されましたが、白衣は高確率で反映されるようです。
試行錯誤は必要だけど、それらしいイラストにはなってくれます。楽しい。
プロンプト:
“a Weapon driven by tall 8 legs like spider,steampunk, taken by Canon 5D Mk4”
Factorioのスパイダートロンのようなメカを生成。比較的シンプルな指示でそれらしい画像になりました。p
romptでカメラの指示をするとリアル系に、Unreal Engineを記載するとCG系のカリカチュアされたメカに寄るようです。
プロンプト:
“Landscape with buildings across the beautiful river, concept art, soft lighting, pastel color”
川の向こうにビル群が見える絵。
同じプロンプトでも、アニメ絵にチューニングされたモデルを使うとこんな感じになりました。
プロンプト:
“a cat on car,high detail,firly cat,high detail cute cat,bright lighting,pastel color,high-quality painting”
車の上にいる猫。
猫がやや破綻していますが許容範囲でしょう。画角などの指示を増やしてもいいかもしれません。
難しそうな印象のあった画像生成AIですが、Google Colabを使えばMacでも簡単に導入できました。
Stable Diffusionは有志による開発も盛んで、新しいモデルやノウハウが毎日のように生み出されています。ぜひ、色々試して遊んでみてはいかがでしょうか。
コメント