diffusion model(十八):diffusion model中negative prompt的工作机制

info
个人博客主页http://myhz0606.com/article/ncsn

前置阅读:

DDPM: http://myhz0606.com/article/ddpm

classifier-guided:http://myhz0606.com/article/guided

classifier-free guided:http://myhz0606.com/article/classifier_free

Score based generative model:http://myhz0606.com/article/ncsn

引言

在用Stable Diffusion生成图片时,除了输入图片表述文本外(positive prompt),我们还经常会使用negative prompt作为condition来让模型避免生成negative prompt所表述的概念。查阅源码发现stable diffusion中negative prompt的实现机制是将classifier-free guided中 ϵ θ ( x t , y = ∅ , t ) \epsilon_{\theta}(x_t, y=\empty, t) ϵθ(xt,y=,t)替换为 ϵ θ ( x t , y ~ , t ) \epsilon_{\theta}(x_t, \tilde{y}, t) ϵθ(xt,y~,t),( y ~ \tilde{y} y~表示negative prompt)。即:

原生classifier-free guided每一个timestep的噪声估计如下:

ϵ ^ θ ( x t , y , t ) = ϵ θ ( x t , y = ∅ , t ) + s [ ϵ θ ( x t , y , t ) − ϵ θ ( x t , y = ∅ , t ) ] \begin{align} \hat{\epsilon}_{\theta}(x_t, y, t)=\epsilon_{\theta}(x_t, y=\empty,t) + s[\epsilon_{\theta}(x_t, y, t) - \epsilon_{\theta}(x_t, y=\empty, t) ]\tag{1} \end{align} ϵ^θ(xt,y,t)=ϵθ(xt,y=,t)+s[ϵθ(xt,y,t)ϵθ(xt,y=,t)](1)

当有negative prompt condition时,将上式改为

ϵ ^ θ ( x t , y , t ) = ϵ θ ( x t , y ~ , t ) + s [ ϵ θ ( x t , y , t ) − ϵ θ ( x t , y ~ , t ) ] \begin{align} \hat{\epsilon}_{\theta}(x_t, y, t)=\epsilon_{\theta}(x_t, \tilde{y},t) + s[\epsilon_{\theta}(x_t, y, t) - \epsilon_{\theta}(x_t, \tilde{y}, t) ]\tag{2} \end{align} ϵ^θ(xt,y,t)=ϵθ(xt,y~,t)+s[ϵθ(xt,y,t)ϵθ(xt,y~,t)](2)

源码位置位于(diffuser版本v0.29.1): https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py#L427

那么为什么negative prompt能够work呢?

How do negative prompt take effect

为了引出相关推导,先快速回顾一下classifier-guided和classifier-free的motivation。

为了做条件生成(即从条件分布 p ( x ∣ y ) p(x|y) p(xy)中采样样本),我们可以根据贝叶斯公式进行如下推导:

p ( x ∣ y ) = p ( y ∣ x ) p ( x ) p ( y ) log ⁡ p ( x ∣ y ) = log ⁡ p ( y ∣ x ) + log ⁡ p ( x ) − log ⁡ p ( y ) ⇒ ∇ x log ⁡ p ( x ∣ y ) = ∇ x log ⁡ p ( y ∣ x ) + ∇ x log ⁡ p ( x ) − ∇ x log ⁡ p ( y ) ⏟ = 0 ⇒ ∇ x log ⁡ p ( x ∣ y ) = ∇ x log ⁡ p ( y ∣ x ) + ∇ x log ⁡ p ( x ) (3) \begin{aligned} p(\mathrm{x}|y) &= \frac{p(y|\mathrm{x})p(\mathrm{x})}{p(y)} \\ \log p(\mathrm{x}|y) &= \log p(y|\mathrm{x}) + \log p(\mathrm{x}) - \log p(y) \\ \Rightarrow \nabla_{\mathrm{x}} \log p(\mathrm{x}|y) &= \nabla_{\mathrm{x}} \log p(y|\mathrm{x}) + \nabla_{\mathrm{x}} \log p(\mathrm{x}) - \underbrace{ \nabla_{\mathrm{x}} \log p(y) }_{=0} \\ \Rightarrow \nabla_{\mathrm{x}} \log p(\mathrm{x}|y) &= \nabla_{\mathrm{x}} \log p(y|\mathrm{x}) + \nabla_{\mathrm{x}} \log p(\mathrm{x}) \end{aligned} \tag{3} p(xy)logp(xy)xlogp(xy)xlogp(xy)=p(y)p(yx)p(x)=logp(yx)+logp(x)logp(y)=xlogp(yx)+xlogp(x)=0 xlogp(y)=xlogp(yx)+xlogp(x)(3)

在classifier-guided任务中,我们已知无条件输入的score based model能够估计出 ∇ x log ⁡ p ( x ) \nabla_{\mathrm{x}} \log p(\mathrm{x}) xlogp(x) ,因此,为了得到 ∇ x log ⁡ p ( y ∣ x ) \nabla_{\mathrm{x}} \log p(y|\mathrm{x}) xlogp(yx) ,我们只需额外训练一个分类器来估计 ∇ x log ⁡ p ( y ∣ x ) \nabla_{\mathrm{x}} \log p(y|\mathrm{x}) xlogp(yx)即可。为了控制condition的强度,引入一个guidance scale s s s

∇ x log ⁡ p ( x ∣ y ) : = s ∇ x log ⁡ p ( y ∣ x ) + ∇ x log ⁡ p ( x ) (4) \nabla_{\mathrm{x}} \log p(\mathrm{x}|y) := s \nabla_{\mathrm{x}} \log p(y|\mathrm{x}) + \nabla_{\mathrm{x}} \log p(\mathrm{x}) \tag{4} xlogp(xy):=sxlogp(yx)+xlogp(x)(4)

对于classifier-free任务中,通过随机drop标签,我们同时训练 ∇ x log ⁡ p ( x ) \nabla_{\mathrm{x}} \log p(\mathrm{x}) xlogp(x) ∇ x log ⁡ p ( x ∣ y ) \nabla_{\mathrm{x}} \log p(\mathrm{x}|y) xlogp(xy) 两个score based model。虽然我们可以通过 ∇ x log ⁡ p ( x ∣ y ) \nabla_{\mathrm{x}} \log p(\mathrm{x}|y) xlogp(xy) 直接进行条件生成,但为了控制生成时条件的强度,沿用了公式(4) guidance scale的概念。并且 ∇ x log ⁡ p ( y ∣ x ) = ∇ x log ⁡ p ( x ∣ y ) − ∇ x log ⁡ p ( x ) \nabla_{\mathrm{x}} \log p(y|\mathrm{x}) = \nabla_{\mathrm{x}} \log p(\mathrm{x}|y) - \nabla_{\mathrm{x}} \log p(\mathrm{x}) xlogp(yx)=xlogp(xy)xlogp(x) ,故有:

∇ x log ⁡ p ( x ∣ y ) : = s ( ∇ x log ⁡ p ( x ∣ y ) − ∇ x log ⁡ p ( x ) ) + ∇ x log ⁡ p ( x ) (5) \nabla_{\mathrm{x}} \log p(\mathrm{x}|y) := s (\nabla_{\mathrm{x}} \log p(\mathrm{x}|y) - \nabla_{\mathrm{x}} \log p(\mathrm{x}) ) + \nabla_{\mathrm{x}} \log p(\mathrm{x}) \tag{5} xlogp(xy):=s(xlogp(xy)xlogp(x))+xlogp(x)(5)

stable diffusion代码路径:https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py#L1019

当有negative prompt作为condition时,此时的condition为两项,一项是 y y y: positive prompt condition,另一项为 n o t   y ~ \mathrm{not} \, \tilde{y} noty~:negative prompt condition。

只要得到 ∇ x log ⁡ p ( x ∣ y , n o t   y ~ ) \nabla_{\mathrm{x}} \log p(\mathrm{x}|y, \mathrm{not} \, \tilde{y}) xlogp(xy,noty~)我们就可以参考之前的采样算法生成样本。重新直接训练一个score based model来估计 ∇ x log ⁡ p ( x ∣ y , n o t   y ~ ) \nabla_{\mathrm{x}} \log p(\mathrm{x}|y, \mathrm{not} \, \tilde{y}) xlogp(xy,noty~)当然可行,但成本巨大。下面来看如何进行简化

p ( x ∣ y , n o t   y ~ ) = p ( x , y , n o t   y ~ ) p ( y , n o t   y ~ ) = p ( y , n o t   y ~ ∣ x ) p ( x ) p ( y , n o t   y ~ ) = 在 x 条件下 y 与 n o t   y ~ 独立 p ( y ∣ x ) p ( n o t   y ~ ∣ x ) p ( x ) p ( y , n o t   y ~ ) = p ( x ) p ( y , n o t   y ~ ) p ( y ∣ x ) ( 1 − p ( y ~ ∣ x ) ) = p ( y ~ ∣ x ) ≠ 0 p ( x ) p ( y , n o t   y ~ ) p ( y ∣ x ) ( 1 p ( y ~ ∣ x ) − 1 ) p ( y ~ ∣ x ) ∝ p ( x ) p ( y , n o t   y ~ ) p ( y ∣ x ) ( 1 p ( y ~ ∣ x ) − 1 ) ∝ p ( x ) p ( y , n o t   y ~ ) p ( y ∣ x ) 1 p ( y ~ ∣ x ) − p ( x ) p ( y , n o t   y ~ ) p ( y ∣ x ) ∝ p ( x ) p ( y , n o t   y ~ ) p ( y ∣ x ) p ( y ~ ∣ x ) ⇒ ∇ x log ⁡ p ( x ∣ y , n o t   y ~ ) ∝ ∇ x log ⁡ p ( x ) + ∇ x log ⁡ p ( y ∣ x ) − ∇ x log ⁡ p ( y ~ ∣ x ) (6) \begin{aligned} p(\mathrm{x}|y, \mathrm{not}\, \tilde{y} ) & = \frac{p(\mathrm{x},y, \mathrm{not}\, \tilde{y})}{p(y, \mathrm{not}\, \tilde{y})} \\ &= \frac{p(y, \mathrm{not}\, \tilde{y}|\mathrm{x})p(\mathrm{x})}{p(y, \mathrm{not}\, \tilde{y})} \\ & \stackrel{在x条件下y与\mathrm{not} \, \tilde{y}独立}= \frac{p(y|\mathrm{x})p(\mathrm{not}\, \tilde{y}|\mathrm{x})p(\mathrm{x})}{p(y,\mathrm{not}\, \tilde{y})} \\ & = \frac{p(\mathrm{x})}{{p(y,\mathrm{not}\, \tilde{y})}} p(y|\mathrm{x}) (1 - p(\tilde{y}|\mathrm{x})) \\ & \stackrel{p(\tilde{y}|\mathrm{x}) \neq 0}= \frac{p(\mathrm{x})}{{p(y,\mathrm{not}\, \tilde{y})}} p(y|\mathrm{x}) (\frac{1}{p(\tilde{y}|\mathrm{x})} - 1) p(\tilde{y}|\mathrm{x}) \\ & \propto \frac{p(\mathrm{x})}{{p(y,\mathrm{not}\, \tilde{y})}} p(y|\mathrm{x}) (\frac{1}{p(\tilde{y}|\mathrm{x})} - 1) \\ & \propto \frac{p(\mathrm{x})}{{p(y,\mathrm{not}\, \tilde{y})}} p(y|\mathrm{x}) \frac{1}{p(\tilde{y}|\mathrm{x})} - \frac{p(\mathrm{x})}{{p(y,\mathrm{not}\, \tilde{y})}} p(y|\mathrm{x}) \\ & \propto \frac{p(\mathrm{x})}{{p(y,\mathrm{not}\, \tilde{y})}} \frac{p(y|\mathrm{x})}{p(\tilde{y}|\mathrm{x})} \\ \Rightarrow \nabla_{\mathrm{x}} \log p(\mathrm{x}|y, \mathrm{not}\, \tilde{y} ) & \propto \nabla_{\mathrm{x}} \log p(\mathrm{x}) + \nabla_{\mathrm{x}} \log p(y|\mathrm{x}) - \nabla_{\mathrm{x}} \log {p(\tilde{y}|\mathrm{x})} \end{aligned} \tag{6} p(xy,noty~)xlogp(xy,noty~)=p(y,noty~)p(x,y,noty~)=p(y,noty~)p(y,noty~x)p(x)=x条件下ynoty~独立p(y,noty~)p(yx)p(noty~x)p(x)=p(y,noty~)p(x)p(yx)(1p(y~x))=p(y~x)=0p(y,noty~)p(x)p(yx)(p(y~x)11)p(y~x)p(y,noty~)p(x)p(yx)(p(y~x)11)p(y,noty~)p(x)p(yx)p(y~x)1p(y,noty~)p(x)p(yx)p(y,noty~)p(x)p(y~x)p(yx)xlogp(x)+xlogp(yx)xlogp(y~x)(6)

由于:

∇ x log ⁡ p ( y ∣ x ) = ∇ x log ⁡ p ( x ∣ y ) − ∇ x log ⁡ p ( x ) ∇ x log ⁡ p ( y ~ ∣ x ) = ∇ x log ⁡ p ( x ∣ y ~ ) − ∇ x log ⁡ p ( x ) (7) \begin{aligned}\nabla_{x} \log p(y|\mathrm{x}) = \nabla_{x} \log p(\mathrm{x}|y) - \nabla_{\mathrm{x}} \log p(\mathrm{x}) \\ \nabla_{\mathrm{x}} \log p(\tilde{y}|\mathrm{x}) = \nabla_{x} \log p(\mathrm{x}|\tilde{y}) - \nabla_{\mathrm{x}} \log p(\mathrm{x}) \end{aligned} \tag{7} xlogp(yx)=xlogp(xy)xlogp(x)xlogp(y~x)=xlogp(xy~)xlogp(x)(7)

s + s^{+} s+为positive prompt condition的guidance scale, s − s^{-} s为negative prompt的guidance scale,有

∇ x log ⁡ p ( x ∣ y , n o t   y ~ ) : = ∇ x log ⁡ p ( x ) + s + ( ∇ x log ⁡ p ( x ∣ y ) − ∇ x log ⁡ p ( x ) ) − s − ( ∇ x log ⁡ p ( x ∣ y ~ ) − ∇ x log ⁡ p ( x ) ) (8) \nabla_{\mathrm{x}} \log p(\mathrm{x}|y, \mathrm{not}\, \tilde{y} ) := \nabla_{\mathrm{x}} \log p(\mathrm{x}) + s^{+}(\nabla_{x} \log p(\mathrm{x}|y) - \nabla_{\mathrm{x}} \log p(\mathrm{x})) - s^{-} (\nabla_{x} \log p(\mathrm{x}|\tilde{y}) - \nabla_{\mathrm{x}} \log p(\mathrm{x})) \tag{8} xlogp(xy,noty~):=xlogp(x)+s+(xlogp(xy)xlogp(x))s(xlogp(xy~)xlogp(x))(8)

通过式(8)可以得出,我们只需计算 ∇ x log ⁡ p ( x ) \nabla_{\mathrm{x}} \log p(\mathrm{x}) xlogp(x) ∇ x log ⁡ p ( x ∣ y ) \nabla_{x} \log p(\mathrm{x}|y) xlogp(xy) ∇ x log ⁡ p ( x ∣ y ~ ) \nabla_{x} \log p(\mathrm{x}|\tilde{y}) xlogp(xy~)三项即可估计出 ∇ x log ⁡ p ( x ∣ y , n o t   y ~ ) \nabla_{\mathrm{x}} \log p(\mathrm{x}|y, \mathrm{not}\, \tilde{y} ) xlogp(xy,noty~)

1 − s + + s − = 0 1 - s^{+} + s^{-} = 0 1s++s=0时, s − = s + − 1 s^{-} = s^{+} - 1 s=s+1

∇ x log ⁡ p ( x ∣ y , n o t   y ~ ) = s + ∇ x log ⁡ p ( x ∣ y ) − ( s + − 1 ) ∇ x log ⁡ p ( x ∣ y ~ ) = ∇ x log ⁡ p ( x ∣ y ~ ) + s + ( ∇ x log ⁡ p ( x ∣ y ) − ∇ x log ⁡ p ( x ∣ y ~ ) ) (9) \begin{aligned} \nabla_{\mathrm{x}} \log p(\mathrm{x}|y, \mathrm{not}\, \tilde{y} ) &= s^{+}\nabla_{x} \log p(\mathrm{x}|y) - (s^{+} - 1)\nabla_{x} \log p(\mathrm{x}|\tilde{y}) \\ & = \nabla_{x} \log p(\mathrm{x}|\tilde{y}) + s^{+}(\nabla_{x} \log p(\mathrm{x}|y) - \nabla_{x} \log p(\mathrm{x}|\tilde{y})) \end{aligned} \tag{9} xlogp(xy,noty~)=s+xlogp(xy)(s+1)xlogp(xy~)=xlogp(xy~)+s+(xlogp(xy)xlogp(xy~))(9)

式(9) 就是stable diffusion源码中实现形式

源码位置位于(diffuser版本v0.29.1): https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py#L427

文献[3]通过“Neutralization Hypothesis”,“Reverse Activation”解释negative prompt conditioning的工作机制,感兴趣的同学可以后续阅读。

When do negative prompt take effect

定性分析

上文我们通过理论推导证明了negative prompt conditioning的可行性。本节将从可视化的角度分析negative prompt conditioning是如何影响图片生成的。主要文献参考[3]

类似Prompt-to-prompt[4]的研究思路,我们可以绘制不同时间步token-wise attention map热力图。从图中发现,negative prompt作用存在一定延迟。positive prompt conditioning在生成的早期(t=0-3)时就关注到对应的区域,而negative prompt conditioning直到t=8-11才能正确关注到对应的区域。

在这里插入图片描述

定量分析

进一步的,为了定量的描述上述机制,文献[3]定义了 r t r_t rt为negative prompt conditioning的强度

r t = Σ k ∥ F k , p − ( i ) ( t ) ∥ F Σ k ∥ F k , p + ( r ( i ) ) ( t ) ∥ F (10) r _ { t } = \frac { \Sigma _ { k } \| F _ { k , p _ { - } ( i ) } ^ { ( t ) } \| _ { F } } { \Sigma _ { k } \| F _ { k , p _ { + } ( r ( i ) ) } ^ { ( t ) } \| _ { F } } \tag{10} rt=ΣkFk,p+(r(i))(t)FΣkFk,p(i)(t)F(10)

假设:Positive prompt: Pofessional office woman. Negative prompt: Glasses

p _ p_{\_} p_: 表示negative prompt

p + p_{+} p+: 表示positive prompt

p _ ( i ) p_{\_ }(i) p_(i):表示negative prompt第 i i i个索引处的token

p + ( r ( i ) ) p_{+}(r(i)) p+(r(i)):表示positive prompt p + p_{+} p+中与 p _ ( i ) p_{\_ }(i) p_(i)最相关的token。 p _ ( i ) p_{\_ }(i) p_(i)=”Glasses”, 那么 p + ( r ( i ) ) p_{+}(r(i)) p+(r(i))=“woman”。

F k , p _ ( i ) t F_{k, p_{\_ (i)}}^{t} Fk,p_(i)t: 在时间步为t时,在第k层cross-attention处token p _ ( i ) p_{\_ }(i) p_(i)对应的attention map。

F k , p + ( r ( i ) ) t F_{k, p_{+}(r(i))}^{t} Fk,p+(r(i))t: 在时间步为t时,在第k层cross-attention处token p + ( r ( i ) ) p_{+}(r(i)) p+(r(i))对应的attention map。

r t r_t rt越小时,说明negative prompt conditioning的强度越小,反之越大。

选择了10对相应的提示对,10个不同的随机种子上进行实验,并绘制 ( r t , t ) (r_t, t) (rt,t)曲线如下:

在这里插入图片描述

从上图不难得出:

  • negative prompt conditioning的强度初始较弱,在时间步为5-10时达到峰值。
  • 当negative prompt 为名词时, r t r_t rt呈先增强后降低趋势,这是由于当negative prompt作用后,会移除生成图片中的对应实体,从而让token-wise attention map的响应变弱。
  • 当negative prompt 为形容词时, r t r_t rt呈先增强后稳定。

即然negative prompt conditioning存在滞后性,可以在初始阶段(t=0-5)不引入negative prompt conditioning,之后在引入,这能起到类似局部编辑的效果。

在这里插入图片描述

小结

本文相对系统探讨了diffusion model中negative prompt conditioning的工作机理,解释了stable diffusion关于negative prompt conditioning源码实现的合理性(式9),并给出了更一般的形式(式8)。

参考文献

[1] Compositional Visual Generation with Energy Based Models

[2] Compositional Visual Generation with Composable Diffusion Models

[3]Understanding the Impact of Negative Prompts: When and How Do They Take Effect?

[4]http://myhz0606.com/article/p2p

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

技术干货 | AI驱动工程仿真和设计创新

在当今快速发展的技术领域,人工智能(AI)、机器学习和深度学习等技术已经成为推动工程仿真和设计创新的关键力量。Altair技术经理张晨在Altair “AI FOR ENGINEERS”线下研讨会上发表了相关精彩演讲,本文摘自演讲内容,与…

倒F天线参数

倒F天线是依据天线形状命名的。 天线的谐振点及输入阻抗余S、H和L的关系如下: 倒F天线一般用于单频点设计,使用1/4波长原理(利用镜像原理,实际相当于半波长的偶极子天线)。也就是说L的长度是谐振点对应波长的1/4&#…

mybatis动态传参pgsql日期Interval

在navicat16中,标准写法 SELECT * FROM business_status_info WHERE create_time > (NOW() - INTERVAL 5 minutes) 在mybatis中,错误写法 SELECT * FROM business_status_info WHERE create_time > (NOW() - INTERVAL #{monitorTimeInterval,jdbc…

ViT:3 Compact Architecture

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技(Mamba,xLSTM,KAN)则…

浏览器提升编译速度小技巧(一)- 防病毒排除

1.引言 在Chrome开发过程中,编译速度是影响开发效率的关键因素之一。编译一个大型项目如Chrome,往往需要处理大量的代码文件和依赖库,这个过程既复杂又耗时。因此,任何能够提升编译速度的技巧,都能显著提高开发效率&a…

AI风险管理新利器:SAIF CHECK利用Meta Llama 3保障合规与安全

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

react-native在IOS上集成百度地图详解

export default class BaiDuMapTest extends Component { render() { return ( ); } } const styles StyleSheet.create({ container: { flex: 1, justifyContent: ‘center’, alignItems: ‘center’, backgroundColor: ‘#F5FCFF’, }, welcome: { fontSize:…

电子设备抗震等级与电子设备震动实验

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/139923445 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

RK3588上手踩坑之启动卡死2

同事开发了一块RK3588Q,记录下上手的踩坑过程。 RK3588上手踩坑实录_-CSDN博客https://blog.csdn.net/huntenganwei/article/details/135213035?spm1001.2014.3001.5501 按照之前的搞法,一通操作。 上电 莫名其妙的duang了 各种检查,核对…

2024年国内顶尖的在线文档协作工具大对比

近几年国内主流使用的9款在线文档协作工具对比:PingCode 知识库、WPS Office 云协作、腾讯文档、语雀、Filez 企业网盘、360亿方云、石墨文档、Confluence、Notion。 在线文档协作工具因其能够提供实时编辑、共享和管理文档的能力,成为了很多团队提升工作…

制造业工厂急需一套erp系统帮他降本增效

随着全球制造业竞争的日益激烈,制造业工厂面临着越来越多的挑战,包括成本控制、生产效率、市场响应速度等方面。在这样的背景下,一套高效的ERP(企业资源规划)系统成为了制造业工厂降本增效的必备工具。本文将探讨ERP系…

一文读懂交换机MAC地址表:五大关键点,图解21步

HCIA 新班开课了华为HCIA课程介绍苏州面授班 | 全国直播班循环开班,免费重学前言 什么是MAC地址表?MAC地址表有什么作用?MAC地址表里面包含了哪些要素?今天带你好好唠唠。 我们以一个案例为例: 如上图:PC1和PC2通…

基于机理状态模型的约束预测控制

1、约束优化问题描述 考虑如下线性离散时间系统的状态空间增量模型: Δ x ( k 1 ) A Δ x ( k ) B u Δ u ( k ) B d Δ d ( k ) y c ( k ) C c Δ x ( k ) y c ( k − 1 ) y b ( k ) C b Δ x ( k ) y b ( k − 1 ) (1) \begin{aligned} \Delta x(k1)&am…

反激开关电源UC3842芯片介绍

1、VCC端有个36V的稳压管,说明供电电压最高为36V,当然也不能过低,过低就有个欠压锁定电路(UVLO); 2、输出经过一个稳压器得到高精度的5V电压,其中一路输出给RC充放电,产生一定频率的…

如何进行外贸SEO优化?

你需要了解目标市场的搜索习惯。不同国家的人使用的搜索引擎和关键词可能不同,所以要先做市场调研,找出你要推广的产品在目标市场最常用的关键词。可以使用像Ahrefs、SEMrush等工具来帮助你分析和选择合适的关键词。 网站的结构也很重要。一个清晰、易导…

08较成功的降低干扰获得较好的波形

08较成功的降低干扰获得较好的波形 波形数据当前数据调整后的数据后续 结语其他以下是废话 试验,本身就是一个摸索的过程,在上一阶段的试验中,我们优化了采集装置,更换了导电性较好的电极。 目前数据美观程度较之前提升了不少&…

持续增强国产适配 | 宁盾身份域管与南大通用、飞腾完成产品兼容性认证

随着党政、央国企、金融信创国产化改造日益深入,企业对国产 IT 基础设施生态兼容适配的需求日益迫切。为践行给企业提供“开箱即用”的交付体验承诺,宁盾身份域管持续增强多元异构产品的兼容适配。近日,宁盾身份域管与天津南大通用数据技术股…

QT事件处理系统之二:窗口部件的事件拦截,以及事件的传递顺序

1、案例说明 在父窗口中为selfLineEdit窗口安装事件过滤器,这样我们可以在父窗口中首先拦截来自于selfLineEdit本身产生的事件,并且决定该事件最终是否继续传递到selfLineEdit窗口本身。 2、关键代码 selfLineEdit.cpp #include "selfLineEdit.h" #include &l…

如何使用Python和PaddleOCR轻松识别图片中的文字

在这个数字化时代,文本识别技术变得越来越重要,它广泛应用于文档自动化处理、内容审核、智能交互等场景。本文将引导你如何使用Python结合PaddleOCR库,轻松实现图片中的文字识别功能。 必备工具包安装 在开始编写代码之前,你需要…

vantUI upload 上传组件v-model绑定问题

直接绑定一个数组会有问题,删除失效/上传不了等等 解决在v-model绑定的数组外包一个对象即可