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

Ghost-free High Dynamic Range Imaging withContext-aware Transformer

Abstract

高动态范围(HDR)去鬼算法旨在生成具有真实感细节的无鬼HDR图像。 受感受野局部性的限制,现有的基于CNN的方法在大运动和严重饱和度的情况下容易产生重影伪影和强度畸变。 本文提出了一种新的上下文感知视觉转换器(CA-VIT)用于高动态范围无鬼影成像。 CA-VIT被设计为一个双分支体系结构,可以联合捕获全局和局部依赖关系。 具体来说,全局分支采用基于窗口的变压器编码器来模拟远距离物体运动和强度变化,以解决重影问题。 对于局部分支,我们设计了一个局部上下文提取器(LCE)来捕获图像的短程特征,并利用通道关注机制在提取的特征中选择信息丰富的局部细节来补充全局分支。 通过将CA-VIT作为基本组件,我们进一步构建了HDR-Transformer这一层次化网络来重建高质量的无鬼影HDR图像。 在三个基准数据集上进行的大量实验表明,我们的方法在定性和定量方面都优于现有的方法,并大大减少了计算预算。 代码可在https://github.com/megvii-research/hdr-transformer获得。

1 Introduction

多帧高动态范围(HDR)成像的目的是通过合并多幅不同曝光度的低动态范围(LDR)图像来生成具有更宽动态范围和更真实细节的图像,如果它们完全对齐,则可以很好地融合到HDR图像[31,32,21,41,23,20]。 然而,在实际应用中,这种理想情况往往会受到摄像机运动和前景动态物体的破坏,在重建HDR结果中产生不利的重影伪影。 因此,为了获得高质量的无鬼HDR图像,人们提出了各种方法,通常称为HDR去鬼算法。

传统上,有几种方法提出在图像融合前通过对输入的LDR图像[2,10,14,42]进行对齐或剔除未对齐的像素[7,8,27,11,15]来去除重影伪影。 然而,精确的对齐是一个挑战,当有用的信息因不精确的像素拒绝而丢失时,整体HDR效果会降低。 因此,基于CNN的学习算法以数据驱动的方式通过挖掘深层特征来解决重影伪影。

现有的基于CNN的去重影方法主要可以分为两类。 在第一类中,使用单应性[9]或光流[1]对LDR图像进行预对准,然后使用CNN[13,29,28,37]执行多帧融合和HDR重建。 然而,单应性不能对齐前景中的动态目标,并且光流在存在遮挡和饱和时是不可靠的。 因此,第二类提出了带有隐式对准模块[39,19,4]或新的学习策略[25,30]的端-端网络来处理重影伪影,实现最先进的性能。 然而,当面对远距离物体移动和强度变化时,这种限制就会出现。 图 1显示了一个典型的场景,其中发生了大的运动和严重的饱和,在以前基于CNN的方法的结果中产生了意想不到的重影和失真伪影。 究其原因,在于卷积内在的局部性限制。 CNN需要堆叠深层以获得大的感受野,因此无法对长程依赖性进行建模(例如,由大运动引起的重影伪影)[24]。 此外,卷积与内容无关,因为在整个图像中共享相同的核,忽略了不同图像区域的长程强度变化[16]。 因此,探索具有远程建模能力的内容相关算法是进一步提高性能的要求。

视觉变压器(VIT)[6]由于其优越的远程建模能力,近年来受到越来越多的研究兴趣。 然而,我们的实验结果表明,两个主要问题阻碍了它在HDR去重影中的应用。 一方面,变压器缺乏CNN固有的归纳偏差,因此当在不充足的数据量上训练时不能很好地概括[6,16],尽管事实上用于HDR去重影的可用数据集有限,因为收集大量真实的标记样本成本高得令人望而却步。 另一方面,帧内和帧间的相邻像素关系对于恢复多帧间的局部细节是至关重要的,而纯变压器对于提取这种局部上下文是无效的。

为此,我们提出了一种新的上下文感知视觉转换器(CAVIT),该转换器采用双分支结构来同时捕获全局和局部依赖关系。 对于全局分支,我们采用基于窗口的多头变压器编码器来捕获远程上下文。 对于局部分支,我们设计了一个局部上下文提取器(LCE),通过卷积块提取局部特征映射,并通过信道关注机制在多帧中选择最有用的特征。 因此,拟议的CA-VIT使地方和全球背景以互补的方式发挥作用。 通过与CA-VIT相结合,我们提出了一种新的基于变换器的HDR-Transformer框架(简称HDR-Transformer)用于无鬼影HDR成像。

具体而言,所提出的HDR转换器主要由特征提取网络和HDR重构网络组成。 特征提取网络提取浅层特征,并通过空间注意力模块进行粗融合。 早期卷积层可以稳定视觉变压器的训练过程,空间注意力模块有助于抑制不期望的失调。 HDR重构网络以提出的CA-VIT为基本构件,分层构成。 CA-VITS既能模拟长程重影伪影,又能模拟局部像素关系,从而帮助重建无重影的高质量HDR图像(图1中展示了一个例子),而不需要堆叠非常深的卷积块。 综上所述,本文的主要贡献可归纳如下:

-我们提出了一个新的视觉转换器,称为CA-VIT,它可以充分利用全局和局部图像上下文依赖关系,显示出显着的性能改进比以前的同行。

-我们提出了一个新的HDR转换器,能够消除重影伪影和重建高质量的HDR图像,以较低的成本。 据我们所知,这是第一个基于Transformer的HDR去重影框架。

-我们在三个有代表性的基准HDR数据集上进行了广泛的实验,证明了HDR-Transformer对现有最先进方法的有效性。

2 Related Work

2.1 HDR Deghosting Algorithms

我们将现有的HDR去重影算法归纳为三类,即运动抑制方法、图像配准方法和基于CNN的方法。

Motion rejection methods

提出了一种基于运动抑制的LDR图像全局配准方法,然后对检测到的不对齐像素进行抑制。 格罗希等人基于对齐颜色差异生成错误映射以拒绝不匹配的像素[8]。 佩切等人使用输入LDR图像的中值阈值位图检测运动区域[27]。 雅各布斯等人使用加权强度方差分析确定失调位置[11]。 张等人[41]和Khan等人[15]提出分别计算LDR输入图像的梯度域权重图和概率图。 此外,Oh等人提出了一种用于检测重影区域的秩最小化方法[26]。 这些方法经常产生令人不快的HDR结果,因为丢失了有用的信息,同时拒绝像素。

Motion registration methods

运动配准方法依赖于在合并前将非参考LDR图像与参考图像对齐。 Begoni等人提出利用光流来预测运动矢量[2]。 康等人根据曝光时间将LDR图像强度转移到亮度域,然后估计光流以说明运动[14]。 齐默等人通过首先将LDR图像与光流配准来重建HDR图像[42]。 森等人提出了一种基于贴片的能量最小化方法,同时优化对准和HDR重建[33]。 胡等人提出了在变换域上使用亮度和梯度一致性来优化图像对齐[10]。 运动配准方法比运动拒绝方法具有更强的鲁棒性。 然而,当大的运动发生时,这种方法会产生可见的重影伪影。

CNN-based methods

最近提出了几种基于CNN的方法。 卡兰塔里等人提出了第一种基于CNN的动态场景多帧HDR成像方法。 他们使用CNN将LDR图像与光流对齐后混合在一起[13]。 吴等人通过将HDR成像描述为一个图像转换问题,开发了第一个非基于流的框架[37],而不是使用显式对齐,Yan等人采用空间关注模块来解决重影伪影[39]。 普拉巴卡尔等人提出了一种利用双侧引导上采样器生成HDR图像的有效方法[28],并进一步探索了零镜头和少镜头学习用于HDR去重影[30]。 最近,牛等人提出了第一个基于GaN的多帧HDR成像框架[25]。 基于CNNS的方法显示了优越的能力,并实现了最先进的性能。 然而,当面对大运动和极端饱和度时,仍然可以观察到重影伪影。

2.2 Vision Transformers

Transformers在自然语言处理领域取得了巨大的成功[36,5],其中多头自关注机制被用来捕捉词令牌嵌入之间的长程相关性。 最近,Vit[6]表明,纯变压器可以直接应用于不重叠的图像块序列,并在图像分类任务中表现得很好。 刘等人开发了SWIN变压器,一种通过移位窗口方案捕获交叉窗口上下文的分层结构[18]。 陈等人建立了IPT,一个用于低级计算机视觉任务的预训练变压器模型[3]。 梁等人扩展了用于图像恢复的SWIN变换,提出了SWINIR,在图像超分辨率和去噪方面达到了最先进的性能[16]。 与基于CNN的方法不同,我们的方法受到[18,16]的启发,并建立在变形金刚之上。

3 Method

3.1 CA-ViT

与现有的视觉转换器采用纯转换器编码器不同,我们提出了一种双分支上下文感知视觉转换器(CA-VIT),它可以同时挖掘全局和局部图像信息。 正如图中所描绘的 2(a),CA-VIT由全局变压器编码器分支和局部上下文提取分支构成。

 Global Transformer Encoder

对于全局分支,我们采用基于窗口的多头变压器编码器[6]来捕获远程信息。 变压器编码器由多头自关注(MSA)模块和带残差连接的多层感知器(MLP)组成。

 Local Feature Extractor

 最后,采用上下文融合层将全局上下文和局部上下文结合起来。 虽然可以使用其他变换函数(如线性层或卷积层)来实现上下文融合层,但在本文中,我们简单地通过元素添加来合并上下文,以减少附加参数的影响。

 3.2 HDR Deghosting

深度HDR去鬼影的任务是通过深度神经网络重建无鬼影的HDR图像。在之前的大部分作品中[13,37,39],我们以3张LDR图像(即Ii, i = 1,2,3)作为输入,并以中间的帧I2作为参考图像。为了更好地利用输入数据,首先将LDR图像{Ii}通过gamma校正映射到HDR域,生成gamma校正后的图像{\breve{I_{i}}ˇ}:

与现有的基于CNN的方法相比,我们提出了HDR转换器来处理HDR去重影,而不是堆叠非常深的CNN层来获得一个大的感受野。 我们的主要见解是,通过专门设计的DualBranch CA-VIT,远程重影可以在全局分支中很好地建模,本地分支有助于恢复细粒度细节。 我们将在下一节描述所提出的HDR变压器的体系结构。 

3.3 Overall Architecture of HDR-Transformer

如图所示 3、我们提出的HDR转换器的总体结构主要由两部分组成,即特征提取网络(图3(A))和HDR重构网络(图(B))。 给定三幅输入图像,首先通过空间注意力模块提取空间特征。 然后将提取的粗特征嵌入到基于变压器的HDR重建网络中,生成重建后的无鬼影HDR图像。

Feature Extraction Network

 HDR Reconstruction Network

 3.4 Loss Function

4 Experiments

4.1 Dataset and Implementation Details

Datasets

遵循前面的方法[37,39,40,25],我们在广泛使用的Kalantari等人的数据集[13]上训练我们的网络,该数据集由74个样本用于训练,15个样本用于测试。 Kalantari等人的数据集中的每个样本包括三个曝光值为-2、0、+2或-3、0、+3的LDR图像,以及一个真实HDR图像。 在训练过程中,我们首先从训练集中裁剪出大小为128×128的斑块,步幅为64。 然后我们应用旋转和翻转增强来增加训练大小。 我们在Kalantari等人的测试集上定量和定性地评价了我们的方法。 我们还对SEN等人进行评估。 [33]'s和Tursun等人[35]的数据集验证了我们方法的泛化能力。

Evaluation Metrics

我们使用PSNR和SSIM作为评价指标。 为了更精确地计算重建HDR图像与其对应的地面真值之间的PSNR-L、PSNR-μ、SSIM-L和SSIM-μS分数。 “-L”和“-μ"分别表示线性域值和调音域值。 假定HDR图像通常显示在LDR显示器上,则Tonemapped域中的度量更准确地反映重建HDR图像的质量。 此外,我们使用HDR-VDP-2[22]进行评估,这是专门为评估HDR图像的质量而开发的。

Implementation Details

我们的HDR-Transformer是由PyTorch实现的。 我们使用ADAM优化器,初始学习速率为2e-4,分别设置β1为0.9,β2为0.999和1e-8。 我们从零开始训练网络,批量大小为16,100个纪元使它能够收敛。 整个培训在四个NVIDIA 2080TI GPU上进行,花费大约两天时间。

4.2 Comparison with State-of-the-art Methods

Results on Kalantari et al.’s Dataset

我们首先将所提出的HDR-Transformer的结果与几种最先进的方法进行了比较,其中包括两种基于补丁匹配的方法(Sen et al.[33]和Hu et al.[10])和五种基于CNN的方法(Kalantari et al.[13],DeepHDR[37],AhdrNet[39],NhdrRNet[40]和HDR-Gan[25])。 我们还与一个小版本的Swinir[16]进行了比较,因为原始的Swinir[16]不能收敛于有限的数据集。 在基于深度学习的方法中,Kalantari等[13]采用光流对齐输入LDR图像,而DeepHDR[37]使用单应性对齐背景。 相比之下,左边的方法和我们的HDR变压器不需要任何预对准。 我们报告了定量和定性的比较结果,因为这个测试集包含地面真理HDR图像。

Quantitative results

表1列出了定量结果。 为了公平起见,本文借鉴了HDR-GAN[25]的前人工作结果,并对Kalantari等人的数据集的15个测试样本进行了平均。 从表1中可以得出几个结论。 首先,所有基于深度学习的算法都表现出明显的性能优势。 其次,由于上述原因,Swinir采用的纯变压器编码器性能不佳。 第三,所提出的HDR变压器在PSNR-L和PSNR-μ方面分别比最近发表的HDR-GAN[25]高0.6dB和0.4dB,证明了我们方法的有效性。

Qualitative results

为了公平的比较,所有定性结果都是使用作者提供的代码获得的,并使用相同的设置在Photomatix Pro中进行了调色。 图 4展示了一个包含饱和和大运动的棘手场景。 第一行显示输入的LDR图像,我们的Tonemaped HDR结果,以及相应的缩放LDR补丁从左到右。 第二行列出了比较的HDR结果,其中两个比较位置分别以红色和蓝色突出显示。 可以看到,红色盒状区域在三个输入LDR图像中遭受严重的强度变化,并导致长程饱和。 以往的方法消除了头部轻微运动引起的重影伪影,但不能产生对面部饱和度区域细节的幻觉,导致颜色失真和细节不一致。 蓝框贴片显示了由手引起的大的运动区域,基于贴片匹配的方法无法发现正确的区域,而基于CNN的方法无法处理远距离运动,导致重建HDR图像中的重影伪影。 相反,提出的HDR-Transformer重建无鬼的结果,同时在这些区域产生更多视觉愉悦的细节幻觉。

Results on the Datasets w/o Ground Truth

为了验证该方法的泛化能力,我们对Sen等人进行了评估。 [33]'s和Tursun等人[35]的数据集。 如图所示 5、由于两个数据集都没有真实感HDR图像,我们报告了定性结果。 就像在图看到的那样 5(a),当遭受长程饱和时,基于CNN的算法AHDRNet[39]和HDR-GAN[25]在饱和边界上产生不希望的畸变。 基于Transformer的方法Swinir[16]性能更好,但由于局部上下文建模效率低,仍然存在明显的失真。 相反,提出的HDR-Transformer生成更精确的边界(最好与相应的LDR补丁进行比较),证明了我们方法的上下文感知建模能力。 图 5(b)展示了一个钢琴光谱饱和的场景。 以前的方法丢失了高频细节,产生了模糊的结果,而我们的方法比它们产生了更多的幻觉细节。

Analysis of Computational Budgets

我们还将推理次数和模型参数与前人的工作进行了比较。 如表2所示,基于补丁匹配的方法[33,10]需要超过60秒来融合1.5MP的LDR序列。 在基于CNN的方法中,Kalantari等人[13]由于光流预处理耗时较长,因此比剩下的非流方法花费更多的时间。 deepHDR[37]和nhdrrnet[40]消耗的推理时间较少,但需要大量的参数。 AHDRNet[39]和HDR-GAN[25]利用其精心设计的体系结构,在性能和效率上取得了更好的平衡。 相比之下,HDR-Transformer仅用一半的计算预算就胜过了目前最先进的方法HDR-GAN[25]。

4.3 Ablation Study

5 Conclusions

本文提出了一种双分支上下文感知视觉转换器(CA-VIT),克服了VITS中局部性的不足。 我们对标准VITS进行了扩展,引入了局部特征提取器,从而可以同时对全局和局部图像上下文进行建模。 此外,我们还介绍了HDR-Transformer,这是一个用于无GhostFree高动态范围成像的特定任务框架。 HDR-Transformer结合了Transformer和CNNs的优点,其中Transformer编码器和局部上下文提取器分别用于建模长程重影伪影和短程像素关系。 大量的实验表明,所提出的方法达到了最先进的性能。

相关文章:

Ghost-free High Dynamic Range Imaging withContext-aware Transformer

Abstract 高动态范围(HDR)去鬼算法旨在生成具有真实感细节的无鬼HDR图像。 受感受野局部性的限制,现有的基于CNN的方法在大运动和严重饱和度的情况下容易产生重影伪影和强度畸变。 本文提出了一种新的上下文感知视觉转换器(CA-VIT)用于高动态…...

过来,我告诉你个秘密:送给程序员男友最好的礼物,快教你对象学习磁盘分区啦!小点声哈,别让其他人学会了!

[原文连接:来自给点知识](过来,我告诉你个秘密:送给程序员男友最好的礼物,快教你对象学习磁盘分区啦!小点声哈,别让其他人学会了!) 再唱不出那样的歌曲 听到都会红着脸躲避 虽然会经常忘了我依然爱着你 …...

Cadence+硬件每日学习十个知识点(38)23.8.18 (Cadence的使用,界面介绍)

文章目录 1.Cadence有共享数据库的途径2.Cadence启动3.Cadence界面菜单简介(file、edit、view、place、options)4.Cadence界面的图标简介5.我的下载资源有三本书 1.Cadence有共享数据库的途径 答: AD缺少共享数据库的途径,目前我…...

React Native Expo项目,复制文本到剪切板

装包: npx expo install expo-clipboard import * as Clipboard from expo-clipboardconst handleCopy async (text) > {await Clipboard.setStringAsync(text)Toast.show(复制成功, {duration: 3000,position: Toast.positions.CENTER,})} 参考链接&#xff1a…...

React源码解析18(5)------ 实现函数组件【修改beginWork和completeWork】

摘要 经过之前的几篇文章,我们实现了基本的jsx,在页面渲染的过程。但是如果是通过函数组件写出来的组件,还是不能渲染到页面上的。 所以这一篇,主要是对之前写得方法进行修改,从而能够显示函数组件,所以现…...

vscode ssh 远程 gdb 调试

一、点运行与调试,生成launch.json 文件 二、点添加配置,选择GDB 三、修改启动程序路径...

云原生 AI 工程化实践之 FasterTransformer 加速 LLM 推理

作者:颜廷帅(瀚廷) 01 背景 OpenAI 在 3 月 15 日发布了备受瞩目的 GPT4,它在司法考试和程序编程领域的惊人表现让大家对大语言模型的热情达到了顶点。人们纷纷议论我们是否已经跨入通用人工智能的时代。与此同时,基…...

PHP酒店点菜管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 酒店点菜管理系统是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 代码下载 https://download.csdn.net/download/qq_41221322/88232051 论文 https://…...

【面试复盘】知乎暑期实习算法工程师二面

来源:投稿 作者:LSC 编辑:学姐 1. 自我介绍 2. 介绍自己的项目 3. 编程题 判断一个链表是不是会文链表class ListNode: def __init__(self, val, nextNone):self.val valself.next nextdef reverse(head):pre Nonep headwhile p ! No…...

内网穿透和服务器+IP 实现公网访问内网的区别

内网穿透和服务器IP 实现公网访问内网的区别在于实现方式和使用场景。 内网穿透(Port Forwarding):内网穿透是一种通过网络技术将公网用户的请求通过中转服务器传输到内网设备的方法。通过在路由器或防火墙上进行配置,将公网请求…...

JAVA权限管理 助力企业精细化运营

在企业的日常经营中,企业人数达到一定数量之后,就需要对企业的层级和部门进行细分,建立企业的树形组织架构。围绕着树形组织架构,企业能够将权限落实到个人,避免企业内部出现管理混乱等情况。权限管理是每个企业管理中…...

金融语言模型:FinGPT

项目简介 FinGPT是一个开源的金融语言模型(LLMs),由FinNLP项目提供。这个项目让对金融领域的自然语言处理(NLP)感兴趣的人们有了一个可以自由尝试的平台,并提供了一个与专有模型相比更容易获取的金融数据。…...

LeetCode--HOT100题(30)

目录 题目描述:24. 两两交换链表中的节点(中等)题目接口解题思路代码 PS: 题目描述:24. 两两交换链表中的节点(中等) 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节…...

Springboot 实践(3)配置DataSource及创建数据库

前文讲述了利用MyEclipse2019开发工具,创建maven工程、加载springboot、swagger-ui功能。本文讲述创建数据库,为项目配置数据源,实现数据的增删改查服务,并通过swagger-ui界面举例调试服务控制器 创建数据库 项目使用MySQL 8.0.…...

【问题整理】Ubuntu 执行 apt-get install xxx 报错

Ubuntu 执行 apt-get install xxx 报错 一、问题描述: 执行apt-get install fcitx时,报如下错误 grub-pc E: Sub-process /usr/bin/dpkg returned an error code (1)二、解决方法: 尝试修复依赖问题: sudo apt-get -f install这个命令会尝试修复系统…...

Java课题笔记~ SpringBoot简介

1. 入门案例 问题导入 SpringMVC的HelloWord程序大家还记得吗? SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程 原生开发SpringMVC程序过程 1.1 入门案例开发步骤 ①:创建新模块&#…...

一种基于springboot、redis的分布式任务引擎的实现(一)

总体思路是,主节点接收到任务请求,将根据任务情况拆分成多个任务块,将任务块标识的主键放入redis。发送redis消息,等待其他节点运行完毕,结束处理。接收到信息的节点注册本节点信息到redis、开启多线程、获取任务块、执…...

基于IDE Eval Resetter延长IntelliJ IDEA等软件试用期的方法(包含新版本软件的操作方法)

本文介绍基于IDE Eval Resetter插件,对集成开发环境IntelliJ IDEA等JetBrains公司下属的多个开发软件,加以试用期延长的方法。 我们这里就以IntelliJ IDEA为例,来介绍这一插件发挥作用的具体方式。不过,需要说明使用IDE Eval Rese…...

RocketMQ消费者可以手动消费但无法主动消费问题,或生成者发送超时

1.大多数是配置问题 修改rocketmq文件夹broker.conf 2.配置与集群IP或本地IPV4一样 重启 在RocketMQ独享实例中支持IPv4和IPv6双栈,主要是通过在网络层面上同时支持IPv4和IPv6协议栈来实现的。RocketMQ的Broker端、Namesrv端和客户端都需要支持IPv4和IPv6协议&…...

【数据库系统】--【2】DBMS架构

DBMS架构 01DBMS架构概述02 DBMS的物理架构03 DBMS的运行和数据架构DBMS的运行架构DBMS的数据架构PostgreSQL的体系结构RMDB的运行架构 04DBMS的逻辑和开发架构DBMS的层次结构DBMS的开发架构DBMS的代码架构 05小结 01DBMS架构概述 02 DBMS的物理架构 数据库系统的体系结构 数据…...

第三章 图论 No.13拓扑排序

文章目录 裸题:1191. 家谱树差分约束拓扑排序:1192. 奖金集合拓扑序:164. 可达性统计差分约束拓扑序:456. 车站分级 拓扑序和DAG有向无环图联系在一起,通常用于最短/长路的线性求解 裸题:1191. 家谱树 119…...

喜报 | 擎创再度入围IDC中国FinTech 50榜单

8月16日,2023年度“IDC中国FinTech 50”榜单正式揭晓,擎创科技继2022年入选该榜单后,再次以创新者姿态成功入选,并以技术赋能业务创新,成为中国金融科技领域创新与活力的重要贡献者。 “IDC中国FinTech 50”旨在评选出…...

【C++ 记忆站】引用

文章目录 一、引用概念二、引用特性1、引用在定义时必须初始化2、一个变量可以有多个引用3、引用一旦引用一个实体,再不能引用其他实体 三、常引用四、使用场景1、做参数1、输出型参数2、大对象传参 2、做返回值1、传值返回2、传引用返回 五、传值、传引用效率比较六…...

Hlang--用Python写个编程语言-变量的实现

文章目录 前言语法规则表示次幂实现变量实现优先级实现步骤解析关键字语法解析解释器总结前言 先前的话,我们终于是把我们整个架子搭起来了,这里重复一下我们的流程,那就是,首先,我们通过解析文本,然后呢遍历文本当中的我们定义的合法关键字,然后呢,把他们封装为一个T…...

多维时序 | MATLAB实现PSO-CNN-BiLSTM多变量时间序列预测

多维时序 | MATLAB实现PSO-CNN-BiLSTM多变量时间序列预测 目录 多维时序 | MATLAB实现PSO-CNN-BiLSTM多变量时间序列预测基本介绍模型特点程序设计参考资料 基本介绍 本次运行测试环境MATLAB2021b,MATLAB实现PSO-CNN-BiLSTM多变量时间序列预测。代码说明&#xff1a…...

实现Java异步调用的高效方法

文章目录 为什么需要异步调用?Java中的异步编程方式1. 使用多线程2. 使用Java异步框架 异步调用的关键细节结论 🎉欢迎来到Java学习路线专栏~实现Java异步调用的高效方法 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT陈寒的博…...

批量提取文件名到excel,详细的提取步骤

如何批量提取文件名到excel?我们的电脑中可能存储着数量非常多的电子文件,现在需要快速将这些文件的名称全部提取到Excel中。虽然少量数据可以通过复制粘贴的方式轻松完成,但是对于上万个数据而言,复制粘贴都是行不通的&#xff0…...

C#中的泛型约束可以用在以下几个地方?

1.泛型类型参数&#xff1a; 在定义泛型类型或泛型方法时&#xff0c;可以使用泛型约束来限制泛型类型参数的类型。这可以确保类型参数满足特定的条件&#xff0c;从而在编译时捕获错误并提供更安全和可靠的代码。 public class MyClass<T> where T : IComparable<T&…...

Linux Vm上部署Docker

创建ubutu虚拟机并远程连接&#xff0c; 参考 https://blog.csdn.net/m0_48468018/article/details/132267096 在终端中切换到root用户&#xff0c;并安装docker服务 2.1 切换到root用户 sudo su2.2 安装docker服务 , 参考 https://docs.docker.com/engine/install/ubuntu/ …...

ubuntu bind dns服务配置

sudo apt-get install bind9 内网搭建DNS服务器&#xff0c;大多数是解析纯内网地址使用。但是偶尔也需要解析外网的地址&#xff0c;所以我们可以配置DNS没有添加A记录的URL时&#xff0c;forward到外网DNS服务器或者内网的其他DNS服务器解析。 打开配置文件&#xff1a; sud…...

安卓的代码加固和其他安全问题

文章目录 安卓加固apk文件结构dex加固过程 其它安全问题 安卓加固 从App的加固技术来看:主流分为dex加密和so加密,目前来看保护dex文件更为重要,因为dex反编译后的java代码可读性更强。 android-ndk: Native Development Kit 官网解释&#xff1a;这套工具使您能在 Android 应…...

关于Linux Docker springboot jar 日志时间不正确 问题解决

使用Springboot项目的jar&#xff0c;制作了一个Docker镜像&#xff0c;启动该镜像后发现容器和容器中的Springboot 项目的日志时间不正确。 解决 查看容器时间命令为&#xff1a; docker exec 容器id date 1. 容器与宿主机同步时间 在启动镜像时候把操作系统的时间通过&q…...

提高批量爬虫工作效率

大家好&#xff01;作为一名专业的爬虫程序员&#xff0c;我今天要和大家分享一些关于提高批量爬虫工作效率的实用技巧。无论你是要批量采集图片、文本还是视频数据&#xff0c;这些经验都能帮助你在大规模数据采集中事半功倍。废话不多说&#xff0c;让我们开始吧&#xff01;…...

E96系列电阻阻值和代码、乘数对照表

1、为什么要用代码表示&#xff1f; 0805封装还可以简单易懂写下四位丝印&#xff0c;比如10K的1002&#xff0c;但0603的封装上面再想写下四位丝印就没空间了&#xff0c;就算写了也不容易看不清。 2、E96系列电阻阻值和代码、乘数对照表 下面是E96系列的对照表&#xff0c;…...

基于CentOS7.9安装部署docker(简洁版)

安装部署 1基于官方脚本安装&#xff08;不推荐 不能自行选择版本&#xff09; 官方文档&#xff1a;https://docs.docker.com/engine/install/centos/ 2 使用yum安装 阿里云文档&#xff1a;docker-ce镜像_docker-ce下载地址_docker-ce安装教程-阿里巴巴开源镜像站 # ste…...

MySQL常用练手题目

数据库表名和字段设计 1.学生表 Student(s_id,s_name,s_birth,s_sex) 学生编号,学生姓名, 出生年月,学生性别 2.课程表 Course(c_id,c_name,t_id) 课程编号, 课程名称, 教师编号 3.教师表 Teacher(t_id,t_name) 教师编号,教师姓名 4.成绩表 Score (s_id,c_id,s_score) 学生编号…...

Oracle字段长度不足位数补零

Oracle字段长度不足位数补零 有时候从数据库中取出的月份值是1&#xff0c;而不是01&#xff0c;该怎么办呢 SELECTLPAD( CODE_MONTH, 2, 0 ) FROMtb_cube_TY001 WHERECODE_BM_MEATYPE TY20 AND code_measure MYLX01 AND code_month <> ~ AND CODE_ENTITY 01A AND…...

<数据结构与算法>二叉树堆的实现

目录 前言 一、树的概念及结构 1 树的概念 2 树的相关概念 二、二叉树的概念及结构 1.二叉树的概念 2. 特殊的二叉树 3. 二叉树的性质 4.二叉树的存储结构 三、二叉树的顺序结构及实现 1.堆的性质 2.堆的插入 3.堆的实现 堆的结构体 HeapInit 初始化 HeapPush 插入 HeapPop 删…...

FPGA:RS编码仿真过程

FPGA&#xff1a;RS编码仿真过程 RS码是一种纠错性能很强的线性纠错码&#xff0c;能够纠正随机错误和突发错误。RS码是一种多进制BCH码&#xff0c;能够同时纠正多个码元错误。 之前已经记录了在MATLAB中进行rs编解码的过程&#xff0c;现在利用FPGA的IP核实现RS编码的过程&…...

RocketMQ 5.0 架构解析:如何基于云原生架构支撑多元化场景

作者&#xff1a;隆基 本文将从技术角度了解 RocketMQ 的云原生架构&#xff0c;了解 RocketMQ 如何基于一套统一的架构支撑多元化的场景。 文章主要包含三部分内容。首先介绍 RocketMQ 5.0 的核心概念和架构概览&#xff1b;然后从集群角度出发&#xff0c;从宏观视角学习 R…...

Android su

1. userdebug和user版本 2. 关闭selinux system/core diff --git a/init/selinux.cpp b/init/selinux.cpp index 5a0255acd..787917274 100644--- a/init/selinux.cpp b/init/selinux.cpp -104,6 104,8 EnforcingStatus StatusFromCmdline() { } bool IsEnforcing() { …...

微信小程序真机调试异常cmdId 1006, errCode-50011-已解决

cmdId 1006, errCode-50011 起因 小程序在模拟器上预览没问题,真机调试和体验版首页打不开,点展开显示cmdId 1006, errCode-50011 解决 查了下1006, 说是广告, 我没接广告,这个也不是错误码 1006广告组件被驳回你的广告正在被审核,无法展现广告后来找到几个类似的帖子…...

36.SpringMVC视图

SpringMVC视图 SpringMVC中的视图是View接口&#xff0c;视图的作用渲染数据&#xff0c;将模型Model中的数据展示给用户 SpringMVC视图的种类很多&#xff0c;默认有转发视图(InternalResourceView)和重定向视图(RedirectView) 配置视图&#xff1a; 当工程引入jstl的依赖&a…...

LeetCode 热题 100(四):48. 旋转图像、240. 搜索二维矩阵 II、234. 回文链表

一.48. 旋转图像 题目要求&#xff1a;就是一个顺时针的旋转过程。 思路&#xff1a;观察矩阵&#xff0c;得出翻转前第i行的第J个元素 等于 翻转后倒数第i列的第J个元素&#xff0c;举例说明&#xff0c;第1行第2个元素为“2”&#xff0c;翻转后到了 倒数第1列的第2个元素…...

Qt 编译使用Bit7z库接口调用7z.dll、7-Zip.dll解压压缩常用Zip、ISO9660、Wim、Esd、7z等格式文件(二)

修改qt5 7zip源码编译及使用(含展示进度)一文中的封装类ZlibHelper代码类&#xff0c;继承多线程&#xff0c;使解压&#xff0c;压缩时进度条不影响界面&#xff0c;同时添加压缩文件中的文件预览功能&#xff0c;建议直接看源码 导读 相关代码内容扩展预览内容时获取文件修改…...

224、仿真-基于51单片机音乐播放器流水灯控制Proteus仿真设计(程序+Proteus仿真+原理图+程序流程图+元器件清单+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件设计 二、设计功能 三、Proteus仿真图 四、原理图 五、程序源码 资料包括&#xff1a; 需要完整的资料可以点击下面的名片加下我&#xff0c;找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选…...

虹科展会 | 自动驾驶展品:上海汽车测试展精彩回顾

2023年8月9日-8月11日&#xff0c;上海国际汽车测试及质量监控博览会在上海圆满落幕。本次展会提供了一个了解最新汽车测试及质量监控技术、产品和趋势的机会&#xff0c;同时也是汽车测试及质量监控领域的专业人士和业内人士的重要交流平台。 雅名特是虹科旗下子公司&#xff…...

Unity自定义脚本的 初始模版

参考博主&#xff1a;Unity修改创建的脚本模板&#xff0c;Unity脚本模板路径_unity hub 怎么改脚本模板_先生沉默先的博客-CSDN博客 【100个 Unity实用技能】 ☀️ | Unity自定义脚本的初始模版_unity 模板脚本_呆呆敲代码的小Y的博客-CSDN博客 一&#xff0c;将脚本放到Ed…...

vue3中使用第三方插件mitt实现任意组件通讯

vue3中使用第三方插件mitt实现任意组件通讯 组件通讯是vue3组合式开发的核心之一&#xff0c;现在我在写代码时&#xff0c;一个组件的代码超过了200行&#xff0c;基本都会拆分组件。组件拆分后&#xff0c;组件之间的通讯就很重要&#xff0c;总结了一下&#xff0c;目前有这…...

(五)、深度学习框架源码编译

1、源码构建与预构建&#xff1a; 源码构建&#xff1a; 源码构建是通过获取软件的源代码&#xff0c;然后在本地编译生成可执行程序或库文件的过程。这种方法允许根据特定需求进行配置和优化&#xff0c;但可能需要较长的时间和较大的资源来编译源代码。 预构建&#xff1a; 预…...