SVTR: 使用单一视觉模型进行场景文本识别【论文翻译】

news2024/11/25 0:42:40

🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连
🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️

0-9

文章目录

  • SVTR: Scene Text Recognition with a Single Visual Model
    • Abstract
    • 1 Introduction
        • 谷歌翻译
        • GPT 4 翻译
    • 2 Method
        • 2.1 Overall Architecture
        • 2.2 Progressive Overlapping Patch Embedding - 渐进式重叠的补丁特征
        • 2.3 Mixing Block
        • 2.4 Merging
        • 2.5 Combining and Prediction
        • 2.6 Architecture Variants
    • 3 Experiments
        • 3.1 Datasets
        • 3.2 Implementation Details
        • 3.3 Ablation Study
        • 3.4 Comparison with State-of-the-Art - 与现有技术的比较
    • 3.5 Visualization Analysis
    • 4 Conclusion
    • 📙 精选专栏

SVTR: Scene Text Recognition with a Single Visual Model

  • 论文:https://arxiv.org/pdf/2205.00159.pdf
  • 使用单一视觉模型进行场景文本识别
  • 源码:https://github.com/PaddlePaddle/PaddleOCR

Abstract

主要的场景文本识别模型通常包含两个组成部分,一个用于特征提取的视觉模型和一个用于文本转录的序列模型。尽管这种混合架构准确性较高,但复杂且效率较低。在本研究中,我们提出了一种在逐个分块图像标记化框架内进行场景文本识别的单一视觉模型,完全摒弃了顺序建模。这种方法称为SVTR,首先将图像文本分解成 small patches,称为字符组件。随后,通过组件级的混合、合并和/或组合,进行分层阶段的循环处理。设计了全局和局部混合块,用于感知字符间和字符内的模式,从而实现多粒度的字符组件感知。因此,字符通过简单的线性预测进行识别。对英文和中文场景文本识别任务的实验结果表明了SVTR的有效性。SVTR-L (Large) 在英文识别中取得了极具竞争力的准确性,并且在中文识别方面明显优于现有方法,同时运行速度更快。此外,SVTR-T (Tiny) 是一种有效且更小的模型,在推理过程中具有吸引人的速度。

1 Introduction

谷歌翻译

场景文本识别旨在将自然图像中的文本转录为数字字符序列,这传达了对场景理解至关重要的高级语义。 由于文本变形、字体、遮挡、杂乱背景等变化,该任务具有挑战性。在过去的几年中,人们为提高识别精度做出了许多努力。 现代文本识别器除了准确性之外,出于实际需求还考虑了推理速度等因素。

GPT 4 翻译

个人觉得 GPT 4 翻译 更为精准流畅,所以接下来,本文会主要借助 GPT 4 进行关键段落翻译

场景文本识别旨在将自然图像中的文本转录为数字字符序列,以传达对场景理解至关重要的高层语义信息。该任务具有挑战性,原因在于文本变形、字体、遮挡、杂乱背景等的变化。在过去的几年中,人们做出了许多努力来提高识别准确性。现代文本识别器除了准确性外,还考虑到了推理速度等因素,以满足实际需求。

在方法上,场景文本识别可以被视为从图像到字符序列的跨模态映射。通常,识别器由两个构建模块组成:用于特征提取的视觉模型和用于文本转录的序列模型。例如,基于CNN-RNN的模型(Zhai等,2016年;Shi等,2017年)首先使用CNN进行特征提取。然后,将特征重塑为序列,并通过BiLSTM和CTC损失进行建模以进行预测(图1(a))。它们具有高效性,并且仍然是一些商业识别器的选择。然而,这种重塑对于文本的扰动(如变形、遮挡等)很敏感,限制了它们的有效性。

  • 我们的SVTR使用单一视觉模型进行场景文本识别,具有高效、准确和跨语言的多功能性。

1-0

总结之前网络模型能力瓶颈

随后,基于编码器-解码器的自回归方法变得流行起来(Sheng等,2019年;Li等,2019年;Zheng等,2021年),这些方法将识别转化为迭代解码过程(图1(b))。由于考虑了上下文信息,因此获得了更高的准确性。然而,由于逐个字符的转录,推理速度较慢。该流程进一步延伸到基于视觉-语言的框架(Yu等,2020年;Fang等,2021年),其中融入了语言知识(图1©),并进行了并行预测。然而,该流程通常需要大容量模型或复杂的识别范式才能确保识别准确性,限制了其效率。

总结近期提出的网络模型解决的问题和依然存在的瓶颈

最近,有一些工作着重于开发简化的架构以加快速度。例如,使用复杂的训练范式但简单的模型进行推理。CRNN-RNN的解决方案在[Hu等,2020年]中重新受到关注。它利用了注意力机制和图神经网络来聚合与同一字符对应的序列特征。在推理时,舍弃了注意力建模分支以平衡准确性和速度。PREN2D [Yan等,2021年]通过同时聚合和解码 1D sub-character features 进一步简化了识别过程。[Wang等,2021年]提出了VisionLAN。它引入了逐字符遮挡学习,赋予视觉模型语言能力。然而,在推理过程中,视觉模型仅用于加速。鉴于基于单个视觉模型的架构的简单性,一些识别器采用现成的CNN [Borisyuk等,2018年]或ViT [Atienza,2021年]作为特征提取器进行了提出。尽管这些方法具有高效性,但与最先进的方法相比,它们的准确性较低。

提出观点,引出,为什么之前的模型没有解决识别准确性和推理速度的问题,总结之前网络模型能力瓶颈,为下文提出自己的设计方案做铺垫

我们认为,仅基于单个视觉模型的方案只有在能够提取有区分性的字符特征时才有效。具体而言,该模型能够成功捕捉到字符内部的局部模式和字符间的长期依赖关系。前者编码了类似笔画的特征,描述了字符的细粒度特征,是区分字符的关键来源。而后者记录了类似语言的知识,从补充的角度描述了字符。然而,这两个特性在先前的特征提取器中没有得到很好的建模。例如,CNN骨干网络擅长建模局部相关性而不是全局依赖关系。同时,当前基于Transformer的通用骨干网络不会特别关注局部字符模式。

受到上述问题的启发,本研究旨在通过加强视觉模型来提升识别能力。为此,我们提出了一种基于视觉的模型SVTR,用于准确、快速和跨语言的多功能场景文本识别。受到视觉Transformer [Dosovitskiy等,2021年;Liu等,2021年]的最新成功启发,SVTR首先将图像文本分解为称为字符组件的小型2D块,其中每个块可能仅包含字符的一部分。因此,对图像进行逐块的分割,并应用自注意力机制来捕捉字符组件之间的识别线索。具体而言,为此目的开发了一个定制的文本架构。它是一个三阶段逐渐减小高度的骨干网络,具有混合、合并和/或组合操作。在每个阶段中,设计并重复使用了局部和全局混合块,以及合并或组合操作,获取表示字符笔画特征和不同字符之间长期依赖的局部组件级关联性因此,骨干网络提取了不同距离和多个尺度的组件特征,形成了多粒度的字符特征感知。最终,通过简单的线性预测实现了识别。在整个过程中,只使用了一个视觉模型。我们构建了四个具有不同容量的架构变体。在英语和中文的场景文本识别任务上进行了广泛的实验。结果表明,SVTR-L(大型)在英语方面取得了非常有竞争力的结果,并在中文方面大幅超过了最先进的模型,同时运行速度更快。同时,SVTR-T(微小型)也是一个有效且更小的模型,具有吸引人的推理速度。本研究的主要贡献可总结如下:

  1. 我们首次证明了单个视觉模型在场景文本识别中可以达到与先进的视觉-语言模型相媲美甚至更高的准确性。由于其高效性和跨语言多功能性,它对实际应用具有潜力。
  2. 我们提出了一种用于识别的定制文本模型SVTR。它引入了局部和全局混合块,分别用于提取类似笔画的特征和字符间的依赖关系,结合多尺度骨干网络,形成了多粒度的特征描述。
  3. 公共基准测试中的实证研究证明了SVTR的优越性。SVTR-L在识别英文和中文场景文本方面达到了最先进的性能。而SVTR-T则既有效又高效,具有6.03M的参数量,并且在一块NVIDIA 1080Ti GPU上平均每个图像文本消耗4.5毫秒的时间。

2 Method

2.1 Overall Architecture

1-00

SVTR的概述如图2所示。它是一个逐渐减小高度的三阶段网络,专门用于文本识别。对于一个大小为H×W×3的图像文本,首先通过逐步重叠的补丁嵌入将其转换为尺寸为(H/4) × (W/4)、维度为D0的补丁。这些补丁被称为字符组件,每个补丁与图像中的一部分文本字符相关联。然后,在不同尺度上进行三个阶段的特征提取,每个阶段由一系列混合块和合并或组合操作组成。为了提取类似笔画的局部模式和捕捉组件之间的依赖关系,设计了局部和全局混合块。通过骨干网络,特征组件和不同距离、多个尺度的依赖关系被表征,生成一个称为C的尺寸为1 × W4 × D3的表示,它感知多粒度的字符特征。最后,进行并行线性预测并进行去重操作,得到字符序列。

2.2 Progressive Overlapping Patch Embedding - 渐进式重叠的补丁特征

1-1

对于图像文本,首先需要从 X ∈ R(H×W×3)中获取表示字符组件的特征补丁。为此,存在两种常见的一步投影方法,即4×4的不重叠线性投影(见图3(a))和带步长4的7×7卷积。另外,我们通过使用两个连续的3×3卷积和批量归一化来实现补丁嵌入,如图3(b)所示。尽管这种方案稍微增加了计算成本,但它逐步增加了 feature dimension ,有利于特征融合。在第3.3节的消融研究中展示了其有效性。

2.3 Mixing Block

由于两个字符可能略有不同,文本识别在很大程度上依赖于字符组件级别的特征。然而,现有的研究大多使用特征序列来表示图像文本。每个特征对应一个薄片图像区域,对于不规则文本尤其容易受到噪声干扰。这对于描述字符并不是最佳选择。最近视觉Transformer的进展引入了2D特征表示,但如何在文本识别的背景下利用这种表示仍值得研究。

更具体地说,通过嵌入的组件,我们认为文本识别需要两种类型的特征。第一种是局部组件模式,例如类似笔画的特征。它编码了字符的形态特征和不同部分之间的相关性。第二种是字符间的依赖关系,例如不同字符之间或文本和非文本组件之间的相关性。因此,我们设计了两个混合块,通过使用具有不同感受野的自注意力来感知这种相关性。
1-3

全局混合(Global Mixing)如图4(a)所示,评估了所有字符组件之间的依赖关系。由于文本和非文本是图像中的两个主要元素,这种通用混合可以建立不同字符之间组件的长期依赖关系。此外,它还能够削弱非文本组件的影响,同时增强文本组件的重要性。在数学上,对于来自前一阶段的字符组件CCi−1,首先将其重塑为特征序列。在输入混合块时,应用了一层归一化(layer norm),然后是多头自注意力机制进行依赖建模。接下来,依次应用一层归一化和一个多层感知机(MLP)进行特征融合。Together with the shortcut connections, 形成全局混合块。

局部混合(Local Mixing)如图4(b)所示,评估了预定义窗口内组件之间的相关性。它的目标是编码字符的形态特征,并建立字符内组件之间的关联,模拟对字符识别至关重要的类似笔画的特征。与全局混合不同,局部混合考虑了每个组件的邻域。类似于卷积,混合是以滑动窗口的方式进行的。窗口大小经验性地设置为7×11。与全局混合相比,它采用自注意力机制来捕捉局部模式。

正如前面所述,这两种混合块旨在提取互补的不同特征。在SVTR中,这些块在每个阶段中反复应用多次,进行全面的特征提取。之后将对这两种混合块的排列进行消融研究。

2.4 Merging

在各个阶段保持恒定的空间分辨率是计算上昂贵的,这也导致了冗余的表示。因此,我们在每个阶段的混合块之后(最后一个阶段除外)设计了一个合并操作。利用最后一个混合块输出的特征,我们首先将其重塑为尺寸为h × w × di−1的嵌入,分别表示当前的高度、宽度和通道数。然后,在高度维度上使用步长为2的3 × 3卷积,在宽度维度上使用步长为1的卷积,随后进行一层归一化,生成尺寸为h
2 × w × di的嵌入。

合并操作将高度减半,同时保持宽度不变。这不仅降低了计算成本,还建立了一个定制的文本分层结构。通常,大多数图像文本以水平或接近水平的方式出现。压缩高度维度可以为每个字符建立一个多尺度表示,同时不影响宽度维度上的补丁布局。因此,在各个阶段中,不会增加将相邻字符编码到同一个组件的可能性。我们还增加了通道维度di,以补偿信息的丢失。

2.5 Combining and Prediction

在最后一个阶段,合并操作被Combining操作所取代。它首先将高度维度池化为1,然后经过一个全连接层、非线性激活和dropout。通过这样做,字符组件进一步压缩为一个特征序列,其中每个元素由长度为D3的特征表示。与合并操作相比,Combining 操作可以避免将卷积应用于一个维度非常小的嵌入,例如高度为2的情况。

In the implementation, N is set to 37 for English and 6625 for Chinese.

2.6 Architecture Variants

SVTR 有多个超参数:通道深度、每个阶段 heads 个数、Mixing Block 个数 和 排列次序,通过改变超参数,SVTR 架构模型具备了不同的能力,作者提出了四种典型架构:SVTRT (Tiny), SVTR-S (Small), SVTR-B (Base) and SVTR-L (Large).

1-5

3 Experiments

3.1 Datasets

1-6

3.2 Implementation Details

1-7

3.3 Ablation Study

为了更好地理解SVTR,我们在IC13(规则文本)和IC15(不规则文本)上进行了受控实验,并在不同的设置下进行了实验。为了提高效率,所有实验都是使用SVTR-T进行的,没有使用修正模块和数据增强。

1-8

The Effectiveness of Patch Embedding

从表2的左半部分可以看出,不同的嵌入策略在识别准确性上表现略有不同。我们的逐步嵌入方案在两个数据集上的平均表现优于两种默认方案,分别提高了0.75%和2.8%,这表明它在特别是对于不规则文本的识别中是有效的。

The Effectiveness of Merging

这里有两种选择,即应用合并操作构建逐渐减小的网络(prog)和在各个阶段保持恒定的空间分辨率(none)。如表2的右半部分所示,合并操作不仅降低了计算成本,还提高了两个数据集上的准确性。这验证了在高度维度上进行多尺度采样对于文本识别是有效的。

The Permutation of Mixing Blocks - 混合块的排列

在每个阶段中,可以以多种方式对全局和局部混合块进行分组。在表3中评估了其中几种方法,其中"none"表示不考虑混合块。"[G]6[L]6"表示在每个阶段,首先进行六个全局混合块,然后进行六个局部混合块。其他类似定义。可以看到,几乎每种方案都在一定程度上提高了准确性。我们认为这些改进是由于对全面的字符组件特征的感知。在不规则文本上相对较大的增益进一步说明了混合块对于在复杂场景中进行特征学习的帮助。观察到"[L]6[G]6"报告了最佳准确性。与"none"相比,它在IC13和IC15上分别提高了1.9%和6.6%的准确性。将局部混合块放在全局混合块之前有益于引导全局混合块专注于捕捉长期依赖关系。相反,交换它们的排列可能会混淆全局混合块的作用,导致其重复关注局部特征。

3.4 Comparison with State-of-the-Art - 与现有技术的比较

在表4中,我们将SVTR与以前的研究在六个包括规则和不规则文本的英文基准数据集以及一个中文场景数据集上进行了比较。这些方法根据是否利用语言信息进行了分组,即lan-free和lan-aware。首先我们来看英文数据集的结果。即使是SVTR系列中最小的SVTR-T,在lan-free方法中也取得了非常有竞争力的准确性。而其他的SVTR则在大多数数据集上成为了最新的最佳方法。当与具有语言感知能力的方法进行进一步比较时,SVTR-L在IIIT、IC15和CUTE这六个英文基准数据集中获得了最高的准确性。它的整体准确性与最近的研究[Fang et al., 2021; Tang et al., 2022]相当,这些研究使用了额外的语言模型。相比之下,SVTR具有简洁性和更快的运行速度。这些结果基本上说明了单一的视觉模型也能够进行良好的识别,因为具有区分性的字符特征被成功提取出来。

接下来我们分析中文场景数据集的结果。表中显示了六种现有方法的准确性结果[Chen et al., 2021]。令人鼓舞的是,SVTR的表现相当出色。与所列方法中最好的方法SAR相比,我们观察到了从5.4%到9.6%的准确性提升,这是明显的改进。这个结果可以解释为SVTR全面感知了多尺度的字符组件特征。这些特征非常适合描述具有丰富笔画模式的中文字符。

在图5中,我们还展示了不同模型在IC15数据集上的准确性、参数和推理速度。由于其简洁性,SVTR在准确性-参数和准确性-速度图中始终排名前列,进一步展示了与现有方法相比的优势。

1-10

3.5 Visualization Analysis

我们已经对SVTR-T在解码不同字符组件时的注意力图进行了可视化。每个图可以解释为在整个识别过程中扮演不同的角色。
我们选择了九个图进行说明,如图6所示。 第一行显示了三个注视字符"B"的地图,分别强调其左侧、底部和中间部分。这表明不同的字符区域对于识别起着不同的作用。第二行展示了注视不同字符(“B”、“L"和"S”)的三个图。SVTR-T也能够通过将一个字符视为一个整体来学习其特征。而第三行展示了同时激活多个字符的三个图。这意味着成功捕捉到了不同字符之间的依赖关系。这三行图表明,识别器捕捉到了子字符、字符级别和跨字符的线索,与SVTR感知多尺度字符组件特征的说法相一致。这再次说明了SVTR的有效性。

根据结果和讨论,我们得出结论:SVTR-L在准确性、速度和多功能性方面具有优势,在以准确性为导向的应用中是一个非常有竞争力的选择。而SVTR-T是一个有效而更小、更快的模型,非常适合资源有限的场景中使用。

4 Conclusion

我们提出了SVTR,一种针对场景文本识别的定制化视觉模型。它提取了多尺度的字符特征,描述了不同高度尺度上的类似笔画的局部模式和组件之间的依赖关系。因此,识别任务可以通过使用单一的视觉模型来进行,具有准确性、效率和跨语言多功能性的优点。我们还设计了具有不同容量的SVTR,以满足多样化的应用需求。在英文和中文基准测试上的实验基本上验证了所提出的SVTR的有效性。与最先进的方法相比,我们观察到了高度竞争力甚至更好的准确性,同时运行速度更快。我们希望SVTR能够促进场景文本识别领域的进一步研究。


📙 精选专栏


  • 🍊 深度学习模型训练推理——基础环境搭建推荐博文查阅顺序【基础安装—认真帮大家整理了】——【1024专刊】

计算机视觉领域 八大专栏、不少干货、有兴趣可了解一下

  • ❤️ 图像风格转换 —— 代码环境搭建 实战教程【关注即可阅】!
  • 💜 图像修复-代码环境搭建-知识总结 实战教程 【据说还行】
  • 💙 超分重建-代码环境搭建-知识总结 解秘如何让白月光更清晰【脱单神器】
  • 💛 YOLO专栏,只有实战,不讲道理 图像分类【建议收藏】!
  • 🍊 深度学习:环境搭建,一文读懂

  • 🍊 深度学习:趣学深度学习

  • 🍊 落地部署应用:模型部署之转换-加速-封装

  • 🍊 CV 和 语音数据集:数据集整理

  • 🍊 点赞 👍 收藏 ⭐留言 📝 都是博主坚持写作、更新高质量博文的最大动力!

9-9

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

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

相关文章

Ansible部署与实施PlayBook

Ansible部署与实施PlayBook 计算机名称IP角色workstation192.168.182.130管理servera192.168.182.131被管理serverb192.168.182.132被管理serverc192.168.182.133被管理 部署 控制节点 官方文档 Ansible易于安装。只需要安装到要运行它的一个或多个控制节点上。由Ansbile管…

【事业单位-语言理解】中心理解01

【事业单位-语言理解】中心理解01 一、中心理解1.1 转折关系1.2 因果关系1.3必要条件关系 二、总结 一、中心理解 1.1 转折关系 转折之后是中心意思 转折在分述句子中,就没有那么重要 1.2 因果关系 一方面另一方面起到的是分述的作用,一般不要过多…

python解析markdown

python解析markdown 1、安装markdown模块2、python解析markdown2.1 QtWebEngineWidgets显示网页2.1.1 网页加载2.1.2 网页加载错误 2.2 Python-Markdown 模块库2.3 QTextDocument、QTextBrowser、QTextEdit 3、案例Demo3.1 先上图3.2 代码文件 1、安装markdown模块 pip instal…

ElasticSearch学习--操作

目录 索引库操作 mapping映射 总结 创建索引库 查询删除修改索引库 总结 文档操作 添加 查询,删除 修改文档 总结 RestClient操作索引库 初始化JavaRestClient 创建索引库​编辑 删除索引库,判断索引库是否存在 总结 操作文档 新增文档 查询文…

JAVA SE -- 第九天

(全部来自“韩顺平教育”) 一、类变量个类方法 (一)类变量 1、基本介绍 类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值&#…

2023年的深度学习入门指南(18) - 将LLaMA2跑起来

2023年的深度学习入门指南(18) - 将LLaMA2跑起来 之前我们说到过,在GPT 3之后,大模型就很少有开源的了。其中,最为典型的开源支持者就是Meta公司的研究团队。年初他们发布的LLaMA基本上是各家开源模型的主要参考对象。不过,LLaMA…

Python 算法基础篇之集合和字典:创建、访问、添加和删除元素

Python 算法基础篇之集合和字典:创建、访问、添加和删除元素 引言 1. 集合的概念和创建2. 集合的访问3. 集合的添加和删除元素 a ) 添加元素 b ) 删除元素 4. 字典的概念和创建5. 字典的访问6. 字典的添加和删除元素 a ) 添加元素 b ) 删除元素 总结 引言 集合和字…

SAP从放弃到入门系列之批次派生-Batch Derivation-Part2

文章目录 一、派生的类型1.1 静态派生1.2 动态派生 二、派生的方向 通过批次派生的基本配置和简单功能的介绍,大家应该对批次派生有一个基本的了解,这篇文章从批次派生的类型和批次派生的方向两个维度更深入的聊一下它的功能。 一、派生的类型 派生的类…

OPTEE之sonarlint静态代码分析实战一——optee_os

ATF(TF-A)/OPTEE之静态代码分析汇总 一、OPTEE源码下载及分析 对OPTEE实施soanrlint静态代码扫描之前,先到官方网站下载源码。官方网站位于github,网址OP-TEE GitHub。 其中我们重点关注optee_os和optee_client。此页面下的optee_linuxdriver已废弃,该部分最终会编…

数据结构:二叉树遍历

概述 二叉树的遍历是指按照某条搜索路径访问二叉树中的每个结点,使得每个结点均被访问一次,而且仅被访问一次。二叉树的遍历方式主要有:先序遍历、中序遍历、后序遍历、层次遍历。先序、中序、后序其实值得是父节点被访问的次序。若在遍历过…

一.MySQL的主从复制

目录 一.MySQL的主从复制 1.2主从复制的工作过程和原理 1.2.1主从复制工作过程为两日志和三线程 ​编辑 1.2.2主从复制的工作原理 1.3主从复制延迟的原因 1.4主从复制的架构 1.5.MySQL四种同步方式 1.5.1异步复制(Async Replication) 1.5.2 同步复制(Sync Re…

Linux内核子系统--进程管理剖析

Linux 是一个计算需求不断变化的非常动态的系统。 Linux 计算需求的表示以进程的公共抽象为中心,进程可以是短期的(从命令行执行的命令)或长期的(网络服务)。因此,进程的总体管理及其调度非常重要。 在用户…

EMC学习笔记(十八)滤波器设计

滤波器设计 1.标准要求2.设计理论2.1 滤波器电路设计过程2.2 插入损耗定义2.3 原始噪声测量2.4 插入损耗计算2.5 滤波失配原则2.6 滤波拓扑选择2.7 滤波参数计算2.8 滤波参数确定 Tips:学习资料来自网络,仅供学习使用。 EMI滤波器设计(汽车电…

JVM系列(9)——调优初体验

学习这篇文章之前,要了解: JVM系列(2)——垃圾回收 JVM系列(3)——内存分配与回收策略 先了解概念: 吞吐量:用户执行时间/(用户执行时间垃圾回收时间);就是干正经事的时间…

C++语法(25)--- 异常与智能指针

C语法(24) C11_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/131054426?spm1001.2014.3001.5501 1.异常 try { // 保护的标识代码 }catch( ExceptionName e1 ) { // catch 块 }catch( ExceptionName e2 ) { // catch 块…

RT-Thread qemu mps2-an385 bsp 移植制作 :BSP 制作篇

下载 V2M-MPS2_CMx_BSP mps2 的资料很少,所以唯一能下载的是 ARM 官方的 V2M-MPS2_CMx_BSP,下载地址为: https://keilpack.azureedge.net/pack/Keil.V2M-MPS2_CMx_BSP.1.8.0.pack 其实这是个 Keil MDK5 的 Pack 包,安装后&#x…

JAVA-ReentrantLock(五)

概念 在Java中,“lock”(锁)是一种用于并发控制的机制。它用于确保在多线程环境中,同一时刻只有一个线程可以访问共享资源或临界区。当一个线程获得了锁,其他线程将被阻塞,直到持有锁的线程释放它。这样可…

Cocos Creator 3.8 后期效果 Shader 编写(1/2) 基础篇

原文链接:Cocos Creator 3.8 后期效果 Shader 编写(1/2) 基础篇 在 Cocos Creator 3.8 版本中,新增了不少实用的特性,其中我最喜欢的,就是它自带后期效果管线,并且还内置了许多高级效果。 有用…

XUbuntu22.04之Linux剪切板和selection primary区域(一百八十七)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

二、Java框架基础02 XML

二、XML 2.1 XML 简介 XML 即可扩展标记语言,一种简单的数据存储语言,使用一系列简单的标记来描述结构化数据 XML 的特点 XML 与操作系统,编程语言的开发平台无关规范统一,实现不同系统之间的数据交互 2.1.1 XML 的文档结构 以下…