LoRAについて、もっと知りたいですか?
DiffusersでLoRAを使ってみたいと考えていますか?
この記事では、誰でも簡単に追加学習を行えるLoRA技術と、それを利用するDiffusereライブラリの魅力に迫ります!
AI画像生成に興味がある方、すでにAIを用いた創作活動に取り組んでいるが、さらなる可能性を探求したい方にとって、この記事はまさに目からウロコの内容となっています!
LoRAとは?
LoRAとは、「Low-Rank-Adaptation」の略称で、AIの追加学習を驚くほど少ない計算資源で可能にする技術です。
これまでAIの訓練と言えば、巨大な計算量と時間を要する作業でしたが、LoRAの開発によって誰もが容易に追加学習を行える時代が到来しました!
特に、Stable DiffusionでのAI画像生成において、LoRAは中心的な役割を果たしています。
LoRAのメリット
LoRAを使うことで得られるメリットを3つご紹介します!
1. 画風の自在な調整
LoRAを活用することで、画像のスタイルを自由自在に変更できます。アニメ調、カートゥーン風、さらには3D風の画像まで、多様なニーズに応えることが可能です。
2. 特定の人物やキャラクターの画像生成
一人の人物や一つのキャラクターに特化した画像を何枚も作り出せます。ただし、版権に触れるキャラクターの画像を生成する場合は、個人使用に限定し、商用目的での使用は避けましょう。
3. 個性的な画像のカスタマイズ
服装や髪型、背景、ポーズなど、細部にわたるカスタマイズが実現できます。希望する特定の設定で画像を生成するLoRAが存在するため、クリエイティビティを存分に発揮できます。
Stable Diffusionを用いた画像生成の場において、LoRAはその可能性を大きく拡げる重要な機能です
※「LoRA」についてモデルのダウンロード方法などは以下の記事で詳しく解説しています!
Diffusersとは?
Diffusersは、画像や音声、さらに分子の3D構造を生成することができる最先端技術のDiffusion Model(拡散モデル)を使えるライブラリです。
Diffusersは、生成物を簡単に作りたい人から、自分で拡散モデルを訓練してみたいと考えている人まで、幅広いニーズに応えます。
特に、「使いやすさを重視」、「直感的なシンプルさ」、「カスタマイズの自由度の高さ」に焦点を当てて設計されている点が魅力です!
Diffusersの特徴は以下の3つです。
- 最先端の拡散パイプライン:数行のコードで動かせる多様なパイプラインがあり、これらが解決する課題についての情報が整理されています。
- 交換可能なノイズスケジューラ:作成するコンテンツの品質と生成速度のバランスを取るためのツールです。
- 事前学習済みモデル:これらを組み合わせて、始めから終わりまでの拡散モデルを構築することができます。
Diffusersの立ち上げ方
Google Colab上でDiffusersを使ってStable Diffusionを立ち上げる方法について、簡単に解説していきます。この方法で実行すると、素早く画像を生成できるようになります!
1. Google Colabノートブックを開く
- Google Colabにアクセスし、新規ノートブックを作成します。
- 「編集」タブから「ノートブックの設定」を開き、ハードウェアアクセラレータを「T4 GPU」に設定してください。
- ノートブックの名前も「Stable Diffusion 【diffusers】」など、分かりやすい名称に変更しましょう。
2. 必要なライブラリを導入する
下記のコマンドを実行し、必要なライブラリをインストールします。
!pip install --upgrade diffusers[torch] transformers
次に、Stable Diffusionのパイプラインを準備するために以下のコードを実行します。
from diffusers import StableDiffusionPipeline, EulerDiscreteScheduler
import torch
model_id = "stabilityai/stable-diffusion-2-1"
pipe = StableDiffusionPipeline.from_pretrained(
model_id,
scheduler=EulerDiscreteScheduler.from_pretrained(
model_id,
subfolder="scheduler"
),
torch_dtype=torch.float16
).to("cuda")
pipe.enable_attention_slicing()
3. 画像を生成する
最終ステップとして、以下のコードを編集して、希望する画像のプロンプトを英語で入力し、画像を生成します。
prompt = "ここにプロンプトを英語で入力"
image = pipe(prompt, height=512, width=512).images[0]
image.show()
※「Diffusers」については以下の記事で詳しく解説しています!
- Stable Diffusionのプロンプトの見本が知りたい
- 画像生成が思ったようにできない
- 色々なプロンプトを探したい
DiffusersでLoRAを使う方法!
それでは、ここからはDiffusersでLoRAを使う方法をご紹介します。
1.画像を生成する
まずは画像を生成してみましょう。
① パッケージをインストール
# パッケージのインストール
!pip install diffusers transformers omegaconf accelerate peft
② モデルをダウンロード
任意のモデルをダウンロードしましょう。今回は、「IrisMix-v3」を使用します。
# モデルのダウンロード
!wget https://huggingface.co/natsusakiyomi/IrisMix/resolve/main/IrisMix-v3.safetensors
③ パイプラインの準備
ここでは、ダウンロードしたモデルファイルを使用して、画像生成パイプラインを構築しています。
ついでにEasy Negativeもインストールします。
from diffusers import StableDiffusionPipeline
import torch
# パイプラインの準備
pipe = StableDiffusionPipeline.from_single_file(
"IrisMix-v3.safetensors",
torch_dtype=torch.float16,
).to("cuda")
# EasyNegativeV2の準備
pipe.load_textual_inversion("embed/negative",weight_name="EasyNegativeV2.safetensors",token="EasyNegative")
④ 画像生成
プロンプトを設定して画像を生成しましょう。
prompt = "masterpiece, beautiful, a Japanese woman, curly black short hair, White T-shirt, looking at a viewer "
negative_prompt = "EasyNegativeV2, bad face"
# 画像生成の実行
image = pipe(
prompt,
negative_prompt=negative_prompt,
generator = torch.Generator(device="cuda").manual_seed(1753289035)
).images[0]
# 画像の保存と表示
image.save("output.png")
image
2.LoRAウェイトを適用する
次に、LoRAウェイトを適用してみましょう!
① LoRAウェイトのダウンロード
今回は、「JujoHotaru/lora」を使い、目に変化を加えます。
# LoRAウェイトのダウンロード
!wget https://huggingface.co/JujoHotaru/lora/resolve/main/hotarueye_whiteeye9_v100.safetensors
② LoRAウェイトの読み込み
# LoRAウェイトの読み込み
pipe.load_lora_weights(".", weight_name="hotarueye_whiteeye9_v100.safetensors")
③ 画像生成
prompt = "masterpiece, beautiful, a Japanese woman, curly black short hair, White T-shirt, looking at a viewer "
negative_prompt = "EasyNegativeV2, bad face"
# 画像生成の実行
image = pipe(
prompt,
negative_prompt=negative_prompt,
generator = torch.Generator(device="cuda").manual_seed(1753289035)
).images[0]
# 画像の保存と表示
image.save("output.png")
image
目が抽象的になり、よりアニメっぽくなりました!
【応用編】複数のLoRAを適用する場合
それでは最後に、複数のLoRAウェイトを適用してみましょう。
① LoRAウェイトのリセットとモデルの再読み込み
from diffusers import StableDiffusionPipeline
import torch
# パイプラインの準備
pipe = StableDiffusionPipeline.from_single_file(
"IrisMix-v3.safetensors",
torch_dtype=torch.float16,
).to("cuda")
# EasyNegativeV2の準備
pipe.load_textual_inversion("embed/negative",weight_name="EasyNegativeV2.safetensors",token="EasyNegative")
② 複数のLoRAをダウンロード
今回は、「JujoHotaru/lora」を使い、目と口に変化を加えます。
# 複数のLoRAウェイトのダウンロード
!wget https://huggingface.co/JujoHotaru/lora/resolve/main/hotarueye_whiteeye9_v100.safetensors
!wget https://huggingface.co/JujoHotaru/lora/resolve/main/catmouth_v100.safetensors
③ 複数のLoRAを読み込む
# 複数のLoRAウェイトの読み込み
pipe.load_lora_weights(".", weight_name="hotarueye_whiteeye9_v100.safetensors", adapter_name="hotarueye_whiteeye9_v100")
pipe.load_lora_weights(".", weight_name="catmouth_v100.safetensors", adapter_name="catmouth_v100")
pipe.set_adapters(["hotarueye_whiteeye9_v100", "catmouth_v100"], adapter_weights=[1.0, 1.0])
④ 画像生成
prompt = "masterpiece, beautiful, a Japanese woman, curly black short hair, White T-shirt, looking at a viewer "
negative_prompt = "EasyNegativeV2, bad face"
# 画像生成の実行
image = pipe(
prompt,
negative_prompt=negative_prompt,
generator = torch.Generator(device="cuda").manual_seed(1753289035)
).images[0]
# 画像の保存と表示
image.save("output.png")
image
目の変化に加えて、口もよりアニメらしくなったのではないでしょうか!
まとめ
いかがでしたでしょうか?
DiffusereライブラリでのLoRAの使い方について解説してきました。
今回のポイントをまとめると、以下のようになります。
- LoRAは計算資源を少なくしてAI画像生成において、画風調整や特定キャラクターの生成、画像のカスタマイズが可能。
- Diffusersは画像や音声、分子の3D構造生成が可能な拡散モデルライブラリ。直感的でカスタマイズ性が高く、画像生成が実行可能。
- Diffusersライブラリを利用してLoRAをインストールし、LoRAウェイトの適用、複数LoRAウェイトの応用が可能。
DiffusersでのLoRAを使うことにより、画風の自在な調整から特定のキャラクターの画像生成、更には個性的な画像のカスタマイズまで行うことができます。
この記事が少しでもみなさんの活動の助けになれば幸いです。
また、生成AIに関する更なる情報は、他の記事にて詳細に解説していますので、そちらの内容もぜひ確認してみてください!
- Stable Diffusionのプロンプトの見本が知りたい
- 画像生成が思ったようにできない
- 色々なプロンプトを探したい