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

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} IiRHi×Wi×3转换为2D特征地图 F i ∈ R H i / 4 × W i / 4 × C F_i∈\mathbb{R} ^{H_i/4×W_i/4×C} FiRHi/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] Φ=[KRt],我们考虑了单应性变换:
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(RiR1T+z(t1ti)n1T)K11    (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) (uv)表示参考视图中的一个像素位置。在这项工作中,我们使用参考视图上的归一化的坐标(NDC)来参数化 ( u 、 v 、 z ) (u、v、z) (uvz)

代价体
代价体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(1exp(σk))rk,   τ=exp(j=1k1σ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=∣∣ctc~t22    (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文件&#xff0c;然后页面预览下载这样的情况。之前导出word文档又不是我做的&#xff0c;所以为了不影响业务&#xff0c;只是将最后在输出流时转换成了PDF&#xff0c;当时本地调用没什么问题&#xff0c;一切正常&#xf…...

C\C++ 获取最值

C C 语言的不同类型的最值可以在 limits.h 头文件里找到定义 #include <limits.h>int main() {printf("%d", INT_MAX); // 整数最大值printf("%d", INT_MIN); // 整数最小值 } C C 有模板&#xff0c;可以通过替换下面的 int 和 double&#xff…...

机器学习之无监督学习:九大聚类算法

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

Linux高级管理-搭建网站服务

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

Windows 系统,TortoiseSVN 无法修改 Log 信息解决方法

使用SVN提交版本信息时&#xff0c;注释内容写的不全。通过右键TortoiseSVN的Show log看到提交的的注释&#xff0c;右键看到Edit log message的选项&#xff0c;然而提交后却给出错误提示&#xff1a; Repository has not been enabled to accept revision propchanges; ask …...

编译 Android gradle-4.6-all.zip 报错问题记录

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

Linux系统调试课:Valgrind 内存调试

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

python主流开发工具排名,python开发工具有哪些

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

Spring Boot Async:从入门到精通,原理详解与最佳实践

Spring Boot 的异步功能&#xff08;Async&#xff09;允许我们将某些任务异步执行&#xff0c;而不会阻塞主线程。这对于处理耗时的操作非常有用&#xff0c;如发送电子邮件、生成报表、调用外部 API 等。通过异步处理&#xff0c;我们可以释放主线程&#xff0c;让它继续处理…...

oracle 19c创建db_link名称带.com域名问题处理

文章目录 一、修改PDB的global_name二、重启数据库实例三、修改domain后重试 一、修改PDB的global_name SYSorcl1>sho pdbsCON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ----------2 PDB$SEED …...

银行卡二要素API的应用案例:从在线购物到金融投资

引言 随着互联网技术的不断发展&#xff0c;人们的金融需求也在不断增加。随之而来的是各种新型金融服务的涌现&#xff0c;让用户的金融体验更加便利快捷。其中&#xff0c;银行卡二要素API的应用&#xff0c;则为用户的金融体验和安全性提供了极大的保障。 银行卡二要素API…...

MySQL 忘记root密码后重置密码操作

在忘记 MySQL 密码的情况下&#xff0c;可以通过 --skip-grant-tables 关闭服务器的认证&#xff0c;然后重置 root 的密码&#xff0c;具体操作步骤如下。 步骤 1)&#xff1a;关闭正在运行的 MySQL 服务。打开 cmd 进入 MySQL 的 bin 目录。 步骤 2)&#xff1a;输入mysqld -…...

开源电子合同签署平台小程序源码/电子文件签字+在线合同签署系统源码/电子合同小程序源码

源码简介&#xff1a; 开源电子合同签署平台小程序源码&#xff0c;它是电子文件签字在线合同签署系统源码/电子合同小程序源码 目前商业端和开源端一致&#xff0c;免费开源状态&#xff01; 聚合市场上各类电子合同解决方案商&#xff0c;你无需一个一个的对接电子合同厂商…...

J.408之数据结构

J-408之数据结构_北京信息科技大学第十五届程序设计竞赛&#xff08;同步赛&#xff09; (nowcoder.com) 思维好题&#xff0c;直接用两个set存没出现的数字就好了 // Problem: 408之数据结构 // Contest: NowCoder // URL: https://ac.nowcoder.com/acm/contest/68572/J // Me…...

前端食堂技术周刊第 107 期:技术播客节、Deno Cron、FEDAY、XState v5、Electron 2023 生态系统回顾

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;烤椰拿铁 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 大家好&#xff0c;我是童欧巴。欢迎来到前端食堂技术周刊&#xff0c;我们先来看下…...

三防平板|手持终端PDA|8寸/10寸工业三防平板电脑主板方案定制

近年来&#xff0c;随着科技的快速发展&#xff0c;三防平板成为了各行各业中不可或缺的工具。三防平板采用IP67级别的防护设计&#xff0c;通过了多项测试标准&#xff0c;如国标和美标&#xff0c;具备防水、防摔、防尘、防撞、防震、防跌落以及防盐雾等多重防护功能。因此&a…...

【C语言】动态内存管理(C语言的难点与精华,数据结构的前置知识,你真的掌握了吗?)

文章目录 引言一、为什么要动态内存分配二、动态内存分配的相关函数2.1 malloc2.2 free2.3 calloc2.4 realloc 三、常见的动态内存的错误3.1 对NULL指针的解引用3.2 对动态内存越界访问3.3 对非动态内存释放3.4 对动态内存部分释放3.5 对动态内存多次释放3.6 未对动态内存释放&…...

最长子序列问题(LCS)--动态规划解法

题目描述&#xff1a; 如果Z既是X的子序列&#xff0c;又是Y的子序列&#xff0c;则称Z为X和Y的公共子序列。 如果给定X、Y&#xff0c;求出Y及其长度。 示例&#xff1a; 输入 ABCPDSFJGODIHJOFDIUSHGD OSDIHGKODGHBLKSJBHKAGHI 输出 SDIHODSHG 9 分析&#xff1a; c…...

实时流式计算 kafkaStream

文章目录 实时流式计算Kafka StreamKafka Streams 的关键概念KStreamKafka Stream入门案例编写SpringBoot 集成 Kafka Stream 实时流式计算 一般流式计算会与批量计算相比较 流式计算就相当于上图的右侧扶梯&#xff0c;是可以源源不断的产生数据&#xff0c;源源不断的接收数…...

西南科技大学模拟电子技术实验七(集成运算放大器的非线性应用)预习报告

一、计算/设计过程 说明:本实验是验证性实验,计算预测验证结果。是设计性实验一定要从系统指标计算出元件参数过程,越详细越好。用公式输入法完成相关公式内容,不得贴手写图片。(注意:从抽象公式直接得出结果,不得分,页数可根据内容调整) 预习计算内容根据运放的非线…...

Ubuntu与Windows通讯传输文件(FTP服务器版)(没用的方法,无法施行)

本文介绍再Windows主机上建立FTP服务器&#xff0c;并且在Ubuntu虚拟机上面访问Windows上FTP服务器的方法 只要按照上图配置就可以了 第二部&#xff1a;打开IIS管理控制台 右击网站&#xff0c;新建FTP站点。需要注意的一点是在填写IP地址的时候&#xff0c;只需要填写Window…...

2024年AI视频识别技术的6大发展趋势预测

随着人工智能技术的快速发展&#xff0c;AI视频识别技术也将会得到进一步的发展和应用。2023年已经进入尾声&#xff0c;2024年即将来临&#xff0c;那么AI视频识别技术又将迎来怎样的发展趋势&#xff1f;本文将对2023年的AI视频技术做一个简单的盘点并对2024年的发展趋势进行…...

一篇文章了解JDK的前世今生

我们每天都在开发Java,每天都在使用JDK,那么我们了解JDK的发展史吗,这篇文章将带你深入了解JDK的发展史。 JDK(Java Development Kit)是Java开发者工具包,是用于编写Java程序和运行Java程序的软件开发工具集。自从1995年Java语言首次发布以来,JDK已经经历了数十年的发展…...

Redisson出现问题总结

org.redisson.client.RedisAuthRequiredException: NOAUTH Authentication required… channel: 出现此问题的原因为没有redis权限。解决方案在setAddress()后面加上setPassword()方法。 config.useSingleServer().setAddress("redis://localhost:6379").setPasswo…...

领域驱动架构(DDD)建模

一、背景 常见的软件开发方式是拿到产品需求后&#xff0c;直接考虑数据库中表应该如何设计&#xff0c;这种方式已经将设计与业务需求脱节&#xff0c;而更多的是直接考虑应该如何实现了&#xff0c;这有点本末倒置。而DDD是从领域(问题域)为出发点进行的设计方法。 领域驱动…...

PostgreSQL从小白到高手教程 - 第38讲:数据库备份

PostgreSQL从小白到专家&#xff0c;是从入门逐渐能力提升的一个系列教程&#xff0c;内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容&#xff0c;希望对热爱PG、学习PG的同学们有帮助&#xff0c;欢迎持续关注CUUG PG技术大讲堂。 第38讲&#…...

OpenGL ES eglCreatePbufferSurface() 和 eglCreateWindowSurface() 的对比和使用

一、介绍 相同点&#xff1a; eglCreatePbufferSurface 和 eglCreateWindowSurface 都是 OpenGL ES 中用于创建不同类型的EGL表面的函数&#xff0c;以便在OpenGL ES中进行渲染。 不同点&#xff1a; 选择使用哪种表面类型取决于你的需求。如果你只是需要在内存中进行离屏渲…...

python之马尔科夫链(Markov Chain)

马尔可夫链&#xff08;Markov Chain&#xff09;是一种随机过程&#xff0c;具有“马尔可夫性质”&#xff0c;即在给定当前状态的条件下&#xff0c;未来状态的概率分布仅依赖于当前状态&#xff0c;而与过去状态无关。马尔可夫链在很多领域都有广泛的应用&#xff0c;包括蒙…...

数据库管理-第123期 Oracle相关两个参数(202301205)

数据库管理-第123期 Oracle相关两个参数&#xff08;202301205&#xff09; 最近在群聊中看到俩和Oracle数据库相关的俩参数&#xff0c;一个是Oracle数据库本身的&#xff0c;一个是来自于Weblogic的&#xff0c;挺有趣的&#xff0c;本期研究一下。&#xff08;本期涉及参数…...

掌握vue中国际化使用及配置

文章目录 &#x1f341;i18n组件安装&#x1f341;项目中配置 vue-i18n&#x1f341;编写语言包&#x1f341;国际化的使用 随着互联网的普及和全球化的发展&#xff0c;开发国际化的应用程序已经成为一种趋势。因此&#xff0c;将 VUE 应用程序国际化是非常有必要的。 以下是…...

Ubuntu编译文件安装SNMP服务

net-snmp源码下载 http://www.net-snmp.org/download.html 编译步骤 指定参数编译 ./configure --prefix/root/snmpd --with-default-snmp-version"2" --with-logfile"/var/log/snmpd.log" --with-persistent-directory"/var/net-snmp" --wi…...

3D Web可视化平台助力Aras开发PLM系统:提供数据访问、可视化和发布功能

HOOPS中文网慧都科技是HOOPS全套产品中国地区指定授权经销商&#xff0c;提供3D软件开发工具HOOPS售卖、试用、中文试用指导服务、中文技术支持。http://techsoft3d.evget.com/ Aras是一个面向数字化工业应用的开放性平台&#xff0c;帮助世界领先的复杂互联产品制造商转变其产…...

Graphpad Prism10.1.0 安装教程 (含Win/Mac版)

GraphPad Prism GraphPad Prism是一款非常专业强大的科研医学生物数据处理绘图软件&#xff0c;它可以将科学图形、综合曲线拟合&#xff08;非线性回归&#xff09;、可理解的统计数据、数据组织结合在一起&#xff0c;除了最基本的数据统计分析外&#xff0c;还能自动生成统…...

【动态规划】路径问题_不同路径_C++

题目链接&#xff1a;leetcode不同路径 目录 题目解析&#xff1a; 算法原理 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码 题目解析&#xff1a; 题目让我们求总共有多少条不同的路径可到达右下角&#xff1b; 由题可得&#xff1a; 机器人位于…...

Python并发-线程和进程

一、线程和进程对应的问题 **1.进程&#xff1a;**CPU密集型也叫计算密集型&#xff0c;指的是系统的硬盘、内存性能相对CPU要好很多&#xff0c;此时&#xff0c;系统运作大部分的状况是CPU Loading 100%&#xff0c;CPU要读/写I/O(硬盘/内存)&#xff0c;I/O在很短的时间就可…...

微信小程序适配方案:rpx(responsive pixel响应式像素单位)

小程序适配单位&#xff1a;rpx 规定任何屏幕下宽度为750rpx 小程序会根据屏幕的宽度自动计算rpx值的大小 Iphone6下&#xff1a;1rpx 1物理像素 0.5css 小程序编译后&#xff0c;rpx会做一次px换算&#xff0c;换算是以375个物理像素为基准&#xff0c;也就是在一个宽度…...

vue2 echarts饼状图,柱状图,折线图,简单封装以及使用

vue2 echarts饼状图&#xff0c;柱状图&#xff0c;折线图&#xff0c;简单封装以及使用 1. 直接上代码&#xff08;复制可直接用&#xff0c;请根据自己的文件修改引用地址&#xff0c;图表只是简单封装&#xff0c;可根据自身功能&#xff0c;进行进一步配置。&#xff09; …...

Linux信息收集

Linux信息收集 本机基本信息 #管理员 $普通用户 之前表示登录的用户名称&#xff0c;之后表示主机名&#xff0c;再之后表示当前所在目录 / 表示根目录 ~表示当前用户家目录1、内核&#xff0c;操作系统和设备信息 uname -a 打印所有可用的系统信息 uname -r 内核版本 u…...

三种定时任务总结

前言 springboot中设置定时任务有三种常见的方式&#xff0c;分别为&#xff1a; 基于Scheduled注解。基于Quartz框架。基于xxl-job框架。 下面将分别阐述下这三种方式的实现方式和优缺点。 1. Scheduled 介绍 Scheduled注解是Spring Framework提供的一个非常简单的创建定…...