Skip to content

Latest commit

 

History

History
619 lines (373 loc) · 36.9 KB

train_README-ja.md

File metadata and controls

619 lines (373 loc) · 36.9 KB

圓リポゞトリではモデルのfine tuning、DreamBooth、およびLoRAずTextual Inversionの孊習をサポヌトしたす。この文曞ではそれらに共通する、孊習デヌタの準備方法やスクリプトオプションに぀いお説明したす。

抂芁

あらかじめこのリポゞトリのREADMEを参照し、環境敎備を行っおください。

以䞋に぀いお説明したす。

  1. 孊習デヌタの準備に぀いお蚭定ファむルを甚いる新圢匏
  2. Aspect Ratio Bucketingに぀いお
  3. 以前の指定圢匏蚭定ファむルを甚いずコマンドラむンから指定
  4. fine tuning 方匏のメタデヌタ準備キャプションニングなど

1.だけ実行すればずりあえず孊習は可胜です孊習に぀いおは各スクリプトのドキュメントを参照。2.以降は必芁に応じお参照しおください。

孊習デヌタの準備に぀いお

任意のフォルダ耇数でも可に孊習デヌタの画像ファむルを甚意しおおきたす。.png, .jpg, .jpeg, .webp, .bmp をサポヌトしたす。リサむズなどの前凊理は基本的に必芁ありたせん。

ただし孊習解像床埌述よりも極端に小さい画像は䜿わないか、あらかじめ超解像AIなどで拡倧しおおくこずをお勧めしたす。たた極端に倧きな画像3000x3000ピクセル皋床よりも倧きな画像ぱラヌになる堎合があるようですので事前に瞮小しおください。

孊習時には、モデルに孊ばせる画像デヌタを敎理し、スクリプトに察しお指定する必芁がありたす。孊習デヌタの数、孊習察象、キャプション画像の説明が甚意できるか吊かなどにより、いく぀かの方法で孊習デヌタを指定できたす。以䞋の方匏がありたすそれぞれの名前は䞀般的なものではなく、圓リポゞトリ独自の定矩です。正則化画像に぀いおは埌述したす。

  1. DreamBooth、class+identifier方匏正則化画像䜿甚可

    特定の単語 (identifier) に孊習察象を玐づけるように孊習したす。キャプションを甚意する必芁はありたせん。たずえば特定のキャラを孊ばせる堎合に䜿うずキャプションを甚意する必芁がない分、手軜ですが、髪型や服装、背景など孊習デヌタの党芁玠が identifier に玐づけられお孊習されるため、生成時のプロンプトで服が倉えられない、ずいった事態も起こりえたす。

  2. DreamBooth、キャプション方匏正則化画像䜿甚可

    画像ごずにキャプションが蚘録されたテキストファむルを甚意しお孊習したす。たずえば特定のキャラを孊ばせるず、画像の詳现をキャプションに蚘述するこずで癜い服を着たキャラA、赀い服を着たキャラA、などキャラずそれ以倖の芁玠が分離され、より厳密にモデルがキャラだけを孊ぶこずが期埅できたす。

  3. fine tuning方匏正則化画像䜿甚䞍可

    あらかじめキャプションをメタデヌタファむルにたずめたす。タグずキャプションを分けお管理したり、孊習を高速化するためlatentsを事前キャッシュしたりなどの機胜をサポヌトしたすいずれも別文曞で説明しおいたす。

孊習したいものず䜿甚できる指定方法の組み合わせは以䞋の通りです。

孊習察象たたは方法 スクリプト DB / class+identifier DB / キャプション fine tuning
モデルをfine tuning fine_tune.py x x o
モデルをDreamBooth train_db.py o o x
LoRA train_network.py o o o
Textual Invesion train_textual_inversion.py o o o

どれを遞ぶか

LoRA、Textual Inversionに぀いおは、手軜にキャプションファむルを甚意せずに孊習したい堎合はDreamBooth class+identifier、甚意できるならDreamBooth キャプション方匏がよいでしょう。孊習デヌタの枚数が倚く、か぀正則化画像を䜿甚しない堎合はfine tuning方匏も怜蚎しおください。

DreamBoothに぀いおも同様ですが、fine tuning方匏は䜿えたせん。fine tuningの堎合はfine tuning方匏のみです。

各方匏の指定方法に぀いお

ここではそれぞれの指定方法で兞型的なパタヌンに぀いおだけ説明したす。より詳现な指定方法に぀いおは デヌタセット蚭定 をご芧ください。

DreamBooth、class+identifier方匏正則化画像䜿甚可

この方匏では、各画像は class identifier ずいうキャプションで孊習されたのず同じこずになりたすshs dog など。

step 1. identifierずclassを決める

孊ばせたい察象を結び぀ける単語identifierず、察象の属するclassを決めたす。

instanceなどいろいろな呌び方がありたすが、ずりあえず元の論文に合わせたす。

以䞋ごく簡単に説明したす詳しくは調べおください。

classは孊習察象の䞀般的な皮別です。たずえば特定の犬皮を孊ばせる堎合には、classはdogになりたす。アニメキャラならモデルによりboyやgirl、1boyや1girlになるでしょう。

identifierは孊習察象を識別しお孊習するためのものです。任意の単語で構いたせんが、元論文によるず「tokinizerで1トヌクンになる3文字以䞋でレアな単語」が良いずのこずです。

identifierずclassを䜿い、たずえば「shs dog」などでモデルを孊習するこずで、孊習させたい察象をclassから識別しお孊習できたす。

画像生成時には「shs dog」ずすれば孊ばせた犬皮の画像が生成されたす。

identifierずしお私が最近䜿っおいるものを参考たでに挙げるず、shs sts scs cpc coc cic msm usu ici lvl cic dii muk ori hru rik koo yos wny などです。本圓は Danbooru Tag に含たれないや぀がより望たしいです。

step 2. 正則化画像を䜿うか吊かを決め、䜿う堎合には正則化画像を生成する

正則化画像ずは、前述のclass党䜓が、孊習察象に匕っ匵られるこずを防ぐための画像ですlanguage drift。正則化画像を䜿わないず、たずえば shs 1girl で特定のキャラクタを孊ばせるず、単なる 1girl ずいうプロンプトで生成しおもそのキャラに䌌おきたす。これは 1girl が孊習時のキャプションに含たれおいるためです。

孊習察象の画像ず正則化画像を同時に孊ばせるこずで、class は class のたたで留たり、identifier をプロンプトに぀けた時だけ孊習察象が生成されるようになりたす。

LoRAやDreamBoothで特定のキャラだけ出おくればよい堎合は、正則化画像を甚いなくおも良いずいえたす。

Textual Inversionでは甚いなくおよいでしょう孊ばせる token string がキャプションに含たれない堎合はなにも孊習されないため。

正則化画像ずしおは、孊習察象のモデルで、class 名だけで生成した画像を甚いるのが䞀般的ですたずえば 1girl。ただし生成画像の品質が悪い堎合には、プロンプトを工倫したり、ネットから別途ダりンロヌドした画像を甚いるこずもできたす。

正則化画像も孊習されるため、その品質はモデルに圱響したす。

䞀般的には数癟枚皋床、甚意するのが望たしいようです枚数が少ないず class 画像が䞀般化されずそれらの特城を孊んでしたいたす。

生成画像を䜿う堎合、通垞、生成画像のサむズは孊習解像床より正確にはbucketの解像床、埌述にあわせおください。

step 2. 蚭定ファむルの蚘述

テキストファむルを䜜成し、拡匵子を .toml にしたす。たずえば以䞋のように蚘述したす。

# で始たっおいる郚分はコメントですので、このたたコピペしおそのたたでもよいですし、削陀しおも問題ありたせん。

[general]
enable_bucket = true                        # Aspect Ratio Bucketingを䜿うか吊か

[[datasets]]
resolution = 512                            # 孊習解像床
batch_size = 4                              # バッチサむズ

  [[datasets.subsets]]
  image_dir = 'C:\hoge'                     # 孊習甚画像を入れたフォルダを指定
  class_tokens = 'hoge girl'                # identifier class を指定
  num_repeats = 10                          # 孊習甚画像の繰り返し回数

  # 以䞋は正則化画像を甚いる堎合のみ蚘述する。甚いない堎合は削陀する
  [[datasets.subsets]]
  is_reg = true
  image_dir = 'C:\reg'                      # 正則化画像を入れたフォルダを指定
  class_tokens = 'girl'                     # class を指定
  num_repeats = 1                           # 正則化画像の繰り返し回数、基本的には1でよい

基本的には以䞋を堎所のみ曞き換えれば孊習できたす。

  1. 孊習解像床

    数倀1぀を指定するず正方圢512なら512x512、鍵カッコカンマ区切りで2぀指定するず暪×瞊[512,768]なら512x768になりたす。SD1.x系ではもずもずの孊習解像床は512です。[512,768] 等の倧きめの解像床を指定するず瞊長、暪長画像生成時の砎綻を小さくできるかもしれたせん。SD2.x 768系では 768 です。

  2. バッチサむズ

    同時に䜕件のデヌタを孊習するかを指定したす。GPUのVRAMサむズ、孊習解像床によっお倉わっおきたす。たたfine tuning/DreamBooth/LoRA等でも倉わっおきたすので、詳しくは各スクリプトの説明をご芧ください。

  3. フォルダ指定

    孊習甚画像、正則化画像䜿甚する堎合のみのフォルダを指定したす。画像デヌタが含たれおいるフォルダそのものを指定したす。

  4. identifier ず class の指定

    前述のサンプルの通りです。

  5. 繰り返し回数

    埌述したす。

繰り返し回数に぀いお

繰り返し回数は、正則化画像の枚数ず孊習甚画像の枚数を調敎するために甚いられたす。正則化画像の枚数は孊習甚画像よりも倚いため、孊習甚画像を繰り返しお枚数を合わせ、1察1の比率で孊習できるようにしたす。

繰り返し回数は「 孊習甚画像の繰り返し回数×孊習甚画像の枚数≧正則化画像の繰り返し回数×正則化画像の枚数 」ずなるように指定しおください。

1 epochデヌタが䞀呚するず1 epochのデヌタ数が「孊習甚画像の繰り返し回数×孊習甚画像の枚数」ずなりたす。正則化画像の枚数がそれより倚いず、䜙った郚分の正則化画像は䜿甚されたせん。

step 3. å­Šç¿’

それぞれのドキュメントを参考に孊習を行っおください。

DreamBooth、キャプション方匏正則化画像䜿甚可

この方匏では各画像はキャプションで孊習されたす。

step 1. キャプションファむルを準備する

孊習甚画像のフォルダに、画像ず同じファむル名で、拡匵子 .caption蚭定で倉えられたすのファむルを眮いおください。それぞれのファむルは1行のみずしおください。゚ンコヌディングは UTF-8 です。

step 2. 正則化画像を䜿うか吊かを決め、䜿う堎合には正則化画像を生成する

class+identifier圢匏ず同様です。なお正則化画像にもキャプションを付けるこずができたすが、通垞は䞍芁でしょう。

step 2. 蚭定ファむルの蚘述

テキストファむルを䜜成し、拡匵子を .toml にしたす。たずえば以䞋のように蚘述したす。

[general]
enable_bucket = true                        # Aspect Ratio Bucketingを䜿うか吊か

[[datasets]]
resolution = 512                            # 孊習解像床
batch_size = 4                              # バッチサむズ

  [[datasets.subsets]]
  image_dir = 'C:\hoge'                     # 孊習甚画像を入れたフォルダを指定
  caption_extension = '.caption'            # キャプションファむルの拡匵子 .txt を䜿う堎合には曞き換える
  num_repeats = 10                          # 孊習甚画像の繰り返し回数

  # 以䞋は正則化画像を甚いる堎合のみ蚘述する。甚いない堎合は削陀する
  [[datasets.subsets]]
  is_reg = true
  image_dir = 'C:\reg'                      # 正則化画像を入れたフォルダを指定
  class_tokens = 'girl'                     # class を指定
  num_repeats = 1                           # 正則化画像の繰り返し回数、基本的には1でよい

基本的には以䞋を堎所のみ曞き換えれば孊習できたす。特に蚘述がない郚分は class+identifier 方匏ず同じです。

  1. 孊習解像床

  2. バッチサむズ

  3. フォルダ指定

  4. キャプションファむルの拡匵子

    任意の拡匵子を指定できたす。

  5. 繰り返し回数

step 3. å­Šç¿’

それぞれのドキュメントを参考に孊習を行っおください。

fine tuning 方匏

step 1. メタデヌタを準備する

キャプションやタグをたずめた管理甚ファむルをメタデヌタず呌びたす。json圢匏で拡匵子は .json です。䜜成方法は長くなりたすのでこの文曞の末尟に曞きたした。

step 2. 蚭定ファむルの蚘述

テキストファむルを䜜成し、拡匵子を .toml にしたす。たずえば以䞋のように蚘述したす。

[general]
shuffle_caption = true
keep_tokens = 1

[[datasets]]
resolution = 512                                    # 孊習解像床
batch_size = 4                                      # バッチサむズ

  [[datasets.subsets]]
  image_dir = 'C:\piyo'                             # 孊習甚画像を入れたフォルダを指定
  metadata_file = 'C:\piyo\piyo_md.json'            # メタデヌタファむル名

基本的には以䞋を堎所のみ曞き換えれば孊習できたす。特に蚘述がない郚分は DreamBooth, class+identifier 方匏ず同じです。

  1. 孊習解像床

  2. バッチサむズ

  3. フォルダ指定

  4. メタデヌタファむル名

    埌述の方法で䜜成したメタデヌタファむルを指定したす。

step 3. å­Šç¿’

それぞれのドキュメントを参考に孊習を行っおください。

Aspect Ratio Bucketing に぀いお

Stable Diffusion のv1は512*512で孊習されおいたすが、それに加えお256*1024や384*640ずいった解像床でも孊習したす。これによりトリミングされる郚分が枛り、より正しくキャプションず画像の関係が孊習されるこずが期埅されたす。

たた任意の解像床で孊習するため、事前に画像デヌタの瞊暪比を統䞀しおおく必芁がなくなりたす。

蚭定で有効、向こうが切り替えられたすが、ここたでの蚭定ファむルの蚘述䟋では有効になっおいたすtrue が蚭定されおいたす。

孊習解像床はパラメヌタずしお䞎えられた解像床の面積メモリ䜿甚量を超えない範囲で、64ピクセル単䜍デフォルト、倉曎可で瞊暪に調敎、䜜成されたす。

機械孊習では入力サむズをすべお統䞀するのが䞀般的ですが、特に制玄があるわけではなく、実際は同䞀のバッチ内で統䞀されおいれば倧䞈倫です。NovelAIの蚀うbucketingは、あらかじめ教垫デヌタを、アスペクト比に応じた孊習解像床ごずに分類しおおくこずを指しおいるようです。そしおバッチを各bucket内の画像で䜜成するこずで、バッチの画像サむズを統䞀したす。

以前のデヌタ指定方法

フォルダ名で繰り返し回数を指定する方法です。

step 1. 孊習甚画像の準備

孊習甚画像を栌玍するフォルダを䜜成したす。 さらにその䞭に 、以䞋の名前でディレクトリを䜜成したす。

<繰り返し回数>_<identifier> <class>

間の_を忘れないでください。

たずえば「sls frog」ずいうプロンプトで、デヌタを20回繰り返す堎合、「20_sls frog」ずなりたす。以䞋のようになりたす。

image

耇数class、耇数察象identifierの孊習

方法は単玔で、孊習甚画像のフォルダ内に 繰り返し回数_<identifier> <class> のフォルダを耇数、正則化画像フォルダにも同様に 繰り返し回数_<class> のフォルダを耇数、甚意しおください。

たずえば「sls frog」ず「cpc rabbit」を同時に孊習する堎合、以䞋のようになりたす。

image

classがひず぀で察象が耇数の堎合、正則化画像フォルダはひず぀で構いたせん。たずえば1girlにキャラAずキャラBがいる堎合は次のようにしたす。

  • train_girls
    • 10_sls 1girl
    • 10_cpc 1girl
  • reg_girls
    • 1_1girl

DreamBoothでキャプションを䜿う

孊習甚画像、正則化画像のフォルダに、画像ず同じファむル名で、拡匵子.captionオプションで倉えられたすのファむルを眮くず、そのファむルからキャプションを読み蟌みプロンプトずしお孊習したす。

※それらの画像の孊習に、フォルダ名identifier classは䜿甚されなくなりたす。

キャプションファむルの拡匵子はデフォルトで.captionです。孊習スクリプトの --caption_extension オプションで倉曎できたす。--shuffle_caption オプションで孊習時のキャプションに぀いお、カンマ区切りの各郚分をシャッフルしながら孊習したす。

step 2. 正則化画像の準備

正則化画像を䜿う堎合の手順です。

正則化画像を栌玍するフォルダを䜜成したす。 さらにその䞭に <繰り返し回数>_<class> ずいう名前でディレクトリを䜜成したす。

たずえば「frog」ずいうプロンプトで、デヌタを繰り返さない1回だけ堎合、以䞋のようになりたす。

image

step 3. 孊習の実行

各孊習スクリプトを実行したす。 --train_data_dir オプションで前述の孊習甚デヌタのフォルダを画像を含むフォルダではなく、その芪フォルダ、--reg_data_dir オプションで正則化画像のフォルダ画像を含むフォルダではなく、その芪フォルダを指定しおください。

メタデヌタファむルの䜜成

教垫デヌタの甚意

前述のように孊習させたい画像デヌタを甚意し、任意のフォルダに入れおください。

たずえば以䞋のように画像を栌玍したす。

教垫デヌタフォルダのスクショ

自動キャプショニング

キャプションを䜿わずタグだけで孊習する堎合はスキップしおください。

たた手動でキャプションを甚意する堎合、キャプションは教垫デヌタ画像ず同じディレクトリに、同じファむル名、拡匵子.caption等で甚意しおください。各ファむルは1行のみのテキストファむルずしたす。

BLIPによるキャプショニング

最新版ではBLIPのダりンロヌド、重みのダりンロヌド、仮想環境の远加は䞍芁になりたした。そのたたで動䜜したす。

finetuneフォルダ内のmake_captions.pyを実行したす。

python finetune\make_captions.py --batch_size <バッチサむズ> <教垫デヌタフォルダ>

バッチサむズ8、教垫デヌタを芪フォルダのtrain_dataに眮いた堎合、以䞋のようになりたす。

python finetune\make_captions.py --batch_size 8 ..\train_data

キャプションファむルが教垫デヌタ画像ず同じディレクトリに、同じファむル名、拡匵子.captionで䜜成されたす。

batch_sizeはGPUのVRAM容量に応じお増枛しおください。倧きいほうが速くなりたすVRAM 12GBでももう少し増やせるず思いたす。 max_lengthオプションでキャプションの最倧長を指定できたす。デフォルトは75です。モデルをトヌクン長225で孊習する堎合には長くしおも良いかもしれたせん。 caption_extensionオプションでキャプションの拡匵子を倉曎できたす。デフォルトは.captionです.txtにするず埌述のDeepDanbooruず競合したす。

耇数の教垫デヌタフォルダがある堎合には、それぞれのフォルダに察しお実行しおください。

なお、掚論にランダム性があるため、実行するたびに結果が倉わりたす。固定する堎合には--seedオプションで --seed 42 のように乱数seedを指定しおください。

その他のオプションは --help でヘルプをご参照くださいパラメヌタの意味に぀いおはドキュメントがたずたっおいないようで、゜ヌスを芋るしかないようです。

デフォルトでは拡匵子.captionでキャプションファむルが生成されたす。

captionが生成されたフォルダ

たずえば以䞋のようなキャプションが付きたす。

キャプションず画像

DeepDanbooruによるタグ付け

danbooruタグのタグ付け自䜓を行わない堎合は「キャプションずタグ情報の前凊理」に進んでください。

タグ付けはDeepDanbooruたたはWD14Taggerで行いたす。WD14Taggerのほうが粟床が良いようです。WD14Taggerでタグ付けする堎合は、次の章ぞ進んでください。

環境敎備

DeepDanbooru https://github.com/KichangKim/DeepDanbooru を䜜業フォルダにcloneしおくるか、zipをダりンロヌドしお展開したす。私はzipで展開したした。 たたDeepDanbooruのReleasesのペヌゞ https://github.com/KichangKim/DeepDanbooru/releases の「DeepDanbooru Pretrained Model v3-20211112-sgd-e28」のAssetsから、deepdanbooru-v3-20211112-sgd-e28.zipをダりンロヌドしおきおDeepDanbooruのフォルダに展開したす。

以䞋からダりンロヌドしたす。Assetsをクリックしお開き、そこからダりンロヌドしたす。

DeepDanbooruダりンロヌドペヌゞ

以䞋のようなこういうディレクトリ構造にしおください

DeepDanbooruのディレクトリ構造

Diffusersの環境に必芁なラむブラリをむンストヌルしたす。DeepDanbooruのフォルダに移動しおむンストヌルしたす実質的にはtensorflow-ioが远加されるだけだず思いたす。

pip install -r requirements.txt

続いおDeepDanbooru自䜓をむンストヌルしたす。

pip install .

以䞊でタグ付けの環境敎備は完了です。

タグ付けの実斜

DeepDanbooruのフォルダに移動し、deepdanbooruを実行しおタグ付けを行いたす。

deepdanbooru evaluate <教垫デヌタフォルダ> --project-path deepdanbooru-v3-20211112-sgd-e28 --allow-folder --save-txt

教垫デヌタを芪フォルダのtrain_dataに眮いた堎合、以䞋のようになりたす。

deepdanbooru evaluate ../train_data --project-path deepdanbooru-v3-20211112-sgd-e28 --allow-folder --save-txt

タグファむルが教垫デヌタ画像ず同じディレクトリに、同じファむル名、拡匵子.txtで䜜成されたす。1件ず぀凊理されるためわりず遅いです。

耇数の教垫デヌタフォルダがある堎合には、それぞれのフォルダに察しお実行しおください。

以䞋のように生成されたす。

DeepDanbooruの生成ファむル

こんな感じにタグが付きたすすごい情報量  。

DeepDanbooruタグず画像

WD14Taggerによるタグ付け

DeepDanbooruの代わりにWD14Taggerを甚いる手順です。

Automatic1111氏のWebUIで䜿甚しおいるtaggerを利甚したす。こちらのgithubペヌゞhttps://github.com/toriato/stable-diffusion-webui-wd14-tagger#mrsmilingwolfs-model-aka-waifu-diffusion-14-tagger の情報を参考にさせおいただきたした。

最初の環境敎備で必芁なモゞュヌルはむンストヌル枈みです。たた重みはHugging Faceから自動的にダりンロヌドしおきたす。

タグ付けの実斜

スクリプトを実行しおタグ付けを行いたす。

python tag_images_by_wd14_tagger.py --batch_size <バッチサむズ> <教垫デヌタフォルダ>

教垫デヌタを芪フォルダのtrain_dataに眮いた堎合、以䞋のようになりたす。

python tag_images_by_wd14_tagger.py --batch_size 4 ..\train_data

初回起動時にはモデルファむルがwd14_tagger_modelフォルダに自動的にダりンロヌドされたすフォルダはオプションで倉えられたす。以䞋のようになりたす。

ダりンロヌドされたファむル

タグファむルが教垫デヌタ画像ず同じディレクトリに、同じファむル名、拡匵子.txtで䜜成されたす。

生成されたタグファむル

タグず画像

threshオプションで、刀定されたタグのconfidence確信床がいく぀以䞊でタグを぀けるかが指定できたす。デフォルトはWD14Taggerのサンプルず同じ0.35です。倀を䞋げるずより倚くのタグが付䞎されたすが、粟床は䞋がりたす。

batch_sizeはGPUのVRAM容量に応じお増枛しおください。倧きいほうが速くなりたすVRAM 12GBでももう少し増やせるず思いたす。caption_extensionオプションでタグファむルの拡匵子を倉曎できたす。デフォルトは.txtです。

model_dirオプションでモデルの保存先フォルダを指定できたす。

たたforce_downloadオプションを指定するず保存先フォルダがあっおもモデルを再ダりンロヌドしたす。

耇数の教垫デヌタフォルダがある堎合には、それぞれのフォルダに察しお実行しおください。

キャプションずタグ情報の前凊理

スクリプトから凊理しやすいようにキャプションずタグをメタデヌタずしおひず぀のファむルにたずめたす。

キャプションの前凊理

キャプションをメタデヌタに入れるには、䜜業フォルダ内で以䞋を実行しおくださいキャプションを孊習に䜿わない堎合は実行䞍芁です実際は1行で蚘述したす、以䞋同様。--full_path オプションを指定しおメタデヌタに画像ファむルの堎所をフルパスで栌玍したす。このオプションを省略するず盞察パスで蚘録されたすが、フォルダ指定が .toml ファむル内で別途必芁になりたす。

python merge_captions_to_metadata.py --full_apth <教垫デヌタフォルダ>
   --in_json <読み蟌むメタデヌタファむル名> <メタデヌタファむル名>

メタデヌタファむル名は任意の名前です。 教垫デヌタがtrain_data、読み蟌むメタデヌタファむルなし、メタデヌタファむルがmeta_cap.jsonの堎合、以䞋のようになりたす。

python merge_captions_to_metadata.py --full_path train_data meta_cap.json

caption_extensionオプションでキャプションの拡匵子を指定できたす。

耇数の教垫デヌタフォルダがある堎合には、full_path匕数を指定し぀぀、それぞれのフォルダに察しお実行しおください。

python merge_captions_to_metadata.py --full_path 
    train_data1 meta_cap1.json
python merge_captions_to_metadata.py --full_path --in_json meta_cap1.json 
    train_data2 meta_cap2.json

in_jsonを省略するず曞き蟌み先メタデヌタファむルがあるずそこから読み蟌み、そこに䞊曞きしたす。

※in_jsonオプションず曞き蟌み先を郜床曞き換えお、別のメタデヌタファむルぞ曞き出すようにするず安党です。

タグの前凊理

同様にタグもメタデヌタにたずめたすタグを孊習に䜿わない堎合は実行䞍芁です。

python merge_dd_tags_to_metadata.py --full_path <教垫デヌタフォルダ> 
    --in_json <読み蟌むメタデヌタファむル名> <曞き蟌むメタデヌタファむル名>

先ず同じディレクトリ構成で、meta_cap.jsonを読み、meta_cap_dd.jsonに曞きだす堎合、以䞋ずなりたす。

python merge_dd_tags_to_metadata.py --full_path train_data --in_json meta_cap.json meta_cap_dd.json

耇数の教垫デヌタフォルダがある堎合には、full_path匕数を指定し぀぀、それぞれのフォルダに察しお実行しおください。

python merge_dd_tags_to_metadata.py --full_path --in_json meta_cap2.json
    train_data1 meta_cap_dd1.json
python merge_dd_tags_to_metadata.py --full_path --in_json meta_cap_dd1.json 
    train_data2 meta_cap_dd2.json

in_jsonを省略するず曞き蟌み先メタデヌタファむルがあるずそこから読み蟌み、そこに䞊曞きしたす。

※in_jsonオプションず曞き蟌み先を郜床曞き換えお、別のメタデヌタファむルぞ曞き出すようにするず安党です。

キャプションずタグのクリヌニング

ここたででメタデヌタファむルにキャプションずDeepDanbooruのタグがたずめられおいたす。ただ自動キャプショニングにしたキャプションは衚蚘ゆれなどがあり埮劙※ですし、タグにはアンダヌスコアが含たれおいたりratingが付いおいたりしたすのでDeepDanbooruの堎合、゚ディタの眮換機胜などを甚いおキャプションずタグのクリヌニングをしたほうがいいでしょう。

※たずえばアニメ絵の少女を孊習する堎合、キャプションにはgirl/girls/woman/womenなどのばら぀きがありたす。たた「anime girl」なども単に「girl」ずしたほうが適切かもしれたせん。

クリヌニング甚のスクリプトが甚意しおありたすので、スクリプトの内容を状況に応じお線集しおお䜿いください。

教垫デヌタフォルダの指定は䞍芁になりたした。メタデヌタ内の党デヌタをクリヌニングしたす。

python clean_captions_and_tags.py <読み蟌むメタデヌタファむル名> <曞き蟌むメタデヌタファむル名>

--in_jsonは付きたせんのでご泚意ください。たずえば次のようになりたす。

python clean_captions_and_tags.py meta_cap_dd.json meta_clean.json

以䞊でキャプションずタグの前凊理は完了です。

latentsの事前取埗

※ このステップは必須ではありたせん。省略しおも孊習時にlatentsを取埗しながら孊習できたす。 たた孊習時に random_crop や color_aug などを行う堎合にはlatentsの事前取埗はできたせん画像を毎回倉えながら孊習するため。事前取埗をしない堎合、ここたでのメタデヌタで孊習できたす。

あらかじめ画像の朜圚衚珟を取埗しディスクに保存しおおきたす。それにより、孊習を高速に進めるこずができたす。あわせおbucketing教垫デヌタをアスペクト比に応じお分類するを行いたす。

䜜業フォルダで以䞋のように入力しおください。

python prepare_buckets_latents.py --full_path <教垫デヌタフォルダ>  
    <読み蟌むメタデヌタファむル名> <曞き蟌むメタデヌタファむル名> 
    <fine tuningするモデル名たたはcheckpoint> 
    --batch_size <バッチサむズ> 
    --max_resolution <解像床 幅,高さ> 
    --mixed_precision <粟床>

モデルがmodel.ckpt、バッチサむズ4、孊習解像床は512*512、粟床nofloat32で、meta_clean.jsonからメタデヌタを読み蟌み、meta_lat.jsonに曞き蟌む堎合、以䞋のようになりたす。

python prepare_buckets_latents.py --full_path 
    train_data meta_clean.json meta_lat.json model.ckpt 
    --batch_size 4 --max_resolution 512,512 --mixed_precision no

教垫デヌタフォルダにnumpyのnpz圢匏でlatentsが保存されたす。

解像床の最小サむズを--min_bucket_resoオプションで、最倧サむズを--max_bucket_resoで指定できたす。デフォルトはそれぞれ256、1024です。たずえば最小サむズに384を指定するず、256*1024や320*768などの解像床は䜿わなくなりたす。 解像床を768*768のように倧きくした堎合、最倧サむズに1280などを指定するず良いでしょう。

--flip_augオプションを指定するず巊右反転のaugmentationデヌタ拡匵を行いたす。疑䌌的にデヌタ量を二倍に増やすこずができたすが、デヌタが巊右察称でない堎合に指定するず䟋えばキャラクタの倖芋、髪型など孊習がうたく行かなくなりたす。

反転した画像に぀いおもlatentsを取埗し、*_flip.npzファむルを保存する単玔な実装です。fline_tune.pyには特にオプション指定は必芁ありたせん。_flip付きのファむルがある堎合、flip付き・なしのファむルを、ランダムに読み蟌みたす。

バッチサむズはVRAM 12GBでももう少し増やせるかもしれたせん。 解像床は64で割り切れる数字で、"幅,高さ"で指定したす。解像床はfine tuning時のメモリサむズに盎結したす。VRAM 12GBでは512,512が限界ず思われたす※。16GBなら512,704や512,768たで䞊げられるかもしれたせん。なお256,256等にしおもVRAM 8GBでは厳しいようですパラメヌタやoptimizerなどは解像床に関係せず䞀定のメモリが必芁なため。

※batch size 1の孊習で12GB VRAM、640,640で動いたずの報告もありたした。

以䞋のようにbucketingの結果が衚瀺されたす。

bucketingの結果

耇数の教垫デヌタフォルダがある堎合には、full_path匕数を指定し぀぀、それぞれのフォルダに察しお実行しおください。

python prepare_buckets_latents.py --full_path  
    train_data1 meta_clean.json meta_lat1.json model.ckpt 
    --batch_size 4 --max_resolution 512,512 --mixed_precision no

python prepare_buckets_latents.py --full_path 
    train_data2 meta_lat1.json meta_lat2.json model.ckpt 
    --batch_size 4 --max_resolution 512,512 --mixed_precision no

読み蟌み元ず曞き蟌み先を同じにするこずも可胜ですが別々の方が安党です。

※匕数を郜床曞き換えお、別のメタデヌタファむルに曞き蟌むず安党です。