需要下载:
克隆项目代码,https://github.com/GaParmar/img2img-turbo
下载sd-turbo,
下载项目预训练模型:
www.cs.cmu.edu/~img2img-turbo/models

本文用到了:sketch to image stochastic lora.pkl

在手机termux的Ubuntu中创建conda环境:img2img-turbo
去掉requirements.txt中的xformer依赖项,手机推理基本用不到xformer。
xformers 是专注于 Transformer 模型加速与优化 的库,核心价值:
优化注意力机制(如 FlashAttention),减少显存占用、提升推理/训练速度;
提供高效的 Transformer 相关算子(如 RMSNorm、Swiglu),适配 PyTorch 生态;
常用在 Stable Diffusion、LLaMA 等大模型中,解决“显存不够用”“跑起来太慢”的问题。
修改src目录下的相关代码:

把pix2pix_turbo.py中需要从hf下载模型的代码改为使用本地目录路径,添加local_files_only=True,use_safetensors=True:
比如:self.tokenizer = AutoTokenizer.from_pretrained("./sd-turbo/tokenizer",local_files_only=True)
...
把其中的cuda替换为cpu:在nano中使用ctrl+\操作完成替换。
在mode.py中,修改代码,改为:noise_scheduler_1step = DDPMScheduler.from_pretrained("./sd-turbo/scheduler",local_files_only=True)
把inference_paired.py中的cuda替换为cpu。
此时,根据README.md的推理指令就可在命令行中进行推理。
在gradio6.0中,项目gradio代码无法运行。可以选择降低安装的gradio版本,具体版本根据目录中的yaml文件确定。
也可以结合inference_paired.py中的前向推理代码,和项目gradio_sketch2img.py中组件间的设计代码,使用gradio6.0的gr.Sketchpad(label="绘制区域")组件实现。图片绘制处理函数如下:
def process_drawing(data):
# 1. 防御性编程:处理 None
if data is None:
return None
# 2. 提取 numpy 数组,添加更多检查
if isinstance(data, dict) and "composite" in data:
numpy_image = data["composite"]
# 检查 numpy_image 是否为 None 或无效
if numpy_image is None:
return None
# 检查是否为 numpy 数组且非空
if not isinstance(numpy_image, np.ndarray) or numpy_image.size == 0:
return None
# 3. 转换为 PIL Image 并缩放至 512x512
try:
pil_image = Image.fromarray(numpy_image)
pil_image = pil_image.resize((512, 512), Image.Resampling.LANCZOS)
# 确保返回的 numpy_image 是有效的
return pil_image
except Exception as e:
print(f"转换图像时出错: {e}")
return None
else:
return None
