Wonder3D 论文学习

论文链接:https://arxiv.org/abs/2310.15008
代码链接:https://github.com/xxlong0/Wonder3D

解决了什么问题?

随着扩散模型的提出,3D 生成领域取得了长足进步。从单张图片重建出 3D 几何是计算机图形学和 3D 视觉的基础任务,在 VR、游戏、3D 内容生成、机器人领域有广泛的应用。由于该任务是不适定的,需要推理出可见和不可见区域的 3D 几何结构。该种能力的构建需要大量的 3D 世界的知识。

部分工作(如 DreamField, DreamFusion, Magic3D)需要通过 score distillation sampling 来蒸馏出 2D 图像扩散模型或视觉语言模型的知识,从文本或图像创建出 3D 模型。尽管效果不错,这些方法都面临着两个问题:效率一致性。每个形状的优化通常需要几万次的迭代,这涉及到全图渲染和扩散模型的推理。因此,优化一个形状甚至会耗费数小时。此外,2D 先验模型在每次迭代时只考虑一个视角,使得每个视角都接近于输入图像,这会造成生成的 3D 形状不一致。

另一部分的工作则尝试通过网络推理来生成 3D 的几何结构如点云、meshes、神经场,避免耗时的优化。此类方法大多在 3D assets 上训练 3D 生成扩散模型。但是,由于现有的 3D 数据集规模有限,这些方法都缺乏足够的泛化性,只能生成特定类别的形状。

另一些方法如 SyncDreamer 和 MVDream 直接生成多视角 2D 图像。这些工作增强了图像生成的多视角一致性,能从生成的多视角 2D 图像中恢复出 3D 形状。本文方法也采用了多视角生成的机制,因为 2D 表征效率高、灵活性强。但是只依赖于彩色图像,生成形状的保真度就差一些,它们要么很难恢复几何细节,要么计算量惊人。

基于 score distillation sampling 的方法能够从 2D 的扩散先验信息中恢复出 3D 结构,但通常都非常耗时,生成的几何形状不一致。另一些工作则通过快速的网络推理来产生 3D 信息,但质量都比较差,缺乏几何细节信息。

提出了什么方法?

为了解决保真度、一致性、泛化性和效率的问题,本文提出了一个单视角 3D 重建方法,用一个跨域扩散模型来生成多视角、一致性的法线图和对应的彩色图像。核心思想是扩展 stable diffusion,对两个不同域(法线和色彩)的协同分布来建模。作者证明,可以通过一个 domain switcher 和跨域注意力机制来实现。Domain switcher 允许扩散模型生成法线图或彩色图,而跨域注意力机制则在这两个域之间传递信息,提升效率和质量。最后为了从生成视角中提取表面结构,作者提出了一个更加鲁棒的几何法线融合算法,能够重建出干净、高质量(如上图所示)的几何结构。

作者在 Google Scanned Object 数据集和各种不同风格的 2D 图像上做了实验。实验表明 Wonder3D 能够高效地恢复出高质量的几何结构。

1. Diffusion Models

扩散模型通过一个特殊的退化过程,逐步地恢复图像,它采用了一个前向马尔可夫链和反向马尔可夫链。给定一个来自于数据分布 p ( z ) p(z) p(z)的样本 z 0 z_0 z0,去噪扩散模型的前向计算会输出一个序列的加了噪声的数据 { z t ∣ t ∈ ( 0 , T ) } \{z_t | t\in(0,T)\} {ztt(0,T)},其中 z t = α t z 0 + σ t ϵ z_t = \alpha_t z_0 + \sigma_t \epsilon zt=αtz0+σtϵ ϵ \epsilon ϵ 是从分布 N ( 0 , 1 ) \mathcal{N}(0,1) N(0,1)中随机选择的噪声, α t , σ t \alpha_t, \sigma_t αt,σt 是 noise schedule 的固定序列。逐步地对目标图像进行前向计算,直到图像变成完全的高斯噪声。然后使用逆马尔可夫链,逐步地去除图像上的噪声,通过预测添加的随机噪声 ϵ \epsilon ϵ,从 z t z_{t} zt 恢复出 z t − 1 z_{t-1} zt1

2. The Distribution of 3D assets

以前的工作使用了 3D 表征如点云和神经辐射场,作者认为,3D assets 的分布(记做 p a ( z ) p_{a}(\mathbf{z}) pa(z))可以建模成对应的 2D 多视角法线图和彩色图像之间的协同分布。特别地,给定一组相机 { π 1 , π 2 , . . . , π K } \{\pi_1, \pi_2, ..., \pi_K\} {π1,π2,...,πK} 以及一个条件输入图像 y y y

p a ( z ) = p n c ( n 1 : K , x 1 : K ∣ y ) p_a(\mathbf{z})=p_{nc}(n^{1:K}, x^{1:K}|y) pa(z)=pnc(n1:K,x1:Ky)

其中 p n c p_{nc} pnc 是图像 y y y 的法线图 n 1 : K n^{1:K} n1:K 和彩色图 x 1 : K x^{1:K} x1:K 的分布。在后续讨论中,作者省去了记号 y y y。因此,我们的目标是学习一个模型 f f f,合成不同相机姿态的多个法线图和彩色图,记做:

( n 1 : K , x 1 : K ) = f ( y , π 1 : K ) (n^{1:K}, x^{1:K}) = f(y, \pi_{1:K}) (n1:K,x1:K)=f(y,π1:K)

通过 2D 表征,我们的方法用 2D 扩散模型(基于几十亿张图像训练得到)构建,它具有很强的 zero-shot 泛化能力。另一方面,法线图描述了物体表面的起伏波动,编码了丰富的细节几何信息。我们可以从 2D 法线图提取高质量的 3D 几何信息。最后,我们可以将扩散机制的这个跨域协同分布表示成一个马尔可夫链:

p ( n T 1 : K , x T 1 : K ) ∏ t p θ ( n t − 1 1 : K , x t − 1 1 : K ∣ n t 1 : K , x t 1 : K ) p(n_T^{1:K}, x_T^{1:K}) \prod_t{p_{\theta}(n_{t-1}^{1:K}, x_{t-1}^{1:K} | n_{t}^{1:K}, x_{t}^{1:K})} p(nT1:K,xT1:K)tpθ(nt11:K,xt11:Knt1:K,xt1:K)

其中 p ( n T 1 : K , x T 1 : K ) p(n_T^{1:K}, x_T^{1:K}) p(nT1:K,xT1:K) 是高斯噪声。核心问题是描述出分布 p θ p_\theta pθ,这样我们就能从这个马尔可夫链中采样,生成出法线图和彩色图像。

3. 方法

本文提出了一个多视角跨域的扩散机制,在两个不同的域上运行,生成多视角一致的法线图和彩色图。整体架构如下图所示。首先,采用一个多视角扩散模型,生成多视角法线图和彩色图,使用多视角注意力要求不同的视角具有一致性。其次,domain switcher 允许扩散模型在多个域中运行,无需重新训练现有的 Stable Diffusion。因此,我们可以利用基础模型的泛化能力,它们一般是在大规模数据上训练得到。作者提出了一个跨域注意力,在法线域和彩色图像域之间传递信息,确保几何和视觉信息的一致性。最终,该几何法线融合方法能从 2D 法线图和彩色图像中恢复高质量的几何信息和外观信息。

3.1 Consistent Multi-view Generation

2D 扩散模型单独地生成每个图像,生成的图像在多个视角的视觉和几何上并非一致的。为了增强不同视角的一致性,像 SyncDreamer 和 MVDream 一样,作者利用了注意力机制来促进不同视角的信息传递,隐式地编码多视角图像之间的关系,如下图所示。

将原来的自注意力层扩展至全局范围,允许注意力层连接到其它视角的图像。不同视角的 keys 和 values 彼此连接,促进信息的传递。通过在注意力层共享不同视角的信息,扩散模型能够感知到多视角的关系,能够生成一致的多视角彩色图像和法线图。

3.2 Cross-Domain Diffusion

本文模型基于一个预训练的 2D stable diffusion 模型构建。但是,当前的 2D 扩散模型都是针对单个域设计的,那么挑战就是如何有效地将 stable diffusion 扩展至多个域。

Naive Solutions

为了实现此目的,作者探索了多个可能的设计。直接方案就是在 UNet 模块的输出增加四个通道,表示其它的域。因此,扩散模型能同时输出法线图和彩色图像。但是,我们注意到该设计收敛速度慢,泛化性差。这是因为通道扩张可能影响 stable diffusion 的预训练权重,造成灾难性的模型遗忘。

回到第一个等式,可以将协同分布拆分为两个条件分布:

q a ( z ) = q n ( n 1 : K ) ⋅ q c ( x 1 : K ∣ n 1 : K ) q_a(\mathbf{z}) = q_n(n^{1:K})\cdot q_c(x^{1:K} | n^{1:K}) qa(z)=qn(n1:K)qc(x1:Kn1:K)

我们可以一开始训练一个扩散模型来生成法线图,然后基于生成的法线图,训练另一个扩散模型来生成彩色图像。但是,这个双阶段框架会增加计算成本,也会造成表现退化的问题。

Domain switcher

为了克服这些问题,作者通过 domain switcher 设计了一个跨域的扩散机制,记做 s s s。Switcher s s s 是一个一维的向量,标记不同的域,将该 switcher 输进扩散模型作为额外的输入使用。因此,第二个等式就可以扩展成:

n 1 : K , x 1 : K = f ( y , π 1 : K , s n ) , f ( y , π 1 : K , s c ) n^{1:K}, x^{1:K} = f(y, \pi_{1:K}, s_n), f(y, \pi_{1:K}, s_c) n1:K,x1:K=f(y,π1:K,sn),f(y,π1:K,sc)

Switcher s s s 首先用 positional encoding 做编码,再和 time embedding 拼接到一起。然后注入 stable diffusion 的 UNet。实验表明,这个微小的变动不会改变预训练先验,而收敛速度会更快、鲁棒性和泛化性会更强。

Cross-domain Attention

有了 switcher 后,扩散模型能生成两个不同的域。但是要注意到,对于单个视角而言,彩色图像和法线图并不是几何一致的。为了解决这个问题,需要确保法线图和彩色图的一致性,于是作者加入了一个跨域注意力机制来促进信息在两个域之间传递。该机制的目的是确保生成的图像能在几何和外观上对齐。

该跨域注意力层与原版的自注意力层结构相同,位于 UNet 每个 transformer 模块的 cross-attention 层之前,如上图所示。在跨域注意力层,将法线域和彩色图像域的 keys 和 values 结合起来,经过注意力操作计算。该设计确保了生成的彩色图像和法线图紧密是关联的,增强二者的几何一致性。

3.3 Textured Mesh Extraction

为了从 2D 法线图和彩色图中直接提取 3D 几何结构,作者优化了一个 neural implicit signed distance field(SDF),融合生成的 2D 数据。不像其它的表征(如 meshes),SDF 更加简洁,判别度更强。

SDF 是一个函数,它为空间中的每个点返回一个值,表示该点到最近表面的距离。如果点在表面内部,返回负值;如果点在表面外部,返回正值。SDF函数通常定义为: f ( x ) = 距离 − ϵ f(x)=\text{距离}-\epsilon f(x)=距离ϵ。其中 ϵ \epsilon ϵ 是一个小的正数,用于确保函数在表面上的值为零。利用神经网络来学习 SDF 函数的参数。这意味着神经网络通过训练,学习如何从输入数据(如图像或点云)中推断出距离场。

但是,无法使用现有的基于 SDF 的重建方法(如 NeuS)。这些方法都是为真实拍摄的图像设计的,需要密集的输入视角。然而,本文方法生成的视角相对稀疏,生成的法线图和彩色图像可能会有一些错误预测的像素。在几何优化时,这些错误可能会累加,造成几何结构的畸变或不完整。于是作者提出了一个几何优化机制。

Optimization Objectives

有了法线图 G 0 : N G_{0:N} G0:N和彩色图 H 0 : N H_{0:N} H0:N后,首先利用分割模型从法线图和彩色图中分割出物体的 masks M 0 : N M_{0:N} M0:N。随机选取一个 batch 的像素点和它们在世界空间 P = { g k , h k , m k , v k } P=\{g_k, h_k, m_k, \mathbf{v}_k\} P={gk,hk,mk,vk}对应的射线,其中 g k g_k gk是第 k k k个采样像素的法线值, h k h_k hk是第 k k k个像素的颜色值, m k ∈ { 0 , 1 } m_k\in \{0,1\} mk{0,1}是第 k k k个像素的 mask 值, v k \mathbf{v}_k vk是第 k k k个射线的方向。

整体的优化函数如下,

L = L n o r m a l + L r g b + L m a s k + R e i k + L s p a r s e + L s m o o t h \mathcal{L}=\mathcal{L}_{normal}+\mathcal{L}_{rgb}+\mathcal{L}_{mask}+\mathcal{R}_{eik}+\mathcal{L}_{sparse}+\mathcal{L}_{smooth} L=Lnormal+Lrgb+Lmask+Reik+Lsparse+Lsmooth

其中 L n o r m a l \mathcal{L}_{normal} Lnormal表示法线损失, L r g b \mathcal{L}_{rgb} Lrgb是 MSE 损失,计算渲染颜色 h ^ k \hat{h}_k h^k和生成颜色 h k h_k hk的损失。 L m a s k \mathcal{L}_{mask} Lmask是一个二元交叉熵损失,计算渲染 mask m ^ k \hat{m}_k m^k 和生成 mask m k m_k mk 的损失。 R e i k \mathcal{R}_{eik} Reik 表示 eikonal 正则项,促使 SDF 的梯度的级数为单位长度。 L s p a r s e \mathcal{L}_{sparse} Lsparse 是稀疏正则项。 L s m o o t h \mathcal{L}_{smooth} Lsmooth 是一个 3D 平滑正则项,迫使 SDF 梯度在 3D 空间平滑。

Eikonal 正则项是一种在数学和物理中用于描述波动现象的数学模型中常见的项。它与波动方程中的相位速度有关,尤其是在描述光波或其他类型的波的传播时。Eikonal 方程是一个非线性偏微分方程,通常用于描述波动现象中的相位波前。它的形式可以简化为 ∣ ∇ ϕ ∣ 2 = n 2 |\nabla \phi|^2=n^2 ∣∇ϕ2=n2,其中 ϕ \phi ϕ是相位函数, ∇ \nabla 是梯度算子, n n n是介质的折射率。在波动方程中,正则项是指那些描述波动传播的项。Eikonal 正则项特别关注波前的形状和传播速度。

Geometry-aware Normal Loss

由于 SDF 表征的本质不同,我们可以通过计算 SDF 的二阶导数获得优化后的 SDF 的法线值 g ^ \hat{g} g^。最大化 SDF g ^ \hat{g} g^ 的法线和生成法线 g g g 的相似度,提供 3D 几何监督信号。为了克服不同视角下法线的细微错误,作者提出了一个几何法线损失:

L n o r m a l = 1 ∑ w k ∑ w k ⋅ e k , e k = ( 1 − cos ⁡ ( g k ^ , g k ) ) \mathcal{L}_{normal}=\frac{1}{\sum{w_k}}\sum{w_k \cdot e_k}, \quad e_k=(1-\cos{(\hat{g_k}, g_k)}) Lnormal=wk1wkek,ek=(1cos(gk^,gk))

其中 e k e_k ek 是第 k k k个射线的 SDF 的法线 g ^ k \hat{g}_k g^k 和生成法线 g k g_k gk 之间的损失, cos ⁡ ( ⋅ , ⋅ ) \cos(\cdot, \cdot) cos(,) 表示余弦函数, w k w_k wk 是几何权重:

w k = { 0 , cos ⁡ ( v k , g k ) > ϵ , exp ⁡ ( ∣ cos ⁡ ( v k , g k ) ∣ ) , cos ⁡ ( v k , g k ) ≤ ϵ w_k=\left\{ \begin{aligned} 0 &, & \cos(\mathbf{v}_k, \mathbf{g}_k)>\epsilon, \\ \exp{(|\cos(\mathbf{v}_k, \mathbf{g}_k)|)} &, & \cos(\mathbf{v}_k, \mathbf{g}_k)\leq \epsilon \end{aligned} \right. wk={0exp(cos(vk,gk)),,cos(vk,gk)>ϵ,cos(vk,gk)ϵ
其中 exp ⁡ \exp exp表示指数函数, ∣ ⋅ ∣ |\cdot| 表示绝对值函数, ϵ \epsilon ϵ 是接近于 0 0 0的负数阈值,我们计算生成法线 g k g_k gk 和第 k k k个射线的观测方向 v k \mathbf{v}_k vk的角度余弦值。

在计算机视觉中,射线的观察方向可以用于估计场景的深度和结构。例如,通过分析从不同视点发出的射线的交点,可以重建三维场景。

该方法的设计逻辑就是法线的朝向角,设定为面向外的,而观测方向是面向里的。这就确保了法线向量和观测射线的角度不低于 9 0 ∘ 90^\circ 90。如果偏离了这个评价标准,说明生成的法线不够准确。

而且,值得注意的是,从多个不同观测点都能看到优化后形状的 3D 点。因此,它会受到对应这些视角的多条法线影响。但是,如果多条法线无法展现完美的一致性,几何监督信号就会变得模楞两可,产生不准确的几何结构。为了解决这个问题,作者引入了一个加权机制,而非同等地看待这些法线。如果一条法线与观测射线有更大的夹角,则权重就更大。这增强了几何监督过程的准确率。

法线是一个向量,它在几何体的表面上的某一点与该表面垂直。在二维空间中,法线是一个垂直于曲线的直线;在三维空间中,法线是一个垂直于表面的平面。法线通常用向量表示。如果一个曲面由函数 z = f ( x , y ) z=f(x,y) z=f(x,y) 定义,则该曲面上点 ( x , y , f ( x , y ) ) (x,y, f(x,y)) (x,y,f(x,y)) 的法线可以通过曲面的梯度向量 ∇ f \nabla{f} f 来确定。

Outlier-dropping Losses

除了法线损失,mask 损失和颜色损失也用于优化几何结构和外观特征。但是,在彩色图像和 masks 中不可避免地会出现一些错误的点,在优化的过程中会逐步累加,产生异常的表面和空洞。于是作者提出了一个简单而有效的策略,叫做 outlier-dropping loss。以颜色损失计算为例,除了简单地将每一步的所有采样射线的颜色求和,作者首先以倒序的顺序将这些损失排序,舍弃损失最大的那部分。这是因为错误预测和其它视角之间缺乏足够的一致性。加入了该策略后,优化后的几何结构就剔除了错误的几何结构和畸变区域。

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

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

相关文章

World of Warcraft [CLASSIC] Timebadge

游戏币【每个服务器实时金价不一样,本例子是5000-6000金】 1枚【魔兽世界时光徽章】 30天游戏时间。 5760金币游戏币,策划如何消耗游戏里面的金币总量,以及如何留住那些非人民币玩家呢 30天加上去了 World of Warcraft [CLASSIC] [魔兽世界…

搜索与下载Stable Diffusion 模型

我只是一个刚开始学习SD没多久小白,拿到别人的工作流想要运行时,很多时候还要下载对应的模型才能正常运行,虽然也可以通过comfyui-manager下载,不过有时候好像会下载失败,而单独下载所需模型,我自己试过&am…

英语科技写作 希拉里·格拉斯曼-蒂(英文版)pdf下载

下载链接: 链接1:https://pan.baidu.com 链接2:/s/1fxRUGnlJrKEzQVF6k1GmBA 提取码:b69t 由于是英文版,可能有些看着不太方便,可以在网页版使用以下软件中英文对照着看,看着更舒服,…

图书管理系统设计

设计一个图书管理系统时,我们需要考虑系统的基本功能、用户需求、技术选型以及数据的安全性和完整性。下面是一个基本的图书管理系统的设计概览: 1. 系统目标 管理图书信息:添加、删除、修改图书信息。借阅管理:处理借书、还书流…

Python 教程(二):语法与数据结构

目录 前言专栏列表语法特点实例代码基本数据类型变量命名规则赋值动态类型作用域示例代码 运算符list、set和dict 数据结构 区别1. list(列表)2. set(集合)3. dict(字典) 总结 前言 Python 是一种计算机编…

Linux调试器gdb

1.debug版本的文件才能调试 gcc默认编译生成的是release版本,在输入gcc编译指令时,要加-g,才会生成debug版本的可执行文件。 可以看到,code_dbug比code大,因为debug版本含有调试信息,往往比release版本的…

【BUG】已解决:SyntaxError:positional argument follows keyword argument

SyntaxError:positional argument follows keyword argument 目录 SyntaxError:positional argument follows keyword argument 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰&#xff0c…

【SOC 芯片设计 DFT 学习专栏 -- DFT OCC 与 ATPG的介绍】

请阅读【嵌入式及芯片开发学必备专栏】 请阅读【芯片设计 DFT 学习系列 】 如有侵权,请联系删除 转自: 简矽芯学堂 简矽芯学堂 2024年01月18日 09:00 陕西 文章目录 OCC 介绍Fast ScanFull chip ATPGPartition ATPGHierarchical ATPG OCC 介绍 OCC&am…

微信小程序实现聊天界面,发送功能

.wxml <scroll-view scroll-y"true" style"height: {{windowHeight}}px;"><view wx:for"{{chatList}}" wx:for-index"index" wx:for-item"item" style"padding-top:{{index0?30:0}}rpx"><!-- 左…

力扣高频SQL 50题(基础版)第十题

文章目录 力扣高频SQL 50题&#xff08;基础版&#xff09;第十题1661. 每台机器的进程平均运行时间题目说明思路分析实现过程准备数据实现方式结果截图总结 力扣高频SQL 50题&#xff08;基础版&#xff09;第十题 1661. 每台机器的进程平均运行时间 题目说明 表: Activity…

Git merge

Git merge 参考文档&#xff1a; https://marsishandsome.github.io/2019/07/Three_Way_Merge https://git-scm.com/docs/merge-strategies https://stackoverflow.com/questions/56889406/how-does-git-compare-two-files-while-merging Git merge的目标是合并changes&#x…

idea一键为实体类赋值

file -> settings -> plugins -> marketplace 把这个插件装上 找个实体&#xff0c;选中&#xff0c;altenter进入edit界面 我是选择只保留右边这种生成方法&#xff0c;然后选择ok 返回到那个实体&#xff0c;选择&#xff0c;altenter generate生成

创建线程的几种方式

严格来讲&#xff0c;创建线程只有一种方式&#xff0c;就是实现Runnable接口&#xff0c;其他创建线程的方式也是对其封装。 继承Thread方式 public class Thread extends java.lang.Thread {Overridepublic void run() {super.run();} } 进入Thread可以看到&#xff0c;也是…

Spark实时(四):Strctured Streaming简单应用

文章目录 Strctured Streaming简单应用 一、Output Modes输出模式 二、Streaming Table API 三、​​​​​​​​​​​​​​Triggers 1、​​​​​​​unspecified&#xff08;默认模式&#xff09; 2、​​​​​​​​​​​​​​Fixed interval micro-batches&am…

C语言刷题小记2

前言 本篇博客还是为大家分享一些C语言的OJ题目&#xff0c;如果你感兴趣&#xff0c;希望大佬一键三连。多多支持。下面进入正文部分。 题目1竞选社长 分析&#xff1a;本题要求我们输入一串字符&#xff0c;并且统计个数的多少&#xff0c;那么我们可以通过getchar函数来获…

软件开发者消除edge浏览器下载时“此应用不安全”的拦截方法

当Microsoft Edge浏览器显示“此应用不安全”或者“已阻止此不安全的下载”这类警告时&#xff0c;通常是因为Windows Defender SmartScreen或者其他安全功能认为下载的文件可能存在安全风险。对于软件开发者来说&#xff0c;大概率是由于软件没有进行数字签名&#xff0c;导致…

【React】useState:状态更新规则详解

文章目录 一、基本用法二、直接修改状态 vs 使用 setState 更新状态三、对象状态的更新四、深层次对象的更新五、函数式更新六、优化性能的建议 在 React 中&#xff0c;useState 是一个非常重要的 Hook&#xff0c;用于在函数组件中添加状态管理功能。正确理解和使用 useState…

未来的智能交通系统:智能合约在交通管理中的应用前景

随着城市化进程的加快和交通问题日益突出&#xff0c;智能交通系统成为了解决城市交通拥堵和安全问题的重要手段。本文将探讨智能合约在未来智能交通系统中的应用前景&#xff0c;分析其在交通管理中的潜力和优势。 什么是智能交通系统&#xff1f; 智能交通系统利用先进的信息…

MySQL之索引及简单运用

索引&#xff1a; 什么是索引 索引是数据库中一种非常重要的数据结构&#xff0c;用于帮助快速查询数据库表中的数据。它就像一本书的目录&#xff0c;能够让你快速定位到书中的某个具体章节或内容&#xff0c;而不需要一页一页地翻阅整本书。 在数据库管理系统中&#xff0c;…

设计模式 之 —— 单例模式

目录 什么是单例模式&#xff1f; 定义 单例模式的主要特点 单例模式的几种设计模式 1.懒汉式&#xff1a;线程不安全 2.懒汉式&#xff1a;线程安全 3.饿汉式 4.双重校验锁 单例模式的优缺点 优点&#xff1a; 缺点&#xff1a; 适用场景&#xff1a; 什么是单例模…