当前位置: 首页 > 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预先保留的单词(标识符) 在定义变量或者常量时候,不要用关键字 不要用关键字给变量或者常量起名称...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

2025季度云服务器排行榜

在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...