Skip to content

ClasCat® AI Research

クラスキャット – 生成 AI, AI エージェント, MCP

Menu
  • ホーム
    • ClassCat® AI Research ホーム
    • クラスキャット・ホーム
  • OpenAI API
    • OpenAI Python ライブラリ 1.x : 概要
    • OpenAI ブログ
      • GPT の紹介
      • GPT ストアの紹介
      • ChatGPT Team の紹介
    • OpenAI platform 1.x
      • Get Started : イントロダクション
      • Get Started : クイックスタート (Python)
      • Get Started : クイックスタート (Node.js)
      • Get Started : モデル
      • 機能 : 埋め込み
      • 機能 : 埋め込み (ユースケース)
      • ChatGPT : アクション – イントロダクション
      • ChatGPT : アクション – Getting started
      • ChatGPT : アクション – アクション認証
    • OpenAI ヘルプ : ChatGPT
      • ChatGPTとは何ですか?
      • ChatGPT は真実を語っていますか?
      • GPT の作成
      • GPT FAQ
      • GPT vs アシスタント
      • GPT ビルダー
    • OpenAI ヘルプ : ChatGPT > メモリ
      • FAQ
    • OpenAI ヘルプ : GPT ストア
      • 貴方の GPT をフィーチャーする
    • OpenAI Python ライブラリ 0.27 : 概要
    • OpenAI platform
      • Get Started : イントロダクション
      • Get Started : クイックスタート
      • Get Started : モデル
      • ガイド : GPT モデル
      • ガイド : 画像生成 (DALL·E)
      • ガイド : GPT-3.5 Turbo 対応 微調整
      • ガイド : 微調整 1.イントロダクション
      • ガイド : 微調整 2. データセットの準備 / ケーススタディ
      • ガイド : 埋め込み
      • ガイド : 音声テキスト変換
      • ガイド : モデレーション
      • ChatGPT プラグイン : イントロダクション
    • OpenAI Cookbook
      • 概要
      • API 使用方法 : レート制限の操作
      • API 使用方法 : tiktoken でトークンを数える方法
      • GPT : ChatGPT モデルへの入力をフォーマットする方法
      • GPT : 補完をストリームする方法
      • GPT : 大規模言語モデルを扱う方法
      • 埋め込み : 埋め込みの取得
      • GPT-3 の微調整 : 分類サンプルの微調整
      • DALL-E : DALL·E で 画像を生成して編集する方法
      • DALL·E と Segment Anything で動的マスクを作成する方法
      • Whisper プロンプティング・ガイド
  • Gemini API
    • Tutorials : クイックスタート with Python (1) テキスト-to-テキスト生成
    • (2) マルチモーダル入力 / 日本語チャット
    • (3) 埋め込みの使用
    • (4) 高度なユースケース
    • クイックスタート with Node.js
    • クイックスタート with Dart or Flutter (1) 日本語動作確認
    • Gemma
      • 概要 (README)
      • Tutorials : サンプリング
      • Tutorials : KerasNLP による Getting Started
  • Keras 3
    • 新しいマルチバックエンド Keras
    • Keras 3 について
    • Getting Started : エンジニアのための Keras 入門
    • Google Colab 上のインストールと Stable Diffusion デモ
    • コンピュータビジョン – ゼロからの画像分類
    • コンピュータビジョン – 単純な MNIST convnet
    • コンピュータビジョン – EfficientNet を使用した微調整による画像分類
    • コンピュータビジョン – Vision Transformer による画像分類
    • コンピュータビジョン – 最新の MLPモデルによる画像分類
    • コンピュータビジョン – コンパクトな畳込み Transformer
    • Keras Core
      • Keras Core 0.1
        • 新しいマルチバックエンド Keras (README)
        • Keras for TensorFlow, JAX, & PyTorch
        • 開発者ガイド : Getting started with Keras Core
        • 開発者ガイド : 関数型 API
        • 開発者ガイド : シーケンシャル・モデル
        • 開発者ガイド : サブクラス化で新しい層とモデルを作成する
        • 開発者ガイド : 独自のコールバックを書く
      • Keras Core 0.1.1 & 0.1.2 : リリースノート
      • 開発者ガイド
      • Code examples
      • Keras Stable Diffusion
        • 概要
        • 基本的な使い方 (テキスト-to-画像 / 画像-to-画像変換)
        • 混合精度のパフォーマンス
        • インペインティングの簡易アプリケーション
        • (参考) KerasCV – Stable Diffusion を使用した高性能画像生成
  • TensorFlow
    • TF 2 : 初級チュートリアル
    • TF 2 : 上級チュートリアル
    • TF 2 : ガイド
    • TF 1 : チュートリアル
    • TF 1 : ガイド
  • その他
    • 🦜️🔗 LangChain ドキュメント / ユースケース
    • Stable Diffusion WebUI
      • Google Colab で Stable Diffusion WebUI 入門
      • HuggingFace モデル / VAE の導入
      • LoRA の利用
    • Diffusion Models / 拡散モデル
  • クラスキャット
    • 会社案内
    • お問合せ
    • Facebook
    • ClassCat® Blog
Menu

Keras 2 : ガイド : KerasCV – Stable Diffusion を使用した高性能画像生成

Posted on 12/23/202212/24/2022 by Sales Information

Keras 2 : ガイド : KerasCV – Stable Diffusion を使用した高性能画像生成 (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 12/23/2022 (keras 2.11.0)

* 本ページは、Keras の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

  • High-performance image generation using Stable Diffusion in KerasCV (Author : fchollet, lukewood, divamgupta ; Created : 2022/09/25)

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

クラスキャット 人工知能 研究開発支援サービス ★ 無料 Web セミナー開催中 ★

◆ クラスキャットは人工知能・テレワークに関する各種サービスを提供しております。お気軽にご相談ください :

  • 人工知能研究開発支援
    1. 人工知能研修サービス(経営者層向けオンサイト研修)
    2. テクニカルコンサルティングサービス
    3. 実証実験(プロトタイプ構築)
    4. アプリケーションへの実装

  • 人工知能研修サービス

  • PoC(概念実証)を失敗させないための支援

  • テレワーク & オンライン授業を支援
◆ 人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。スケジュール。
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
  • ウェビナー運用には弊社製品「ClassCat® Webinar」を利用しています。

◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
E-Mail:sales-info@classcat.com  ;  WebSite: https://www.classcat.com/  ;  Facebook

 

 

Keras 2 : ガイド : KerasCV – Stable Diffusion を使用した高性能画像生成

Description : KerasCV の StableDiffusion モデルを使用して新しい画像を生成する。

 

概要

このガイドでは、stability.ai のテキスト-to-画像変換モデル, Stable Diffusion の KerasCV 実装を使用して、テキストプロンプトに基づいて新規の画像を生成する方法を示します。

Stable Diffusion は強力で、オープンソースなテキスト-to-画像生成モデルです。テキストプロンプトから画像を簡単に生成することを可能にする複数のオープンソース実装がありますが、KerasCV のものは幾つかの明白な利点を提供します。これらは XLA コンパイル と 混合精度 のサポートを含み、これらは一緒に最先端の生成速度を実現します。

このガイドでは、KerasCV の Stable Diffusion 実装を探求し、これらの強力な性能ブーストを使用する方法を示し、そしてそれらが提供する性能の利点をし調べます。

開始するため、2, 3 の依存関係をインストールして、幾つかのインポートを整理しましょう :

!pip install --upgrade keras-cv
import time
import keras_cv
from tensorflow import keras
import matplotlib.pyplot as plt

 

イントロダクション

最初にトピックを説明してからそれを実装する方法を示す、殆どのチュートリアルとは違い、テキスト-to-画像生成では伝えるよりも見せるほうが簡単です。

Check out the power of keras_cv.models.StableDiffusion().

First, we construct a model:

model = keras_cv.models.StableDiffusion(img_width=512, img_height=512)

Next, we give it a prompt:

images = model.text_to_image("photograph of an astronaut riding a horse", batch_size=3)


def plot_images(images):
    plt.figure(figsize=(20, 20))
    for i in range(len(images)):
        ax = plt.subplot(1, len(images), i + 1)
        plt.imshow(images[i])
        plt.axis("off")


plot_images(images)
25/25 [==============================] - 19s 317ms/step

Pretty incredible!

But that’s not all this model can do. Let’s try a more complex prompt:

images = model.text_to_image(
    "cute magical flying dog, fantasy art, "
    "golden color, high quality, highly detailed, elegant, sharp focus, "
    "concept art, character concepts, digital painting, mystery, adventure",
    batch_size=3,
)
plot_images(images)
25/25 [==============================] - 8s 316ms/step

可能性は文字通り無限です (あるいは少なくとも Stable Diffusion の潜在的多様体の境界まで及びます)。

 

Wait, how does this even work?

この時点で貴方が期待するかもしれないものとは違い、Stable Diffusion は実際にはマジックで動くわけではありません。それは一種の「潜在的拡散モデル」です。Let’s dig into what that means.

貴方は 超解像度 の考えに馴染みがあるかもしれません : 入力画像をノイズ除去して — それによってより高解像度版に変換するために深層学習モデルを訓練することが可能です。深層学習モデルはノイズのある、低解像度な入力から失われた情報を魔術的にリカバーすることによってこれを行なうのではありません — そうではなく、モデルは訓練データ分布を使用して入力が与えられたときに最尤な視覚的な詳細という幻覚を見せます (hallucinate)。超解像度の詳細を学習するには、以下の Keras.io チュートリアルを確認できます :

  • Image Super-Resolution using an Efficient Sub-Pixel CNN ( Efficient Sub-Pixel CNN を使用した画像超解像)
  • Enhanced Deep Residual Networks for single-image super-resolution

このアイデアを突き詰めれば、貴方は尋ね始めるかもしれません — そのようなモデルを純粋なノイズ上で実行したらどうなるのだろう?するとモデルは「ノイズを除去」してまったく新しい画像の幻覚を見せ始めるでしょう。このプロセスを複数回繰り返すことにより、ノイズの小さなパッチを段階的に明瞭で高解像度な人工的な画像に変えることができます。

これは、2020 年の High-Resolution Image Synthesis with Latent Diffusion Models で提案された、潜在的拡散の主要なアイデアです。拡散を深く理解するためには、Keras.io チュートリアルの Denoising Diffusion Implicit Models (ノイズ除去暗黙モデル) を確認できます。

そして、潜在的拡散からテキスト-to-画像変換システムに進むには、依然として一つの主要な機能を追加する必要があります : プロンプト・キーワードを通して生成された視覚的コンテンツを制御する機能です。これは古典的な深層学習テクニックである「条件付け」(“conditioning”) を通して行われます、これは少しのテキストを表すベクトルをノイズパッチに連結し、そして {画像: キャプション} ペアのデータセット上でモデルを訓練することから構成されます。

これが Stable Diffusion アーキテクチャへの進化を与えます。Stable Diffusion は 3 つのパートから構成されます :

  • テキストエンコーダ, これは貴方のプロンプトを潜在的ベクトルに変換します。
  • 拡散モデル, これは 64×64 潜在的画像パッチを繰り返し「ノイズ除去」します。
  • デコーダ, これは最終的な 64×64 潜在的パッチをより高解像度な 512×512 画像に変換します。

最初に、貴方のテキストプロンプトは (事前訓練済みの凍結された言語モデルに過ぎない) テキストエンコーダにより潜在的ベクトル空間に射影されます。次に、そのプロンプトベクトルはランダムに生成されたノイズパッチに連結されます、これは一連の「ステップ」に渡りデコーダによって繰り返し「ノイズ除去」されます (より多くのステップを実行すれば、画像はより鮮明で素敵になります — デフォルト値は 50 ステップです)。

最後に、64×64 潜在的画像はデコーダに送られて高解像度に正しくレンダリングされます。

全体としては、それは非常に単純なシステムです — Keras 実装は 4 つのファイルに収まり、それは合計で 500 行以下のコードです :

  • text_encoder.py : 87 LOC
  • diffusion_model.py : 181 LOC
  • decoder.py : 86 LOC
  • stable_diffusion.py : 106 LOC

しかしこの比較的単純なシステムは、数十億の画像とそれらのキャプションで訓練すれば、魔術のように見え始めます。As Feynman said about the universe: “It’s not complicated, it’s just a lot of it!”

 

KerasCV の特典 (Perks)

幾つかの Stable Diffusion が公開されて利用可能であるのに、何故 keras_cv.models.StableDiffusion を使用するべきなのでしょうか?

使いやすい API に加えて、KerasCV の Stable Diffusion モデルは、以下を含む幾つかの強力な利点を備えています :

  • グラフモード実行
  • jit_compile=True による XLA コンパイル
  • 混合精度計算のサポート

これらが連結されたとき、KerasCV Stable Diffusion モデルは素朴な実装よりも桁違いに高速に実行されます。このセクションは、これらの機能のすべてを有効にする方法とそれらを使用して生み出される結果としてのパフォーマンスゲインを示します。

比較の目的で、Stable Diffusion の HuggingFace diffusers 実装の実行時間を KerasCV 実装と比較するベンチマークを実行しました。両方の実装は各画像毎にステップカウント 50 で 3 画像を生成するタスクを負いました。このベンチマークでは、Tesla T4 GPU を使用しました。

ベンチマークのすべては GitHub 上のオープンソースで、結果を再現するために Colab で再実行しても良いです。ベンチマークの結果は下の表で示されます :

Tesla T4 で実行時間 30% の改善です!V100 では改善はかなり小さいですが、ベンチマークの結果はすべての NVIDIA GPU に渡り一貫して KerasCV に有利に働くことが一般に期待できます。

完全性のため、コールドスタートとウォームスタートの両方の生成時間を報告します。コールドスタートの実行時間はモデル作成とコンパイルの one-time コストを含みますので、実稼働環境では無視できます (そこでは同じモデルインスタンスを何度も再利用します)。Regardless, here are the cold-start numbers:

このガイドの実行からの実行時間の結果は変わるかもしれませんが、私たちのテストでは Stable Diffusion の KerasCV 実装はその PyTorch のカウンターパートよりも大幅に高速です。これは大きくは XLA コンパイルに起因するかもしれません。

Note : 各最適化のパフォーマンスの利点はハードウェアセットアップで大きく変化することはあり得ます。

To get started, let’s first benchmark our unoptimized model:

benchmark_result = []
start = time.time()
images = model.text_to_image(
    "A cute otter in a rainbow whirlpool holding shells, watercolor",
    batch_size=3,
)
end = time.time()
benchmark_result.append(["Standard", end - start])
plot_images(images)

print(f"Standard model: {(end - start):.2f} seconds")
keras.backend.clear_session()  # Clear session to preserve memory.
25/25 [==============================] - 8s 316ms/step
Standard model: 8.17 seconds

 

混合精度

「混合精度」は float16 精度を使用して計算を実行しながら重みは float32 形式でストアすることから構成されます。これは、最新の NVIDIA GPU 上では float16 演算が float32 のカウンターパートよりも大幅に高速なカーネルにより支援されているという事実を利用して行われます。

Keras で (従って keras_cv.models.StableDiffusion について) 混合精度計算を有効にするのは以下を呼び出すように簡単です :

keras.mixed_precision.set_global_policy("mixed_float16")
INFO:tensorflow:Mixed precision compatibility check (mixed_float16): OK
Your GPU will likely run quickly with dtype policy mixed_float16 as it has compute capability of at least 7.0. Your GPU: NVIDIA A100-SXM4-40GB, compute capability 8.0

That’s all. Out of the box – it just works.

model = keras_cv.models.StableDiffusion()

print("Compute dtype:", model.diffusion_model.compute_dtype)
print(
    "Variable dtype:",
    model.diffusion_model.variable_dtype,
)
Compute dtype: float16
Variable dtype: float32

ご覧のように、上で構築されたモデルは今は混合精度計算を利用しています ; 計算のためには float16 演算のスピードを活用する一方で、変数は float32 精度でストアします。

# Warm up model to run graph tracing before benchmarking.
model.text_to_image("warming up the model", batch_size=3)

start = time.time()
images = model.text_to_image(
    "a cute magical flying dog, fantasy art, "
    "golden color, high quality, highly detailed, elegant, sharp focus, "
    "concept art, character concepts, digital painting, mystery, adventure",
    batch_size=3,
)
end = time.time()
benchmark_result.append(["Mixed Precision", end - start])
plot_images(images)

print(f"Mixed precision model: {(end - start):.2f} seconds")
keras.backend.clear_session()
25/25 [==============================] - 15s 226ms/step
25/25 [==============================] - 6s 226ms/step
Mixed precision model: 6.02 seconds

 

XLA コンパイル

TensorFlow は XLA: 高速化線形代数 コンパイラを組み込みで装備しています。keras_cv.models.StableDiffusion はそのままで jit_compile 引数をサポートしています。この引数を True に設定すると XLA コンパイルが有効になり、大幅なスピードアップになります。

Let’s use this below:

# Set back to the default for benchmarking purposes.
keras.mixed_precision.set_global_policy("float32")

model = keras_cv.models.StableDiffusion(jit_compile=True)
# Before we benchmark the model, we run inference once to make sure the TensorFlow
# graph has already been traced.
images = model.text_to_image("An avocado armchair", batch_size=3)
plot_images(images)
25/25 [==============================] - 36s 245ms/step

Let’s benchmark our XLA model:

start = time.time()
images = model.text_to_image(
    "A cute otter in a rainbow whirlpool holding shells, watercolor",
    batch_size=3,
)
end = time.time()
benchmark_result.append(["XLA", end - start])
plot_images(images)

print(f"With XLA: {(end - start):.2f} seconds")
keras.backend.clear_session()
25/25 [==============================] - 6s 245ms/step
With XLA: 6.27 seconds

On an A100 GPU, we get about a 2x speedup. Fantastic!

 

Putting it all together

それでは、世界で最もパフォーマンスの高い stable diffusion 推論パイプラインをどのように組み立てるのでしょう (2022年9月現在)。

With these two lines of code:

keras.mixed_precision.set_global_policy("mixed_float16")
model = keras_cv.models.StableDiffusion(jit_compile=True)

And to use it…

# Let's make sure to warm up the model
images = model.text_to_image(
    "Teddy bears conducting machine learning research",
    batch_size=3,
)
plot_images(images)
25/25 [==============================] - 39s 157ms/step

Exactly how fast is it? Let’s find out!

start = time.time()
images = model.text_to_image(
    "A mysterious dark stranger visits the great pyramids of egypt, "
    "high quality, highly detailed, elegant, sharp focus, "
    "concept art, character concepts, digital painting",
    batch_size=3,
)
end = time.time()
benchmark_result.append(["XLA + Mixed Precision", end - start])
plot_images(images)

print(f"XLA + mixed precision: {(end - start):.2f} seconds")
25/25 [==============================] - 4s 158ms/step
XLA + mixed precision: 4.25 seconds

Let’s check out the results:

print("{:<20} {:<20}".format("Model", "Runtime"))
for result in benchmark_result:
    name, runtime = result
    print("{:<20} {:<20}".format(name, runtime))
Model                 Runtime             
Standard              8.17177152633667    
Mixed Precision       6.022329568862915   
XLA                   6.265935659408569   
XLA + Mixed Precision 4.252242088317871   

It only took our fully-optimized model four seconds to generate three novel images from a text prompt on an A100 GPU.

 

まとめ

KerasCV は Stable Diffusion の最先端の実装を提供します -- そして XLA と混合精度の使用を通して、2022 年 9 月現在で利用可能な最速の Stable Diffusion パイプラインを供給します。

Normally, at the end of a keras.io tutorial we leave you with some future directions to continue in to learn. This time, we leave you with one idea:

Go run your own prompts through the model! It is an absolute blast!

If you have your own NVIDIA GPU, or a M1 MacBookPro, you can also run the model locally on your machine. (Note that when running on a M1 MacBookPro, you should not enable mixed precision, as it is not yet well supported by Apple's Metal runtime.)

 

以上



クラスキャット

最近の投稿

  • LangGraph Platform : 概要
  • LangGraph : Prebuilt エージェント : ユーザインターフェイス
  • LangGraph : Prebuilt エージェント : 配備
  • LangGraph : Prebuilt エージェント : マルチエージェント
  • LangGraph : Prebuilt エージェント : メモリ

タグ

AutoGen (13) ClassCat Press Release (20) ClassCat TF/ONNX Hub (11) DGL 0.5 (14) Eager Execution (7) Edward (17) FLUX.1 (16) Gemini (20) HuggingFace Transformers 4.5 (10) HuggingFace Transformers 4.6 (7) HuggingFace Transformers 4.29 (9) Keras 2 Examples (98) Keras 2 Guide (16) Keras 3 (10) Keras Release Note (17) Kubeflow 1.0 (10) LangChain (45) LangGraph (19) MediaPipe 0.8 (11) Model Context Protocol (16) NNI 1.5 (16) OpenAI Agents SDK (8) OpenAI Cookbook (13) OpenAI platform (10) OpenAI platform 1.x (10) OpenAI ヘルプ (8) TensorFlow 2.0 Advanced Tutorials (33) TensorFlow 2.0 Advanced Tutorials (Alpha) (15) TensorFlow 2.0 Advanced Tutorials (Beta) (16) TensorFlow 2.0 Guide (10) TensorFlow 2.0 Guide (Alpha) (16) TensorFlow 2.0 Guide (Beta) (9) TensorFlow 2.0 Release Note (12) TensorFlow 2.0 Tutorials (20) TensorFlow 2.0 Tutorials (Alpha) (14) TensorFlow 2.0 Tutorials (Beta) (12) TensorFlow 2.4 Guide (24) TensorFlow Deploy (8) TensorFlow Get Started (7) TensorFlow Graphics (7) TensorFlow Probability (9) TensorFlow Programmer's Guide (22) TensorFlow Release Note (18) TensorFlow Tutorials (33) TF-Agents 0.4 (11)
2022年12月
月 火 水 木 金 土 日
 1234
567891011
12131415161718
19202122232425
262728293031  
« 9月   4月 »
© 2025 ClasCat® AI Research | Powered by Minimalist Blog WordPress Theme