File size: 6,358 Bytes
fb83c5b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# variables related to the pretrained model
$pretrained_model_name_or_path = "D:\models\test\samdoesart2\model\last"
$v2 = 1 # set to 1 for true or 0 for false
$v_model = 0 # set to 1 for true or 0 for false
# variables related to the training dataset and output directory
$train_dir = "D:\models\test\samdoesart2"
$image_folder = "D:\dataset\samdoesart2\raw"
$output_dir = "D:\models\test\samdoesart2\model_e2\"
$max_resolution = "512,512"
# variables related to the training process
$learning_rate = 1e-6
$lr_scheduler = "constant" # Default is constant
$lr_warmup = 0 # % of steps to warmup for 0 - 100. Default is 0.
$dataset_repeats = 40
$train_batch_size = 8
$epoch = 1
$save_every_n_epochs = 1
$mixed_precision = "bf16"
$save_precision = "fp16" # use fp16 for better compatibility with auto1111 and other repo
$seed = "494481440"
$num_cpu_threads_per_process = 6
$train_text_encoder = 0 # set to 1 to train text encoder otherwise set to 0
# variables related to the resulting diffuser model. If input is ckpt or tensors then it is not applicable
$convert_to_safetensors = 1 # set to 1 to convert resulting diffuser to ckpt
$convert_to_ckpt = 1 # set to 1 to convert resulting diffuser to ckpt
# other variables
$kohya_finetune_repo_path = "D:\kohya_ss"
### You should not need to change things below
# Set variables to useful values using ternary operator
$v_model = ($v_model -eq 0) ? $null : "--v_parameterization"
$v2 = ($v2 -eq 0) ? $null : "--v2"
$train_text_encoder = ($train_text_encoder -eq 0) ? $null : "--train_text_encoder"
# stop script on error
$ErrorActionPreference = "Stop"
# define a list of substrings to search for
$substrings_v2 = "stable-diffusion-2-1-base", "stable-diffusion-2-base"
# check if $v2 and $v_model are empty and if $pretrained_model_name_or_path contains any of the substrings in the v2 list
if ($v2 -eq $null -and $v_model -eq $null -and ($substrings_v2 | Where-Object { $pretrained_model_name_or_path -match $_ }).Count -gt 0) {
Write-Host("SD v2 model detected. Setting --v2 parameter")
$v2 = "--v2"
$v_model = $null
}
# define a list of substrings to search for v-objective
$substrings_v_model = "stable-diffusion-2-1", "stable-diffusion-2"
# check if $v2 and $v_model are empty and if $pretrained_model_name_or_path contains any of the substrings in the v_model list
elseif ($v2 -eq $null -and $v_model -eq $null -and ($substrings_v_model | Where-Object { $pretrained_model_name_or_path -match $_ }).Count -gt 0) {
Write-Host("SD v2 v_model detected. Setting --v2 parameter and --v_parameterization")
$v2 = "--v2"
$v_model = "--v_parameterization"
}
# activate venv
cd $kohya_finetune_repo_path
.\venv\Scripts\activate
# create caption json file
if (!(Test-Path -Path $train_dir)) {
New-Item -Path $train_dir -ItemType "directory"
}
python $kohya_finetune_repo_path\script\merge_captions_to_metadata.py `
--caption_extention ".txt" $image_folder $train_dir"\meta_cap.json"
# create images buckets
python $kohya_finetune_repo_path\script\prepare_buckets_latents.py `
$image_folder `
$train_dir"\meta_cap.json" `
$train_dir"\meta_lat.json" `
$pretrained_model_name_or_path `
--batch_size 4 --max_resolution $max_resolution --mixed_precision $mixed_precision
# Get number of valid images
$image_num = Get-ChildItem "$image_folder" -Recurse -File -Include *.npz | Measure-Object | % { $_.Count }
$repeats = $image_num * $dataset_repeats
Write-Host("Repeats = $repeats")
# calculate max_train_set
$max_train_set = [Math]::Ceiling($repeats / $train_batch_size * $epoch)
Write-Host("max_train_set = $max_train_set")
$lr_warmup_steps = [Math]::Round($lr_warmup * $max_train_set / 100)
Write-Host("lr_warmup_steps = $lr_warmup_steps")
Write-Host("$v2 $v_model")
accelerate launch --num_cpu_threads_per_process $num_cpu_threads_per_process $kohya_finetune_repo_path\script\fine_tune.py `
$v2 `
$v_model `
--pretrained_model_name_or_path=$pretrained_model_name_or_path `
--in_json $train_dir\meta_lat.json `
--train_data_dir="$image_folder" `
--output_dir=$output_dir `
--train_batch_size=$train_batch_size `
--dataset_repeats=$dataset_repeats `
--learning_rate=$learning_rate `
--lr_scheduler=$lr_scheduler `
--lr_warmup_steps=$lr_warmup_steps `
--max_train_steps=$max_train_set `
--use_8bit_adam `
--xformers `
--mixed_precision=$mixed_precision `
--save_every_n_epochs=$save_every_n_epochs `
--seed=$seed `
$train_text_encoder `
--save_precision=$save_precision
# check if $output_dir\last is a directory... therefore it is a diffuser model
if (Test-Path "$output_dir\last" -PathType Container) {
if ($convert_to_ckpt) {
Write-Host("Converting diffuser model $output_dir\last to $output_dir\last.ckpt")
python "$kohya_finetune_repo_path\tools\convert_diffusers20_original_sd.py" `
$output_dir\last `
$output_dir\last.ckpt `
--$save_precision
}
if ($convert_to_safetensors) {
Write-Host("Converting diffuser model $output_dir\last to $output_dir\last.safetensors")
python "$kohya_finetune_repo_path\tools\convert_diffusers20_original_sd.py" `
$output_dir\last `
$output_dir\last.safetensors `
--$save_precision
}
}
# define a list of substrings to search for inference file
$substrings_sd_model = ".ckpt", ".safetensors"
$matching_extension = foreach ($ext in $substrings_sd_model) {
Get-ChildItem $output_dir -File | Where-Object { $_.Extension -contains $ext }
}
if ($matching_extension.Count -gt 0) {
# copy the file named "v2-inference.yaml" from the "v2_inference" folder to $output_dir as last.yaml
if ( $v2 -ne $null -and $v_model -ne $null) {
Write-Host("Saving v2-inference-v.yaml as $output_dir\last.yaml")
Copy-Item -Path "$kohya_finetune_repo_path\v2_inference\v2-inference-v.yaml" -Destination "$output_dir\last.yaml"
}
elseif ( $v2 -ne $null ) {
Write-Host("Saving v2-inference.yaml as $output_dir\last.yaml")
Copy-Item -Path "$kohya_finetune_repo_path\v2_inference\v2-inference.yaml" -Destination "$output_dir\last.yaml"
}
} |