CVPR`24 | 又快又好!渲染速度比ENeRF快30倍!4K4D:实时4K分辨率4D视图合成
文章链接:https://arxiv.org/pdf/2310.11448
git链接: https://zju3dv.github.io/4k4d/
本文旨在实现动态3D场景在4K分辨率下的高保真和实时视图合成。最近,一些动态视图合成方法在渲染质量方面表现出色。然而,在渲染高分辨率图像时,它们的速度仍然有限。为解决这个问题,本文提出了4K4D,一种支持硬件光栅化的4D点云表示,能够实现前所未有的渲染速度。本文的表示基于4D特征网格构建,因此点云被自然地正则化并可以进行稳健优化。此外,设计了一种新颖的混合外观模型,显著提升了渲染质量,同时保持了效率。此外,开发了一种可微分的深度剥离算法,以有效地从RGB视频中学习所提出的模型。实验表明,在使用RTX 4090 GPU的情况下,本文的表示在1080p分辨率下可以在DNA-Rendering数据集上以超过400 FPS的速度进行渲染,在4K分辨率下可以在ENeRF-Outdoor数据集上以80 FPS的速度进行渲染,比以往方法快30倍,并实现了最先进的渲染质量。
方法
给定捕捉动态3D场景的多视角视频,目标是重建目标场景并实时执行新视角合成。为此,研究者们使用空间雕刻算法提取场景的粗点云,并建立基于点云的神经场景表示,该表示可以从输入视频中稳健地学习,并支持硬件加速渲染。
下图2展示了所提模型的概述。首先描述如何基于点云和神经网络表示动态场景的几何和外观。然后,开发了一种可微分深度剥离算法,用于渲染表示,该算法由硬件光栅化器支持,从而显著提高了渲染速度。最后,讨论如何在输入RGB视频上优化所提模型。
使用点云建模动态场景
4D embedding。给定目标场景的粗点云,使用神经网络和特征网格来表示其动态几何和外观。具体而言,本文的方法首先定义了六个特征平面:θ、θ、θ、θ、θ和θ。为了在帧t中为任意点x分配一个特征向量f,采用K-Planes的策略,使用这六个平面来建模一个4D特征场:
其中, 是输入点, 表示拼接运算符。更多实现细节请参考K-Planes。
几何模型。基于粗点云,动态场景几何通过学习每个点的三个条目来表示:位置 、半径 和密度 。使用这些点条目,计算体渲染时与图像像素 u 对应的空间点 x 的体积密度。点的位置 被建模为一个可优化的向量。半径 r 和密度 通过将方程 (1) 中的特征向量 输入到 网络来预测。
外观模型。如上面图 2c 所示,使用图像混合技术和球谐函数 (SH) 模型来构建混合外观模型,其中图像混合技术表示离散的视角依赖外观 ,SH 模型表示连续的视角依赖外观 。对于帧 t 中的点 ,其在视角方向 下的颜色为:
其中,s 表示点 处的 系数。
离散的视角依赖外观 基于输入图像推理。具体而言,对于一个点 ,首先将其投影到输入图像中以检索相应的 RGB 颜色 。然后,为了混合输入的 RGB 颜色,根据点坐标和输入图像计算相应的混合权重 。请注意,混合权重与视角方向无关。接下来,为了实现视角依赖效果,根据视角方向选择 N′ 个最近的输入视角。最后,颜色 计算为 。由于 N′ 个输入视角是通过最近邻检索获得的,因此 cibr 在视角方向上不可避免地是离散的。为了实现连续的视角依赖效果,附加了由 SH 模型表示的精细级别颜色 ,如上面图 2c 所示。
在实践中,本文的方法通过将方程 (1) 中的点特征 传递到 网络来回归 系数 s。为了在图像混合模型 中预测混合权重 ,首先将点 投影到输入图像上以检索图像特征 ,然后将其与点特征 f 拼接,并将其输入到另一个 网络中以预测混合权重。图像特征 使用 2D CNN 网络提取。
讨论。本文的外观模型是实现动态场景的低存储、高保真和实时视图合成的关键。有三种替代方法来表示动态外观,但它们的表现无法与本文的模型相提并论。
-
在每个点上定义显式 SH 系数,如在 3D 高斯分裂 中。当 SH 系数的维度较高且动态场景的点数量较大时,该模型的大小可能太大,无法在消费级 GPU 上训练。
-
基于 MLP 的 SH 模型。使用 MLP 来预测每个点的 SH 系数可以有效地减少模型大小。然而,本文的实验发现基于 MLP 的 SH 模型难以渲染高质量图像。
-
连续视角依赖的图像混合模型,如 ENeRF。使用图像混合模型表示外观比仅使用基于 MLP 的 SH 模型具有更好的渲染质量。然而,ENeRF 中的网络将视角方向作为输入,因此无法轻松预计算,从而限制了推理期间的渲染速度。
与这三种方法相比,本文的外观模型结合了离散图像混合模型 和连续 SH 模型 。图像混合模型 提升了渲染性能。此外,由于其网络不将视角方向作为输入,它支持预计算。SH 模型 实现了任何视角方向的视角依赖效果。在训练期间,本文的模型使用网络表示场景外观,因此其模型大小合理。在推理期间,预计算网络输出以实现实时渲染。
可微分深度剥离
研究者们提出的动态场景表示可以使用深度剥离算法渲染成图像。得益于点云表示,能够利用硬件光栅化器显著加速深度剥离过程。此外,使这一渲染过程可微分也很容易,从而能够从输入的 RGB 视频中学习本文的模型。
研究者们开发了一个自定义着色器来实现包含 K 次渲染通道的深度剥离算法。考虑一个特定的图像像素 u。在第一次通道中,本文的方法首先使用硬件光栅化器将点云渲染到图像上,为像素 u 分配最近的点 。记点 的深度为 。随后,在第 k 次渲染通道中,所有深度值 小于上一通道记录深度 的点都被丢弃,从而得到像素 u 的第 k 近的点。丢弃较近的点在自定义着色器中实现,因此它仍然支持硬件光栅化。在 K 次渲染通道之后,像素 u 有一组排序的点 。
基于点 ,使用体渲染合成像素 u 的颜色。像素 u 的点 的密度是基于投影点和像素 u 在2D图像上的距离定义的。
其中, 是摄像机投影函数。 和 r 分别是点 的密度和半径。在训练过程中,使用 PyTorch实现投影函数,因此方程 (3) 自然是可微的。在推理过程中,利用硬件光栅化过程高效地获得距离 ,这通过 OpenGL 实现。
记点 的密度为 。像素 u 的体渲染颜色公式如下:
其中, 是点 的颜色,如方程 (2) 所述。
训练
给定渲染的像素颜色 ,将其与真实像素颜色 进行比较,以端到端的方式使用以下损失函数来优化模型:
其中, 是图像像素的集合。除了均方误差损失 外,还应用感知损失 。
其中, 是感知函数(一个 VGG16 网络),I 和 分别是渲染和真实图像。感知损失计算从 VGG 模型提取的图像特征之间的差异。实验中表明,它有效地提高了渲染图像的感知质量。
为了规范,本文提出的表示优化过程,还额外应用mask监督到目标场景的动态区域。仅渲染动态区域的点云以获得它们的mask,其中像素值由以下公式得到:
mask损失定义如下:
其中,表示渲染mask的像素集合,而 是2D动态区域的地面真实mask。这有效地通过将其限制在视觉外壳中,规范了动态区域几何优化的过程。
最终的损失函数定义如下:
其中, 和 是控制对应损失权重的超参数。
推理
训练完成后,采用几种加速技术来提升模型的渲染速度。首先,在推理之前预先计算点位置 p、半径 r、密度 、SH 系数 s 和颜色混合权重,这些数据存储在主内存中。在渲染过程中,这些属性被异步地流式传输到显卡上,通过重叠光栅化和内存复制来实现最优的渲染速度。应用这一技术后,运行时计算仅包括深度剥离评估和球谐函数评估 (Eq.(2))。其次,将模型从32位浮点数转换为16位,以实现高效的内存访问,这提高了帧率约20,并且经验证没有可见的性能损失,如表6所示。第三,不可微分深度剥离算法的渲染通道数 K 从15减少到12,同样提高了20 FPS 的速度,而视觉质量无变化。
实现细节
优化
4K4D 使用 PyTorch 框架进行训练。使用 Adam 优化器,学习率为 5e−3,通常在序列长度为 200 帧的情况下,模型会在约 800k 次迭代后收敛,这在单个 RTX 4090 GPU 上大约需要 24 小时。具体而言,点位置的学习率设置为,正则化损失权重 λ和λ 设置为 1e−3。训练过程中,不可微分深度剥离的通道数 K 设置为 15,最近输入视图的数量 N′ 设置为 4。本文的方法的渲染速度是基于 RTX 3090 GPU 报告的,除非另有说明。
点云初始化
利用现有的多视角重建方法来初始化点云。对于动态区域,使用分割方法 在输入图像中获取它们的mask,并利用空间雕刻算法提取它们的粗略几何信息。对于静态背景区域,利用前景mask沿所有帧计算背景像素的mask加权平均,生成不包含前景内容的背景图像。然后,在这些图像上训练一个 Instant-NGP模型,从中获取初始点云。初始化后,动态区域每帧通常包含约 250k 个点,静态背景区域通常包含约 300k 个点。
实验
数据集和评估指标
在多个广泛使用的多视角数据集上训练和评估本文的方法 4K4D,包括 DNA-Rendering、ENeRF-Outdoor、NHR和 Neural3DV。
-
DNA-Rendering: 这个数据集使用 4K 和 2K 相机记录了动态人类和物体的 10 秒视频片段,帧率为 15 FPS,采集了 60 个视角。由于录制了复杂的服装和快速移动的人物,这个数据集非常具有挑战性。在 DNA-Rendering 的 4 个序列上进行实验,其中将 90% 的视角作为训练集,其余作为评估集。
-
ENeRF-Outdoor: 这个数据集在室外环境中使用 1080p 相机以 30FPS 记录了多个动态人物和物体。选择了三个包含 6 个不同演员(每个序列选择了 2 个演员)的 100 帧序列来评估本文的方法 4K4D。这个数据集对于动态视角合成具有挑战性,因为同一个片段中不仅有多个移动的人物和物体,而且由于人物的阴影,背景也是动态的。
遵循 Im4D 和 NeuralBody 的做法,在 DNA-Rendering 和 NHR 数据集上评估动态区域的指标,可以通过预定义人物的 3D 边界框并将其投影到图像上来获得。对于 ENeRF-Outdoor,联合训练前景的动态几何和外观以及背景的动态外观,以获得整体图像的渲染结果。所有图像在评估时都会按比例调整大小,如果原始分辨率超过 2K,则缩放比例为 0.375。在实验中,DNA-Rendering 的渲染图像大小为 1024×1224(和 1125×1536),ENeRF-Outdoor 的分辨率为 960×540。Neural3DV 视频和 NHR 的分辨率分别为 1352×1224 和 512×612(和 384×512)。
对比实验
对比结果 在 DNA-Rendering数据集上的定性和定量比较如下图5和表1所示。
从表 1 可以明显看出,本文的方法 4K4D 的渲染速度比当前最先进的实时动态视角合成方法ENeRF快30倍,并且在渲染质量上表现更优秀。即使与并行工作相比,本文的方法 4K4D 仍然实现了 13 倍的加速,并且能够产生一致性更高质量的图像。如图 5 所示,KPlanes无法恢复高度详细的 4D 动态场景的外观和几何特征。其他基于图像的方法 能够产生高质量的外观效果。然而,它们往往在遮挡和边缘处产生模糊的结果,导致视觉质量的降低,最多能保持交互式帧率。相反,本文的方法 4K4D 可以以超过 200 FPS 的速度生成更高保真度的渲染结果。图 3 和表 2 提供了在 ENeRF-Outdoor数据集上的定性和定量结果。即使在具有多个演员和动态背景的挑战性 ENeRF-Outdoor 数据集上,本文的方法 4K4D 仍然能够取得显著更好的结果,同时以超过 140 FPS 的速度进行渲染。ENeRF在这个具有挑战性的数据集上产生模糊的结果,而 IBRNet的渲染结果在图像边缘处含有黑色伪影,如图 3 所示。K-Planse在重建动态人物和变化背景区域上失败。
消融研究
在 DNA-Rendering数据集的 150 帧序列 0013 01 上进行了消融研究。定性和定量结果如下图6和表4至表7所示。
4D embedding消融研究 "w/o f" 变体移除了提出的 4D embedding模块,并将其替换为每帧和每点可优化的位置、半径、密度和比例。如上面图 6 和表 4 所示,"w/o f" 变体在没有 4D embedding模块 的情况下产生模糊和噪声的几何效果,从而导致渲染质量的下降。
混合外观模型消融研究 "w/o " 变体移除了外观公式 Eq. (2) 中的 ,这不仅导致恢复的外观细节减少,还显著阻碍了几何质量。增加 SH 系数的额外度数并未导致显著的性能变化(PSNR 30.202 对比 30.328)。相比之下,本文提出的方法能够以更好的细节产生高保真度的渲染效果。
损失函数消融研究 如表 4 所示,移除 项不仅降低了感知质量(LPIPS 分数),还导致其他性能指标的降低。对于高度动态的 DNA-Rendering 数据集,遮罩损失 Lmsk 有助于规范动态几何的优化过程。
存储分析 对于 150 帧序列 0013 01 场景,本文的方法 4K4D 的存储分析列在表 5 中。由于其显式表示,点位置 p 占据了模型尺寸的大部分。本文方法的最终存储成本每帧少于 2 MB,包括源视频。DNA-Rendering的输入图像以 JPEG 格式提供。使用 FFmpeg 的 HEVC 编码器将所有输入图像的帧编码为视频,编码质量因子设置为 25。编码后,观察到 LPIPS 没有变化(0.040),SSIM 没有损失(0.982),PSNR 只降低了 0.42%(31.990 对比 31.855),表明方法 4K4D 对于输入图像的视频编码具有鲁棒性。对于以视频形式编码的输入图像,基于图像的渲染的存储开销每帧仅为 0.419 MB,渲染质量几乎没有变化。
作者预计算了点云上的物理属性以实现实时渲染,每帧大约需要 2 秒。尽管预计算的缓存尺寸较大(0013 01 的一帧为 200 MB),但这些预计算的缓存仅驻留在主存储器中,并没有显式存储在磁盘上,这对现代个人电脑来说是可行的。这使得表示形式成为一种压缩形式,磁盘文件大小较小(每帧 2 MB),但所包含的信息非常丰富(每帧 200 MB)。
渲染速度分析
本文引入了多种优化技术来加速方法 4K4D 的渲染速度,这些技术仅由研究者们提出的混合几何和外观表示方法实现。在上面表6中,分析了这些提议技术在 DNA-Rendering 数据集的 150 帧序列 0013 01 上的有效性和质量影响。
计算的有效性
为了实现实时渲染,预计算并缓存了所有点的位置 p、半径 r、密度 和 SH 系数 s,并存储在主存储器中。由于研究者们将外观表示分割为常数项 和视角相关项 ,还可以预计算并缓存所有源图像的每帧权重 w 和颜色 。对于 DNA-Rendering数据集的 150 帧 60 视角场景的 0013 01,这些缓存每帧占据大约 200MB 主存储器。本文呢方法所实现的预计算实现了 10 倍的速度提升(Ours vs. “w/o Cache”)。
可微深度剥离 本文还与传统的基于 CUDA 的可微分点云渲染技术(PyTorch3D 提供的)进行比较,以验证提出的可微分深度剥离算法的有效性。本文提出的可微分深度剥离算法和 PyTorch3D的实现都使用了与 Eq. (4) 相同的体积渲染方程。如表 6 所示,本文的方法比基于 CUDA 的方法快了超过 7 倍。
其他加速技术
-
“w/o fp16” 变体使用原始的 32 位浮点数进行计算。
-
“w/o K = 12” 变体在深度剥离算法中使用了 15 个渲染通道,与训练时相同。使用 16 位浮点数和 12 个渲染通道都可以实现 20FPS 的加速。
不同GPU和分辨率上的渲染速度 本文还报告了在不同硬件(RTX 3060、3090 和 4090)以及不同分辨率(720p、1080p 和 4K(2160p))上的渲染速度(见表 7)。这里报告的渲染速度包含了交互式 GUI 的开销(“w/ GUI”),因此略低于报告的速度。4K4D 即使在使用普通硬件渲染 4K(2160p)图像时也能实现实时渲染,如表中所示。
结论与讨论
本文提出了一种基于神经点云的表示方法,称为4K4D,用于实时渲染4K分辨率的动态3D场景。在4D特征网格上构建了4K4D,以自然地规范化点,并开发了一种新颖的混合外观模型,用于高质量渲染。此外,本文开发了一种可微分深度剥离算法,利用硬件光栅化流水线有效优化和高效渲染所提出的模型。在实验中,展示了4K4D不仅实现了最先进的渲染质量,而且在渲染速度上表现出了超过30倍的提升(在RTX 3090上,1080p分辨率超过200FPS)。
然而,本文的方法仍然存在一些局限性。4K4D无法生成跨帧的点对应关系,这对于某些下游任务至关重要。此外,4K4D的存储成本随视频帧数线性增加,因此在建模长体积视频时会面临困难。如何建模点对应关系和减少长视频的存储成本,可能是未来研究中的两个有趣问题。
参考文献
[1] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
相关文章:

CVPR`24 | 又快又好!渲染速度比ENeRF快30倍!4K4D:实时4K分辨率4D视图合成
文章链接:https://arxiv.org/pdf/2310.11448 git链接: https://zju3dv.github.io/4k4d/ 本文旨在实现动态3D场景在4K分辨率下的高保真和实时视图合成。最近,一些动态视图合成方法在渲染质量方面表现出色。然而,在渲染高分辨率图像…...

中关村软件园发布“数据合规与出境评估服务平台”
在2024中关村论坛年会期间,中关村软件园发布“数据合规与出境评估服务平台”。该平台是中关村软件园结合北京市“两区”建设,立足软件园国家数字服务出口基地和数字贸易港建设,围绕园区内外部企业用户的业务合作、科研创新、跨国运营等场景需…...

记一次若依框架和Springboot常见报错的实战漏洞挖掘
目录 前言 本次测实战利用图 1.判段系统框架 2.登录页面功能点测试 2.1 弱口令 2.2 webpack泄露信息判断 2.3 未授权接口信息发现 3.进一步测试发现新的若依测试点 3.1 默认弱口令 3.2 历史漏洞 4.访问8080端口发现spring经典爆粗 4.1 druid弱口令 4.2 SwaggerU…...

Idea合并Git分支信息
#git 的笔记 ##本篇文章是通过Idea 实现git 命令操作的代码的上传与合并。 1.合并分支 点击 Git 选择Merge 这里选择合并远程的分支...

【学习css2】grid布局-页面footer部分保持在网页底部
中间内容高度不够屏幕高度撑不开的页面时候,页面footer部分都能保持在网页页脚(最底部)的方法 1、首先上图看显示效果 2、奉上源码 2.1、html部分 <body><header>头部</header><main>主区域</main><foot…...

Django 表单
Django 表单 Django 表单是 Web 开发中不可或缺的一部分,它允许用户与网站进行交互,如提交数据、上传文件等。在 Django 框架中,表单功能非常强大,支持各种自定义和验证,使得开发者能够轻松地处理用户输入。本文将详细介绍 Django 表单的使用方法,包括创建表单、表单字段…...

【Linux网络】网络基础
本篇博客整理了 Linux 网络编程的前置知识,例如网络的发展、协议和协议栈分层、网络通信原理、网络地址等,为后续进入 Linux 网络编程作铺垫。 目录 一、网络发展 二、网络协议 1)协议的作用 2)协议栈 3)协议分层…...

Open3D 可视化点云配准中匹配点之间的连线
目录 一、概述 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2处理后的点云 一、概述 在点云配准的过程中,可视化匹配点之间的连线(匹配线)有助于更直观地理解配准结果和误差分布。以下是可视化匹配点之间连线的好处和作用: 1. 直观理…...

Linux编程第三篇:Linux简介,开源软件简介(Linux是否安全?参考TESEC指标)
业精于勤荒于嬉,行成于思毁于随。 今天这篇算是Linux的正式学习,废话不多说,我们开始吧 第三篇 一、UNIX与Linux发展史1.1、UNIX发展历史和发行版本1.2、UNIX主要发行版本1.3、Linux发展历史1.4、Linux内核版本1.5、Linux主要发行版本 二、开…...

【JavaSE复习】数据结构、集合
JavaSE 复习 1.数据结构1.1 查找1.1.1 基本查找1.1.2 二分查找1.1.3 插值查找1.1.4 斐波那契查找1.1.5 分块查找1.1.6 分块查找的扩展(无规律数据) 1.2 排序1.2.1 冒泡排序1.2.2 选择排序1.2.3 插入排序1.2.4 快速排序 2. 集合2.1 基础集合2.1.1 集合和数…...

Java版Flink使用指南——自定义无界流生成器
大纲 新建工程自定义无界流 使用打包、提交、运行工程代码 在《Java版Flink使用指南——从RabbitMQ中队列中接入消息流》一文中,我们让外部组件RabbitMQ充当了无界流的数据源,使得Flink进行了流式处理。在《Java版Flink使用指南——将消息写入到RabbitMQ…...

Vue3框架搭建4:配置说明-eslint配置
配置说明: .eslintrc.cjs: /* eslint-env node */ //node环境,并引入一个模块解析补丁 require(rushstack/eslint-patch/modern-module-resolution)module.exports { //继承其他配置root: true, //跟配置文件,ESLint不会在父目…...

JavaFx+MySql学生管理系统
前言: 上个月学习了javafx和mysql数据库,于是写了一个学生管理系统,因为上个月在复习并且有一些事情,比较忙,所以没有更新博客了,这个项目页面虽然看着有点简陋了,但是大致内容还是比较简单的,于是现在跟大家分享一下我的学生管理系统,希望对这方面有兴趣的同学提供一些帮助 &a…...

Java--抽象类
1.抽象--abstract 2.不能对抽象类进行实例化,也就是不能new这个抽象类 3.抽象类的应用,就是在class前加入abstract这个单词,同理抽象方法也是在void前加入abstract 4.在抽象类中可以写普通方法,但抽象方法只能写在抽象类中 5.…...

26.Labview波形图、XY图、强度图使用精讲
我们如何使用Labview显示曲线或者制作出下面这种我们想要的曲线并随着我们输入值的变化而变化呢? 本文详细讲解一下每种波形图的使用方式,帮助大家深入了解波形图的使用技巧。 文章中所有程序均可在百度网盘下载,下载方式:复制下…...

系统启动 | 安全启动时 “地址线” 被篡改了怎么办?
Hi,你们有没有想过,在咱们启动的过程中,就算是开了安全启动。但是如果在执行最后一条跳转指令时,如果此时改变FLASH或者DDR的地址线,相当于跳转到了非法的地址,那安全启动功能不就丧失了吗? 提到…...

Kafka基础组件图推演
文章目录 1. Controller Broker保障机制 2. 组件架构1. Log Manager2. Replication Manager3. SocketServer4. NetworkServer5. ZKClient 1. Controller Broker Kafka集群中有一个Controller Broker,负责元数据管理和协调。 Kafka使用Zookeeper作为集群元数据的存储…...

k8s中使用cert-manager生成自签名证书
一、安装 cert-manager 注意查看cert-manager和K8S支持的对应版本 我的 k8sv1.28.2,cert-manager v1.12.11 下载 cert-manager.yaml 文件,执行 kubectl apply -f cert-manager.yaml注意:安装成功后如果应用路由使用了Ingress,应用路由不需要…...

处于群晖Docker中的HomeAssistant监控宿主机CPU温度
处于群晖Docker中的HomeAssistant监控宿主机CPU温度 解决方案 在configuration.yaml中添加: sensor: - platform: filename: "Host Temperature" # 可以自定义file_path: /sys/class/hwmon/hwmon0/temp1_inputvalue_template: "{{ int(value)/100…...

STM32串口工作原理
STM32的串口是相当丰富的,功能也很强劲。最多可提供5 路串口,有分数波特率发生器、支持单线光通信和半双工单线通讯、支持LIN、智能卡协议和IrDA SIRENDEC 规范(仅串口3支持)、具有DMA等。 串口最基本的设置,就是波特率的设置。STM32的串口使…...

STM32杂交版(HAL库、音乐盒、闹钟、点阵屏、温湿度)
一、设计描述 本设计精心构建了一个以STM32MP157A高性能单片机为核心控制单元的综合性嵌入式系统。该系统巧妙融合了蜂鸣器、数码管显示器、点阵屏、温湿度传感器、LED指示灯以及按键等多种外设模块,形成了一个功能丰富、操作便捷的杂交版智能设备。通过串口…...

多输入多输出 | Matlab实现Transformer多输入多输出预测
多输入多输出 | Matlab实现Transformer多输入多输出预测 目录 多输入多输出 | Matlab实现Transformer多输入多输出预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 多输入多输出 | Matlab实现Transformer多输入多输出预测(完整源码和数据) 1.da…...

Linux文件编程(标准C库)
目录 一、标准C库打开/创建文件,读写文件,光标移动 二、标准C库写入结构体到文件 三、其他函数补充 1.fputc函数 2.feof函数和fgetc函数 前面讲到的open函数都是基于linux内核的,也就是说在Windows系统上无法运行,移植性比较…...

生产英特尔CPU处理器繁忙的一天
早晨:准备与检查 7:00 AM - 起床与准备 工厂员工们早早起床,快速洗漱并享用早餐。为了在一天的工作中保持高效,他们会进行一些晨间锻炼,保持头脑清醒和身体活力。 8:00 AM - 到达工厂 员工们到达英特尔的半导体制造工厂&#…...

MVC拦截器、ThreadLocal来进行登录拦截
MVC拦截器、ThreadLocal来进行登录拦截 1. 对登录进行拦截1.1 什么是ThreadLocal1.2 定义UserHolder 类,来封装ThreadLocal方法1.3 拦截器WebMvcConfigurer 的配置1.4 登录的配置,当碰到拦截的方法的时候调用1.5 UserServiceImpl1.6 controllerÿ…...

小程序问题
1.获取节点 wx.createSelectorQuery() wx.createSelectorQuery().in(this) //组件中加in(this),不然获取不到 2.使用实例 wx.createSelectorQuery().in(this).select(#share).fields({node: true,size: true}).exec(async (res) > {const canvas res[0].node;…...

arm 版的 deb、rpm、AppImage 都有什么区别
qq arm 版的 deb、rpm 和 AppImage 格式之间存在几个关键区别。以下是对这些区别的详细解释: 包管理系统与兼容性: deb:是Debian及其衍生发行版(如Ubuntu)中使用的软件包格式。这些系统使用dpkg命令来管理deb包&#…...

docker中mysql设置lower_case_table_names配置的坑
前沿 今天在使用flowable流程框架的时候,遇到一个问题。需要配置MySQL数据库以实现表名大小写不敏感。本以为这是一个简单的任务,却耗费了我两个多小时的时间。 docker容器中修改配置,重启不成功 我们前提是容器中的mysql中已经有很多数据…...

python日志记录工具:loguru日志库使用
文章目录 一、使用loguru1、安装2、简单使用3、详细使用4、工具类(1)logUtil.py(2)测试类(3)效果 参考资料 一、使用loguru 1、安装 pip install loguru2、简单使用 from loguru import logger# 打印到文…...

python入门基础知识·二
""" # Python介绍 # Python注释 # 单行注释: # # 多行注释: r """""" # Python输出和输入 # print: 输出 # input: 输入 ①会让程序暂停,②得到的是字符串内容 int(&…...