【深度学习】SDXL中的Offset Noise,Diffusion with Offset Noise,带偏移噪声的扩散
https://www.crosslabs.org//blog/diffusion-with-offset-noise
带有偏移噪声的扩散
针对修改后的噪声进行微调,使得稳定扩散能够轻松生成非常暗或非常亮的图像。
作者:尼古拉斯·古藤伯格
|
2023年1月30日
马里奥兄弟使用稳定扩散挖掘隧道。左图显示了未使用偏移噪声的原始结果,右图使用偏移噪声显示了更丰富的黑色调。
稳定扩散在使用偏移噪声前(左)和使用偏移噪声后(右)
去噪扩散概率模型(Denoising Diffusion Probabilistic Models)是一种相对较新的生成神经网络模型,可以从从数据中学习到的高维概率分布中生成样本。其他解决同类问题的方法包括生成对抗网络(Generative Adversarial Networks)、归一化流(Normalizing Flows)以及各种形式的自回归模型,这些模型一次或分批对维度进行采样。此类模型的主要应用之一是在图像合成中,扩散模型在图像质量方面最近竞争力很强,特别是在生成全局连贯的图像构图方面。稳定扩散(Stable Diffusion)是一个预训练的、公开可用的模型,能够使用这种技术生成一些惊人的结果。然而,它有一个有趣的限制,似乎大多没有被注意到。如果你试图让它生成特别暗或特别亮的图像,它几乎总是生成平均值相对接近0.5的图像(全黑图像为0,全白图像为1)。例如:
左上:暴雨中的黑暗小巷(0.301);右上:白色背景上的单色线条艺术标志(0.709);左下:阳光明媚的雪坡(0.641);右下:仅有火把照亮的广场(0.452)
大多数情况下,这些图像仍然是合理的。但是,这种平均值趋近于0.5的软约束可能导致图像显得淡化、亮雾区域平衡其他暗区域、高频纹理(在标志中)而不是空白区域、灰色背景而不是白色或黑色等。虽然有些可以通过手动后期处理来修正或调整,但这里也存在一个更大的潜在限制,即场景的整体色调可能与表现和构图的其他方面相关,这样扩散模型就无法像其他方法那样自由探索这些方面。但为什么会这样呢?我是想象中的效果还是这些结果是“正确的”?这是训练数据的问题、架构的问题还是扩散模型本身的问题?(事实证明是最后一个)。
不过,首先,为了确保我没有想象出这些效果,我尝试针对一张全黑图像对稳定扩散进行微调。通常,对稳定扩散(SD)进行微调效果很好——有一种称为Dreambooth的技术可以教SD新的特定概念,比如特定的人的脸或特定的猫,几十张图像和几千次梯度更新就足够让模型学会特定对象的样子。将其扩展到一万步,它甚至可以开始记住特定的图像。
但当我针对这张全黑图像进行了3000步微调后,对于“全黑图像”的生成结果仍然如下:
使用提示:“全黑图像”
所以看来不仅SD开箱即用时无法生成过于暗或亮的图像,而且它甚至无法学会这样做。除非对其进行一些修改。
要理解发生了什么,帮助很大的是研究一下扩散模型正在学习反转的内容。通常,扩散模型被公式化为特定前向随机过程的逆过程——重复添加少量“独立同分布”(iid)的高斯噪声。也就是说,每个像素在潜在空间中在每一步都接收自己的随机样本。扩散模型学习在进行了一些步后,从图像中找到返回原始图像的方向。给定这个可以“向真实图像倒退”的模型,你从纯噪声开始,反转噪声过程以得到新的图像。
问题在于,你在前向过程中永远不会完全擦除原始图像,因此,从纯噪声开始的逆过程模型并不能完全回到图像的真实分布。相反,那些噪声最后破坏的特征在逆过程中变化最小——这些特征继承自用于开始过程的潜在噪声样本。乍一看可能不明显,但如果你研究前向过程如何破坏图像,长波长特征需要更长时间才能被噪声破坏:
这就是为什么使用相同的潜在噪声种子但不同提示往往会生成在整体构图上相关但在个体纹理或小尺度图案上不同的图像。扩散过程不知道如何改变这些长波长特征。而最长的波长特征是整个图像的平均值,也是独立样本之间变化最小的特征。这个问题在目标对象的维度越高时越严重,因为独立噪声样本集合的标准差与1/N成比例。因此,如果你生成一个4维向量,这可能不是大问题——你只需要两倍的样本来获得最低频率分量与最高频率分量。但在512x512分辨率的稳定扩散中,你生成的是一个3 x 64^2 = 12288维的对象。所以最长波长变化比最短波长慢大约100倍,意味着你需要考虑成百上千步才能捕捉到,而默认值大约是50(对于一些复杂的采样器,甚至低至20)。
似乎增加采样步数确实可以帮助SD生成更极端的图像,但我们可以做得更好,并提供一个即插即用的解决方案。诀窍在于我们教扩散模型逆转的噪声结构。因为我们使用的是iid样本,我们有这个1/N效应。但如果我们使用的噪声看起来像每个像素的iid样本加上整个图像相同的单个iid样本呢?用代码术语来说,目前的训练循环使用的噪声如下:noise = torch.randn_like(latents)但我可以使用这样的噪声:noise = torch.randn_like(latents) + 0.1 * torch.randn(latents.shape[0], latents.shape[1], 1, 1)这将使模型学习自由改变零频分量,因为该分量现在比基础分布快随机化约10倍(选择0.1在我的有限数据和训练时间内效果很好——如果我设得太大,它会倾向于主导模型的现有行为,但如果设得太小,我不会看到改善)。
用这样的噪声进行约一千步的微调,仅需40张手工标注的图像,就足以显著改变稳定扩散的行为,而不会让它在以前能够生成的东西上变得更糟。以下是文章上方四个提示的对比结果:
右上:暴雨中的黑暗小巷(0.032);左上:白色背景上的单色线条艺术标志(0.974);左下:阳光明媚的雪坡(0.858);右下:仅有火把照亮的广场(0.031)
星空在使用偏移噪声前后
超级英雄在黑暗小巷中与植物怪物战斗前后
结论
有许多论文讨论了改变去噪扩散模型的噪声调度,以及使用不同于高斯分布的噪声,甚至完全去除噪声而使用其他破坏操作如模糊或遮罩。然而,大多数关注点似乎是加速推理过程——能够使用更少的步数。似乎没有太多关注关于噪声(或图像破坏操作)的设计决策如何限制可以轻松合成的图像类型。然而,这对于这些模型的美学和艺术用途来说非常相关。对于深入定制这些模型并进行自己的微调的个别艺术家来说,针对某个项目调整使用这种偏移噪声并不难。你可以使用我们的检查点文件(在访问此文件前请阅读最后的注意事项)。但是,用少量图像进行微调,结果永远不会像大项目可以实现的那样普遍或好。
因此,我想以一个请求结束,向那些参与训练这些大型模型的人:请在下次进行大规模训练时,在训练过程中加入一点这样的偏移噪声。它应该显著增加模型的表现范围,允许在生成标志、剪切图、自然明亮和黑暗的场景、强色彩照明的场景等方面得到更好的结果。这是一个非常简单的技巧!
相关文章:

【深度学习】SDXL中的Offset Noise,Diffusion with Offset Noise,带偏移噪声的扩散
https://www.crosslabs.org//blog/diffusion-with-offset-noise 带有偏移噪声的扩散 针对修改后的噪声进行微调,使得稳定扩散能够轻松生成非常暗或非常亮的图像。 作者:尼古拉斯古藤伯格 | 2023年1月30日 马里奥兄弟使用稳定扩散挖掘隧道。左图显示了未…...

开发属于自己的Spring Boot Starter-18
为什么要开发专用的Spring Boot Starter Spring在通常使用时,一般是通过pom.xml文件中引入相关的jar包,然后再通过application.yml文件配置初始化bean的配置,但随着项目越来越复杂或是项目组中的应用数量越来越多,可能会带来几个…...

C中Mysql的基本api接口
一、初始化参数返回值 二、链接服务器三、执行SQL语句注意事项 四、获取结果集4.1mysql_affected_rows和mysql_num_rows4.2mysql_store_result与mysql_free_result注意事项注意事项整体的工作流程 4.3mysql_use_result()4.4mysql_field_count(…...

grafana10.x报错 Failed to upgrade legacy queries Datasource x was not found
问题 grafana 从6.x升级到10.x后,导入json文件后报错,数据源x查询不到,grafana不显示数据; Templating Failed to upgrade legacy queries Datasource x was not found解决方法 可能grafana升级后数据源找不到,在面板…...

项目管理-案例重点知识(干系人管理)
项目管理:每天进步一点点~ 活到老,学到老 ヾ(◍∇◍)ノ゙ 何时学习都不晚,加油 四、干系人管理 案例重点知识 干系人管理 案例 重点内容: (1)权力利益方格、权力影响方格ÿ…...

微信小程序踩坑,skyline模式下,scroll-view下面的一级元素设置margin中的auto无效,具体数据有效
开发工具版本 基础库 开启skyline渲染调试 问题描述 skyline模式下,scroll-view下面的一级元素的margin写auto的值是没有效果的(二级元素margin写auto是有效果的),关闭这个模式就正常显示 演示效果图 父元素的宽度和高度效果(宽度是750rpx,宽度占满的) 一级元素宽度和css效果…...

jspXMl标记语言基础
1.打开命令框进入数据库 打开eclipse创建需要连接的项目 粘贴驱动程序 查看驱动器 使用sql的包 int代表个 conlm代表列名 <%page import"java.sql.ResultSet"%> <%page import"java.sql.Statement"%> <%page import"java.sql.Connect…...

【DevOps】Linux 与虚拟局域网 (VLAN) 详解
目录 一、什么是VLAN? 二、VLAN的工作原理 三、Linux中的VLAN支持 四、内核模块 五、用户空间工具 六、创建VLAN 七、配置VLAN 八、管理VLAN 九、VLAN的应用 1、 网络隔离 2、网络管理 3、网络扩展 十、VLAN的优点和限制 十一、结论 虚拟局域网&#…...

《表格新视界:从罗列到洞察的飞跃》
在信息爆炸的当下,表格宛如一位低调的英雄,默默支撑着无数的数据世界。 曾经,我们只把表格当作简单的记录工具,一行行、一列列地填着数字与文字。但如今,表格已华丽转身,成为了展现数据魅力的舞台。 它不…...

风电功率预测 | 基于GRU门控循环单元的风电功率预测(附matlab完整源码)
风电功率预测 风电功率预测 | 基于GRU门控循环单元的风电功率预测(附matlab完整源码)完整代码风电功率预测 | 基于GRU门控循环单元的风电功率预测(附matlab完整源码) 完整代码 clc; clear close allX = xlsread(风电场预测.xlsx)...

0基础安装 composer
解决: composer 不是内部或外部命令,也不是可运行的程序 或批处理文件。 php composer.phar可以运行 安装环境:系统w11 官网地址:Composer 1.安装composer 1.1打开命令行窗口 在命令行窗口里,右键是粘贴࿰…...

MYSQL-9.问题排查
问题排查的思路与方向 问题排查思路 分析问题:根据理论知识经验分析问题,判断问题可能出现的位置或可能引起问题的原因,将目标缩小到一定范围;排查问题:基于上一步的结果,从引发问题的“可疑性”角度出发…...

制造企业数据管理:从数据到价值的转化
在数字化浪潮席卷全球的今天,制造企业面临着前所未有的机遇与挑战。如何从海量的数据中提取有价值的信息,将其转化为企业的核心竞争力,成为了每一个制造企业必须面对的问题。而数据管理,正是实现这一转化的关键所在。制造企业数据…...

单例模式介绍
【一】为什么要单例模式 单例设计模式: 一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。 当一个类的功能比较单一,只需要一个实例…...

Facebook企业户/在Facebook上做推广有什么好处?
想到出海,必会想到Facebook作为世界上最大的社交网络,Facebook拥有难以想象的用户数量,流量大到没朋友。近年来也是独立站卖家获取流量的有力工具之一。独立站卖家在Facebook上做广告的好处? Facebook,Google 开企业广…...

Go GORM实战(二) | 数据库连接的N种方式
连接数据库 使用GORM连接数据库还是比较简单的,概括起来就是以下三个步骤: 引入gorm.io/gorm和对应数据库的驱动库,如gorm.io/driver/sqlite。 调用对应驱动库的Open()或New()函数返回一个实现了gorm.Dialector接口的实例。 调用gorm.Open…...

Cocos Creator 2D Mask与Layout 使用详解
Cocos Creator是一款强大的2D游戏开发引擎,提供了丰富的功能和工具,使开发者可以轻松创建出高质量的游戏。其中,2D Mask和Layout是Cocos Creator中常用的两个组件,它们可以帮助开发者实现更加复杂和精美的游戏界面设计。本文将详细…...

项目-坦克大战
增加功能 我方坦克在发射的子弹消亡后,才能发射新的子弹。同时实现发多颗子弹 1,在按下J键,我们判断当前hero对象的子弹,是否已经销毁2,如果没有销毁,就不去触发shotEnemyTank3,如果已经销毁&…...

代码随想录算法训练营第二十九天| LeetCode491.递增子序列* 、LeetCode46.全排列*、LeetCode47.全排列 II
#LeetCode 491. Non-decreasing Subsequences #LeetCode 491. 视频讲解:回溯算法精讲,树层去重与树枝去重 | LeetCode:491.递增子序列_哔哩哔哩_bilibili 首先,本题不能考虑首先对数组排序,排序会导致数组直接变为一个…...

基于SpringBoot设计模式之开端
文章目录 前言引言开始 前言 为了更好的在项目中,能更加优雅的使用设计模式,比较针对性的解决我们的问题。我将在这个专栏详细的描述23种设计模式,为了与时俱进,我打算通过springboot的形式将23种设计模式全部撸完! 引…...

tensorflow实现二分类
# 导入所需库和模块 from tensorflow.keras.layers import Dense, Input, Activation # 导入神经网络层和激活函数模块 from tensorflow.keras.models import Sequential # 导入Keras的Sequential模型 import pandas as pd # 导入Pandas库用于数据处理 import numpy as np …...

简化路径[中等]
优质博文:IT-BLOG-CN 一、题目 给你一个字符串path,表示指向某一文件或目录的Unix风格 绝对路径 (以/开头),请你将其转化为更加简洁的规范路径。在Unix风格的文件系统中,一个点.表示当前目录本身&#x…...

记一次若依项目组装树型结构数据的效率优化
背景 最近公司的项目使用了若依框架做开发,发现部门管理功能的部门如果有3万笔记录时,查询部门信息并组装为父子结构时运行特别缓慢,本地运行需要3分钟才能加载出来,因此接到优化的工作。 代码展示 首先看看表结构是这么定义的…...

秒杀系统之系统优化
3 系统优化 对于一个软件系统,提高性能可以有很多种手段,如提升硬件水平、调优JVM 性能,这里主要关注代码层面的性能优化—— 减少序列化:减少 Java 中的序列化操作可以很好的提升系统性能。序列化大部分是在 RPC 阶段发生&#x…...

【介绍下Python多线程,什么是Python多线程】
🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…...

FPGA相关论文阅读
一、Achieving 100Gbps Intrusion Prevention on a Single Server 论文名称中文翻译:在单台服务器上实现100Gbps吞吐量的入侵防御检测。 文章中的Mixed-1和Norm-1 二、Distributed Password Hash Computation on Commodity Heterogeneous Programmable Platforms…...

瑞芯微RK3588驱动设计之DVP并口摄像头2
dts配置看瑞芯微RK3588驱动配置之DVP并口摄像头1_rockchip 调试dvp设备 直接显示摄像头数据-CSDN博客 这里看看驱动的具体实现,以gc2145为例。 gc2145的驱动源码如下: // SPDX-License-Identifier: GPL-2.0 /** GC2145 CMOS Image Sensor driver*** C…...

安卓手机APP开发__支持64位的架构
安卓手机APP开发__支持64位的架构 目录 概述 读取你的APP 快速的状态检查 你的APP使用了原生的代码吗? 你的APP包含了64位的代码库吗? 确保在这些目录中有原生的代码库. 使用APK分析器查看原生的代码库 通过解压缩APK查看原生的代码库 用安卓工…...

Foxmail使用经验总结
目录 1.概述 2.版本历史 3.使用方法 3.1.安装和设置账户 3.2.收取和阅读邮件 3.3.发送邮件 3.4.管理联系人 3.5.日程安排和任务管理 3.6.定制设置和插件 3.7.跨平台同步 4.小结 1.概述 Fox…...

信息系统项目管理师0601:项目立项管理 — 考点总结(可直接理解记忆)
点击查看专栏目录 项目立项管理 — 考点总结(可直接理解记忆) 1.项目建议书(又称立项申请)是项目建设单位向上级主管部门提交项目申请时所必须的文件,是对拟建项目提出的框架性的总体设想。在项目建议书批准后,方可开展对外工作(掌握)。 2.项目建议书应该包括的核心内…...