MVSNeRF:多视图立体视觉的快速推广辐射场重建(2021年)
MVSNeRF:多视图立体视觉的快速推广辐射场重建(2021年)
- 摘要
- 1 引言
- 2 相关工作
- 3 MVSNeRF实现方法
- 3.1 构建代价体
- 3.2 辐射场的重建
- 3.3 体渲染和端到端训练
- 3.4 优化神经编码体
Anpei Chen and Zexiang Xu and Fuqiang Zhao et al. MVSNeRF: Fast Generalizable Radiance Field Reconstruction from Multi-View Stereo[J]. arXiv:2103.15595v2, 2021. https://doi.org/10.48550/arXiv.2103.15595
source code
摘要
在2021年,作者提出了MVSNeRF,一种新的神经渲染方法,在视图合成中可以有效地重建神经辐射场。与之前对神经辐射场的研究不同,我们考虑了对密集捕获的图像进行每场景优化,我们提出了一种通用的深度神经网络,它可以通过快速网络推理,仅从附近的三个输入视图中重建辐射场。我们的方法利用平面扫描代价体(广泛应用于多视图立体视觉)进行几何感知场景推理,并将其与基于物理的体积渲染相结合,用于神经辐射场重建。我们在DTU数据集中的真实物体上训练我们的网络,并在三个不同的数据集上进行测试,以评估其有效性和通用性。我们的方法可以泛化跨场景(甚至是室内场景,完全不同于我们物体的训练场景),并仅使用三个输入图像生成真实的视图合成结果,显著优于同时发布的可推广的辐射场重建论文。此外,如果捕获密集的图像,我们估计的辐射场表示可以很容易地进行微调;这导致每个场景可以快速的重建,具有更高的渲染质量和更少的优化时间。
1 引言
新视角合成是计算机视觉和图形学中一个长期存在的问题。近年来,神经渲染方法显著地推进了这一领域的进展。神经辐射场( Neural Radiance Fields,NeRF)及其后续的工作已经可以产生逼真的新视图合成结果。然而,这些先前工作的一个显著缺点是它们需要一个很长的每一个场景的优化过程来获得高质量的辐射场,这相当昂贵并高度限制了实用性。
我们的目标是让神经场景重建和渲染更加实用。我们提出了MVSNeRF,一种新的方法,可以很好地推广到仅从几个(只有三个)非结构化的多视图输入图像中跨场景重建一个辐射场的任务。由于具有很强的通用性,我们避免了繁琐的每个场景优化,并可以通过快速的网络推理直接在新的视角上回归真实的图像。如果在短时间内(5-15 min)进一步优化更多图像,我们重建的辐射场甚至可以在数小时的优化下优于NeRFs(见图1)。
我们利用了最近在基于学习的多视点立体视觉(MVS)上的成功。对于三维重建任务,这项工作可以通过对代价体使用用三维卷积来训练可推广的神经网络。我们通过将附近的输入视图(由2DCNN推断)的二维图像特征变换到参考视图的结果中的扫描平面上,在输入参考视图上构建一个代价体。与其它MVS方法只对代价体进行深度推断不同,我们的网络对场景几何和外观进行推理,并输出一个神经辐射场(见图2),从而实现视图合成。
具体来说,利用3D CNN,我们重建(从代价体)一个神经场景编码体,该体积由每个体素的神经特征组成,编码关于局部场景几何和外观的信息。然后,我们利用多层感知器(MLP),利用编码体内的三次插值神经特征,解码任意连续位置的体积密度和辐射。本质上,编码体是辐射场的局部神经表示;一旦估计,这个体积可以直接使用(去掉3D CNN),通过可微分射线行进行最终渲染。我们的方法结合了基于学习的MVS和神经渲染。与现有的MVS方法相比,我们实现了可微神经渲染,允许在不需要三维监督的情况下进行训练和推理时间优化,以进一步提高质量。与现有的神经渲染工作相比,我们的MVS架构可以很自然地推理相应的交叉视图,促进泛化到不可见的测试场景,也可以导致更好的神经场景重建和渲染。因此,我们的方法可以显著优于最近的发布的可推广的NeRF工作,它主要考虑二维图像特征,而没有显式的几何感知的三维结构(见表1和图4)。
我们证明,仅使用3张输入图像,我们从DTU数据集训练出来的网络在测试DTU场景时合成逼真的图像,甚至可以在其它分布不同的场景数据集上产生合理的结果。此外,我们估计的三图像辐射场(神经编码体)可以更容易地在新的测试场景上进一步优化,以改进更多被拍摄图像的神经重建,获得了逼真的结果,甚至与每个场景的过拟合NeRF相当,我们的优化时间比NeRF少(见图1)。这些实验表明,当只有少数图像捕获时,我们的技术可以作为一个强有力的重建器,可以重建一个辐射场用于真实的视图合成。或者作为一个强初始化器,当获得密集图像时,可以显著促进每个场景的辐射场优化。我们的方法向现实的神经渲染实际化迈出了重要的一步。
2 相关工作
多视图立体视觉
多视图立体视觉(MVS)是一个经典的计算机视觉问题,旨在利用从多个视点捕获的图像来实现密集的几何重建,并已被各种传统方法广泛探索。最近,深度学习技术被引入来解决MVS问题。MVSNet在参考视图的平面扫描代价体上应用三维CNN进行深度估计,实现了优于经典传统方法的高质量的三维重建。随后的工作将该技术扩展为循环平面扫扫、基于点的致密化、基于置信度的聚合和多代价体,提高了重建质量。我们提出将基于代价体的深度MVS技术与可微分体渲染相结合,使其能够有效地重建神经渲染的辐射场。与使用直接深度监督的MVS方法不同,我们只训练具有图像损失的网络,用于新的视图合成。这确保了网络满足多视图的一致性,同时允许高质量的几何重建。此外,我们的MVSNeRF可以实现与MVSNet相比的精确的深度重建(尽管没有直接的深度监督),这可能会激发未来开发无监督几何重建方法的工作。
视角合成
视图合成已经用各种方法研究了几十年,包括光场,基于图像的渲染,以及其他最近基于深度学习的方法。平面扫描体积也被用于视图合成。通过深度学习,基于MPI的方法在参考视图上构建平面扫描体,而其它方法在新的视角上构建平面扫描;这些先前的工作通常预测离散扫描平面上的颜色,并使用alpha混合或基于学习的权重预测和聚合每个平面的颜色。我们的方法不是直接的预测每个平面颜色,而是将平面扫描中的每个体素神经特征作为场景编码体进行推断,并可以从任意的三维位置回归体渲染属性。这是一个连续的神经辐射场的模型,允许基于物理的体素渲染来实现现实的视图合成。
神经渲染
近年来,各种神经场景表示法被提出来实现视图合成和几何重建任务。特别是,NeRF 结合了MLP与可微分的体积渲染,并实现了逼真的视图合成。有些工作试图提高其在视图合成上的性能;其它相关工作扩展到支持其他神经渲染任务,如动态视图合成,挑战场景,姿态估计,实时渲染,重光照,和剪辑。然而,大多数之前的工作仍然遵循原始的NeRF,并需要对每个场景进行昂贵的优化过程。相反,我们利用深度MVS技术来实现跨场景神经辐射场估计,仅使用少量图像作为输入。我们的方法利用平面扫描三维代价体来实现几何感知场景理解,比同时发布的工作要显著提高辐射场重建的性能。
3 MVSNeRF实现方法
与NeRF通过每个场景的“网络记忆”来重建辐射场不同,我们的MVSNeRF学习了一个用于辐射场重建的通用网络。输入 M M M张真实场景拍摄的图片 I i ( i = 1 , . . , M ) I_i (i = 1, .., M) Ii(i=1,..,M)并且知道相机参数 Φ i Φi Φi,我们提出了一种新的网络,它可以重建一个辐射场作为一个神经编码体,并使用它来回归体渲染属性(密度和具有视图依赖的辐射)用于视图合成。一般来说,我们的整个网络可以看作是一个辐射场的函数,表示为:
σ , r = MVSNeRF ( x , d ; I i , Φ i ) ( 1 ) \sigma , r = \text {MVSNeRF}(x,d;I_i,\Phi _i)~~~~(1) σ,r=MVSNeRF(x,d;Ii,Φi) (1)
其中 x x x表示一个3D位置, d d d是视角方向, σ σ σ是 x x x处的体积密度, r r r是 x x x处的输出辐射(RGB颜色),这取决于视角方向 d d d。我们网络的输出体积特性可以直接通过可微分射线在新的目标视角 Φ t Φ_t Φt上合成新的图像 I t I_t It。
在本文中,我们考虑一个稀疏的附近输入视图集来有效地辐射场重建。在实践中,我们使用 M = 3 M = 3 M=3视图来进行实验,而我们的方法可以处理非结构化视图,并且可以很容易地支持其它数量的输入。我们的MVSNeRF的概述如图2所示。
我们首先在参考视图(我们将视图i = 1称为参考视图)上,将二维神经特征变换到多个扫描平面上。然后,我们利用一个3D CNN来重建神经编码体,并使用一个MLP来回归体渲染属性,表示一个辐射场。我们利用可微的射线行进,使用我们的网络建模的辐射场,在新的视点上回归图像;这使得我们的整个框架使用渲染损失实现了端到端训练。我们的框架实现了从少量图像的辐射场重建。另一方面,当捕获密集图像时,重建的编码体和MLP解码器也可以进行快速独立微调,以进一步提高渲染质量。
3.1 构建代价体
受最近的深度MVS方法的启发,我们在参考视图(i = 1)处构建了一个代价体P,允许对几何感知的场景进行理解。这成功利用二维图像特征从m个输入图像变换到参考视图的结果上的平面扫描体来实现。
提取图像特征
我们使用深度二维CNN T在单个输入视图上提取二维图像特征,从而有效地提取代表局部图像外观的二维神经特征。该子网络由下采样卷积层组成,并将输入图像 I i ∈ R H i × W i × 3 I_i∈\mathbb{R}^{H_i×W_i×3} Ii∈RHi×Wi×3转换为2D特征地图 F i ∈ R H i / 4 × W i / 4 × C F_i∈\mathbb{R} ^{H_i/4×W_i/4×C} Fi∈RHi/4×Wi/4×C,
F i = T ( I i ) ( 2 ) F_i = T(I_i)~~~~(2) Fi=T(Ii) (2)
其中,H和W为图像的高度和宽度,C为所得到的特征通道数。
变换特征图
给定相机的内在和外在参数 Φ = [ K , R , t ] Φ = [K,R,t] Φ=[K,R,t],我们考虑了单应性变换:
H i ( z ) = K i ⋅ ( R i ⋅ R 1 T + ( t 1 − t i ) ⋅ n 1 T z ) ⋅ K 1 − 1 ( 3 ) H_i(z)=K_i·(R_i·R_1^T+ \frac{(t_1-t_i)·n_1^T}{z} )·K_1^{-1}~~~~(3) Hi(z)=Ki⋅(Ri⋅R1T+z(t1−ti)⋅n1T)⋅K1−1 (3)
其中 H i ( z ) H_i (z) Hi(z)是在深度z从视图i到参考视图的矩阵变换,K是内参矩阵,R和t是相机的旋转和平移。每个特征图 F i F_i Fi可以通过以下方式变换到参考视图:
F i , z ( u , v ) = F i ( H i ( z ) [ u , v , 1 ] T ) ( 4 ) F_{i,z}(u,v)=F_i(H_i(z)[u,v,1]^T)~~~(4) Fi,z(u,v)=Fi(Hi(z)[u,v,1]T) (4)
其中, F i , z F_{i,z} Fi,z为深度z处的扭曲特征图, ( u , v ) (u,v) (u,v)表示参考视图中的一个像素位置。在这项工作中,我们使用参考视图上的归一化的坐标(NDC)来参数化 ( u 、 v 、 z ) (u、v、z) (u、v、z)。
代价体
代价体P是由D扫描平面上的变换特征图构造出来的。我们利用基于方差的度量来计算代价,这已广泛应用在MVS中。特别是,对于P中以(u、v、z)为中心的每个体素,其代价特征向量的计算方法为:
P ( u , v , z ) = Var ( F i , z ( u , v ) ) ( 5 ) P_{(u,v,z)} =\text {Var}(F_{i,z}(u,v))~~~~(5) P(u,v,z)=Var(Fi,z(u,v)) (5)
其中,Var计算M个视图之间的方差。
此基于方差的代价体编码不同输入视图之间的图像外观变化;这解释了由场景几何图形和与视图相关的阴影效果引起的外观变化。虽然MVS的工作只使用这样的体积来进行几何重建,但我们证明了它也可以用来推断完整的场景外观,并实现真实的神经渲染。
3.2 辐射场的重建
我们提出使用深度神经网络来有效地将所建立的代价体转换为辐射场的重建,以实现现实的视图合成。我们利用3D CNN B从原始二维图像特征代价的代价体P中重建一个神经编码体S;S由编码局部场景几何和外观的每一个体素特征组成。MLP解码器A用于从该编码体回归体渲染属性。
神经编码体
以前的MVS工作通常直接从代价体预测深度概率,而代价体只表示场景几何。我们的目标是实现高质量的渲染,这需要从代价体中推断出更多的外观感知信息。因此,我们训练一个深度三维CNN B将构建的图像特征代价体转换为一个新的C-通道神经特征体积S,其中特征空间由网络自身学习和发现,并进行接下来的体素属性回归。此过程可表示为:
S = B ( P ) ( 6 ) S=B(P)~~~~(6) S=B(P) (6)
3D CNN B是一个3D UNet降采样和上采样卷积层和跳连接组成,可以有效地推断和传播场景外观信息,获得一个有意义的场景编码体S。注意,这个编码体是以无监督的方式预测并用体渲染在端到端训练后被推断。我们的网络可以学会在每体素神经特征中编码有意义的几何场景和外观;这些特征随后被不断插值并转换为体密度和视图相关的辐射。由于二维特征提取的降采样,场景编码体的分辨率相对较低;仅从这些信息中回归高频外观是具有挑战性的。因此,我们也在接下来的体素回归阶段合并了原始图像像素数据,虽然我们后来发现,这个高频也可以通过快速的每场景微调优化在一个增强的体积中恢复。
回归体属性
给定一个任意的三维位置 x x x和一个观察方向d,我们使用MLP A从神经编码体S回归相应的体积密度σ和视图相关的辐射r。如前所述,我们还考虑原始图像 I i I_i Ii的像素颜色 c = [ I ( u i , v i ) ] c = [I(u_i,v_i)] c=[I(ui,vi)]作为附加输入;这里 ( u i , v i ) (u_i, v_i) (ui,vi)是将三维点 x x x投影到视图 i i i 时的像素位置,c 将所有视图的颜色 I ( u i , v i ) I(u_i,v_i) I(ui,vi)连接为一个3M-通道向量。MLP表示为:
σ , r = A ( x , d , f , c ) , f = S ( x ) ( 7 ) \sigma ,r =A(x,d,f,c),~~f=S(x)~~~~ (7) σ,r=A(x,d,f,c), f=S(x) (7)
其中,f = S (x)是从位置x处的体积S进行三次插值的神经特征。特别地,x在参考视图的NDC空间中参数化,d用在参考视图的坐标上的单位向量表示。利用NDC空间可以有效地对不同数据源间的场景尺度进行归一化,有助于我们的方法具有良好的通用性。此外,受NeRF的启发,我们还在位置x和方向d向量上应用了位置编码,这进一步增强了我们的结果中的高频细节。
辐射场
因此,我们的整个框架建模了一个神经辐射场,从少数(三个)输入图像中回归体积密度和视觉依赖的辐射。此外,一旦场景编码体S被重建,该体与MLP解码器A的结合可以独立使用,无需前置2D和3D CNN。它们可以被看作是辐射场的独立神经表示,输出体积属性,从而支持体渲染。
3.3 体渲染和端到端训练
我们的MVSNeRF重建了一个神经编码体,并在场景中的任意点上回归体密度和与视图相关的辐射。这允许应用可微分的体渲染来回归图像的颜色。
体渲染
基于物理的体积渲染方程可以通过可微分射线行进(如在NeRF[34]中)进行数值计算,用于视图合成。特别地,像素的亮度值(颜色)是通过使光线穿过像素并在射线上采样的阴影点处累积亮度来计算的,由以下方式给出:
c t = ∑ k τ k ( 1 − e x p ( − σ k ) ) r k , τ = e x p ( − ∑ j = 1 k − 1 σ j ) ( 8 ) \\c_t = \sum_k\tau_k(1-exp(-\sigma _k))r_k,~~~\tau = exp(-\sum_{j=1}^{k-1}\sigma_j)~~~~(8) ct=k∑τk(1−exp(−σk))rk, τ=exp(−j=1∑k−1σj) (8)
其中 c t c_t ct为最终的像素颜色输出, τ \tau τ为体积透射率。我们的MVSNeRF作为一个辐射场函数,本质上提供了射线行进的体渲染属性 σ k σ_k σk和 r k r_k rk。
端到端训练
这种射线行进渲染是完全可微分的;因此,它允许我们的框架从端到端使用三个输入视图在新的视点上回归最终的像素颜色。我们使用真实像素颜色监督整个框架,使用色损失函数是L2渲染损失:
L = ∣ ∣ c t − c ~ t ∣ ∣ 2 2 ( 9 ) L= ||c_t-\tilde{c} _t||_2^2~~~~(9) L=∣∣ct−c~t∣∣22 (9)
其中 c ~ t \tilde{c} _t c~t是从一个新视点的目标图像 I t I_t It采样的真实像素颜色。我们只利用损失来监督我们的整个系统。由于基于物理的体渲染和端到端训练,渲染监督可以通过每个网络组件传播场景外观和对应信息,并对其进行规范化,实现有意义的最终视图合成。不像以前的NeRF工作,主要专注于每个场景的训练,我们在DTU数据集上的不同场景中训练整个网络。我们的MVSNeRF受益于代价体处理中的几何感知场景推理,并可以有效地学习一个通用函数,可以在新的测试场景上用神经编码体重建辐射场,从而实现高质量的视图合成。
3.4 优化神经编码体
当跨场景进行训练时,我们的MVSNeRF已经可以学习一个强大的泛化函数,仅从三个输入图像重建跨场景的辐射场。然而,由于输入有限和不同场景和数据集之间的高多样性,使用这种通用的解决方案在不同的场景上实现完美的结果是非常具有挑战性的。另一方面,NeRF通过对密集的输入图像进行每个场景优化,减轻了泛化困难,获得了逼真的结果,但代价非常昂贵。相比之下,我们建议微调我们的神经编码体:从少量图像中立即重建,即使在捕获密集图像时也能实现快速的每个场景优化。
附加颜色
如前所述,当发送到MLP解码器(等式7)时,我们的神经编码体与像素颜色相结合。保留这种进行微调的设计仍然有效,但会导致总是依赖于三个输入进行重建。相反,我们通过将每个视图的体素中心的颜色作为编码体的额外通道来实现独立的神经重建;这些颜色作为特征也可以在每个场景的优化中进行训练。这个简单的附加最初在渲染中引入了模糊性,但是在微调过程中很快解决了这个问题。
相关文章:

MVSNeRF:多视图立体视觉的快速推广辐射场重建(2021年)
MVSNeRF:多视图立体视觉的快速推广辐射场重建(2021年) 摘要1 引言2 相关工作3 MVSNeRF实现方法3.1 构建代价体3.2 辐射场的重建3.3 体渲染和端到端训练 3.4 优化神经编码体 Anpei Chen and Zexiang Xu and Fuqiang Zhao et al. MVSNeRF: Fast…...
华为OD机试真题-CPU算力分配-2023年OD统一考试(C卷)
题目描述: 现有两组服务器A和B,每组有多个算力不同的CPU,其中A[i]是A组第i个CPU的运算能力,B[i]是B组第i个CPU的运算能力。一组服务器的总算力是各CPU的算力之和。为了让两组服务器的算力相等,允许从每组各选出一个CPU进行一次交换,求两组服务器中,用于交换的CPU的算力,…...
校验数据是否重叠(各种操作符>,<,>=,<=,or,and)
最近接到一个需求,其中部分功能涉及到数据的重叠校验,并且录入的数据需要包含各种操作符。如果只通过java代码来查询并进行循环判断的话,判断情况会很复杂,幸好有同事的帮忙提供了一个用sql查询重叠部分的方法,现在分享…...
大一C语言作业 12.8
1.C 对一维数组初始化时,如果全部元素都赋了初值,可以省略数组长度。 这里没有指定数组长度,编译器会根据初始化列表的元素个数来确定数组长度。 2.C 在C语言中,字符数组是不能用赋值运算符直接赋值的。 3.C 在二维数组a中&#x…...

ELasticsearch:什么是语义搜索?
语义搜索定义 语义搜索是一种解释单词和短语含义的搜索引擎技术。 语义搜索的结果将返回与查询含义匹配的内容,而不是与查询中的单词字面匹配的内容。 语义搜索是一组搜索引擎功能,其中包括根据搜索者的意图及其搜索上下文理解单词。 此类搜索旨在通过…...

ooTD I 女儿是自己的,尽情打扮尽情可爱
分享女宝的时尚穿搭 奶乎乎的黄色也太好看了 超足充绒量+优质面料 柔软蓬松上身体验感超赞 怎么穿都好看系列 轻轻松松打造时尚造型!!...
第62天:django学习(十一)
cookie和session 发展史 一开始,只有一个页面,没有登录功能,大家看到东西都一样。 时代发展,出现了需要登录注册的网站,要有一门技术存储我们的登录信息,于是cookie诞生了。 cookie: - 存储形式:k:v键值对…...

Rust测试字符串的移动,Move
代码创建了一个结构体,结构体有test1 字符串,还有指向字符串的指针。一共创建了两个。 然后我们使用swap 函数 交换两个结构体内存的内容。 最后如上图。相同的地址,变成了另外结构体的内容。注意看指针部分,还是指向原来的地址…...

vue+electron问题汇总
1. Vue_Bug Failed to fetch extension, trying 4 more times 描述:项目启动时报错 解决:注释图片中内容 2. Module not found: Error: Can’t resolve ‘fs’ in 描述:项目启动报错 解决:vue.config.js中添加图中数据 3.导入…...

Linux中的网络时间服务器
本章主要介绍网络时间的服务器 使用chrony配置时间服务器配置chrony客户端服务器同步时间 1.1 时间同步的重要性 一些服务对时间要求非常严格,例如如图所示的由三台服务器搭建的ceph集群 这三台服务器的时间必须保持一致,如果不一致,就会显…...

fastadmin打印页面
如下图选中订单号进行打印 html中增加代码 <div id"toolbar" class"toolbar"><a href"javascript:;" class"btn btn-primary btn-refresh" title"{:__(Refresh)}" ><i class"fa fa-refresh">&l…...

Java 将word转为PDF的三种方式和处理在服务器上下载后乱码的格式
我这边是因为业务需要将之前导出的word文档转换为PDF文件,然后页面预览下载这样的情况。之前导出word文档又不是我做的,所以为了不影响业务,只是将最后在输出流时转换成了PDF,当时本地调用没什么问题,一切正常…...
C\C++ 获取最值
C C 语言的不同类型的最值可以在 limits.h 头文件里找到定义 #include <limits.h>int main() {printf("%d", INT_MAX); // 整数最大值printf("%d", INT_MIN); // 整数最小值 } C C 有模板,可以通过替换下面的 int 和 doubleÿ…...

机器学习之无监督学习:九大聚类算法
今天,和大家分享一下机器学习之无监督学习中的常见的聚类方法。 今天,和大家分享一下机器学习之无监督学习中的常见的聚类方法。 在无监督学习中,我们的数据并不带有任何标签,因此在无监督学习中要做的就是将这一系列无标签的数…...

Linux高级管理-搭建网站服务
在Ihternet 网络环境中,Web 服务无疑是最为流行的应用系统。有了Web站点,企业可以充分 展示自己的产品,宣传企业形象。Web站点还为企业提供了与客户交流、电子商务交易平台等丰富 的网络应用。部署与维护Web 服务是运维工程师必须掌握的一个技…...

Windows 系统,TortoiseSVN 无法修改 Log 信息解决方法
使用SVN提交版本信息时,注释内容写的不全。通过右键TortoiseSVN的Show log看到提交的的注释,右键看到Edit log message的选项,然而提交后却给出错误提示: Repository has not been enabled to accept revision propchanges; ask …...

编译 Android gradle-4.6-all.zip 报错问题记录
编译 Android gradle-4.6-all.zip 报错问题记录 方法一:替换资源:方法二:修改源方法三:修改版本 编译时候无法下载 gradle-4.6-all Downloading https://services.gradle.org/distributions/gradle-4.6-all.zip 方法一…...

Linux系统调试课:Valgrind 内存调试
文章目录 一、为什么要学会Valgrind二、什么是内存泄露三、Valgrind的移植四、Valgrind相关参数沉淀、分享、成长,让自己和他人都能有所收获!😄 📢Valgrind 是一个开源的内存调试和性能分析工具,用于帮助开发者找出程序中的内存错误,如内存泄漏、使用未初始化的内存、非…...

python主流开发工具排名,python开发工具有哪些
本篇文章给大家谈谈python的开发工具软件有哪些,以及python主流开发工具排名,希望对各位有所帮助,不要忘了收藏本站喔。 python中用到哪些软件 一、Python代码编辑器1、sublime Textsublime Text是一款非常流行的代码编辑器,支持P…...

Spring Boot Async:从入门到精通,原理详解与最佳实践
Spring Boot 的异步功能(Async)允许我们将某些任务异步执行,而不会阻塞主线程。这对于处理耗时的操作非常有用,如发送电子邮件、生成报表、调用外部 API 等。通过异步处理,我们可以释放主线程,让它继续处理…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》
近日,嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》,海云安高敏捷信创白盒(SCAP)成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天,网络安全已成为企业生存与发展的核心基石,为了解…...