diffusers を使った画像生成: Python で AI アートを作成しよう!

2024年8月21日

Yntec/SCMIX_NightSkyMeina

初めに

今回は、Pythonのdiffusersライブラリを使って、AI画像生成に挑戦するね

この記事では、diffusers ライブラリを使って画像を生成する方法を解説します。さらに、diffusers で利用できる様々な画像生成モデルも紹介します。
diffusers を使うことで、美しい風景や可愛いキャラクターイラストなど、あなただけのオリジナル画像を作成することができます。作成した画像の中には、商用利用可能なものも含まれます。

diffusersについて

diffusers は、Hugging Face が提供する Python ライブラリです。このライブラリを使えば、拡散モデルと呼ばれる画像生成アルゴリズムを用いて、画像を簡単に生成できます。

Stable Diffusionとdiffusersの違い

一般にオープンソースとして知られている画像生成AIはStable Diffusionの方が有名だと思いますので、まず、Stable Diffusionとdiffusersの違いを解説します。

Stable Diffusion

オープンソースの画像生成 AI として、Stable Diffusion は有名ですが、実は Stable Diffusion には2つの意味があります。

  • Stable Diffusionコアモデル(狭議のStable Diffusion)
    拡散モデルと呼ばれる画像生成アルゴリズムで構築された、画像生成モデルです。狭議のStable Diffusionは数ある画像生成モデルの1つになります。

Stable Diffusionの仕組み

  • Stable Diffusionエコシステム(広議のStable Diffusion)
    Stable Diffusionの人気と応用の広がりにより開発された、GUIの画像生成プラットフォームです。Stable Diffusionはオープンソースなので様々な派生ツールがあり、中でも有名なものが、Stable Diffusion Web UIです

diffusers

diffusersは様々なAI画像生成モデルをpythonプログラムから実行するためのライブラリです。diffusersはStable Diffusion画像生成モデルとStable Diffusionから派生した画像生成モデル、および、それ以外の画像生成モデルを実行することが出来ます。
注)Stable Diffusion Web UIでも、Stable Diffusion以外のモデルも扱える

Stable Diffusionとdiffusersの使い分けについて

  • GUI ツールで画像を生成したい場合は、Stable Diffusion Web UI がおすすめです。
  • プログラムから画像を生成したい場合は、diffusers がおすすめです。プログラムで画像生成モデルを操作できるようになると、数百枚の画像を一度に生成することも可能です。

diffusersの実行環境

diffusers を実行するには、GPU が必要です。CPU でも動作しますが、画像生成に非常に時間がかかってしまうため、GPU を搭載した PC が実質必須となります。

GPUとは

CPUはコンピューターの計算を行う頭脳として良く知れ渡っていますが、GPUは聞きなれない方もいるかと思います。GPU(Graphics Processing Unit、グラフィック処理ユニット)は、もともとコンピューターゲームや動画編集など、グラフィック処理を高速化するために開発されたチップです。しかし、近年ではその並列処理能力の高さから、機械学習やディープラーニングなどの分野でも広く利用されるようになりました。
GPUは結構高額で、安いものだと3万円程度ですが、それなりのスペックを求めると10万円以上の値段になります。

Google Colab

前述の通り、diffusersの実行には高額のGPUが必要となります。そこでお薦めするのがGoogle Colabです。Google Colab(Google Colaboratory)は、Googleが提供する無料のクラウドベースのJupyter Notebook環境です。ブラウザ上でコードを実行し、機械学習モデルの開発、データ分析、データ可視化など、様々なタスクを行うことができます。

簡単に言うと、Google Colabは機械学習に必要なGPUと、ライブラリが一式揃った無料の環境です。

Google Colab

diffusersの使い方

環境構築:Google Colabの準備

Google Colab は、Google アカウントがあれば利用できます。Google アカウントにログインした Chrome から以下の URL にアクセスしてください。

https://colab.research.google.com/

新規ノートブックの作成

  1. https://colab.research.google.com/にアクセスすると以下のプロンプトが出るので、[ノートブックを新規作成]を押下します。
    diffusersの使い方 新規ノートブックの作成

  2. 新規ノートブックが作成されるので、左上のノートブック名を選択して任意の名前を付けます。
    diffusersの使い方 新規ノートブックの作成

GPUの選択

新規作成したノートブック環境はCPUを利用する設定になっているのでGPUを設定する設定に変更します。

  1. [ランタイム] → [ランタイムのタイプ変更]を選択します。
    diffusersの使い方 GPUの選択

  2. ハードウェア アクセラレータから[T4 GPU]を選択します。
    diffusersの使い方 GPUの選択
    ※ 無料版のGoogle Colabで選択出来るGPUは[T4 GPU]のみになります。もっと性能の良いGPUを利用したい場合は、有料版のGoogle Colabを契約して下さい。

diffusersのインストール

  1. [コーディングを開始するか、AIで生成します]の欄に以下のコマンドを入力します。

    pip install --upgrade git+https://github.com/huggingface/diffusers.git transformers accelerate scipy

    diffusersの使い方

  2. Shift+Enterを押下してコードを実行します。
    5分くらい時間がかかります。以下のメッセージが表示されたらdiffusersのインストールは成功です。

    Successfully installed accelerate-0.33.0 diffusers-0.30.0.dev0 nvidia-cublas-cu12-12.1.3.1 nvidia-cuda-cupti-cu12-12.1.105 nvidia-cuda-nvrtc-cu12-12.1.105 nvidia-cuda-runtime-cu12-12.1.105 nvidia-cudnn-cu12-8.9.2.26 nvidia-cufft-cu12-11.0.2.54 nvidia-curand-cu12-10.3.2.106 nvidia-cusolver-cu12-11.4.5.107 nvidia-cusparse-cu12-12.1.0.106 nvidia-nccl-cu12-2.20.5 nvidia-nvjitlink-cu12-12.5.82 nvidia-nvtx-cu12-12.1.105 scipy-1.14.0 transformers-4.43.3

AI画像の生成

  1. [+コード]ボタンを押下し、新規の[コーディングを開始するか、AIで生成します]の欄に以下のコマンドを入力します。
from diffusers import DiffusionPipeline
import torch
import datetime

def create_image(model_name, prompt, negative_prompt, gen_num):
  pipe = DiffusionPipeline.from_pretrained(model_name)
  pipe = pipe.to("cuda")

  for i in range(0, gen_num):
    file_name = make_file_name(model_name)
    print(f'{i+1}つ目の画像を生成します。ファイル名:{file_name}')
    images = pipe(prompt,negative_prompt=negative_prompt, num_inference_steps=20).images
    images[0].save(file_name)
  print('画像生成が正常終了しました。')

def make_file_name(model_name):
  t_delta = datetime.timedelta(hours=9)
  JST = datetime.timezone(t_delta, 'JST')
  now = datetime.datetime.now(JST)
  return f"{model_name.replace('/', '_')}_{now.strftime('%Y%m%d%H%M%S')}.png"

create_image(
  'Yntec/CetusRemix',
  'anime, masterpiece, a portrait of a girl, good pupil, 4k, detailed, ponytail,from below,looking at viewer,double eyelid eyes,smile,ponytail,school uniform,medium breasts',
  'deformed, blurry, bad anatomy, bad pupil, disfigured, poorly drawn face, mutation, mutated, extra limb, ugly, poorly drawn hands, bad hands, fused fingers, messy drawing, broken legs censor, low quality, mutated hands and fingers, long body, mutation, poorly drawn, bad eyes, ui, error, missing fingers, fused fingers, one hand with more than 5 fingers, one hand with less than 5 fingers, one hand with more than 5 digit, one hand with less than 5 digit, extra digit, fewer digits, fused digit, missing digit, bad digit, liquid digit, long body, uncoordinated body, unnatural body, lowres, jpeg artifacts, 3d, cg, text, japanese kanji',
  10
)

diffusersの使い方 AI画像の生成

  1. Shift+Enterを押下してコードを実行します。
    10分くらい時間がかかります。「画像生成が正常終了しました。」のメッセージが出力されれば画像生成は成功です。
    diffusersの使い方 AI画像の生成

生成された画像の確認

  1. 画面左のフォルダアイコンを選択すると生成されたファイルが表示されます。
    diffusersの使い方 生成された画像の確認

  2. ファイルをダブルクリックすると生成された画像を確認出来ます
    diffusersの使い方 生成された画像の確認

繰り返し画像を生成する方法

画像を再度作成したい場合は、以下のコマンドを実行して下さい。
1回目はライブラリのインストールが発生するので画像生成に時間がかかりますが、2回目以降の画像生成は1画像あたり5秒くらいで生成されます。

create_image(
  'Yntec/CetusRemix',
  'anime, masterpiece, a portrait of a girl, good pupil, 4k, detailed, ponytail,from below,looking at viewer,double eyelid eyes,smile,ponytail,school uniform,medium breasts',
  'deformed, blurry, bad anatomy, bad pupil, disfigured, poorly drawn face, mutation, mutated, extra limb, ugly, poorly drawn hands, bad hands, fused fingers, messy drawing, broken legs censor, low quality, mutated hands and fingers, long body, mutation, poorly drawn, bad eyes, ui, error, missing fingers, fused fingers, one hand with more than 5 fingers, one hand with less than 5 fingers, one hand with more than 5 digit, one hand with less than 5 digit, extra digit, fewer digits, fused digit, missing digit, bad digit, liquid digit, long body, uncoordinated body, unnatural body, lowres, jpeg artifacts, 3d, cg, text, japanese kanji',
  10
)

コマンドの意味

パラメタ1 : モデル名(※指定出来るモデル名については後述)
パラメタ2 : 画像生成の呪文
パラメタ3 : 画像生成の呪文(否定的なプロンプト)
パラメタ4 : 画像生成数

画像生成の呪文

画像生成の呪文は色々なサイトで紹介されているので、自分なりの呪文を見つけてください。

【画像生成呪文の参考サイト】
https://aimania2024.com/ai-illust-prompt/
https://ai-illust-kouryaku.com/?p=8447

diffusersで生成された画像

上記プログラムで生成された画像は以下となります。
diffusersで生成された画像

diffusersで利用出来る画像生成モデルの紹介

Hugging Face

diffusersのモデルはHugging Faceで配布されています。

Hugging Face は、機械学習モデル、データセット、そしてそれらを使用するためのツールを共有するためのプラットフォームです。機械学習研究者や開発者にとって、非常に重要な役割を果たしています。

Hugging Face の主な特徴:

  • モデルハブ: 数千もの事前学習済み機械学習モデルが公開されています。自然言語処理、画像認識、音声認識、時系列分析など、様々な分野のモデルが利用できます。
  • データセットハブ: 様々な分野のデータセットが公開されています。モデルの学習や評価に使用できます。
  • ツール: モデルを学習、評価、デプロイするためのツールを提供しています。Transformers ライブラリや、データセットの処理やモデルの微調整を行うための様々なツールが用意されています。
  • コミュニティ: 活発なコミュニティがあり、ユーザー同士が情報を共有したり、質問をしたりすることができます。フォーラム、Discord サーバー、ブログなど、様々な方法でコミュニティに参加できます。
  • オープンソース: Hugging Face のほとんどのツールはオープンソースで公開されています。誰でも自由に利用、改変、配布できます。

diffusersで利用出来る画像生成モデルの例

以下に人気の画像生成モデルをご紹介致します。人気の有無はダウンロード数で判断致しました。

モデル名 生成画像 説明
Yntec/CetusRemix Yntec/CetusRemix CetusRemix は、Cetus 3.5 と Cetus 4 モデルを組み合わせて作成されたモデルです。Cetus モデルは、特に画像の品質とディテールに優れていることで知られています。そのため、CetusRemix も高品質な画像を生成することが期待できます。
Yntec/DucHaitenGODofSIMP Yntec/DucHaitenGODofSIMP このモデルは、特にアニメスタイルの画像生成に特化しています。DucHaitenGODofSIMP は、詳細なディテールと鮮やかな色調を持つ、高品質な画像を生成することができます。
Yntec/Epsilon_Naught Yntec/Epsilon_Naught このモデルは、ZootVisionEpsilonV5 と LiberteRedmond という2つのモデルを組み合わせて、美的品質とスタイルを最大限に引き出したものです。両方のモデルの強みを活かしており、より幅広いスタイルの画像を生成することができます。
Yntec/Ponygraphy Yntec/Ponygraphy このモデルは、特にポニーの画像生成に特化しており、高品質なポニーのイラストを生成することができます。
Yntec/Chip_n_DallE Yntec/Chip_n_DallE これは、ABagOfChips モデル(Kitsch-In-Sync v2 と GoodLife を含む)に、DallEAnime モデルを組み合わせて、より詳細な構図を生成できるようにしたものです。
Yntec/mistoonAnime2 Yntec/mistoonAnime2 Original page: https://civitai.com/models/24149?modelVersionId=108545
Yntec/SCMIX_NightSkyMeina Yntec/SCMIX_NightSkyMeina これは、scmix_NSMのsafetensorsバージョンで、kl-f8-anime2 VAEが組み込まれています。
Yntec/RevAnimatedV2Rebirth Yntec/RevAnimatedV2Rebirth Check the license at the original page: https://civitai.com/models/7371?modelVersionId=428862
Yntec/DreamShaperRemix Yntec/DreamShaperRemix Dream Shaper 8 のリミックス。DreamShaperのすべてのバージョンで何百ものミックスを作成した中で最高のもの。
Yntec/MangledMerge3_768 Yntec/MangledMerge3_768 推論API用ののモデルの768バージョン
Yntec/lametta Yntec/lametta MoistMixV2VAEを焼き付けたlametta v1602。
Yntec/epiCCartoon Yntec/epiCCartoon

This model with the Color101VAE baked in. Original page: https://civitai.com/models/230529?modelVersionId=260169
Yntec/iffyMix Yntec/iffyMix

I... huh, I think I merged the YiffyMix 3.1 and nuipenimix 2.0 models or something like that?

画像生成モデルの比較

上記でご紹介したモデルそれぞれで画像を生成してみました。
比較のため、画像生成に用いる呪文は同じものを使いました。

モデル生成に使用した呪文

  • プロンプト:anime, masterpiece, a portrait of a girl, good pupil, 4k, detailed, ponytail,from below,looking at viewer,double eyelid eyes,smile,ponytail,school uniform,medium breasts
  • ネガティブプロンプト:deformed, blurry, bad anatomy, bad pupil, disfigured, poorly drawn face, mutation, mutated, extra limb, ugly, poorly drawn hands, bad hands, fused fingers, messy drawing, broken legs censor, low quality, mutated hands and fingers, long body, mutation, poorly drawn, bad eyes, ui, error, missing fingers, fused fingers, one hand with more than 5 fingers, one hand with less than 5 fingers, one hand with more than 5 digit, one hand with less than 5 digit, extra digit, fewer digits, fused digit, missing digit, bad digit, liquid digit, long body, uncoordinated body, unnatural body, lowres, jpeg artifacts, 3d, cg, text, japanese kanji

画像生成結果

モデル 生成画像1 生成画像2 生成画像3
Yntec/CetusRemix Yntec/CetusRemix Yntec/CetusRemix Yntec/CetusRemix
Yntec/DucHaitenGODofSIMP Yntec/DucHaitenGODofSIMP Yntec/DucHaitenGODofSIMP Yntec/DucHaitenGODofSIMP
Yntec/Epsilon_Naught Yntec/Epsilon_Naught Yntec/Epsilon_Naught Yntec/Epsilon_Naught
Yntec/Ponygraphy Yntec/Ponygraphy Yntec/Ponygraphy Yntec/Ponygraphy
Yntec/Chip_n_DallE Yntec/Chip_n_DallE Yntec/Chip_n_DallE Yntec/Chip_n_DallE
Yntec/mistoonAnime2 Yntec/mistoonAnime2 Yntec/mistoonAnime2 Yntec/mistoonAnime2
Yntec/SCMIX_NightSkyMeina Yntec/SCMIX_NightSkyMeina Yntec/SCMIX_NightSkyMeina Yntec/SCMIX_NightSkyMeina
Yntec/RevAnimatedV2Rebirth Yntec/RevAnimatedV2Rebirth Yntec/RevAnimatedV2Rebirth Yntec/RevAnimatedV2Rebirth
Yntec/DreamShaperRemix Yntec/DreamShaperRemix Yntec/DreamShaperRemix Yntec/DreamShaperRemix
Yntec/MangledMerge3_768 Yntec/MangledMerge3_768 Yntec/MangledMerge3_768 Yntec/MangledMerge3_768
Yntec/lametta Yntec/lametta Yntec/lametta Yntec/lametta
Yntec/GoFish Yntec/GoFish Yntec/GoFish Yntec/GoFish
Yntec/epiCCartoon Yntec/epiCCartoon Yntec/epiCCartoon Yntec/epiCCartoon
Yntec/iffyMix Yntec/iffyMix Yntec/iffyMix Yntec/iffyMix

同じ呪文でも、利用する画像生成モデルによって、全く異なるタッチのイラストが生成されました。
上記を参考に好みに合ったモデルを探してみて頂ければと思います。

diffusersの画像生成の注意点

利用可能時間

無料版のGoogle Colabのセッション利用時間は12時間です。
それ以上利用する場合は、セッションを新たに作成してStable Diffusionのインストールから必要です。

保存出来る画像数

Google Colabのディスク領域は100G程度です。また、Google Colabのディスク領域は消える可能性があるので、生成した画像はローカルPCやGoogle Driveにダウンロードして保存して下さい。

著作権の遵守

以下のことには利用しないでください。

  • 商用のサービスとして直接提供すること
  • 創作業界に悪影響を及ぼすこと
  • デジタル贋作 (Digital Forgery)
    特に既存のキャラクターは公開しないでください
  • 他人の作品を無断でImage-to-Imageすること
  • わいせつ物を頒布すること
  • 事実に基づかないことを事実のように語ること

最後に

この記事が皆さまのお役に少しでも立てたら幸いです。
ルールを守って楽しくAI画像生成をお楽しみください。

ルールを守ってAI画像生成を楽しもう♡