Nitro-E によるテキストからの画像生成(ソースコードと説明と利用ガイド)

プログラム利用ガイド

1. このプログラムの利用シーン

テキストプロンプトから画像を自動生成するためのソフトウェアである。アイデアを視覚化したり、デザインの参考資料を作成したり、創作活動の支援に活用できる。軽量なモデルを使用しているため、一般的なPCでも実行可能である。

2. 主な機能

3. 基本的な使い方

  1. 事前準備:

    プログラムのコメントに記載されているパッケージをインストールする。モード3(GRPO版)を使用する場合は、追加で「peft」パッケージのインストールが必要である。

    Hugging Faceにログインし、Llama-3.2-1Bへのアクセス許可を取得する必要がある。

  2. プログラムの実行:

    Pythonでプログラムを実行すると、モード選択画面が表示される。

    キーボードで「1」(高速モード)、「2」(高品質・通常版)、または「3」(高品質・GRPO版)を入力し、Enterキーを押す。

  3. 初回実行時の処理:

    GitHubリポジトリのクローン、モデルのダウンロードが自動的に行われる。

    この処理には時間がかかるが、2回目以降は不要である。

  4. 画像の生成:

    プログラムが自動的に画像を生成し、「output.png」として保存する。

    デフォルトでは「A hot air balloon in the shape of a heart grand canyon」というプロンプトが使用される。

4. 便利な機能

Python開発環境,ライブラリ類

ここでは、最低限の事前準備について説明する。機械学習や深層学習を行う場合は、NVIDIA CUDA、Visual Studio、Cursorなどを追加でインストールすると便利である。これらについては別ページ https://www.kkaneko.jp/cc/dev/aiassist.htmlで詳しく解説しているので、必要に応じて参照してください。

Python 3.12 のインストール

インストール済みの場合は実行不要。

管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)し、以下を実行する。管理者権限は、wingetの--scope machineオプションでシステム全体にソフトウェアをインストールするために必要である。

REM Python をシステム領域にインストール
winget install --scope machine --id Python.Python.3.12 -e --silent
REM Python のパス設定
set "PYTHON_PATH=C:\Program Files\Python312"
set "PYTHON_SCRIPTS_PATH=C:\Program Files\Python312\Scripts"
echo "%PATH%" | find /i "%PYTHON_PATH%" >nul
if errorlevel 1 setx PATH "%PATH%;%PYTHON_PATH%" /M >nul
echo "%PATH%" | find /i "%PYTHON_SCRIPTS_PATH%" >nul
if errorlevel 1 setx PATH "%PATH%;%PYTHON_SCRIPTS_PATH%" /M >nul

関連する外部ページ

Python の公式ページ: https://www.python.org/

AI エディタ Windsurf のインストール

Pythonプログラムの編集・実行には、AI エディタの利用を推奨する。ここでは,Windsurfのインストールを説明する。

管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)し、以下を実行して、Windsurfをシステム全体にインストールする。管理者権限は、wingetの--scope machineオプションでシステム全体にソフトウェアをインストールするために必要となる。

winget install --scope machine Codeium.Windsurf -e --silent

関連する外部ページ

Windsurf の公式ページ: https://windsurf.com/

必要なライブラリのインストール

コマンドプロンプトを管理者として実行(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)し、以下を実行する


pip install -U torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126
pip install peft diffusers==0.32.2 transformers==4.49.0 accelerate==1.7.0 torchmetrics einops omegaconf sentencepiece==0.2.0
pip install huggingface_hub

Hugging Faceの認証

以下の手順を実行。

  1. Hugging Faceアカウントを作成(未作成の場合)

    (アカウント作成済みの場合は,https://huggingface.co/ にアクセスしてログイン)

    • https://huggingface.co/ にアクセス
    • 画面右上の「Sign Up」ボタンをクリック
    • メールアドレスとパスワードを入力してアカウントを作成
    • 登録したメールアドレスに届く確認メールから認証を完了
  2.  Llama-3.2-1Bモデルへのアクセス権を取得
    • https://huggingface.co/meta-llama/Llama-3.2-1B にアクセス
    • ページ中央に表示される利用規約(LLAMA 3.2 COMMUNITY LICENSE AGREEMENT)を読む
    • ページ下部の「Log in」または「Sign Up」リンクをクリックしてログインする
    • ログイン後、利用規約に同意するためのフォームが表示される
    • 必要事項を入力し、「I Accept」をクリックする
  3. アクセストークンを作成する
    • https://huggingface.co/settings/tokens にアクセスする
    • 「New token」ボタンをクリックする
    • Token name(トークン名)を入力する(例:nitro-e-token)
    • Type(タイプ)で「Read」を選択する
    • 「Generate a token」ボタンをクリックする
    • 表示されたトークン(hf_で始まる文字列)の右側にある「Copy」ボタンをクリックしてコピーする
  4. Hugging Face CLIをインストールしてログインする
    # Hugging Face CLIをインストール
    pip install huggingface_hub
    
    # トークンでログイン
    huggingface-cli login

    コマンド実行後、以下のように表示される:

    Token: 

    コピーしたトークンを貼り付けてEnterキーを押す。

    次に以下のように表示される:

    Add token as git credential? (Y/n)

    Enterキーを押す(デフォルトでYes)。

    ログインに成功すると以下のように表示される:

    Token is valid (permission: read).
    Your token has been saved to /home/username/.cache/huggingface/token
    Login successful

認証の特徴

Pythonコードの実行

認証完了後、Nitro-Eのコードを実行する。

プログラムコードの説明

1. 概要

このプログラムは、テキストプロンプトから画像を生成するAMD社の軽量画像生成モデル「Nitro-E」を利用する。304M(3億400万)パラメータという小規模な構成で、512×512ピクセルの画像を生成する。プログラムは、4ステップで生成を行う蒸留版、20ステップで生成を行う通常版、20ステップで生成を行うGRPO版の3つのモードを提供する。

2. 主要技術

Efficient Multimodal Diffusion Transformer (E-MMDiT)

Nitro-EはE-MMDiTというアーキテクチャを採用している[1][2]。これはMultimodal Diffusion Transformer (MMDiT)を基盤とし、複数の改良を加えたものである。MMDiTは異なるモダリティ(テキストと画像)を処理するために別々の重みセットを使用し、統合された注意機構で特徴を融合する。E-MMDiTでは、マルチパス圧縮モジュールによって画像トークン数を68.5%削減する。

Diffusion Transformer (DiT)

Diffusion Transformer (DiT) [3]は、拡散モデルにTransformerアーキテクチャを適用した生成モデルである。従来のU-Netバックボーンを、潜在空間のパッチに対して動作するTransformerに置き換える。DiTは計算量の観点から優れたスケーラビリティを示し、モデル規模の拡大によって生成品質が向上する特性を持つ。

3. 技術的特徴

4. 実装の特色

プログラムは以下の機能を実装している:

モデルは2500万枚の画像で学習されている。内訳は実画像1110万枚、Midjourneyで生成された画像440万枚、FLUX.1-devで生成された画像950万枚である。

5. 参考文献

[1] Esser, P., et al. (2024). Scaling Rectified Flow Transformers for High-Resolution Image Synthesis. arXiv preprint arXiv:2403.03206. https://arxiv.org/abs/2403.03206

[2] AMD. (2025). Nitro-E: A 304M Diffusion Transformer Model for High Quality Image Generation. ROCm Blogs. https://rocm.blogs.amd.com/artificial-intelligence/nitro-e/README.html

[3] Peebles, W., & Xie, S. (2023). Scalable Diffusion Models with Transformers. Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV), 4195-4205. https://arxiv.org/abs/2212.09748

6. ソースコード


# Nitro-E によるテキストからの画像生成

# 事前に以下のコマンドを実行してパッケージをインストールしてください:
# pip install -U torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126
# pip install peft diffusers==0.32.2 transformers==4.49.0 accelerate==1.7.0 torchmetrics einops omegaconf sentencepiece==0.2.0
# pip install huggingface_hub
#
# Hugging Faceにログインしてください:
# huggingface-cli login
#
# Llama-3.2-1Bへのアクセス許可を取得してください:
# https://huggingface.co/meta-llama/Llama-3.2-1B

import os
import sys
import subprocess
import torch

def setup_nitro_e():
    """Nitro-Eのセットアップを行う"""

    # リポジトリのクローン
    repo_dir = "Nitro-E"
    if not os.path.exists(repo_dir):
        print("Nitro-Eリポジトリをクローンしています...")
        subprocess.run(["git", "clone", "https://github.com/AMD-AGI/Nitro-E.git"], check=True)
    else:
        print("Nitro-Eリポジトリは既に存在します")

    # リポジトリディレクトリのパスをPythonパスに追加
    repo_path = os.path.abspath(repo_dir)
    if repo_path not in sys.path:
        sys.path.insert(0, repo_path)

    print("セットアップが完了しました")
    return repo_path

def generate_image(repo_path, mode):
    """画像生成を実行する"""

    # CPU/GPUの自動認識
    if torch.cuda.is_available():
        device = torch.device('cuda:0')
        dtype = torch.bfloat16
        print("GPU を使用します")
    else:
        device = torch.device('cpu')
        dtype = torch.float32
        print("CPU を使用します")

    # coreモジュールをインポート
    from core.tools.inference_pipe import init_pipe

    # モデルの設定
    repo_name = "amd/Nitro-E"
    resolution = 512

    if mode == 1:
        # 4ステップ版(蒸留版)
        ckpt_name = 'Nitro-E-512px-dist.safetensors'
        num_inference_steps = 4
        guidance_scale = 0
        print("4ステップ版(蒸留版)を使用します")
    elif mode == 2:
        # 20ステップ版(通常版)
        ckpt_name = 'Nitro-E-512px.safetensors'
        num_inference_steps = 20
        guidance_scale = 4.5
        print("20ステップ版(通常版)を使用します")
    elif mode == 3:
        # 20ステップ版(GRPO版)
        ckpt_name = 'Nitro-E-512px.safetensors'
        num_inference_steps = 20
        guidance_scale = 4.5
        print("20ステップ版(GRPO版)を使用します")
    else:
        print("無効なモードです。モード1を使用します。")
        ckpt_name = 'Nitro-E-512px-dist.safetensors'
        num_inference_steps = 4
        guidance_scale = 0

    # パイプラインの初期化
    print("モデルを読み込んでいます...")
    if mode == 3:
        # GRPO版を使用する場合
        pipe = init_pipe(device, dtype, resolution, repo_name=repo_name, ckpt_name=ckpt_name, ckpt_path_grpo='ckpt_grpo_512px')
    else:
        # 通常版または蒸留版
        pipe = init_pipe(device, dtype, resolution, repo_name=repo_name, ckpt_name=ckpt_name)

    # 画像生成
    prompt = 'A hot air balloon in the shape of a heart grand canyon'
    print(f"画像を生成しています: {prompt}")
    images = pipe(
        prompt=prompt,
        width=resolution,
        height=resolution,
        num_inference_steps=num_inference_steps,
        guidance_scale=guidance_scale
    ).images

    # 画像の保存
    output_path = "output.png"
    images[0].save(output_path)
    print(f"画像を {output_path} として保存しました")

# メニュー表示
print("モード選択:")
print("1: 4ステップ版(高速・蒸留版)")
print("2: 20ステップ版(高品質・通常版)")
print("3: 20ステップ版(高品質・GRPO版)")
mode = input("選択してください (1, 2 または 3): ")

if mode == "1":
    selected_mode = 1
elif mode == "2":
    selected_mode = 2
elif mode == "3":
    selected_mode = 3
else:
    print("無効な選択です。モード1を使用します。")
    selected_mode = 1

# セットアップ実行
repo_path = setup_nitro_e()

# 画像生成実行
generate_image(repo_path, selected_mode)

実験・研究スキルの基礎:Google Colabで学ぶ画像生成実験

1. 実験・研究のスキル構成要素

実験や研究を行うには、以下の5つの構成要素を理解する必要がある。

1.1 実験用データ

このプログラムではテキストプロンプト(英語の文章)が実験用データである。

1.2 実験計画

何を明らかにするために実験を行うのかを定める。

計画例:

1.3 プログラム

実験を実施するためのツールである。このプログラムはAMD社のNitro-E(304Mパラメータの軽量拡散モデル)を使用している。

1.4 プログラムの機能

このプログラムは複数のパラメータで画像生成を制御する。

入力パラメータ:

出力情報:

プログラムの動作:

1.5 検証(結果の確認と考察)

プログラムの実行結果を観察し、パラメータの影響を考察する。

基本認識:

観察のポイント:

2. 間違いの原因と対処方法

2.1 プログラムのミス(人為的エラー)

プログラムがエラーで停止する

モデルのダウンロードに時間がかかる

Llama-3.2-1Bへのアクセスエラーが出る

2.2 期待と異なる結果が出る場合

プロンプトと全く異なる画像が生成される

画像の品質が低い・ぼやけている

プロンプトに記述した要素が欠けている

生成に時間がかかりすぎる

同じプロンプトでも実行ごとに異なる画像が生成される

3. 実験レポートのサンプル

生成モードが画像品質に与える影響

実験目的:

3つの生成モード(蒸留版・通常版・GRPO版)の画像品質と生成速度を比較し、用途に応じた最適なモードを見つける。

実験計画:

同一のプロンプトを使用し、各モードで画像を生成して品質を評価する。

実験方法:

プロンプト「A serene mountain landscape with a crystal clear lake」を使用し、以下の基準で評価する:

実験結果:

モード ステップ数 ガイダンス プロンプト忠実度 画像品質 生成速度(秒) 総合評価
モード1(蒸留版) 4 0 x/5 x/5 x.x x/5
モード2(通常版) 20 4.5 x/5 x/5 x.x x/5
モード3(GRPO版) 20 4.5 x/5 x/5 x.x x/5

考察:

結論:

(例文)本実験では、モードxxxxが最も高品質な画像を生成したが、速度を重視する場合はモードxxxxも実用的である。デザインの初期段階でアイデアを素早く可視化する用途にはモードxxxx、最終成果物として高品質な画像が必要な場合にはモードxxxxが適している。用途に応じてモードを使い分けることで、効率的な画像生成ワークフローを構築できることが確認できた。