安定した拡散1.x、安定した拡散2.x、およびカスタムデータセットを備えた安定した拡散XLモデルを作成およびトレーニングするためのツールチェーン。
このツールチェーンを使用すると、次のことができます。
>=3.8>=22.0.0 以下は、データセット生成プロセスの各ステップの概要です。完全な生産品質の例については、E621-Rising-Configs(NSFW)を参照してください。
# install DatasetRising
pip3 install DatasetRising
# start MongoDB database; use `dr-db-down` to stop
dr-db-up Dataset Risingには、Booruスタイルの画像ボードからメタデータ(=投稿とタグ)をダウンロードするためのCrawler( dr-crawl )があります。
Crawler( --agent AGENT_STRING )の一意のユーザーエージェント文字列を選択する必要があります。この文字列は、すべてのHTTPリクエストで画像ボードに渡されます。ユニークな特定のユーザーエージェントを選択しないと、画像ボードがリクエストをブロックする可能性があります。例えば:
--agent 'my-imageboard-crawler/1.0 (user @my-username-on-the-imageboard)'
クローラーは、レートの制限と再試行を自動的に管理します。以前の(失敗した)クロールを自動的に再開したい場合は、使用--recoverください。
# # download tag metadata to /tmp/tags.jsonl
dr-crawl --output /tmp/e962-tags.jsonl --type tags --source e926 --recover --agent ' <AGENT_STRING> '
# # download posts metadata to /tmp/e926.net-posts.jsonl
dr-crawl --output /tmp/e926.net-posts.jsonl --type posts --source e926 --recover --agent ' <AGENT_STRING> 'このセクションでは、
dr-db-upコマンドから始めることができる実行中のmongodbデータベースが必要です。
十分な投稿とタグメタデータができたら、データをデータベースにインポートする時が来ました。
Dataset Risingは、MongoDBを投稿およびタグメタデータのストアとして使用します。 dr-importを使用して、前のステップでダウンロードしたメタデータをMongoDBにインポートします。
インポート中にタグメタデータの処理方法を調整する場合は、 <dataset-rising>/examples/tag_normalizerのファイルを確認し、オプションのパラメーター--category-weights FILE --prefilter FILE 、 --rewrites FILE --aspect-ratios FILE --symbols FILEを設定します。
dr-import --tags /tmp/e926.net-tags.jsonl --posts /tmp/e926.net-posts.jsonl --source e926このセクションでは、
dr-db-upコマンドから始めることができる実行中のmongodbデータベースが必要です。
メタデータがデータベースにインポートされた後、セレクターファイルを使用して、データセット内の投稿のサブセットを選択できます。
あなたの目標は、すべての画像を含めることではなく、高品質のサンプルのセットを作成することです。セレクターはそのメカニズムです。
各セレクターには、タグの正と負のリストが含まれています。ポジティブリストから少なくとも1つのタグが含まれていない場合、ネガティブリストにタグがない場合、セレクターが投稿を含めます。
優れたデータセットには肯定的および否定的な例が含まれることに注意してください。正のサンプルでデータセットのみをトレーニングする場合、モデルはネガティブプロンプトをうまく使用できません。そのため、以下の例には4つの異なるタイプのセレクターが含まれています。
Dataset Risingには<dataset-rising>/examples/selectで使用可能なサンプルセレクターがあります。
セレクターが必要なサンプルの種類を生成していることを確認するには、 dr-previewスクリプトを使用してください。
# generate a HTML preview of how the selector will perform (note: --aggregate is required):
dr-preview --selector ./examples/select/tier-1/tier-1.yaml --output /tmp/preview/tier-1 --limit 1000 --output --aggregate
# generate a HTML preview of how each sub-selector will perform:
dr-preview --selector ./examples/select/tier-1/helpers/artists.yaml --output /tmp/preview/tier-1-artistsこのセクションでは、
dr-db-upコマンドから始めることができる実行中のmongodbデータベースが必要です。
セレクターが適切な種類のサンプルを生成していると確信している場合は、データセットを構築するための投稿を選択する時が来ました。 dr-select使用してデータベースから投稿を選択し、JSONLファイルに保存します。
cd < dataset-rising > /database
dr-select --selector ./examples/select/tier-1/tier-1.yaml --output /tmp/tier-1.jsonl
dr-select --selector ./examples/select/tier-2/tier-2.yaml --output /tmp/tier-2.jsonlデータセットの投稿を選択した後、 dr-joinを使用して選択とdr-build組み合わせて画像をダウンロードし、実際のデータセットを作成します。
デフォルトでは、ビルドスクリプトは、100個未満のサンプルを持つすべてのタグをプルーン化します。この制限を調整するには、 --min-posts-per-tag LIMITを使用します。
ビルドスクリプトは、10タグ未満のすべての画像をプルネットします。この制限を調整するには、 --min-tags-per-post LIMIT使用します。
--sourceの最後にパーセンテージを追加すると、ビルドスクリプトに、特定の--source ./my.jsonl:50%から合計データセットの多くのサンプルを選択するように指示します。
dr-join
--samples ' /tmp/tier-1.jsonl:80% '
--samples ' /tmp/tier-2.jsonl:20% '
--output ' /tmp/joined.jsonl '
dr-build
--source ' /tmp/joined.jsonl '
--output ' /tmp/my-dataset ' データセットを構築した後、それをHuggingfaceにアップロードします。
dr-buildスクリプトによって構築されたデータセットは、トレーニングに使用できるようになりました。 Dataset Risingは、Huggingfaceを使用して、安定した拡散モデルをトレーニングします。
モデルをトレーニングするには、開始するベースモデルを選択する必要があります。 --base-model 、次のようなディフューザー互換モデルにすることができます。
ベースモデルがトレーニングされた解像度に一致するように--image-widthと--image-heightを設定すると、トレーニングの結果が大幅に改善されることに注意してください。
トレーニング段階では、データセットを既にHuggingfaceにアップロードしていることを前提としています。
この例は、複数のGPUにスケーリングしません。マルチGPUトレーニングについては、高度なトピックセクションを参照してください。
この例では、安定した拡散XLモデルのトレーニング用に設計された
dr-train-xlを使用しています。安定した拡散1.xまたは安定した拡散2.xモデルをトレーニングする場合は、代わりにdr-trainを使用します。
dr-train-xl
--pretrained-model-name-or-path ' stabilityai/stable-diffusion-xl-base-1.0 '
--dataset-name ' username/dataset-name '
--output ' /tmp/dataset-rising-v3-model '
--resolution 1024
--maintain-aspect-ratio
--reshuffle-tags
--tag-separator ' '
--random-flip
--train-batch-size 32
--learning-rate 4e-6
--use-ema
--max-grad-norm 1
--checkpointing-steps 1000
--lr-scheduler constant
--lr-warmup-steps 0このステップはまだ実装されていません。このステップをスキップするのは安全です。
トレーニング後、 dr-generateスクリプトを使用して、モデルが期待どおりに機能していることを確認できます。
dr-generate
--model ' /tmp/dataset-rising-v3-model '
--output ' /tmp/samples '
--prompt ' cat playing chess with a horse '
--samples 100 安定した拡散WebUIでモデルを使用するには、 safetensors形式に変換する必要があります。
# Stable Diffusion XL models:
dr-convert-sdxl
--model_path ' /tmp/dataset-rising-v3-model '
--checkpoint_path ' /tmp/dataset-rising-v3-model.safetensors '
--use_safetensors
# Other Stable Diffusion models:
dr-convert-sd
--model_path ' /tmp/dataset-rising-v3-model '
--checkpoint_path ' /tmp/dataset-rising-v3-model.safetensors '
--use_safetensors
# Copy the model to the WebUI models directory:
cp ' /tmp/dataset-rising-v3-model.safetensors ' ' <webui-root>/models/Stable-diffusion ' アンインストールを必要とするデータセットライジングの唯一の部分は、MongoDBデータベースです。次のコマンドでデータベースをアンインストールできます。
# Shut down MongoDB instance
dr-db-down
# Remove MongoDB container and its data -- warning! data loss will occur
dr-db-uninstallデータベースをリセットするには、次のコマンドを実行します。
警告:データベース内のすべてのデータが失われます。
dr-db-uninstall && dr-db-up && dr-db-createappendスクリプトを使用すると、追加のソースから投稿をインポートできます。
importを使用して最初のソースをインポートし、タグネームスペースを定義し、追加のソースをインポートするには、 append使用します。
# main sources and tags
dr-import ...
# additional sources
dr-append --input /tmp/gelbooru-posts.jsonl --source gelbooruMulti-GPUトレーニングは、Huggingface Accelerate Libraryを使用して実行できます。
トレーニング前に、 accelerate configを実行して、マルチGPU環境をセットアップします。
cd < dataset-rising > /train
# set up environment
accelerate config
# run training
accelerate launch
--multi_gpu
--mixed_precision= ${PRECISION}
dr_train.py
--pretrained-model-name-or-path ' stabilityai/stable-diffusion-xl-base-1.0 '
--dataset-name ' username/dataset-name '
--resolution 1024
--maintain-aspect-ratio
--reshuffle-tags
--tag-separator ' '
--random-flip
--train-batch-size 32
--learning-rate 4e-6
--use-ema
--max-grad-norm 1
--checkpointing-steps 1000
--lr-scheduler constant
--lr-warmup-steps 0dataset-risingインストールしますhuggingface-cli login )accelerate config )を構成するaws configure )を構成する一部の構成ではNCCL_P2P_DISABLE=1および/またはNCCL_IB_DISABLE=1環境変数を設定する必要があります。
export NCCL_P2P_DISABLE=1
export NCCL_IB_DISABLE=1
dr-train-xl ...HF_DATASETS_CACHEとHF_MODULES_CACHEを使用して、Huggingfaceがキャッシュファイルを保存する場所を制御する
export HF_DATASETS_CACHE=/workspace/cache/huggingface/datasets
export HF_MODULES_CACHE=/workspace/cache/huggingface/modules
dr-train-xl ...仮想環境を作成し、パッケージをインストールし、DockerにMongoDBデータベースをセットアップします。
cd < dataset-rising >
./up.shMongoDBデータベースコンテナを停止します。データベースは、 ./up.shを再度実行して再起動できます。
cd < dataset-rising >
./down.sh警告:この手順により、MongoDBデータベースコンテナとその上に保存されているすべてのデータが削除されます。
cd < dataset-rising >
./uninstall.shpython3 -m pip install --upgrade build twine
python3 -m build
python3 -m twine upload dist/ *フローチャートTD
クロール[クロール/投稿、タグ、タグエイリアスのダウンロード] -JSONL->インポート
インポート[投稿、タグ、タグエイリアスをインポート] - >ストア
追加[追加の投稿を追加] - >ストア
[データベース] - >プレビュー
store-> select1
store-> select2
store-> select3
プレビュー[プレビューセレクター] - > HTML(HTML)
select1 [Select Samples] -JSonl-> Join
select2 [Select samples] -Jsonl-> Join
select3 [Select samples] -Jsonl-> Join
[結合] [結合およびプルーンサンプル] -Jsonl-> build
ビルド[データセットのビルド] -HFデータセット/パーケット - >トレイン
トレーニング[列車モデル] - >モデル[モデル]