【Stable Diffusion】TrinArtキャラクターモデルを使う方法

【Stable Diffusion】TrinArtキャラクターモデルを使う方法 機械学習

「 TrinArt Characters model v1の利用方法がわからない・・・」
「TrinArtキャラクターモデルの情報が少なくて困っている・・・」

このような場合には、この記事の内容が参考になります。
この記事では、TrinArtキャラクターモデルを使う方法を解説しています。

本記事の内容

  • TrinArtキャラクターモデルとは?
  • TrinArtキャラクターモデルの検証環境
  • TrinArtキャラクターモデルの利用方法

それでは、上記に沿って解説していきます。

TrinArtキャラクターモデルとは?

TrinArtキャラクターモデルについては、中の人の意見を見てみましょう。

上記ツイートから、2つのモデルが存在することを確認できます。

  • TrinArtで試験運転中の1920万枚訓練済のキャラクターモデル
  • HuggingFaceにもアップロードしたとりんさまアートv2モデル

前者のキャラクターモデルが、ここで言うTrinArtキャラクターモデルになります。
TrinArtとは、次のページで提供されているサービスです。

TrinArt とりんさまアート
https://ai-novel.com/art.php

プレミアム登録は、もちろん有償になります。

つまり、TrinArtキャラクターモデルを無償で利用できませんでした。
それに対して、後者のとりんさまアートv2モデルが無料公開されていたという状況です。

naclbit/trinart_stable_diffusion_v2 · Hugging Face
https://huggingface.co/naclbit/trinart_stable_diffusion_v2

とりんさまアートv2モデルは、Stable Diffusionのモデルに4万枚の画像を追加で学習させたとのことです。
でも、1920万枚と4万枚では桁が全く異なりますね。

しかし、なんとその1920万を学習させたTrinArtキャラクターモデルがオープンソースになりました。

有償でしか利用できなかったTrinArtキャラクターモデルが、無料で利用できるようになったということです。
そのモデルの正式名称は、「Stable Diffusion TrinArt Characters model v1」になります。

以上、TrinArtキャラクターモデルについて説明しました。
次は、TrinArtキャラクターモデルの検証環境を説明します。

TrinArtキャラクターモデルの検証環境

Stable Diffusionを含むその周辺の動きは、早すぎます。
「関連ライブラリのバージョン違いで動かない」ということも普通にあり得るでしょう。

そのこともあり、今回TrinArtキャラクターモデルを検証した環境を記載しておきます。
システム要件としては、Stable Diffusionが動くことが最重要ポイントです。

基本的には、次の記事の内容で環境を構築しています。

TrinArtキャラクターモデルの検証で利用したコマンド一覧です。

pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu116
pip install transformers
pip install diffusers
pip install ftfy

各自の環境により、GPU版PyTorchのインストールコマンドは異なります。
詳細は、次の記事で説明しています。

すべてインストールした後のインストール済みのパッケージ状況は、以下となります。

> pip list
Package            Version
------------------ ------------
certifi            2022.9.24
charset-normalizer 2.1.1
colorama           0.4.5
diffusers          0.5.1
filelock           3.8.0
ftfy               6.1.1
huggingface-hub    0.10.1
setuptools         65.5.0
tokenizers         0.13.1
torch              1.12.1+cu116
torchaudio         0.12.1+cu116
torchvision        0.13.1+cu116
tqdm               4.64.1
transformers       4.23.1
typing_extensions  4.4.0
urllib3            1.26.12
wcwidth            0.2.5
wheel              0.37.1
zipp               3.9.0

TrinArtキャラクターモデルが動かない場合は、上記と比較してみてください。
diffusersのバージョンが大きく異なれば、動かない可能性は大いにあります。

以上、TrinArtキャラクターモデルの検証環境を説明しました。
次は、TrinArtキャラクターモデルの利用方法を説明します。

TrinArtキャラクターモデルの利用方法

TrinArtキャラクターモデルは、ckptがHugging Faceで公開されています。

naclbit/trinart_characters_19.2m_stable_diffusion_v1 at main
https://huggingface.co/naclbit/trinart_characters_19.2m_stable_diffusion_v1/tree/main

「trinart_characters_it4_v1.ckpt」をダウンロードしましょう。
ダウンロードできたら、このckptをもとにDiffusers用のモデルを作成します。

ckptからDiffusers用のモデルを作成する方法は、次の記事で解説しています。

Python仮想環境で変換用のプロジェクトを作成した方がよいでしょうね。
そして、変換作業の実行の際に用いたのは次のコマンドです。

python .\convert_original_stable_diffusion_to_diffusers.py --checkpoint_path "..\..\ckpt\trinart_characters_it4_v1.ckpt" --dump_path "..\..\model\trinart"

上記コマンドに成功すると、次のようなモデルを確認できます。

スケジュール関数を確認しておきます。

scheduler/scheduler_config.json

{
  "_class_name": "PNDMScheduler",
  "_diffusers_version": "0.4.2",
  "beta_end": 0.012,
  "beta_schedule": "scaled_linear",
  "beta_start": 0.00085,
  "num_train_timesteps": 1000,
  "set_alpha_to_one": false,
  "skip_prk_steps": true,
  "steps_offset": 1,
  "trained_betas": null
}

「PNDMScheduler」と記述されています。
したがって、TrinArtキャラクターモデルを動かすコードは以下となります。

import torch
from diffusers import StableDiffusionPipeline, PNDMScheduler
from torch import autocast

MODEL_PATH = "./model/trinart"
DEVICE = "cuda"

pipe = StableDiffusionPipeline.from_pretrained(
    MODEL_PATH,
    torch_dtype=torch.float16,  # GPUに余裕があるなら「torch.float32」
    scheduler=PNDMScheduler(
        beta_start=0.00085,
        beta_end=0.012,
        beta_schedule='scaled_linear',
        num_train_timesteps=1000,
    ),
).to(DEVICE)

prompt = "cute girl with pink hair | | very very anime!!!, fine - face, symmetry face, fine details. anime. realistic shaded lighting poster by sakimichan, kidmo, trending on pixiv, magali villeneuve, artgerm, jeremy lipkin and michael garmash and rob rey"


# ====ここから====
def null_safety(images, **kwargs):
    return images, False


pipe.safety_checker = null_safety
# ====ここまで====

with autocast(DEVICE):
    image = pipe(prompt, guidance_scale=7.5)["sample"][0]
    image.save("test.png")

上記を実行した結果、次のような画像が作成されればOKです。

test.png

これは、たまたまうまく行ったケースです。
TrinArtキャラクターモデルで生成した画像は、顔の一部が潰れてしまうことが多いです。
特に目の付近が、イマイチ残念に感じます。

プロンプトを変更すれば、それが改善される可能性はあります。
しかし、もっと簡単な方法としてGFPGANをオススメします。

GFPGANを利用すれば、顔が簡単に綺麗になります。

単純に綺麗にするだけではなく、高画質にもしてくれます。
次の変換なんて、モンスターから美女への変換ですからね。

したがって、GFPGANはセットで利用することを推奨しておきます。

なお、NSFWフィルターを回避するために一工夫しています。
NSFWフィルターを回避する方法については、次の記事で解説しています。

以上、TrinArtキャラクターモデルの利用方法を説明しました。

タイトルとURLをコピーしました