InstantIR 是一种新颖的单幅图像修复模型,旨在修复受损图像,提供极致品质且逼真的细节。您可以通过附加文本提示进一步提升InstantIR性能,甚至实现自定义编辑!
本地部署:
1. 克隆此存储库并设置环境
git clone https://github.com/instantX-research/InstantIR.git
cd InstantIR
conda create -n instantir python=3.9 -y
conda activate instantir
pip install -r requirements.txt
2. 下载预训练模型
InstantIR 基于 SDXL 和 DINOv2 构建。您可以直接从 🤗 huggingface 或使用 Python 包下载它们。
🤗 链接 | Python 命令 |
---|---|
SDXL | hf_hub_download(repo_id="stabilityai/stable-diffusion-xl-base-1.0") |
脸书/dinov2-large | hf_hub_download(repo_id="facebook/dinov2-large") |
即时 X/即时红外 | hf_hub_download(repo_id="InstantX/InstantIR") |
注意:如果您使用的是 Python 脚本,请确保先 from huggingface_hub import hf_hub_download
导入包。
3. 推理
您可以使用指定的以下参数运行 infer.sh
InstantIR 推理。
infer.sh \
--sdxl_path <path_to_SDXL> \
--vision_encoder_path <path_to_DINOv2> \
--instantir_path <path_to_InstantIR> \
--test_path <path_to_input> \
--out_path <path_to_output>
有关更多配置选项,请参阅 infer.py
。
4. 使用提示
InstantIR 功能强大,但在您的帮助下,它可以做得更好。InstantIR 的灵活管道使其在很大程度上可调。以下是我们发现对您可能遇到的各种情况特别有用的一些提示:
- 过度平滑:降低
--cfg
到 3.0~5.0。较高的 CFG 比例有时会导致线条僵化或缺少细节。 - 低保真度:设置为
--preview_start
0.1~0.4 以保留输入的保真度。当 input latent 太嘈杂时,预览器可能会产生误导性的引用。在这种情况下,我们建议在早期时间步禁用预览器。 - 局部畸变:设置为
--creative_start
0.6~0.8。这将允许 InstantIR 在后期扩散过程中自由渲染,其中会生成高频细节。较小的--creative_start
空间为创造性的修复留出更多空间,但会降低保真度。 - 更快的推理:更高
--preview_start
和更低--creative_start
都可以降低计算成本并加速 InstantIR 推理。
谨慎
这些功能无需训练,因此是实验性的。如果您想尝试,我们建议您根据具体情况调整这些参数。
将 InstantIR 与扩散器🧨配合使用
InstantIR 与 diffusers
此软件包中的所有强大功能完全兼容并受其支持。您可以通过 diffusers
snippet 直接加载 InstantIR:
# !pip install diffusers opencv-python transformers accelerate
import torch
from PIL import Image
from diffusers import DDPMScheduler
from schedulers.lcm_single_step_scheduler import LCMSingleStepScheduler
from module.ip_adapter.utils import load_adapter_to_pipe
from pipelines.sdxl_instantir import InstantIRPipeline
# suppose you have InstantIR weights under ./models
instantir_path = f'./models'
# load pretrained models
pipe = InstantIRPipeline.from_pretrained('stabilityai/stable-diffusion-xl-base-1.0', torch_dtype=torch.float16)
# load adapter
load_adapter_to_pipe(
pipe,
f"{instantir_path}/adapter.pt",
image_encoder_or_path = 'facebook/dinov2-large',
)
# load previewer lora
pipe.prepare_previewers(instantir_path)
pipe.scheduler = DDPMScheduler.from_pretrained('stabilityai/stable-diffusion-xl-base-1.0', subfolder="scheduler")
lcm_scheduler = LCMSingleStepScheduler.from_config(pipe.scheduler.config)
# load aggregator weights
pretrained_state_dict = torch.load(f"{instantir_path}/aggregator.pt")
pipe.aggregator.load_state_dict(pretrained_state_dict)
# send to GPU and fp16
pipe.to(device='cuda', dtype=torch.float16)
pipe.aggregator.to(device='cuda', dtype=torch.float16)
然后,您只需调用 , pipe
InstantIR 就会处理您的图像!
# load a broken image
low_quality_image = Image.open('./assets/sculpture.png').convert("RGB")
# InstantIR restoration
image = pipe(
image=low_quality_image,
previewer_scheduler=lcm_scheduler,
).images[0]
部署本地 gradio demo
我们提供了一个 python 脚本来启动 InstantIR 的本地 gradio 演示,并实现了基本和一些高级功能。首先在终端中运行以下命令:
INSTANTIR_PATH=<path_to_InstantIR> python gradio_demo/app.py
然后,通过浏览器访问您的本地演示 。 http://localhost:7860
训练
准备数据
InstantIR 在 DIV2K、Flickr2K、LSDIR 和 FFHQ 上进行了训练。我们采用数据集加权来平衡分布。您可以在 中配置它们的权重 config_files/IR_dataset.yaml
。下载这些训练集并将它们放在同一个目录下,该目录将在以下训练配置中使用。
两阶段培训
正如我们的论文中所述,InstantIR 的训练分两个阶段进行。我们为每个阶段提供了相应的 .sh
训练脚本。确保您有以下参数适应您自己的使用案例:
论点 | 价值 |
---|---|
--pretrained_model_name_or_path | SDXL 文件夹的路径 |
--feature_extractor_path | DINOv2 文件夹的路径 |
--train_data_dir | 您的训练数据目录 |
--output_dir | 保存模型权重的路径 |
--logging_dir | 保存日志的路径 |
<num_of_gpus> | 可用 GPU 的数量 |
我们在实验中使用的其他训练超参数在相应的 .sh
脚本中提供。您可以根据自己的需要调整它们。
请登录后查看评论内容