Spaces:
Runtime error
Runtime error
Commit
•
dbfd73e
1
Parent(s):
3777984
Updated version
Browse files- app.py +10 -5
- train_dreambooth.py +42 -12
app.py
CHANGED
@@ -11,6 +11,7 @@ css = '''
|
|
11 |
#component-4, #component-3, #component-10{min-height: 0}
|
12 |
'''
|
13 |
shutil.unpack_archive("mix.zip", "mix")
|
|
|
14 |
maximum_concepts = 3
|
15 |
def swap_values_files(*total_files):
|
16 |
file_counter = 0
|
@@ -59,15 +60,15 @@ def train(*inputs):
|
|
59 |
if(uses_custom):
|
60 |
Training_Steps = int(inputs[-3])
|
61 |
Train_text_encoder_for = int(inputs[-2])
|
62 |
-
stptxt = int((Training_Steps*Train_text_encoder_for)/100)
|
63 |
else:
|
64 |
Training_Steps = file_counter*200
|
65 |
if(inputs[-4] == "person"):
|
66 |
class_data_dir = "mix"
|
|
|
67 |
args_txt_encoder = argparse.Namespace(
|
68 |
image_captions_filename = True,
|
69 |
train_text_encoder = True,
|
70 |
-
pretrained_model_name_or_path=
|
71 |
instance_data_dir="instance_images",
|
72 |
class_data_dir=class_data_dir,
|
73 |
output_dir="output_model",
|
@@ -93,7 +94,7 @@ def train(*inputs):
|
|
93 |
Session_dir="output_model",
|
94 |
save_starting_step=0,
|
95 |
save_n_steps=0,
|
96 |
-
pretrained_model_name_or_path=
|
97 |
instance_data_dir="instance_images",
|
98 |
output_dir="output_model",
|
99 |
instance_prompt="",
|
@@ -112,17 +113,20 @@ def train(*inputs):
|
|
112 |
run_training(args_txt_encoder)
|
113 |
run_training(args_unet)
|
114 |
elif(inputs[-4] == "object"):
|
|
|
115 |
class_data_dir = None
|
116 |
elif(inputs[-4] == "style"):
|
|
|
117 |
class_data_dir = None
|
118 |
-
|
|
|
119 |
args_general = argparse.Namespace(
|
120 |
image_captions_filename = True,
|
121 |
train_text_encoder = True,
|
122 |
stop_text_encoder_training = stptxt,
|
123 |
save_n_steps = 0,
|
124 |
dump_only_text_encoder = True,
|
125 |
-
pretrained_model_name_or_path =
|
126 |
instance_data_dir="instance_images",
|
127 |
class_data_dir=class_data_dir,
|
128 |
output_dir="output_model",
|
@@ -138,6 +142,7 @@ def train(*inputs):
|
|
138 |
lr_warmup_steps = 0,
|
139 |
max_train_steps=Training_Steps,
|
140 |
)
|
|
|
141 |
run_training(args_general)
|
142 |
os.rmdir('instance_images')
|
143 |
with gr.Blocks(css=css) as demo:
|
|
|
11 |
#component-4, #component-3, #component-10{min-height: 0}
|
12 |
'''
|
13 |
shutil.unpack_archive("mix.zip", "mix")
|
14 |
+
model_to_load = "stable-diffusion-v1-5"
|
15 |
maximum_concepts = 3
|
16 |
def swap_values_files(*total_files):
|
17 |
file_counter = 0
|
|
|
60 |
if(uses_custom):
|
61 |
Training_Steps = int(inputs[-3])
|
62 |
Train_text_encoder_for = int(inputs[-2])
|
|
|
63 |
else:
|
64 |
Training_Steps = file_counter*200
|
65 |
if(inputs[-4] == "person"):
|
66 |
class_data_dir = "mix"
|
67 |
+
Train_text_encoder_for=100
|
68 |
args_txt_encoder = argparse.Namespace(
|
69 |
image_captions_filename = True,
|
70 |
train_text_encoder = True,
|
71 |
+
pretrained_model_name_or_path=model_to_load,
|
72 |
instance_data_dir="instance_images",
|
73 |
class_data_dir=class_data_dir,
|
74 |
output_dir="output_model",
|
|
|
94 |
Session_dir="output_model",
|
95 |
save_starting_step=0,
|
96 |
save_n_steps=0,
|
97 |
+
pretrained_model_name_or_path=model_to_load,
|
98 |
instance_data_dir="instance_images",
|
99 |
output_dir="output_model",
|
100 |
instance_prompt="",
|
|
|
113 |
run_training(args_txt_encoder)
|
114 |
run_training(args_unet)
|
115 |
elif(inputs[-4] == "object"):
|
116 |
+
Train_text_encoder_for=30
|
117 |
class_data_dir = None
|
118 |
elif(inputs[-4] == "style"):
|
119 |
+
Train_text_encoder_for=15
|
120 |
class_data_dir = None
|
121 |
+
|
122 |
+
stptxt = int((Training_Steps*Train_text_encoder_for)/100)
|
123 |
args_general = argparse.Namespace(
|
124 |
image_captions_filename = True,
|
125 |
train_text_encoder = True,
|
126 |
stop_text_encoder_training = stptxt,
|
127 |
save_n_steps = 0,
|
128 |
dump_only_text_encoder = True,
|
129 |
+
pretrained_model_name_or_path = model_to_load,
|
130 |
instance_data_dir="instance_images",
|
131 |
class_data_dir=class_data_dir,
|
132 |
output_dir="output_model",
|
|
|
142 |
lr_warmup_steps = 0,
|
143 |
max_train_steps=Training_Steps,
|
144 |
)
|
145 |
+
|
146 |
run_training(args_general)
|
147 |
os.rmdir('instance_images')
|
148 |
with gr.Blocks(css=css) as demo:
|
train_dreambooth.py
CHANGED
@@ -33,7 +33,7 @@ def parse_args():
|
|
33 |
"--pretrained_model_name_or_path",
|
34 |
type=str,
|
35 |
default=None,
|
36 |
-
required=True,
|
37 |
help="Path to pretrained model or model identifier from huggingface.co/models.",
|
38 |
)
|
39 |
parser.add_argument(
|
@@ -46,7 +46,7 @@ def parse_args():
|
|
46 |
"--instance_data_dir",
|
47 |
type=str,
|
48 |
default=None,
|
49 |
-
required=True,
|
50 |
help="A folder containing the training data of instance images.",
|
51 |
)
|
52 |
parser.add_argument(
|
@@ -250,14 +250,14 @@ def parse_args():
|
|
250 |
if env_local_rank != -1 and env_local_rank != args.local_rank:
|
251 |
args.local_rank = env_local_rank
|
252 |
|
253 |
-
if args.instance_data_dir is None:
|
254 |
-
|
255 |
|
256 |
-
if args.with_prior_preservation:
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
|
262 |
return args
|
263 |
|
@@ -388,9 +388,39 @@ def get_full_repo_name(model_id: str, organization: Optional[str] = None, token:
|
|
388 |
else:
|
389 |
return f"{organization}/{model_id}"
|
390 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
391 |
|
392 |
-
def run_training(
|
393 |
-
|
|
|
|
|
394 |
logging_dir = Path(args.output_dir, args.logging_dir)
|
395 |
i=args.save_starting_step
|
396 |
accelerator = Accelerator(
|
@@ -468,7 +498,7 @@ def run_training(args):
|
|
468 |
if args.tokenizer_name:
|
469 |
tokenizer = CLIPTokenizer.from_pretrained(args.tokenizer_name)
|
470 |
elif args.pretrained_model_name_or_path:
|
471 |
-
tokenizer = CLIPTokenizer.from_pretrained(args.pretrained_model_name_or_path, subfolder="tokenizer")
|
472 |
|
473 |
# Load models and create wrapper for stable diffusion
|
474 |
if args.train_only_unet:
|
|
|
33 |
"--pretrained_model_name_or_path",
|
34 |
type=str,
|
35 |
default=None,
|
36 |
+
#required=True,
|
37 |
help="Path to pretrained model or model identifier from huggingface.co/models.",
|
38 |
)
|
39 |
parser.add_argument(
|
|
|
46 |
"--instance_data_dir",
|
47 |
type=str,
|
48 |
default=None,
|
49 |
+
#required=True,
|
50 |
help="A folder containing the training data of instance images.",
|
51 |
)
|
52 |
parser.add_argument(
|
|
|
250 |
if env_local_rank != -1 and env_local_rank != args.local_rank:
|
251 |
args.local_rank = env_local_rank
|
252 |
|
253 |
+
#if args.instance_data_dir is None:
|
254 |
+
# raise ValueError("You must specify a train data directory.")
|
255 |
|
256 |
+
#if args.with_prior_preservation:
|
257 |
+
# if args.class_data_dir is None:
|
258 |
+
# raise ValueError("You must specify a data directory for class images.")
|
259 |
+
# if args.class_prompt is None:
|
260 |
+
# raise ValueError("You must specify prompt for class images.")
|
261 |
|
262 |
return args
|
263 |
|
|
|
388 |
else:
|
389 |
return f"{organization}/{model_id}"
|
390 |
|
391 |
+
def merge_two_dicts(starting_dict: dict, updater_dict: dict) -> dict:
|
392 |
+
"""
|
393 |
+
Starts from base starting dict and then adds the remaining key values from updater replacing the values from
|
394 |
+
the first starting/base dict with the second updater dict.
|
395 |
+
|
396 |
+
For later: how does d = {**d1, **d2} replace collision?
|
397 |
+
|
398 |
+
:param starting_dict:
|
399 |
+
:param updater_dict:
|
400 |
+
:return:
|
401 |
+
"""
|
402 |
+
new_dict: dict = starting_dict.copy() # start with keys and values of starting_dict
|
403 |
+
new_dict.update(updater_dict) # modifies starting_dict with keys and values of updater_dict
|
404 |
+
return new_dict
|
405 |
+
|
406 |
+
def merge_args(args1: argparse.Namespace, args2: argparse.Namespace) -> argparse.Namespace:
|
407 |
+
"""
|
408 |
+
|
409 |
+
ref: https://stackoverflow.com/questions/56136549/how-can-i-merge-two-argparse-namespaces-in-python-2-x
|
410 |
+
:param args1:
|
411 |
+
:param args2:
|
412 |
+
:return:
|
413 |
+
"""
|
414 |
+
# - the merged args
|
415 |
+
# The vars() function returns the __dict__ attribute to values of the given object e.g {field:value}.
|
416 |
+
merged_key_values_for_namespace: dict = merge_two_dicts(vars(args1), vars(args2))
|
417 |
+
args = argparse.Namespace(**merged_key_values_for_namespace)
|
418 |
+
return args
|
419 |
|
420 |
+
def run_training(args_imported):
|
421 |
+
args_default = parse_args()
|
422 |
+
args = merge_args(args_default, args_imported)
|
423 |
+
print(args)
|
424 |
logging_dir = Path(args.output_dir, args.logging_dir)
|
425 |
i=args.save_starting_step
|
426 |
accelerator = Accelerator(
|
|
|
498 |
if args.tokenizer_name:
|
499 |
tokenizer = CLIPTokenizer.from_pretrained(args.tokenizer_name)
|
500 |
elif args.pretrained_model_name_or_path:
|
501 |
+
tokenizer = CLIPTokenizer.from_pretrained(args.pretrained_model_name_or_path, subfolder="tokenizer", use_auth_token=True)
|
502 |
|
503 |
# Load models and create wrapper for stable diffusion
|
504 |
if args.train_only_unet:
|