更新prompt #47

Merged
hnu202326010204 merged 4 commits from lianghao_branch into develop 7 days ago

@ -112,7 +112,9 @@ class DataType(db.Model):
data_type_code = db.Column(String(50), nullable=False)
instance_prompt = db.Column(Text, comment='数据集相关的Prompt (Instance Prompt Template, e.g. "a photo of sks person")')
class_prompt = db.Column(String(255), comment='类别Prompt (e.g. "a photo of person")')
placeholder_token = db.Column(String(50), comment='TI Placeholder (e.g. "<sks-concept>")')
validation_prompt_prefix_db_lora = db.Column(Text, comment='DreamBooth/LoRA验证生成图Prompt前缀')
validation_prompt_prefix_ti = db.Column(Text, comment='Textual Inversion验证生成图Prompt前缀')
placeholder_token = db.Column(String(50), comment='TI Placeholder (e.g. "<sks>")')
initializer_token = db.Column(String(50), comment='TI Initializer (e.g. "person")')
description = db.Column(Text)

@ -71,7 +71,9 @@ def run_finetune_task(task_id, finetune_method, train_images_dir,
# 默认值 (Fallback)
instance_prompt = "a photo of sks person"
class_prompt = "a photo of person"
placeholder_token = "<sks-concept>"
validation_prompt_prefix_db_lora = "((a selfie photo of <sks> person face)), distinct <sks> feature, head and shoulders shot, front view, face looking at camera"
validation_prompt_prefix_ti = "a selfie photo of <sks> person"
placeholder_token = "<sks>"
initializer_token = "person"
if data_type:
@ -79,30 +81,30 @@ def run_finetune_task(task_id, finetune_method, train_images_dir,
instance_prompt = data_type.instance_prompt
if data_type.class_prompt:
class_prompt = data_type.class_prompt
if data_type.validation_prompt_prefix_db_lora:
validation_prompt_prefix_db_lora = data_type.validation_prompt_prefix_db_lora
if data_type.validation_prompt_prefix_ti:
validation_prompt_prefix_ti = data_type.validation_prompt_prefix_ti
if data_type.placeholder_token:
placeholder_token = data_type.placeholder_token
if data_type.initializer_token:
initializer_token = data_type.initializer_token
logger.info(f"DataType Config - Template: '{instance_prompt}', Class: '{class_prompt}'")
# 根据微调方法调整 Instance Prompt
# 根据微调方法选择对应的 validation_prompt_prefix
if finetune_method == 'textual_inversion':
# TI: 将 'sks' 替换为 placeholder_token
instance_prompt_prefix = instance_prompt.replace('sks', placeholder_token)
else:
# DreamBooth/LoRA: 直接使用模板
instance_prompt_prefix = instance_prompt
validation_prompt_prefix = validation_prompt_prefix_ti
else: # dreambooth 或 lora
validation_prompt_prefix = validation_prompt_prefix_db_lora
logger.info(f"DataType Config - Instance: '{instance_prompt}', Class: '{class_prompt}', Validation Prefix ({finetune_method}): '{validation_prompt_prefix}'")
# 处理 Validation Prompt
# 处理 Validation Prompt:使用 validation_prompt_prefix + custom_prompt
prompt_suffix = finetune.custom_prompt.strip() if finetune.custom_prompt else ""
if prompt_suffix:
validation_prompt = f"{instance_prompt_prefix}, {prompt_suffix}"
validation_prompt = f"{validation_prompt_prefix}, {prompt_suffix}"
else:
validation_prompt = instance_prompt_prefix
instance_prompt = instance_prompt_prefix
validation_prompt = validation_prompt_prefix
logger.info(f"Prompts Finalized - Instance: '{instance_prompt}', Class: '{class_prompt}', Validation: '{validation_prompt}'")

@ -60,7 +60,7 @@ def run_heatmap_task(task_id, original_image_path, perturbed_image_path,
logger.info(f"Starting heatmap task {task_id}")
# 从数据库获取提示词从关联的Perturbation任务获取
prompt_text = "a photo of sks person" # 默认值
prompt_text = "a selfie photo of <sks> person" # 默认值
target_word = "person" # 默认值
# 通过flow_id查找关联的Perturbation任务

@ -109,6 +109,11 @@ def run_perturbation_task(task_id, algorithm_code, epsilon, input_dir, output_di
# 保存扰动图片到数据库
_save_perturbed_images(task_id, output_dir)
logs_dir = os.path.join(output_dir, 'logs')
if os.path.exists(logs_dir) and os.path.isdir(logs_dir):
logger.info(f"Final cleanup of logs directory: {logs_dir}")
shutil.rmtree(logs_dir)
# 更新任务状态为完成
completed_status = TaskStatus.query.filter_by(task_status_code='completed').first()

@ -46,12 +46,12 @@ class AlgorithmConfig:
},
'picasso': {
'name': '毕加索立体派',
'prompt': 'cubist painting by picasso',
'prompt': 'cubism painting by picasso',
'description': '模仿毕加索的立体主义风格'
},
'baroque': {
'name': '巴洛克风格',
'prompt': 'baroque style painting',
'prompt': 'oil painting in baroque style',
'description': '经典巴洛克艺术风格'
}
}
@ -91,8 +91,8 @@ class AlgorithmConfig:
'default_params': {
'pretrained_model_name_or_path': MODELS_DIR['model1'],
'enable_xformers_memory_efficient_attention': True,
'instance_prompt': 'a photo of sks person',
'class_prompt': 'a photo of person',
'instance_prompt': 'a selfie photo of <sks> person',
'class_prompt': 'a selfie photo of person',
'num_class_images': 200,
'center_crop': True,
'with_prior_preservation': True,
@ -115,8 +115,8 @@ class AlgorithmConfig:
'default_params': {
'pretrained_model_name_or_path': MODELS_DIR['model1'],
'enable_xformers_memory_efficient_attention': True,
'instance_prompt': 'a photo of <sks> person',
'class_prompt': 'a photo of person',
'instance_prompt': 'a selfie photo of <sks> person',
'class_prompt': 'a selfie photo of person',
'num_class_images': 100,
'center_crop': True,
'with_prior_preservation': True,
@ -138,7 +138,7 @@ class AlgorithmConfig:
'conda_env': CONDA_ENVS['caat'],
'default_params': {
'pretrained_model_name_or_path': MODELS_DIR['model2'],
'instance_prompt': 'a photo of a person',
'instance_prompt': 'a painting in <sks> style',
'resolution': 512,
'learning_rate': 1e-5,
'lr_warmup_steps': 0,
@ -155,8 +155,8 @@ class AlgorithmConfig:
'default_params': {
'pretrained_model_name_or_path': MODELS_DIR['model2'],
'with_prior_preservation': True,
'instance_prompt': 'a photo of a person',
'class_prompt': 'person',
'instance_prompt': 'a selfie photo of <sks> person',
'class_prompt': 'a selfie photo of person',
'num_class_images': 200,
'resolution': 512,
'learning_rate': 1e-5,
@ -191,7 +191,7 @@ class AlgorithmConfig:
'center_crop': True,
'max_train_steps': 150,
'eps': 0.05,
'target_style': 'cubism painting by picasso',
'target_style': 'impressionism painting by van gogh',
'style_strength': 0.75,
'n_runs': 3,
'style_transfer_iter': 15,
@ -206,8 +206,8 @@ class AlgorithmConfig:
'default_params': {
'pretrained_model_name_or_path': MODELS_DIR['model1'],
'enable_xformers_memory_efficient_attention': True,
'instance_prompt': 'a photo of sks person',
'class_prompt': 'a photo of person',
'instance_prompt': 'a selfie photo of <sks> person',
'class_prompt': 'a selfie photo of persons',
'num_class_images': 100,
'center_crop': True,
'with_prior_preservation': True,
@ -324,7 +324,7 @@ class AlgorithmConfig:
'resolution': 512,
'train_batch_size': 1,
'gradient_accumulation_steps': 1,
'learning_rate': 5e-7,
'learning_rate': 1e-6,
'lr_scheduler': 'constant_with_warmup',
'lr_warmup_steps': 50,
'num_class_images': 100,
@ -334,7 +334,7 @@ class AlgorithmConfig:
'mixed_precision': 'bf16',
'prior_generation_precision': 'bf16',
'sample_batch_size': 5,
'validation_prompt': 'a selfie photo of <sks> person, head-and-shoulders, face looking at the camera, Eiffel Tower clearly visible behind, outdoor daytime, realistic',
'validation_prompt': '((a selfie photo of <sks> person face)), distinct <sks> feature, head and shoulders shot, front view, face looking at camera',
'num_validation_images': 5,
'validation_num_inference_steps': 120,
'validation_guidance_scale': 7.0,
@ -349,8 +349,8 @@ class AlgorithmConfig:
'pretrained_model_name_or_path': MODELS_DIR['model2'],
'with_prior_preservation': True,
'prior_loss_weight': 1.0,
'instance_prompt': 'a photo of sks person',
'class_prompt': 'a photo of person',
'instance_prompt': 'a selfie photo of <sks> person',
'class_prompt': 'a selfie photo of person',
'resolution': 512,
'train_batch_size': 1,
'gradient_accumulation_steps': 1,
@ -363,7 +363,7 @@ class AlgorithmConfig:
'seed': 0,
'mixed_precision': 'fp16',
'rank': 4,
'validation_prompt': 'a photo of sks person',
'validation_prompt': '((a selfie photo of <sks> person face)), distinct <sks> feature, head and shoulders shot, front view, face looking at camera',
'num_validation_images': 10,
'coords_log_interval': 10
}
@ -374,9 +374,9 @@ class AlgorithmConfig:
'conda_env': CONDA_ENVS['textual_inversion'],
'default_params': {
'pretrained_model_name_or_path': MODELS_DIR['model2'],
'placeholder_token': '<sks-concept>',
'placeholder_token': '<sks>',
'initializer_token': 'person',
'instance_prompt': 'a photo of <sks-concept> person',
'instance_prompt': 'a selfie photo of <sks> person',
'resolution': 512,
'train_batch_size': 1,
'gradient_accumulation_steps': 1,
@ -387,7 +387,7 @@ class AlgorithmConfig:
'checkpointing_steps': 500,
'seed': 0,
'mixed_precision': 'fp16',
'validation_prompt': 'a close-up photo of <sks-concept> person',
'validation_prompt': 'a selfie photo of <sks> person',
'num_validation_images': 4,
'validation_epochs': 50,
'coords_log_interval': 10

@ -93,18 +93,22 @@ def init_database():
data_types = [
{
'data_type_code': 'face',
'instance_prompt': 'a photo of sks person',
'class_prompt': 'a photo of person',
'placeholder_token': '<sks-concept>',
'instance_prompt': 'a selfie photo of <sks> person',
'class_prompt': 'a selfie photo of person',
'validation_prompt_prefix_db_lora': '((a selfie photo of <sks> person face)), distinct <sks> feature, head and shoulders shot, front view, face looking at camera',
'validation_prompt_prefix_ti': 'a selfie photo of <sks> person',
'placeholder_token': '<sks>',
'initializer_token': 'person',
'description': '人脸类型的数据集'
},
{
'data_type_code': 'art',
'instance_prompt': 'a painting in <sks-style> style',
'instance_prompt': 'a painting in <sks> style',
'class_prompt': 'a painting',
'placeholder_token': '<sks-style>',
'initializer_token': 'painting',
'validation_prompt_prefix_db_lora': '((a painting in <sks> style)), distinct <sks> feature, coherent aesthetic, balanced lighting and color, fine art texture',
'validation_prompt_prefix_ti': 'a painting in <sks> style',
'placeholder_token': '<sks>',
'initializer_token': 'style',
'description': '艺术品类型的数据集'
}
]

Loading…
Cancel
Save