HuggingFace Diffusers 0.12 : 訓練 : 条件なし画像生成

HuggingFace Diffusers 0.12 : 訓練 : 条件なし画像生成 (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 02/17/2023 (v0.12.1)

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

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

 

クラスキャット 人工知能 研究開発支援サービス

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

◆ 人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。スケジュール
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。

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

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

 

 

HuggingFace Diffusers 0.12 : 訓練 : 条件なし画像生成

このセクションでは、条件なし画像生成拡散モデルをどのように訓練できるかを説明します。「条件なし」(= “Unconditional”) であるのは、モデルは画像を生成するためにどのようなコンテキストにも条件付けられないからです – ひとたび訓練されれば、モデルはその訓練データ分布に類似した画像を単純に生成します。

 

依存関係のインストール

スクリプトを実行する前に、ライブラリの training 依存関係を確実にインストールしてください :

pip install diffusers[training] accelerate datasets

そして以下で 🤗Accelerate 環境を初期化します :

And initialize an 🤗Accelerate environment with:

accelerate config

 

条件なしフラワー

DDPM UNet モデルを Oxford Flowers データセットで訓練するためのコマンド :

accelerate launch train_unconditional.py \
  --dataset_name="huggan/flowers-102-categories" \
  --resolution=64 \
  --output_dir="ddpm-ema-flowers-64" \
  --train_batch_size=16 \
  --num_epochs=100 \
  --gradient_accumulation_steps=1 \
  --learning_rate=1e-4 \
  --lr_warmup_steps=500 \
  --mixed_precision=no \
  --push_to_hub

サンプル訓練済みモデル : https://huggingface.co/anton-l/ddpm-ema-flowers-64

A full training run takes 2 hours on 4xV100 GPUs.

 

条件なし Pokemon

DDPM UNet モデルを Pokemon データセットで訓練するためのコマンド :

accelerate launch train_unconditional.py \
  --dataset_name="huggan/pokemon" \
  --resolution=64 \
  --output_dir="ddpm-ema-pokemon-64" \
  --train_batch_size=16 \
  --num_epochs=100 \
  --gradient_accumulation_steps=1 \
  --learning_rate=1e-4 \
  --lr_warmup_steps=500 \
  --mixed_precision=no \
  --push_to_hub

サンプル訓練済みモデル : https://huggingface.co/anton-l/ddpm-ema-pokemon-64

A full training run takes 2 hours on 4xV100 GPUs.

 

貴方自身のデータの使用

貴方自身のデータを使用するには、2 つの方法があります :

  • 貴方自身のフォルダを –train_data_dir として提供することができるか、

  • 貴方のデータセットをハブにアップロードして (場合によっては望むならプライベート・レポジトリとして)、単純に –dataset_name 引数を渡すことができるかです。

Note : 貴方自身の訓練データセットを作成したい場合、このドキュメント を見てください。

下で、両者を詳細に説明します。

 

データセットをフォルダとして提供する

画像を含む貴方自身のフォルダを提供する場合、スクリプトは以下のディレクトリ構造を想定しています :

data_dir/xxx.png
data_dir/xxy.png
data_dir/[...]/xxz.png

換言すれば、スクリプトはフォルダ內のすべての画像を集める面倒をみます。それからこのようにスクリプトを実行できます :

accelerate launch train_unconditional.py \
    --train_data_dir <path-to-train-directory> \
    <other-arguments>

内部的には、スクリプトは ImageFolder 機能を使用します、これはフォルダを 🤗 Dataset オブジェクトに自動的に変換します。

 

貴方のデータを (場合によってはプライベート) レポジトリとしてハブにアップロードする

🤗 Datasets で利用可能な ImageFolder 機能を使用して貴方の画像データセットをハブにアップロードすることは非常に簡単 (そして便利) です。単純に以下を行います :

from datasets import load_dataset

# example 1: local folder
dataset = load_dataset("imagefolder", data_dir="path_to_your_folder")

# example 2: local files (supported formats are tar, gzip, zip, xz, rar, zstd)
dataset = load_dataset("imagefolder", data_files="path_to_zip_file")

# example 3: remote files (supported formats are tar, gzip, zip, xz, rar, zstd)
dataset = load_dataset(
    "imagefolder",
    data_files="https://download.microsoft.com/download/3/E/1/3E1C3F21-ECDB-4869-8368-6DEBA77B919F/kagglecatsanddogs_3367a.zip",
)

# example 4: providing several splits
dataset = load_dataset(
    "imagefolder", data_files={"train": ["path/to/file1", "path/to/file2"], "test": ["path/to/file3", "path/to/file4"]}
)

ImageFolder は PIL-encoded 画像を含む画像カラムを作成します。

Next, push it to the hub!

# assuming you have ran the huggingface-cli login command in a terminal
dataset.push_to_hub("name_of_your_dataset")

# if you want to push to a private repo, simply pass private=True:
dataset.push_to_hub("name_of_your_dataset", private=True)

and that’s it! そして –dataset_name 引数をハブ上の貴方のデータセットの名前に単純に設定することによりモデルを訓練できます。

More on this can also be found in this blog post.

 

以上