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

【论文阅读】Learning Texture Transformer Network for Image Super-Resolution

Learning Texture Transformer Network for Image Super-Resolution

  • 论文地址
  • Abstract
  • 1. 简介
  • 2.相关工作
    • 2.1单图像超分辨率
    • 2.2 Reference-based Image Super-Resolution
  • 3. 方法
    • 3.1. Texture Transformer
      • Learnable Texture Extractor 可学习的纹理提取器。
      • Relevance Embedding. 相关性嵌入。
      • Hard-Attention.
      • Soft-Attention.
    • 3.2. Cross-Scale Feature Integration
    • 3.3. 损失函数
      • Reconstruction loss.重建损失。
      • Adversarial loss. 对抗损失。
      • Perceptual loss. 知觉丧失。
    • 3.4. 实现细节
  • 4.实验
    • 4.1。数据集和指标
    • 4.2。评估
    • 4.3消融实验
  • 5. 结论

论文地址

1、论文
2、源码

Abstract

我们研究了图像超分辨率 (SR),旨在从低分辨率 (LR) 图像中恢复逼真的纹理。最近的进展是将高分辨率图像作为参考(Ref),从而可以将相关纹理转移到 LR 图像。然而,现有的 SR 方法忽略了使用注意力机制从参考图像传输高分辨率 (HR) 纹理,这在具有挑战性的情况下限制了这些方法。在本文中,我们提出了一种用于图像超分辨率 (TTSR) 的新型纹理变换器网络,其中 LR 和 Ref 图像分别被表述为变换器中的查询和键。 TTSR 由四个针对图像生成任务优化的密切相关的模块组成,包括 DNN 的可学习纹理提取器、相关嵌入模块、用于纹理传输的硬注意模块和用于纹理合成的软注意模块。这种设计鼓励跨 LR 和 Ref 图像的联合特征学习,其中可以通过注意力发现深度特征对应,从而可以传递准确的纹理特征。所提出的纹理变换器可以以跨尺度的方式进一步堆叠,从而能够从不同级别(例如,从 1 倍到 4 倍放大)恢复纹理。大量实验表明,TTSR 在定量和定性评估方面都比最先进的方法取得了显着改进。

1. 简介

图像超分辨率旨在从退化的低分辨率对应物中恢复高分辨率图像的自然和现实纹理 [12]。最近 image SR 的成功可以大大提高媒体内容的质量,从而提供更好的用户体验。例如,数码变焦移动摄像机算法和数字电视图像增强技术。此外,这项基础技术可以使广泛的计算机视觉任务受益,如医学成像[21]和卫星成像[35]。图像SR的研究通常基于两种范式进行,即单图像超分辨率(SISR)和基于参考的图像超分辨率(RefSR)。传统SISR通常会导致模糊效果,因为高分辨率(HR)纹理在退化过程中被过度破坏,无法恢复。尽管提出了基于生成对抗网络(GAN)[7]的图像SR方法来缓解上述问题,但GAN引起的幻觉和伪影进一步对图像SR任务提出了巨大的挑战。基于参考的图像超分辨率 (RefSR) 最近取得了进展,它从给定的参考图像转移 HR 纹理以产生视觉上令人愉悦的结果 [5、6、26、29、36]。然而,最先进的(SOTA)方法通常采用直接的方式来传输纹理,这可能会导致不满意的 SR 图像(如图 1 所示)。例如,郑等人。 [43] 采用基于流的方法,当面对 LR 和 Ref 图像之间的大视点变化时,通常会搜索和传输不准确的纹理(用红色表示)。张等。 [41] 采用由预训练分类模型定义的特征空间来搜索和传输 LR 和 Ref 图像之间的纹理。然而,这种高级语义特征不能有效地表示 HR 纹理,这仍然会产生令人难以置信的结果。

为了解决这些问题,我们提出了一种用于图像超分辨率(TTSR)的新型纹理变换器网络。具体来说,提出了四个针对图像生成任务优化的密切相关的模块。首先,我们提出了一个可学习的纹理提取器,其中的参数将在端到端训练期间更新。这样的设计使得 LR 和 Ref 图像的联合特征嵌入成为可能,这为在 SR 任务中应用注意力机制 [19,34,31] 奠定了坚实的基础。其次,我们提出了一个相关嵌入模块来计算 LR 和 Ref 图像之间的相关性。更具体地说,我们将从 LR 和 Ref 图像中提取的特征表示为转换器 [31] 中的查询和键,以获得硬注意图和软注意图。最后,我们提出了一个 hard-attention 模块和一个 soft-attention 模块来将 HR 特征从 Ref image 转移和融合到通过注意力图从 backbone 提取的 LR 特征中。 TTSR 的设计鼓励一种更准确的方法来搜索相关纹理并将其从 Ref 图像传输到 LR 图像。

此外,我们提出了一个跨尺度特征集成模块来堆叠纹理变换器,其中特征是跨不同的学习的缩放(例如,从 1× 到 4×)以实现更强大的特征表示。如图 1 所示,总体设计使我们的 TTSR 能够从 Ref 图像(以绿色表示)中搜索和传输相关纹理,与 SOTA 方法相比,这实现了更好的视觉效果。
本文的主要贡献是:
• 据我们所知,我们是最早将转换器架构引入图像生成任务的公司之一。更具体地说,我们提出了一种纹理转换器,其中包含四个密切相关的 SR 模块,它比 SOTA 方法有了显着改进。

• 我们提出了一种用于图像生成任务的新颖跨尺度特征集成模块,该模块使我们的方法能够通过堆叠多个纹理转换器来学习更强大的特征表示。

2.相关工作

在本节中,我们回顾了与我们的工作最相关的单图像超分辨率(SISR)和基于参考的图像超分辨率(RefSR)的先前工作。

2.1单图像超分辨率

近年来,基于深度学习的 SISR 方法比传统的非基于学习的方法取得了显着改进。 SISR 中基于深度学习的方法将此问题视为密集图像回归任务,该任务学习由 LR 和 HR 图像之间的 CNN 表示的端到端图像映射函数。Dong 等人。 [3] 提出了 SRCNN,它首先通过使用三层 CNN 来表示映射函数,将深度学习引入 SISR。董等。 [4] 通过用原始 LR 图像替换插值 LR 图像并在最后一层使用反卷积来放大特征图,进一步加快了 SR 过程。不久之后,Kim 等人。提出了 VDSR [14] 和 DRCN [15] 以及更深层的残差学习网络。施等。 [23] 用亚像素卷积层替换反卷积以减少棋盘伪影。残差块 [9] 在 SRResNet [16] 中被引入 SISR,并在 EDSR [17] 中得到改进。在残差块的帮助下,许多工作专注于设计更深或更宽的网络 [2,27,28]。张等。 [40] 和 Tong 等人。 [30] 采用密集块 [10] 来组合不同层次的特征。张等。 [39] 通过增加通道注意力来改进残差块。刘等人。 [18] 提出了一种用于图像恢复的非局部循环网络。戴等。 [2] 引入了二阶统计,用于更具辨别力的特征表示。上述方法使用均方误差(MSE)或平均绝对误差(MAE)作为忽略人类感知的目标函数。近年来,越来越多的作品以提高感知质量为目标。约翰逊等人。 [13] 将感知损失引入 SR 任务,而 SRGAN [16] 采用生成对抗网络 (GAN) [7] 并显示出视觉上令人满意的结果。 Sajjadi 等人。 [22] 使用基于 Gram 矩阵的纹理匹配损失来强制局部相似纹理,而 ESRGAN [32] 通过引入具有相对论对抗性损失的 RRDB 来增强 SRGAN。最近提出的 RSRGAN [38] 训练了一个排序器并使用排序内容损失来优化感知质量,从而实现了最先进的视觉效果。

2.2 Reference-based Image Super-Resolution

与 SISR 不同,RefSR 可以从 Ref 图像中获取更准确的细节。这可以通过多种方法来完成,例如图像对齐或补丁匹配。一些现有的 RefSR 方法 [33、36、43] 选择对齐 LR 和 Ref 图像。 Landmark [36] 通过全局配准将 Ref 图像与 LR 图像对齐以解决一个能量最小化问题。王等。 [33] 通过在特征合成之前反复应用非均匀变形来增强参考图像。 CrossNet [43] 采用光流来对齐不同比例的 LR 和 Ref 图像,并将它们连接到解码器的相应层中。然而,这些方法的性能在很大程度上取决于 LR 和 Ref 图像之间的对齐质量。此外,光流等对齐方法非常耗时,不利于实际应用。其他 RefSR 方法 [1, 41, 42] 采用“补丁匹配”方法来搜索适当的参考信息。 Boominathan 等人。 [1] 匹配 LR 和下采样参考图像的梯度特征之间的补丁。郑。等。 [42] 用卷积神经网络中的特征替换简单的梯度特征以应用语义匹配,并使用 SISR 方法进行特征合成。最近的工作 SRNTT [41] 在 LR 和 Ref 图像的 VGG [24] 特征之间应用了补丁匹配来交换相似的纹理特征。然而,SRNTT 忽略了原始特征和交换特征之间的相关性,并将所有交换特征均等地馈入主网络。为了解决这些问题,我们提出了一个纹理变换器网络,使我们的方法能够从 Ref 搜索相关纹理并将其传输到 LR图片。此外,通过使用建议的跨尺度特征集成模块堆叠多个纹理变换器,可以进一步提高我们方法的性能。

3. 方法

在本节中,我们介绍了所提出的用于图像超分辨率 (TTSR) 的纹理变换网络。在纹理变换器之上,我们提出了一个跨尺度特征集成模块(CSFI)来进一步提高模型性能。纹理转换器和 CSFI 将分别在 3.1 节和 3.2 节中讨论。一组用于优化建议网络的损失函数将在第 3.3.
在这里插入图片描述

3.1. Texture Transformer

纹理变换器纹理变换器的结构如图2所示。LR、LR↑和Ref分别表示输入图像、4×双三次上采样输入图像和参考图像。我们依次对 Ref 应用双三次下采样和上采样,并使用相同的因子 4× 以获得与 LR↑ 域一致的 Ref↓↑。纹理变换器将 Ref、Ref↓↑、LR↑ 和骨干产生的 LR 特征作为输入,输出合成的特征图,该图将进一步用于生成 HR 预测。纹理变换器中有四个部分:可学习纹理提取器(LTE)、相关嵌入模块(RE)、用于特征转移的硬注意模块(HA)和用于特征合成的软注意模块(萨)。细节将在下面讨论。

Learnable Texture Extractor 可学习的纹理提取器。

在 RefSR 任务中,参考图像的纹理提取是必不可少的,因为准确和适当的纹理信息将有助于 SR 图像的生成。我们没有使用像 VGG [24] 这样的预训练分类模型提取的语义特征,而是设计了一个可学习的纹理提取器,其参数将在端到端训练期间更新。这样的设计鼓励在 LR 和 Ref 图像之间进行联合特征学习,从而可以捕获更准确的纹理特征。纹理提取的过程可以表示为:
在这里插入图片描述

其中 LT E (·) 表示我们的可学习纹理提取器的输出。提取的纹理特征Q(查询),K(键)和V(值)表示转换器内部识别机制的三个基本元素,并将进一步用于我们的相关性嵌入模块。

Relevance Embedding. 相关性嵌入。

相关性嵌入旨在通过确定 Q 和 K 之间的相似性来嵌入 LR 和 Ref 图像之间的相关性。我们将 Q 和 K 展开成斑块,表示为 qi(i ∈ [1, HLR × WLR ]) 和 kj (j ∈ [1,HRef × WRef])。然后对于Q中的每个补丁qi和 K 中的 kj,我们通过归一化内积计算这两个补丁之间的相关性 ri,j:
在这里插入图片描述

相关性进一步用于获得hard-attention map和soft-attention map.

Hard-Attention.

我们提出了一个硬注意力模块来从 Ref 图像传输 HR 纹理特征 V。传统的注意机制对每个查询 qi 取 V 的加权和。然而,这样的操作可能会导致模糊效果,缺乏传递HR纹理特征的能力。因此,在我们的硬注意力模块中,我们只为每个查询 qi 从 V 中最相关的位置转移特征。更具体地说,我们首先计算一个硬注意力映射 H,其中第 i 个元素 hi (i ∈ [1 , HLR × WLR]) 是根据相关性 ri,j 计算的:
在这里插入图片描述

hi 的值可以被视为一个硬索引,它将 Ref 图像中最相关的位置与 LR 图像中的第 i 个位置表示不满。为了从 Ref 图像中获取转移的 HR 纹理特征 T,我们使用硬注意力图作为索引对 V 的展开斑块应用索引选择操作:
在这里插入图片描述

其中 ti 表示第 i 个位置的 T 值,该值是从 V 的第 hi 位置选择的。结果,我们获得了LR图像的HR特征表示T,该表示将进一步用于我们的软注意力模块。

Soft-Attention.

我们提出了一个软注意力模块来合成来自DNN主干的LR图像的转移HR纹理特征T和LR特征F的特征。在合成过程中,应增强相关的纹理转移,而不太相关的纹理应重新进行。为了实现这一点,从 ri,j 计算一个软注意力映射 S,以表示 T 中每个位置的转移属性特征的置信度:
在这里插入图片描述

其中 si 表示软注意图 S 的第 i 个位置。我们不是直接将注意图 S 应用到 T,而是首先将 HR 纹理特征 T 与 LR 特征 F 融合,以利用 LR 图像中的更多信息.这种融合的特征进一步逐元素乘以软注意图 S 并加回 F 以获得纹理转换器的最终输出。此操作可以表示为:
在这里插入图片描述

其中 Fout 表示合成的输出特征。Conv 和 Concat 分别表示卷积层和串联操作。运算符⊙表示特征映射之间的逐元素乘法。综上所述,纹理转换器可以有效地将相关的HR纹理特征从Ref图像转移到LR特征中,从而促进纹理生成的更精确过程。

3.2. Cross-Scale Feature Integration

我们的纹理转换器可以通过跨尺度特征集成模块以跨尺度方式进一步堆叠。该体系结构如图 3 所示。堆叠纹理变换器输出三个分辨率尺度(1×、2× 和 4×)的合成特征,从而可以将不同尺度的纹理特征融合到 LR 图像中。为了在不同尺度上学习更好的表示,受[25、37]的启发,我们提出了一个跨尺度特征集成模块(CSFI)来在不同尺度的特征之间交换信息。每次将 LR 特征上采样到下一个尺度时,都会应用 CSFI 模块。对于 CSFI 模块内的每个尺度,它通过上/下采样接收来自其他尺度的交换特征,然后在通道维度中进行级联操作。然后卷积层将特征映射到原始数量的通道中。在这样的设计中,从堆叠纹理变换器传输的纹理特征在每个尺度上交换,从而实现更强大的特征表示。这种跨尺度的特征集成模块进一步提高了我们方法的性能。
在这里插入图片描述

3.3. 损失函数

在我们的方法中有 3 个损失函数。总体损失可以解释为:
在这里插入图片描述

Reconstruction loss.重建损失。

第一个损失是重建损失:
在这里插入图片描述

其中 (C, H, W ) 是 HR 的大小。我们利用 L1 损失,与 L2 损失相比,它已被证明在性能上更敏锐并且更容易收敛。

Adversarial loss. 对抗损失。

生成对抗网络 [7] 被证明可以有效地生成清晰且视觉上令人满意的图像。这里我们采用 WGAN-GP [8],它提出了梯度范数的惩罚来代替权重裁剪,从而使训练更稳定,性能更好。这种损失可以解释为:
在这里插入图片描述

Perceptual loss. 知觉丧失。

知觉丧失已被证明有助于改善视觉质量,并且已被用于[13,16,22,41]。感知损失的关键思想是增强预测图像和目标图像之间特征空间的相似性。在这里,我们的知觉损失包含两部分:
在这里插入图片描述

其中第一部分是传统的感知损失,其中 CjHjWjφvgg(·) 表示第 i 层 VGG19 的特征图,andi(Ci, Hi, Wi) 表示特征图在。ISR 是预测的 SR 图像。感知损失的第二部分是转移感知损失,其中φlte(·)表示从所提出的LTE的第j-j层中提取的纹理特征图,(Cj,Hj,Wj)表示该层的形状。T 是图 2 中转移的 HR 纹理特征。这种转移感知损失约束预测的SR图像具有与转移的纹理特征T相似的纹理特征,这使得我们更有效地转移Ref纹理的方法。

3.4. 实现细节

可学习的纹理提取器包含 5 个卷积层和 2 个池化层,输出三种不同尺度的纹理特征。为了减少时间和 GPU 内存的消耗,相关性嵌入仅应用于最小的规模,并进一步传播到其他规模。对于鉴别器,我们采用与SRNTT [41]相同的网络,并删除所有BN层。在训练,我们通过随机和垂直翻转来增强训练图像,然后随机旋转 90◦、180◦ 和 270◦。每个小批次包含 9 个大小为 40 × 40 的 LR 补丁以及 9 个大小为 160 × 160 的 HR 和 Ref 补丁。Lrec、Ladv 和 Lper 的权重系数分别为 1、1e-3 和 1e-2。使用 β1 = 0.9、β2 = 0.999 和 ǫ =1e-8 的亚当优化,学习率为 1e-4。我们首先预热网络 2 个仅应用 Lrec 的时期。之后,所有损失都涉及训练另外 50 个纪元。

4.实验

4.1。数据集和指标

为了评估我们的方法,我们在最近提出的 RefSR 数据集 CUFED5 [41] 上训练和测试我们的模型。 CUFED5 中的训练集包含 11,871 对,每对由一个输入图像和一个参考图像组成。 CUFED5 测试集中有 126 张测试图像,每张图像附有 4 张不同相似度的参考图像。为了评估在 CUFED5 上训练的 TTSR 的泛化性能,我们在 Sun80 [26]、Urban100 [11] 和 Manga109 [20] 上额外测试了 TTSR。 Sun80 包含 80 张自然图像,每张都与几张参考图像配对。对于 Urban100,我们使用与 [41] 相同的设置将其 LR 图像视为参考图像。由于 Urban100 都是具有强自相似性的建筑物图像,因此这种设计实现了显式的自相似搜索和传输过程。对于同样缺少参考图像的 Manga109,我们随机抽取该数据集中的 HR 图像作为参考图像。由于这个数据集是由直线、曲线和平坦的彩色区域构成的,这些都是常见的模式。即使使用随机选取的 HR Ref 图像,我们的方法仍然可以利用这些常见模式并取得良好的效果。 SR 结果在 YCbCr 空间的 Y 通道上的 PSNR 和 SSIM 上进行评估。

4.2。评估

为了评估 TTSR 的有效性,我们将我们的模型与其他最先进的 SISR 和 RefSR 方法进行了比较。 SISR 方法包括 SRCNN [3]、MDSR [17]、RDN [40]、RCAN [39]、SRGAN [16]、ENet [22]、ES-RGAN [32]、RSRGAN [38],其中 RCAN 有近年来在 PSNR 和 SSIM 上都取得了最先进的性能。 RSRGAN 被认为可以实现最先进的视觉质量。至于 RefSR 方法,CrossNet [43] 和 SRNTT [41] 是最近最先进的两种方法,它们明显优于以前的 RefSR 方法。所有实验都是在 LR 和 HR 图像之间以 4 倍的比例因子进行的。

定量评估。为了公平比较,我们按照 SRNTT [41] 中的设置来训练所有方法在 CUFED5 训练集上,并在 CUFED5 测试集、Sun80、Urban100 和 Manga109 数据集上进行测试。对于 SR 方法,有一个事实是,使用对抗性损失进行训练通常可以获得更好的视觉质量,但会减少 PSNR 和 SSIM 的数量。因此,我们训练了我们模型的另一个版本,该版本仅针对名为 TTSR-rec 的重建损失进行了优化,以便在 PSNR 和 SSIM 上进行公平比较。表 1 显示了定量评估结果。红色数字表示最高分,而蓝色数字表示第二高分。如比较结果所示,TTSR-rec 在所有四个测试数据集上都明显优于最先进的 SISR 方法和最先进的 RefSR 方法。在旨在通过对抗损失获得更好视觉质量的方法中,我们的模型在 Sun80 和 Manga109 数据集上仍然具有最佳性能。在另外两个数据集 CUFED5 和 Urban100 上,我们的模型实现了与最先进模型相当的性能。定量比较结果证明了我们提出的 TTSR 优于最先进的 SR 方法。
在这里插入图片描述

定性评估。如图 5 所示,我们的模型在视觉质量上也取得了最佳性能。TTSR 可以从参考图像传输更准确的 HR 纹理以生成有利的结果,如图 5 中的前三个示例所示。即使参考图像不是与输入图像全局相关,我们的 TTSR 仍然可以从局部区域提取更精细的纹理并将有效纹理转移到预测的 SR 结果中,如图 5 中的最后三个示例所示。进一步验证我们的应用程序的卓越视觉质量proach,我们进行了一项用户研究,其中将 TTSR 与四种 SOTA 方法进行了比较,包括 RCAN [39]、RSR-GAN [38]、CrossNet [43] 和 SRNTT [41]。该用户研究涉及 10 个主题,在 CUFED5 测试集上收集了 2,520 票。对于每个比较过程,我们为用户提供两张图像,其中包括一张 TTSR 图像。要求用户选择视觉质量更高的那个。图 4 显示了我们的结果用户研究,其中 Y 轴上的值表示更喜欢 TTSR 而不是其他方法的用户年龄百分比。正如我们所看到的,所提出的TTSR明显优于其他方法,超过90%的用户投票支持我们的方法,这验证了TTSR良好的视觉质量。
在这里插入图片描述

在这里插入图片描述

4.3消融实验

5. 结论

本文提出了一种新型的图像超分辨率纹理转换器网络(TTSR),将HR纹理从Ref图像转换为LR图像。所提出的纹理转换器由一个可学习的纹理提取器组成,该提取器学习联合特征嵌入以进行进一步的衰减计算,以及两个基于注意力的模块,该模块从Ref图像中传输HR纹理。此外,所提出的纹理转换器可以与所提出的CSFI模块以跨尺度的方式堆叠,以学习更强大的特征表示。广泛的实验表明,我们的TTSR在定量和定性评估方面优于最先进的方法。将来,我们将进一步将提出的纹理转换器扩展到一般的图像生成任务。

相关文章:

【论文阅读】Learning Texture Transformer Network for Image Super-Resolution

Learning Texture Transformer Network for Image Super-Resolution 论文地址Abstract1. 简介2.相关工作2.1单图像超分辨率2.2 Reference-based Image Super-Resolution 3. 方法3.1. Texture TransformerLearnable Texture Extractor 可学习的纹理提取器。Relevance Embedding.…...

读字库写FM24C04

/*PCB机板增加读写24C64函数PAST 2017 12 26 08:10 CODE 7382*/ /*按11键进入手动选择&#xff0c;按12键进入参数设定界面 按1存1 2存2 3存3 15存0 16存1236 17读EEPROM显示正确 L1008 13775061792 ******/ #include <reg52.h>…...

boost::asio::ip::tcp::socket set_option

Boost asio 官方教程简介_asio::write-CSDN博客 boost::asio::ip::tcp::socket 是一个用于异步I/O操作的类&#xff0c;它是Boost.Asio库的一部分&#xff0c;专门用于处理TCP套接字。 以下是一个简单的使用 boost::asio::ip::tcp::socket 的例子&#xff0c;这个例子展示了如…...

华为鸿蒙HarmonyOS应用开发者高级认证答案

判断 1只要使用端云一体化的云端资源就需要支付费用&#xff08;错&#xff09; 2所有使用Component修饰的自定义组件都支持onPageShow&#xff0c;onBackPress和onPageHide生命周期函数。&#xff08;错&#xff09; 3 HarmonyOS应用可以兼容OpenHarmony生态&#xff08;对…...

ElasticSearch 与 OpenSearch:拉开性能差距

Elasticsearch 与 OpenSearch&#xff1a;扩大性能差距 对于任何依赖快速、准确搜索数据的组织来说&#xff0c;强大、快速且高效的搜索引擎是至关重要的元素。对于开发人员和架构师来说&#xff0c;选择正确的搜索平台可以极大地影响您的组织提供快速且相关结果的能力。在我们…...

Java构造器

构造器 无参构造器有参构造器构造方法VS成员方法总结 概念&#xff1a;也称构造方法、构造函数。作用是构造出来一个类的实例&#xff0c;确保对象得到初始化。 格式&#xff1a; 权限修饰符 类名(无参/有参){ }。 分类&#xff1a; 带参数&#xff1a;有参构造器不带参数&am…...

TiDB系列之:使用TiUP部署TiDB集群最新版本,同时部署TiCDC的详细步骤

TiDB系列之:使用TiUP部署TiDB集群最新版本,同时部署TiCDC的详细步骤 一、部署TiDB集群二、准备环境三、安装 TiUP四、安装TiUP cluster组件五、初始化包含TiCDC的TiDB集群拓扑文件六、检查和修复集群存在的潜在风险七、查看可以安装的tidb版本八、部署 TiDB 集群:九、查看集…...

【经典算法】LeetCode 72. 编辑距离(Java/C/Python3/Go实现含注释说明,中等)

题目描述 给定两个单词 word1 和 word2&#xff0c;计算出将 word1 转换成 word2 所使用的最少操作数。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符删除一个字符替换一个字符 原题&#xff1a;LeetCode 72 思路及实现 方式一&#xff1a;动态规划 思路…...

webstorm 常用插件

安装插件步骤&#xff1a; 打开软件&#xff0c;文件 -- 设置-- 插件 -- 输入插件名称 -- 安装 代码截图: code screenShots 先选中代码&#xff0c;按 ctrl shift alt a&#xff0c;就可截取选中的代码颜色注释: comments highlighter 对注释的文字改变颜色高亮成对符号: h…...

clang:在 Win10 上编译 MIDI 音乐程序(二)

先从 Microsoft C Build Tools - Visual Studio 下载 1.73GB 安装 "Microsoft C Build Tools“ 访问 Swift.org - Download Swift 找到 Windows 10&#xff1a;x86_64 下载 swift-5.10-RELEASE-windows10.exe 大约490MB 建议安装在 D:\Swift\ &#xff0c;安装后大约占…...

【redis】Redis数据类型(三)List类型

目录 List类型介绍特点 List数据结构附&#xff1a;3.2以前的版本(介绍一下压缩列表和双向链表)压缩列表ZipList双向链表LinkedList 常用命令lpush示例 lpushx示例 rpush示例 rpushx示例 LPOP示例 RPOP示例 BLPOP非阻塞行为阻塞行为相同的 key 被多个客户端同时阻塞在 MULTI/EX…...

Java面试题:多线程2

如何停止正在运行的线程 1,使用退出标志,使线程正常退出(run方法中循环对退出标志进行判断) 2,使用stop()方法强行终止(不推荐) 3,调用interrupt()方法中断线程 打断阻塞线程(sleep,wait,join),线程会抛出InterruptedException异常 打断正常的线程,可以根据打断状态来标记…...

T型槽地轨承载力是如何连接整个制造过程的强力桥梁(北重公司设计)

T型槽地轨承载力的定义和计算 T型槽地轨是一种用于工业设备运输和装配的关键组件。它由世界上各行各业的生产商广泛采用&#xff0c;其有效的承载力使其成为连接整个制造过程的强力桥梁。本文将介绍T型槽地轨的承载力以及相关的设计要点和应用。 承载力的定义和计算 承载力是…...

【Numpy】一文向您详细介绍 np.linspace()

【Numpy】一文向您详细介绍 np.linspace() &#x1f308; 欢迎莅临我的个人主页&#x1f448; 这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的计算机专业人士&#xff0c;热衷于分享技术见…...

VMware虚拟网卡网络适配器出现黄色感叹号

问题发生&#xff1a;VMware在使用Ubuntu的过程中突然卡死&#xff0c;强制关闭开启后就发生了网络无法连接 找到电脑的设备管理发现VMware的适配器出现黄色感叹号 解决方法&#xff1a; 下载软件ccleaner 扫描问题&#xff0c;懒得去找就修复了所有的问题 最后发现适配器…...

论生命价值

我们该如何定义一个人的生命价值&#xff0c;这是一个十分值得我们深思的问题&#xff0c;而谈论到生命的价值&#xff0c;我们先从非人的东西去谈论它的价值&#xff0c;从我们作为人的角度去思考价值&#xff0c;一个东西对我们有用&#xff0c;这个东西能够让我们的主观上的…...

基于Springboot的民航网上订票系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的民航网上订票系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…...

ubuntu开启message文件

环境&#xff1a;ubuntu 20.04 1、首先需要修改 /etc/rsyslog.d/50-default.conf 文件&#xff1b;源文件中message被注释&#xff0c;如下图&#xff1a; 2、打开注释&#xff1a; 3、重启服务 systemctl restart rsyslog.service 如此即可&#xff01;...

ISIS的基本概念

1.ISIS概述 IS-IS是一种链路状态路由协议&#xff0c;IS-IS与OSPF在许多方面非常相似&#xff0c; 例如运行IS-IS协议的直连设备之间通过发送Hello报文发现彼此&#xff0c;然后建立邻接关系&#xff0c;并交互链路状态信息。 CLNS由以下三个部分组成&#xff1a; CLNP&#xf…...

Vue 工程化开发入门

Vue开发的两种方式&#xff1a; 核心包传统开发模式&#xff1a;基于html/css/js文件&#xff0c;直接引入核心包&#xff0c;开发Vue工程化开发模式&#xff1a;基于构建工具的环境中开发Vue 这里选择Vue cli脚手架 进行开发&#xff0c;搜索教程自行下载。 组件化开发 一个页…...

车牌号识别系统:PyQT5+QT Designe+crnn/PaddleOCR+YOLO+OpenCV矫正算法。

PyQT5&QT Designecrnn/PaddleOCRYOLO传统OpenCV矫正算法。可视化的车牌识别系统项目。 车牌号识别系统 项目绪论1.项目展示2.视频展示3.整体思路 一、PyQT5 和 QT Designer1.简介2.安装3.使用 二、YOLO检测算法三、OpenCV矫正算法四、crnn/PaddleOCR字符识别算法五、QT界面…...

【基于MAX98357的Minimax(百度)长文本语音合成TTS 接入教程】

【基于MAX98357的Minimax&#xff08;百度&#xff09;长文本语音合成TTS 接入教程】 1. 前言2. 先决条件2.1 硬件准备2.2 软件准备2.3 接线 3. 核心代码3.1 驱动实现3.2 代码解析 4. 播放文本5. 结论 视频地址&#xff1a; SeeedXIAO ESP32S3 Sense【基于MAX98357的Minimax&am…...

秋招后端开发面试题 - JVM底层原理

目录 JVM底层原理前言面试题Java 对象的创建过程&#xff1f;什么是指针碰撞&#xff1f;什么是空闲列表&#xff1f;/ 内存分配的两种方式&#xff1f;JVM 里 new 对象时&#xff0c;堆会发生抢占吗&#xff1f;JVM 是怎么设计来保证线程安全的&#xff1f;/ 内存分配并发问题…...

VUE2从入门到精通(一)

**************************************************************************************************************************************************************************** 1、课程概述 【1】前置储备&#xff1a;HTMLCSSJS、WebAPI、Ajax、Node.js 【2】1天&…...

cmake进阶:文件操作之写文件

一. 简介 cmake 提供了 file() 命令可对文件进行一系列操作&#xff0c;譬如读写文件、删除文件、文件重命名、拷贝文件、创建目录等等。 接下来 学习这个功能强大的 file() 命令。 本文学习 CMakeLists.txt语法中写文件操作。 二. cmake进阶&#xff1a;文件操作之写文件…...

ubuntu 安装单节点HBase

下载HBase mkdir -p /home/ellis/HBase/ cd /home/ellis/HBase/ wget https://downloads.apache.org/hbase/2.5.8/hbase-2.5.8-bin.tar.gz tar -xvf hbase-2.5.8-bin.tar.gz安装java jdk sudo apt install openjdk-11-jdksudo vim /etc/profileexport JAVA_HOME/usr/lib/jvm/…...

HTTP 多个版本

了解一下各个版本的HTTP。 上个世纪90年代初期&#xff0c;蒂姆伯纳斯-李&#xff08;Tim Berners-Lee&#xff09;及其 CERN的团队共同努力&#xff0c;制定了互联网的基础&#xff0c;定义了互联网的四个构建模块&#xff1a; 超文本文档格式&#xff08;HTML&#xff09; …...

【DevOps】探索Linux命令行世界:深入了解Shell的力量

目录 一、Linux Shell 详细介绍 1. Shell基础概念 2. Shell的功能特性 3. 常用Shell命令与技巧 4. 高级Shell特性与实践 二、常见的Shell及其比较 1. Bash (Bourne Again SHell) 2. Zsh (Z Shell) 3. Fish (Friendly Interactive SHell) 4. Ksh (Korn SHell) 5. Csh …...

互斥量的使用

文章目录 前言一、互斥量与二进制信号量二、优先级反转与优先级继承三、递归锁 前言 通过学习上一章互斥量理论基础&#xff0c;这一章我们来做一些实验进行验证。 一、互斥量与二进制信号量 互斥量使用和二进制信号量类似 互斥量有优先级继承功能&#xff0c;二进制信号量没有…...

关于面试真题的压迫

1.请描述一下您在使用JavaScript进行DOM操作时&#xff0c;如何提高页面性能和用户体验&#xff1f; 使用事件委托&#xff1a;在父元素上监听事件&#xff0c;而不是为每个子元素都添加事件监听器。这样可以减少事件处理程序的数量&#xff0c;提高性能。 缓存DOM查询&#x…...

1700java进销存管理系统Myeclipse开发sqlserver数据库web结构java编程计算机网页项目

一、源码特点 java web进销存管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为sqlser…...

mysql数据库(排序与分页)

目录 一. 排序数据 1.1 排序规则 1.2 单列排序 1.我们也可以使用列的别名&#xff0c;给别名进行排序 2.列的别名只能在 ODER BY 中使用&#xff0c; 不能在WHERE中使用。 3.强调格式&#xff1a;WHERE 需要在 FROM 后&#xff0c; ORDER BY 之前 1.3 二级排序&…...

Android 实时监听Activity堆栈变化(系统应用)

private val mIActivityManager: IActivityManager ActivityManagerNative.asInterface(ServiceManager.getService(Context.ACTIVITY_SERVICE)) 方式一&#xff08;registerProcessObserver&#xff09; &#xff1a; mIActivityManager.registerProcessObserver(mIProcess…...

双目深度估计原理立体视觉

双目深度估计原理&立体视觉 0. 写在前面1. 双目估计的大致步骤2. 理想双目系统的深度估计公式推导3. 双目标定公式推导4. 极线校正理论推导 0. 写在前面 双目深度估计是通过两个相机的对同一个点的视差来得到给该点的深度。 标准系统的双目深度估计的公式推导需要满足:1)两…...

Redis探索之旅(基础)

目录 今日良言&#xff1a;满怀憧憬&#xff0c;阔步向前 一、基础命令 1.1 通用命令 1.2 五大基本类型的命令 1.2.1 String 1.2.2 Hash 1.2.3 List 1.2.4 Set 1.2.5 Zset 二、过期策略以及单线程模型 2.1 过期策略 2.2 单线程模型 2.3 Redis 效率为什么这么高 三…...

C语言/数据结构——每日一题(链表的中间节点)

一.前言 今天我在LeetCode刷到了一道单链表题&#xff0c;想着和大家分享一下这道题&#xff1a;https://leetcode.cn/problems/middle-of-the-linked-list。废话不多说让我们开始今天的知识分享吧。 二.正文 1.1题目描述 1.2题目分析 这道题有一个非常简便的方法——快慢指…...

这是用VS写的一个tcp客户端和服务端的demo

服务端&#xff1a; 客户端&#xff1a; 其实这里面的核心代码就两行。 客户端的核心代码&#xff1a; //套接字连接服务端 m_tcpSocket->connectToHost(_ip,_port);//通过套接字发送数据m_tcpSocket->write(ui.textEditSend->toPlainText().toUtf8());//如果收到信…...

代码随想录算法训练营day18 | 102.二叉树的层序遍历、226.翻转二叉树、101. 对称二叉树

102.二叉树的层序遍历 迭代法 层序遍历使用队列&#xff0c;同时记录每层的个数 class Solution:def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:res []if not root:return resqueue collections.deque()queue.append(root)while queue:size len…...

工厂自动化升级改造参考(01)--设备通信协议详解及选型

以下是整合了通信协议的特点、应用场景、优缺点以及常用接口方式的描述: 以太网/IP: 来历: 以太网是一种局域网技术,由罗伯特梅特卡夫和大卫博格在1973年开发。IP是网络层协议,负责在网络中的设备间传输数据。特点:基于标准的以太网技术,使用TCP/IP协议栈,支持高速数据传…...

数据结构与算法之经典排序算法

一、简单排序 在我们的程序中&#xff0c;排序是非常常见的一种需求&#xff0c;提供一些数据元素&#xff0c;把这些数据元素按照一定的规则进行排序。比如查询一些订单按照订单的日期进行排序&#xff0c;再比如查询一些商品&#xff0c;按照商品的价格进行排序等等。所以&a…...

VSCode通过SSH连接虚拟机Ubuntu失败

问题说明 最近使用VSCode通过SSH连接Ubuntu&#xff0c;通过VSCode访问Ubuntu进行项目开发&#xff0c;发现连接失败 在VSCode中进行SSH配置 这些都没有问题&#xff0c;但在进行连接时候出现了问题&#xff0c;如下&#xff1a; 出现了下面这个弹窗 解决方法 发现当…...

在Codelab对llama3做Lora Fine tune微调

Unsloth 高效微调大模型的工具&#xff0c;通过Unsloth微调Llama3, Mistral, Gemma 速度提升2-5倍&#xff0c;内存减少70%&#xff01; Codelab 创建一个jupyter notebook 选择 T4 GPU 安装Fine tune 相关的lib %%capture import torch major_version, minor_version torch…...

KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记13 - STM32的SDIO学习5 - 卡的轮询读写擦

KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记13 - STM32的SDIO学习5 - 卡的轮询读写擦 一、前情提要二、目标三、技术方案3.1 读写擦的操作3.1.1 读卡操作3.1.2 写卡操作3.1.3 擦除操作 3.2 一些技术点3.2.1 轮询标志位的选择不唯一3.2.2 写和擦的卡状态查询3.2.3 写的速度 四、代…...

【C++】HP-Socket(三):UdpClient、UdpServer、UdpCast、UdpNode的区别

1、简述 UDP是无连接的&#xff0c;在UDP传输层中并没有客户端和服务端的概念。但是可以在应用层定义客户端和服务端&#xff0c;可以灵活的互换客户端和服务端&#xff0c;或者同时既是客户端也是服务端。 HP-Socket中在应用层定义了四种UDP组件&#xff1a;UdpClient、UdpS…...

java设计模式六 访问者

访问者模式&#xff08;Visitor Pattern&#xff09;是一种设计模式&#xff0c;它允许你将算法附加到对象结构中的各个元素上&#xff0c;而不必修改对象结构本身。它主要用于处理对象结构非常稳定&#xff0c;但频繁需要在此结构上执行不同操作的场景。访问者模式通过将操作移…...

中间件研发之Springboot自定义starter

Spring Boot Starter是一种简化Spring Boot应用开发的机制&#xff0c;它可以通过引入一些预定义的依赖和配置&#xff0c;让我们快速地集成某些功能模块&#xff0c;而无需繁琐地编写代码和配置文件。Spring Boot官方提供了很多常用的Starter&#xff0c;例如spring-boot-star…...

libcity笔记:添加新模型(以RNN.py为例)

创建的新模型应该继承AbstractModel或AbstractTrafficStateModel 交通状态预测任务——>继承 AbstractTrafficStateModel类轨迹位置预测任务——>继承AbstractModel类 1 AbstractTrafficStateModel 2 RNN 2.1 构造函数 2.2 predict 2.3 calculate_loss...

Ansible---自动化运维工具

一、Ansible概述 1.1 Ansible简介 Ansible是一款自动化运维工具&#xff0c;通过ssh对目标主机进行配置、应用部署、任务执行、编排调度等操作。它简化了复杂的环境管理和自动化任务&#xff0c;提高了工作效率和一致性&#xff0c;同时&#xff0c;Ansible的剧本(playbooks)…...

5.Git

Git是一个分布式版本控制工具&#xff0c;主要用于管理开发过程中的源代码文件&#xff08;Java类、xml文件、html文件等&#xff09;。通过Git仓库来存储和管理这些文件&#xff0c;Git仓库分为两种 本地仓库&#xff1a;开发人员自己电脑上的Git仓库远程仓库&#xff1a;远程…...

探索中位数快速排序算法:高效寻找数据集的中间值

在计算机科学领域&#xff0c;寻找数据集的中位数是一个常见而重要的问题。而快速排序算法作为一种高效的排序算法&#xff0c;可以被巧妙地利用来解决中位数查找的问题。本文将深入探讨中位数快速排序算法的原理、实现方法以及应用场景&#xff0c;带你领略这一寻找中间值的高…...

ORACLE ADG 参数详解

1.DB_NAME:在主库上指定创建数据库时使用的名称。在物理备库上&#xff0c;使用主库的DB_NAME。 2.DB_UNIQUE_NAME:数据库唯一名&#xff0c;此参数决定了数据库服务名&#xff0c;服务名随唯一名的改变而改变。在ADG搭建过程中&#xff0c;数据库唯一名具有重要作用。 3.LOG…...

token存入前端的请求头中,后端获取【秒杀项目】

token存入前端的请求头中,后端获取【秒杀项目】 前言token存入前端的请求头中,后端获取【秒杀项目】token存入前端的请求头中后端获取 前言 2023-08-28 17:34:39 token存入前端的请求头中,后端获取【秒杀项目】 token存入前端的请求头中 function set_login_status() {var …...

绘唐2跟绘唐3有什么区别

绘唐2跟绘唐3有什么区别 这款产品的最大亮点在于其高度精准的语音克隆能力&#xff0c;利用先进的模型&#xff0c;能够捕捉到用户独特的音调、音高和调制方式&#xff0c;使用户能够以前所未有的方式复制和利用自己的声音。仅需10秒钟的录制时间&#xff0c;即可实现声音的克…...

代码随想录——二叉树的最大深度(Leetcode104)

题目链接 层序遍历 当遍历到二叉树每一层最后一个节点时&#xff0c;depth /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* …...

线上虚拟展厅需要具备哪些技术特点?

虚拟展厅需要具备三维建模与渲染技术、虚拟现实技术、交互技术、多媒体展示技术、网络传输技术、大数据分析与反馈技术、跨平台兼容性等技术特点。这些技术特点共同构成了虚拟展厅的核心竞争力&#xff0c;使其能够为用户提供逼真、生动、互动的参观体验。 虚拟展厅的技术特点主…...

2.go语言初始(二)

本篇博客涉及到go 的基础数据类型、 go 语言中的运算符、转义字符、格式化输出、字符串操作 go 语言中的运算符 在 go 语言中&#xff0c;基本数据类型主要包括以下几类&#xff1a;整数类型、浮点数类型、复数类型、布尔类型、字符串类型、字节类型&#xff08;byte&#xf…...