diff --git a/src/backend/app/controllers/auth_controller.py b/src/backend/app/controllers/auth_controller.py index 76b9917..216a1a8 100644 --- a/src/backend/app/controllers/auth_controller.py +++ b/src/backend/app/controllers/auth_controller.py @@ -177,14 +177,14 @@ def forgot_password(): if not user: return jsonify({'error': '用户不存在'}), 404 - verification_service = VerificationService() - if not verification_service.verify_code(email, code, purpose='forgot_password'): - return jsonify({'error': '验证码无效或已过期'}), 400 - # 设置新密码 user.set_password(new_password) db.session.commit() return jsonify({'message': '密码重置成功'}), 200 + + verification_service = VerificationService() + if not verification_service.verify_code(email, code, purpose='forgot_password'): + return jsonify({'error': '验证码无效或已过期'}), 400 except Exception as e: db.session.rollback() return jsonify({'error': f'密码重置失败: {str(e)}'}), 500 diff --git a/src/backend/config/algorithm_config.py b/src/backend/config/algorithm_config.py index 1794d29..6d89d3c 100644 --- a/src/backend/config/algorithm_config.py +++ b/src/backend/config/algorithm_config.py @@ -93,16 +93,16 @@ class AlgorithmConfig: 'enable_xformers_memory_efficient_attention': True, 'instance_prompt': 'a photo of sks person', 'class_prompt': 'a photo of person', - 'num_class_images': 5, + 'num_class_images': 200, 'center_crop': True, 'with_prior_preservation': True, 'prior_loss_weight': 1.0, 'resolution': 384, 'train_batch_size': 1, - 'max_train_steps': 5, - 'max_f_train_steps': 5, - 'max_adv_train_steps': 5, - 'checkpointing_iterations': 1, + 'max_train_steps': 50, + 'max_f_train_steps': 3, + 'max_adv_train_steps': 6, + 'checkpointing_iterations': 10, 'learning_rate': 5e-7, 'pgd_alpha': 0.005, 'seed': 0 @@ -115,19 +115,19 @@ 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', + 'instance_prompt': 'a photo of person', 'class_prompt': 'a photo of person', - 'num_class_images': 5, + 'num_class_images': 100, 'center_crop': True, 'with_prior_preservation': True, 'prior_loss_weight': 1.0, 'resolution': 384, 'train_batch_size': 1, - 'max_train_steps': 2, - 'max_f_train_steps': 1, - 'max_adv_train_steps': 1, - 'checkpointing_iterations': 1, - 'learning_rate': 5e-7, + 'max_train_steps': 60, + 'max_f_train_steps': 3, + 'max_adv_train_steps': 6, + 'checkpointing_iterations': 10, + 'learning_rate': 2e-6, 'pgd_alpha': 0.005, 'seed': 0 } @@ -142,7 +142,7 @@ class AlgorithmConfig: 'resolution': 512, 'learning_rate': 1e-5, 'lr_warmup_steps': 0, - 'max_train_steps': 2, + 'max_train_steps': 250, 'hflip': True, 'mixed_precision': 'bf16', 'alpha': 5e-3 @@ -175,8 +175,9 @@ class AlgorithmConfig: 'default_params': { 'pretrained_model_name_or_path': MODELS_DIR['model2'], 'resolution': 512, - 'max_train_steps': 2, + 'max_train_steps': 1000, 'center_crop': True, + 'step_size': 0.002, 'attack_type': 'add-log' } }, @@ -190,7 +191,7 @@ class AlgorithmConfig: 'center_crop': True, 'max_train_steps': 150, 'eps': 0.05, - 'target_style': 'impressionism painting by van gogh', + 'target_style': 'cubism painting by picasso', 'style_strength': 0.75, 'n_runs': 3, 'style_transfer_iter': 15, @@ -317,25 +318,27 @@ class AlgorithmConfig: 'default_params': { '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', + 'prior_loss_weight': 0.4, + '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': 2e-6, - 'lr_scheduler': 'constant', - 'lr_warmup_steps': 0, - 'num_class_images': 5, - 'max_train_steps': 4, - 'checkpointing_steps': 2, + 'learning_rate': 5e-7, + 'lr_scheduler': 'constant_with_warmup', + 'lr_warmup_steps': 50, + 'num_class_images': 100, + 'max_train_steps': 800, + 'checkpointing_steps': 400, 'center_crop': True, 'mixed_precision': 'bf16', 'prior_generation_precision': 'bf16', 'sample_batch_size': 5, - 'validation_prompt': 'a photo of sks person', - 'num_validation_images': 2, - 'coords_log_interval': 1 + 'validation_prompt': 'a selfie photo of person, head-and-shoulders, face looking at the camera, Eiffel Tower clearly visible behind, outdoor daytime, realistic', + 'num_validation_images': 5, + 'validation_num_inference_steps': 120, + 'validation_guidance_scale': 7.0, + 'coords_log_interval': 10 } }, 'lora': { @@ -354,15 +357,15 @@ class AlgorithmConfig: 'learning_rate': 1e-4, 'lr_scheduler': 'constant', 'lr_warmup_steps': 0, - 'num_class_images': 1, - 'max_train_steps': 4, - 'checkpointing_steps': 2, + 'num_class_images': 200, + 'max_train_steps': 1000, + 'checkpointing_steps': 500, 'seed': 0, 'mixed_precision': 'fp16', 'rank': 4, 'validation_prompt': 'a photo of sks person', - 'num_validation_images': 2, - 'coords_log_interval': 1 + 'num_validation_images': 10, + 'coords_log_interval': 10 } }, 'textual_inversion': { @@ -380,14 +383,14 @@ class AlgorithmConfig: 'learning_rate': 5e-4, 'lr_scheduler': 'constant', 'lr_warmup_steps': 0, - 'max_train_steps': 4, - 'checkpointing_steps': 2, + 'max_train_steps': 1000, + 'checkpointing_steps': 500, 'seed': 0, 'mixed_precision': 'fp16', - 'validation_prompt': 'a photo of person', + 'validation_prompt': 'a close-up photo of person', 'num_validation_images': 4, 'validation_epochs': 50, - 'coords_log_interval': 1 + 'coords_log_interval': 10 } } }