ブログのアイキャッチ画像用にStable Diffusionを動かしたことを以前の記事で書いた。
Google Colaboratoryで動かしたコードは以下。Google Colaboratoryは課金してProにしている。ひょっとしたら無料枠だと動かないかも?
ライブラリのインストール。
pip install diffusers==0.15.0 transformers==4.28.1 ftfy accelerate
画像出力のコード。
import datetime import torch from diffusers import StableDiffusionPipeline # model id # https://huggingface.co/andite/anything-v4.0 model_id = "andite/anything-v4.0" device = "cuda" # prompt prompt = "cute, cat ear, maid, write diary, in the room, sitting chair, masterpiece, best quality, white hair, 1girl" n_prompt = "bad anatomy, long_neck, long_body, longbody, deformed mutated disfigured, missing arms, extra_arms, mutated hands, extra_legs, bad hands, poorly_drawn_hands, malformed_hands, missing_limb, floating_limbs, disconnected_limbs, extra_fingers, bad fingers, liquid fingers, poorly drawn fingers, missing fingers, extra digit, fewer digits, ugly face, deformed eyes, partial face, partial head, bad face, inaccurate limb, cropped" # create pipeline pipe = StableDiffusionPipeline.from_pretrained(model_id) # ignore safety_checker def null_safety(images, **kwargs): return images, False pipe.safety_checker = null_safety pipe = pipe.to(device) # execute pipeline images = pipe(prompt, negative_prompt=n_prompt, height=720, width=1280, num_images_per_prompt=2).images # save images for index, image in enumerate(images): dt_now = datetime.datetime.now() image.save('image_{index}_{date}.png'.format(index=index, date=dt_now.strftime('%Y%m%d_%H%M%S')))
notebook上で画像を表示するコード。
参考にした記事。
特に問題のなさそうなプロンプトを指定してもNSFWな画像を表示させないためのsafety_checkerが動いてしまうので関数を上書きしている。
def null_safety(images, **kwargs): return images, False pipe.safety_checker = null_safety
ちなみにこの画像生成のスクリプトは出力時間はだいたい5分程度。それなりに強いGPUを使っていると思うけどそれなりにかかる。それでも自分で書くよりは圧倒的に早いわけだけど。
from torchvision.transforms import functional, ToPILImage from torchvision.utils import make_grid ncols = 3 grid = make_grid([functional.pil_to_tensor(img) for img in images], padding=0, nrow=ncols, pad_value=254 ) ToPILImage()(grid)
使っているモデルはanything-v4.0。
改めてAI作画の凄さを実感している。NovelAIで出力するのも興味深かったが、実際にモデルを選んでコードを書いて出力すると、より描いている感がでる(個人的には)。自分で工夫してコードを書いてその結果出力されるものなら創作性が有るんじゃないかろうか。これもまぁちょっと詭弁めいているけども。究極的にはモデルも自分で用意できるとなお良いが、流石にColaboratoryだと難しいかもしれない。
次はLoRAあたりを試してみたい。