diffusers は Hugging Face のモジュールなので、
Hugging Face 上にあるモデルはモデルIDだけで簡単に扱うことができます。
Hugging Face にはなく Civitai にはあるようなモデルも多く存在しています。
この記事では Civitai にある LoRA を diffusers で使ってみることにします。
.safetensors とは
上記の記事(EasyNegative や LoRAを使ってみた)のときにも登場した拡張子です。
色々なモデルデータの形式らしいです。
前回はどうやって使ってたっけ?
pipe.load_textual_inversion( "embed/negative", weight_name="EasyNegativeV2.safetensors", token="EasyNegative" ) pipeline.load_lora_weights( "ostris/super-cereal-sdxl-lora", weight_name="cereal_box_sdxl_v1.safetensors" )
こんな感じでしたね。
- 第一引数: Hugging Face 上のモデルID
- キーワード引数(weight_nane): Hugging Face 上のファイル名
Civitai のデータを diffusers で使う
Civitai の というよりは .safetensors の データを使うイメージです。
今回は、以下の LoRA を使うことにします。
お。ポケモンじゃん!と思いつつ、
こんな画風を簡単に出力できてしまっていいのか?とも思いつつ。。。
確実に色々な問題を抱えていそうな気がします。AI 怖い。
今回はサンプルとして使わせてもらいましょう。
手順
- パッケージをインストールする
- Google Colab インスタンス上に .safetensors を配置する
- パイプラインの準備をする
- Google Colab インスタンス上の .safetensors を load_lora_weights() でロードする
- パイプラインを実行する
ほとんど過去の記事と一緒なのでピックアップしながら記載していきます。
2. Google Colab インスタンス上に .safetensors を配置する
ダウンロードした .safetensors をアップロードします。
もしくは wget で取ってくる感じです
!wget -O lora.safetensors https://civitai.com/api/download/models/73529?type=Model&format=SafeTensor
パイプラインを準備する
ダウンロードページ の説明等を読むと以下のようなキーワードが読み取れました
- トリガーワードが存在している (v3 では不要かもしれない)
- AnyLoRA というモデルを使用している (これは LoRA ではない)
- 重みは 0.5 か 0.6 を使用している
- CLIP Skip 2 を使用している
from diffusers import StableDiffusionPipeline import torch # HuggingFace 上にある AnyLoRA モデルを使用する pipe = StableDiffusionPipeline.from_pretrained("Lykon/AnyLoRA", torch_dtype=torch.float16).to("cuda") # 実行環境上にある lora.safetensors を使用する pipe.load_lora_weights( ".", weight_name="lora.safetensors" ) # LoRA パラメータで出力にどの程度影響を与えるかを制御する pipe.fuse_lora(lora_scale=0.6) # HuggingFace 上にある EasyNegative を使用する pipe.load_textual_inversion( "embed/negative", weight_name="EasyNegativeV2.safetensors", token="EasyNegative" )
パイプラインを実行する
あとはいつも通り、プロンプトを用意してパイプラインの実行です。
1つ違うとすれば num_hidden_layers=11
を付けています。
こちらの記事 を参考にしました。
image = pipe( prompt, negative_prompt="EasyNegative", generator=generator, width=768, height=512, num_hidden_layers=11, # CLIP skip 2 ).images[0]
実行結果
使ったプロンプトは cat
や electric pokemon
などです。
でんきタイプの猫を出力したかった感じです。
LoRA 無し
LoRA 有り
まとめ
でんきタイプが生成されたかどうかは置いといて、
意外と LoRA 無しでもキャラクターぽくなってますね。
LoRA を付けると雰囲気がよりポケモンっぽく。