"src/git@developer.sourcefind.cn:renzhc/diffusers_dcu.git" did not exist on "09129842e75f9fcf1f4337a3df4dfda0c865fd7c"
Unverified Commit 07ef4855 authored by takuoko's avatar takuoko Committed by GitHub
Browse files

[Community, Enhancement] Add reference tricks in README (#3589)

add reference tricks
parent 6cbddf55
...@@ -1326,6 +1326,8 @@ image.save('tensorrt_img2img_new_zealand_hills.png') ...@@ -1326,6 +1326,8 @@ image.save('tensorrt_img2img_new_zealand_hills.png')
This pipeline uses the Reference Control. Refer to the [sd-webui-controlnet discussion: Reference-only Control](https://github.com/Mikubill/sd-webui-controlnet/discussions/1236)[sd-webui-controlnet discussion: Reference-adain Control](https://github.com/Mikubill/sd-webui-controlnet/discussions/1280). This pipeline uses the Reference Control. Refer to the [sd-webui-controlnet discussion: Reference-only Control](https://github.com/Mikubill/sd-webui-controlnet/discussions/1236)[sd-webui-controlnet discussion: Reference-adain Control](https://github.com/Mikubill/sd-webui-controlnet/discussions/1280).
Based on [this issue](https://github.com/huggingface/diffusers/issues/3566),
- `EulerAncestralDiscreteScheduler` got poor results.
```py ```py
import torch import torch
...@@ -1369,6 +1371,9 @@ Output Image of `reference_attn=True` and `reference_adain=True` ...@@ -1369,6 +1371,9 @@ Output Image of `reference_attn=True` and `reference_adain=True`
This pipeline uses the Reference Control with ControlNet. Refer to the [sd-webui-controlnet discussion: Reference-only Control](https://github.com/Mikubill/sd-webui-controlnet/discussions/1236)[sd-webui-controlnet discussion: Reference-adain Control](https://github.com/Mikubill/sd-webui-controlnet/discussions/1280). This pipeline uses the Reference Control with ControlNet. Refer to the [sd-webui-controlnet discussion: Reference-only Control](https://github.com/Mikubill/sd-webui-controlnet/discussions/1236)[sd-webui-controlnet discussion: Reference-adain Control](https://github.com/Mikubill/sd-webui-controlnet/discussions/1280).
Based on [this issue](https://github.com/huggingface/diffusers/issues/3566),
- `EulerAncestralDiscreteScheduler` got poor results.
- `guess_mode=True` works well for ControlNet v1.1
```py ```py
import cv2 import cv2
......
...@@ -505,8 +505,8 @@ class StableDiffusionControlNetReferencePipeline(StableDiffusionControlNetPipeli ...@@ -505,8 +505,8 @@ class StableDiffusionControlNetReferencePipeline(StableDiffusionControlNetPipeli
if MODE == "write": if MODE == "write":
if gn_auto_machine_weight >= self.gn_weight: if gn_auto_machine_weight >= self.gn_weight:
var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0) var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0)
self.mean_bank.append(mean) self.mean_bank.append([mean])
self.var_bank.append(var) self.var_bank.append([var])
if MODE == "read": if MODE == "read":
if len(self.mean_bank) > 0 and len(self.var_bank) > 0: if len(self.mean_bank) > 0 and len(self.var_bank) > 0:
var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0) var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0)
...@@ -545,8 +545,8 @@ class StableDiffusionControlNetReferencePipeline(StableDiffusionControlNetPipeli ...@@ -545,8 +545,8 @@ class StableDiffusionControlNetReferencePipeline(StableDiffusionControlNetPipeli
if MODE == "write": if MODE == "write":
if gn_auto_machine_weight >= self.gn_weight: if gn_auto_machine_weight >= self.gn_weight:
var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0) var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0)
self.mean_bank.append(mean) self.mean_bank.append([mean])
self.var_bank.append(var) self.var_bank.append([var])
if MODE == "read": if MODE == "read":
if len(self.mean_bank) > 0 and len(self.var_bank) > 0: if len(self.mean_bank) > 0 and len(self.var_bank) > 0:
var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0) var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0)
...@@ -605,8 +605,8 @@ class StableDiffusionControlNetReferencePipeline(StableDiffusionControlNetPipeli ...@@ -605,8 +605,8 @@ class StableDiffusionControlNetReferencePipeline(StableDiffusionControlNetPipeli
if MODE == "write": if MODE == "write":
if gn_auto_machine_weight >= self.gn_weight: if gn_auto_machine_weight >= self.gn_weight:
var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0) var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0)
self.mean_bank.append(mean) self.mean_bank.append([mean])
self.var_bank.append(var) self.var_bank.append([var])
if MODE == "read": if MODE == "read":
if len(self.mean_bank) > 0 and len(self.var_bank) > 0: if len(self.mean_bank) > 0 and len(self.var_bank) > 0:
var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0) var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0)
...@@ -642,8 +642,8 @@ class StableDiffusionControlNetReferencePipeline(StableDiffusionControlNetPipeli ...@@ -642,8 +642,8 @@ class StableDiffusionControlNetReferencePipeline(StableDiffusionControlNetPipeli
if MODE == "write": if MODE == "write":
if gn_auto_machine_weight >= self.gn_weight: if gn_auto_machine_weight >= self.gn_weight:
var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0) var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0)
self.mean_bank.append(mean) self.mean_bank.append([mean])
self.var_bank.append(var) self.var_bank.append([var])
if MODE == "read": if MODE == "read":
if len(self.mean_bank) > 0 and len(self.var_bank) > 0: if len(self.mean_bank) > 0 and len(self.var_bank) > 0:
var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0) var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0)
......
...@@ -499,8 +499,8 @@ class StableDiffusionReferencePipeline(StableDiffusionPipeline): ...@@ -499,8 +499,8 @@ class StableDiffusionReferencePipeline(StableDiffusionPipeline):
if MODE == "write": if MODE == "write":
if gn_auto_machine_weight >= self.gn_weight: if gn_auto_machine_weight >= self.gn_weight:
var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0) var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0)
self.mean_bank.append(mean) self.mean_bank.append([mean])
self.var_bank.append(var) self.var_bank.append([var])
if MODE == "read": if MODE == "read":
if len(self.mean_bank) > 0 and len(self.var_bank) > 0: if len(self.mean_bank) > 0 and len(self.var_bank) > 0:
var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0) var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0)
...@@ -539,8 +539,8 @@ class StableDiffusionReferencePipeline(StableDiffusionPipeline): ...@@ -539,8 +539,8 @@ class StableDiffusionReferencePipeline(StableDiffusionPipeline):
if MODE == "write": if MODE == "write":
if gn_auto_machine_weight >= self.gn_weight: if gn_auto_machine_weight >= self.gn_weight:
var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0) var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0)
self.mean_bank.append(mean) self.mean_bank.append([mean])
self.var_bank.append(var) self.var_bank.append([var])
if MODE == "read": if MODE == "read":
if len(self.mean_bank) > 0 and len(self.var_bank) > 0: if len(self.mean_bank) > 0 and len(self.var_bank) > 0:
var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0) var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0)
...@@ -599,8 +599,8 @@ class StableDiffusionReferencePipeline(StableDiffusionPipeline): ...@@ -599,8 +599,8 @@ class StableDiffusionReferencePipeline(StableDiffusionPipeline):
if MODE == "write": if MODE == "write":
if gn_auto_machine_weight >= self.gn_weight: if gn_auto_machine_weight >= self.gn_weight:
var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0) var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0)
self.mean_bank.append(mean) self.mean_bank.append([mean])
self.var_bank.append(var) self.var_bank.append([var])
if MODE == "read": if MODE == "read":
if len(self.mean_bank) > 0 and len(self.var_bank) > 0: if len(self.mean_bank) > 0 and len(self.var_bank) > 0:
var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0) var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0)
...@@ -636,8 +636,8 @@ class StableDiffusionReferencePipeline(StableDiffusionPipeline): ...@@ -636,8 +636,8 @@ class StableDiffusionReferencePipeline(StableDiffusionPipeline):
if MODE == "write": if MODE == "write":
if gn_auto_machine_weight >= self.gn_weight: if gn_auto_machine_weight >= self.gn_weight:
var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0) var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0)
self.mean_bank.append(mean) self.mean_bank.append([mean])
self.var_bank.append(var) self.var_bank.append([var])
if MODE == "read": if MODE == "read":
if len(self.mean_bank) > 0 and len(self.var_bank) > 0: if len(self.mean_bank) > 0 and len(self.var_bank) > 0:
var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0) var, mean = torch.var_mean(hidden_states, dim=(2, 3), keepdim=True, correction=0)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment