Diffusers documentation
FreeU
FreeU
FreeU cải thiện chi tiết hình ảnh bằng cách cân bằng lại mức độ mà bộ giải mã UNet lấy từ các đặc trưng của backbone so với các đặc trưng của kết nối skip. Các kết nối skip có thể làm lu mờ các đặc trưng ngữ nghĩa của backbone, dẫn đến chi tiết không tự nhiên trong đầu ra. FreeU không cần huấn luyện, và bạn có thể bật hoặc tắt nó ở thời điểm suy luận cho các pipeline text-to-image và text-to-video.
FreeU chỉ hoạt động với các pipeline dựa trên UNet như Stable Diffusion, SDXL và AnimateDiff. Nó không được hỗ trợ bởi các pipeline dựa trên transformer như Flux hay Qwen-Image.
Sử dụng phương thức enable_freeu() trên pipeline của bạn và cấu hình các hệ số tỷ lệ. b1 và b2 khuếch đại các đặc trưng của backbone, còn s1 và s2 làm giảm các đặc trưng skip. 1 và 2 chỉ hai giai đoạn upsampling đầu tiên của bộ giải mã UNet. Xem kho lưu trữ FreeU để tham khảo các siêu tham số cho các mô hình khác nhau.
Bắt đầu với các giá trị trong kho lưu trữ cho một mô hình. Để tinh chỉnh cho các mô hình khác, giữ nguyên s1=0.9 và s2=0.2 và điều chỉnh b1 và b2 trước. Đặt cả bốn hệ số bằng 1.0 tương đương với việc tắt FreeU. Các giá trị b lớn hơn sẽ tăng cường hiệu ứng nhưng có thể làm mờ chi tiết kết cấu, và việc giảm s1 và s2 sẽ triệt tiêu điều đó.
import torch
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16,
).to("cuda") # or "mps", "xpu", "cpu"
pipeline.enable_freeu(s1=0.9, s2=0.2, b1=1.3, b2=1.4)
generator = torch.Generator(device="cpu").manual_seed(13)
prompt = "A squirrel eating a burger"
image = pipeline(prompt, generator=generator).images[0]
image
Gọi phương thức disable_freeu() để tắt FreeU.
pipeline.disable_freeu()
Các bước tiếp theo
- Xem tài liệu tham khảo API enable_freeu() để biết mô tả đầy đủ các tham số.
- Thử FreeU trên video với AnimateDiff.