Disentangled Face Attribute Editing via Instance-Aware Latent Space Search翻译

news2024/11/19 8:46:27

论文地址

代码地址

摘要

      最近的研究表明,生成对抗网络(GAN)的潜空间中存在一组丰富的语义方向,这使得各种面部属性编辑应用成为可能。然而,现有的方法可能会遇到属性变化不好的问题,从而导致在更改所需属性时对其他属性进行不必要的更改。现有方法使用的语义方向处于属性层面,难以对复杂的属性相关性进行建模,特别是在GAN的训练集中存在属性分布偏差这种情况。在本文中,我们提出了一种新的框架(IALS),该框架执行实例感知潜空间搜索,以找到解纠缠属性编辑的语义方向。通过监督一组属性分类器在输入图像上的评估来注入实例信息。我们进一步提出了一个解纠缠变换(DT)度量来量化属性变换和解纠缠效率,并基于它找到属性层面和实例特定方向之间的最优控制因子。基于GAN生成的图像和现实世界图像上的实验结果共同表明,我们的方法在很大程度上优于目前最好的方法。

1、引言

      人脸属性编辑的任务是将给定的人脸图像修改为给定的属性,如年龄、性别、表情和眼镜。成功的编辑不仅应该输出具有准确目标属性的高质量结果,而且还应该很好地保存具有互补属性的所有其他图像内容。近年来,人脸属性编辑备受关注,[Shen和Liu,2017;Choi等人,2018;Zhang等人,2018年;Bahng等人,2020年;Awiszus等人,2019年;Gu等人,2019]提出了许多算法。尽管这些方法显示了有希望的结果,但由于输出维度高,需要精确地解开与不同面部属性相对应的变化因素,因此这项任务仍然具有很大的挑战性。
在这里插入图片描述
图1  我们的目标是改变给定面部的主属性(如年龄和性别),同时保留其他条件属性(如眼镜和表情)。尽管Interface GAN方法中主属性和条件属性的潜空间方向已经正交化,但改变主属性仍然会导致不必要的条件属性改变。我们的IALS方法可以产生令人满意的解纠缠编辑结果。
      人脸图像合成最近通过生成对抗网络(GAN)取得了巨大成功[Good fellow等人,2014年]。最先进的GAN模型[Carras等人,2019;Karras等人,2020]可以从已学习到的潜空间生成高保真面部图像。这激励了这几项工作[Shen等人,2020;Voynov和Babenko,2020;Shen和Zhou,2020;Hark¨onen等人,2020]通过重用GAN模型学习的知识来编辑面部属性。具体地,对于每个属性,它们在GAN潜空间中搜索对应的方向,使得沿着该方向移动潜码可以使生成的图像中的该属性按照期望的改变。尽管通过这些方法可以有效地改变目标属性,但消除混乱的编辑仍然存在问题。如图1所示,尽管通过投影使年龄的潜空间方向与眼镜正交,但当年龄从年轻变为老年时,眼镜可能会出现[Shen等人,2020]。这个问题至少有两个可能的原因:i)GAN训练集的分布偏差(例如,在FFHQ中老年人倾向于戴眼镜[Karras等人,2019]),ii)属性层的方向无法处理复杂的属性分布,并且对于解属性变化纠缠无效。
      在本文中,我们提出了一种新的框架来搜索GAN潜空间中的语义方向,用于解纠缠的人脸属性编辑。我们没有天真地使用固定的属性级方向,而是选择动态搜索实例感知方向,其中实例引用要编辑的输入图像。直觉的背后是,通过利用实例信息,可以显式且有效地保留实例的互补属性,从而得到分离的编辑结果。为了呈现实例感知的方向,我们考虑通过在输入图像上反向传播CNN分类器的现成属性的梯度而获得特定的实例方向,并引入控制因子来平衡属性层面和特定实例的方向分量。我们提出了一个离散变换(DT)度量来定量评估编辑结果,并选择导致最高DT度量的控制因子。
      我们在基于GAN生成的图像和真实图像上测试了我们的方法,后者通过GAN反演[Abdal等人,2019]和重新生成实现。实验表明,我们的方法可以获得高质量的解纠缠人脸编辑结果,在基于GAN生成的图像和真实世界的图像上都大幅优于目前最好的方法。总之,我们的贡献包括:

  • 我们提出了一种新的面部属性编辑框架,该框架在GAN潜空间中搜索实例感知语义方向,该框架明显促进了属性变化的解纠缠;
  • 我们提出了一个离散变换(DT)度量来定量评估编辑效率,并通过利用该度量来优化我们的算法;
  • 我们在基于GAN生成的图像和真实图像上都获得了高质量的结果,并显著优于现有方法。

2、相关工作

      面部属性编辑旨在操纵感兴趣的面部属性,同时保留其余属性,以前的方法通常利用条件GAN模型[Mirza和Osindero,2014;Odena等人,2017]。这些方法通常手动设计损失函数[Shen和Liu,2017;Bahng等人,2020;Zhu等人,2017]或网络架构[Coi等人,2018;Zhang等人,2018年;Liu等人,2019年;Lin等人,2019;He等人,2019],以提高输出质量。最近,还引入了3D先验(例如3DMM[Blanz和Vetter,1999])来编码合成图像[Deng等人,2020;Tewari等人,2020]。这些方法可以生成高质量的结果,但可控制标签属性的多样性受到3D先验的限制(例如,它不能很好地建模和编辑性别信息)。其他最近的方法利用高质量的合成人脸图像数据集进行解纠缠表征训练[Kowalski等人,2020]。
      另一组工作[Shen等人,2020;Voynov和Babenko,2020;Shen和Zhou,2020;Plumerault等人,2020年;Hark¨onen等人,2020,Goetschallckx等人,2019]提出通过在训练好的无条件GAN模型的潜空间中沿特定语义方向移动潜码来编辑面部属性【Karras等人,2018;Karras等人2019;Karras等,2020;Goodfellow等人,2014】。Shen等人[Shen等人,2020]学习SVM边界以将潜空间分离为相反的语义标签,并输出SVM边界的法向量作为语义方向。Hark¨onen¨等人[Hark¨one¨等人,2020]对一组潜码进行采样,并对其执行PCA,以找到主要语义方向。然而,这些方法搜索在属性层面上的语义方向,无法处理复杂的属性相关性。我们的方法动态地搜索实例感知的语义方向,这对于属性变化的解纠缠是有效的。它可以编辑各种面部属性并获得高质量的结果。

3、方法

      本节介绍了本文提出的新颖的人脸属性编辑框架。我们首先介绍了使用GAN的面部属性编辑,并简要回顾了以前的使用属性层面寻找潜在方向的方法,然后我们提出了实例感知方向搜索算法。

3.1、属性编辑的语义方向

      给定来自目前最好的GAN模型的预训练生成器G,例如StyleGAN[Karras等人,2019],其将潜向量z映射到面部图像,可以通过在潜空间中沿特定方向移动z来实现属性编辑。对于真实图像,可以先将它们嵌入到潜空间中以获得潜向量z,然后对其进行修改。关键是找到适合属性编辑的语义方向。
      让A表示面部属性的集合,例如年龄、性别、表情和眼镜。对于每个属性 X ∈ A X∈A XA,现有方法寻求与X对应的方向 d X d_X dX。例如,InterfaceGAN方法[Shen等人,2020]首先通过随机采样z生成大量图像G(z),然后使用一组CNN二元分类器H(·)标记这些图像的属性。最后,它使用这些样本训练SVM, 分离GAN潜空间中的每个属性标签,并输出SVM边界的法向量作为每个属性的语义方向 d X d_X dX。为了实现解纠缠编辑,它建议编辑主属性A,同时通过方向正交化保留一个条件属性B(或多个): d A ∣ B = d A − < d A , d B > d B , ( 1 ) d_{A|B} = d_A- < d_A, d_B > d_B, \quad\quad\quad\quad\quad(1) dAB=dA<dA,dB>dB,(1)其中<·,·>表示内积。与[Shen等人,2020]中所讨论的类似,可以获得具有多个条件属性的方向。
      可以看出,这样获得的方向是属性层面的。它们对于每个属性都是固定的,并且是实例不可知的。相反,我们建议将实例信息合并到方向搜索中,以获得更好的编辑性能。

3.2、实例感知语义方向搜索

      我们的实例感知语义方向由两部分组成:特定实例的方向和属性层面的方向。接下来,我们首先介绍这两个组件,然后描述如何组合它们。

特定实例的语义方向

      生成器G将潜码z映射到图像,属性分类器H将图像 x ∈ X x∈\mathcal X xX映射到属性标签。我们可以通过合成H和G来桥接GAN潜空间和属性空间,即H(G(·))。对于属性X,我们可以搜索实例z的特定实例的语义方向,用 d X ( z ) d_X(z) dX(z)表示,通过最小化下面的损失:
a r g m i n d X ( z ) L ( H ( G ( z + d X ( z ) ) ) , y ) , ( 2 ) \underset{d_X(z)}{arg min} L(H(G(z + d_X(z))), y), \quad\quad\quad\quad\quad(2) dX(z)argminL(H(G(z+dX(z))),y),(2)其中y是目标属性标签,L(·,·)是二元交叉熵函数的分类损失 L ( x , y ) = − y l o g x − ( 1 − y ) l o g ( 1 − x ) . ( 3 ) L(x, y) = - y log x - (1 - y) log(1 - x). \quad\quad\quad\quad\quad(3) L(x,y)=ylogx(1y)log(1x).(3)我们简单地使用梯度下降来搜索等式(2)中的 d X ( z ) d_X(z) dX(z),其中 d X ( z ) d_X(z) dX(z)通过使用增量方向更新方案来更新。为了简化演示,有关增量更新的更多细节将推迟到后面的章节。我们进一步规范 d X ( z ) d_X(z) dX(z)作为z的最终实例特定语义方向: d X ( z ) = − ∇ z L ( H ( G ( z ) ) , y ) ∣ ∣ ∇ z L ( H ( G ( z ) ) , y ) ∣ ∣ 2 = ( 2 y − 1 ) ∇ z H ( G ( z ) ) ∣ ∣ ∇ z H ( G ( z ) ) ∣ ∣ 2 . ( 4 ) d_X(z) =\frac{−∇_zL(H(G(z)), y)}{|| ∇_zL(H(G(z)), y)||_2} = (2y -1)\frac{ ∇_zH(G(z))}{||∇_zH(G(z))||_2} . \quad\quad\quad\quad\quad(4) dX(z)=∣∣zL(H(G(z)),y)2zL(H(G(z)),y)=(2y1)∣∣zH(G(z))2zH(G(z)).(4)等式(4)表明,分别当y=0和1时,可以获得相反的方向。

属性层语义方向

      属性层方向聚集所有训练实例的信息,因此具有更高的抗噪声能力。与以前的方法类似,我们还利用属性层方向进行属性编辑,并使用InterfaceGAN计算的方向作为默认选项。
      这里我们提出了另一种计算属性层方向的方法。直观上是通过采样和平均来弥补本地实例层和全局属性层信息之间的差距。具体来说,我们可以首先对一组GAN潜码z进行局部采样,并据此生成人脸图像。然后,我们根据等式(4)计算每个样本和每个属性的特定实例的方向。最后,对于每个属性,我们可以将所有样本的实例特定方向平均为属性层方向 d X d_X dX。我们发现,与InterfaceGAN计算的与之对应的结果相比,这些 d X d_X dX导致了类似的属性编辑质量,但这种方法更简单、更容易实现,并且不需要训练SVM。

实例感知语义方向

      我们的实例感知语义方向是通过将特定实例的信息注入到方向搜索过程来构建的。具体而言,我们将其表述为属性层面和实例特定方向的组合: d ^ X ( z ) = λ d X + ( 1 − λ ) d X ( z ) , ( 5 ) \hat d_X(z) = λd_X + (1- λ)d_X(z), \quad\quad\quad\quad\quad(5) d^X(z)=λdX+(1λ)dX(z),(5)其中λ∈[0,1]是平衡这两个分量的控制因子。对于条件属性编辑,我们用实例感知语义方向重写等式(1) d ^ A ∣ B ( z ) = d ^ A ( z ) ) < d ^ A ( z ) , d ^ B ( z ) > d ^ B ( z ) , ( 6 ) \hat d_{A|B}(z) = \hat d_A(z)) < \hat d_A(z), \hat d_B(z) > \hat d_B(z), \quad\quad\quad\quad\quad(6) d^AB(z)=d^A(z))<d^A(z),d^B(z)>d^B(z),(6)其中A和B分别是主属性和条件属性。我们为这两个属性分别设置了两个不同的 λ 1 和 λ 2 λ_1和λ_2 λ1λ2值,考虑到在编辑或分离面部属性时可能需要不同数量的实例信息。注意,当 λ 1 = λ 2 = 1 λ_1=λ_2=1 λ1=λ2=1时,方程(6)退化为方程(1)。在实践中,我们首先解决 ( λ 1 , λ 2 ) (λ_1,λ_2) (λ1λ2)对,该对可以在样本集上产生最佳结果,然后我们将它们固定住用于面部属性编辑任务。接下来,我们讨论如何求解 ( λ 1 , λ 2 ) (λ_1,λ_2) (λ1λ2)对。
      如前所述,良好的属性编辑应该 i)将主属性A准确地转换为目标标签,ii)尽可能保留条件属性B。根据这些标准,我们建议使用离散变换(DT)曲线来评估在一组样本上一对主属性和条件属性的编辑结果。在DT曲线中,x轴表示转换精度p,即主属性在编辑结果中被正确的转换为目标标签的样本比率。y轴表示解纠缠精度q,即编辑图像上的条件属性与其原始图像一致的样本比率。
在这里插入图片描述
图3  以性别为主属性,以表情做为条件属性的DT曲线示例。
      具体来说,我们在GAN潜空间中随机采样一组潜码,并获得G生成的相应图像。然后,我们通过将潜码z更改为 z + k ⋅ n ⋅ d ^ A ∣ B ( z ) z+k·n·\hat d_{A|B}(z) z+knd^AB(z)来编辑这些图像,其中 k ∈ R 是步长, n ∈ N k∈\Bbb R是步长,n∈ \Bbb N kR是步长,nN是步数。通过CNN分类器评估属性的变换和解纠缠精度 ( p n , q n ) (p_n,q_n) (pnqn)。通过连续改变n并评估 ( p n , q n ) (p_n,q_n) (pnqn),我们获得了如图3所示的DT曲线(实际上,我们方法的DT曲线是通过改变增量更新步数获得的;见下一节)。
      通过生成DT曲线,我们可以进一步计算DT的A U C(曲线下面积),并通过以下方式对所有可能的主条件属性选择 ( λ 1 , λ 2 ) (λ_1,λ_2) (λ1λ2)对最大化平均AUC: a r g m a x λ 1 , λ 2 1 N ∑ A , B ∈ A ∫ 0 1 q ( A , B , λ 1 , λ 2 , p ) d p , ( 7 ) \underset{λ1,λ2 }{arg max}\frac{1}{N}\sum_{A,B∈A}\int^1_0 q(A, B, λ_1, λ_2, p)d_p, \quad\quad\quad\quad\quad(7) λ1,λ2argmaxN1A,BA01q(A,B,λ1,λ2,p)dp,(7)其中N是归一化因子。我们使用求积分的方法对方程(7)中的连续积分进行数值估计。
在这里插入图片描述
图2  我们的面部属性编辑框架概述。左侧部分显示了增量更新方案中的实例感知语义方向搜索方法。这里, d 和 d ^ ( z ) d和\hat d(z) dd^(z)分别表示属性层面和实例感知语义方向。右侧部分说明了特定于实例的语义方向搜索过程。

3.3、增量方向更新

      这里,我们为我们的编辑方法提供了一个增量实例感知方向搜索方案。我们在搜索语义方向和更新潜码(以及输出图像)之间进行交替。给定当前潜码z和生成的图像G(z),我们搜索新的方向 d ^ ( z ) \hat d(z) d^(z)并将潜码更新为 z ′ = z + k ⋅ d ^ ( z ) z^\prime=z+k·\hat d(z) z=z+kd^(z)。整个过程如图2所示。

4实验

      在本节中,我们将评估我们的IALS方法,并将其与现有最好技术进行比较。由于篇幅限制,更多的实验结果和讨论放到补充材料中。

4.1、设置和实施细节

      我们在实验中考虑了五个面部属性,即表情、年龄、性别、眼镜和姿势,如[Shen等人,2020]所示。我们将在实验中关注前四个属性,因为我们发现姿势与GAN潜空间中的其他属性能很好地解纠缠(类似的观察结果见于[Shen等人,2020;Deng等人,2020])。我们在FFHQ数据集上训练,在StyleGAN生成器的W空间上测试了我们的框架[Karras等人,2018]和CelebA HQ[Kar ras等人,2019]。属性分类器H(·)是用在CelebA数据集[Liu等人,2015]上训练的ResNet-18[He等人,2016]网络。DT度量另一组用ResNet-50结构的属性分类器计算。在以下实验中,我们根据经验将我们方法中的增量更新步长设置为0.1。

4.2、消融实验

      在这一部分中,我们研究了方向控制因子和增量更新方案在IALS框架中的作用。

控制因子对

      为了研究属性级别和实例特定方向的不同组合权重的行为,并求解控制因子 λ 1 和 λ 2 λ_1和λ_2 λ1λ2,我们使用步长为0.25在[0,1]中均匀采样的 λ 1 和 λ 2 λ_1和λ_2 λ1λ2来评估DT度量(因此总共25个( λ 1 , λ 2 λ_1, λ_2 λ1,λ2)对)。对于每个( λ 1 , λ 2 λ_1, λ_2 λ1,λ2)对,我们设置 n m a x = 20 n_{max}=20 nmax=20(即在DT曲线上采样20个点)和k=0.1,并采用梯形求积公式,公式(7)中定义的来近似AUC的积分
在这里插入图片描述
表1  不同(λ1,λ2)选择的所有DT曲线的平均AUC(曲线下面积)。
      表1显示了在不同主条件属性组合的所有DT曲线上的平均AUC。我们有以下三个观察结果:i)单独使用属性层面的方向(即,λ1=λ2=1)显然是非最优的;ii)属性层面的信息对编辑主属性更重要(λ1≥0.75);以及iii)在条件属性方向搜索中添加实例信息显著提高了编辑结果。(λ2≤0.75)。

讨论

      表1显示了λ范围(λ1≥0.75,λ2≤0.75)的性能平台,表明我们的方法对合理范围内的参数选择不敏感。它还表明,为条件属性添加适度的实例层面的信息将明显优于单独使用属性层面的信息(λ2=1),这证明了我们框架的有效性。接下来,我们只使用(λ1,λ2)=(0.75,0)作为我们的编辑方法。
在这里插入图片描述
图4  增量更新方案的消融实验

增量更新

      我们进一步研究了增量更新方案对实例感知方向搜索的有效性。图4显示了在保持原始面部图像的眼镜属性的同时,将年龄从年轻变为老年时的典型结果。可以看出,如果我们不使用增量更新(即,我们继续使用在第一次迭代中获得的实例感知方向),那么结果明显较差。

4.3、与目前最好的进行比较

      我们将我们的IALS方法与最近提出的几种最先进的面部属性编辑方法进行了比较,包括In terfaceGAN[Shen等人,2020]、GANSpace[Hak¨onen等人,2022]和STGAN[Liu等人,2019]。
      InterfaceGAN和GANSpace都是基于GAN潜空间搜索的方法。如前一节所述,InterfaceGAN是一种有监督的语义方向搜索方法,而GANSpace是一种无监督的语义方向搜索方法,它对采样的潜码执行PCA,以找到潜空间中的主要语义方向。我们将GANSpace发现的方向按照[沈和周,2020]赋予其可解释的含义。STGAN方法基于使用条件GAN的图像生成。它使用一个编码器-解码器架构,带有一个为属性编辑而精心设计的选择传输单元。对于这些方法,我们使用作者发布的代码或预训练模型进行评估和比较。

定性结果

      我们分别在合成图像和真实图像上与竞争对手进行了比较。对于基于语义方向的方法,我们采用控制变量法[Shen等人,2020],更改其中一个主属性,保留一个条件属性,并将源图像直接发送给基于条件GAN的方法。
在这里插入图片描述
图5  在GAN生成的图像上,我们的方法与其他竞争对手的面部属性编辑结果的定性比较。通过我们的方法,不仅成功地改变了主属性,而且条件属性也比STGAN、GANSpace和InterfaceGAN保存得更好。
      GAN生成图像的一些典型定性结果如图5所示。可以看出,随着属性变化程度的增加,STGAN生成模糊图像,而基于语义方向的方法输出高保真结果。此外,当编辑主属性时,我们的方法可以很好地保留原始图像的条件属性,而其他两个基于语义方向的竞争对手的却不行。InterfaceGAN和GANSpace在面部编辑时仅使用属性层面的方向,而忽略实例信息。相比之下,我们的方法结合了特定实例的信息和属性层面的信息,从而得到更好的解纠缠的面部编辑结果。结果还表明,我们的方法在GAN生成的图像上优于目前最好的方法。
在这里插入图片描述
图6  在FFHQ的真实图像上,我们的方法与其他竞争对手的面部属性编辑结果的定性比较。我们的方法产生了比STGAN更高保真的结果,并且拥有比GANSpace和InterfaceGAN更好的属性变化解纠缠。
      图6显示了两个典型示例,以说明不同方法对真实图像的属性编辑效果,其中目标是编辑年龄,同时保留眼镜属性。我们发现STGAN再次输出模糊的结果。另一方面,条件属性(即眼镜)被GANSpace和InterfaceGAN改变了。相比之下,我们的方法在图像质量和属性变化解纠缠方面都获得了优异的结果。它产生了高保真的结果,并具有令人满意的属性修改和保存。

定量结果

      为了进一步评估IALS方法的性能,我们进行了一项用户研究。我们招募了100人,向他们展示了720组数据,每组由5幅图像组成即:原始面部图像和我们方法的面部编辑结果,以及其他3位竞争对手的面部编辑结果。每个人被随机分配了18组数据,并被要求根据三个标准选择他们满意的所有结果:结果看起来很自然,主属性被很好地改变了,条件属性被很好的保存了。注意,我们没有要求他们选择最佳结果,因为最佳面部编辑结果通常不是唯一的。
在这里插入图片描述
图7  我们的方法与其他竞争对手在不同的主条件属性对(exp.和eye.分别表示表情和眼镜)上的人类满意率比较
      图7中的结果表明,我们的方法获得了最高的平均满意率(我们的方法为69.66%,InterfaceGAN为62.06%,GANSpace为35.44%,STGAN为6.48%)。它在一些具有挑战性的属性对上显著优于其他方法,例如性别作为主属性,表情作为条件属性(我们的76.44%,而InterfaceGAN的51.92%)。

5、结论

      我们提出了一种新的IALS框架,通过GAN潜空间搜索实现解纠缠的面部属性编辑。关键要素是属性层面和实例特定方向的集成,这将导致精确的目标属性控制,更重要的是,高度解纠缠的属性编辑。为了更好地集成属性层面和实例特定方向,我们引入了一个离散变换(DT)度量来查找合适的控制因子。实验共同表明,我们的方法获得了比以前方法更好的结果。

注:解纠缠也可翻译为"分离"或者"互不干扰"

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

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

相关文章

JS中数组对象使用

文章目录一、创建数组对象二、数组翻转1.检测数组2.翻转数组&#xff1a;三、添加数组元素1.push方法2.unshift方法四、删除数组元素1.pop方法2.shift方法&#x1f918;案例1五、数组排序六、数组索引方法1.indexof(数组元素)2.lastIndexOf方法&#x1f91f;案例2七、数组转化为…

数字验证学习笔记——SystemVerilog芯片验证16 ——约束控制块随机函数

一、约束块控制 一个类可以包含多个约束块。可以把不同约束块用于不同测试。一般情况下&#xff0c;各个约束块之间的约束内容是互相协调不违背的&#xff0c;因此通过随机函数产生随机数时可以找到合适的解 如果子类继承父类&#xff0c;也继承了父类的约束&#xff0c;这个时…

基于蒙特卡诺的电动汽车充电负荷曲线研究(充电开始时间,充电电量,充电功率)(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【C++】 STL-vector模拟实现

文章目录vector源码的内容:成员变量默认构造函数构造函数1-无参构造构造函数2 -使用n个相同的值构造构造函数3-使用迭代器区间构造拷贝构造函数**传统写法**现代写法赋值重载函数opeartor传统写法现代写法析构函数迭代器begin & end任意类型vector容器迭代器通用遍历方式:容…

paddleOCRv3之四: rec识别部分用 tensorRT(C++)部署

文章目录1. 简介&#xff1a;速度测试2. paddle 模型转onnx3. onnx转为tensorRT的engine模型4. tensorRT在vs2017中的配置5. 源码1. 简介&#xff1a; tensorRT是nvdia GPU模型部署的一个框架&#xff0c;似乎只是部分开源&#xff0c;github地址.大多数时候用这个框架去部署模…

十九、Docker容器监控之CAdvisor+InfluxDB+Granfana

1、概述 Docker自带查询容器状态的命令&#xff1a;docker stats&#xff0c;可以看到容器的ID\名称、占用CPU、内存等信息 但是我们不能时时刻刻的盯着这个命令&#xff0c;并且这个都是实时数据不能留痕&#xff0c;如果这个时候某一个容器挂了&#xff0c;我们想查看下当时…

webpack性能优化

splitChunks webpack splitChunks minSize: 只有到目标文件超过这个minSize时才会分包。cacheGroups: 可以对某个第三方包进行单独分离出来 例如&#xff1a; splitChunks: {minSize: 300 * 1024&#xff0c;chunks: all,name: aaa,cacheGroups: {jquery: {name: jquery,test…

SCADA平台在风电场测量的应用,实现风电场的高效管理

一、应用背景 随着煤碳、石油等能源的逐渐枯竭&#xff0c;人类越来越重视可再生能源的利用。风能作为一种清洁的可再生能源日益受到世界各国的重视。中国风能储量大&#xff0c;分布面广&#xff0c;仅陆地上的风能储量就约2.53亿千瓦。我国的风电发展起步较晚&#xff0c;但…

大数据教学实训沙盘介绍

沙盘的作用主要有3个&#xff1a; 1、采集真实数据&#xff0c;解决教学中缺少真实数据的困扰&#xff1b; 2、形成从数据采集、预处理、挖掘建模、模型部署的业务闭环&#xff0c;可以把构建模型发布到沙盘系统上&#xff0c;根据模型产生真实的反馈不断的修正模型精度&#x…

DoIP协议从入门到精通系列——车辆声明

上篇文章对DoIP中物理连接做了说明和描述,介绍了以太网应用到车载网络中重要的两个组织: IEEE;OPEN联盟。本文主要对物理连接后,车辆进行自属信息声明过程做一个完整描述。 一、基础信息 DoIP协议标准由一个或多个DoIP实体实施,具体取决于车辆的网络架构。如下图是车辆网…

SuperMap iServer在不同系统中设置开机自启动--Windows篇

目录前言1.删除已有的 SuperMap iServer 系统服务2.注册 SuperMap iServer 系统服务3.设置 SuperMap iServer 系统服务开机自启动实例作者&#xff1a;kxj 前言 在成功部署SuperMap iServer之后&#xff0c;每次重启电脑都需要手动去启动iServer&#xff0c;如何能让iServer在…

HTML5 Web Worker(多线程处理)

文章目录HTML5 Web Worker(多线程处理)概述简单使用处理复杂数据HTML5 Web Worker(多线程处理) 概述 JavaScript的执行环境是单线程的&#xff0c;也就是一次只能执行一个任务。如果遇到多个任务时&#xff0c;只能排队依次执行。 在HTML5中&#xff0c;可以使用Web Worker创…

小程序集成Three.js,使用npm安装gsap动画库

0.视频演示 three.js集成gsap创建物体动画gsap作为简单易用的补间动画库&#xff0c;获得开发者一致好评。 在小程序中&#xff0c;我们集成了Three.js第三方库&#xff0c;可以创建和加载模型及场景&#xff0c;但是做动画还是需要第三方库的支持。 下面详细说明如何在小程序…

Java SPI机制详解

一、什么是SPI SPI全称Service Provider Interface&#xff0c;是Java提供的一种服务发现机制。实现服务接口和服务实现的解耦。 Java SPI 实际上是“基于接口的编程&#xff0b;策略模式&#xff0b;配置文件”组合实现的动态加载机制&#xff0c;实现不修改任何代码的情况下…

不错的一个麦肯锡信任公式

1&#xff09;可信度&#xff1a;这人是不是专家。 你是否让他人可以相信你这个人。这取决于你解决问题的能力、经验、专业知识、资源等等&#xff1b;这个人的专业能力是否真有别人说的那么出色&#xff0c;是否能够胜任这份工作呢&#xff1f;过往的履历中是否做过足以让我值…

函数指针到底需不需要解引用?类成员函数呢?

1、 普通函数指针 C函数指针有两点比较令人疑惑的做法&#xff1a; 函数名作为实参时&#xff0c;到底要不要取地址&#xff1f;通过函数指针调用函数时&#xff0c;到底要不要解引用&#xff1f; int add(int a, int b) {cout << "common function: " <…

ubuntu18安装、测试YOLOV3记录

官方教程&#xff1a; YOLO: Real-Time Object Detection 一、使用预训练模型进行检测 1、安装Darknet: git clone https://github.com/pjreddie/darknet cd darknet make 2、下载预训练权重https://pjreddie.com/media/files/yolov3.weights&#xff08;打开链接或wget&…

VSCode无密码连接远程服务器,并能debug python代码

1.官网下载VScode 官网 2.打开VScode&#xff0c;在扩展中搜索下载远程连接插件Remote-SSH 下载完毕会在侧边栏产生“远程资源管理器”图标①&#xff0c;打开远程资源管理器&#xff0c;点击右上角设置进入配置界面&#xff0c;并按照②添加远程服务器账号&#xff0c;输入…

Charles -证书过期失效处理方法

当出现环境配置正常但却无法抓包的时候&#xff0c;可能是因为证书失效了&#xff0c;这种情况移除旧证书&#xff0c;安装新的证书即可。 一、判断是否证书过期 iOS手机&#xff1a; 进入&#xff1a;设置 > 通用 > VPN与设备管理 > Charles Proxy CA... > 更多…