ウェブサイト検索

LoRAと拡散モデルでアニメを生成


導入

アニメ愛好家の皆さん、ようこそ!これを想像してください。お気に入りのアニメ キャラクターのポスターに囲まれていると、突然インスピレーションが湧きます。あなたは今、自分だけの傑作アニメを作りたいと思っていますが、どうすればできるでしょうか?

LoRA と拡散モデルを使用して、素晴らしいアニメ キャラクターを作成する方法を学びます。

この記事では、最も話題になっている LoRA と Stable Diffusion (SD) の組み合わせを使用してアニメ画像を生成する方法を学びます。 LoRA の基本とそれが使用される理由を理解し、SD の概要も理解していきます。

前提条件

  • 基礎知識: 深層学習の概念と安定した拡散モデルについての知識。
  • 環境セットアップ: PyTorch、Diffuser、Transformers などのライブラリがインストールされた Python 環境にアクセスします。
  • ハードウェア: 十分な VRAM を備えた GPU (例: NVIDIA 16GB 以上を推奨)。
  • 事前トレーニング済みモデル: 安定した拡散モデルのチェックポイント。
  • LoRA ファイル: アニメ生成用に微調整された低ランク適応 (LoRA) ファイル。
  • データセット: 必要に応じてカスタム微調整を行うためのオプションです。

アニメのポートレートが特別なものになる理由

アニメのキャラクターは古い友人のようなものです。私たちはそれらに決して飽きません。彼らは、猛々しい戦士から風変わりな高校生、BTS のキャラクターまで、あらゆる形や大きさのものがあります。彼らは私たちにとってとても特別な存在です。しかし、彼らを本当に特別なものにしているのは、私たちの心を捉え、何でも可能な空想の世界に私たちを連れて行ってくれる能力です。

以前は、カスタムのアニメ スタイルのアートワークを作成するには、いくつかの要素、特に芸術的才能が必要でした。 Stable Diffusion により、AI 革命を利用して、トレーニングをほとんど、またはまったく行わずに独自のアートワークを作成できるようになりました。

ECC を備えた堅牢な 16 GB の GDDR6 メモリでグラフィックスや計算負荷の高いタスクを強化し、前世代と比較してメモリ容量を 2 倍にします。詳細については、NVIDIA ページをご確認ください。

LoRAとは

モデルをより大きなモデルにスケールアップするときは、完全な微調整を実行します。これには通常、すべてのモデル パラメーターの再トレーニングが含まれます。このプロセスは退屈で、金額だけでなく計算コストもかかります。この課題に対処するために、低ランク適応 (LoRA) が開発されました。

LoRA は、事前トレーニングされたモデルの重みを凍結し、トレーニング可能なランク分解行列を Transformer アーキテクチャのすべての層に導入することによって機能します。このアプローチにより、下流タスクに必要なトレーニング可能なパラメータの数が大幅に削減されます。

元の研究論文で紹介されている例の 1 つは、Adam による GPT-3 175B の微調整と比較して、LoRA ではトレーニング可能なパラメーターの数を 10,000 分の 1 に減らし、GPU メモリ要件を 3 分の 1 に削減できるという事実を強調しています。

さらに、モデルのトレーニングを減らしてパラメータを減らしているにもかかわらず、LoRA は、RoBERTa、DeBERTa、GPT-2、GPT-3 などのさまざまなアーキテクチャでの微調整方法と同等またはそれ以上のモデル品質を示しています。さらに、LoRA チューニングは、アダプターベースのアプローチとは異なり、より高いトレーニング効率のスループットを実現し、追加の推論レイテンシーを発生させません。

「安定拡散 XL 用の LoRA モデルのトレーニング」に関する詳細な記事があり、モデルをより深く理解するための前提条件としてこの記事を強くお勧めします。

安定拡散の概要と使用モデル

安定拡散は、拡散技術を利用し、潜在空間を使用してフォトリアリスティックな画像を生成する生成人工知能 (生成 AI) モデルです。 CPU を使用してモデルを実行することもできますが、GPU があればうまく動作します。基本的に、拡散モデルには画像をエンコードするためのガウス ノイズが含まれます。その後、ノイズ予測器と逆拡散プロセスを使用して、元の画像を再構成します。

Stable Diffusion の主なコンポーネントには、変分オートエンコーダ、逆拡散、ノイズ プレディクタ、およびテキスト コンディショニングが含まれます。

変分オートエンコーダには、エンコーダとデコーダという 2 つの主要コンポーネントがあります。エンコーダーは、大きな 512x512 ピクセルの画像を、扱いやすい潜在空間内の小さな 64x64 表現に圧縮します。その後、デコーダはこの圧縮表現をフルサイズの 512x512 ピクセル画像に再構築します。

前方拡散では、ランダム ノイズによって完全に隠蔽されるまで、画像にガウス ノイズを徐々に追加します。トレーニング中、すべての画像はこのプロセスを受けますが、通常、このプロセスは後で画像から画像への変換にのみ使用されます。

逆拡散は逆のプロセスであり、基本的に順拡散を段階的に元に戻します。たとえば、猫と犬の画像を使用してモデルをトレーニングした場合、逆拡散プロセスは猫か犬のどちらかを再構築する傾向があり、その中間はほとんどありません。実際には、トレーニングには膨大な量の画像が含まれ、プロンプトを使用して多様でユニークな出力を作成します。

U-Net モデルとして実装されたノイズ プレディクターは、画像のノイズ除去において重要な役割を果たします。 U-Net モデルは、もともと生物医学画像のセグメンテーション用に設計されたもので、潜在空間のノイズを推定し、画像から差し引くために使用されています。このプロセスは指定されたステップ数だけ繰り返され、ユーザー定義のパラメーターに従ってノイズが徐々に低減されます。ノイズ予測子は、最終的な画像生成をガイドする条件付けプロンプトの影響を受けます。

テキスト コンディショニングはコンディショニングの一般的な形式で、テキストのプロンプトを使用して画像生成プロセスをガイドします。プロンプト内の各単語は、CLIP トークナイザーによって分析され、768 値のベクトルに埋め込まれます。プロンプトでは最大 75 個のトークンを使用できます。 Stable Diffusion は、これらのプロンプトを、テキスト エンコーダからテキスト トランスフォーマを介して U-Net ノイズ プレディクタに供給することによって利用します。乱数発生器のシードを設定することで、潜在空間にさまざまな画像を生成できます。

このデモでは、SDXL 用の Pastel Anime LoRA を使用しました。このモデルは、Stable Diffusion XL の高解像度、低ランク適応モデルを表します。このモデルは、1,300 のグローバル ステップにわたって 1e-5 に設定された学習率と 24 のバッチ サイズで微調整されており、高品質のアニメ スタイルの画像で構成されるデータセットを使用しています。 Animagine XL から派生したこのモデルは、他のアニメスタイルの Stable Diffusion モデルと非常によく似ており、Danbooru タグを利用した画像生成を容易にします。

デモ

始める前に簡単なチェックを行います

!nvidia-smi

1.モデルを実行するために必要なパッケージとモジュールをインストールします

!pip install diffusers --upgrade
!pip install invisible_watermark transformers accelerate safetensors
!pip install -U peft

2.ライブラリをインポートする

import torch
from torch import autocast
from diffusers import StableDiffusionXLPipeline, EulerAncestralDiscreteScheduler

3.画像とセーフテンサーを生成するためのベースモデルを変数に指定します

base_model = "Linaqruf/animagine-xl"
lora_model_id = "Linaqruf/pastel-anime-xl-lora"
lora_filename = "pastel-anime-xl.safetensors"

4.次に、特定の構成で安定した拡散 XL モデルのパイプラインを初期化します。事前トレーニングされたモデルをロードし、モデルの計算に使用するトーチ データ タイプを指定します。さらに、float16 を使用すると、特に GPU でのメモリ使用量が削減され、計算が高速化されます。

pipe = StableDiffusionXLPipeline.from_pretrained(
    base_model,
    torch_dtype=torch.float16,
    use_safetensors=True,
    variant="fp16"
    )

5.拡散 XL パイプラインのスケジューラを更新し、計算を高速化するためにパイプライン オブジェクトを GPU に移動します。

pipe.scheduler = EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config)
pipe.to('cuda')

6.重りを載せる

pipe.load_lora_weights(lora_model_id, weight_name=lora_filename)

7.モデルを使用して魅力的なアニメ作品を制作する

prompt = "face focus, cute, masterpiece, best quality, 1girl, green hair, sweater, looking at viewer, upper body, beanie, outdoors, night, turtleneck"
negative_prompt = "lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry"

image = pipe(
    prompt,
    negative_prompt=negative_prompt,
    width=1024,
    height=1024,
    guidance_scale=12,
    target_size=(1024,1024),
    original_size=(4096,4096),
    num_inference_steps=50
    ).images[0]

image.save("anime_girl.png")

画像生成のプロンプトを提供する際には、読者の創造性を発揮することを強くお勧めします。

結論

この記事では、LoRA と安定拡散を使用してアニメ キャラクターを生成する方法を検討しました。 Stable Diffusion は、細かいディテール、さまざまなスタイル、制御された属性を備えた画像を生成できるため、アート、デザイン、エンターテイメントなどのさまざまなアプリケーションにとって価値のあるツールになります。

Gen AI の研究開発が進むにつれ、これらのモデルのさらなる革新と改良が期待されます。 LoRA と合わせた安定した普及は、間違いなく画像合成の状況を再構築し、創造性と表現の限界を押し広げるでしょう。これらの斬新なアプローチは、間違いなく今後数年間で私たちがデジタル画像を認識し、操作する方法に革命をもたらすでしょう。

記事をお読みいただければ幸いです。

参照

  • パステルアニメXLローラ
  • 安定拡散とは
  • 安定した拡散
  • 安定した拡散を蒸留する
  • Stable Diffusion XL 用の LoRA モデルのトレーニング