当前位置: 首页 > news >正文

【论文笔记】Visual Alignment Pre-training for Sign Language Translation

🍎个人主页:小嗷犬的个人主页
🍊个人网站:小嗷犬的技术小站
🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。


基本信息

标题: Visual Alignment Pre-training for Sign Language Translation
作者: Peiqi Jiao, Yuecong Min, Xilin Chen
发表: ECCV 2024

基本信息

摘要

手语翻译(Sign Language Translation, SLT)旨在将手语视频翻译为文本句子。

尽管gloss序列为SLT中的视觉表征学习提供了有效的对齐监督信息,但标注gloss的高成本限制了其可扩展性。

现有工作在gloss-free的情况下尚未取得令人满意的结果。

在本研究中,我们将这一挑战归因于视觉token和文本token之间的灵活对应关系,并通过从文本句子中构建类似gloss的约束来解决这一问题。

具体而言,我们提出了一种 视觉对齐预训练(Visual Alignment Pre-training, VAP) 方案,通过以贪婪的方式对齐视觉和文本token来利用视觉信息。

VAP方案增强了视觉编码器捕获语义感知视觉信息的能力,并促进了与在大规模语料库上预训练的翻译模块的更好适配。

针对四个SLT基准的实验结果证明了VAP的有效性,能够生成合理的对齐,并显著缩小与gloss-based方法之间的性能差距。

介绍

Illustration of the alignment generated by VAP for a given sign video and its text sentence

主要贡献

  • 探讨了gloss annotation在手语翻译(SLT)中的作用,并展示了在gloss-free设置下利用视觉信息的重要性。
  • 提出了视觉对齐预训练(Visual Alignment Pre-training, VAP),通过以贪婪的方式对齐视觉和文本token来促进视觉表征学习。
  • 对gloss-free的SLT模型训练进行了深入的实验。实验结果表明,VAP具有良好的效果,能够生成可靠的对齐结果,并接近gloss-based的方法。

方法

Overview of the proposed visual alignment pre-training

gloss标注在手语翻译中的作用

手语翻译旨在将手语视频翻译为对应的文本句子。如图2所示,通用的SLT网络可以划分为一个视觉编码器 ψ V \psi_V ψV 和一个翻译模块 ψ T \psi_T ψT。给定一个手语视频或其他类型的输入(例如,骨架数据) X \mathcal{X} X 和对应的文本句子 s = { s 1 , ⋯ , s U } s = \{s_1, \cdots, s_U\} s={s1,,sU} ψ V \psi_V ψV 从视频中提取视觉特征 V = { v 1 , ⋯ , v r } \mathcal{V} = \{v_1, \cdots, v_r\} V={v1,,vr},而 ψ T \psi_T ψT 基于 V \mathcal{V} V 预测 s s s。网络通过最小化负对数似然来优化,其公式为:

L S L T = − log ⁡ p ( s ∣ V ; θ ψ V , θ ψ T ) . \mathcal{L}_{SLT} = -\log p(s | \mathcal{V}; \theta_{\psi_V}, \theta_{\psi_T}). LSLT=logp(sV;θψV,θψT).

在自然语言处理(NLP)中,单词对齐通常指的是在平行文本中指示对应单词 a = { a i } i = 1 m a = \{a_i\}_{i=1}^m a={ai}i=1m b = { b j } j = 1 n b = \{b_j\}_{j=1}^n b={bj}j=1n 的过程,可以表示为矩阵 A ∈ R m × n \mathcal{A} \in \mathbb{R}^{m \times n} ARm×n,其中 A i j ∈ { 0 , 1 } A_{ij} \in \{0, 1\} Aij{0,1} 表示 a i a_i ai 是否与 b j b_j bj 对应。考虑到 V \mathcal{V} V s s s 之间的对齐关系 A \mathcal{A} A,最近gloss-based的SLT研究中使用的损失函数可以重新表述为:

L = L S L T + L S L R = − log ⁡ ∑ A p ( A ∣ V ) p ( s ∣ V , A ) − log ⁡ p ( g ∣ V ) , \mathcal{L} = \mathcal{L}_{SLT} + \mathcal{L}_{SLR} = -\log \sum_{\mathcal{A}} p(\mathcal{A} | \mathcal{V}) p(s | \mathcal{V}, \mathcal{A}) - \log p(g | \mathcal{V}), L=LSLT+LSLR=logAp(AV)p(sV,A)logp(gV),

其中 g = { g 1 , ⋯ , g M } g = \{g_1, \cdots, g_M\} g={g1,,gM} 表示包含 M M M 个gloss的gloss标注,它与 V \mathcal{V} V 单调对齐。如上文公式所示, L S L T \mathcal{L}_{SLT} LSLT 的监督来自两个方面:对齐本身和翻译与对齐的结合。gloss-based的方法通过引入额外的监督来提高视觉信息的利用率。然而,之前的gloss-free方法表现较差,主要原因在于 V \mathcal{V} V s s s 之间的灵活对应关系,这阻碍了最佳对齐的寻找,并无法为视觉编码器提供足够的监督。

基于以上分析,我们认为解决该问题的关键在于从文本句子中构建类似gloss的约束,并提出了 视觉对齐预训练(Visual Alignment Pre-training, VAP) 方案。

视觉对齐预训练

gloss-based的传统方法通常利用CTC(连接时序分类)对 ψ V \psi_V ψV 进行监督,假设 ψ V \psi_V ψV 中所有的单调对齐均成立,公式如下:

L C T C ( g , V ) = − log ⁡ ( p ( g ∣ V ; θ ψ V ) ) = − log ⁡ ( ∑ π p ( π ∣ V ; θ ψ V ) ) L_{CTC}(g, V) = -\log(p(g|V; \theta_{\psi_V})) = -\log\left(\sum_{\pi}p(\pi|V; \theta_{\psi_V})\right) LCTC(g,V)=log(p(gV;θψV))=log(πp(πV;θψV))

其中 π \pi π 表示 V V V g g g 之间的一种对齐关系。我们假设视频中每个手势的近似含义可以在对应的文本句子中找到,并尝试利用 V V V s s s 之间的对齐关系来监督 ψ V \psi_V ψV。然而, V V V s s s 之间存在多达 2 T ⋅ U 2^{T \cdot U} 2TU 种潜在的对齐方式,这对在没有适当约束的情况下(例如单调关系或gloss注解所具有的约束)识别最佳对齐关系提出了挑战。受近期视觉-语言预训练技术的启发,我们提出了一种VAP方案,用于简化对齐过程,以贪婪方式近似最佳对齐,并为视觉编码器提供逐帧标签。

具体而言,给定一个文本句子 s s s,我们首先使用文本编码器 ψ E \psi_E ψE 提取其对应的文本特征 ψ E ( s ) \psi_E(s) ψE(s),然后通过两个简单的线性层将 V V V ψ E ( s ) \psi_E(s) ψE(s) 投影到一个联合特征空间:

v ~ t = Linear ( v t ) , s ~ u = Linear ( ψ E ( s u ) ) . \tilde{v}_t = \text{Linear}(v_t), \quad \tilde{s}_u = \text{Linear}(\psi_E(s_u)). v~t=Linear(vt),s~u=Linear(ψE(su)).

随后,通过识别每个视觉特征与最相似的文本特征,可以计算对齐关系 A V 2 S ∈ R T × U \mathbf{A}^{V2S} \in \mathbb{R}^{T \times U} AV2SRT×U

A t , u V 2 S = { 1 , for  u = arg ⁡ max ⁡ u ′ f ( v ~ t , s ~ u ′ ) , 0 , otherwise . A^{V2S}_{t,u} = \begin{cases} 1, & \text{for } u = \arg\max_{u'} f(\tilde{v}_t, \tilde{s}_{u'}), \\ 0, & \text{otherwise}. \end{cases} At,uV2S={1,0,for u=argmaxuf(v~t,s~u),otherwise.

其中, f ( ⋅ , ⋅ ) f(\cdot, \cdot) f(,) 以余弦相似度的形式实现。为了确保 A V 2 S \mathbf{A}^{V2S} AV2S 的合理性,我们通过以下公式计算视频和文本的相似性 ρ ( X , s ) \rho(\mathcal{X}, s) ρ(X,s)

ρ ( X , s ) = 1 T ∑ t = 1 T f ( v ~ t , A t V 2 S s ~ ) , \rho(\mathcal{X}, s) = \frac{1}{T} \sum_{t=1}^{T} f(\tilde{v}_t, A^{V2S}_t \tilde{s}), ρ(X,s)=T1t=1Tf(v~t,AtV2Ss~),

并采用对比学习模式优化 A V 2 S \mathbf{A}^{V2S} AV2S。然而,仅依赖 ρ ( X , s ) \rho(\mathcal{X}, s) ρ(X,s) 进行预训练可能会导致 ψ V \psi_V ψV 的输出坍缩为一个恒定值。为了避免这种情况,我们还计算文本与视频的相似性 ρ ( s , X ) \rho(s, \mathcal{X}) ρ(s,X),该相似性通过为每个文本特征识别最相似的视觉特征 A S 2 V \mathbf{A}^{S2V} AS2V 来计算。

在此基础上,对于包含 N N N 个视频-文本对 { X i , s i } i = 1 N \{ \mathcal{X}^i, s^i \}_{i=1}^N {Xi,si}i=1N 的小批量,可以通过以下公式计算对比损失:

L Align = − 1 2 N ( ∑ i = 1 N log ⁡ exp ( ρ ( X i , s i ) / σ ) ∑ j = 1 N exp ( ρ ( X i , s j ) / σ ) + ∑ i = 1 N log ⁡ exp ( ρ ( s i , X i ) / σ ) ∑ j = 1 N exp ( ρ ( s i , X j ) / σ ) ) , L_{\text{Align}} = -\frac{1}{2N} \left( \sum_{i=1}^N \log\frac{\text{exp}(\rho(\mathcal{X}^i, s^i) / \sigma)}{\sum_{j=1}^N \text{exp}(\rho(\mathcal{X}^i, s^j) / \sigma)} + \sum_{i=1}^N \log\frac{\text{exp}(\rho(s^i, \mathcal{X}^i) / \sigma)}{\sum_{j=1}^N \text{exp}(\rho(s^i, \mathcal{X}^j) / \sigma)} \right), LAlign=2N1(i=1Nlogj=1Nexp(ρ(Xi,sj)/σ)exp(ρ(Xi,si)/σ)+i=1Nlogj=1Nexp(ρ(si,Xj)/σ)exp(ρ(si,Xi)/σ)),

其中, σ \sigma σ 是用于缩放logits的预定义温度。通过所提出的 L Align L_{\text{Align}} LAlign,我们增大了成对的视觉和文本特征序列之间的相似性,这将鼓励每个特征找到其最相关的配对特征并靠拢。

此外,对齐的计算仅依赖于gloss级别的信息,缺乏对齐时间一致性的约束。上文公式的分解表明,翻译损失也显著增强了对齐质量。我们通过实验(表3)展示,仅通过重新初始化翻译模块就可以提升性能,这表明优化对齐过程与提升翻译能力同步进行的重要性。因此,我们将 L SLT L_{\text{SLT}} LSLT 纳入进来,以确保所用翻译模块的时间一致性,从而达到对齐的时间一致性。预训练阶段的最终监督目标如下:

L pre-train = L Align + L SLT . L_{\text{pre-train}} = L_{\text{Align}} + L_{\text{SLT}}. Lpre-train=LAlign+LSLT.

通过以上设计,我们可以计算视觉和文本token之间的近似对齐,并获得一个语义感知的视觉编码器。

端到端微调

与一般的机器翻译数据集相比,公共的手语翻译(SLT)数据集仍然规模有限。因此,我们采用在大规模语料库(如 mBART, T5)上预训练的翻译模块来替代浅层翻译模块,从而在微调过程中缓解对大量训练数据的需求。此外,类似于文献中的 G2T(Gloss2Text)任务,我们设计了一个伪gloss到文本(P2T,Pseudo-gloss2Text)任务,用于微调预训练翻译模块以更好地适应任务。

具体来说,我们可以基于对齐矩阵 A v 2 s A^{v2s} Av2s 为每个手语视频生成一个伪gloss序列 g ~ \tilde{g} g~。由于 A v 2 s A^{v2s} Av2s 为每个视觉特征识别出最相似的文本token,而视频的连续性导致局部窗口内的特征可能会引用相同的token,我们简单地合并重复的token,通过以下公式获得 g ~ \tilde{g} g~

g ~ = B ( A v 2 s s ) , \tilde{g} = \mathcal{B}(A^{v2s}s), g~=B(Av2ss),

其中, B \mathcal{B} B 表示合并操作。P2T 的训练目标可以表述为:

L P 2 T = − log ⁡ p ( s ∣ g ~ ) . \mathcal{L}_{P2T} = -\log p(s|\tilde{g}). LP2T=logp(sg~).

至此,我们已经有了预训练良好的视觉编码器和微调良好的翻译模块。接下来是对整个模型的端到端微调。我们采用一个两层的 MLP 作为视觉-语言映射器(V-L 映射器),与之前工作中相同,该模块负责将视觉特征投影到文本空间。在微调期间,我们仍然包括 L A l i g n \mathcal{L}_{Align} LAlign 损失以持续改进视觉编码器,最终的总损失可以表示为:

L f i n e − t u n e = L A l i g n + L S L T . \mathcal{L}_{fine-tune} = \mathcal{L}_{Align} + \mathcal{L}_{SLT}. Lfinetune=LAlign+LSLT.

对齐质量评估

在上文中,我们假设视频中每个手语的大致含义可以在文本句子中找到,并通过识别最相似的文本token来计算对齐关系。基于这一假设,生成的伪gloss g ~ \tilde{g} g~ 也应该与手语视频单调对齐。然而,由于不同词汇之间的差异,我们无法直接通过gloss来评估生成对齐关系的质量。因此,我们提出了两种方法来间接评估生成对齐关系的质量。

如果 g ~ \tilde{g} g~ 与手语视频单调对齐,它应该能够像gloss一样指导 SLT 网络的学习。因此,我们从零开始训练一个 SLT 网络,类似于大多数gloss-based的 SLT 方法,但用伪gloss g ~ \tilde{g} g~ 替代了gloss,其损失函数可以表述为:

L = L S L T + L C T C ( g ~ , V ) , \mathcal{L} = \mathcal{L}_{SLT} + \mathcal{L}_{CTC}(\tilde{g}, V), L=LSLT+LCTC(g~,V),

通过这种基于伪gloss的模型与 VAP 的性能差距可以隐式反映生成对齐关系的质量。

与通过翻译性能(如词错误率,WER)评估对齐质量相比,通过对齐性能进行评估更为直观。因此,我们提出通过在预训练中用伪gloss替换文本句子,计算生成伪gloss与对应gloss之间的 WER 来评估对齐方法的质量。换句话说,这种方法旨在检查对齐方法是否能够从无序序列中找到正确的顺序。

总的来说,所提出的方法能够评估对齐关系的质量,包括生成结果和对齐方法本身的质量。

训练与推理

训练

如图 3 所示,VAP 的训练流程包括三个阶段。

Illustration of the training pipeline of VAP

视觉编码器在第 1 阶段使用 L pre-train L_{\text{pre-train}} Lpre-train 进行预训练。翻译模块基于大规模语料库进行预训练,并在第 2 阶段使用 g ~ \tilde{g} g~ 进行微调。最后,在第 3 阶段,整个模型使用 L f i n e − t u n e \mathcal{L}_{fine-tune} Lfinetune 进行端到端微调。

需要注意的是,VAP 是一种gloss-free方法,gloss仅用于如上文所述的伪gloss质量评估。

推理

在经过第3阶段的微调后,整个模型被用于推理。具体来说,视觉编码器首先提取视觉特征 V \mathcal{V} V,然后视觉-语言映射器(V-L mapper)将这些特征投射到文本空间中。接下来,翻译模块以自回归的方式生成文本句子。

实验

主实验

Performance comparison on PHOENIX14T and CSL-Daily

Performance comparison on How2Sign and OpenASL

消融实验

Ablation results of pre-training objectives. Ablation results of fine-tuning and pseudo-gloss-based training. Ablation results of gloss-based VAP

Comparison with SOTA retrieval method on PHOENIX14T test set. Ablation results of aggregation method

可视化

Qualitative results of translation and alignment. Visualization of the retrieval results of two German words. Visualization of the CTC and VAP predictions

总结

在本文中,我们专注于在无gloss标注情况下,如何在手语翻译(SLT)中利用视觉信息。

我们提出了一种视觉对齐预训练(Visual Alignment Pre-training, VAP)方案,通过从文本句子中构建类似gloss的约束来增强视觉编码器的能力。

VAP以一种贪心的方式逼近视觉特征与文本token之间的最优对齐,同时为视觉编码器提供逐帧的标签,并改善其与在大规模语料库上预训练的翻译模块之间的兼容性。

实验结果表明,所提出的VAP方案在引导视觉编码器学习和建立视觉特征与文本token之间的有意义对齐方面是有效的。此外,VAP生成的对齐结果可以作为伪gloss,为手语翻译模型提供中间监督。

我们预计,所提出的VAP方案将推动未来的研究工作,特别是在将手语翻译扩展到大规模数据集方面,从而促进手语翻译领域的发展。

相关文章:

【论文笔记】Visual Alignment Pre-training for Sign Language Translation

🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: Visual Alignment Pre-tra…...

NLP基础知识 - 向量化

NLP基础知识 - 向量化 目录 NLP基础知识 - 向量化 NLP基础知识 - 向量化目录什么是向量化?为什么需要向量化?常见的向量化方法1. 词袋模型(Bag of Words, BoW)2. TF-IDF(词频-逆文档频率)3. 词嵌入&#x…...

JAVA学习笔记_MySQL进阶

文章目录 存储引擎InnoDB引擎MyISAM引擎Memory存储引擎的选择 索引索引数据结构Btree(多路平衡查找树)BTreeHash索引为什么InnoDQB存储引擎采用Btree索引结构 索引分类思考题 索引语法索引性能分析慢查询日志show profiesexplain 索引的使用规则最左前缀法则索引失效SQL提示覆盖…...

ffmpeg: stream_loop报错 Error while filtering: Operation not permitted

问题描述 执行ffmpeg命令的时候,报错:Error while filtering: Operation not permitted 我得命令如下 ffmpeg -framerate 25 -y -i /data/workerspace/mtk/work_home/mtk_202406111543-l9CSU91H1f1b3/tmp/%08d.png -stream_loop -1 -i /data/workerspa…...

Vue.use()和Vue.component()

当很多页面用到同一个组件,又不想每次都在局部注册时,可以在main.js 中全局注册 Vue.component()一次只能注册一个组件 import CcInput from /components/cc-input.vue Vue.component(CcInput);Vue.use()一次可以注册多个组件 对于自定义的组件&#…...

javaweb 04 springmvc

0.1 在上一次的课程中,我们开发了springbootweb的入门程序。 基于SpringBoot的方式开发一个web应用,浏览器发起请求 /hello 后 ,给浏览器返回字符串 “Hello World ~”。 其实呢,是我们在浏览器发起请求,请求了我们…...

[Visual studio] 性能探测器

最近发现VS的profile还是很好用的, 可以找到项目代码的瓶颈,比如发现CPU的每一个函数的时间占比,分析代码耗时分布,和火焰图一样的效果 如何使用 1. 打开你的项目,调整成release状态 2. 点击调试->性能探测器 3…...

【漫话机器学习系列】017.大O算法(Big-O Notation)

大 O 表示法(Big-O Notation) 大 O 表示法是一种用于描述算法复杂性的数学符号,主要用于衡量算法的效率,特别是随着输入规模增大时算法的运行时间或占用空间的增长趋势。 基本概念 时间复杂度 描述算法所需的运行时间如何随输入数…...

IntelliJ IDEA中设置激活的profile

在IntelliJ IDEA中设置激活的profile,可以通过以下步骤进行: 通过Run/Debug Configurations设置 打开Run/Debug Configurations对话框: 在IDEA的顶部菜单栏中,选择“Run”菜单,然后点击“Edit Configurations...”或者…...

Qt 的信号槽机制详解:之信号槽引发的 Segmentation Fault 问题拆析(上)

Qt 的信号槽机制详解:之因信号槽误用引发的 Segmentation Fault 问题拆析(上) 前言一. 信号与槽的基本概念信号(Signal)槽(Slot)连接信号与槽 二. 信号槽机制的实现原理元对象系统(M…...

uniapp中实现APP调用本地通知栏通知、震动、本地提示音或者mp3提醒

要在uniapp中实现APP调用本地通知栏通知、震动和本地提示音或者mp3提醒,你可以使用uni-app提供的原生API和插件来实现。 通知栏通知: 你可以使用uni-app的原生API uni.showToast() 或者 uni.showModal() 来实现通知栏通知的功能。可以在需要发送通知的地…...

ADB 上传文件并使用脚本监控上传百分比

有个需求,需要测试 emmc的外部连续写入性能,使用 ADB 上传一个巨大的文件。并且在上传到一定值时进行干预。 因此但是 adb push 命令本身会 block 运行并且不返回进度,因此需要一个额外的监控脚本。 上传脚本: echo off setloc…...

【数据库】PostgreSQL(持续更新)

目录 K8S 部署基本使用高级特性 K8S 部署 # pg.yaml --- apiVersion: v1 kind: PersistentVolume metadata:name: tv-postgres-pvnamespace: locallabels:storage: tv-postgres-pv spec:accessModes:- ReadWriteOncecapacity:storage: 50Gi # 按需修改,需要保持与…...

overleaf中出现TeX capacity exceeded PDF object stream buffer=5000000的原因和解决方案

在插入pdf 配图后,编译出错提示信息如图,很可能的一个原因是pdf文件大小太大了,最好压缩一下,压缩到1MB以内。...

pyqt5冻结+分页表

逻辑代码 # -*- coding: utf-8 -*- import sys,time,copy from PyQt5.QtWidgets import QWidget,QApplication, QDesktopWidget,QTableWidgetItem from QhTableWidgetQGN import Ui_QhTableWidgetQGN from PyQt5.QtCore import Qt from PyQt5 import QtCore, QtGui, QtWidgets…...

一起学Git【第四节:添加和提交文件】

通过前三节的学习,基本上对Git有了初步的了解,下面开始进行文件的添加和提交的流程。 这里主要涉及四个命令: git init 创建仓库git status查看仓库状态git add添加至暂存区git commit提交文件之前已经使用过git init命令了,此处不再具体讲解。参照一起学Git【第二节:创建…...

【鸿蒙实战开发】HarmonyOS集成高德地图定位实现

背景 随着HarmoneyOS 应用的井喷式增长,各大厂商也都加快了自己原生应用鸿蒙化的脚步,今天使用高德打车的时候忽然间想到高德在鸿蒙上有没有实现呢?打开next bate 版本的手机发现高德已经上架了,但是功能还不是特别完善。那么几乎每个应用都…...

ECharts散点图-气泡图,附视频讲解与代码下载

引言: ECharts散点图是一种常见的数据可视化图表类型,它通过在二维坐标系或其它坐标系中绘制散乱的点来展示数据之间的关系。本文将详细介绍如何使用ECharts库实现一个散点图,包括图表效果预览、视频讲解及代码下载,让你轻松掌握…...

python操作Elasticsearch执行增删改查

文章目录 基本操作更多查询方法1. 查询全部数据2. 针对某个确定的值/字符串的查询:term、match3. 在多个选项中有一个匹配,就查出来:terms4. 数值范围查询:range5. 多个条件同时触发 bool6. 指定返回值个数 size7. 返回指定列 _so…...

学习C++:关键字

关键字: 作用:关键字是C预先保留的单词(标识符) 在定义变量或者常量时候,不要用关键字 不要用关键字给变量或者常量起名称...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...