《NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis》论文精读

news2024/11/25 6:48:05

Abstract

我们提出了一种方法,通过使用稀疏的输入视图集优化底层连续体场景函数,实现了合成复杂场景新视图的最先进结果。我们的算法使用全连接(非卷积)深度网络表示场景,其输入是单个连续的5D坐标(空间位置(x, y, z)和观看方向(θ, φ)),其输出是该空间位置的体积密度和视图相关的发射辐射。我们通过沿相机光线查询5D坐标来合成视图,并使用经典的体绘制技术将输出颜色和密度投影到图像中。因为体绘制是自然可微的,优化我们的表示所需要的唯一输入是一组已知相机姿势的图像。我们描述了如何有效地优化神经辐射场,以呈现具有复杂几何和外观的场景的逼真新颖视图,并展示了优于先前神经渲染和视图合成工作的结果。视图合成结果最好以视频的形式观看,因此我们敦促读者观看我们的补充视频以进行令人信服的比较.

1、Introduction

在这项工作中,我们通过直接优化连续5D场景表示的参数,以最小化渲染一组捕获图像的误差,以一种新的方式解决了长期存在的视图合成问题。
我们将静态场景表示为连续的5D函数,该函数输出空间中每个点(x, y, z)在每个方向(θ, φ)发射的辐射,以及每个点的密度,其作用类似于微分不透明度,控制通过(x, y, x)的光线累积多少辐射。我们的方法优化了一个没有任何卷积层的深度全连接神经网络(通常称为多层感知器或MLP),通过从单个5D坐标(x, y, z, θ, φ)回归到单个体积密度和视图相关的RGB颜色来表示该函数。为了从一个特定的视点渲染神经辐射场(NeRF),我们:
1)将相机光线穿过场景以生成一组采样的3D点,
2)使用这些点及其相应的2D观看方向作为神经网络的输入,以产生一组输出的颜色和密度,
3)使用经典的体绘制技术将这些颜色和密度累积到2D图像中。因为这个过程是自然可微的,我们可以使用梯度下降来优化这个模型,通过最小化每个观察到的图像和从我们的表示中呈现的相应视图之间的误差。通过将高体积密度和准确的颜色分配给包含真实底层场景内容的位置,最大限度地减少这种跨多个视图的错误,可以鼓励网络预测场景的连贯模型。图2显示了整个管道。

图1:我们提出了一种方法,该方法从一组输入图像中优化场景的连续5D神经辐射场表示(任何连续位置的体积密度和视图相关颜色)。我们使用体渲染技术,沿着光线积累场景表示的样本,从任何视点渲染场景。在这里,我们可视化了在周围半球随机捕获的合成鼓场景的100个输入视图,我们展示了从我们优化的NeRF表示中渲染的两个新视图。

在这里插入图片描述
图2:我们的神经辐射场场景表示和可微分渲染过程的概述。我们通过沿着相机光线(a)采样5D坐标(位置和观看方向)来合成图像,将这些位置输入MLP以产生颜色和体积密度(b),并使用体渲染技术将这些值合成为图像©。该渲染函数是可微的,因此我们可以通过最小化合成图像和地面真实观察图像之间的残差来优化我们的场景表示(d)。

我们发现,优化复杂场景的神经辐射场表示的基本实现不能收敛到足够高分辨率的表示,并且在每个相机光线所需的样本数量方面效率低下。我们通过使用位置编码转换输入5D坐标来解决这些问题,该编码使MLP能够表示更高频率的函数,并且我们提出了一个分层采样过程,以减少充分采样这种高频场景表示所需的查询数量。
我们的方法继承了体积表示的优点:两者都可以表示复杂的现实世界的几何形状和外观,并且非常适合使用投影图像进行基于梯度的优化。至关重要的是,我们的方法克服了在高分辨率下建模复杂场景时离散体素网格的高昂存储成本。总之,我们的技术贡献是:

  • 一种将具有复杂几何和材料的连续场景表示为5D神经辐射场的方法,参数化为基本MLP网络。
  • 基于经典体绘制技术的可微分渲染过程,我们使用它来优化标准RGB图像的这些表示。这包括一个分层采样策略,将MLP的容量分配给具有可见场景内容的空间。
  • 位置编码将每个输入5D坐标映射到高维空间,这使我们能够成功优化神经辐射场以表示高频场景内容。
    我们证明,我们得到的神经辐射场方法在定量和定性上都优于最先进的视图合成方法,包括将神经3D表示适合于场景的工作,以及训练深度卷积网络来预测采样体积表示的工作。据我们所知,本文提出了第一个连续的神经场景表示,能够从自然环境中捕获的RGB图像中呈现真实物体和场景的高分辨率逼真的新视图。

2、相关工作

计算机视觉领域最近一个很有前途的方向是在MLP的权重中对对象和场景进行编码,该MLP直接从3D空间位置映射到形状的隐式表示,例如该位置的带符号距离[6]。然而,到目前为止,这些方法还无法再现具有复杂几何形状的逼真场景,其保真度与使用离散表示(如三角形网格或体素网格)表示场景的技术相同。在本节中,我们回顾了这两条工作线,并将它们与我们的方法进行了对比,该方法增强了神经场景表示的能力,从而为渲染复杂的现实场景产生最先进的结果。
使用mlp从低维坐标映射到颜色的类似方法也被用于表示其他图形函数,如图像[44]、纹理材料[12,31,36,37]和间接照明值[38]。
**神经三维形状表征:**最近的工作通过优化将xyz坐标映射到带符号距离函数[15,32]或占用域[11,27]的深度网络,研究了连续3D形状作为水平集的隐式表示。然而,这些模型受到访问地面真实三维几何的要求的限制,通常从合成三维形状数据集(如ShapeNet[3])获得。随后的工作通过制定可微渲染函数放宽了对地面真实3D形状的要求,该函数允许仅使用2D图像优化神经隐式形状表示。Niemeyer等[29]将曲面表示为三维占用场,并使用数值方法找到每条射线的曲面交点,然后使用隐式微分计算精确导数。每个光线相交位置作为神经3D纹理场的输入提供,该纹理场预测该点的漫射颜色。Sitzmann等人使用了一种不太直接的神经3D表示,它只是在每个连续的3D坐标上输出一个特征向量和RGB颜色,并提出了一个可微的渲染函数,该函数由一个循环神经网络组成,该神经网络沿着每条射线行进,以确定表面的位置。
虽然这些技术可以潜在地表示复杂和高分辨率的几何形状,但到目前为止,它们仅限于具有低几何复杂性的简单形状,导致过度平滑的渲染。我们展示了一种优化网络的替代策略来编码5D辐射场(具有2D视图依赖外观的3D体),可以表示更高分辨率的几何形状和外观,以呈现复杂场景的逼真新颖视图。
**视图合成和基于图像的渲染:**给定密集的视图采样,可以通过简单的光场采样插值技术重建逼真的新视图[21,5,7]。对于具有稀疏视图采样的新型视图合成,计算机视觉和图形学界已经通过从观测图像中预测传统的几何和外观表示取得了重大进展。一种流行的方法是使用基于网格的场景表示,其外观要么是漫射[48],要么是视图依赖[2,8,49]。
可微光栅器[4,10,23,25]或路径追踪器[22,30]可以直接优化网格表示,以使用梯度下降再现一组输入图像。
然而,基于图像重投影的基于梯度的网格优化通常是困难的,可能是因为局部最小值或损失景观的不良调节。此外,该策略需要在优化[22]之前提供具有固定拓扑的模板网格作为初始化,这对于无约束的现实场景通常是不可用的。
另一类方法使用体积表示来解决从一组输入RGB图像中合成高质量逼真视图的任务。
体积方法能够真实地表示复杂的形状和材料,非常适合基于梯度的优化,并且倾向于产生比基于网格的方法更少的视觉分散的工件。早期的体积方法使用观察到的图像直接为体素网格上色[19,40,45]。最近,有几种方法[9,13,17,28,33,43,46,52]使用多个场景的大型数据集来训练深度网络,这些深度网络可以从一组输入图像中预测采样的体积表示,然后使用alpha合成[34]或沿光线学习合成来在测试时呈现新视图。其他研究已经针对每个特定场景优化了卷积网络(CNN)和采样体素网格的组合,使得CNN可以补偿来自低分辨率体素网格的离散化伪影[41],或者允许预测的体素网格根据输入时间或动画控制[24]而变化。虽然这些体积技术在新颖的视图合成方面取得了令人印象深刻的结果,但它们扩展到更高分辨率图像的能力从根本上受到时间和空间复杂性的限制,这是由于它们的离散采样造成的——渲染更高分辨率的图像需要更精细的3D空间采样。我们通过在深度全连接神经网络的参数中编码连续体来规避这个问题,这不仅比之前的体积方法产生更高质量的渲染,而且只需要那些采样体积表示的一小部分存储成本。

3、 神经辐射场场景表示

我们将连续场景表示为5D向量值函数,其输入是3D位置x = (x, y, z)和2D观看方向(θ, φ),其输出是发射颜色c = (r, g, b)和体积密度σ。在实践中,我们将方向表示为三维笛卡尔单位向量d。我们使用MLP网络FΘ:(x, d)→(c, σ)近似这种连续的5D场景表示,并优化其权重Θ,以从每个输入5D坐标映射到其相应的体积密度和方向发射颜色。
我们通过限制网络预测体积密度σ仅作为位置x的函数,同时允许RGB颜色c作为位置和观看方向的函数来预测,从而鼓励表示是多视图一致的。为了实现这一点,MLP FΘ首先用8个完全连接的层(使用ReLU激活和每层256个通道)处理输入的3D坐标x,并输出σ和256维特征向量。然后,这个特征向量与相机光线的观察方向相连接,并传递到另一个完全连接的层(使用ReLU激活和128通道),该层输出与视图相关的RGB颜色。
图3是我们的方法如何使用输入观看方向来表示非朗伯效应的示例。如图4所示,没有视图依赖(只有x作为输入)训练的模型难以表示镜面。
在这里插入图片描述
图3:视图相关发射辐射的可视化。我们的神经辐射场表示输出RGB颜色作为空间位置x和观看方向d的5D函数。在这里,我们在船舶场景的神经表示中可视化两个空间位置的示例方向颜色分布。
在(a)和(b)中,我们展示了来自两个不同摄像机位置的两个固定3D点的外观:一个在船的侧面(橙色插图),另一个在水面上(蓝色插图)。我们的方法预测了这两个3D点的变化镜面外观,在©中,我们展示了这种行为如何在整个观看方向的半球上连续地推广。

在这里插入图片描述图4:在这里,我们可视化了我们的完整模型如何从表示依赖于视图的发射辐射和通过高频位置编码传递我们的输入坐标中获益。移除视图依赖可以防止模型在推土机履带上重现镜面反射。移除位置编码极大地降低了模型表示高频几何和纹理的能力,导致过度光滑的外观

4、体积渲染与亮度场

我们的5D神经辐射场将场景表示为空间中任何一点的体积密度和定向发射辐射。我们使用经典体渲染[16]的原理来渲染穿过场景的任何光线的颜色。
体积密度σ(x)可以解释为射线终止于位置x的无限小粒子的微分概率。相机射线r(t) = 0 + td的期望颜色C®有近界tn和远界tf为:
在这里插入图片描述
函数T (T)表示沿射线从tn到T的累计透射率,即射线从tn到T不击中任何其他粒子的概率。从我们的连续神经辐射场渲染视图需要估计通过所需虚拟相机的每个像素跟踪的相机光线的积分C®。
我们用正交法对这个连续积分进行数值估计。通常用于呈现离散体素网格的确定性正交(Deterministic quadrature)会有效地限制我们表示的分辨率,因为MLP只能在一组固定的离散位置上查询。相反,我们使用分层抽样方法,将[tn, tf]划分为N个均匀间隔的箱子,然后从每个箱子内均匀随机抽取一个样本:
在这里插入图片描述
虽然我们使用离散的样本集来估计积分,但分层抽样使我们能够表示连续的场景表示,因为它导致在优化过程中在连续位置评估MLP。我们使用这些样本来估计C®,并使用Max[26]在体积渲染评论中讨论的正交规则:
在这里插入图片描述
其中δi = ti+1 - ti为相邻样本间的距离。从(ci, σi)值的集合中计算C®的函数是平凡可微的,可以简化为传统的α合成,αi = 1−exp(−σi - δi)。

5、优化神经辐射场

在前一节中,我们描述了将场景建模为神经辐射场并从该表示呈现新视图所需的核心组件。然而,我们观察到这些组件不足以达到最先进的质量,如第6.4节所示)。我们介绍了两项改进,以实现高分辨率复杂场景的表示。第一个是输入坐标的位置编码,帮助MLP表示高频函数,第二个是分层采样过程,使我们能够有效地对高频表示进行采样。

5.1、位置编码

尽管神经网络是通用函数逼近器[14],但我们发现,让网络FΘ直接操作xyzθφ输入坐标会导致渲染结果在表示颜色和几何的高频变化方面表现不佳。这与Rahaman等人最近的研究一致,该研究表明深度网络倾向于学习低频函数。他们还表明,在将输入传递给网络之前,使用高频函数将输入映射到更高维度的空间,可以更好地拟合包含高频变化的数据。
我们在神经场景表示的背景下利用这些发现,并表明将FΘ重新表述为两个函数FΘ = FΘoγ的组成,一个是学习的,一个不是,显著提高了性能(见图4和表2)。

这里γ是从R到高维空间R2L的映射,FΘ仍然是一个普通的MLP。形式上,我们使用的编码函数是:
在这里插入图片描述
这个函数γ(·)分别应用于x中的三个坐标值(被归一化为[- 1,1])和笛卡尔观测方向单位矢量d的三个分量(通过构造在[- 1,1]中)。在我们的实验中,我们设置γ(x)的L = 10, γ(d)的L = 4。
在流行的Transformer体系结构[47]中也使用了类似的映射,它被称为位置编码。然而,transformer将其用于不同的目标,即提供序列中记号的离散位置,作为不包含任何顺序概念的体系结构的输入。相反,我们使用这些函数将连续输入坐标映射到高维空间,使我们的MLP更容易近似更高频率的函数。
同时,从投影[51]对三维蛋白质结构建模的相关问题也使用了类似的输入坐标映射。

5.2、分层体积抽样

我们的渲染策略是沿着每条相机光线在N个查询点上密集地评估神经辐射场网络,这是低效的:对渲染图像没有贡献的自由空间和遮挡区域仍然被重复采样。我们从早期的体绘制工作[20]中获得灵感,并提出了一种分层表示,通过按比例分配样本对最终渲染的预期效果来提高渲染效率。
而不是仅仅使用一个网络来表示场景,我们同时优化两个网络:一个“粗”和一个“精”。我们首先使用分层抽样对一组Nc位置进行采样,并评估这些位置的“粗”网络,如公式2和3所述。给定这个“粗糙”网络的输出,然后我们沿着每条射线产生一个更明智的采样点,其中样本偏向于体积的相关部分。为了做到这一点,我们首先将Eqn. 3中的粗网络cc®中的alpha合成颜色重写为沿着射线的所有采样颜色ci的加权和:
在这里插入图片描述
将这些权重归一化为
在这里插入图片描述
沿着射线产生一个分段恒定的PDF。我们使用反变换采样从该分布中采样第二组Nf位置,在第一组和第二组样本的联合处评估我们的“精细”网络,并使用Eqn. 3但使用所有Nc +Nf样本计算射线的最终渲染颜色Cf ®。这个过程将更多的样本分配到我们期望包含可见内容的区域。这解决了与重要性采样类似的目标,但我们使用采样值作为整个积分域的非均匀离散化,而不是将每个样本作为整个积分的独立概率估计。

5.3 实现细节

我们为每个场景优化了一个单独的神经连续体表示网络。这只需要捕获场景的RGB图像的数据集,相应的相机姿势和内在参数以及场景边界(我们使用合成数据的地面真实相机姿势,内在和边界,并使用COLMAP结构-from-motion包[39]来估计真实数据的这些参数)。在每次优化迭代中,我们从数据集中的所有像素集中随机抽取一批相机射线,然后按照5.2节中描述的分层抽样,从粗网络中查询Nc样本,从细网络中查询Nc + Nf样本。然后,我们使用第4节中描述的体渲染过程来渲染来自两组样本的每条光线的颜色。我们的损失只是粗略和精细渲染的渲染和真实像素颜色之间的总平方误差:
在这里插入图片描述
式中,R为每批射线的集合,C®、Cc®、Cf ®分别为射线R的基本真值、粗体积预测值和细体积预测值RGB颜色。请注意,尽管最终的渲染来自于Cf ®,但我们也最小化了Cc®的损失,以便粗网络的权重分布可以用于在细网络中分配样本。
在我们的实验中,我们使用了4096条射线的批处理大小,每条射线在粗体积的Nc = 64坐标处采样,在细体积的Nf = 128附加坐标处采样。我们使用亚当优化器[18],其学习率从5 × 10−4开始,在优化过程中呈指数衰减到5 × 10−5(其他亚当超参数保留默认值β1 = 0.9, β2 = 0.999,和?= 10−7)。单个场景的优化通常需要大约10 - 30万次迭代才能在单个NVIDIA V100 GPU上收敛(大约1-2天)。

6、结果

我们定量地(表1)和定性地(图8和图6)表明,我们的方法优于先前的工作,并提供了广泛的消融研究来验证我们的设计选择(表2)。我们敦促读者观看我们的补充视频,以便更好地理解我们的方法在呈现新视图的平滑路径时比基线方法有显著改进。

6.1、数据集

**物体的合成渲染:**我们首先展示了两个对象合成渲染数据集的实验结果(表1,“Diffuse synthetic 360◦”和“Realistic synthetic 360◦”)。DeepVoxels[41]数据集包含四个具有简单几何形状的兰伯特对象。每个对象都以512 × 512像素从上半球采样的视点渲染(479作为输入,1000用于测试)。我们还生成了自己的数据集,其中包含八个物体的路径跟踪图像,这些物体表现出复杂的几何形状和逼真的非朗伯材料。其中六个是从上半球上采样的视点绘制的,另外两个是从整个球体上采样的视点绘制的。我们渲染每个场景的100个视图作为输入,200个用于测试,都是800 × 800像素。
**复杂场景的真实图像:**我们展示了用大致面向前方的图像捕获的复杂现实场景的结果(表1,“真实面向前方”)。该数据集由手持手机捕获的8个场景组成(5个来自LLFF论文,3个来自我们的捕获),捕获了20到62张图像,并将其中的1/8用于测试集。所有图像都是1008×756像素。

6.2比较

为了评估我们的模型,我们将其与当前表现最好的视图合成技术进行比较,详细内容如下。除了Local Light Field Fusion[28]之外,所有方法都使用相同的输入视图集来训练每个场景的单独网络,Local Light Field Fusion[28]在大型数据集上训练单个3D卷积网络,然后在测试时使用相同的训练网络来处理新场景的输入图像。
**神经体积(NV):**在不同的背景(必须在没有感兴趣的对象的情况下单独捕获)前,完全位于有限体积内的物体的综合新视图。它优化了一个深度3D卷积网络来预测具有1283个样本的离散RGBα体素网格和具有323个样本的3D翘曲网格。该算法通过移动相机光线通过扭曲的体素网格来呈现新的视图。
**场景表示网络(SRN)😗*将一个连续的场景表示为一个不透明的表面,由一个MLP隐式定义,该MLP将每个(x, y, z)坐标映射到一个特征向量。他们训练一个循环神经网络,通过使用任何3D坐标上的特征向量来预测光线的下一个步长,从而沿着光线在场景表示中行进。最后一步的特征向量被解码为表面上该点的单一颜色。
请注意,SRN是DeepVoxels[41]的更好表现的后续,这就是为什么我们不包括与DeepVoxels的比较。
局部光场融合(LLFF)" LLFF设计用于为采样良好的前面向场景生成逼真的新视图。它使用经过训练的3D卷积网络直接预测每个输入视图的离散的锥体采样RGBα网格(多平面图像或MPI[52]),然后通过alpha合成和将附近的MPI混合到新的视点中来呈现新的视图。

6.3、讨论

我们完全优于这两个基线,在所有场景中优化每个场景(NV和SRN)的单独网络。此外,我们在只使用他们的输入图像作为我们的整个训练集的情况下,与LLFF相比,我们在质量和数量上都产生了更好的渲染(除了一个度量)。
SRN方法产生高度平滑的几何和纹理,并且由于每个相机光线只选择单一深度和颜色,其视图合成的表示能力受到限制。NV基线能够捕获相当详细的体积几何形状和外观,但它使用的底层明确的1283体素网格阻止了它在高分辨率下缩放来表示精细细节。LLFF特别提供了一个“采样指南”,即输入视图之间的差异不超过64像素,因此它经常无法在包含400-500像素视图之间差异的合成数据集中估计正确的几何形状。此外,LLFF在不同的场景表示之间混合以呈现不同的视图,导致感知分散的不一致,这在我们的补充视频中是显而易见的。
这些方法之间最大的实际权衡是时间与空间。
所有比较的单场景方法每个场景至少需要12小时的训练。相比之下,LLFF可以在10分钟内处理一个小的输入数据集。然而,LLFF为每个输入图像生成一个大的3D体素网格,导致巨大的存储需求(一个“逼真合成”场景超过15GB)。我们的方法只需要5 MB的网络权重(与LLFF相比,相对压缩是3000倍),这甚至比我们任何数据集中的单个场景的输入图像本身的内存还要少。

6.4、烧蚀研究

我们通过表2中广泛的消融研究验证了算法的设计选择和参数。我们在“逼真的合成360度”场景上呈现结果。第9行显示了我们完整的模型作为参考点。第1行显示了我们模型的极简版本,没有位置编码(PE)、视图依赖(VD)或分层采样(H)。在第2 - 4行中,我们从完整模型中一次一个地删除这三个组件,观察到位置编码(第2行)和视图依赖(第3行)提供了最大的定量效益,其次是分层采样(第4行)。第5-6行显示了我们的性能如何随着输入图像数量的减少而下降。请注意,当提供100张图像时,仅使用25张输入图像的方法在所有指标上的性能仍然超过NV、SRN和LLFF(请参阅补充材料)。在第7-8行中,我们验证了x的位置编码中使用的最大频率L的选择(d使用的最大频率按比例缩放)。仅使用5个频率会降低性能,但将频率数量从10个增加到15个不会提高性能。
我们认为,一旦2L 超过采样输入图像中的最大频率(在我们的数据中大约是1024),增加L的好处就会受到限制。

7、结论

我们的工作直接解决了先前使用mlp将对象和场景表示为连续函数的工作的不足。我们证明,将场景表示为5D神经辐射场(一种MLP,输出体积密度和视图相关的发射辐射,作为3D位置和2D观看方向的函数)产生的渲染效果比以前主流的训练深度卷积网络输出离散体素表示的方法更好。

尽管我们已经提出了一种分层采样策略来提高渲染的采样效率(用于训练和测试),但在研究有效优化和渲染神经辐射场的技术方面仍有很多进展要做。未来工作的另一个方向是可解释性:采样表示,如体素网格和网格,承认对渲染视图和故障模式的预期质量进行推理,但当我们在深度神经网络的权重中编码场景时,尚不清楚如何分析这些问题。我们相信这项工作在基于真实世界图像的图形管道方面取得了进展,其中复杂的场景可以由实际物体和场景图像优化的神经辐射场组成。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++系列五:输入/输出

C输入输出 1. 输入2. 输出3. 格式化输出4. 总结 1. 输入 输入是指从外部源获得数据的过程, C中可通过键盘或文件等外部源来获取输入数据。 (1)cin cin是C标准库中的一个输入流对象,用于从标准输入设备(通常是键盘&a…

如何评价滤波器的去噪效果?

假如使用两种滤波器,那么滤波效果如何去评价1? 为了能够得到高质量的去噪后信号,需要对滤波器的滤波效果进行评价,选取去噪效果最好的滤波器对原始信号进行去噪处理。 一般使用信噪比和峰值信噪比对滤波器进行量化评价&#xff0c…

Docker 基础实战:环境搭建、容器、仓库、镜像

文章目录 Docker 基础实战环境搭建容器启动容器新建并启动容器终止容器启动已终止容器创建守护态容器 容器日志查看日志日志驱动 进入容器docker attachdocker exec 容器信息docker psdocker inspectdocker topdocker stats 删除容器容器快照导出快照导入快照 仓库Docker Hub本…

软考--快速掌握七层模型与各种协议的划分

目录 协议族 网络层涉及的协议 传输层涉及的协议 应用层涉及的协议 协议族 认识几个协议族,所谓协议族就是说他不是单一的协议。而是很多协议拼在一起的。 TCP/IP协议族是internet的标准协议族,所以使用广,但是tcp/ip协议族传输效率是比较…

面试题:String,StringBuilder和StringBuffer的区别

面试题:String,StringBuilder和StringBuffer的区别 一、String 1、String是一个长度不可变的字符序列,底层是一个被final修饰的char[]数组。 2、任何对String类型进行改变的操作实际上都是重新生产一个新的String对象,然后将指…

micro-app在vue-element-admin中一些使用研究

1、简述 本文承接上一篇micro-app在vue-element-admi中的搭建,对micro-app在vue-element-admin中的一些平时开发中常用的功能做了一些研究。本文代码 2、路由 关于路由,这边从两方面进行研究,一方面是对菜单的配置,另一方面是页…

❤ 个人博客的搭建和设置

❤ 个人博客的搭建和设置 闲暇时候自己试着做了一个自己的个人博客,博客使用的Github进行托管,还在阿里云买了属于自己的域名 具体步骤如下 1、登陆自己的博客账号,新建个人主页的仓库 2、到了我们的名字设置,格外注意&#xf…

Leetcode刷题之两两交换链表中的结点和相交链表

只有把抱怨环境的心情,化为上进的力量,才是成功的保证。 ——罗曼罗兰目录 🍉一.相交链表 💐1.双指针 🍍2.计算长度加双指针 🍒二.两两交换链表中的结点 🍌1.迭代 🍉一…

【Golang】多线程下载器的实现

〇、前言 多线程下载,顾名思义就是对一个文件进行切片访问,等待所有的文件下载完成后在本地进行拼接成一个整体文件的过程。 因此可以利用 golang 的多协程对每个分片同步下载,之后再合并且进行md5校验或者总长度校验。 一、请求资源 下载…

5.7学习周报

文章目录 前言文献阅读摘要简介数据方法论预测结果结论 时间序列预测总结 前言 本周阅读文献《Water quality forecasting based on data decomposition, fuzzy clustering and deep learning neural network》,文献主要结合数据分解、模糊C均值聚类和双向门控循环…

设计模式 - 工厂方法模式

设计模式 - 工厂方法模式 1、关于工厂方法模式2、工厂方法模式小试牛刀2.1、类图2.2、代码清单3、工厂方法模式的扩展3.1、简单工厂模式(静态工厂模式) 1、关于工厂方法模式 工厂方法模式,就是定义一个用于创建对象的接口,让子类决…

Ubuntu20升级nodejs版本

执行 grunt build的时候提示node版本过低 当前版本为10.19.0,不满足要求 安装 n,用于更新 node 版本的 sudo npm install n -g用n 下载 nodejs 的最新稳定版本 sudo n stable3. 安装完毕,node -r检查当前版本

【算法与数据结构】链表

链表 链表:结构定义 链表是由一串节点串联在一起的,链表的每个节点存储两个信息:数据下一个节点的地址 分清楚两个概念:什么是内存内部,什么是程序内部 内存内部: 信息存储在内存空间里的 程序内部&#…

复习笔记1

考纲(张友生版本软件架构 考试题型: 10*3单选 5*3简答题 5*3设计图(含画图) 10*2 论述题 10*2综合题 复习以课件为主,书为辅 第一章 (软件危机) ? ? 构造模型与实现 掌握软件结构体系核心模型 第二章 软件体…

阿里云Alibaba Cloud Linux镜像系统介绍及常见问题解答FAQ

阿里云服务器操作系统Alibaba Cloud Linux镜像怎么样?可以代替CentOS吗?Alibaba Cloud Linux兼容性如何?有人维护吗?漏洞可以修复吗?Alibaba Cloud Linux完全兼容CentOS,并由阿里云官方免费提供长期维护。 …

Java并发,夺命 60 问

基础 1.并行跟并发有什么区别? 从操作系统的角度来看,线程是CPU分配的最小单位。 并行就是同一时刻,两个线程都在执行。这就要求有两个CPU去分别执行两个线程。 并发就是同一时刻,只有一个执行,但是一个时间段内&am…

linux系统中rpm与Yum软件仓库

rpm的作用: 在没有rpm软件管理之前我们在安装、升级、卸载服务程序时要考虑到其他程序、库的依赖关系,所以在进行安装、校验、卸载、升级等操作时的难度就非常之大。 rpm机制则为就是为了解决这些问题而设计的,rpm有点像windows系统中的控制…

xawtv涉及的vivid系统调用分析

xawtv涉及的vivid系统调用分析 文章目录 xawtv涉及的vivid系统调用分析调用过程分析摄像头驱动程序必需的11个ioctl非必须必须 分析数据的获取过程1.请求分配缓冲区: ioctl(4, VIDIOC_REQBUFS // 请求系统分配缓冲区2.查询映射缓冲区:3.把缓冲区放入队列:4.启动摄像头5.用selec…

Docker-Flannel网络讲解

目录 什么是Flannel Flannel原理 部署 环境准备 安装etcd 安装fannel 在server2上装flannel 测试 什么是Flannel flannel是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络(Overlay Network)工具,其目的在于帮助每一个使用 Kuberent…

文心一言 VS chatgpt (15)-- 算法导论3.2 4~5题

四、函数 ⌈ lg ⁡ n ⌉ ! \lceil \lg n \rceil ! ⌈lgn⌉! 多项式有界吗?函数 ⌈ lg ⁡ lg ⁡ n ⌉ ! \lceil \lg \lg n \rceil ! ⌈lglgn⌉! 多项式有界吗? 文心一言: chatgpt: 对于第一个问题,函数 ⌈ lg ⁡ n…