当前位置: 首页 > article >正文

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

学习记录还原:在本次实验中,我基于 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博客

相关文章:

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

学习记录还原:在本次实验中,我基于 Stable Diffusion v1.5模型,通过一系列优化方法提升生成图像的质量,最终实现了图像质量的显著提升。实验从基础的 Img2Img 技术入手,逐步推进到参数微调、DreamShaper 模型和 Contro…...

遇到git提交报错:413

是因为提交文件过大导致内存溢出。 解决方法: 假设您的提交历史如下: Apply to .gitignore abcd123 当前提交 efgh456 包含node_modules的提交 ijkl789 较早的正常提交 您可以: 回退到添加node_modules之前的提交: bash App…...

关于nacos注册的服务的ip异常导致网关路由失败的问题

文章目录 关于nacos注册的服务的ip异常导致网关路由失败的问题相关处理方案为方案一:手动指定服务注册的 IP 地址方法二:设置优先使用的网络段方法三:指定网络接口方法四:忽略特定的网卡 备注 关于nacos注册的服务的ip异常导致网关路由失败的…...

大模型在初治CLL成人患者诊疗全流程风险预测与方案制定中的应用研究

目录 一、绪论 1.1 研究背景与意义 1.2 国内外研究现状 1.3 研究目的与内容 二、大模型技术与慢性淋巴细胞白血病相关知识 2.1 大模型技术原理与特点 2.2 慢性淋巴细胞白血病的病理生理与诊疗现状 三、术前风险预测与手术方案制定 3.1 术前数据收集与预处理 3.2 大模…...

【C++游戏引擎开发】第9篇:数学计算库GLM(线性代数)、CGAL(几何计算)的安装与使用指南

写在前面 两天都没手搓实现可用的凸包生成算法相关的代码,自觉无法手搓相关数学库,遂改为使用成熟数学库。 一、GLM库安装与介绍 1.1 vcpkg安装GLM 跨平台C包管理利器vcpkg完全指南 在PowerShell中执行命令: vcpkg install glm# 集成到系…...

408 计算机网络 知识点记忆(8)

前言 本文基于王道考研课程与湖科大计算机网络课程教学内容,系统梳理核心知识记忆点和框架,既为个人复习沉淀思考,亦希望能与同行者互助共进。(PS:后续将持续迭代优化细节) 往期内容 408 计算机网络 知识…...

基于Python脚本实现Flink on YARN任务批量触发Savepoint的实践指南

基于Python脚本实现Flink on YARN任务批量触发Savepoint的实践指南 一、背景与价值 在流计算生产环境中,Flink on YARN的部署方式凭借其资源管理优势被广泛采用。Savepoint作为Flink任务状态的一致性快照,承载着故障恢复、版本升级、作业暂停等重要场景…...

我可能用到的网站和软件

我可能用到的网站和软件 程序员交流的网站代码管理工具前端组件库前端框架在线工具人工智能问答工具学习的网站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个人的成绩&…...

WinForm真入门(13)——ListBox控件详解

WinForm ListBox 详解与案例 一、核心概念 ‌ListBox‌ 是 Windows 窗体中用于展示可滚动列表项的控件,支持单选或多选操作,适用于需要用户从固定数据集中选择一项或多项的场景‌。 二、核心属性 属性说明‌Items‌管理列表项的集合,支持动…...

Kotlin 学习-集合

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

解决java使用easyexcel填充模版后,高度不一致问题

自定义工具,可以通过获取上一行行高设置后面所以行的高度 package org.springblade.modules.api.utils;import com.alibaba.excel.write.handler.RowWriteHandler; import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; import com.alibaba.excel.wr…...

数据结构与算法之ACM Fellow-算法4.3 最小生成树

数据结构与算法之ACM Fellow-算法4.3 最小生成树 加权图 是一种为每条边关联一个 权值 或是 成本 的图模型。这种图能够自然地表示许多应用。在一幅航空图中,边表示航线,权值则可以表示距离或是费用。在一幅电路图中,边表示导线,…...

使用POCO库进行ZIP压缩和解压

使用POCO库进行ZIP压缩和解压 POCO C Libraries提供了一个ZIP模块&#xff0c;可以方便地进行文件和数据流的压缩与解压操作。下面我将介绍如何使用POCO的ZIP模块进行这些操作。 1. 基本ZIP文件操作 压缩文件/目录到ZIP #include <Poco/Zip/Compress.h> #include <…...

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

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

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

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

XCode集成第三方framework步骤

一、添加 .framework 文件到项目 ‌拖拽或手动添加‌ 在Xcode中&#xff0c;直接将 .framework 文件拖入项目导航器的目标文件夹中, 确保 .framework 文件被复制到项目目录内&#xff08;非外部路径&#xff09;‌。或通过菜单操作&#xff1a; ‌General → Frameworks, Libra…...

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

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

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

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

ffmpeg播放音视频流程

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

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

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

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

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

Spring其它知识点

33.Spring 源码用到了哪些设计模式&#xff1f; 工厂模式&#xff1a;通过BeanFactory或者ApplicationContext创建Bean对象。BeanFactory是延迟注入&#xff0c;使用到Bean的时候才注入。ApplicationContext是在容器启动时&#xff0c;一次性创建所有的Bean。单例模型&#xf…...

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

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

C++ 学习资源整理

awesome-cpp&#xff08;C 资源大全&#xff09; &#x1f517; https://github.com/fffaraz/awesome-cpp 收集了各种 C 库、框架、教程和示例代码。 CPlusPlusThings&#xff08;C 基础知识整理&#xff09; &#x1f517; https://github.com/Light-City/CPlusPlusThings 包…...

opengrok搭建与配置

前提条件 需要配置好docker与docker-compose环境 1.代码准备 mkdir -p /data/opengrok/{etc,src,data} cd /data/opengrok/src/ # 克隆一个测试项目 git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git 2.创建docker-compose.yml文件&…...

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

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

JavaScript 代码混淆与反混淆技术详解

一、代码混淆&#xff1a;让别人看不懂你的代码 混淆技术就是一种“代码伪装术”&#xff0c;目的是让别人很难看懂你的代码逻辑&#xff0c;从而保护你的核心算法或敏感信息。 1. 变量名压缩 原理&#xff1a;把变量名改成乱码&#xff0c;比如把calculatePrice改成a&#…...

数据库守护神-WAL机制

什么是WAL机制&#xff1f; WAL&#xff08;Write-Ahead Logging&#xff0c;预写日志&#xff09;是一种保证数据库操作原子性和持久性的核心机制。其核心原则可概括为&#xff1a; 任何数据修改操作&#xff0c;必须在对应的日志记录持久化到磁盘之后&#xff0c;才能将实际…...