img2img-turbo 详解:一步完成草图转图、白天变夜晚的图像到图像转换
img2img-turbo 详解:一步完成草图转图、白天变夜晚的图像到图像转换
【免费下载链接】img2img-turboOne-step image-to-image with Stable Diffusion turbo: sketch2image, day2night, and more项目地址: https://gitcode.com/GitHub_Trending/im/img2img-turbo
img2img-turbo 是一个基于 Stable Diffusion turbo(SD-Turbo,一种只需一次推理就能出图的扩散模型)的开源图像到图像转换工具。它把「草图变照片、白天变夜晚、晴天变下雨」这类转换压缩到单步推理完成:处理一张 512x512 的图片,A6000 显卡上约 0.29 秒,A100 上只要 0.11 秒,解决的是传统扩散模型「效果不错但太慢、难以落地」的老问题。
一步出图,快在哪里
大多数扩散模型要像"反复擦铅笔"一样,走几十上百步去噪才能出一张图,所以跑一张图动辄几秒到几十秒。img2img-turbo 的思路是:既然 SD-Turbo 本身已经学会了"一步出图",那就不要整个重训,只在这个预训练大模型上"轻改造",把它适配到具体的转换任务上。
改造手段是对抗学习(adversarial learning,可以理解为让"生成器"和"判别器"互相较劲,逼迫生成器做出以假乱真的图)。改造完之后:
- 有输入条件(边缘、草图)的场景用pix2pix-turbo,效果对标 ControlNet 这类需要多步推理的方案,但只需一步;
- 没有严格配对样本的场景(比如随机白天照片和随机夜晚照片各一堆)用CycleGAN-Turbo,README 称其效果超过了已有的 GAN 和扩散方法;
- 同一张输入图换一张噪声图(noise map),就能生成构图相同但细节不同的多个结果,还能用文字提示词控制输出风格。
速度是这个项目最直接的卖点:0.1~0.3 秒级的单图推理,意味着实时交互和批量处理都变得现实。
原理拆解:LoRA 适配器 + 跳接,只动"小数点"的参数量
项目的核心架构图在下方(图中蓝色是可训练层,半透明的是冻结层):
用大白话讲,原始潜空间扩散模型里其实有三个相对独立的模块:负责读文字、负责"画"图、负责输出解码。项目把这三个模块拧成一个端到端网络,然后做三件事:
- 在每个模块里插入LoRA 适配器(一种只训练少量低秩权重、不动原模型参数的微调技术),让模型学会"转换"这件事,而不是"画图"这件事;
- 在输入和输出之间加跳接(skip connections)和 Zero-Convs,相当于修一条"高速公路",把输入图的场景结构直接输送给输出端,保证转换后画面骨架不跑偏;
- 重新训练 U-Net 的第一层,让输入图的信息从源头就被正确读入。
整套可训练参数很小,所以训练成本可控,而且同一套生成器可以挂不同的 GAN 目标,复用到边缘转图、草图转图等多种任务上。下面这只"猫"就是草图到图像的实时演示,从笔触到成图几乎无延迟:
典型使用场景:边缘、草图、天气、昼夜四类任务
仓库内置了可直接跑的预训练任务和示例,覆盖两条主线:
成对任务(pix2pix-turbo)——输入有明确条件
- Edge to Image:给一张照片,自动提取 Canny 边缘(把图片变成线条轮廓的算法),再从轮廓重建出新图,相当于"以线代面"的图像风格迁移;
- Sketch to Image:给一张手绘草图加一段文字提示词,生成概念图或写实图,仓库里的 sketch 示例把简单线条画成了一整幅奇幻场景。
非成对任务(CycleGAN-Turbo)——两组图各管各的,无需一一对应
- 白天 ↔ 夜晚互转(day2night / night2day);
- 晴天 ↔ 雨天互转(clear2rainy / rainy2clear)。
这类"域转换"对自动驾驶仿真、影视前期预览、数据集增广都挺实用。下面这张白天街景就是 day2night 任务的输入示例,跑一遍推理就能得到对应的夜晚版本:
新手上手指南:三步跑通第一次推理
环境用 conda 一条命令就能装好(environment.yaml 已列全依赖,不想用 conda 也可以pip install -r requirements.txt):
git clone https://gitcode.com/GitHub_Trending/im/img2img-turbo conda env create -f environment.yaml && conda activate img2img-turbo装完就能推理。以「照片提边缘再重建」为例,指定图片、提示词和输出目录即可:
python src/inference_paired.py --model_name "edge_to_image" \ --input_image "assets/examples/bird.png" \ --prompt "a blue bird" --output_dir "outputs"不想敲命令的话,仓库还自带两个 Gradio 网页界面,gradio gradio_sketch2image.py或gradio gradio_canny2image.py启动后在浏览器里拖图即可,适合先感受一下效果。想用自己的数据训练,成对数据走 docs/training_pix2pix_turbo.md,非成对数据走 docs/training_cyclegan_turbo.md,文档里连示例数据集的下载脚本(scripts/download_fill50k.sh)和 FID 指标监控都配好了,训练核心逻辑在 src/train_pix2pix_turbo.py 与 src/train_cyclegan_turbo.py。
项目价值:一套轻量的"图像转换器"底座
img2img-turbo 出自 CMU 与 Adobe 的研究团队(论文编号 arXiv 2403.12036),它的价值不止于几个演示效果:
- 成本结构友好:靠 LoRA 微调而非全量训练,把"适配一个新转换任务"的门槛降到消费级训练成本;
- 推理侧友好:单步出图,部署时无需为多步去噪预留时间预算;
- 任务扩展性强:代码结构上成对/非成对两条线分离清晰(src/pix2pix_turbo.py、src/cyclegan_turbo.py),新任务基本是"换数据 + 跑训练"的事。
如果你对某个具体领域的图像转换(比如自己的素材风格迁移)感兴趣,不妨先跑通 Gradio demo 看看上限,再照着 docs 里的训练文档喂自己的数据。项目以稳定迭代的方式维护着推理与训练脚本,关注它的更新,或者把自己训练出来的转换任务晒出来,都是不错的参与方式。
【免费下载链接】img2img-turboOne-step image-to-image with Stable Diffusion turbo: sketch2image, day2night, and more项目地址: https://gitcode.com/GitHub_Trending/im/img2img-turbo
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考