From fa97759fcfefc305394c4445d3c249591332f01f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E6=B5=A9?= <971817787@qq.com> Date: Sat, 10 Jan 2026 20:54:09 +0800 Subject: [PATCH 1/2] =?UTF-8?q?improve:=20=E4=BC=98=E5=8C=96=E8=B6=85?= =?UTF-8?q?=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/app/scripts/finetune_db.sh | 15 +++++++-------- src/backend/app/scripts/finetune_lora.sh | 6 +++--- src/backend/app/scripts/finetune_ti.sh | 6 +++--- src/backend/config/algorithm_config.py | 11 +++++------ src/backend/init_db.py | 4 ++-- 5 files changed, 20 insertions(+), 22 deletions(-) diff --git a/src/backend/app/scripts/finetune_db.sh b/src/backend/app/scripts/finetune_db.sh index 051dbe8..7648037 100644 --- a/src/backend/app/scripts/finetune_db.sh +++ b/src/backend/app/scripts/finetune_db.sh @@ -37,22 +37,21 @@ CUDA_VISIBLE_DEVICES=0 accelerate launch ../finetune_infras/train_db_gen_trace.p --output_dir=$DREAMBOOTH_OUTPUT_DIR \ --with_prior_preservation \ --train_text_encoder \ - --prior_loss_weight=0.4 \ + --prior_loss_weight=0.15 \ --instance_prompt="a selfie photo of person" \ --class_prompt="a selfie photo of person" \ --resolution=512 \ --train_batch_size=1 \ - --gradient_accumulation_steps=1 \ - --learning_rate=5e-7 \ - --lr_scheduler="constant_with_warmup" \ - --lr_warmup_steps=50 \ - --num_class_images=100 \ - --max_train_steps=800 \ + --gradient_accumulation_steps=4 \ + --learning_rate=1e-6 \ + --lr_scheduler="cosine_with_restarts" \ + --num_class_images=80 \ + --max_train_steps=1200 \ --checkpointing_steps=400 \ --mixed_precision=bf16 \ --prior_generation_precision=bf16 \ --sample_batch_size=5 \ - --validation_prompt="a selfie photo of person, head-and-shoulders, face looking at the camera, Eiffel Tower clearly visible behind, outdoor daytime, realistic" \ + --validation_prompt="a selfie photo of person" \ --num_validation_images=5 \ --validation_num_inference_steps=120 \ --validation_guidance_scale=7.0 \ diff --git a/src/backend/app/scripts/finetune_lora.sh b/src/backend/app/scripts/finetune_lora.sh index 217a182..72a61d8 100644 --- a/src/backend/app/scripts/finetune_lora.sh +++ b/src/backend/app/scripts/finetune_lora.sh @@ -53,8 +53,8 @@ CUDA_VISIBLE_DEVICES=0 accelerate launch ../finetune_infras/train_lora_gen_trace --output_dir=$DREAMBOOTH_OUTPUT_DIR \ --validation_image_output_dir=$OUTPUT_INFER_DIR \ --with_prior_preservation --prior_loss_weight=1.0 \ - --instance_prompt="a photo of sks person" \ - --class_prompt="a photo of person" \ + --instance_prompt="a selfie photo of person" \ + --class_prompt="a selfie photo of person" \ --resolution=512 \ --train_batch_size=1 \ --gradient_accumulation_steps=1 \ @@ -67,7 +67,7 @@ CUDA_VISIBLE_DEVICES=0 accelerate launch ../finetune_infras/train_lora_gen_trace --seed=0 \ --mixed_precision=fp16 \ --rank=4 \ - --validation_prompt="a photo of sks person" \ + --validation_prompt="a selfie photo of person" \ --num_validation_images 10 \ --positions_save_path="$POSITION_DIR" \ --coords_log_interval 10 \ diff --git a/src/backend/app/scripts/finetune_ti.sh b/src/backend/app/scripts/finetune_ti.sh index 8e062bf..1102241 100644 --- a/src/backend/app/scripts/finetune_ti.sh +++ b/src/backend/app/scripts/finetune_ti.sh @@ -47,9 +47,9 @@ CUDA_VISIBLE_DEVICES=0 accelerate launch ../finetune_infras/train_ti_gen_trace.p --instance_data_dir=$INSTANCE_DIR \ --output_dir=$TI_OUTPUT_DIR \ --validation_image_output_dir=$OUTPUT_INFER_DIR \ - --placeholder_token="" \ + --placeholder_token="" \ --initializer_token="person" \ - --instance_prompt="a photo of person" \ + --instance_prompt="a selfie photo of person" \ --resolution=512 \ --train_batch_size=1 \ --gradient_accumulation_steps=1 \ @@ -60,7 +60,7 @@ CUDA_VISIBLE_DEVICES=0 accelerate launch ../finetune_infras/train_ti_gen_trace.p --checkpointing_steps=500 \ --seed=0 \ --mixed_precision=fp16 \ - --validation_prompt="a close-up photo of person" \ + --validation_prompt="a selfie photo of person" \ --num_validation_images 4 \ --validation_epochs 50 \ --coords_save_path="$COORD_DIR" \ diff --git a/src/backend/config/algorithm_config.py b/src/backend/config/algorithm_config.py index 5136de8..1fb38b1 100644 --- a/src/backend/config/algorithm_config.py +++ b/src/backend/config/algorithm_config.py @@ -318,17 +318,16 @@ class AlgorithmConfig: 'default_params': { 'pretrained_model_name_or_path': MODELS_DIR['model2'], 'with_prior_preservation': True, - 'prior_loss_weight': 0.4, + 'prior_loss_weight': 0.15, 'instance_prompt': 'a selfie photo of person', 'class_prompt': 'a selfie photo of person', 'resolution': 512, 'train_batch_size': 1, - 'gradient_accumulation_steps': 1, + 'gradient_accumulation_steps': 4, 'learning_rate': 1e-6, - 'lr_scheduler': 'constant_with_warmup', - 'lr_warmup_steps': 50, - 'num_class_images': 100, - 'max_train_steps': 800, + 'lr_scheduler': 'cosine_with_restarts', + 'num_class_images': 80, + 'max_train_steps': 1200, 'checkpointing_steps': 400, 'center_crop': True, 'mixed_precision': 'bf16', diff --git a/src/backend/init_db.py b/src/backend/init_db.py index 055c1cb..b738f02 100644 --- a/src/backend/init_db.py +++ b/src/backend/init_db.py @@ -105,8 +105,8 @@ def init_database(): 'data_type_code': 'art', 'instance_prompt': 'a painting in style', 'class_prompt': 'a painting', - 'validation_prompt_prefix_db_lora': '((a painting in style)), distinct feature, coherent aesthetic, balanced lighting and color, fine art texture', - 'validation_prompt_prefix_ti': 'a painting in style', + 'validation_prompt_prefix_db_lora': 'a painting in strong style', + 'validation_prompt_prefix_ti': 'a painting in strong style', 'placeholder_token': '', 'initializer_token': 'style', 'description': '艺术品类型的数据集' -- 2.34.1 From 077dd17f36ed7742a2141d3fb8c97644c91e36fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E6=B5=A9?= <971817787@qq.com> Date: Sun, 11 Jan 2026 00:11:58 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=83=A8=E5=88=86?= =?UTF-8?q?=E5=8A=A0=E5=99=AA=E4=BB=BB=E5=8A=A1=E7=9A=84=E7=83=AD=E5=8A=9B?= =?UTF-8?q?=E5=9B=BE=E4=BB=BB=E5=8A=A1=E5=A4=B1=E8=B4=A5=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/app/algorithms/perturbation/caat.py | 6 ++++-- src/backend/app/algorithms/perturbation/pid.py | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/backend/app/algorithms/perturbation/caat.py b/src/backend/app/algorithms/perturbation/caat.py index 6b06b04..6416b6e 100644 --- a/src/backend/app/algorithms/perturbation/caat.py +++ b/src/backend/app/algorithms/perturbation/caat.py @@ -545,12 +545,14 @@ def _save_final_images( os.makedirs(save_folder, exist_ok=True) noised_imgs = final_perturbed_images.detach().float().cpu() - img_names = [str(instance_path[0]).split("/")[-1] for instance_path in train_dataset.instance_images_path] + + from pathlib import Path + img_names = [Path(instance_path[0]).stem for instance_path in train_dataset.instance_images_path] for i in range(len(img_names)): img_pixel = noised_imgs[i] img_name = img_names[i] - save_path = os.path.join(save_folder, f"final_noise_{img_name}") + save_path = os.path.join(save_folder, f"perturbed_{img_name}.png") Image.fromarray( (img_pixel * 127.5 + 128).clamp(0, 255).to(torch.uint8).permute(1, 2, 0).numpy() ).save(save_path) diff --git a/src/backend/app/algorithms/perturbation/pid.py b/src/backend/app/algorithms/perturbation/pid.py index 7354cf4..7160223 100644 --- a/src/backend/app/algorithms/perturbation/pid.py +++ b/src/backend/app/algorithms/perturbation/pid.py @@ -11,6 +11,7 @@ from torch.utils.data import Dataset from torchvision import transforms from tqdm.auto import tqdm from diffusers import AutoencoderKL +from pathlib import Path def parse_args(input_args=None): @@ -225,7 +226,8 @@ def main(args): for i in range(0, len(dataset.instance_images_path)): img = dataset[i]['pixel_values'] img = to_image(img + attackmodel.delta[i]) - img.save(os.path.join(args.output_dir, f"{i}.png")) + original_name = Path(dataset.instance_images_path[i]).stem + img.save(os.path.join(args.output_dir, f"perturbed_{original_name}.png")) # 分别计算原始图像和中毒(添加扰动)图像在潜空间的分布 clean_embedding = attackmodel(vae, batch['pixel_values'], batch['index'], False) -- 2.34.1