【Matryoshka】Appleがついに画像生成AIを公開!Sable Diffusion3と性能比較してみた

Matryoshka Apple 画像生成AI Sable-Diffusion3 性能 比較

目次

Matryoshka Diffusion Modelsの概要

Appleが発表したMatryoshka Diffusion Modelsは高解像度の画像やビデオを生成するための新しいディープラーニングモデルです。

拡散モデルという、ノイズの多いデータから画像を生成する技術に基づいています。また、ネストされたUNetアーキテクチャと呼ばれる新しいアーキテクチャを採用しており、複数の解像度を同時にノイズ除去することで画像を生成します。

UNetアーキテクチャによるアプローチにより、従来の拡散モデルよりも効率的に高解像度の画像を生成することが可能。

参考:https://camo.githubusercontent.com/4d05fd4128e4775a48fd2b5884fc47d6dfe52b356b6c61039b4a021168bbf69d/68747470733a2f2f6d6c722e63646e2d6170706c652e636f6d2f6d656469612f4d444d5f746578745f746f5f696d6167655f333930636535346664652e706e67

Matryoshka Diffusion Modelsと従来手法の違い

従来の画像生成モデルでは、カスケード拡散モデルと潜在拡散モデルを使用しており、それぞれ別個のモデルに依存するか事前学習されたオードエンコーダの低解像度の潜在空間で拡散を実行することで、高解像度の画像生成を行っていました。

参考:https://arxiv.org/pdf/2310.15111

一方で、Matryoshka Diffusion Modelsは、データ形成の階層構造を利用しながら、高解像度空間でエンドツーエンドでトレーニングされる単一の拡散プロセスを学習します。

また、Matryoshka Diffusion Modelsでは、UNetアーキテクチャをしようしており、複数解像度の潜在表現間で重みと計算を共有することが可能。この技術により、高解像度生成の学習を容易にして、トレーニングと推論の両方の効率のために計算をより効率的に再割り当てできます。

従来のカスケード拡散モデルは、低解像度のデータを生成するために最初の拡散モデルをしようし、次に最初のステージの生成を条件として、超解像度バージョンを生成するために2番目の拡散モデルを使用します。そのためカスケードモデルは、各ステップで前のステップの出力に依存していました。

参考:https://arxiv.org/pdf/2106.15282

カスケード拡散モデルが低解像度画像から高解像度の画像を生成するために、段階的に解像度を上げていくのに対して、Matryoshka Diffusion ModelsのUNetアーキテクチャでは、複数の解像度で同時にノイズ除去を行うため高解像度画像生成が高速です。

参考:https://arxiv.org/pdf/2310.15111

Matryoshka Diffusion Modelsで使われているプログレッシブトレーニング

プログレッシブトレーニングはトレーニングプロセスを段階的に進めることで、計算リソースの節約やモデルの性能向上を目指します。

このトレーニングプロセスにより、最初からコストのかかる高解像度トレーニングを回避し、全体的な収束を高速化することができます。

さらに、異なる最終解像度のサンプルを1つのバッチ内で同時にトレーニングする混合解像度トレーニングを取り入れることも可能。

Matryoshka Diffusion Modelsでは、拡張空間における拡散モデル・UNetアーキテクチャ・プログレッシブトレーニング技術を活用することで、たった1200万枚の画像しか含まれていないCC12Mデータセットを使用し、最大1024×1024ピクセルの解像度で単一のピクセル空間モデルをトレーニングできます。

参考:https://arxiv.org/pdf/2310.15111

潜在拡散モデルを使った画像生成

潜在拡散モデルは、画像生成において高解像度かつ効率的な生成を可能にする技術で、Stable Diffusionに用いられています。潜在拡散モデルは高次元データをより低次元の潜在空間に圧縮してから、拡散プロセスを適用します。

そのため、計算効率が向上し、高解像度の画像生成が短時間で行えます。

特にStable Diffusion XLでは、潜在拡散モデルを使ってノイズ除去を行なって画像生成をしています。計算の効率化やより少ない次元で複雑な画像構造を表現できるようになっているため、高解像度の画像生成が可能になっています。

ここまでのまとめ

Matryoshka Diffusion Models:UNetアーキテクチャを使用して複数解像度で処理するため、高解像度画像生成が高速

従来の手法:カスケード拡散モデル・潜在拡散モデルを使用するため、高解像度画像生成は低速

Matryoshka Diffusion Modelsのライセンス

Matryoshka Diffusion Modelsのライセンスは以下のようになっています。もしAppleの商標や名称を使用する場合には、許可が必要であり、ソフトウェアは現状のまま提供されていて保証はありません。

利用用途可否
商用利用⭕️
改変⭕️
配布⭕️
特許使用
私的使用⭕️
参考:https://github.com/apple/ml-mdm/blob/main/LICENSE

なお、Stable Diffusionの開発者がリリースしたFLUX.1について詳しく知りたい方は、下記の記事を合わせてご確認ください。

WEEL
【最新】FLUX1.1[pro]で最新画像生成AIモデルを使ってトルコの無課金おじさんを生成してみた | WEEL FLUX.1は、プロンプトに忠実な高品質画像生成AIです。本記事ではFLUX.1の使い方をgoogle colaboratoryでの実装方法とともに解説します。

Matryoshka Diffusion Modelsの使い方

Matryoshka Diffusion Modelsをgoogle colaboratoryで実装します。google colaboratoryで実装する際には、ランタイムをGPUに変更する必要があります。

また、Matryoshka Diffusion ModelsのGitHubに掲載されている通りに実装しても動かない可能性が高く、google colaboratoryで動くように修正しているので、ぜひこちらを参考にgoogle colaboratoryでMatryoshka Diffusion Modelsを実装してみてください。

参考:https://github.com/apple/ml-mdm/blob/main/docs/web_demo.png

Matryoshka Diffusion Modelsを動かすのに必要な動作環境

Matryoshka Diffusion Modelsを実行した時の環境は以下です。結構GPUを使います。

■Pythonのバージョン
Python 3.8以上

■使用ディスク量
52.7GB

■システムRAMの使用量
5.8GB

■GPU RAMの使用量
17.0GB

google colaboratoryでのMatryoshka Diffusion Modelsの実装方法

まずはGitHubリポジトリをクローンします。次に必要ライブラリのインストール、モデルのダウンロード、Pre-commit、Matryoshka Diffusion Modelsの実行という流れですが、Matryoshka Diffusion Modelsの実行でめちゃくちゃつまづきます。

GitHubリポジトリのクローンはこちら
!git clone https://github.com/apple/ml-mdm.git
%cd ml-mdm
必要ライブラリのインストールはこちら
!pip install .
学習済みモデルのダウンロードはこちら
!curl https://docs-assets.developer.apple.com/ml-research/models/mdm/flickr64/vis_model.pth --output vis_model_64x64.pth
!curl https://docs-assets.developer.apple.com/ml-research/models/mdm/flickr256/vis_model.pth --output vis_model_256x256.pth
!curl https://docs-assets.developer.apple.com/ml-research/models/mdm/flickr1024/vis_model.pth --output vis_model_1024x1024.pth
パスの追加はこちら
import sys
sys.path.append('/content/ml-mdm')
アンインストールと再インストールのコードはこちら
!pip uninstall -y ml_mdm
!pip install -e .
Pre-commitのインストールおよびconfigファイルの作成はこちら
!pip install pre-commit
pre_commit_config = """
repos:
-   repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v3.2.0
    hooks:
    -   id: trailing-whitespace
    -   id: end-of-file-fixer
    -   id: check-yaml
    -   id: check-added-large-files
"""

with open('.pre-commit-config.yaml', 'w') as f:
    f.write(pre_commit_config)
Pre-commitはこちら
!pre-commit install
!pre-commit run --all-files
Matryoshka Diffusion Modelsの実行はこちら
!torchrun --standalone --nproc_per_node=1  ml_mdm/clis/generate_sample.py

ここからが結構重要です。

おそらく「!pre-commit run –all-files」でエラーが出るので、「configs/models/cc12m_64×64.yaml」を開き、4,5,7,8行目をコメントアウト。これで「!pre-commit run –all-files」のエラーは回避できます。

他に1024×1024、256×256のyamlファイルもありますが、これはひとまず削除しておいてOKです。というのも、1024×1024での生成はA100のGPUでもメモリオーバーになりますし、256×256での生成はコードの修正がかなり必要になります。

次にlocal URLにアクセスできない問題です。今回はGradioのlaunch()関数に修正を加えて、ポートフォワーディング機能を使っていきます。

/content/ml-mdm/ml_mdm/clis/generate_sample.py」を開きます。

541行目あたりにある「demo.queue(default_concurrency_limit=1).launch(**launch_args)」を「demo.queue(default_concurrency_limit=1).launch(share=True, **launch_args)」に変更してください。

また、「if __name__ == “__main__”:」の最後の部分に以下のコードを追加します。

追加コードはこちら
from google.colab import output
output.serve_kernel_port_as_iframe(args.port)

これでWeb DemoのURLにアクセスできるようになります。

画像一番下に書いてある「Running on public URL」にアクセスします。「Running on local URL」はgoogle colaboratoryからではアクセスできません。

ポートフォワーディング以外にもngrokを使って公開URLを作成してアクセスする方法などもありますが、ポートフォワーディング機能使うのが簡単で手っ取り早く実装できると思います。

pre-commitについて

pre-commitは、Gitのフック機能を利用して、コミットが実行される前に特定のスクリプトやツールを自動的に実行するためのツール。これにより、コードの品質を向上させるためのチェックやフォーマットをコミット前に行うことができます。

Matryoshka Diffusion Modelsでは開発者は、pre-commit installでpre-commitもセットアップする必要がある。と述べられています。

検証

今回はMatryoshka Diffusion Modelsの64×64で画像を生成します。バッチサイズを変更すると生成する枚数が変わります。Matryoshka Diffusion Modelsの良いところは高画質な画像が生成できる点ですが、google colaboratoryではGPUが足りません。

Matryoshka Diffusion Modelsで生成する画像は無課金おじさんです。

プロンプトはこちら

A realistic digital illustration of an athlete during a precision shooting event. The athlete has white hair, is wearing glasses and a white t-shirt with the word ‘TURKIYE’ on it, and is aiming a pistol straight ahead. The athlete’s left hand is in their pants pocket. The background shows a sports venue with a crowd of photographers and a blue banner that says ‘PARIS 2024.’ The overall mood is focused and intense, capturing the moment of concentration in a competitive sports setting.

和訳:精密射撃競技中のアスリートのリアルなデジタルイラスト。選手は白髪で、眼鏡をかけ、「TURKIYE」と書かれた白いTシャツを着て、ピストルをまっすぐ前に向けている。選手の左手はズボンのポケットに入っている。背景には、大勢のカメラマンと『PARIS 2024』と書かれた青い横断幕が掲げられたスポーツ会場が映っている。全体的に集中した激しいムードで、競技スポーツの場での集中の瞬間をとらえている。

実際にMatryoshka Diffusion Modelsで生成された画像はこちらです。バッチサイズ16で生成しているので16枚の画像が1枚に収まっています。

Matryoshka Diffusion Modelsは高画質の画像を生成できるのが特徴ですが、1024×1024サイズで画像生成できず画質を検証することはできませんでした。

また、同じようにStable Diffusion 3でも生成をしたので、見比べてみます。画像サイズが小さいので画質についてはわかりにくいかもしれません。一枚目がMatryoshka Diffusion Modelsで生成、二枚目がStable Diffusion 3で生成した画像です。

しかし、Matryoshka Diffusion Modelsで生成した方は、プロンプトに忠実に従っており全身が写っていますね。

Stable Diffusion 3のコードはこちら
!pip install --upgrade diffusers accelerate

#次のセル
from huggingface_hub import login
login()#Hugging FaceのAccess Tokenを入力

#次のセル
# 必要なモジュールをインポート
import torch
from diffusers import StableDiffusion3Pipeline

# Stable Diffusion 3のパイプラインを読み込み
pipe = StableDiffusion3Pipeline.from_pretrained("stabilityai/stable-diffusion-3-medium-diffusers", torch_dtype=torch.float16)

# パイプラインをGPUに移動
pipe = pipe.to("cuda")

# 画像を生成
image = pipe(
    "A realistic digital illustration of an athlete during a precision shooting event. The athlete has white hair, is wearing glasses and a white t-shirt with the word ‘TURKIYE’ on it, and is aiming a pistol straight ahead. The athlete’s left hand is in their pants pocket. The background shows a sports venue with a crowd of photographers and a blue banner that says ‘PARIS 2024.’ The overall mood is focused and intense, capturing the moment of concentration in a competitive sports setting.", # プロンプト
    negative_prompt="", # ネガティブプロンプト(空欄でOK)
    num_inference_steps=28, # 推論ステップ数
    guidance_scale=7.0, # ガイダンススケール
    height=64,
    width=64,
    
).images[0]

# 生成された画像を表示
image

なお、Stable Diffusion 3について詳しく知りたい方は、下記の記事を合わせてご確認ください。

WEEL
画像生成AI「Stable Diffusion 3」とは?性能や使い方を徹底解説! | WEEL WEELメディア事業部LLMライターのゆうやです。 2024年2月23日、Stability AIから最新の画像生成AIである「Stable Diffusion 3」が公開されました! 2022年のStable Diffusi...

最後に

いかがだったでしょうか?

弊社では

・マーケティングやエンジニアリングなどの専門知識を学習させたAI社員の開発
・要件定義・業務フロー作成を80%自動化できる自律型AIエージェントの開発
・生成AIとRPAを組み合わせた業務自動化ツールの開発
・社内人事業務を99%自動化できるAIツールの開発
ハルシネーション対策AIツールの開発
自社専用のAIチャットボットの開発

などの開発実績がございます。

まずは、「無料相談」にてご相談を承っておりますので、ご興味がある方はぜひご連絡ください。

➡︎生成AIを使った業務効率化、生成AIツールの開発について相談をしてみる。

生成AIを社内で活用していきたい方へ
無料相談

「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、生成AI社内セミナー・勉強会をさせていただいております。

セミナー内容や料金については、ご相談ください。

また、サービス紹介資料もご用意しておりますので、併せてご確認ください。

投稿者

  • 翔平

    総合病院で10年間理学療法士として勤務し、その後Pythonを独学で学びデータアナリストとして転職。趣味はキックボクシング

  • URLをコピーしました!
  • URLをコピーしました!
目次