【深度学习】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种设计模式全部撸完! 引…...
毫秒算网的光通信技术——从“东数西算“到“毫秒用算“
引言:从"算力在哪"到"算力怎么到" 2021年启动的"东数西算"工程回答了一个根本问题:算力应该布局在哪里。通过在西部建设8大枢纽、10大集群,国家将算力基础设施与绿色能源禀赋深度耦合,开启了算力地…...
别再手动敲空格了!用LaTeX的\parskip命令一键搞定论文段落间距(附局部调整技巧)
LaTeX段落间距精修指南:从全局配置到章节级微调 在学术写作的世界里,格式规范往往比内容本身更容易引发焦虑。当你在凌晨三点盯着屏幕,发现第17次调整的段落间距仍然不符合期刊要求时,那种绝望感足以让任何研究者崩溃。传统的手动…...
Linux挖矿木马Linux.BtcMine.174技术剖析与防御实战
1. 新型Linux挖矿木马深度剖析:从Linux.BtcMine.174看现代恶意软件的演进最近安全圈里一个来自俄罗斯Dr.Web公司的分析报告引起了我的注意,他们披露了一个代号为Linux.BtcMine.174的新型木马。这玩意儿可不是什么小打小闹的脚本小子作品,而是…...
ESP32 Arduino IDE 看门狗实战:从硬件看门狗到Task Watchdog Timer的配置与避坑指南
1. ESP32看门狗机制入门:为什么你的程序总在重启? 刚接触ESP32的开发者经常会遇到一个诡异现象:程序运行得好好的,突然就重启了。这很可能就是看门狗(Watchdog Timer)在作祟。我第一次用ESP32做物联网传感器…...
别再只让小车跑了!给Arduino履带底盘加上机械臂,实现自动搬运的5个关键点
从玩具到工具:Arduino履带机械臂的工程化升级指南 当你的Arduino履带小车已经能在客厅里自如巡线时,是否想过让它真正"动手"做点事情?给底盘加装机械臂绝不是简单的物理拼接——我曾亲眼见证一个精心设计的六自由度机械臂在第一次抓…...
紧急通告:OpenAI已于2024年6月1日灰度上线ChatGPT Pay API V2.1,当前仅向Stripe白名单商户开放(附申请通道+审核时效倒计时)
更多请点击: https://codechina.net 第一章:ChatGPT实时支付功能在哪里 ChatGPT 本身并不原生支持实时支付功能。OpenAI 官方发布的 ChatGPT(包括免费版、Plus 订阅版及 Team/Enterprise 版)定位为人工智能对话助手,…...
MemoryOS:开源时序知识图谱AI记忆系统
AI的记忆困局:为什么需要"时序"和"知识图谱"?用过ChatGPT或任何AI助手的人大概都有过这样的体验:昨天告诉AI自己住在北京,今天问它"我住哪儿",它可能还能答对;但是过了两周&…...
别再手动启动了!分享一个我自用的RocketMQ Dashboard一键启动脚本(附源码解析)
解放双手:RocketMQ集群智能启动方案与Dashboard深度优化指南 1. 运维自动化的必要性 每次重启服务器后,面对需要依次启动NameServer、Broker和Dashboard的繁琐流程,相信不少RocketMQ使用者都经历过这样的痛苦:忘记启动某个组件导致…...
物联网设备网络无缝切换与多网融合:exnetif模块实战指南
1. 项目概述:为什么我们需要exnetif? 在物联网项目的实际开发中,我遇到过太多因为网络环境不稳定而导致的“玄学”问题。比如,一个部署在工厂车间的智能网关,原本通过稳定的有线以太网连接云端,一旦生产线调…...
Python 开发者五分钟接入 Taotoken 调用 GPT 与 Claude 模型
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Python 开发者五分钟接入 Taotoken 调用 GPT 与 Claude 模型 对于需要在项目中集成大语言模型的 Python 开发者而言,逐…...
