NeRF系列(2):NeRF in the wild : Neural Radiance Fields for Unconstrained Photo Collections论文解读与公式推导

news2024/11/17 11:40:58

NeRF in the Wild: Neural Radiance Fields for Unconstrained Photo Collections

论文:https://openaccess.thecvf.com/content/CVPR2021/papers/Martin-Brualla_NeRF_in_the_Wild_Neural_Radiance_Fields_for_Unconstrained_Photo_CVPR_2021_paper.pdfhttps://openaccess.thecvf.com/content/CVPR2021/papers/Martin-Brualla_NeRF_in_the_Wild_Neural_Radiance_Fields_for_Unconstrained_Photo_CVPR_2021_paper.pdf

code:  https://github.com/kwea123/nerf_pl/tree/nerfwhttps://github.com/kwea123/nerf_pl/tree/nerfw

1 论文概要:

我们提出了一种基于学习的方法,利用非结构化的野外照片集合合成复杂场景的新视角。我们在神经辐射场(NeRF)的基础上进行了改进,以解决在真实世界的图像中存在的光照和遮挡等问题。我们将我们的方法命名为NeRF-W,并将其应用于互联网上著名地标的照片集合,展示了更接近真实照片的新视角渲染效果。

2 问题的提出:

从稀疏的拍摄图像集合中合成场景的新视角是计算机视觉中一个长期存在的问题,也是许多增强现实和虚拟现实应用的前提。传统的技术通常使用运动结构或基于图像的渲染来解决这个问题,但是近年来,由于神经渲染技术的进展,这个领域取得了重大的进步。

神经辐射场(Neural Radiance Fields,NeRF)方法将学习模块嵌入到3D几何上下文中,并通过训练来重建观察到的图像。NeRF模型使用神经网络的权重来建模场景的辐射场和密度,然后利用体素渲染技术合成新的视角,展示了前所未有的高保真度。

然而,在受控环境中,NeRF模型的表现良好:场景在短时间内捕捉,光照效果保持恒定,并且场景中的所有内容都是静态的。然而,当场景中存在移动物体或变化的光照时,NeRF的性能会显著下降。这种限制阻碍了NeRF在大规模自然环境中的直接应用,这些环境下输入图像可能相隔数小时或数年,并且可能包含行人和车辆的移动。

Background:

NeRF的原始公式:

在上述公式中,R(r, c, σ)是颜色c和密度σ的体积渲染,c(t)和σ(t)分别表示点r(t)处的颜色和密度,α(x) = 1 - exp(-x),而δk = tk+1 - tk是两个积分点之间的距离。为了选择在tn和tf(相机的近平面和远平面)之间的积分点{tk},我们使用分层抽样。 

 参数θ = [θ1, θ2]是待拟合的参数,而编码函数是固定的。

生成σ(t)和c(t)时,最终的激活函数分别是ReLU和sigmoid,因为密度必须是非负的,颜色必须在[0, 1]范围内。与[NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis.]不同的是,我们将神经网络描述为两个MLP,其中后一个依赖于前一个的一个输出z(t),以突出体积密度σ(t)与视角方向d之间的独立性。

 为了拟合参数θ,NeRF最小化了对RGB图像集合的重建误差的平方和,其中每个图像Ii与其对应的内部和外部相机参数配对,这些参数可以使用结构从运动中估计得到[27]。我们预先计算与每个像素j对应的相机射线集合,每条射线通过三维位置oi并具有方向dij,其中

为了提高采样效率,NeRF同时优化两个MLP:一个粗糙模型和一个细致模型,其中粗糙模型预测的密度确定了细致模型的积分点采样。两个模型的参数通过最小化以下损失函数进行优化:

3 NeRF-W

我们现在介绍NeRF-W,这是一个用于从自然环境中的照片集合重建3D场景的系统。我们基于NeRF [24] 并引入了两个增强方法,专门处理无约束图像的挑战。与NeRF类似,我们从一个无结构的照片集合中学习了一个体积密度表示Fθ,其中相机参数是已知的。NeRF假设输入视图是一致的:即从两个不同图像中的相同位置和观察方向观察的三维空间点具有相同的强度。但是,这个假设在互联网照片中(如图2所示)被违反,原因有两个不同的现象:

      1. 光度变化:在户外摄影中,白天时间和大气条件直接影响场景中物体的照明(因此也影响辐射强度)。这个问题在摄影成像流程中更加严重,因为自动曝光设置、白平衡和色调映射在不同照片之间的变化可能导致额外的光度不一致性[4]。

     2. 瞬态物体:真实世界的地标很少在没有移动物体或遮挡物的情况下被捕捉到。尤其是地标的旅游照片往往具有挑战性,因为它们经常包含摆姿势的人物和其他行人。 

4. Method

4.1 潜在外观建模

为了适应可变的照明和光度后处理,我们采用了生成潜在优化(Generative Latent Optimization,GLO)的方法,其中每个图像Ii被分配一个相应的长度为n(a)的实值外观嵌入向量。我们用图像相关的辐射ci(t)替换方程(1)中的图像无关辐射c(t),这还引入了对图像索引i的依赖性,用于逼近的像素颜色。 

  

 将这些外观嵌入作为仅用于生成颜色的网络分支的输入,使我们的模型能够在特定图像中变化场景的辐射,同时保证之前由MLPθ1预测的3D几何结构是静态的并在所有图像中共享。通过将n(a)设置为一个较小的值,我们鼓励优化过程识别一个连续的空间,可以嵌入照明条件,从而实现条件之间的平滑插值,如图8所示。

Generative Latent Optimization,GLO的方法

生成潜在优化(Generative Latent Optimization,简称GLO)是一种用于无监督学习生成模型的方法。它由Bojanowski等人在2017年的论文《Generative Latent Optimization》中提出。

GLO的目标是学习一个生成模型,能够从给定的数据集中生成逼真的样本,而无需显式的标签或监督。GLO的关键思想是学习一个潜在空间表示,该表示能够捕捉数据中的潜在结构和变化。

GLO模型包括两个主要组件:编码器网络和生成器网络。编码器网络将输入样本从数据集映射到潜在空间中的潜在表示。生成器网络接受潜在空间中的样本,并生成对应的输出样本,使其与输入样本相匹配。

GLO的训练过程涉及一个优化过程,用于找到每个输入样本的最优潜在表示。这是通过最小化重构损失来实现的,该损失衡量输入样本与其相应的生成样本之间的差异。优化过程是迭代进行的,逐渐更新潜在表示以改善生成样本的质量。

在训练过程中,GLO还包括一个正则化项,以促使潜在表示遵循先验分布,例如标准高斯分布。这有助于规范化潜在空间,并提高生成模型的泛化能力。

一旦训练完成,GLO模型可以通过从潜在空间中采样并通过生成器网络传递样本来生成新的样本。生成器网络将潜在样本映射到数据空间,产生逼真的输出样本,类似于训练数据。

GLO已应用于多种任务,包括图像生成、图像补全和风格转换等。它在生成高质量样本和捕捉训练数据的潜在分布方面表现出有希望的结果,而无需显式的监督。

总之,生成潜在优化(GLO)是一种无监督学习生成模型的方法,利用优化过程来学习潜在空间表示。它能够生成逼真的样本,捕捉训练数据的变化和结构。

4.2. 瞬态物体

 我们通过两个不同的设计决策来处理瞬态现象:

首先,我们将NeRF中用于发射颜色的MLP(方程(4))指定为我们模型的“静态”部分,并添加一个额外的“瞬态”部分,该部分发射自己的颜色和密度,其中密度可以在训练图像中变化。这使得NeRF-W能够重建包含遮挡物的图像,而不会在静态场景表示中引入伪影

其次,我们不再假设所有观察到的像素颜色都是同样可靠的,我们允许短暂部分发射一个不确定性场(类似于我们现有的颜色和密度场),这使得我们的模型能够根据需要调整重建损失,忽略不可靠的像素和可能包含遮挡物的3D位置。

我们将每个像素的颜色建模为各向同性的正态分布,我们将最大化该分布的似然性,并使用NeRF使用的体素渲染方法来“渲染”该分布的方差。这两个模型组件使得NeRF-W能够在没有显式监督的情况下解耦静态和瞬态现象。

为了构建我们的瞬态部分,我们基于方程(6)的体素渲染公式,并在静态密度σ(t)和辐射ci(t)的基础上增加了瞬态密度σi(τ)(t)和瞬态辐射ci(τ)(t)。

 我们采用Kendall等人的贝叶斯学习框架[15]来建模观察到的颜色的不确定性。我们假设观察到的像素强度本质上是有噪声的(随机性的),并且进一步假设这种噪声是依赖于输入的(异方差的)。我们使用各向同性正态分布来建模观察到的颜色Ci(r),其中具有图像和射线依赖的方差βi(r)和均值ˆCi(r)。方差βi(r)通过类似于颜色的alpha合成进行“渲染”,根据短暂密度σi(τ)(t)来计算。

 为了使场景的短暂组件在图像之间变化,我们为每个训练图像Ii分配第二个嵌入,作为输入提供给短暂MLP。

 对于σi(τ)(t)和c(iτ)(t),使用ReLU和sigmoid激活函数,对于βi(t)使用softplus激活函数(通过βmin > 0进行偏移,βmin是一个超参数,用于确保对每个光线分配最小的重要性)。请参见图3,以了解我们完整的模型架构的示意图。

 图3:NeRF-W模型架构。给定一个3D位置、视角方向和学习的外观和瞬时嵌入,NeRF-W生成静态和瞬时的颜色和密度,并给出一个不确定性的度量。请注意,在模型基于外观嵌入进行条件化之前,生成静态不透明度,确保静态几何在所有图像中共享。

4.3 损失函数

对于图像i中的射线r,其真实颜色为Ci(r)的损失函数为:

前两项是Ci(r)相对于均值为ˆCi(r)、方差为βi(r)^2的正态分布的负对数似然。较大的βi(r)值会减弱对像素的重要性,假设该像素属于某个瞬态物体。第一项由第二项平衡,第二项对应于正态分布的对数分区函数,防止了βi(r) = ∞时的平凡最小值。第三项是L1正则化器,乘以λu,应用于非负瞬态密度σi(τ)(t),这样可以防止模型使用瞬态密度来解释静态现象。 在测试阶段,我们省略瞬态和不确定性字段,只渲染σ(t)和c(t)。

请参见图4,了解静态、瞬态和不确定性组成部分的示意图。 

图4:NeRF-W分别渲染场景的静态元素(a)和瞬态元素(b),然后进行合成(c)。训练通过不确定性(e)加权,最小化合成图像与真实图像之间的差异(d),同时优化以识别和折扣异常图像区域。照片由Flickr用户vasnic64 / CC BY提供。

4.4 Optimization

与NeRF类似,我们同时优化两个Fθ的副本:一个是细模型,使用上述模型和损失函数,另一个是粗模型,仅使用潜在外观建模组件。除了参数θ,我们还优化每个图像的外观嵌入和瞬态嵌入。NeRF-W的损失函数如下所示:

 λu, βmin和嵌入维度n(a)和n(τ)是NeRF-W的额外超参数集合。

由于优化过程只针对训练集中的图像生成外观嵌入,因此对于测试集图像的嵌入是未指定的。在测试集的可视化中,我们选择 来最好地拟合目标图像(例如图像8),或者将其设置为任意值。

 

 图 8:两个训练图像的外观嵌入 之间的插值,渲染的图像(中间),对其中颜色和照明进行插值,但几何形状保持不变。请注意,训练图像中包含的人物(左侧)和灯光(右侧)在渲染中不会出现。照片由 Flickr 用户 mightyohm、blatez / CC BY 提供。

5. Experiments

在这里,我们对 NeRF-W 在文化地标的无约束(例如“在野外”)互联网照片收集中进行了评估。我们从 Phototourism 数据集[13]中选择了六个地标。受先前的工作[22]的启发,我们重建了特维喷泉和圣心教堂,以及四个新场景,即勃兰登堡门、泰姬陵、布拉格老城广场和圣索非亚大教堂。这些场景的实证性能可在表格1中找到,

5.1 Baseline:

我们将我们提出的方法与Neural Rerendering in the Wild (NRW) [22]、NeRF [24]以及NeRF-W的两个消融模型进行了评估:NeRF-A(仅包含外观),其中消除了“瞬态”部分;NeRF-U(仅包含不确定性),其中消除了外观嵌入 。NeRF-W是NeRF-A和NeRF-U的组合。虽然还有其他一些类似领域的最新工作,如[18],但我们将基准模型限制在那些能够在数据集中所表示的视角之外进行显著外推的模型上。

5.2 Optimization:

在NeRF的基础上,我们使用Keras在TensorFlow 2中实现了所有的实验。 对于每个场景,我们使用COLMAP进行相机参数估计,启用了两个径向畸变和两个切向畸变参数。与NeRF一样,对于每个场景, 我们训练一个初始化为随机权重的模型
 我们使用Adam进行优化,使用8个GPU,在批量大小为2048的情况下,对所有的NeRF变种进行300,000步的训练(使用超参数β1 = 0.9、β2 = 0.999和ε = 10^(-7)。优化过程在使用8个GPU的情况下进行,每个场景的优化步数为300,000步,批量大小为2048,大约需要2天的时间完成。
所有NeRF变种共享的超参数是根据 Brandenburg Gate dataset的PSNR最大化选择的,并在所有其他场景中固定为这些值。NeRF-W的其他超参数通过网格搜索在 Brandenburg Gate dataset的保留验证集上最大化PSNR进行选择,并在所有其他场景中固定为这些值。有关超参数的其他详细信息,请参阅补充材料。

5.3 Evaluation:

我们评估的任务是新视角合成:给定一个保留的图像及其相应的相机参数,我们从相同的视角生成一幅图像,并将其与真实图像进行比较。
由于衡量感知图像相似性是具有挑战性的,我们提供生成的图像供视觉检查,并根据PSNR、MS-SSIM和LPIPS等指标报告定量结果。
由于优化过程只为训练集图像生成外观嵌入,当计算测试集图像的误差指标时,我们在每幅图像的左半部分上优化一个外观嵌入 ,并在右半部分报告指标(见图5)。有关误差指标的详细讨论,请参阅补充材料。

 图5:由于优化过程只为训练集图像生成外观嵌入,因此在评估测试集图像的误差指标时,我们仅使用每个图像的左半部分来优化 (a)以匹配真实图像的外观。误差指标仅在每个图像的右半部分进行评估,以避免信息泄漏。照片由Flickr用户eadaoinflynn / CC BY提供。

5.4 Results:

 图7展示了部分场景上所有模型和基线的定性结果。

NRW生成的渲染图像存在棋盘格伪影,这是2D重新渲染方法的特点[14]。NRW对于3D几何上游的错误非常敏感,比如在Prague Old Town的教堂较小的塔楼中可以看到这种情况。

NeRF生成了一致的3D几何结构,但是场景的大部分区域存在幽灵伪影和遮挡,尤其在Sacre Coeur和Prague Old Town上特别明显。与地面真实图像相比,NeRF的渲染图像还会出现明显的全局颜色偏移。这些伪影是NeRF的静态世界假设的直接结果。 NeRF试图使用单一场景表示来解释所有光度变化和瞬时遮挡。这种静态假设不仅影响了NeRF的渲染结果,也影响了其基础几何结构,而NeRF-W则能够产生准确的3D重建结果(图6)。

NeRF-A消除了NeRF中的“雾化”渲染效果,如图7所示。然而,NeRF-A无法重建出Sacré-Cœur圆顶上的砖砌细节等高频细节。相反,NeRF-U能够更好地捕捉细节,但无法模拟不同的光度效应。NeRF-W具有这两种消融方法的优点,因此能够产生更清晰、更准确的渲染结果。

定量结果总结在表1中。在野外照片集上优化NeRF会导致结果特别差,无法与NRW竞争。

相比之下,NeRF-W在PSNR和MS-SSIM上优于所有基线模型,并在所有数据集上取得了显著的改进。特别是,NeRF-W在PSNR上比之前的最先进方法NRW提高了平均4.4dB的边际效果,并在MS-SSIM上提升了高达40%。NeRF 模型评价指标PSNR,MS-SSIM, LPIPS 详解和python实现见链接http://t.csdn.cn/67qEjhttp://t.csdn.cn/67qEj尽管在训练过程中仅最小化每个像素的平方误差,但NeRF-W在LPIPS上改进了先前的最先进方法,其中有3个场景的改进效果,并在其他场景上保持竞争力。由于缺乏感知损失,NeRF-W没有激励产生被LPIPS等感知度量器所偏好的高频纹理

然而,NRW存在时间不稳定性问题 - 随着相机移动,渲染的图像会出现不真实的闪烁和摇晃,这些问题无法通过本文中使用的单张图像指标或图表来捕捉。我们强烈建议读者查看补充视频,观察NRW与NeRF和NeRF-W之间的时间不稳定性差异。

可控外观:使用潜在嵌入空间 建模外观的一个结果是,它可以在不改变底层3D几何的情况下修改渲染的照明和外观

在图1(右图)中,我们看到NeRF-W使用与四个训练集图像相关联的外观嵌入生成的四个渲染图像的切片。除了与训练集图像相关联的嵌入外,还可以将NeRF-W应用于同一空间中的任意向量。

在图8中,我们展示了从固定相机位置渲染的五个图像,在这些图像中,我们在左侧和右侧训练图像相关联的外观嵌入之间进行插值。请注意,渲染图像的外观在两个端点之间平滑过渡,而不会引入对3D几何的瑕疵。

 

 5.5 View-consistency:

图9展示了在相机沿直线路径平移时,NRW、NeRF和NeRF-W的“平面”光场渲染图像。NeRF-W的渲染图像更具视角一致性(Lambertian场景内容在不同视角下保持不变),并且比NRW或NeRF具有更少的闪烁。NRW无法对瞬态物体的帧间时间一致性建模,而NeRF则将视角相关效果强行嵌入场景表示中,作为有色的雾气效果。

5.6 Limitations:

尽管NeRF-W能够从非结构化的照片中产生逼真且在时间上保持一致的渲染图像,但在训练图像中很少观察到或只以非常倾斜的角度观察到的场景区域(例如地面)的渲染质量会下降,如图10所示。与NeRF类似,NeRF-W对相机校准误差也很敏感,这可能导致在由于相机校准不正确而成像的场景部分产生模糊的重建效果。

5.7  Synthetic Experiments

合成实验:NeRF-W的各个组成部分旨在处理特定形式的光度不一致,例如颜色偏移和遮挡物。不幸的是,Phototourism数据集的非受控性质意味着很难证明每个模型组件确实解决了其设计用于解决的混淆因素。因此,在补充材料中,我们进行了一项受控的消融研究,其中我们构建了一个用于[24]中的合成数据集的变种,其中手动引入了我们预期在野外图像中发现的现象。正如在补充材料中所看到的,这个消融研究的结果与我们的预期一致。

6. Conclusion

我们提出了NeRF-W,这是一种基于NeRF的新颖方法,用于从非结构化的互联网照片集合中重建复杂环境的3D场景。我们学习了一个针对每个图像的潜在嵌入,捕捉了野外数据中常见的光度外观变化,并将场景分解为图像相关和共享组件,使我们的模型能够将瞬时元素与静态场景区分开来。对真实世界(和合成)数据的实验评估表明,与先前最先进的方法相比,我们取得了显着的定性和定量改进。

7 补充材料:

模型参数

以下是我们记录的NeRF-W的选择超参数。

我们对超参数空间进行了网格搜索,以选择下面的值。请注意,这些值是针对Phototourism数据集中的Brandenburg Gate场景进行优化的,并在其他场景中重复使用。

与NeRF一样,我们使用MLP架构来建模密度和辐射。

我们对“基本”组件应用了8层512个隐藏单元

对“静态”和“瞬时/不确定性”组件分别应用了4层128个隐藏单元(参见图3)。

对于位置编码函数γ,我们在编码位置时使用15个频率,在编码视角时使用4个频率。

训练过程中,每条射线从粗糙模型和细化模型中采样512个点,每条射线总共采样1024个点。

在评估过程中,我们将该数量增加到2048个。

外观的潜在嵌入向量具有嵌入维度大小n (a) = 48。

对于瞬时对象,我们使用嵌入维度大小n (τ) = 16。

我们选择了0.01作为L1正则化器乘数λu,0.03作为最小重要性βmin。

模型使用Adam在300,000次迭代中进行训练,批量大小为2048,初始学习率为0.001,在每150,000次迭代后减小十倍。

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

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

相关文章

pyspark安装教程

pyspark安装教程 一、Windows下配置pyspark环境1.1 JDK下载安装1.2 Scala下载安装1.3 spark下载安装1.4 Hadoop下载安装1.5 pyspark下载安装 二、pyspark原理简介 一、Windows下配置pyspark环境 在python中使用pyspark并不是单纯的导入pyspark包就可以实现的,而是需…

从0到字节跳动30W年薪,我在测试行业“混”的第5个年头····

一些碎碎念 什么都做了,和什么都没做其实是一样的,走出“瞎忙活”的安乐窝,才是避开弯路的最佳路径。希望我的经历能帮助到有需要的朋友。 在测试行业已经混了5个年头了,以前经常听到开发对我说,天天的点点点有意思没…

使用Jmeter读取和使用Redis数据

目录 前言 缓存 Redis服务和客户端安装 Jmeter使用Redis 总结: 前言 消息队列和缓存是目前主流的中间件,我们在日常测试过程中,无论是接口还是压力测试,都会遇到需要处理这些中间件数据的情况。本文以Redis对缓存做一个简单…

精选博客系列|vSphere 8 Update 1 介绍

去年,我们推出了 vSphere 8,这是传统和下一代应用程序的企业工作负载平台,该产品于 2022 年 11 月正式推出。今天,我们很高兴地宣布 vSphere 8 Update 1 版本。通过这个版本,客户可以获得增强的管理员操作效率&#xf…

【QT】QGridLayout的基础使用(添加控件、布局、间距)

目录 0.环境介绍 1.QGridLayout简介: 2.QGridLayout参数介绍 1)添加控件方式 2)添加布局方式 3.例子及代码 1)三行三列 2)有占多行多列的控件 0.环境介绍 windows vscode qt 我使用网格布局的情景是&#x…

深入理解侵入式容器与非侵入式容器(intrusive containers)

再传统的数据结构的实现中,分为侵入式容器和非侵入式容器两种 侵入式容器 这也是教材喜欢使用的数据结构的实现方式 ,将数据结构放入类中,所以先讲这个 非侵入式容器: struct ListNode {ListNode *prev, *next;int value; }; …

五分钟搞懂分布式流控算法

流控是任何一个复杂系统都必须考虑的问题,本文介绍并比较了不同的流控算法,从而帮助我们可以基于系统需求和架构选择合适的方案。原文:Distributed Rate-Limiting Algorithms[1] 当我们设计分布式流控系统(distributed rate-limit…

华硕TUF GAMING B460M i5-10500 电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网,转载需注明出处。(下载请直接百度黑果魏叔) 硬件配置 硬件型号驱动情况 主板华硕TUF GAMING B460M-PLUS (LPC Controller B460芯片组 处理器特尔 Core i5-10500 3.10GHz六核已驱动 内存16 GB (IstRI DDR4 2666MH…

在字节划水的4年,很真实...

先简单交代一下,我是某不知名211的计算机本硕,18年毕业加入滴滴,之后跳槽到了头条,一直从事测试开发相关的工作。之前没有实习经历,算是四年半的工作经验吧。 这四年半之间完成了一次晋升,换了一家公司&am…

微信可以聚合聊天吗?如何同时管理多个微信?

现在很多企业用微信做私域流量运营,在里面搭建自己的私域流量。随着客户资源逐渐增多,需求增加,不仅需要联系客户,还要联系各大代理,开通多个微信号无疑是最佳方案。 但是不少做电商的朋友表示,微信号越来…

代理ip数据采集的优缺点

随着互联网时代的到来,数据已经成为企业发展和决策的关键。但是,不同的网站它对于数据访问的限制和反爬虫措施却是给企业的数据采集带来了挑战。针对这一问题,代理IP数据采集技术应运而生。但是使用代理ip来进行数据采集也有优缺点。 一、代理…

JS WEB框架Express日志模块winston和express-winston以及winston-daily-rotate-file优化

1.前言 1.Express的日志模块winston和express-winston已经提供了开箱即用的大多数功能,但是和其他语言相比,还缺失对日志记录的当前文件和行号的支持,需要自己实现,以此记录一下。 2.express-winston主要用于记录请求进入和结束时…

【运筹优化】ALNS自适应大领域搜索算法求解TSP问题 + Java代码实现

文章目录 一、TSP问题简介二、数学建模三、实现细节四、案例实战4.1 测试案例说明4.2 Java 完整代码4.2.1 TSP_Instance 实例类4.2.2 TSP_Solution 结果类4.2.3 TSP_Util 工具类4.2.4 TSP_Solver_ALNS 算法类4.2.5 RunAndPlot 运行类 4.3 运行结果展示 一、TSP问题简介 旅行推…

MySQL登录时报错:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘解决办法

问题描述 在云服务器使用 docker安装的Mysql5.7数据库,刚开始的时候使用正常,后面突然有一天就连接不上了,报错为: ERROR 1045 (28000): Access denied for user root1xxx(using password:YES), 当登录MySQL数据库出现 Error 1045…

python套接字(三):结合pyside2实现多人聊天室

文章目录 前言一、准备1、安装pyside22、设计界面 二、代码实现1、服务器端2、客户端 三、运行 前言 上一章python套接字(二):实现一个服务器和多客户端连接,大概实现了多人聊天室功能,但是比较简陋,本篇内容将结合pyside2做一个…

车间主任、班组长必读:生产车间的现场管理

与工厂车间操作层(一线员工)接触最多的基层管理者,即我们通常所说的班组长、车间主任等,他们是将企业战略规划落实到具体工作当中的终端管理者。 一线班组长的“角色” 1、责任者 对企业来说,班组长是基层的治理员&am…

MySQL高级篇第二天

文章目录 一、Mysql的体系结构概览 二、 存储引擎 三、优化SQL步骤 一、Mysql的体系结构概览 整个MySQL Server由以下组成 Connection Pool : 连接池组件 Management Services & Utilities : 管理服务和工具组件 SQL Interface : SQL接口组件 Parser : 查询分析器组件 O…

游戏测试与一般的软件测试的区别在哪里?

有很多同学进入测试行业之后,一直从事的是软件测试的工作,然后跳槽时遇到一些游戏的公司的面试,就会有点慌,我做的都是软件测试,能胜任游戏测试么? 所以,今天我们需要先来了解一下,…

科技政策 | 《深圳市加快加快推动人工智能高质量发展高水平应用行动方案(2023—2024年)》发布

原创 | 文 BFT机器人 导语 Introduction 近日,深圳市发布了《深圳市加快推动人工智能高质量发展高水平应用行动方案(2023-2024年)》旨在以更大热情拥抱创新,打造最好生态,推动人工智能高质量发展和全方位各领域高水平…

C语言-关键字

关键字就是c语言已经定义好的名字,直接可以拿过来使用,不需要再次定义 1 数据类型相关的关键字 用于定义变量或者类型 定义变量的语法结构: 类型 变量名; 拓展:变量名属于标识符,标识符(变量…