当前位置: 首页 > 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…...

一起学Git【第五节:git版本回退】

git reset 是 Git 版本控制系统中一个非常强大的命令,它可以用来重置当前分支到指定的状态,即执行撤销操作或者回退至之前的某一版本,他可以回退至之前的某一个提交状态。有三种主要的用法:git reset --soft;git reset --hard;git reset --mixed; 对比如图: 1.git res…...

金蝶V10中间件的使用

目录 环境准备搭建过程配置修改应用部署 环境准备 Linux内核服务器JDK1.8安装包:AAS-V10.zip程序包:***.war 搭建过程 将安装包上传至服务器opt目录下,官方给定的默认服务主目录为“/opt/AAS-V10/ApusicAS/aas/”;解压安装包(解…...

hi168大数据离线项目环境搭建

hi168大数据离线项目环境搭建 ## **1. 服务器准备**##### 1.1 创建集群应用节点 集群服务器使用“我的应用“中的Ubuntu22.04集群模版创建三个节点应用,并且进入“我的应用”中去修改一下节点名称(node1对应master,node2对应hadoop1&#xf…...

Ubuntu 22.04安装Docker

陈拓 2024/10/19-2024/12/26 0. 概述 docker是容器(Container),有点像一个轻量级的虚拟机。 容器是一种轻量级、可移植、并将应用程序进行的打包的技术,使应用程序可以在几乎任何地方以相同的方式运行。Docker将镜像文件运行起…...

穿山甲等广告联盟依据哪些维度给APP、小程序结算广告变现收益

媒体在开展广告变现商业化时,最关心的是变现收益问题,所运营的不同体量的APP、小程序能产生多少广告变现收益。#广告联盟# 广告变现的价格、收益不是一成不变的,广告转化是影响广告收益的重要因素之一。广告平台针对整个变现链路上的各环节&…...

【ES6复习笔记】迭代器(10)

什么是迭代器? 迭代器(Iterator)是一种对象,它能够遍历并访问一个集合中的元素。在 JavaScript 中,迭代器提供了一种统一的方式来处理各种集合,如数组、字符串、Map、Set 等。通过迭代器,我们可…...

ROS1入门教程6:复杂行为处理

一、新建项目 # 创建工作空间 mkdir -p demo6/src && cd demo6# 创建功能包 catkin_create_pkg demo roscpp rosmsg actionlib_msgs message_generation tf二、创建行为 # 创建行为文件夹 mkdir action && cd action# 创建行为文件 vim Move.action# 定义行为…...

【 Copilot】云开发 Copilot 实战教程:从入门到精通,掌握云开发核心技能

我的个人主页 我的领域:人工智能篇,希望能帮助到大家!!!👍点赞 收藏❤ 引言 云开发 Copilot 作为一款革新性的开发辅助工具,利用先进的人工智能技术,为开发者在云开发的征程中点亮…...

DataCap MongoDB Driver: 全面解析MongoDB在DataCap中的使用指南

在大数据时代,MongoDB作为一款广受欢迎的NoSQL数据库,其灵活的文档存储模型和强大的查询能力使其成为许多现代应用的首选数据存储方案。今天,我们将深入探讨DataCap MongoDB Driver,这是一个强大的工具,它让在DataCap环…...

[x86 ubuntu22.04]双触摸屏的触摸事件都响应在同一个触摸屏上

1 问题描述 CPU:G6900E OS:ubuntu22.04 Kernel:6.8.0-49-generic 系统下有两个一样的 edp 触摸屏,两个触摸屏的触摸事件都响应在同一个 edp 屏幕上。 2 解决过程 使用“xinput”命令查看输入设备,可以看到只有一个 to…...

Linux:SystemV通信

目录 一、System V通信 二、共享内存 代码板块 总结 一、System V通信 System V IPC(inter-process communication),是一种进程间通信方式。其实现的方法有共享内存、消息队列、信号量这三种机制。 本文着重介绍共享内存这种方式。 二、共…...

全面Kafka监控方案:从配置到指标

文章目录 1.1.监控配置1.2.监控工具1.3.性能指标系统相关指标GC相关指标JVM相关指标Topic相关指标Broker相关指标 1.4.性能指标说明1.5.重要指标说明 1.1.监控配置 开启JMX服务端口:kafka基本分为broker、producer、consumer三个子项,每一项的启动都需要…...

Springboot项目Druid运行时动态连接多数据源的功能

项目支持多数据库连接是个很常见的需求&#xff0c;这不仅是要在编译前连已经知道的多个数据库&#xff0c;有时还要在程序运行时连后期增加的多个数据源来获得数据。 一、编译前注册数据库连接 1.引入依赖包 <!-- springboot 3.x --><dependency><groupId&g…...

【漏洞复现】F5 BIG-IP Next Central Manager SQL注入漏洞(CVE-2024-26026)

免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。本次测试仅供学习使用,如若非法他用,与平台和本文作…...

中间件xxl-job安装

拉取镜像 docker pull xuxueli/xxl-job-admin:2.4.2 创建xxl-job-admin容器 docker create --name xxl-job-admin -p 9099:8080 -e PARAMS"--spring.datasource.urljdbc:mysql://192.168.96.57:3306/xxl_job2Unicodetrue&characterEncodingUTF-8 --spring.dataso…...

Pytorch | 利用SMI-FGRM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用I-FGSSM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集SMI-FGRM介绍SMI-FGRM算法流程 SMI-FGRM代码实现SMI-FGRM算法实现攻击效果 代码汇总smifgrm.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器&#xff1a; Pytorch | 从零构建AlexNet对CI…...

论文解读 | EMNLP2024 一种用于大语言模型版本更新的学习率路径切换训练范式

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 点击 阅读原文 观看作者讲解回放&#xff01; 作者简介 王志豪&#xff0c;厦门大学博士生 刘诗雨&#xff0c;厦门大学硕士生 内容简介 新数据的不断涌现使版本更新成为大型语言模型&#xff08;LLMs&#xff…...

破解海外业务困局:新加坡服务器托管与跨境组网策略

在当今全球化商业蓬勃发展的浪潮之下&#xff0c;众多企业将目光投向海外市场&#xff0c;力求拓展业务版图、抢占发展先机。而新加坡&#xff0c;凭借其卓越的地理位置、强劲的经济发展态势以及高度国际化的营商环境&#xff0c;已然成为企业海外布局的热门之选。此时&#xf…...

win系统B站播放8k视频启用HEVC编码

下载HEVC插件 点击 HEVC Video Extension 2.2.20.0 latest downloads&#xff0c;根据教程下载安装 安装 Random User-Agent 点击 Random User-Agent 安装 配置 Random User-Agent ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/dda0ea75096c42c0a79ef6f6f5521…...

Pion WebRTC 项目教程

Pion WebRTC 项目教程 webrtc Pure Go implementation of the WebRTC API [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/we/webrtc 1. 项目目录结构及介绍 Pion WebRTC 项目的目录结构如下&#xff1a; pion/webrtc ├── api ├── examples ├── inter…...

Opencv之对图片的处理和运算

Opencv实现对图片的处理和修改 目录 Opencv实现对图片的处理和修改灰度图读取灰度图转换灰度图 RBG图单通道图方法一方法二 单通道图显色合并单通道图 图片截取图片打码图片组合缩放格式1格式2 图像运算图像ma[m:n,x:y]b[m1:n1,x1:y1] add加权运算 灰度图 读取灰度图 imread(‘…...

基于cobra开发的k8s命令行管理工具k8s-manager

基于cobra开发的k8s命令行管理工具k8s-manager 如果觉得好用&#xff0c;麻烦给个Star!通用配置1 node 分析所有node的资源情况2 analysis 分析Node节点上的资源使用构成3 image 获取指定namespace的所有镜像地址4 resource 获取指定namespace的所有limit 与 Requests大小5 top…...

基于NodeMCU的物联网空调控制系统设计

最终效果 基于NodeMCU的物联网空调控制系统设计 项目介绍 该项目是“物联网实验室监测控制系统设计&#xff08;仿智能家居&#xff09;”项目中的“家电控制设计”中的“空调控制”子项目&#xff0c;最前者还包括“物联网设计”、“环境监测设计”、“门禁系统设计计”和“小…...

springboot/ssm图书大厦图书管理系统Java代码编写web图书借阅项目

springboot/ssm图书大厦图书管理系统Java代码编写web图书借阅项目 基于springboot(可改ssm)vue项目 开发语言&#xff1a;Java 框架&#xff1a;springboot/可改ssm vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff…...

【MySQL】踩坑笔记——保存带有换行符等特殊字符的数据,需要进行转义保存

问题描述 从DBeaver中导出了部分业务数据的 insert sql&#xff0c;明明在开发、测试环境都可以一把执行通过&#xff0c;却在预发环境执行前的语法检查失败了&#xff0c;提示有SQL语法错误。 这条SQL长这样&#xff0c;default_sql是要在odps上执行的sql语句&#xff0c;提…...

利用 Python 编写一个 VIP 音乐下载脚本

在这篇博客中,我们将介绍如何使用 Python 编写一个简单的 VIP 音乐下载脚本,利用网页爬虫技术从一个音乐网站下载歌曲。通过解析网页,获取歌曲的真实下载链接,并将音乐文件保存到本地。我们将使用 requests 和 BeautifulSoup 库来实现这个过程。 目标 本脚本的主要功能是…...

Sashulin升级啦,开箱即用!

经过多年的不断投入&#xff0c;升级为了Sashulin基础软件系列&#xff0c;本系列包含&#xff1a; 1、Sashulin IDE 2025全域通用开发工具 通用型Java开发工具&#xff0c;并可以进行业务流可视化开发。 2、发布Sashulin Webserver 2025 将Html等网页文件发布成网站&#xf…...

Java圣诞树

目录 写在前面 技术需求 程序设计 代码分析 一、代码结构与主要功能概述 二、代码功能分解与分析 1. 类与常量定义 2. 绘制树的主逻辑 3. 彩色球的绘制 4. 动态效果的实现 5. 窗口初始化 三、关键特性与优点 四、总结 写在后面 写在前面 Java语言绘制精美圣诞树…...

在Python如何用Type创建类

文章目录 一&#xff0c;如何创建类1&#xff1a;创建一个简单类2&#xff1a;添加属性和方法3&#xff1a;动态继承父类4&#xff1a;结合元类的使用总结 二.在什么情境下适合使用Type创建类1. **运行时动态生成类**2. **避免重复代码**3. **依赖元类或高级元编程**4. **动态扩…...

04软件测试需求分析案例-用户登录

通读文档&#xff0c;提取信息&#xff0c;提出问题&#xff0c;整理为需求。 从需求规格说明、设计说明、配置说明等文档获取原始需求&#xff0c;通读原始需求&#xff0c;分析有哪些功能&#xff0c;每种功能要完成什么业务&#xff0c;业务该如何实现&#xff0c;业务逻辑…...

替代传统FTP传输,镭速大数据传输系统实现安全高效数据流转!

信息技术的快速进步让大数据成为了企业决策的关键支撑&#xff0c;但同时也带来了巨大的挑战。企业在运营过程中产生的数据量急剧增加&#xff0c;这对数据传输的速度、安全性和效率提出了更高的要求。然而&#xff0c;传统的FTP传输方式在处理大规模数据时显得力不从心&#x…...

SpringMVC学习(一)——请求与响应处理

目录 一、SpringMVC简介 二、RequestMapping&#xff1a;请求路径映射 三、RestController 四、请求限定 五、请求处理 1.使用普通变量&#xff0c;收集请求参数 2.使用RequestParam明确指定获取参数 3.目标方法参数是一个pojo 4.RequestHeader&#xff1a;获取请求…...

大语言模型学习工具及资源总结和落地应用

当前&#xff0c;随着人工智能技术的迅猛发展&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;在各个领域的应用日益广泛。以下是国内外常见的大语言模型工具、已经落地部署的应用以及学习相关的网站和资源的详细介绍。 一、国内外常见的大语言模型…...

深度学习使用Anaconda打开Jupyter Notebook编码

新手入门深度学习使用Anaconda打开Jupyter Notebook编码 1. 安装Anaconda 第一种是Anaconda官网下载安装包&#xff0c;但是很慢&#xff0c;不太建议 第二种使用国内清华大学镜像源下载 选择适合自己电脑的版本&#xff0c;支持windows&#xff0c;linux系统 下载完之后自行…...

【视觉惯性SLAM:四、相机成像模型】

相机成像模型介绍 相机成像模型是计算机视觉和图像处理中的核心内容&#xff0c;它描述了真实三维世界如何通过相机映射到二维图像平面。相机成像模型通常包括针孔相机的基本成像原理、数学模型&#xff0c;以及在实际应用中如何处理相机的各种畸变现象。 一、针孔相机成像原…...

Firewalld 防火墙详解:深入理解与实践指南

在现代网络环境中&#xff0c;防火墙是保护系统和网络不受未授权访问的关键工具。firewalld是Linux系统中广泛使用的动态防火墙管理工具&#xff0c;它提供了强大的功能和灵活的配置选项。本文将深入探讨firewalld防火墙的工作原理、配置和管理&#xff0c;以及如何在实际环境中…...

在linux系统中使用jdbc访问sqlite数据库时报错“java.lang.UnsatisfiedLinkError”

1. 异常描述 在linux系统中使用jdbc访问sqlite数据库时出现如下错误提示&#xff1a; 2. 异常分析 可能是当前使用版本的sqlite-jdbc-xxx.jar版本有bug。 3. 异常解决 我是从3.8.9.1版本换到了3.16.1版本就好了。...

华为管理变革之道:管理制度创新

目录 华为崛起两大因素&#xff1a;管理制度创新和组织文化。 管理是科学&#xff0c;150年来管理史上最伟大的创新是流程 为什么要变革&#xff1f; 向世界标杆学习&#xff0c;是变革第一方法论 体系之一&#xff1a;华为的DSTE战略管理体系&#xff08;解决&#xff1a…...

MySQL 临时表:使用技巧与最佳实践

MySQL 临时表&#xff1a;使用技巧与最佳实践 引言 在数据库管理系统中&#xff0c;临时表是一种常见的数据结构&#xff0c;它允许用户存储临时数据&#xff0c;这些数据只在当前会话或事务中有效。MySQL 作为一种广泛使用的数据库管理系统&#xff0c;也提供了对临时表的支…...

华为云语音交互SIS的使用案例(文字转语音-详细教程)

文章目录 题记一 、语音交互服务&#xff08;Speech Interaction Service&#xff0c;简称SIS&#xff09;二、功能介绍1、实时语音识别2、一句话识别3、录音文件识别4、语音合成 三、约束与限制四、使用1、API2、SDK 五、项目集成1、引入pom依赖2、初始化 Client1&#xff09;…...

【Rust自学】6.3. 控制流运算符-match

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 6.3.1. 什么是match match允许一个值与一系列模式进行匹配&#xff0c;并执行匹配的模式对应的代码。模式可以是字面值、变量名、通配符等…...

AIA - IMSIC之二(附IMSIC处理流程图)

本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 ​​​​​​​通过IMSIC接收外部中断的CSR 软件通过《AIA - 新增的CSR》描述的CSR来访问IMSIC。 machine level 的 CSR 与 IMSIC 的 machine level interrupt file 可相互互动;而 supervisor level 的 CSR…...

Excel中一次查询返回多列

使用Excel或wps的时候&#xff0c;有时候需要一次查询返回多列内容&#xff0c;这种情况可以选择多次vlookup或者多次xlookup&#xff0c;但是这种做法费时费力不说&#xff0c;效率还有些低下&#xff0c;特别是要查询的列数过多时。我放了3种查询方法&#xff0c;效果图&…...

SQLAlchemy示例(连接数据库插入表数据)

背景需求 连接数据库&#xff0c;插入表中一些数据。 其用户是新建用户&#xff0c;所以只能插入&#xff0c;不能更新。 再次输入数据则使用更新数据语法&#xff0c;这个没调试。 #! /usr/bin/env python # -*- coding: utf-8 -*-from sqlalchemy import create_engine, …...

AG32 MCU 的电机控制方案

原创 AG32 AG32MCU cpld 2024年12月24日 17:23 浙江 AG32 MCU 的电机控制方案 在工业自动化、智能家居、新能源设备等众多领域&#xff0c;电机控制的精准性、稳定性和高效性至关重要。 AG32 MCU 凭借其高性能处理器、丰富的外设资源以及独特的 2K CPLD 资源&#xff0c;在电机…...

Linux:进程概念

1.冯诺依曼体系结构 结论&#xff1a; --- CPU不和外设直接打交道&#xff0c;和内存直接打交道。 --- 所有的外设&#xff0c;有数据需要收入&#xff0c;只能载入到内存中&#xff1b;内存写出&#xff0c;也一定是写道外设中。 --- 为什么程序要运行必须加载到内存&#xf…...

使用 Webpack 优雅的构建微前端应用❕

Module Federation 通常译作“模块联邦”&#xff0c;是 Webpack 5 新引入的一种远程模块动态加载、运行技术。MF 允许我们将原本单个巨大应用按我们理想的方式拆分成多个体积更小、职责更内聚的小应用形式&#xff0c;理想情况下各个应用能够实现独立部署、独立开发(不同应用甚…...

【Leetcode 热题 100】208. 实现 Trie (前缀树)

问题背景 T r i e Trie Trie 或者说 前缀树 是一种树形数据结构&#xff0c;用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景&#xff0c;例如自动补全和拼写检查。 请你实现 Trie 类&#xff1a; Trie() 初始化前缀树对象。void insert(String word…...

从0开始在linux服务器上部署SpringBoot和Vue

目录 一、申请服务器的IP &#xff08;1&#xff09;阿里云申请IP &#xff08;2&#xff09;设置服务器的密码 &#xff08;3&#xff09;远程终端——MobaXterm 二、Docker &#xff08;1&#xff09;安装Docker &#xff08;2&#xff09;镜像加速 &#xff08;3&…...