本当は、自分でLoRAを作成したいです。
ただ、自分の端末にGPUが搭載されていないので、なかなかLoRAの学習ができません。
なので、みんなが面白そうにやっている画像の生成についてだけでもやってみました。
CPUがCore i5の13世代で実行しましたが、画像1枚約1分30秒で生成できました!
必要なところのみ説明しているので実際には工夫した実装が必要です。
条件
- GPUは使わない設定です
- 画像生成には
StableDiffusionのモデルを使用します
今回は、v1.5を使用しました - 画像生成時には、外部への通信が行われないようにします
- 画像生成用のモデルは事前にサイトから取得します
- モデルは「safetensors」というファイルを使用します
モデルの取得について
ベースとなるモデルとLoRAのモデルが必要です
以下のサイトを使用させていただきました。
- ベースモデル
Hugging Fase - LoRA
Civitai
※どちらもユーザー登録(無料)が必要です。
※モデルのバージョンを間違えないようにすること!
使用するPythonパッケージ
※不要なものも含まれているかもしれません。。。
torch
torchvision
torchaudio
diffusers
transformers
peft
accelerate
safetensors
pillow
ソースコード
import os
import torch
from diffusers import StableDiffusionPipiline
# 通信を行わないよう、環境設定
os.environ["HF_HUB_OFFLINE"] = "1"
os.environ["TRANSFORMERS_OFFLINE"] = "1"
# pipeの設定
pipe = StableDiffusionPipeline.from_single_file(
pretrained_model_link_or_path = "ベースモデルのファイルパス",
torch_dtype = torch.float32, # CPUだとfloat16を使うと8hくらいかかります。
use_safetensors = True,
safety_checker = None, # 備忘録用ソースなのでNoneにしてます。
local_files_only = True # ココも通信を行わないようにする設定です。
)
# LoRAの設定
pipe.load_lora_weights(
"LoRAモデルが保存されているフォルダパス",
weight_name = "LoRAモデルのファイル名",
adapter_name = "style" # LoRAは複数登録できるので、どのLoRAかわかるよう名前を設定
)
pipe.set_adapters(["style"], adapter_weights=[0.8])
# 念のため、Seed値固定用の設定を行います
generator = torch.Generator("cpu").manual_seed(1234)
# 推論
image = pipe(
prompt = "生成したい画像の内容を支持(なるべく英語)",
negative_prompt = "画像生成時のnegative_prompt(なくてもいい。なるべく英語)",
num_inference_steps = 20,
guidance_scale = 8.5, # プロンプトをどこまで反映させるか(最大10)
generator = generator # Seed値の設定
).images[0]
# 画像保存
image.save("出力ファイルパス(png)")
これで画像生成ができました!