Stable Diffusion 四重调参优化——项目学习记录

news2025/4/13 3:14:13

学习记录还原:在本次实验中,我基于 Stable Diffusion v1.5模型,通过一系列优化方法提升生成图像的质量,最终实现了图像质量的显著提升。实验从基础的 Img2Img 技术入手,逐步推进到参数微调、DreamShaper 模型和 ControlNet 的应用,最终优化了图像细节和结构一致性。以下是实验的详细过程。
两效果图:



1. 实验环境

为了确保实验可复现,以下是实验所用的环境配置:

  • 操作系统:Windows 10

  • GPU:NVIDIA GeForce RTX 4070(8GB 显存)

  • Python 版本:3.11

  • 深度学习框架:PyTorch 1.12.1

  • 核心库

    • diffusers==0.29.2

    • transformers==4.44.2

    • opencv-python==4.10.0.84

  • 模型

    • 基础模型:runwayml/stable-diffusion-v1-5

    • 优化模型:Lykon/dreamshaper-8

    • ControlNet:lllyasviel/sd-controlnet-canny


2. 优化一:Img2Img 技术

优化动机与原因

基础的 Stable Diffusion 模型在生成图像时,细节和结构一致性较弱,尤其是在服装生成任务中,难以保留原始结构。通过引入 Img2Img 技术,可以在生成过程中保留更多原始图像的结构信息,提升一致性。

优化思路

以原始服装图像作为输入,结合文本提示,生成与原图结构相似但具有新细节的图像。通过调整 strength 参数,平衡原图结构保留与生成创意之间的关系。

优化过程

  • 代码实现

    from diffusers import StableDiffusionImg2ImgPipeline
    pipe = StableDiffusionImg2ImgPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16)
    init_image = Image.open(image_path).convert("RGB")
    image = pipe(prompt, image=init_image, strength=0.75, num_inference_steps=50).images[0]
    
  • 参数调整:设置 strength=0.75,使生成图像在保留原图结构的基础上,融入提示词描述的细节。

结果

Img2Img 技术有效提升了图像的结构一致性,但细节表现仍然不足,整体质量有待提高。


3. 优化二:微调 Stable Diffusion 参数

优化动机与原因

尽管 Img2Img 改善了结构一致性,但生成的图像细节和感知质量仍不理想。微调 Stable Diffusion 的生成参数可以进一步优化细节表现,提升图像的清晰度和真实感。

优化思路

通过增强提示词的描述性和调整生成参数(如 num_inference_stepsguidance_scale),提高图像的细节质量和与提示词的匹配度。

优化过程

  • 提示词增强

    enhanced_prompt = f"{prompt}, highly detailed, realistic textures, sharp edges"
    
  • 参数调整

    image = pipe(enhanced_prompt, negative_prompt="blurry, low resolution", num_inference_steps=75, guidance_scale=10.0).images[0]
    
    • 增加 num_inference_steps 至 75,提升生成过程的精细度。

    • 设置 guidance_scale=10.0,增强提示词对生成结果的引导作用。

结果

参数微调后,图像细节和清晰度有所提升,但结构一致性仍然有限,整体效果仍未达到最佳。


4. 优化三:DreamShaper 模型

优化动机与原因

基础模型在细节和美感上的表现存在局限,尤其在服装生成中难以生成高质量的纹理和人物细节。DreamShaper 模型(Lykon/dreamshaper-8)在细节生成上的表现优异,是进一步优化的选择。

优化思路

替换基础模型为 DreamShaper,结合优化后的提示词和参数设置,提升图像的细节表现和视觉美感。

优化过程

  • 模型加载

    from diffusers import StableDiffusionPipeline
    model_id = "Lykon/dreamshaper-8"
    pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16)
    
  • 图像生成

    image = pipe(enhanced_prompt, negative_prompt="blurry, low resolution", num_inference_steps=50, guidance_scale=7.5).images[0]
    

结果

DreamShaper 模型显著提升了图像的细节表现和感知质量,生成的服装纹理更加真实,但结构精确性仍需改进。


5. 优化四:SD v1.5 + ControlNet

优化动机与原因

尽管 DreamShaper 在细节上表现出色,但服装的轮廓和结构一致性仍不完美。ControlNet 通过引入边缘图约束,能够有效提升生成图像的结构精确性,特别适用于服装生成任务。

优化思路

使用 Canny 边缘检测生成控制图像,结合 Stable Diffusion v1.5 和 ControlNet,约束生成过程以保留服装的轮廓和结构。

优化过程

  • ControlNet 集成

    from diffusers import StableDiffusionControlNetPipeline, ControlNetModel
    controlnet = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-canny", torch_dtype=torch.float16)
    pipe = StableDiffusionControlNetPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", controlnet=controlnet, torch_dtype=torch.float16)
    
  • 边缘图生成与图像生成

    canny_image = cv2.Canny(cv2.imread(image_path, cv2.IMREAD_GRAYSCALE), 100, 200)
    image = pipe(prompt, image=canny_image, controlnet_conditioning_scale=1.0).images[0]
    

结果

ControlNet 的引入显著提升了图像的结构一致性和细节质量,服装轮廓更加精确,整体效果最佳。

 

DreamShaper

 


6. 总结

通过四次优化,我逐步提升了 Stable Diffusion 生成图像的质量:

  • Img2Img:奠定了结构一致性的基础,但细节不足。

  • 参数微调:增强了细节和清晰度,但结构仍需优化。

  • DreamShaper:显著提升了细节和美感,表现优于基础模型。

  • SD v1.5 + ControlNet:通过边缘约束,实现了结构与细节的全面提升。

最终,ControlNet 在服装生成任务中展现了最优效果,兼顾结构精确性和感知质量。
基础模型:
深度学习项目记录·Stable Diffusion从零搭建、复现笔记-CSDN博客

深度仔细记录:
基于 Stable Diffusion 的图像生成优化与评估:从 SDXL 到 ControlNet 的探索——项目学习记录-CSDN博客强相关:
Stable Diffusion+Pyqt5: 实现图像生成与管理界面(带保存 + 历史记录 + 删除功能)——我的实验记录(结尾附系统效果图)-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2333520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我可能用到的网站和软件

我可能用到的网站和软件 程序员交流的网站代码管理工具前端组件库前端框架在线工具人工智能问答工具学习的网站Windows系统电脑的常用工具 程序员交流的网站 csdn博客博客园 - 开发者的网上家园InfoQ - 软件开发及相关领域-极客邦掘金 (juejin.cn) 代码管理工具 GitHub 有时…

FPGA状态机设计:流水灯实现、Modelsim仿真、HDLBits练习

一、状态机思想 1.概念 状态机(Finite State Machine, FSM)是计算机科学和工程领域中的一种抽象模型,用于描述系统在不同状态之间的转换逻辑。其核心思想是将复杂的行为拆解为有限的状态,并通过事件触发状态间的转移。 2.状态机…

2024年第十五届蓝桥杯CC++大学A组--成绩统计

2024年第十五届蓝桥杯C&C大学A组--成绩统计 题目: 动态规划, 对于该题,考虑动态规划解法,先取前k个人的成绩计算其方差,并将成绩记录在数组中,记录当前均值,设小蓝已检查前i-1个人的成绩&…

Kotlin 学习-集合

/*** kotlin 集合* List:是一个有序列表,可通过索引(下标)访问元素。元素可以在list中出现多次、元素可重复* Set:是元素唯一的集合。一般来说 set中的元素顺序并不重要、无序集合* Map:(字典)是一组键值对。键是唯一的…

自动驾驶的未来:多模态感知融合技术最新进展

作为自动驾驶领域的专业人士,我很高兴与大家分享关于多模态感知融合技术的前沿研究和实践经验。在迅速发展的自动驾驶领域,多模态感知融合已成为提升系统性能的关键技术。本文将深入探讨基于摄像头和激光雷达的多模态感知融合技术,重点关注最…

亮相2025全球分布式云大会,火山引擎边缘云落地AI新场景

4 月 9 日,2025 全球分布式云大会暨 AI 基础设施大会在深圳成功举办,火山引擎边缘云产品解决方案高级总监沈建发出席并以《智启边缘,畅想未来:边缘计算新场景落地与 Al 趋势新畅想》为主题,分享了边缘计算在 AI 技术趋…

无损分区管理,硬盘管理的“瑞士军刀”!

打工人们你们好!这里是摸鱼 特供版~ 今天给大家带来一款简单易用、功能强大的无损分区软件——分区助手技术员版,让你的硬盘管理变得轻松又高效! 推荐指数:★★★★★ 软件简介 分区助手技术员版是一款功能强大的硬盘分区工具&…

VS Code下开发FPGA——FPGA开发体验提升__下

上一篇:IntelliJ IDEA下开发FPGA-CSDN博客 Type:Quartus 一、安装插件 在应用商店先安装Digtal IDE插件 安装后,把其他相关的Verilog插件禁用,避免可能的冲突。重启后,可能会弹出下面提示 这是插件默认要求的工具链&a…

ffmpeg播放音视频流程

文章目录 🎬 FFmpeg 解码播放流程概览(以音视频文件为例)1️⃣ 创建结构体2️⃣ 打开音视频文件3️⃣ 查找解码器并打开解码器4️⃣ 循环读取数据包(Packet)5️⃣ 解码成帧(Frame)6️⃣ 播放 / …

SpringCloud微服务: 分布式架构实战

# SpringCloud微服务: 分布式架构实战 第一章:理解SpringCloud微服务架构 什么是SpringCloud微服务架构? 在当今互联网应用开发中,微服务架构已经成为业界的主流趋势。SpringCloud是一个基于Spring Boot的快速开发微服务架构的工具&#xff0…

AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年4月11日第49弹

从今天开始,咱们还是暂时基于旧的模型进行预测,好了,废话不多说,按照老办法,重点8-9码定位,配合三胆下1或下2,杀1-2个和尾,再杀6-8个和值,可以做到100-300注左右。 (1)定…

【models】Transformer 之 各种 Attention 原理和实现

Transformer 之 各种 Attention 原理和实现 本文将介绍Transformer 中常见的Attention的原理和实现,其中包括: Self Attention、Spatial Attention、Temporal Attention、Cross Attention、Grouped Attention、Tensor Product Attention、FlashAttentio…

老硬件也能运行的Win11 IoT LTSC (OEM)物联网版

#记录工作 Windows 11 IoT Enterprise LTSC 2024 属于物联网相关的版本。 Windows 11 IoT Enterprise 是为物联网设备和场景设计的操作系统版本。它通常针对特定的工业控制、智能设备等物联网应用进行了优化和定制,以满足这些领域对稳定性、安全性和长期支持的需求…

Git开发

目录 Linux下Git安装Git基本指令分支管理远程仓库与本地仓库标签管理多人协作同一分支下不同分支下 企业级开发模型 -- git flow 模型 在现实中,当我们完成一个文档的初稿后,后面可能还需要对初稿进行反复修改,从而形成不同版本的文档。显然&…

verilog有符号数的乘法

无符号整数的乘法 1、单周期乘法器( 无符号整数 ) 对于低速要求的乘法器,可以简单的使用 * 实现。 module Mult(input wire [7:0] multiplicand ,input wire [7:0] multipliter ,output wire [7:0] product);as…

DevDocs:抓取并整理技术文档的MCP服务

GitHub:https://github.com/cyberagiinc/DevDocs 更多AI开源软件:发现分享好用的AI工具、AI开源软件、AI模型、AI变现 - 小众AI DevDocs 是一个完全免费的开源工具,由 CyberAGI 团队开发,托管在 GitHub 上。它专为程序员和软件开发…

第十四届蓝桥杯大赛软件赛国赛Python大学B组题解

文章目录 弹珠堆放划分偶串交易账本背包问题翻转最大阶梯最长回文前后缀贸易航线困局 弹珠堆放 递推式 a i a i − 1 i a_ia_{i-1}i ai​ai−1​i, n 20230610 n20230610 n20230610非常小,直接模拟 答案等于 494 494 494 划分 因为总和为 1 e 6 1e6…

折叠屏手机:技术进步了,柔性OLED面板测试技术需求跟上了吗?

全球智能手机市场陷入创新焦虑,折叠屏手机被寄予厚望,2023 年出货量同比增长 62%。但在供应链技术狂欢背后,存在诸多问题。消费端数据显示,用户使用频率低,定价策略反常。产业链重构虽让部分企业获利,却推高…

30天学Java第九天——线程

并行与并发的区别 并行是多核 CPU 上的多任务处理,多个任务在同一时间真正的同时执行并发是单核 CPU 上的多任务处理,多个任务在同一时间段内交替执行,通过时间片轮转实现交替执行,用于解决 IO 密集型任务的瓶颈 线程的创建方式…

自行搭建一个Git仓库托管平台

1.安装Git sudo apt install git 2.Git本地仓库创建(自己选择一个文件夹) git init 这里我在 /home/test 下面初始化了代码仓库 1. 首先在仓库中新建一个txt文件,并输入一些内容 2. 将文件添加到仓库 git add test.txt 执行之后没有任何输…