SigLIP技术小结

news2024/9/28 12:26:38
paperhttps://arxiv.org/abs/2303.15343
githubhttps://github.com/google-research/big_vision
个人博客位置http://myhz0606.com/article/siglip

1 背景

CLIP[1]自提出以来在zero-shot分类、跨模态搜索、多模态对齐等多个领域得到广泛应用。得益于其令人惊叹的能力,激起了研究者广泛的关注和优化。

目前对CLIP的优化主要可以分为两大类:其一是如何降低CLIP的训练成本;其二是如何提升CLIP的performance。

对于第一类优化任务的常见思路有3种。1)优化训练架构,如LiT[2]通过freezen image encoder,单独训练text encoder来进行text 和image的对齐来加速训练;2)减少训练token,如FLIP[3]通过引入视觉mask,通过只计算非mask区域的视觉表征来实现加速(MAE[4]中的思路)。3)优化目标函数,如CatLIP[5]将caption转为class label,用分类任务来代替对比学习任务来实现加速。

对于第二类提升CLIP的performance最常用和有效的手段就是数据治理,即构建高质量、大规模、高多样性的图文数据,典型的工作如:DFN[6]。

SigLIP这篇paper提出用sigmoid loss来做图文对比训练。这个方案既能降低训练成本,在小batch下(低于32k)performance也优于传统方法。

2 Method

为了方便阐述,符号定义如下:

符号
image encoder f ( ⋅ ) f(\cdot) f()
text encoder g ( ⋅ ) g(\cdot) g()
image I I I
text T T T
mini-batch B = { ( I 1 , T 1 ) , ( I 2 , T 2 ) , ⋯   } \mathcal{B} = \{ (I_1, T_1), (I_2, T_2), \cdots \} B={(I1,T1),(I2,T2),}

对于经典的softmax-based优化目标InfoNCE,其核心思路是让positive的图文对的距离越近越好,让negative图文对的距离越远越好,计算公式如下:

− 1 2 ∣ B ∣ ∑ i = 1 ∣ B ∣ ( log ⁡ e t x i ⋅ y i ∑ j = 1 ∣ B ∣ e t x i ⋅ y j ⏞ i m a g e   → t e x t   s o f t m a x + log ⁡ e t x i ⋅ y i ∑ j = 1 ∣ B ∣ e t x j ⋅ y i ⏞ t e x t → i m a g e   s o f t m a x ) (1) -\frac { 1 } { 2 | \mathcal { B } | } \sum _ { i = 1 } ^ { | \mathcal { B } | } \left( \overbrace { \log \frac { e ^ { t \mathbf { x } _ { i } \cdot \mathbf { y } _ { i } } } { \sum _ { j = 1 } ^ { | \mathcal { B } | } e ^ { t \mathbf { x } _ { i } \cdot \mathbf { y } _ { j } } } } ^ { \mathrm { i m a g e \space \to t e x t \space s o f t m a x } } + \overbrace { \log \frac { e ^ { t \mathbf { x } _ { i } \cdot \mathbf { y } _ { i } } } { \sum _ { j = 1 } ^ { | \mathcal { B } | } e ^ { t \mathbf { x } _ { j } \cdot \mathbf { y } _ { i } } } } ^ { \mathrm { t e x t } \rightarrow \mathrm{image \, softmax} } \right) \tag{1} 2∣B1i=1B logj=1Betxiyjetxiyi image text softmax+logj=1Betxjyietxiyi textimagesoftmax (1)

其中: x i = f ( I i ) ∥ f ( I i ) ∥ 2    , \begin{array} { r } { \mathbf { x } _ { i } = \frac { f ( I _ { i } ) } { \| f ( I _ { i } ) \| _ { 2 } } \; , } \end{array} xi=f(Ii)2f(Ii), y i = g ( T i ) ∥ g ( T i ) ∥ 2 \mathbf { y } _ { i } = \frac { g ( T _ { i } ) } { \| g ( T _ { i } ) \| _ { 2 } } yi=g(Ti)2g(Ti)

InfoNCE的缺点

  • softmax的计算存在数值不稳定的问题,需要引入额外的trick保证softmax的计算稳定性。详情见附录。
  • 计算量大。softmax loss的非对称(asymmetry),需要做了两次normalization,即 ∑ j = 1 ∣ B ∣ e t x j ⋅ y i ≠ ∑ j = 1 ∣ B ∣ e t x i ⋅ y j \sum _ { j = 1 } ^ { | \mathcal { B } | } e ^ { t \mathbf { x } _ { j } \cdot \mathbf { y } _ { i } } \neq \sum _ { j = 1 } ^ { | \mathcal { B } | } e ^ { t \mathbf { x } _ { i } \cdot \mathbf { y } _ { j } } j=1Betxjyi=j=1Betxiyj 。并且计算稳定性的trick也需要引入额外的计算量。
  • 显存占用大,由于要计算normalize,需要维护一个很大的概率分布矩阵。假定batch size为32k,那么这个概率分布矩阵的大小为 32 k × 32 k 32k \times 32k 32k×32k

下面来看文本提出的sigmoid loss 。其定义如下:

− 1 ∣ B ∣ ∑ i = 1 ∣ B ∣ ∑ j = 1 ∣ B ∣ log ⁡ 1 1 + e z i j ( − t x i ⋅ y j + b ) ⏟ L i j (2) -\frac { 1 } { | \mathcal { B } | } \sum _ { i = 1 } ^ { | \mathcal { B } | } \sum _ { j = 1 } ^ { | \mathcal { B } | } \underbrace { \log \frac { 1 } { 1 + e ^ { z _ { i j } ( - t \mathbf { x } _ { i } \cdot \mathbf { y } _ { j } + b ) } } } _ { \mathcal { L } _ { i j } } \tag{2} B1i=1Bj=1BLij log1+ezij(txiyj+b)1(2)

从上式可见,Sigmoild loss将每对图文对独立看待。即分别将每对图文对做二分类。

  • ( I i , T i ) (I_i, T_i) (Ii,Ti)时为正例。
  • ( I i , T j , j ≠ i ) (I_i, T_{j, j\neq i}) (Ii,Tj,j=i)时为负例。

式子中, z i j z _ { i j } zij为图文对的标签,1表示是正例,-1表示是负例。直观来看,式(2)明显存在正负样本不均衡的问题,batch size为 ∣ B ∣ |\mathcal{B}| B时,正例数为 ∣ B ∣ |\mathcal{B}| B,负例数为 ∣ B ∣ 2 − ∣ B ∣ |\mathcal{B}|^ 2 - |\mathcal{B}| B2B。为了缓解正负样本不均衡,作者引入两个learnable parameter t , b t,b t,b来调节正负例的梯度,初始时 t ′ = log ⁡ 10 t'=\log 10 t=log10 b = − 10 b=-10 b=10。附录对这两个参数的作用机理进行了浅要分析。

在这里插入图片描述

多卡场景下,可以用式(3)的通信策略实现高效训练。

− 1 B ∑ d i = 1 D ⏟ A   ∀   d e v i c e   d i ∑ d j = 1 D ⏞ B : s w a p n e g s a c r o s s d e v i c e s ∑ i = b d i b ( d i + 1 ) ⏟ a l l l o c a l p o s i t i v e s ∑ j = b d j b ( d j + 1 ) ⏟ n e g s f r o m n e x t d e v i c e L i j ⏞ C :   p e r   d e v i c e   l o s s (3) -\frac{1}{\mathcal{B}} \underbrace{ \sum _ {d_i = 1} ^ {D} } _ {\mathbf{A} \, \forall \, \mathrm{device} \, d_i} \overbrace{ \sum _ {d_j = 1} ^ {D} }^{\substack{\mathbf{B:\,} \mathrm{swap\, negs} \\ \mathrm{across\, devices}}} \overbrace{ \underbrace{\sum_{i=bd_i}^{b(d_i + 1)}}_{ \substack{ \mathrm{all \, local} \\ \mathrm{ positives}}} \underbrace{\sum_{j=bd_j}^{b(d_j + 1)}}_{ \substack{ \mathrm{negs \, from} \\ \mathrm{next \, device}}} \mathcal{L}_{ij} }^{\mathbf{C:\,} \mathrm{per\, device \, loss}} \tag{3} B1Adevicedi di=1Ddj=1D B:swapnegsacrossdevicesalllocalpositives i=bdib(di+1)negsfromnextdevice j=bdjb(dj+1)Lij C:perdeviceloss(3)

在这里插入图片描述

sigmoid-based contrastive learning的理论说完了,下面从实验的角度分析sigmoid loss的一些特性。

3 Experiment

3.1 Setting

(一) 模型

作者将基于sigmoid loss训练的CLIP称为SigLIP(Sigmoid loss for Language-Image Pre-training), 将sigmoid loss和LiT[2]架构训练的CLIP称为SigLIT (sigmoid LiT)

(二) 评估指标

作者主要从以下2个指标来评估模型的性能

  • Imagenet的zero shot准确率
  • XM3600多语言数据集的zero shot跨模态搜索准确率。

(三)训练数据集

webLi[9]

3.2 The influence of batch size

在之前的研究表明[8]:对比学习的batch size越大,效果越好。但之前的研究受限成本,最大只研究到64k。这篇paper将batch size扩大到1M。结果表明,当batch size达到32k,继续扩大的收益就很低了,达到256k后,收益达到顶峰。随后根据上述经验,作者对比了sigmoid和softmax的scale up batch size的能力,有以下几点核心结论:

  • sigmoid loss相比softmax loss更节约显存。用sigmoid loss时,4张TPU-v4能够容纳4096个batch size,但若用softmax,batch size只能容纳2048。
  • 在小batch下(batch size低于32k)sigmoid-based明显优于softmax-based loss,随着batch size进一步增加,二者差距逐渐减少。

在这里插入图片描述

在这里插入图片描述

作者给出了2个微调经验

1)微调时image encoder不要引入weight-decay

2)增加batch size时,transformer的训练开始变得不稳定,通过设小beta2有助于huan jie。

在这里插入图片描述

3.3 The influence of positive and negative pairs ratio

对于sigmoid来说,它的loss是以pair为粒度计算的,positive和negative非常不平衡。以batch size ∣ B ∣ = 16 k |\mathcal{B}| = 16k B=16k为例(有16k个图文对),只有 16 k 16k 16k个positive samples,但有 16 k ∗ 16 k − 16 k = 16 k ( 16 k − 1 ) 16k * 16k - 16k = 16k(16k-1) 16k16k16k=16k(16k1)个negative samples,其positive和negative的比率约为 1 : 16 k 1:16k 1:16k

因此,有必要深入探究positive和negative的不平衡对模型的影响。得益于sigmoid loss(式2)以pair为粒度的计算方式,我们可以很方便的人为控制正负样本的比例。作者尝试了4种方式调控positive和negative的比例

  • Random: 通过随机mask掉negative sample,来保证positive和negative的占比
  • Hard:通过mask掉loss较低的negative sample ,来保证positive和negative的占比
  • Hard, matched pair:通过mask掉loss较低的negative的sample,来保证positive和negative的占比。由于上述mask的操作,模型的“pair seen”少,此实验通过增加iteration来保证”pair seen”和原始一致。(相当于常用的resample方法)
  • Easy:通过mask掉loss较高的negative sample,来保证positive和negative的占比。

作者在SigLIT上用进行以上四种mask out机制的实验。 ∣ B ∣ = 16 k |\mathcal{B}| = 16k B=16k,迭代 I t e r = 900 M \mathrm{Iter}=900M Iter=900M

在这里插入图片描述

结果表明:

  • 不做matched pair的情况下,用3种mask方式均会造成精度下降。影响程度:easy>random>hard。
  • Hard sample mining + matched pair有助于进一步提升模型性能。
  • 当正负样本的imbalance减弱时,learnable bias和pair的logit都在上升,说明了预设的learnable bias起到了积极的作用。

总体来看,得益于learnable temperature和learnable bias,sigmoid loss的正负样本不均衡基本不会导致模型性能下降。

文中对这两个超参数的初始值进行了进一步实验,结果如下。(可见引入合适的prior knowledge对提升模型performance非常有效)

在这里插入图片描述

3.4 Label noise robustness

作者进一步评估数据噪声对模型鲁棒性的影响。通过以下五种方法“污染”训练噪声:

  1. Image:以概率 p p p将图文对的图片用均匀噪声替换;
  2. Text:以概率 p p p将图文对的文本token序列用随机采样的等长token序列替换;
  3. Batch alignment: 随机将batch中的 p % p\% p%的sample的图文pair进行shuffle;
  4. Image & text: 同时进行1.和2.
  5. Image, text & batch: 同时进行3和4

从结果可见,sigmoid loss在“污染”数据的performance更好。

在这里插入图片描述

4 小结

sigmoid-based contrastive learning从经典的softmax-based contrastive learning的“pick the right class”转化为“rate this pair”。这个转化实现了compute efficient和memory efficient,并在实验中证明,siglip在小batch下(低于32k)更具优势。

5 参考文献

[1] Learning Transferable Visual Models From Natural Language Supervision

[2] LiT: Zero-Shot Transfer With Locked-Image Text Tuning

[3] Scaling Language-Image Pre-training via Masking

[4] Masked Autoencoders Are Scalable Vision Learners

[5] CatLIP: CLIP-level Visual Recognition Accuracy with 2.7x Faster Pre-training on Web-scale Image-Text Data

[6] Data Filtering Networks

[7] Representation Learning with Contrastive Predictive Coding

[8] Combined Scaling for Zero-shot Transfer Learning

[9] Pali: A jointly-scaled multilingual languageimage model.

6 附录

6.1 附录一:softmax的溢出问题

  • 解决上溢出问题

Softmax ( x i ) = exp ⁡ ( x i ) ∑ j = 1 N exp ⁡ ( x j ) = exp ⁡ ( x i ) / exp ⁡ ( x m a x ) ∑ j = 1 N exp ⁡ ( x j ) / exp ⁡ ( x m a x ) = exp ⁡ ( x i − x m a x ) ∑ j = 1 N exp ⁡ ( x j − x m a x ) (3) \begin{aligned} \text{Softmax}(x_{i}) &= \frac{\exp(x_i) }{ \sum_{j=1}^{N} \exp(x_j)} \\ &= \frac{\exp(x_i) / \exp{(x_{max})}}{ \sum_{j=1}^{N} \exp(x_j) / \exp{(x_{max})} } \\ &= \frac{\exp(x_i - x_{max})}{ \sum_{j=1}^{N} \exp(x_j - x_{max})} \end{aligned} \tag{3} Softmax(xi)=j=1Nexp(xj)exp(xi)=j=1Nexp(xj)/exp(xmax)exp(xi)/exp(xmax)=j=1Nexp(xjxmax)exp(xixmax)(3)

  • x m a x x_{max} xmax很大时,分子可能出现 0 0 0,当和 c r o s s   e n t r o p y \mathrm{cross \, entropy} crossentropy联用时,会出现 l o g ( 0 ) log(0) log(0),此时应当进行如下变形。

    log ⁡ s o f t m a x ( x i ) = log ⁡ ( exp ⁡ ( x i − x m a x ) ∑ j = 1 N exp ⁡ ( x j − x m a x ) ) = log ⁡ exp ⁡ ( x i − x m a x ) − log ⁡ ∑ j = 1 N exp ⁡ ( x j − x m a x ) = ( x i − x m a x ) − log ⁡ ∑ j = 1 N exp ⁡ ( x j − x m a x ) ⏟ > 1 (4) \begin{aligned} \log \mathrm{softmax}(x_i) &= \log \Bigr( {\frac{\exp(x_i - x_{max})}{ \sum_{j=1}^{N} \exp(x_j - x_{max})}} \Bigr) \\ & = \log \exp(x_i - x_{max}) - \log { \sum_{j=1}^{N} \exp(x_j - x_{max}) } \\ & = (x_i - x_{max}) - \log { \underbrace{\sum_{j=1}^{N} \exp(x_j - x_{max}) }_{\gt 1} } \end{aligned} \tag{4} logsoftmax(xi)=log(j=1Nexp(xjxmax)exp(xixmax))=logexp(xixmax)logj=1Nexp(xjxmax)=(xixmax)log>1 j=1Nexp(xjxmax)(4)

6.2 附录2: sigmoid loss梯度分析

L = − 1 ∣ B ∣ ∑ i = 1 ∣ B ∣ ∑ j = 1 ∣ B ∣ log ⁡ 1 1 + e z i j ( − t x i ⋅ y j + b ) = − 1 ∣ B ∣ ∑ i = 1 ∣ B ∣ ∑ j = 1 ∣ B ∣ log ⁡ S i g m o i d ( − z i j ( − t x i ⋅ y j + b ) ) (5) \mathcal{L} = - \frac { 1 } { | \mathcal { B } | } \sum _ { i = 1 } ^ { | \mathcal { B } | } \sum _ { j = 1 } ^ { | \mathcal { B } | } \log \frac { 1 } { 1 + e ^ { z _ { i j } ( - t \mathbf { x } _ { i } \cdot \mathbf { y } _ { j } + b ) } } \\ = - \frac { 1 } { | \mathcal { B } | } \sum _ { i = 1 } ^ { | \mathcal { B } | } \sum _ { j = 1 } ^ { | \mathcal { B } | } \log \mathrm{Sigmoid}(- z _ { i j } ( - t \mathbf { x } _ { i } \cdot \mathbf { y } _ { j } + b )) \tag{5} L=B1i=1Bj=1Blog1+ezij(txiyj+b)1=B1i=1Bj=1BlogSigmoid(zij(txiyj+b))(5)

梯度

S i g m o i d ( x ) ′ = S i g m o i d ( x ) ( 1 − S i g m o i d ( x ) ) (6) \mathrm{Sigmoid}(x)^{\prime} = \mathrm{Sigmoid}(x) (1 - \mathrm{Sigmoid}(x)) \tag{6} Sigmoid(x)=Sigmoid(x)(1Sigmoid(x))(6)

∂ L ∂ x i = ∂ ( − 1 ∣ B ∣ ∑ i = 1 ∣ B ∣ ∑ j = 1 ∣ B ∣ log ⁡ S i g m o i d ( − z i j ( − t x i ⋅ y j + b ) ) ) ∂ x i = − 1 ∣ B ∣ ∑ j = 1 ∣ B ∣ ∂ ( log ⁡ S i g m o i d ( − z i j ( − t x i ⋅ y j + b ) ) ) ) ∂ x i = − 1 ∣ B ∣ ∑ j = 1 ∣ B ∣ 1 S i g m o i d ( − z i j ( − t x i ⋅ y j + b ) ) [ S i g m o i d ( − z i j ( − t x i ⋅ y j + b ) ) ( 1 − S i g m o i d ( − z i j ( − t x i ⋅ y j + b ) ) ) ] ∗ ( z i j t ) ⋅ y j = − z i j t ∣ B ∣ ∑ j = 1 ∣ B ∣ ( 1 − S i g m o i d ( − z i j ( − t x i ⋅ y j + b ) ) ) ⏟ c o e f ⋅ y j (7) \begin{align*} \frac{\partial{\mathcal{L}}}{\partial \mathbf {x_i}} &= \frac{\partial (- \frac { 1 } { | \mathcal { B } | } \sum _ { i = 1 } ^ { | \mathcal { B } | } \sum _ { j = 1 } ^ { | \mathcal { B } | } \log \mathrm{Sigmoid}(- z _ { i j } ( - t \mathbf { x } _ { i } \cdot \mathbf { y } _ { j } + b )))}{\partial \mathbf {x_i}} \\ &= - \frac { 1 } { | \mathcal { B } | } \sum _ { j = 1 } ^ { | \mathcal { B } | } \frac{\partial( \log \mathrm{Sigmoid}(- z _ { i j } ( - t \mathbf { x } _ { i } \cdot \mathbf { y } _ { j } + b ))) )}{\partial \mathbf {x_i}} \\ &= - \frac { 1 } { | \mathcal { B } | } \sum _ { j = 1 } ^ { | \mathcal { B } | } \frac{1}{\mathrm{Sigmoid}(- z _ { i j } ( - t \mathbf { x } _ { i } \cdot \mathbf { y } _ { j } + b ))}[\mathrm{Sigmoid}(- z _ { i j } ( - t \mathbf { x } _ { i } \cdot \mathbf { y } _ { j } + b )) (1 - \mathrm{Sigmoid}(- z _ { i j } ( - t \mathbf { x } _ { i } \cdot \mathbf { y } _ { j } + b )))]* (z_{ij}t)\cdot \mathbf { y } _ { j } \\ &= \underbrace{-\frac { z_{ij}t } { | \mathcal { B } | } \sum _ { j = 1 } ^ { | \mathcal { B } | } (1 - \mathrm{Sigmoid}(- z _ { i j } ( - t \mathbf { x } _ { i } \cdot \mathbf { y } _ { j } + b )))}_{\mathrm{coef }} \cdot \mathbf { y } _ { j } \end{align*} \tag{7} xiL=xi(B1i=1Bj=1BlogSigmoid(zij(txiyj+b)))=B1j=1Bxi(logSigmoid(zij(txiyj+b))))=B1j=1BSigmoid(zij(txiyj+b))1[Sigmoid(zij(txiyj+b))(1Sigmoid(zij(txiyj+b)))](zijt)yj=coef Bzijtj=1B(1Sigmoid(zij(txiyj+b)))yj(7)

当为正例 z i j = 1 z_{ij} = 1 zij=1

∂ L ∂ x i = − t ∣ B ∣ ∑ j = 1 ∣ B ∣ ( 1 − S i g m o i d ( t x i ⋅ y j − b ) ) ⋅ y j (8) \frac{\partial{\mathcal{L}}}{\partial \mathbf {x_i}} = - \frac { t } { | \mathcal { B } | } \sum _ { j = 1 } ^ { | \mathcal { B } | } (1 - \mathrm{Sigmoid}( t \mathbf { x } _ { i } \cdot \mathbf { y } _ { j } - b ))\cdot \mathbf { y } _ { j } \tag{8} xiL=Btj=1B(1Sigmoid(txiyjb))yj(8)

当为负例 z i j = − 1 z_{ij} = -1 zij=1

∂ L ∂ x i = t ∣ B ∣ ∑ j = 1 ∣ B ∣ ( 1 − S i g m o i d ( − t x i ⋅ y j + b ) ) ⋅ y j (9) \frac{\partial{\mathcal{L}}}{\partial \mathbf {x_i}} = \frac { t } { | \mathcal { B } | } \sum _ { j = 1 } ^ { | \mathcal { B } | } (1 - \mathrm{Sigmoid}( - t \mathbf { x } _ { i } \cdot \mathbf { y } _ { j } + b ))\cdot \mathbf { y } _ { j } \tag{9} xiL=Btj=1B(1Sigmoid(txiyj+b))yj(9)

通过预设 ( b , t ) = ( 0 , 1 ) (b, t)=(0,1) (b,t)=(01) ( − 10 , log ⁡ 10 ) (-10, \log10) (10log10)时不同logits下正负样本梯度的coefficient。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

普通人如何搭乘 AI 快车,开辟 10 大赚钱新赛道

亲爱的朋友们,准备好了吗?让我们一同踏上这趟激动人心的AI淘金之旅! 俗话说得好,“机不可失,时不再来”。如今,AI这列高速列车正呼啸而过,而我们每个人,都有机会成为车上的幸运儿。…

你们猜!吊打Oracle的国产数据库有哪几家?

今天闲暇之余看到某vx群聊得很火热,这个群聚集了国内不少数据库大咖,其中大家聊到国产数据库遥遥领先了。 最开始主要是一个朋友提到目前很多企业拍板的人并不懂数据库,甚至很多知名数据库都没听过。 然后大家就开始聊到国产数据库了&#xf…

yolov5源码分析001

文章目录 1.研究背景2.源码位置3.源码 1.研究背景 最近项目需要将前人做的YOLOv5改造项目继续改造,于是研究其代码,一步步剖析,一步步看一个个代码意义,旨在为后期攻克YOLOv10等系列做好准备. 2.源码位置 3.源码 # 下载指定文件,并保存在指定目录文件夹中,最后返回文件完整路…

大模型Agent开发框架对比:LangGraph/LlamaIndex/DIY

LLM代理(智能体)正处于一个发展阶段。随着多个新框架的出现和该领域的新投资,现代人工智能代理正在克服不稳定的起源,迅速取代 RAG 成为实施重点。那么,2024 年最终会成为自主人工智能系统接管我们写电子邮件、预订航班…

大模型辅助需求代码开发:如何提升核心编码任务生成效果

大模型在解释代码、回答代码问题、写单元测试等方面表现不错,但这些还只是辅助任务,真实项目需求开发中的设计及实现任务才是核心任务,而这方面尚未有成熟的方法和好的效果。一些 AI Developer 工具能够演示从零创建小应用的能力,…

三节课发布首张AIGC学习地图,全员学习AI真的必要吗?

上周,企培行业非常热闹,第20届中国企业培训与发展年会于成都正式举行。 据观察,本次企培年会有几个特点: ❶ 降本增效与AI赋能成为参会者最关注主题; ❷ 主办方取消了之前多年的学习平台专场,增加2个AI场…

谷歌收录查询工具,使用谷歌收录查询工具查询网站收录情况并优化内容的详细步骤

在数字营销和SEO领域,了解网站在谷歌搜索引擎中的收录情况至关重要。使用谷歌收录查询工具,可以有效地监测网站的索引状态,进而优化内容以提升网站排名和曝光度。以下是如何使用谷歌收录查询工具查询网站收录情况并优化内容的详细步骤&#x…

Defining Smart Contract Defects on Ethereum论文解读

背景 这一部分介绍了智能合约的概念和基础知识,以及 Solidity 编程语言。 智能合约:定义了智能合约作为一种运行在区块链上的程序,它能够在无需第三方干预的情况下自动执行合同条款。智能合约的不可变性:强调了智能合约一旦部署…

element-plus中日历组件设置起始为周一

问题描述 element-plus中的日历组件默认是周日到周六,因业务需求,需要实现从周一到周日的顺序。 解决方式 引入dayjs及本地语言包,使用本地时区即可。 import dayjs from dayjs import dayjs/locale/zh-cn ... // 这一句是为了让日历使用本地…

Invalid Teleport target on mount: null (object)

Failed to locate Teleport target with selector “.demon”. Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree main.…

银河麒麟V10下如何将TXT文件转为PDF?

银河麒麟V10下如何将TXT文件转为PDF? 1. 安装软件2. TXT转PS3. PS转PDF 💖The Begin💖点点关注,收藏不迷路💖 在银河麒麟高级服务器操作系统V10中,将TXT文件转换为PDF文件可以通过简单的几步完成。 1. 安装…

Linux oracle数据库静默安装

系统:Centos7 一、安装准备 1.1 更换依赖源 yum源进行切换(这里采用的阿里云的yum源)(切换之前建议先备份 /etc/yum.repos.d 中的文件) wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/rep…

网络工程师指南:防火墙配置与管理命令大全,零基础入门到精通,收藏这一篇就够了

本指南详细介绍了防火墙的配置与管理命令,涵盖了防火墙的工作原理、常见配置命令、安全策略与访问控制、日志管理与故障排查,并通过实战案例展示了如何有效防御网络攻击。通过学习本指南,网络工程师能够系统掌握防火墙的配置与管理技能&#…

收银系统源码-ERP进销存解决方案

收银系统目前已经成为门店日常经营的必备软件工具,功能一般需涵盖线下门店收银,ERP进销存、线上商城等。一套好的ERP进销存模块也能很大程度帮助门店经营管理门店。 ERP进销存功能涵盖了商品的采购、销售、调拨、盘点、库存管理、资金管理等全链路管理&…

【周末推荐】替换SwitchyOmega的Chrome浏览器插件

SwitchyOmega插件在我们这个圈子里应该无人不知无人不晓了吧,最近有很多朋友反馈自己的SwitchyOmega不工作了,今天我们将聊聊为什么SwitchyOmega不工作了,并推荐2款实用的Chrome浏览器插件解决这个问题。 为什么要替换SwitchyOmega&#xff…

这种膜为啥能随温度变透明?怎么制备的?有啥特点?

大家好,今天我们来了解一项关于纳米纤维膜的研究——《Diphylleia Grayi-Inspired Intelligent Temperature-Responsive Transparent Nanofiber Membranes》《Nano-Micro Letters》。在现代科技的发展中,透明材料的需求日益增长,传统材料已无…

VBA技术资料MF206:右键录入指定的数据及图标

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…

卡通角色检测系统源码分享

卡通角色检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

旭升集团携手纷享销客,构建全方位客户关系管理平台

宁波旭升集团股份有限公司(以下简称“旭升集团”)自2003年成立,总部位于中国宁波,集团设有压铸、锻造、挤压、集成四大事业部,在亚洲、欧洲、美洲等地均设立研发中心及制造基地,产品主要覆盖新能源汽车的电…

Cisco ASA 9.22.1 发布下载,新增功能概览

Cisco ASA 9.22.1 - 思科自适应安全设备 (ASA) 软件 Cisco Adaptive Security Appliance (ASA) 请访问原文链接:https://sysin.org/blog/cisco-asa/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 新增功能 重要…