【Stable Diffusion】Hentai Diffusion 18の利用方法

【Stable Diffusion】Hentai Diffusion 18の利用方法 機械学習

「ckptをモデルとして読み込むことができない・・・」
「ckptファイルを変換することができない・・・」

このような場合には、この記事の内容が参考になります。
この記事では、Hentai Diffusion 18を利用する方法を解説しています。

本記事の内容

  • Hentai Diffusion 18とは?
  • Hentai Diffusion 18の利用方法
  • Hentai Diffusion 18の動作検証

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

Hentai Diffusion 18とは?

Hentai Diffusion 18は、次のモデルの最新(2022年12月末時点)バージョンです。

このバージョンについては、全くと言っていいほど情報がありません。
GitHubのページを見ても、どのような改善がなされたのかはわかりません。

GitHub – Delcos/Hentai-Diffusion: The official place for the best A.I.
https://github.com/Delcos/Hentai-Diffusion

ただ、モデルのサイズが17と比べると倍増しています。

サイズ容量の変化を見ると、小手先の改善とは思えません。
どのように変わったのかは、実際に検証してみるしかないですね。

とにかく、Hentai Diffusion 18については情報がほとんどない状態と言えます。

以上、Hentai Diffusion 18について説明しました。
次は、Hentai Diffusion 18の利用方法を説明します。

Hentai Diffusion 18の利用方法

Stable Diffusion web UI(AUTOMATIC1111版)を利用する場合は、GitHubページをご覧ください。
モデル開発者が、丁寧に解説してくれています。

Diffusersを利用する場合は、ちょっと手間がかかります。
それについて説明していきます。

まずは、Stable Diffusionを動かせる環境が必要となります。
Google Colabではなくローカル環境で動かす場合は、次の記事が参考になります。

上記記事に従えば、自ずとDiffusersをインストールします。

次に、モデルをダウンロードしましょう。
Deltaadams/HentaiDiffusion at main
https://huggingface.co/Deltaadams/HentaiDiffusion/tree/main

「HD-18.ckpt」をダウンロードします。

ファイルがダウンロードできたら、次はDiffusersから利用できるように変換しましょう。
ckptファイルをDiffusersで利用するための方法は、次の記事で解説しています。

しかし、上記記事の方法では上手くいきません。
スクリプトで変換を行うと、次のようなエラーが表示されます。

KeyError: 'state_dict'

結論から言うと、「HD-18.ckpt」はPickle形式のファイルではありません。
拡張子はckptとなっていますが、実体はSafetensors形式のファイルになります。

Safetensors形式については、次の記事で解説しています。

Safetensors形式であるから、変換スクリプトでエラーが出たのでしょう。
では、Safetensors形式のcheckpointをどうすればDiffusersで読み込めるのでしょうか?
正確には、Safetensors形式のcheckpointをDiffusersモデルにどうやって変換するのか?

この答えは、次の記事で説明しています。

実際に用いたコマンドは、以下。

python convert_diffusers20_original_sd.py ..\..\ckpt\HD-18.ckpt  ..\..\model\hd18  --v1 --reference_model runwayml/stable-diffusion-v1-5

「HD-18.ckpt」を変換すると次のように展開されます。
「model」ディレクトリの下に設置しているとします。

ここまで準備できたら、次のコードを試しましょう。

from diffusers import StableDiffusionPipeline
import torch

MODEL_ID = "./model/hd18"
DEVICE = "cuda"

pipe = StableDiffusionPipeline.from_pretrained(MODEL_ID, torch_dtype=torch.float16)
pipe = pipe.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"
image = pipe(prompt).images[0]

image.save("test.png")

上記コードを実行すると、次のような画像が生成されます。

そして、画像サイズは256 x 256となっています。
Safetensors形式を変換すると、このサイズがデフォルトになるようです。

そうだとしても、画像サイズを指定すれば何も問題ありません。
あと、Hentai Diffusionではネガティブプロンプトが用意されています。
https://huggingface.co/Deltaadams/HentaiDiffusion/resolve/main/Universal%20Negative%20Prompt%20Text.txt

これらの設定を加えて、再度コードを実行してみます。

image = pipe(
    prompt,
    width=512,
    height=512,
    negative_prompt=negative_prompt
).images[0]

image.save("test.png")

実行すると、512 x 512のサイズで次のような画像が作成されます。
(256 x 256の画像生成時と同じSEEDを利用)

この結果を見ると、Hentai Diffusion 18は17よりもレベルアップしていると感じます。
ただ、たまたまガチャが当たっただけかもしれません。

そのため、動作検証を行って確認します。

以上、Hentai Diffusion 18の利用方法を説明しました。
次は、Hentai Diffusion 18の動作検証を説明します。

Hentai Diffusion 18の動作検証

Hentai Diffusion 17と同じプロンプトで画像を作成します。
公式のネガティブプロンプトもありです。

"best quality, {{{masterpiece}}}, 1girl, leaf hair, black turtleneck, autumn background, a short white skirt, standing"

結果は、次のような画像となりました。

17と比べて、明らかに変わった点があります。
女性のスタイルが、グラマーではなくなりました。

17だと、同じプロンプトでも十分にグラマーでした。
Hentai Diffusionという名前からは、そっちの方が個人的にはしっくりきていました。

ただ、全体としてはレベルアップしているように感じます。
特に、構図が17のようにワンパターンではなくなっているようです。
構図が良いモデルとしては、TrinArt(でりだモデル)があります。

その点で言うと、Hentai Diffusion 18はTrinArtに近くなったような印象を受けます。
あくまで、個人の主観に過ぎませんけどね。

構図は良くなったとして、Hentai Diffusionは名前負けなのでしょうか?
いえいえ、Hentai Diffusion 18は確実にパワーアップしていました。

ちょっと過激であるため、別のところに公開しています。
避難所

さらにHentai Diffusionらしさを出した表現した画像は、以下で確認可能です。

その1
その2

Hentai Diffusionと言うモデル名に相応しいと思いませんか?
どうやら、Hentai Diffusion 18ではプロンプトによる制御が細かくできるようです。

これらの結果を見ると、モデルサイズが倍増したのは納得できます。
画質が向上したことに加えて、プロンプトによる制御が格段に向上しています。

以上、Hentai Diffusion 18の動作検証を説明しました。

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