SD+ ControlNet (边缘图+颜色图),扩散模型+约束条件关于颜色因子的探索实验(一):双条件融合生成优化——项目学习记录
目录
实验背景梳理
实验阶段
指标解释
我的推理与分析编辑
推理 1:因子 0.5 vs 单 ControlNet
数据:
观察:
分析:
推理 2:因子 0.5 vs 0.9
数据:
观察:
分析:
总结与展望
指标生成过程:
最近基于 diffusers
库的 ControlNet,探索了如何通过 Canny 边缘图和颜色图控制服装图像生成。目标是利用 提取后的DeepFashion 数据集(27 张图像和对应的文本描述),生成符合描述的服装图像,比如“plaid patterns”或“pure color”设计的牛仔裤和背心。从最初的单 ControlNet 到融合颜色图的双 ControlNet,我遇到了不少挑战,比如hugging face库、指标权衡、图像全黑等,但每一步都让我更接近理想结果。以下是我的实验全记录,梳理了从边缘图控制到颜色因子优化的心路历程。
实验背景梳理
实验基于 DeepFashion 数据集,包含 27 张服装图像(每行格式为 image_name:prompt
,例如:
"MEN-Denim-id_00000080-01_7_additional.jpg": "The lower clothing is of long length. The fabric is cotton and it has plaid patterns."
实验使用 StableDiffusionControlNetPipeline
,结合 lllyasviel/sd-controlnet-canny
和 lllyasviel/sd-controlnet-scribble
(模拟颜色图),在 Anaconda 环境(kaiti
)下运行,代码为 generate_v15_Contronet_canny_color.py
。
实验阶段
-
单 ControlNet(Canny 边缘图):
-
我最初只用 Canny 边缘图控制生成,评估了 27 张图像的平均指标:
-
PSNR: 8.44
-
SSIM: 0.6434
-
LPIPS: 0.2713
-
-
结果显示边缘图能较好控制服装结构,但颜色和图案(“plaid patterns”)不够精准。
-
-
双 ControlNet(Canny + 颜色图):
-
我加入了颜色图(通过高斯模糊原始图像生成),测试了不同颜色因子(
controlnet_conditioning_scale=[1.0, color_scale]
):-
因子 0.5:
-
PSNR: 8.60
-
SSIM: 0.6407
-
LPIPS: 0.3004
-
-
因子 0.9:
-
PSNR: 7.55
-
SSIM: 0.4892
-
LPIPS: 0.4163
-
-
-
颜色图生成逻辑:动态模糊核(
"pure color"
用(31, 31)
,其他(51, 51)
)。 -
提示词优化:
"fashion photography of {prompt}, highly detailed clothing textures, realistic fabric materials, vivid and accurate patterns, photorealistic, studio lighting, 4k quality"
。
-
-
后续优化:
基于因子 0.5 和 0.9 的结果,我又进行了测试因子 为0.3、0.4、0.6、0.7的实验,寻找更优平衡点,为什么继续选择这几个因子呢?后面有我的推理分析。
指标解释
为量化生成图像的质量,我使用了三个指标(PSNR和SSIM越大越好,LPIPS越小越好):
-
PSNR(峰值信噪比):衡量像素级相似性,值越高表示生成图像与原始图像越接近。
-
SSIM(结构相似性):衡量结构、亮度和对比度相似性,值越接近似 1 表示结构越相。
-
LPIPS(感知相似性):衡量人类感知差异,值越低表示生成图像更贴近原始图像的视觉感受。
单 ControlNet 的 PSNR 和 SSIM 较低但 LPIPS 较优,说明边缘图控制下感知质量较好,但像素级和结构相似性稍弱。加入颜色图后,指标变化反映了颜色因子的影响。
我的推理与分析

通过对比单 ControlNet 和双 ControlNet 的指标,我提出了以下推理,尝试理解颜色因子的作用。
推理 1:因子 0.5 vs 单 ControlNet
-
数据:
-
单 ControlNet:PSNR 8.44,SSIM 0.6434,LPIPS 0.2713
-
因子 0.5:PSNR 8.60,SSIM 0.6407,LPIPS 0.3004
-
-
观察:
-
PSNR 提高了 0.16(8.44 → 8.60),说明颜色图使生成图像在像素级更接近原始图像。
-
SSIM 略降 0.0027(0.6434 → 0.6407),结构相似性略受影响,但幅度小。
-
LPIPS 变差 0.0291(0.2713 → 0.3004),感知相似性下降,生成图像可能在细节或纹理上偏离。
-
-
结论:
因子 0.5 提升了 PSNR,但 SSIM 和 LPIPS 变差,说明颜色图在像素级有帮助,但可能干扰了结构和感知质量。我推测需要调小因子,减轻颜色图的影响。 -
分析:
-
正确性:PSNR 提高表明颜色图补充了色彩信息,但 SSIM 和 LPIPS 变差可能因为因子 0.5 的颜色图约束过强,掩盖了提示词(如“plaid patterns”)的细节。
-
原因:因子 0.5 让颜色图对生成过程有较强约束,可能使图像过于贴近模糊后的原始颜色,忽略了提示词的创造性(如图案、材质)。
-
调小因子:降低颜色因子(如 0.3 或 0.4)会减少颜色图的约束,让 Canny 边缘图和提示词主导生成,可能改善 SSIM 和 LPIPS,同时保留部分 PSNR 提升。
因此我补充了颜色因子0.3、0.4的实验
-
推理 2:因子 0.5 vs 0.9
-
数据:
-
因子 0.5:PSNR 8.60,SSIM 0.6407,LPIPS 0.3004
-
因子 0.9:PSNR 7.55,SSIM 0.4892,LPIPS 0.4163
-
-
观察:
-
PSNR 下降 1.05(8.60 → 7.55),像素级相似性显著变差。
-
SSIM 下降 0.1515(0.6407 → 0.4892),结构相似性大幅降低。
-
LPIPS 变差 0.1159(0.3004 → 0.4163),感知相似性进一步恶化。
-
-
我的结论:
因子从 0.5 到 0.9,三个指标全部变差,说明因子 0.9 的颜色图约束过强。我推测 0.5 到 0.9 之间可能存在更优因子,某些指标会改善。 -
分析:
-
因子 0.9 表现普遍低于 0.5,表明颜色图的影响过强,可能让生成图像过于依赖模糊后的原始颜色,忽略了边缘图和提示词,导致图案(如“格子”)和细节的丢失。
-
原因:因子 0.9 使颜色图的影响几乎与边缘图(因子 1.0)相等,模糊后的颜色图可能覆盖了细节和纹理,降低了生成的质量。
-
更优因子:因子 0.5 的 SSIM 和 LPIPS 值接近单独使用 ControlNet 时的值,但 PSNR 更高。这意味着在 0.3-0.7 的因子区间中可能会找到平衡点,既能保持较高的 PSNR,又能提升 SSIM 和 LPIPS。
-
如果结果依然不理想,可能尝试结合单 ControlNet 和颜色提示词,或引入新的条件(如深度图)。
接下来的工作包括:
-
测试因子 0.3、0.4、0.6、0.7,并记录各项指标。
-
优化提示词和模糊核,以提升生成图像中的“格子图案”和“棉织物”细节。
-
绘制指标曲线,进一步寻找最佳因子。
-
总结与展望
从单 ControlNet 逐步过渡到双 ControlNet,深入了解颜色因子在服装图像生成中的作用。主要收获:颜色图提升了像素级相似性(PSNR),但仍需平衡结构(SSIM)和感知质量(LPIPS)。因子 0.5 比因子 0.9 更优,但仍需调低(如 0.3、0.4)或微调(如 0.6、0.7)。提示词和模糊核对细节(如“格子图案”)的生成至关重要。
-
模糊核调整:
当前使用的较大动态模糊核(如 (31, 31) 或 (51, 51))可能会使颜色图过于平滑,从而影响细节的保留。我可以尝试使用更小的模糊核:进行测试后观察 SSIM 和 LPIPS 的变化,看看是否有所提升。blur_kernel = (21, 21) # 保留更多颜色细节
-
提示词强化:
enhanced_prompt = f"fashion photography of {prompt}, ultra-detailed plaid patterns, realistic cotton texture, precise color designs, photorealistic, studio lighting, 8k quality"
-
如果“格子图案”或“棉织物”效果不佳,我可以加强提示词,如:
-
推理步骤:
num_inference_steps = 50
-
当前的
num_inference_steps=30
已经平衡了速度和质量。如果 LPIPS 结果仍不理想,我可以将步数增加到 50(大约 30 秒/张),以提升细节: -
可视化对比:
-
在实验完成后,可以绘制曲线图,直观对比不同因子下的各项指标:
import matplotlib.pyplot as plt factors = [0.0, 0.5, 0.9] # 0.0 表示单 ControlNet psnr_vals = [8.44, 8.60, 7.55] ssim_vals = [0.6434, 0.6407, 0.4892] lpips_vals = [0.2713, 0.3004, 0.4163] plt.figure(figsize=(12, 4)) plt.subplot(131); plt.plot(factors, psnr_vals, 'o-'); plt.title('PSNR'); plt.xlabel('Color Factor'); plt.grid() plt.subplot(132); plt.plot(factors, ssim_vals, 'o-'); plt.title('SSIM'); plt.xlabel('Color Factor'); plt.grid() plt.subplot(133); plt.plot(factors, lpips_vals, 'o-'); plt.title('LPIPS'); plt.xlabel('Color Factor'); plt.grid() plt.tight_layout() plt.show()
-
添加新因子(如 0.3、0.4、0.6、0.7)后更新曲线,寻找最优因子。
-
指标生成过程:
-
-
篇幅较长,这是(一):推理记录,实验指标结果在(二),包含颜色因子为0.3、0.4、0.5、0.6、0.7,二是对推理的验证。以前的基础部署过程:
深度学习项目记录·Stable Diffusion从零搭建、复现笔记-CSDN博客
从全灰到清晰图像:我的 Stable Diffusion 多尺度优化学习记录-CSDN博客
【优化记录】不更换模型,提升Stable Diffusion人体细节效果的全流程-CSDN博客Stable Diffusion+Pyqt5: 实现图像生成与管理界面(带保存 + 历史记录 + 删除功能)——我的实验记录(结尾附系统效果图)-CSDN博客Stable Diffusion + Contronet,调参实现LPIPS最优(带生成效果+指标对比)——项目学习记录-CSDN博客SD + Contronet,扩散模型V1.5+约束条件后续优化:保存Canny边缘图,便于视觉理解——stable diffusion项目学习笔记-CSDN博客
Stable Diffusion +双Contronet:从 ControlNet 边缘图到双条件融合:实现服装图像生成的技术演进——项目学习记录-CSDN博客
SD+融合ControlNet,扩散模型V1.5+约束条件边缘图+颜色图实现服装图像生成:定量对比试验结果+分析-CSDN博客
另外,关于数据集:.csv、.json、.txt都是常用的文本文件格式
Stable Diffusion + CelebA-Dialog 数据集:不同数据集文本标签格式不一致?我的实验记录-CSDN博客
图文生成领域常用的数据集——我的学习记录(刚整理完)-CSDN博客