hyejin.shin commited on
Commit
23715a0
·
1 Parent(s): 000f1fd

add readme

Browse files
Files changed (2) hide show
  1. README.md +110 -0
  2. scheduler/scheduler_config.json +0 -1
README.md ADDED
@@ -0,0 +1,110 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # How to make this
2
+
3
+ - pretrained model: [epiCRealism](https://civitai.com/models/25694?modelVersionId=134065) + [hyper CFG lora 12steps](https://huggingface.co/ByteDance/Hyper-SD/blob/main/Hyper-SD15-12steps-CFG-lora.safetensors)
4
+ -> merge with lora weight 0.3
5
+ - lora model: [AnimateLCM_sd15_t2v_lora.safetensors](https://huggingface.co/wangfuyun/AnimateLCM/blob/main/AnimateLCM_sd15_t2v_lora.safetensors)
6
+
7
+ ```python
8
+
9
+ import torch
10
+
11
+ from diffusers import StableDiffusionPipeline, DPMSolverMultistepScheduler
12
+
13
+ from animatediff.models.unet import UNet3DConditionModel
14
+ from animatediff.models.sparse_controlnet import SparseControlNetModel
15
+ from animatediff.pipelines.pipeline_animation import AnimationPipeline
16
+ from animatediff.utils.util import load_weights
17
+
18
+ sdpipe = StableDiffusionPipeline.from_single_file(pretrained_model_path, use_safetensors=True, add_watermarker=False).to(dtype=torch.float16)
19
+ sdpipe.load_lora_weights(lora_model_path)
20
+ sdpipe.fuse_lora(lora_scale=0.3)
21
+
22
+ text_encoder = sdpipe.text_encoder.cuda()
23
+ vae = sdpipe.vae.cuda()
24
+ tokenizer = sdpipe.tokenizer
25
+
26
+ unet_additional_kwargs = params["unet_additional_kwargs"]
27
+ controlnet_additional_kwargs = params["controlnet_additional_kwargs"]
28
+
29
+ unet = UNet3DConditionModel.from_pretrained_2d(pretrained_model_path, subfolder="unet", unet_config=sdpipe.unet.config, unet_additional_kwargs=unet_additional_kwargs).cuda()
30
+ unet.config.num_attention_heads = 8
31
+ unet.config.projection_class_embeddings_input_dim = None
32
+ unet.to(dtype=torch.float16)
33
+
34
+ controlnet = SparseControlNetModel.from_unet(unet, controlnet_additional_kwargs=controlnet_additional_kwargs)
35
+ controlnet_path = "models/motion_module/v3_sd15_sparsectrl_rgb.ckpt"
36
+
37
+ print(f"loading controlnet checkpoint from {controlnet_path} ...")
38
+ controlnet_state_dict = torch.load(controlnet_path, map_location="cpu")
39
+ controlnet_state_dict = controlnet_state_dict["controlnet"] if "controlnet" in controlnet_state_dict else controlnet_state_dict
40
+ controlnet_state_dict = {name: param for name, param in controlnet_state_dict.items() if "pos_encoder.pe" not in name}
41
+ controlnet_state_dict.pop("animatediff_config", "")
42
+ controlnet.load_state_dict(controlnet_state_dict)
43
+ controlnet.to(dtype=torch.float16)
44
+ controlnet.cuda()
45
+
46
+ pipe = load_weights(
47
+ pipeline,
48
+ # motion module
49
+ motion_module_path = "models/Motion_Module/v3_sd15_mm.ckpt",
50
+ motion_module_lora_configs = [],
51
+ # domain adapter
52
+ adapter_lora_path = "models/Motion_Module/v3_sd15_adapter.ckpt",
53
+ adapter_lora_scale = 1.0,
54
+ # image layers
55
+ dreambooth_model_path = pretrained_model_path,
56
+ lora_model_path = "",
57
+ lora_alpha = 0.8,
58
+ ).to("cuda")
59
+ pipe.to(dtype=torch.float16)
60
+ pipe.enable_vae_slicing()
61
+ pipe.enable_model_cpu_offload()
62
+
63
+ pipe.scheduler = DPMSolverMultistepScheduler(
64
+ beta_start = 0.00075,
65
+ beta_end = 0.0145,
66
+ beta_schedule = "linear",
67
+ use_karras_sigmas = True,
68
+ )
69
+
70
+ ```
71
+
72
+ # How to use this
73
+
74
+ ```python
75
+ controlnet_additional_kwargs = params["controlnet_additional_kwargs"]
76
+
77
+ pipe = AnimationPipeline.from_pretrained("models/animatediff_model")
78
+ unet = pipe.unet
79
+ vae = pipe.vae
80
+
81
+ unet.config.num_attention_heads = 8
82
+ unet.config.projection_class_embeddings_input_dim = None
83
+ unet.to(dtype=torch.float16)
84
+
85
+ controlnet = SparseControlNetModel.from_unet(unet, controlnet_additional_kwargs=controlnet_additional_kwargs)
86
+ controlnet_path = "./models/motion_module/v3_sd15_sparsectrl_rgb.ckpt"
87
+
88
+ print(f"loading controlnet checkpoint from {controlnet_path} ...")
89
+ controlnet_state_dict = torch.load(controlnet_path, map_location="cpu")
90
+ controlnet_state_dict = controlnet_state_dict["controlnet"] if "controlnet" in controlnet_state_dict else controlnet_state_dict
91
+ controlnet_state_dict = {name: param for name, param in controlnet_state_dict.items() if "pos_encoder.pe" not in name}
92
+ controlnet_state_dict.pop("animatediff_config", "")
93
+ controlnet.load_state_dict(controlnet_state_dict)
94
+ controlnet.to(dtype=torch.float16)
95
+ controlnet.cuda()
96
+
97
+ pipe.controlnet = controlnet
98
+
99
+ without_xformers = False
100
+ if is_xformers_available() and (not without_xformers):
101
+ unet.enable_xformers_memory_efficient_attention()
102
+ if controlnet is not None:
103
+ print("\nenable_xformers_memory_efficient_attention\n")
104
+ controlnet.enable_xformers_memory_efficient_attention()
105
+
106
+ pipe.to(dtype=torch.float16)
107
+ pipe.enable_vae_slicing()
108
+ pipe.enable_model_cpu_offload()
109
+ pipe.to("cuda")
110
+ ```
scheduler/scheduler_config.json CHANGED
@@ -8,7 +8,6 @@
8
  "dynamic_thresholding_ratio": 0.995,
9
  "euler_at_final": false,
10
  "final_sigmas_type": "zero",
11
- "lambda_min_clipped": -Infinity,
12
  "lower_order_final": true,
13
  "num_train_timesteps": 1000,
14
  "prediction_type": "epsilon",
 
8
  "dynamic_thresholding_ratio": 0.995,
9
  "euler_at_final": false,
10
  "final_sigmas_type": "zero",
 
11
  "lower_order_final": true,
12
  "num_train_timesteps": 1000,
13
  "prediction_type": "epsilon",