Self-supervised learning of a facial attribute embedding from video

news2024/11/25 0:28:09

Self-supervised learning of a facial attribute embedding from video

译题:视频中人脸属性嵌入的自监督学习

论文题目Self-supervised learning of a facial attribute embedding from video
译题视频中人脸属性嵌入的自监督学习
时间2018年
开源代码地址https://github.com/oawiles/FAb-Net

摘要:我们提出了一个自我监督的框架,通过简单地观看人脸随着时间的推移说话、大笑和移动的视频来学习面部属性。为了执行这项任务,我们引入了一个网络,面部属性网( FAb-Net ),它训练将来自同一视频面部轨迹的多个帧嵌入到一个公共的低维空间中。通过这种方法,我们做出了三个贡献:首先,我们表明网络可以通过预测每个帧的置信度/注意力掩码来利用来自多个源帧(source frame)的信息;其次,我们证明了使用课程学习制度(curriculum learning regime)可以提高学习嵌入;最后,我们证明了该网络学习了一种有意义的人脸嵌入,该嵌入对头部姿势、面部特征和面部表情(即面部属性)的信息进行编码,而无需使用任何标记数据进行监督。在这些任务上,我们与最先进的自我监督方法相当或优于最先进的自监督方法,并接近监督方法的性能。

1 引言

婴儿和儿童对与他们互动的人的面部表情有高度的感知能力[14,18]。在与人类用户交互时,理解和响应人们情绪状态变化的能力对于计算机视觉系统和情感系统同样重要。因此,能够预测头部姿势和表情是至关重要的。
最近,利用深度学习在情感识别和面部特征检测等各种任务上取得了最先进的成果。尽管取得了这些进步,但监督方法需要大量的标记数据,这些数据可能很昂贵,或者在现实的、不受约束的环境中很难获得,或者需要将数据分配给定义不明确的类别。例如,用三个人类注释器对情绪进行分类只能得到46%的一致性[2],而给野外姿势贴标签是出了名的困难。此外,独立执行每项任务并不能利用这样一个事实,即检测特征需要了解姿势和面部特征,而这些特征又与表情相对应。

因此,我们考虑以下问题:是否可以在没有任何手动标签的情况下,以自监督的方式学习对特征、姿势、情绪等进行编码的面部属性的嵌入?然后,可以使用线性层将学习到的嵌入用于另一个任务(例如,特征、姿势和表情预测)。为此,我们贡献了 FAb-Net,这是一个用于学习面部属性的低维人脸嵌入的自监督框架(第3节)。我们利用视频数据,其中包含来自不同视角和不同表情的同一个人的大量图像。仅给定与源帧和目标帧相对应的嵌入,网络的任务是通过预测它们之间的流场来将源帧映射到目标帧。该代理任务迫使网络将计算流场所需的信息(例如,头部姿势和表情)提取到源和目标嵌入中。在第3.1节中解释了单个源帧的设置后,我们介绍了我们的额外贡献:在第3.2节中,一种利用多个帧来改进学习嵌入的方法;以及如何使用第4节中训练 FAb-Net 的课程策略(curriculum strategy)来提高绩效。
图1
图1 FAb-Net 概述。在单源情况下(顶部),编码器-解码器架构将一个源帧和一个目标帧作为输入,并学习生成目标帧。编码器输出的 256维——源和目标属性嵌入——被连接并输入到解码器。解码器预测从源帧到目标帧的点对点对应关系,然后使用双线性采样器从源帧获得生成帧的 RGB 值。在生成的帧和目标帧之间的 L1 损耗的情况下训练网络。在多源情况下(底部),解码器还预测置信图,并且置信图用于加权不同源帧的贡献。

在第5节中,通过简单地学习线性层,提取学习的嵌入并将其用于各种任务,如特征检测、姿态回归和表情分类。我们在这些任务上的结果与其他自监督方法相当或优越,接近监督方法的性能。这些实验验证了我们的自监督框架学习对面部属性进行编码的假设,这对各种任务都很有用。最后,通过使用学习的嵌入来检索不同身份下具有相似面部属性的图像,对该方法进行了定性测试。

2 相关工作

自监督学习。自我监督的方法,如[12,38,43,62],不需要手动标记图像;相反,他们直接使用图像数据来为学习良好的特征表示提供代理监督。这些方法的好处是,使用大量可用数据学习的特征可以转移到具有较少甚至没有注释数据的其他任务/领域。为了从图像数据中提供进一步的监督,可以通过合成扭曲或旋转来变换图像本身,并训练网络来识别旋转[19]或学习等变像素嵌入[40,51,52]。

与我们的训练框架更直接相关的是使用视频数据的自我监督框架([1,8,11,16,17,21,22,30,34,44,55,56,58,61])。我们的方法特别建立在使用帧合成的方法[8,11,22,44,56,58]的基础上,尽管对我们来说,合成是一项代理任务,而不是最终目标。注意,与[16,30,34,55]不同,我们不使用视频中固有的时间排序信息;我们也不预测以过去帧的数量为条件的未来帧[44],也不明确地预测帧之间的运动作为卷积核[22,58],或者以另一种模态(例如,语音[8])。相反,我们将帧视为一个无序集,并提出了一个简单的公式:通过将源帧和目标帧嵌入到一个公共空间中,并在这些嵌入上调节从源帧到目标帧的转换,学习到的嵌入必须学会对转换所需的相关变化模式进行编码。

在我们工作的同时,Zhang等人[64]和Jakab等人[21]在[51]的基础上,使用发现的特征重建原始图像。然而,与这些工作不同的是,我们没有对学习的表示施加任何限制——例如将特征编码为热图的显式表示。

面部嵌入的监督学习。给定已知(标记的)属性信息,例如姿势或表情,可以通过以有监督的方式进行训练来学习嵌入,以直接预测属性[28,32,46],或以新的、已知的姿势、表情等生成(人脸、汽车或其他类别的)图像[13,25,53,59,68]。监督人脸嵌入的另一种方法是显式学习 3D 可变形(morphable)模型(3DMM)的参数[7]。由于装配 3DMM 相对昂贵,[3,50]使用特征或光度误差作为监督来学习端到端。然而,与我们的方法不同,这些方法要么需要基本事实标签,要么需要固定变化模式和嵌入的可变形模型(morphable model )。

一个有趣的中途点是弱监督,其中学习的对象或人脸嵌入分别以对象标签[39]或天气/地理位置信息[31]为条件。这需要额外的元数据,但会产生可以表示人脸的年龄和表情或对象的关键点等属性的嵌入。

3 方法

其目的是 训练网络学习以自监督的方式编码面部属性的嵌入,而不需要任何标签 。为此,通过学习如何将源转换为目标帧,训练网络从一个或多个源帧生成目标帧。源帧和目标帧取自说话的人的相同面部轨迹,即帧具有相同的身份,但具有不同的表情/姿势。该架构的概述如图1 所示,并在第 3.1节 中对单个源帧和第 3.2 节中对多个源帧进行了进一步描述(补充材料中提供了更多细节)。

3.1 单源帧架构

网络的输入是来自同一面部轨迹(face-track)的源帧 s s s 和目标帧 t t t 。这些通过具有共享权重的编码器,该编码器学习从输入帧到 256 维向量嵌入的映射 f f f(如 图1 所示)。与目标帧和源帧相对应的嵌入分别是 v t = f ( t ) v_t=f(t) vtf(t) v s = f ( s ) v_s=f(s) vsf(s) 。源嵌入和目标嵌入被级联以给出 512 维向量,该 512 维向量经由解码器被上采样。解码器学习从级联嵌入到双线性网格采样器的映射 g g g ,双线性网格采样器从源帧采样以创建新的生成帧 s ′ = g ( v t , v s ) ( s ) s' = g(v_t, v_s)(s) s=g(vt,vs)(s) 。精确地说, g g g 预测目标帧中每个像素位置 ( x , y ) (x, y) (x,y) 的偏移量 ( d x , d y ) (dx, dy) (dx,dy) ;生成的帧 s ′ s' s 在位置 ( x , y ) (x, y) (x,y) 处,通过根据以下偏移从源帧 s s s 采样来获得: s ′ ( x , y ) = s ( x + d x , y + d y ) s'(x, y) = s( x+dx, y+dy ) s(x,y)=s(x+dx,y+dy) 。对网络进行训练,以最大限度地减少生成帧和目标帧之间的 L 1 L1 L1 损失: L ( s ′ , t ) = ∣ ∣ t − s ′ ∣ ∣ 1 L(s', t) = || t-s'||_1 L(s,t)=∣∣ts1

这种设置强制嵌入 v s v_s vs v t v_t vt 分别表示源帧和目标帧的面部属性,因为解码器从源帧 s s s 映射以生成帧 s ′ s' s (即,它使用源帧 s s s 的像素 RGB 值来创建生成的 s ′ s' s —— [54]在这项工作的同时提出了类似的公式)。由于解码器是目标和源属性嵌入的函数,并且解码器是网络中唯一共享信息的地方,因此目标属性嵌入必须对关于表情和姿势的信息进行编码,以便解码器知道在源帧中从哪里采样,以及在生成的帧中将该信息放置在哪里。

3.2 多源帧架构

虽然使用两个帧进行训练强制网络学习高质量的嵌入,但可以利用额外的源帧来改进学习的嵌入。这是通过额外的解码器预测每个源帧的置信热图(1 通道图像)来实现的。热图表示网络对每个像素位置的流量的置信度——例如,如果源帧的姿态与目标帧的姿态非常不同,则置信热图的置信度很低。此外,它可以针对图像的子部分来表达这一点;如果嘴在源中是闭合的,但在目标帧中是打开的,则置信热图可以表达该区域的不确定性。置信热图 C i C_i Ci是使用软最大操作针对每个源帧 s i s_i si 按像素组合的。对于 n n n 个源帧,要最小化的损失函数如下所示 L = ∣ ∣ t − ∑ i = 1 n e C i ∗ ( g ( v t , v s i ) ( s i ) ) ∑ i = 1 n e C i ∣ ∣ 1 L = || t-\dfrac{\textstyle\sum_{i=1}^n e^{C_i}*(g(v_t, v_{s_i})(s_i))} {\textstyle\sum_{i=1}^n e^{C_i}} ||_1 L=∣∣ti=1neCii=1neCi(g(vt,vsi)(si))1

4 课程策略

网络的训练被分为几个阶段,因此,正如[5,27]所启发的那样,随着所给出的例子变得越来越困难,知识可以随着时间的推移而积累。前向通过计算的损失用于以类似于[33,37,48,49]的方式根据样本的难度对批次中的样本(即源帧对和目标帧对)进行排序。然而,这些方法只使用最困难的样本,这被发现会阻止我们的网络学习。与[37]类似,使用难度越来越大的样本对策略的成功至关重要。

给定 N 个随机选择的样本的批量大小,即源帧和目标帧对,执行前向传递并计算每个样本的损失。根据这种损失对样本进行排序。最初,损失仅在批次中第 50 百分位的样本上反向传播(即,通过正向传递计算出的损失最低的 0.5N 个样本)。这些被认为是更容易的样本。当验证集上的损失趋于平稳时,要反向传播的子集偏移 10(例如,第 10 至第 60 百分位范围内的样本)。重复4次,直到被反向传播的样本落入第 40~90 百分位范围。在这一点上,课程策略被终止,因为假设 90-100 范围内的样本太具挑战性或可能有问题(例如:背景发生了很大的变化,这太难学习)。

5 实验

在这部分,我评估网络和学习到的嵌入。在 5.1 节,将使用 FAb-Net 的学习表示的性能与最先进的自监督和监督方法在各种任务上的性能进行了比较:面部特征预测、头部姿势回归和表情分类。第 5.2 节讨论了使用额外源帧的好处,第5.3节展示了如何使用学习的表示来检索具有相似面部属性的图像。
训练 该模型在 VoxCeleb1VoxCeleb2 视频数据集上进行训练[9,36];我们将组合的数据集称为 VoxCeleb+。VoxCeleb+ 数据集由采访视频组成,其中包含约 7000 名演讲者的 100 多万次发言。帧以每秒1帧的速度提取。帧被裁剪,大小调整为 256 * 256 ,并且身份被随机地划分为 train/val/test(具有75/15/10的划分)。

模型在 PyTorch [42]中使用 SGD 进行训练,初始学习率为 0.001 ,动量为 0.9 。当使用第4节中描述的课程策略时,批量大小为 N=32,否则为 N=8。当验证集上的损失趋于平稳时,学习率除以因子 10。(如果使用课程策略,则只有在考虑 40-90 百分位时才会更新学习率。)重复此操作,直到损失收敛。有关训练的更多详细信息,请参阅支持材料。

5.1 使用嵌入进行回归和分类

首先,我们研究了在嵌入中学习到的表示,并通过挑战它来预测三种不同的属性:特征、姿势和表情,来评估它是否真的编码了面部属性。

设置。给定在 VoxCeleb+ 上训练的网络,从学习的嵌入到输出任务来训练线性回归器或分类器。线性回归器/分类器由两层组成:批处理范数[20],然后是无偏差的线性全连接层。使用 MSE 损失来训练回归任务。分类任务是用交叉熵损失进行训练的。编码器的参数是固定的,同时使用 Adam [23]在目标数据集的训练集上训练两个附加层,学习率为 0.001,b1=0.9 和 b2=0.999。

5.1.1 基线

**自监督。**先前有关于在我们评估的数据集上使用自我监督进行里程碑预测的出版物,但没有关于在标准数据集上预测情绪的出版物。因此,我们实现了一个自动编码器和一组最先进的自监督方法[19,63],用于对象检测和分割。基线使用与 FAb-Net 相同的体系结构进行训练,但具有相关的损失函数和训练目标。

对于[63],使用了 L L L a b ab ab 通道的回归损失。这些模型在 VoxCeleb+ 上进行训练,直到收敛,具有与 FAb-Net 相同的训练参数和数据扩充。支持材料中提供了更多详细信息。

VGG面部描述符。此外,我们还将其与 VGG Face 描述符进行了比较,该描述符是从在 VGG-Face 数据集[41]上训练的 VGG-16 网络的 4096 维 FC7 特征中获得的。与流行的观点相反,最近有研究表明,经过身份训练的网络确实保留了有关其他面部属性的信息[10,15]。我们使用 VGG Face 描述符来学习所需属性任务的线性回归/分类层。这提供了一个强有力的基线,所获得的结果证实了这一发现,即经过身份训练的网络确实编码了表达,在某种程度上也编码了姿势信息。然而,请注意,与我们的方法不同,这种人脸描述符需要大量的标记人脸图像数据集进行训练。

5.1.2 结果

面部特征。面部特征位置从学习的嵌入中回归,并与 MAFL [66]和更具挑战性的 300-W [47]数据集上的最先进方法进行比较。按照[51,66]中的概述进行评估,并给出眼间距离的误差。对于 MAFL ,对 19k/1k 训练/测试图像的5个面部特征进行回归。对于 300-W,对 3148/689 个 训练/测试 图像的 68 个特征进行回归,这些图像是从组合多个数据集[4,67,70]中获得的(如[51]中所述)。

结果如 表1 所示,一些定性结果如 图2 和 图3 所示。这些结果首先表明,通过额外的观点和我们的课程策略进行微调可以提高 FAb-Net 所学习的嵌入。其次,这些结果表明,我们的方法比最先进的无监督特征检测方法有竞争力或更好,比 VGG 人脸描述符基线更好,并且与最先进的监督方法有竞争力。即使其他自监督方法[21,51,52,64]被明确设计为检测特征,而我们的方法却没有。除此之外,我们的方法能够弥合 VoxCeleb+ 和 CelebA [32]之间的域差距(我们比较的其他自监督方法是在 CelebA 上预训练的)。
表1
表1 300-W 和 MAFL 数据集上的特征预测错误。越低越好
表2
表2 来自 [26] 中 AFLW 测试集的头部预测错误,越低越好。
图2
图2 FAb-Net 在 MAFL数据集上的特征预测可视化。一个点表示真实情况和交叉 FAb-Net 的预测。右侧显示了一个失败案例。
图3
图3 FAb-Net 在 300W 数据集上的特征预测可视化

姿势。学习的嵌入用于姿态预测,并与监督方法[26]和使用 VGG 人脸描述符进行比较。为了进行评估,使用AFLW 数据集[24]从给定的嵌入到头部姿势标签来训练线性回归,但在从[26]中省略了 AFLW 测试集的 1000 个图像之后。从 表2 中可以看出,FAb-Net 在预测滚转角方面表现更好, MAE 与[26]相当,后者由头部姿态标签监督。此外,我们的嵌入优于基于身份训练的 VGG 人脸描述符;即,我们学习的嵌入编码了更多关于头部姿势的信息。

表情。我们在两个数据集上评估了我们学习的嵌入用于表达估计的性能:AffectNet [35]和 EmotioNet [6],这两个数据集中都包含超过 900000 个图像。这些数据集是在“野外”获取的,而不是在受约束的环境中获取的 AffectNet包含 8 种面部表情(中性、快乐、悲伤、惊讶、恐惧、厌恶、愤怒、蔑视),EmotioNet 包含 11 个动作单元(AU)(AU的组合对应于面部表情)。
表3
表3 在 EmotioNet[6] 上最新的自监督和监督方法对多个面部动作单元 (AU) 的表情分类结果。AUC 越高越好
表4
表4 AffectNet [35]上最先进的自监督和监督方法的表达式分类结果。AUC 越高越好。

这两个数据集都是用一个未发布的测试集组织起来应对挑战的。因此,训练集被细分为两个子集;一个用于训练,另一个用于验证。原始数据集的验证集用于测试不同的模型。EmotioNet 的线性分类器使用每个 AU 的二进制交叉熵损失进行训练,而对于 AffectNet ,使用交叉熵损失。两个训练数据集都是高度不平衡的。结果,来自未被表示的类的示例被与类频率成反比地重新加权,以更严重地惩罚对未被表示类的图像进行错误分类的损失。

通过测量 ROC 曲线下面积(AUC),将 FAb-Net 学习的嵌入与许多自监督和监督方法进行比较。对于每个类别(例如情感或 AU ),AUC 是独立计算的,并且结果是所有类别的平均值。EmotioNet 和 AffectNet 的结果分别报告在 表3 和 表4 中,表明当给定相同的训练数据时,我们的网络在这两个指标上都比其他自监督方法表现更好。据推测,这是由于网络必须学习变换源帧才能生成目标帧。当面部的各个部分一起移动时(例如,当嘴巴张开时,眉毛抬起或嘴唇张开),嵌入必须学会对有关面部特征的信息进行编码,从而对表情进行编码。有趣的是,自动编码器的性能很好,可能是由于该域的限制性质。
图4
图4 通过 FAb-Net 学习的置信热图。强度越高,置信度越高。网络会选择姿势最相似的帧进行绘制,并忽略姿势不太相似的帧(请参见示例(a))。在示例(b)中,口腔在第三源帧中具有更高的置信度,从而允许网络重新构建存在于目标帧中的牙齿。在支持材料中可以找到更多示例。

尽管领域发生了变化,但 FAb-Net 也离监督方法不远;VoxCeleb+ 只包括被采访的人(因此大多数是中性/微笑的脸),因此它不包括 AffectNet 或 EmotioNet 中的表情范围/极端。最后,可以观察到,被训练来预测身份的 VGG 人脸描述符在预测情感方面表现得出奇地好。

讨论 FAb-Net 已经取得了令人印象深刻的性能,因为大多数自监督方法在转移到另一个任务时,与监督方法相比有很大的差距。对于较小的数据集(特征/姿势)没有差距或差距很小,并且模型接近于较大数据集(表达式)的监督性能。

5.2 外源帧有什么好处?

前面的部分已经表明,使用外源帧可以提高性能。这是以通过编码器执行额外的正向通过为代价的(在这种情况下是两次)。如果有足够的GPU 内存,这些前向传递可以并行进行,只影响内存需求,而不影响计算速度。

通过可视化图4中给定一组源帧的置信热图,进一步研究了使用多个源帧。置信热图允许具有更相似姿势的图像用于创建生成的帧。此外,网络可以集中在一个帧上用于生成面部的一部分(例如,嘴),而集中在另一个帧中用于不同的部分。

5.3 图片检索

本节考虑了学习嵌入的应用:检索具有相似面部属性(如姿势)但具有不同身份的图像。为了执行此任务,从 VoxCeleb+ 中获得 10000 个随机采样的测试图像的子集。对于给定的查询图像,使用相应嵌入之间的余弦相似性度量(cosine similarity metric),基于它们与查询图像的相似性来对所有其他图像(库)进行排序。对于给定的查询图像 Q Q Q,通过执行通过网络的前向传递来提取嵌入 x q x_q xq。类似地,为库中的每个图像 I i I_i Ii 提取嵌入 x i x_i xi。然后根据 x q x_q xq x i x_i xi 之间的余弦相似性对每个图像 I i I_i Ii 进行排序。如果网络确实对关于面部属性的显著信息进行了编码,则余弦相似度可以用于识别具有相似姿势和面部属性的图像。对于一组查询图像,结果如图5所示。从这些结果中可以再次确认,我们的嵌入对关于面部属性的信息进行了编码,因为检索到的图像具有与查询图像相似的姿势和表情。注意,嵌入在很大程度上不受面部装饰(例如眼镜)和身份的影响,因为这些在面部轨迹中不会改变,因此不需要学习来预测变换。
图5
图5 使用 FAb_Net 嵌入学习的检索结果。嵌入捕获相似的视觉属性,因为对于给定的查询图像检索具有相似面部属性的图库图像。检索到的图像在所有情况下都具有与查询相似的姿势,并且例如在(b)闭上眼睛和(a)稍微张开嘴的情况下可以看到表情相似性。有关其他示例,请参阅支持材料。

6 总结

我们引入了 FAb-Net :一个用于从视频中学习面部属性的自监督框架。我们的方法通过在没有任何手动标签的情况下观看大量视频中的人脸移动和变化来学习姿势和表情。然后,我们训练的网络的特征可以用于预测其他数据集上的姿势、特征和表情(尽管域发生了变化),只需在学习的嵌入之上训练一个线性层。这些特征已被证明在各种任务上与自监督和监督方法具有可比性或优越的性能。这令人印象深刻,因为通常情况下,自监督方法的性能比监督方法差,但在姿势回归和面部特征检测方面,我们的方法确实具有竞争力/优于监督方法,并且在表情分类方面接近监督性能。

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

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

相关文章

《Java》基本类型的比较和引用类型的比较

目录 基本类型 引用数据类型 基本类型之间的比较 基于Comparable的比较 总结 👑作者主页:Java冰激凌 📖专栏链接:Java 基本类型 Java中提供了基本类型有八种 分别是 byte short int long float double char boolean 基本类型…

EL 表达式--各种运算-代码演示--EL 的 11 个隐含对象--pageContext 对象介绍--JSTL 标签库介绍--core 核心库--综合代码

目录 EL 表达式 EL 表达式介绍 代码示例 EL 常用输出形式 代码演示 Book.java el_input.jsp EL 运算操作 基本语法语法: 关系运算 逻辑运算 算数运算 EL 的 empty 运算 应用实例 empty.jsp EL 的三元运算 应用实例 EL 的 11 个隐含对象&#xff0c…

Unity-ML-Agents-训练生成的results文件解读-PushBlock

前言 训练结果文件路径:E:\ml-agents-release_19\results\push_block_test_02(具体路径以自己电脑为准) ML-Agents安装和PushBlock训练过程请见:(注意:push_block_test_02没有全部训练完毕) …

同样是测试,朋友到了30k,我才12K,这份测试面试8股文确实牛

程序猿在世人眼里已经成为高薪、为人忠诚的代名词。 然而,小编要说的是,不是所有的程序员工资都是一样的。 世人所不知的是同为程序猿,薪资的差别还是很大的。 众所周知,目前互联网行业是众多行业中薪资待遇最好的,…

推荐几款项目管理工具,提高你的团队协作效率

如何管理团队才能使团队发挥最大的价值,如果团队缺少协作,就会因为团队的内耗和冲突导致项目无法完成,如何提高团队协作效率呢?我们可以借助团队协作类的项目管理工具。 几个常见的项目管理工具: 1、进度猫 进度猫是…

MySQL高级第十五篇:MVCC多版本并发控制原理剖析

MySQL高级第十五篇:MVCC多版本并发控制原理剖析 一、什么是MVCC?二、快照读与当前读?1. 快照读2. 当前读 三、MVCC实现原理(ReadView)1. 隐藏字段2. Read View3. 思路设计4. ReadView使用规则5. MVCC整体操作流程 四、…

响应式开发HTML5CSS3实现视频播放器的功能案例

目录 前言 一、本视频播放器需要实现的功能 ​二、代码分布结构 三、部分主要代码 1.index01.html 2.video1.css 3.video1.js 四、images图片资源及视频 五、运行效果 前言 1.本文讲解的响应式开发技术(HTML5CSS3Bootstrap)的HTML5视频播放器等…

随想录Day59--单调栈: 503.下一个更大元素II , 42. 接雨水

看到下一个更大,最先想到的就是单调栈。所以503.下一个更大元素II可以用单调栈的思路进行求解,其实这道题和496.下一个更大元素 I的思路是一样的,不过是多了一个首位相连的环状条件,这时候可以想到,把数组再复制遍历&a…

推荐系统|多目标建模|多目标优化|跨域多目标算法演进

目录 多目标建模总结 推荐系统——多目标优化 网易严选跨域多目标算法演进 背景介绍 多目标建模及优化 1.样本与特征 2. 模型结构迭代 3. 位置偏差与 Debias 4. 多目标 Loss 优化 5. 跨域多目标建模 多目标建模总结 http://t.csdn.cn/H514i 常见的指标有点击率CTR、…

电、气物联网联合管理监测方案

一、概述 水、电、气联合管理就是把同一个用户的用电计量和用水计量、用气计量统一到一个账户(同时具有子账户),用一套软件进行统一管理,当账户余额不足时,可实行停电催费,从而既达到预付费的目的&#xff…

hue源码编译,替换cloudera manage hue,解决hue滚动条bug问题

一.安装依赖 yum install python python-dev python-setuptools python-pip \ libkrb5-dev libxml2-dev libxslt-dev libssl-dev \ libsasl2-dev libsqlite3-dev libldap2-dev \ libffi-dev nodejs npm cmake make gcc g++ 二.拉取源码 wget https://github.com/cloudera/hue/a…

机器学习笔记之K近邻学习算法

机器学习笔记之K近邻学习算法 引言回顾:投票法回顾:明可夫斯基距离 K \mathcal K K近邻算法算法描述 K \mathcal K K值的选择小插曲:懒惰学习与急切学习 KD \text{KD} KD树描述及示例 K \mathcal K K近邻 VS \text{ VS } VS 贝叶斯最优分类器…

汽车基础软件信息安全与AUTOSAR

AUTOSAR 信息安全框架和关键技术分析 随着汽车网联化和智能化,汽车不再孤立,越来越多地融入到互联网中。在这同时,汽车也慢慢成为潜在的网络攻击目标,汽车的网络安全已成为汽车安全的基础,受到越来越多的关注和重视。AUTOSAR 作为目前全球范围普遍认可的汽车嵌入式软件架…

HDFS FileSystem 导致的内存泄露

目录 一、问题描述 二、问题定位和源码分析 一、问题描述 ftp程序读取windows本地文件写入HDFS,5天左右程序 重启一次,怀疑是为OOM挂掉,马上想着就分析 GC日志了。 ### 打印gc日志 /usr/java/jdk1.8.0_162/bin/java \-Xmx1024m -Xms512m …

Net2FTP搭建免费web文件管理器『打造个人网盘』

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 前言 文件传输可以说是互联网最主要的应用之一,特别是智能设备的大面积使用,无论是个人存储文件资料,还是商业文件流转&#xff0c…

老杨说运维 | 数智时代,运维一体化如何落地实践?

在IT运维的发展过程中,随着分布式架构的加速推进,云原生技术加入应用,运维工具相比过去呈现出了更高强度的进化态势,即从多个相对独立的软件向EA形态的一体化系统进化。本次樱花论坛正是基于这一新的变革点,邀请了行业…

(十二)rk3568 NPU 中部署自己训练的模型,(2)模型转换

对于rknn 模型部署,本人使用*.pt -> *.onnx -> *.rknn的方式。 一、首先是pt文件到onnx文件的转换。 onnx文件导出时,需要修改models/yolo.py文件中的后处理部分。 注意:在训练时不要修改yolo.py的这段代码,训练完成后使用export.py进行模型导出转换时一定要进行修…

RHCE第六次作业

目录 一、编写脚本for1.sh,使用for循环创建20账户,账户名前缀由用户从键盘输入,账户初始密码由用户输入,例如: test1、test2、test3、.....、 test10 1.创建脚本for1.sh 2.执行脚本并查看是否创建成功 二、编写脚本for2.sh,使用for循环,通过…

微积分:微分

目录 1.代数推导 2.几何推导 3.总结 1.代数推导 假设我们有一个正方形初始边长为X,这时面积S1x 然后正方形的边长增加△x,此时面积S2(x△x) 变化的面积大小是△s(x△x)- x2x△x(△x&#x…

软件测试外包干了4年,感觉废了..

先说一下自己的情况,大专生,18年通过校招进入湖南某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…