見出し画像

Google Colab で デルタもんLoRA を試す

「Google Colab」で「デルタもんLoRA」を試したので、まとめました。


1. デルタもんLoRA

デルタもんLoRA」が「アルファパラダイス」のキャラクター「デルタもん」のLoRAです。「アルファパラダイス」のイラスト・音声・3Dデータなどのコンテンツは、AI に関連した利用に限り、目的を問わず自由に使うことができるとのこと。

2. Colabでの実行

Colabでの実行手順は、次のとおりです。

(1) Colabのノートブックを開き、メニュー「編集 → ノートブックの設定」で「GPU」を選択。

(2) パッケージのインストール。

# パッケージのインストール
!pip install diffusers peft

(3) 「HuggingFace」からAPIキー (Access Token) を取得し、Colabのシークレットマネージャーに登録。
キーは「HF_KEY」とします。

(4) パイプラインの準備。
今回は、ベースモデルとして「cagliostrolab/animagine-xl-3.1」を使います。

import torch
from diffusers import DiffusionPipeline

# パイプラインの準備
pipe = DiffusionPipeline.from_pretrained(
    "cagliostrolab/animagine-xl-3.1", 
    torch_dtype=torch.float16, 
    use_safetensors=True, 
).to("cuda")

(5) デルタもんLoRAのダウンロード。

# デルタもんLoRAのダウンロード
!wget https://civitai.com/api/download/models/405234 --content-disposition

(6) LoRAウェイトの読み込み。

# LoRAウェイトの読み込み
pipe.load_lora_weights(".", weight_name="deltamon_beta.safetensors")

(7) 画像生成。
prompt」「negative_prompt」を指定します。
今回は、公式のプロンプト例で試しています。

# プロンプトの準備
prompt = "<lora:deltamon_beta:1.0>,1girl,deltamon_beta, solo, blue eyes, simple background, thighhighs, long sleeves, white background, dress, animal ears, bare shoulders, blue tail, earrings,pink boots, detached sleeves, green hair, sleeveless, cat ears, bag, white dress, white thighhighs, cat tail,pink backpack,yellow delta tie,pink randseru"
negative_prompt = "nsfw, lowres, (bad), text, error, fewer, extra, missing, worst quality, jpeg artifacts, low quality, watermark, unfinished, displeasing, oldest, early, chromatic aberration, signature, extra digits, artistic error, username, scan, [abstract]"

# 画像生成
image = pipe(
    prompt, 
    negative_prompt=negative_prompt,
    width=832,
    height=1216, 
    guidance_scale=7,
    num_inference_steps=28,
).images[0]
image.save("output.png")
image


diffusersの問題で77トークン以上使えない警告がでました。

The following part of your input was truncated because CLIP can only handle sequences up to 77 tokens: ['highs, cat tail, pink backpack, yellow delta tie, pink randseru']

3. ロングプロンプトの利用

「comple」で77トークン以上のプロンプトを埋め込みベクトルに変換して利用します。

(1) パッケージのインストール。
compel」をインストールします。

!pip install compel

(2) 埋め込みベクトルの生成。

from compel import Compel, ReturnedEmbeddingsType

# プロンプトの準備
prompt = "<lora:deltamon_beta:1.0>,1girl,deltamon_beta, solo, blue eyes, simple background, thighhighs, long sleeves, white background, dress, animal ears, bare shoulders, blue tail, earrings,pink boots, detached sleeves, green hair, sleeveless, cat ears, bag, white dress, white thighhighs, cat tail,pink backpack,yellow delta tie,pink randseru"
negative_prompt = "nsfw, lowres, (bad), text, error, fewer, extra, missing, worst quality, jpeg artifacts, low quality, watermark, unfinished, displeasing, oldest, early, chromatic aberration, signature, extra digits, artistic error, username, scan, [abstract]"

# 埋め込みベクトルの準備
comple = Compel(
    truncate_long_prompts=False, # Trueは77に切り詰め
    tokenizer=[pipe.tokenizer, pipe.tokenizer_2] ,
    text_encoder=[pipe.text_encoder, pipe.text_encoder_2],
    returned_embeddings_type=ReturnedEmbeddingsType.PENULTIMATE_HIDDEN_STATES_NON_NORMALIZED,
    requires_pooled=[False, True]
)    
prompt_embed, prompt_pooled = compel(prompt)
negative_embed, negative_pooled = compel(negative_prompt)
[prompt_embed, negative_embed] = compel.pad_conditioning_tensors_to_same_length([prompt_embed, negative_embed]) # トークン数揃える

# 確認
print(prompt_embed.shape, negative_embed.shape)
torch.Size([1, 154, 2048]) torch.Size([1, 154, 2048])

(2) 画像生成。
prompt_embeds」「pooled_prompt_embeds」「negative_prompt_embeds」「negative_pooled_prompt_embeds」を指定します。

image = pipe(
    prompt_embeds=conditioning, 
    pooled_prompt_embeds=pooled, 
    negative_prompt_embeds=negative_embed, 
    negative_pooled_prompt_embeds=negative_pooled, 
    width=832,
    height=1216,
    guidance_scale=7,
    num_inference_steps=28,
).images[0]
image.save("output.png")
image




この記事が気に入ったらサポートをしてみませんか?