Hanah

Hanah

TinyDiffusion

Reference:Datawhale tinydiffusion

Kaggle 実装:#

データ準備#

  • git clone で tinydiffusion をローカルにダウンロード
  • cifar-10-pythonデータセットを datasets / フォルダにダウンロードし、ディレクトリ構造を datasets/cifar-10-batches-py のままにします。
  • kaggle dataset にパッケージをアップロードし、名前を cifar-10-python とします。

実行#

  • 新しい notebook を作成し、input にデータセット cifar-10-python を追加します。
  • デフォルトのコードを実行
  • 環境を設定
!pip install -r /kaggle/input/tinydiffusion/TinyDiffusion/ddpm/requirements.txt
  • データセットを output パスにコピー
import shutil
import os

# データセットの入力ディレクトリと出力ディレクトリを定義
input_dir = '/kaggle/input/tinydiffusion'
output_dir = '/kaggle/output/tinydiffusion'

# 出力ディレクトリが存在するか確認し、存在しない場合は作成
if not os.path.exists(output_dir):
    os.makedirs(output_dir)

# 入力ディレクトリ内のすべてのファイルとフォルダを走査
for root, dirs, files in os.walk(input_dir):
    # 対応する出力ディレクトリを構築
    relative_path = os.path.relpath(root, input_dir)
    output_sub_dir = os.path.join(output_dir, relative_path)
    
    # 出力サブディレクトリが存在しない場合は作成
    if not os.path.exists(output_sub_dir):
        os.makedirs(output_sub_dir)
    
    # ファイルを出力ディレクトリにコピー
    for file in files:
        input_file_path = os.path.join(root, file)
        output_file_path = os.path.join(output_sub_dir, file)
        shutil.copy2(input_file_path, output_file_path)

print("データセットのコピーが完了しました!")
  • パスを作成し、10 エポックごとに生成された画像を配置
import os

# 画像を保存するターゲットディレクトリを定義
save_dir = '/kaggle/output/tinydiffusion/TinyDiffusion/samples'

# ディレクトリが存在するか確認し、存在しない場合は作成
if not os.path.exists(save_dir):
    os.makedirs(save_dir)
    print(f"ディレクトリを作成しました: {save_dir}")
else:
    print(f"ディレクトリ {save_dir} は既に存在します。")
  • output パスに移動
cd /kaggle/output/tinydiffusion/TinyDiffusion
  • データを処理
!python /kaggle/input/tinydiffusion/TinyDiffusion/ddpm/dataloader.py
  • 構造を印刷
!python /kaggle/input/tinydiffusion/TinyDiffusion/ddpm/unet.py
  • 画像にノイズを加える
!python /kaggle/input/tinydiffusion/TinyDiffusion/ddpm/diffusion.py
  • トレーニング、ここでは 100 回だけトレーニングします。変更が必要な場合は、コマンドラインで変更できます。
!python /kaggle/output/tinydiffusion/TinyDiffusion/ddpm/train.py --epochs 100 --batch_size 128 --lr 1e-4 --img_size 32
  • 画像を表示
import os
from PIL import Image
import matplotlib.pyplot as plt

# 画像ディレクトリを定義
save_dir = '/kaggle/output/tinydiffusion/TinyDiffusion/samples'

# ディレクトリが存在するか確認
if not os.path.exists(save_dir):
    print(f"ディレクトリ {save_dir} は存在しません。")
else:
    # ディレクトリ内のすべてのファイルを取得
    all_files = os.listdir(save_dir)
    
    # 画像ファイルをフィルタリング(ここでは画像ファイルの拡張子が.png, .jpg, .jpegであると仮定)
    image_files = [f for f in all_files if f.lower().endswith(('.png', '.jpg', '.jpeg'))]
    
    if not image_files:
        print(f"ディレクトリ {save_dir} に画像ファイルはありません。")
    else:
        print(f"以下の画像ファイルが見つかりました:")
        for idx, image_file in enumerate(image_files):
            print(f"{idx + 1}. {image_file}")
            # 画像を表示(オプション)
            image_path = os.path.join(save_dir, image_file)
            img = Image.open(image_path)
            plt.imshow(img)
            plt.title(image_file)
            plt.axis('off')
            plt.show()

結果#

image
image
image
image
image
image
image
image
image
image

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。