【论文阅读】ViTAE:Vision transformer advanced by exploring intrinsic inductive bias

ViTAE:Vision transformer advanced by exploring intrinsic inductive bias

    • 论文地址
    • 摘要:
    • 简介:
    • 3 方法论
      • 3.1 重温视觉变压器
      • 3.2 ViTAE
      • 3.3 缩减单元
      • 3.4 Normal cell
      • 3.5 模型细节
    • 4 训练
      • 4.1 Implementation details
      • 4.2 Comparison with the state-of-the-art
    • 5 局限性与讨论
    • 6 总结

论文地址

1、论文地址
2、论文源码地址

摘要:

Transformer 在各种计算机视觉任务中显示出巨大的潜力,因为它们使用自注意力机制对远程依赖进行建模的强大能力。然而,视觉变换器将图像视为一维视觉标记序列,在建模局部视觉结构和处理尺度方差时缺乏内在的归纳偏差 (IB)。或者,他们需要大规模的训练数据和更长的训练计划来隐式学习 IB。在本文中,我们提出了一种新的 Vision Transformer Advanced by Exploring intrinsic IB from convolutions,即 ViTAE。从技术上讲,ViTAE 有几个空间金字塔缩减模块,通过使用具有不同扩张率的多个卷积对输入图像进行下采样并将其嵌入到具有丰富的多尺度上下文的标记中。通过这种方式,它获得了一个内在的尺度不变性 IB,并且能够为各种尺度的对象学习鲁棒的特征表示。此外,在每个转换器层中,ViTAE 都有一个与多头自注意力模块并行的卷积块,其特征被融合并馈入前馈网络。因此,它具有内在的局部性 IB,并且能够协同学习局部特征和全局依赖性。在 ImageNet 和下游任务上的实验证明了 ViTAE 优于基线转换器和并发工作。源代码和预训练模型将在代码处提供。

简介:

变形金刚[79, 17, 40, 14, 46, 61]在NLP研究中显示出支配趋势,因为它们在通过自我注意机制建模长期依赖方面具有很强的能力[67,81,51]。变形器的这种成功和良好特性激发了许多将它们应用于各种计算机视觉任务的工作[19,100,97,80,7]。其中,ViT [19] 是开创性的纯变压器模型,它将图像嵌入到一系列可视令牌中,并使用堆叠的变压器块对它们之间的全局依赖关系进行建模。尽管它在图像分类方面取得了可喜的表现,但它需要大规模的训练数据和更长的训练计划。一个重要原因是ViT在建模局部视觉结构(例如,边缘和角落)和处理各种尺度的对象(如卷积)时缺乏内在的归纳偏差(IB)。或者,ViT 必须从大规模数据中隐式地学习这种 IB。

与视觉转换器不同,卷积神经网络 (CNN) 自然地配备了尺度不变性和局部性的内在 IB,并且仍然作为视觉任务中的普遍骨干 [26, 70 , 62, 8, 96]。 CNN 的成功激励我们探索视觉转换器中的内在 IB。我们首先分析 CNN 的上述两个 IB,即局部性和尺度不变性。计算相邻像素之间局部相关性的卷积擅长提取边缘和角点等局部特征。因此,CNN 可以在浅层 [94] 提供丰富的低级特征,然后通过大量顺序卷积 [32、68、71] 逐渐将这些特征聚合成高级特征。此外,CNN 具有层次结构,可以在不同层提取多尺度特征 [68、38、26]。此外,层内卷积还可以通过改变内核大小和膨胀率来学习不同尺度的特征[25、70、8、45、96]。因此,可以通过层内或层间特征融合获得尺度不变的特征表示。然而,CNN 不太适合模拟长程依赖性 2,而这是 transformer 的主要优势。一个有趣的问题出现了:我们能否利用 CNN 的良好特性来改进视觉转换器?最近,DeiT [76] 探索了将知识从 CNN 提取到 Transformer 以促进训练和提高性能的想法。但是,它需要一个现成的 CNN 模型作为老师,并且会消耗额外的训练成本。

与 DeiT 不同的是,我们通过重新设计本文中的网络结构,将内在 IB 显式引入视觉转换器。当前的视觉转换器总是获得具有单尺度上下文的标记 [19、93、80、86、47、69、77],并学习适应来自数据的不同尺度的对象。例如,T2T-ViT [93] 通过以软分割方式巧妙地生成令牌来改进 ViT。具体来说,它使用一系列 Tokens-to-Token 转换层来聚合单尺度相邻上下文信息,并逐步将图像结构化为 tokens。受 CNN 在处理尺度方差方面的成功启发,我们探索了变压器中的类似设计,即具有不同感受野的层内卷积 [70、91],以将多尺度上下文嵌入到标记中。这样的设计允许令牌携带对象在各种尺度上的有用特征,从而自然地具有内在的尺度不变性 IB,并明确地促进变换器更有效地从数据中学习尺度不变的特征。另一方面,低级局部特征是生成高级判别特征的基本要素。尽管 transformer 也可以从数据中学习浅层的这些特征,但它们在设计上并不像卷积那样熟练。最近,[89、43、21] 按顺序堆叠卷积层和注意力层,证明局部性是对全局依赖性的合理补偿。但是,这种串行结构在局部建模期间忽略了全局上下文(反之亦然)。为了避免这种困境,我们遵循“分而治之”的思想,建议并行地对局部性和远程依赖性进行建模,然后融合这些特征来解释两者。通过这种方式,我们使 transformers 能够更有效地学习每个块内的局部和远程特征。

从技术上讲,我们提出了一种新的 Vision Transformers Advanced by Exploring Intrinsic Inductive Bias (ViTAE),它是两种基本单元的组合,即还原细胞 (RC) 和正常细胞 (NC)。 RCs 用于对输入图像进行下采样并将其嵌入到具有丰富的多尺度上下文的 token 中,而 NCs 旨在联合建模 token 序列中的局部性和全局依赖性。此外,这两种类型的细胞共享一个简单的基本结构,即并行的注意模块和卷积层,然后是前馈网络(FFN)。值得注意的是,RC 有一个额外的金字塔缩减模块,具有不同扩张率的空洞卷积,以将多尺度上下文嵌入到标记中。按照 [93] 中的设置,我们堆叠三个缩减单元以将空间分辨率降低 1/16,并堆叠一系列 NC 以从数据中学习判别特征。 ViTAE 在数据效率和训练效率(见图 1)以及下游任务的分类准确性和泛化方面优于代表性视觉转换器。

我们的贡献有三方面。
• 首先,我们探索了变压器中两种类型的内在 IB,即尺度不变性和局部性,并证明了该思想在提高变压器特征学习能力方面的有效性。
• 其次,我们基于两个新的还原和正常单元设计了一个名为 ViTAE 的新变压器架构,以内在地结合上述两个 IB。拟议的 ViTAE 将多尺度上下文嵌入到标记中,并学习局部和远程特征有效。
• 第三,ViTAE在分类精度、数据效率、训练效率和下游任务的泛化方面优于代表性视觉变压器。ViTAE 在 ImageNet 上分别实现了 75.3% 和 82.0% 的顶级 1 精度,参数分别为 4.8M 和 23.6M。

3 方法论

3.1 重温视觉变压器

我们首先对视觉变压器进行简要回顾。为了使变压器适应视觉任务,ViT [19] 首先将图像 x ∈ RH×W×C 拆分为还原比为 p 的标记(即 xt ∈ R((H×W)/p2)×D),其中 H、W 和 C 表示高度、宽度和通道尺寸输入图像 D = Cp2 表示令牌维度。然后,在以元素方式添加位置嵌入之前,将额外的类标记连接到可视标记。生成的令牌将馈送到以下转换器层。每个变压器层由多头自注意力模块(MHSA)和前馈网络(FFN)两部分组成。

MHSA多头自我注意通过为每个头部使用不同的投影矩阵来扩展单头自我注意(SHSA)。具体来说,输入标记 xt 首先使用投影矩阵投影到查询 (Q)、键 (K) 和值 (V),即 Q,K,V =xtWQ,xtQK,xtQV,其中 WQ/K/V ∈ RD×D 分别表示查询、键和值的投影矩阵。然后,该 SHSA 模块重复 h 次以制定 MHSA 模块,其中 h 是磁头数。 h个头的输出特征沿着通道维度连接起来,形成MHSA模块的输出。

FFN FFN被放置在MHSA模块之上,并且相同且分别应用于每个令牌。它由两个线性变换组成,中间有一个激活函数。
此外,在 MHSA 和 FFN 之前和旁边分别添加了层归一化 [2] 和快捷方式。
在这里插入图片描述

3.2 ViTAE

ViTAE 的概述架构旨在将 CNN 中的固有 IB 引入视觉转换器。如图 2 所示,ViTAE 由两种类型的细胞组成,即 RC 和 NC。 RC 负责将多尺度上下文和局部信息嵌入到令牌中,而 NC 用于进一步对令牌中的局部性和远程依赖性进行建模。以图像 x ∈ RH ×W ×C 作为输入,使用三个 RC 分别将 x 逐渐下采样 4×、2× 和 2×。因此,RC 的输出标记的大小为 [H/16,W/16,D],其中 D 是标记维度(在我们的实验中为 64)。然后 RC 的输出标记被展平为 RHW/256×D,与类标记连接,并通过正弦波位置编码添加。接下来,令牌被送入以下 NC,这些 NC 保持令牌的长度。最后,使用来自最后一个 NC 的类标记的线性分类层获得预测概率。
在这里插入图片描述

3.3 缩减单元

我们设计了缩减单元,将多尺度上下文和局部信息嵌入到视觉标记中,而不是直接将图像分割和展平为基于线性图像块嵌入层的视觉标记,这引入了内在的尺度不变性和局部性 IB卷积。
从技术上讲,RC 有两个并行分支分别负责建模局部性和远程依赖性,然后是一个用于特征转换的 FFN。
我们将第 i 个 RC 的输入特征表示为 fi ∈ RHi ×Wi ×Di 。第一个 RC 的输入是图像 x。

在全局依赖分支中,fi 首先被送入金字塔缩减模块 (PRM) 以提取多尺度上下文,即
在这里插入图片描述

(2) 其中Convij(·)表示PRM中的第j个卷积层(PRMi(·))。它使用来自对应于第 i 个 RC 的预定义扩张率集 Si 的扩张率 sij。请注意,我们使用步幅卷积从预定义的缩减比率集 R 中按比率 ri 缩减特征的空间维度。conv 特征沿通道维度连接,即 f ms ∈ iR(Wi/p)×(Hi/p) ×(|Si|D),其中|S|表示 S 中扩张率的数量。

然后通过 MHSA 模块 iii 处理 fms 以建模远程依赖性,即
在这里插入图片描述

(3) 其中 Img2Seq(·) 是一个简单的重塑操作,用于将特征图展平为一维序列。

通过这种方式,fig 将多尺度上下文嵌入到每个标记中。此外,我们使用并行卷积模块 (PCM) 将局部上下文嵌入标记中,这些标记与 fig 融合如下:
在这里插入图片描述

(4) 这里,PCMi(·)表示PCM,它由三个堆叠的卷积层和一个Img2Seq(·)操作组成。值得注意的是,并行卷积分支通过使用步长卷积具有与 PRM 相同的空间下采样率。这样,令牌特征可以携带局部和多尺度上下文,这意味着 RC 通过设计获得局部 IB 和尺度不变 IB。融合的标记然后由 FFN 处理,重塑回特征图,并馈送到以下 RC 或 NC,即
在这里插入图片描述

(5) 其中 Seq2Img(·)是一个简单的重塑操作,用于将标记序列重塑回特征图。 F F Ni (·) 表示第 i 个 RC 中的 FFN。在我们的 ViTAE 中,三个 RC 按顺序堆叠以分别逐渐将输入图像的空间维度减少 4×、2× 和 2×。最后一个RC生成的feature maps大小为[H/16, W/16, D],然后被压扁成visual tokens,送入后面的NCs。

3.4 Normal cell

在这里插入图片描述

如图右下部分所示如图 2 所示,除了没有 PRM 外,NC 与还原单元RC具有相似的结构。由于16RCs后feature map的空间尺寸相对较小(1×),NCs中没有必要使用PRM。

给定来自第三个 RC 的 f3,我们首先将它与类标记 tcls 连接起来,然后将它添加到位置编码中以获得后续 NC 的输入标记 t。在这里,为了清楚起见,我们忽略了下标,因为所有 NC 都具有相同的架构,但可学习的权重不同。 tcls 在训练开始时随机初始化,并在推理期间固定。

与 RC 类似,令牌被送入 MHSA 模块,即 tg = MHSA(t)。
同时,它们被重塑为 2D 特征图并输入 PCM,即 tl = Img2Seq(PCM(Seq2Img(t)))。请注意,类标记在 PCM 中被丢弃,因为它与其他视觉标记没有空间连接。为了进一步减少 NC 中的参数,我们在 PCM 中使用组卷积。

MHSA 和 PCM 的特征然后通过逐元素求和融合,即 tlg = tg + tl。
最后,将 tlg 馈入 FFN 得到 NC 的输出特征,即 tnc = F F N (tlg ) + tlg 。
与 ViT [19] 类似,我们对最后一个 NC 生成的类标记应用层归一化,并将其馈送到分类头以获得最终分类结果。

3.5 模型细节

我们在实验中使用了两种ViTAE变体,以公平地比较具有sim-ilar模型大小的其他模型。它们的详细信息总结在第一个RC的表 1.In 中,默认的convo-lution核大小为7×7,跨度为4,膨胀率为S1 = [1, 2, 3, 4]。在以下两个RC中,卷积核大小分别为3×3,步幅为2,膨胀率分别为S2 = [1, 2, 3]和S3 = [1, 2]。由于令牌的空间维度减小,因此无需使用大内核和膨胀率。RC 和 NC 中的 PCM 包括三个卷积层,内核大小为 3 × 3。
在这里插入图片描述

4 训练

4.1 Implementation details

我们在标准 ImageNet [38] 数据集上训练和测试了提议的 ViTAE 模型,该数据集包含约 130 万张图像并涵盖 1k 类。除非明确说明,否则训练期间的图像大小设置为 224 × 224。我们使用 AdamW [48] 优化器与余弦学习速率调度器,并使用与 T2T [93] 完全相同的数据增强策略进行公平比较,涉及训练策略和模型大小。我们使用 512 的批量大小来训练所有模型,并将初始学习率设置为 5e-4。我们的模型结果可以在表 2 中找到,其中所有模型都在 8 个 V100 GPU 上训练了 300 个 epoch。这些模型建立在 PyTorch [57] 和 TIMM [82

4.2 Comparison with the state-of-the-art

我们在表 2 中将我们的 ViTAE 与具有相似模型大小的 CNN 模型和视觉转换器进行了比较。报告了 ImageNet 验证集上的 Top-1/5 准确度和实际 Top-1 准确度。我们将这些方法分为 CNN 模型、具有学习 IB 的视觉转换器和具有引入的固有 IB 的视觉转换器。与 CNN 模型相比,我们的 ViTAE-T 达到了 75.3% 的 Top-1 准确率,优于参数更多的 ResNet-18。 ViTAE 模型的真实 Top-1 精度为 82.9%,与参数比我们多四倍的 ResNet-50 相当。同样,我们的 ViTAE-S 使用 ResNet-101 和 ResNet-152 一半的参数实现了 82.0% 的 Top-1 精度,显示了通过设计从具有相应内在 IB 的特定结构学习局部和远程特征的优越性。
将 ViTAE-T 与 MobileNetV1 [31] 和 MobileNetV2 [65] 进行比较时也可以观察到类似的现象,其中 ViTAE 使用更少的参数获得更好的性能。与根据 NAS [73] 搜索的较大模型相比,我们的 ViTAE-S 在使用 384 × 384 图像作为输入时实现了相似的性能,这进一步显示了具有固有 IB 的视觉转换器的潜力。此外,在转换器中通过学习 IB,ViT 是第一个用于视觉识别的纯 transformer 模型。 DeiT 与 ViT 具有相同的结构,但使用不同的数据增强和训练策略来促进 transformer 的学习。 DeiT⚗ 表示使用现成的 CNN 模型作为教师模型来训练 DeiT,它以知识蒸馏的方式隐式地将 CNN 的固有 IB 引入到 transformer,在 ImageNet 数据集上表现出比 vanilla ViT 更好的性能。令人兴奋的是,我们的 ViTAE-T 参数更少,甚至优于蒸馏模型 DeiT⚗,证明了通过设计在变压器中引入本征 IB 的功效。此外,与其他具有显式固有 IB 的变压器相比,我们的参数较少的 ViTAE 也实现了相当或更好的性能。例如,ViTAE-T 实现了与 LocalVit-T 相当的性能,但参数减少了 1M,证明了所提出的 RC 和 NC 在引入内在 IB 方面的优越性。

5 局限性与讨论

在本文中,我们探索了两种类型的 IB,并通过建议的还原和正常单元将它们合并到变压器中。通过这两个单元的协作,我们的 ViTAE 模型在 ImageNet 上以快速收敛和高数据效率实现了令人印象深刻的性能。然而,由于计算资源的限制,我们没有缩放 ViTAE 模型并在大型数据集上训练它,例如 ImageNet-21K [38] 和 JFT-300M [30]。虽然目前还不清楚,但从以下初步证据来看,我们对其规模属性持乐观态度。如图 2 所示,由于跳跃连接和并行结构,我们的 ViTAE 模型可以看作是互补变换层和卷积层的单元内集成。根据图 3 所示的注意力距离分析,集成特性使 transformer 层和卷积层能够专注于它们擅长的领域,即建模远程依赖性和局部性。因此,ViTAE 很有可能从大规模数据中学习到更好的特征表示。此外,我们在本文中只研究了两个典型的 IB。在未来的研究中可以探索更多种类的 IB,例如构成视点不变性 [64]。

6 总结

在本文中,我们重新设计了变压器模块,
提出了两个基本单元(还原单元和普通单元),
将两种类型的固有电感偏置(IB)集成到变压器中,即局部性和尺度不变性,
从而产生了一种简单而有效的视觉变压器架构ViTAE。

大量实验表明,ViTAE在分类精度、数据效率、训练效率和下游任务的泛化能力等多方面都优于代表性视觉变压器。

我们计划将ViTAE扩展到大型或巨大的模型大小,并在未来的研究中在大型数据集上进行训练。
此外,还将调查其他类型的IB。我们希望这项研究将为以下将内在IB引入视觉转换器以及了解内在和习得IB的影响的研究提供有价值的见解。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linxu系统服务管理,systemd知识/进程优先级/平均负载/php进程CPU100%怎么解决系列知识!

shell脚本(命令)放后台 sleep 300& 放到后台运行,脚本或命令要全路径 nohup:用户推出系统进程继续工作 【功能说明】 nohup 命令可以将程序以忽略挂起信号的方式运行起来,被运行程序的输出信息将不会显示到终端 如…

华为鸿蒙应用--封装通用标题栏:CommonTitleBar(鸿蒙工具)-ArkTs

0、效果图 自定义通用标题栏 支持左、中、右常规标题栏设置; 支持自定义视图; 支持搜索功能 一、CommTitleBar代码 import router from ohos.router; import { Constants } from ../../constants/Constants; import { StyleConstants } from ../../…

PostgreSQL 把多余字段转JSON

核心SQL: json_agg(json_build_object(kgrq, a.kgrq, jgrq, a.jgrq, sgdd, a.sgdd))

理解与使用Linux设备树编译器(DTC)

这里写目录标题 设备树简介设备树编译器(DTC)安装DTC使用DTC实例:编辑设备树小结参考资料 Linux设备树编译器(DTC)是一个关键工具,用于处理嵌入式Linux系统中的设备树文件。本文将介绍设备树的概念、DTC的基…

基于Docker + Locust的数据持久化性能测试系统

前几天给大家分享了如何使用Locust进行性能测试,但是在实际使用中会发现存在压测的结果无法保存的问题,比如在分布式部署情况下进行压测,每轮压测完成需要释放资源删除容器重新部署后,这段时间的压测结果就都丢失了,如…

一文讲解Android车载系统camera架构 - EVS

Android的camera开发中,使用最多的是camera2 以及现在Google主推的cameraX 架构,而这两个架构主要针对的是手机移动端上camera的流程。 而今天介绍的EVS(Exterior View System)架构是不同于camera2上的手机架构,针对Automotive的版本&#x…

【源码阅读】 Golang中的database/sql库源码探究

Note:文章待完结 文章目录 前言一、整体目录结构二、driver包1、驱动相关driver.Driver2、驱动连接:driver.Conn3、预处理结构:Stmt4、执行结果 driver.Result5、查询结果:driver.Rows6、driver.RowsAffected7、driver.Value8、Va…

vue-quill-editor富文本插件控制字数显示

最终效果 富文本编辑框&#xff0c;只统计内容&#xff0c;不包含标签以及样式&#xff0c;超出最大字数限制提示。 具体代码 html <div class"relative"><quillEditorv-model"form.nutriSuggestion"ref"myQuillEditor7":options&quo…

03-JAVA设计模式-策略模式

策略模式 什么是策略模式 策略模式&#xff08;Strategy Pattern&#xff09;是行为设计模式之一&#xff0c;它使你能在运行时改变对象的行为。在策略模式中&#xff0c;一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为模式。 在策略模式中&#xff0c;…

uniapp微信小程序开发踩坑日记:由于图表数据渲染不出来,我第一次在项目中用watch函数监听数据变化

一、发现问题 在我们团队自己开发的微信小程序中&#xff0c;引入了Echarts图表库 然后突然有一天&#xff0c;后端队友反应图表渲染有问题。后面我去试了一下&#xff0c;确实20次里面必有一次数据渲染不出来 断定代码没问题&#xff0c;于是我们将其鉴定为玄学 二、问题原因…

【GitHub】主页简历优化

【github主页】优化简历 写在最前面一、新建秘密仓库二、插件卡片配置1、仓库状态统计2、Most used languages&#xff08;GitHub 常用语言统计&#xff09;使用细则 3、Visitor Badge&#xff08;GitHub 访客徽章&#xff09;4、社交统计5、打字特效6、省略展示小猫 &#x1f…

UDP和TCP(传输层)

这里写目录标题 UDPUDP的基本特点UDP协议报文格式 TCPTCP协议报文格式TCP特点可靠传输实现机制确认应答超时重传数据丢了应答报文丢了 小结 UDP UDP的基本特点 无连接不可靠传输面向数据报全双工 UDP协议报文格式 2个字节有效范围(无符号): 0 ~ 65535(2^16 - 1). 2个字节有效范…

用数据检验函数正确性,matlab2C

数据存取格式 filename1 g.txt; fid1 fopen(filename1,w); for i 1 : length(g)for j1:size(g,2)if(j1)fprintf(fid1,{%.16f,,g(i,j)); elseif(j>1&&j<151)fprintf(fid1,%.16f,,g(i,j)); elsefprintf(fid1,%.16f},\n,g(i,j));endend%fprintf(fid1,\n…

如何用Python语言实现远程控制4路控制器/断路器

如何用Python语言实现远程控制4路控制器/断路器呢&#xff1f; 本文描述了使用Python语言调用HTTP接口&#xff0c;实现控制4路控制器/断路器&#xff0c;支持4路输出&#xff0c;均可独立控制&#xff0c;可接入各种电器。 可选用产品&#xff1a;可根据实际场景需求&#xf…

Spring Web MVC入门(3)——响应

目录 一、返回静态页面 RestController 和 Controller之间的关联和区别 二、返回数据ResponseBody ResponseBody作用在类和方法的情况 三、返回HTML代码片段 响应中的Content-Type常见的取值&#xff1a; 四、返回JSON 五、设置状态码 六、设置Header 1、设置Content…

2024李卜常识开天斧

2024年&#xff0c;李卜常识开天斧课程以其独特的魅力吸引了众多学子。这门课程如同开天辟地的神斧&#xff0c;帮助我们打开常识知识的大门&#xff0c;引领我们走进一个全新的学习世界。在李卜老师的悉心指导下&#xff0c;我们逐渐掌握了各种常识知识&#xff0c;拓宽了视野…

leaftjs+turfjs+idw纯前端实现等值面绘图+九段线

最近有个绘制等值面图的需求。我们一般的实现路径是&#xff1a; 1.后台绘图&#xff0c;用surfer绘制好&#xff0c;给前端调用叠加到地图。 2.后台用python绘图&#xff0c;绘制好给前端调用&#xff0c;叠加到地图。 3.后台进行插值计算、地图裁剪、最终生成geojson文件或…

VS2019配合QT5.9开发IRayAT430相机SDK

环境配置 VS2019 QT5.9 编译器版本 MSVC2017_64添加系统环境变量&#xff08;完毕后重启电脑&#xff09; 从VS2019中下载Qt插件 从VS2019中添加单个编译组件 上述操作完成后用VS打开工程文件&#xff0c;工程文件地址 &#xff1a; C:\Users\86173\Desktop\IRCNETSDK_W…

初识 Linux

一、基础命令 0、 ls cd cat pwd 当前工作目录 find -name 测试.py 查找文件 grep "学院" 测试.py 查找字符串 "学院" 在文件 测试.py 中位置&#xff0c;输出所在的 行 1、重定向器 echo "Hello Kali Linux!" > Hello 创建 文件 Hel…

openssl3.2 - exp - 使用默认的函数宏,在release版中也会引入__FILE__

文章目录 openssl3.2 - exp - 使用默认的函数宏&#xff0c;在release版中也会引入__FILE__概述笔记验证是否__FILE__在release版下也能用&#xff1f;将openssl编译成release版的&#xff0c;看看CRYPTO_free()是否只需要一个参数就行&#xff1f;将工程中的openssl相关的库换…