Offset Noise

如果尝试用stable diffusion生成特别暗或特别亮的图像,它几乎总是生成平均值相对接近 0.5 的图像。如下图所示,生成暗的图片总是带着明亮的区域(暗的街道明亮的光),生成亮的图片总是带着暗的区域(白的雪暗的树)。
在这里插入图片描述
Offset Noise正是为了解决这个问题的一个trick。

stable diffusion使用的初始噪声是服从 N ( 0 , I ) N(\pmb{0}, \pmb{I}) N(0,I)的,如下:

noise = torch.randn_like(latents)

Offset Noise将初始噪声改为

noise = torch.randn_like(latents) + 0.1 * torch.randn(latents.shape[0], latents.shape[1], 1, 1)

因为虽然前向过程在不停的往图片加噪声,但实际上,因为实现的问题,前向过程最后并没有得到真的符合 N ( 0 , I ) N(\pmb{0}, \pmb{I}) N(0,I)分布的噪声。而反向过程是从 N ( 0 , I ) N(\pmb{0}, \pmb{I}) N(0,I)中采样初始噪声的,这导致了前向过程和反向过程之间的差异。

参考

https://www.crosslabs.org/blog/diffusion-with-offset-noise
Common Diffusion Noise Schedules and Sample Steps are Flawed

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 MATLAB 代码示例,用于实现 Offset-Free MPC: ``` % 系统模型 A = [1.2 0.5; -0.3 1]; B = [1; 0.5]; C = [1 0]; % 参数设置 N = 10; % 预测时段 Q = diag([1 0.1]); % 状态惩罚项 R = 0.5; % 控制惩罚项 x0 = [0.5; 0]; % 初始状态 x_ref = [1; 0]; % 参考状态 % 建立 MPC 控制器 sys = ss(A, B, C, 0); mpcobj = mpc(sys, 1); % 采样时间为 1s mpcobj.PredictionHorizon = N; mpcobj.ControlHorizon = N; mpcobj.Weights.OutputVariables = 1; mpcobj.Weights.ManipulatedVariablesRate = R; mpcobj.Weights.ManipulatedVariables = zeros(1, N); % 设置 Offset-Free MPC mpcobj.Model.Plant = ss(A, B, eye(2), 0); mpcobj.Model.Noise = zeros(2, N); mpcobj.Model.Noise(1,1) = 1; % 第一个预测时段的测量噪声 mpcobj.Model.Noise(1:end,end) = eye(2); % 所有预测时段的过程噪声 % 模拟控制 T = 20; % 总时长 t = 0:mpcobj.Ts:T; Nt = length(t); x = zeros(2, Nt); y = zeros(1, Nt); u = zeros(1, Nt); x(:,1) = x0; for i = 1:Nt-1 % 计算控制输入 [~, u(i), info] = mpcmove(mpcobj, x(:,i), x_ref); if info ~= 0 warning('MPC 未收敛'); end % 模拟系统响应 y(i) = C * x(:,i) + randn * 0.1; % 添加测量噪声 x(:,i+1) = A * x(:,i) + B * u(i) + randn(2,1) * 0.05; % 添加过程噪声 end % 绘制结果 subplot(2,1,1); plot(t, x(1,:), t, x_ref(1)*ones(size(t)), '--'); legend('状态1', '参考状态'); xlabel('时间 (s)'); ylabel('状态'); title('Offset-Free MPC 控制结果'); subplot(2,1,2); plot(t(1:end-1), u); xlabel('时间 (s)'); ylabel('控制输入'); ``` 此代码演示了如何使用 MATLAB 中的 MPC 工具箱实现 Offset-Free MPC。请注意,这是一个简单的示例,仅用于演示 MPC 控制的基本原理。在实际应用中,您需要根据您的具体问题进行更改和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值