【论文阅读】MARS:用于自动驾驶的实例感知、模块化和现实模拟器

news2024/11/26 21:40:13

【论文阅读】MARS:用于自动驾驶的实例感知、模块化和现实模拟器

  • Abstract
  • 1 Introduction
  • 2 Method
    • 2.1 Scene Representation
    • 2.3 Towards Realistic Rendering
    • 2.4 Optimization
    • 3.1 Photorealistic Rendering
    • 3.2 Instance-wise Editing
    • 3.3 The blessing of moduler design
    • 3.4 Ablation Results
  • 4 Conclusion

在这里插入图片描述
paper code

Abstract

如今,自动驾驶汽车可以在普通情况下平稳行驶,人们普遍认识到,真实的传感器模拟将在通过模拟解决剩余的极端情况方面发挥关键作用。为此,我们提出了一种基于神经辐射场(NeRF)的自动驾驶模拟器。与现有作品相比,我们的作品具有三个显着特点:
(1)实例感知。我们的模拟器使用独立的网络分别对前景实例和背景环境进行建模,以便可以单独控制实例的静态(例如大小和外观)和动态(例如轨迹)属性。
(2)模块化。我们的模拟器允许在不同的现代 NeRF 相关主干、采样策略、输入模式等之间灵活切换。我们期望这种模块化设计能够促进基于 NeRF 的自动驾驶模拟的学术进步和工业部署。
(3)真实性。考虑到最佳的模块选择,我们的模拟器设置了新的最先进的照片级真实感结果。我们的模拟器将开源,而大多数同类模拟器都不开源。项目页面:https://open-air-sun.github.io/mars/。

1 Introduction

自动驾驶 [11,13,33,16,24,14] 可以说是现代 3D 场景理解 [5,25] 技术最重要的应用。如今,Robotaxis可以在拥有最新高清地图的大城市中运行,顺利应对日常驾驶场景。然而,一旦道路上意外发生自动驾驶算法分布之外的极端情况,乘客的生命就会受到威胁。困境在于,虽然我们需要更多关于极端情况的训练数据,但在现实世界中收集它们通常意味着危险和高昂的费用。为此,社区认为真实感模拟[17,6,29,10]是一条极具潜力的技术路径。如果算法能够在模拟器中经历大量的极端情况,并且模拟与真实的差距很小,那么当前自动驾驶算法的性能瓶颈就有可能得到解决。

现有的自动驾驶仿真方法有其自身的局限性。 CARLA [8] 是一种广泛使用的基于传统图形引擎的传感器模拟器,其真实性受到资产建模和渲染质量的限制。 AADS [17] 也利用传统的图形引擎,但使用精心策划的资源展示了令人印象深刻的照片级真实感。另一方面,GeoSim [6] 引入了一种通过学习图像增强网络来进行真实模拟的数据驱动方案。灵活的资产生成和渲染可以通过具有良好几何形状和逼真外观的图像合成来实现。

在本文中,我们利用 NeRF 的真实渲染能力进行自动驾驶仿真。从现实环境中捕获的训练数据保证了模拟与真实之间的微小差距。一些作品还利用 NeRF 来模拟室外环境中的汽车 [20] 和静态背景 [10]。然而,无法对由移动物体和静态环境组成的复杂动态场景进行建模,限制了它们在现实世界传感器模拟中的实际应用。最近,神经场景图(NSG)[21]将动态场景分解为学习场景图,并学习类别级对象的潜在表示。然而,其基于多平面的背景建模表示无法在大视点变化下合成图像。

具体来说,我们的核心贡献是第一个基于 NeRF 的开源模块化框架,用于逼真的自动驾驶模拟。所提出的管道以分解的方式对前景实例和后景环境进行建模。不同的 NeRF 主干架构和采样方法以统一的方式合并,并支持多模态输入。所提出的框架的最佳模块组合在公共基准上实现了最先进的渲染性能,并具有较大的裕度,表明了逼真的模拟结果。

2 Method

在这里插入图片描述
图 1. 管道。左:我们首先计算所查询的射线 r 和所有可见实例边界框 { B i j } \{\mathcal{B}_{ij}\} {Bij}的射线-盒交集。对于背景节点,我们直接使用选定的场景表示模型和选定的采样器来推断逐点属性,就像传统 NeRF 中一样。对于前景节点,光线首先被转换为实例框架 r o r_o ro,然后通过前景节点表示进行处理(第 2.1 节)。右:所有样本都被组合并渲染为 RGB 图像、深度图和语义(第 2.2 节)。

Overview.
如图1所示,我们的目标是提供一个用于构建组合神经辐射场的模块化框架,其中可以针对户外驾驶场景进行真实的传感器模拟。考虑到具有大量动态对象的大型无界室外环境。

系统的输入包括一组 RGB 图像 { L i } N \{\mathcal{L}_i\}^N {Li}N (由车辆端或路边传感器捕获)、传感器姿态 { T i } N \{\mathcal{T}_i\}^N {Ti}N (使用 IMU/GPS 信号计算)和对象轨迹(包括 3D 边界)框 { B i j } N × M \{\mathcal{B}_{ij}\}^{N \times M} {Bij}N×M 、类别 { t y p e i j } N × M \{type_{ij}\}^{N \times M} {typeij}N×M 和实例 ID { i d x i j } N × M \{idx_{ij}\}^{N \times M} {idxij}N×M)。 N 是输入帧的数量,M 是整个序列中跟踪实例 { O i } M \{\mathcal{O}_i\}^M {Oi}M的数量。训练期间还可以采用一组可选的深度图 { D i } N \{\mathcal{D}_i\}^N {Di}N 和语义分割掩模 { S i } N \{\mathcal{S}_i\}^N {Si}N 作为额外的监督信号。通过构建组合神经场,所提出的框架可以在给定的传感器姿势下模拟真实的传感器感知信号(包括 RGB 图像、深度图、语义分割掩模等)。还支持对对象轨迹和外观进行实例编辑。

Pipeline.

我们的框架对每个前景实例和后景节点进行组合建模。如图 1 所示,当查询给定射线 r 的属性(RGB、深度、语义等)时,我们首先计算其与所有可见对象的 3D 边界框的交集,以获得进入和离开的距离 [ t i n , t o u t ] [t_{in}, t_{out}] [tin,tout]。然后,查询背景节点(图 1 左上)和前景对象节点(图 1 左下),其中每个节点对一组 3D 点进行采样,并使用其特定的神经表示网络来获取点属性(RGB、密度、语义等)。具体来说,为了查询前景节点,我们根据对象轨迹将光线原点和方向从世界空间转换为实例帧。最后,来自背景和前景节点的所有光线样本被组合并进行体积渲染,以产生逐像素渲染结果(图 1 右侧,第 2.2 节)。

我们观察到背景节点(通常是无界的大规模场景)的性质与以对象为中心的前景节点不同,而传感器模拟中的当前工作[15,21]使用统一的 NeRF 模型。我们的框架提供了一个灵活的开源框架,支持背景和前景节点场景表示的不同设计选择,并且可以轻松地结合静态场景重建和以对象为中心的重建的新的最先进的方法。

2.1 Scene Representation

我们将场景分解为一个大规模的无界 NeRF(作为背景节点)和多个以对象为中心的 NeRF(作为独立的前景节点)。传统上,神经辐射场将给定的 3D 点坐标 x = (x, y, z) 和 2D 观察方向 d 映射到其辐射率 c 和体积密度 σ,如方程式 1 所示。 1. 基于这种开创性的表示,针对不同目的提出了许多变体,因此我们采用模块化设计。

在这里插入图片描述
对无界背景场景进行逼真建模的挑战在于准确表示远区,因此我们利用无界场景扭曲 [2] 来收缩远区。对于前景节点,我们支持代码条件表示 f (x, d, z) = (c, σ) (z 表示实例级潜在代码)和传统的表示,解释如下。

Architectures.

在我们的模块化框架中,我们支持各种 NeRF 主干,这些主干可以大致分为两个超类:基于 MLP 的方法 [18,1,2],或基于网格的方法,在其哈希网格体素中存储空间变化的特征顶点[19,23]。尽管这些架构在细节上彼此不同,但它们遵循相同的高级公式1 并封装在 MARS 中统一接口下的模块中。

虽然基于 MLP 的表示在数学形式上很简单,但我们给出了基于网格的方法的正式阐述。多分辨率特征网格 { G θ l } l = 1 L \{\mathcal{G}_{\theta}^{l}\}^{L}_{l=1} {Gθl}l=1L 的具体实现具有逐层分辨率 R l : = ⌊ R m i n ⋅ b l ⌋ , b = e x p ( l n R m a x − l n R m i n L − 1 ) R_l := ⌊R_{min} · b^l⌋, b = exp(\frac{ln R_{max} − ln R_{min}}{ L−1}) Rl:=Rminbl,b=exp(L1lnRmaxlnRmin) ,其中 R m i n 、 R m a x R_{min}、R_{max} RminRmax 是最粗和最细的分辨率[31,19]。坐标 x 首先缩放到每个分辨率,然后通过向上和向下操作处理为 ⌈ x ⋅ R l ⌉ 、 ⌊ x ⋅ R l ⌋ ⌈x · R_l⌉、⌊x · R_l⌋ xRlxRl 并进行散列以获得表索引 [19]。然后对提取的特征向量进行三线性插值并通过浅 MLP 进行解码。

在这里插入图片描述
Sampling.
我们支持各种采样策略,包括最近提出的提案网络 [2],它从无辐射 NeRF 模型中提取密度场以生成射线样本以及其他采样方案,例如从粗到细采样 [18] 或均匀采样 [9]。

Foreground Nodes.

为了渲染前景实例,我们首先将投影光线转换到每个实例的坐标空间,然后推断每个实例规范空间中的以对象为中心的 NeRF。我们框架的默认设置使用代码条件模型,该模型利用潜在代码对实例特征进行编码,并使用共享类别级解码器对类先验进行编码,从而允许对许多具有紧凑内存使用的长轨迹进行建模。同时,我们的框架也支持传统的无代码条件的。我们在补充材料中详细介绍了修改后的前景表示(在第 3 节中表示为“Ours")。

在这里插入图片描述
图 2. 构图渲染图。远处区域中的一些静态车辆被视为背景物体。

2.2 Compositional Rendering

图 2 展示了合成渲染结果。为了以给定的相机姿态 T i \mathcal{T}_{i} Ti 渲染图像,我们在每个渲染像素处投射一条光线 r = o + t d r = o + td r=o+td 。对于每条射线 r,我们首先计算与所有可见前景节点 O i j \mathcal{O}_{ij} Oij 的交集间隔 [ t i n , t o u t ] [t_{in}, t_{out}] [tin,tout](图 3),并将样本 { P k o b j − j } \{\mathcal{P}_{k}^{obj-j}\} {Pkobjj}沿射线从世界空间变换到每个前景规范空间。我们还沿光线采样一组 3D 点 { P k g b } \{\mathcal{P}_{k}^{gb}\} {Pkgb}作为背景样本。所有节点中的样本首先通过其相应的网络来获取逐点颜色 { c k b g , o b j } \{c_{k}^{bg,obj}\} {ckbg,obj}、密度 { σ k b g , o b j } \{σ_{k}^{bg,obj}\} {σkbg,obj} 和前景语义逻辑 { s k b g } \{s_{k}^{bg}\} {skbg}。考虑到前景样本的语义属性实际上是它们的类别标签,我们创建一个 one-hot 向量:

在这里插入图片描述
为了聚合逐点属性,我们按世界空间中的光线距离对所有样本进行排序,并使用标准体积渲染过程来渲染逐像素属性:
在这里插入图片描述

2.3 Towards Realistic Rendering

Sky Modeling.
在我们的框架中,我们支持使用天空模型来处理无限距离处的外观,其中利用基于 MLP 的球形环境贴图 [22] 来对永远不会与不透明表面相交的无限远区域进行建模:
在这里插入图片描述
然而,天真地将天空颜色 c s k y c_{sky} csky 与背景和前景渲染(等式 4)混合会导致潜在的不一致。因此,我们引入 BCE 语义正则化来缓解这个问题:

在这里插入图片描述
Resolving Conflict Samples.
在这里插入图片描述
图 3. 我们的无冲突采样过程的视觉演示。我们在所有节点中使用均匀采样来进行说明。

Resolving Conflict Samples.
由于我们的背景和前景采样是独立完成的,因此背景样本有可能落入前景边界框内(图 3 背景截断样本)。合成渲染可能会错误地将前景样本分类为背景(稍后称为背景-前景模糊性)。因此,在移除前景实例后,背景区域将出现伪影(图 4)。理想情况下,有了足够的多视图监督信号,系统可以在训练过程中自动学习区分前景和背景。然而,对于数据驱动的模拟器来说,随着车辆在道路上快速移动,获取丰富且高质量的多视图图像对用户来说是一个挑战。 NSG [21] 中没有观察到这种模糊性,因为 NSG 仅对光线平面交叉点上的几个点进行采样,并且不太可能有太多背景截断样本。

在这里插入图片描述
图 4。我们表明,在没有进行正则化的情况下,背景截断样本会导致背景-前景模糊。

为了解决这个问题,我们设计了一个正则化项,可以最小化背景截断样本的密度和,以最小化它们在渲染过程中的影响:

在这里插入图片描述
其中 { P i ( t r ) } \{P^{(tr)}_ i \} {Pi(tr)} 表示背景截断样本。

2.4 Optimization

为了优化我们的系统,我们最小化以下目标函数:
在这里插入图片描述
其中 λ 1 − 5 λ_{1−5} λ15 是加权参数。 L s k y L_{sky} Lsky 和 ​​ L a c c u m L_{accum} Laccum 在方程式中进行了解释。 7和8。

Color Loss:

我们采用标准 MSE 损失来最小化光度测量误差:
在这里插入图片描述
Depth Loss:

我们引入深度损失来解决无纹理区域和从稀疏视点观察到的区域。我们设计了两种监督几何形状的策略。给定深度数据,我们利用从[7]导出的光线分布损失。另一方面,如果深度数据不可用,我们利用单深度网络并应用以下[31]的单深度损失。

在这里插入图片描述
Semantic Losses:
我们遵循 SemanticNeRF [34] 并使用交叉熵语义损失 在这里插入图片描述

3 Experiments

在本节中,我们提供了大量的实验结果来演示所提出的用于自动驾驶的实例感知、模块化和真实的模拟器。我们在 KITTI [11] 数据集和虚拟 KITTI-2 (V-KITTI) [3] 数据集的场景上评估我们的方法。在下文中,我们使用“我们的默认设置”来表示带有提案采样器的基于网格的 NeRF 用于背景节点,以及我们修改后的类别级表示以及用于前景节点的从粗到细的采样器。

在这里插入图片描述
表 1. 图像重建任务的定量结果以及与基线方法的设置比较。用于评估的数据集是KITTI。

3.1 Photorealistic Rendering

我们通过评估图像重建和新视图合成(NVS)来验证模拟器的真实感渲染性能[21,26]。

在这里插入图片描述
表 2. 新视图合成的定量结果

Baselines.
我们与其他最先进的方法进行定性和定量比较:NeRF [18]、带时间戳输入的 NeRF(表示为 NeRF+Time)、NSG [21]、PNF [15] 和 SUDS [26]。请注意,它们都没有同时满足表1 中提到的所有三个标准。

Implementation Details.
我们的模型使用 RAdam 作为优化器,经过 200,000 次迭代训练,每批 4096 条光线。背景节点的学习率被指定为 1 ∗ 1 0 − 3 1 * 10^{−3} 1103,衰减到 1 ∗ 1 0 − 5 1 * 10^{−5} 1105,而对象节点的学习率被分配为 5 ∗ 1 0 − 3 5 * 10^{−3} 5103,衰减到 1 ∗ 1 0 − 5 1 * 10^{−5} 1105

在这里插入图片描述
图 5. KITTI 数据集上的定性图像重建结果。

Experiment Settings.

图像重建设置中的训练和测试图像集是相同的,而在 NVS 任务中,我们渲染不包含在训练数据中的帧。具体来说,我们每隔 4 帧、每 2 帧和 4 帧进行一次训练,并且每 4 帧中只有 1 帧进行训练,即 25%、50% 和 75%。

我们遵循图像合成中的标准评估协议,并报告定量评估默认设置的峰值信噪比(PSNR)、结构相似性(SSIM)和学习感知图像块相似性(LPIPS)[32]。图像重建的结果如表 1 所示,NVS 的结果如表 2 所示,这表明我们的方法在两种设置下都优于基线方法。我们使用 75% 的训练数据在 V-KITTI 上可以达到 29.79 PSNR,而之前发布的最佳结果是 23.87。

在这里插入图片描述图 6. 不同渲染通道的图库。

3.2 Instance-wise Editing

我们的框架分别对背景和前景节点进行建模,这使我们能够以实例感知的方式编辑场景。我们定性地展示了删除实例、添加新实例和编辑车辆轨迹的能力。在图 7 中,我们展示了一些旋转和平移车辆的编辑示例,但可以在我们的视频剪辑中找到更多结果。

在这里插入图片描述

3.3 The blessing of moduler design

我们使用后景和前景节点、采样器和监督信号的不同组合进行评估,这归功于我们的模块化设计。

请注意,文献中的一些基线方法实际上对应于该表中的消融条目。例如,PNF [15] 使用 NeRF 作为背景节点表示,使用实例化 NeRF 作为具有语义损失的前景节点表示。 NSG [21] 使用 NeRF 作为背景节点表示,使用类别级 NeRF 作为前景表示,但采用多平面采样策略。我们的默认设置使用基于网格的背景节点表示,以及我们提出的前景节点表示的类别级方法。

3.4 Ablation Results

在本节中,我们分析不同的实验设置,验证我们设计的必要性。我们揭示了不同设计选择对背景节点表示、前景节点表示等的影响。具体来说,我们展示了 50,000 次迭代的所有实验。与之前的工作 [26,15,21] 在 90 张图像的短序列上评估他们的方法不同,我们使用数据集中的完整序列进行所有评估。由于它们不是开源的,并且不知道它们的确切评估序列,我们希望我们的新基准测试能够标准化这个重要领域。定量评价见表3。

对于背景和前景节点,我们用基于 MLP 和基于网格的模型替换默认模型(表 3 中的 ID 1),并在第 2 行、第 7-12 行列出它们的指标。在第 3-6 行中,我们展示了模型组件的有效性。对于模型和采样器,背景和前景节点的选定模块分别在斜杠之前和之后注明。

在这里插入图片描述

4 Conclusion

在本文中,我们提出了一个基于 NeRF 的逼真自动驾驶模拟模块化框架。我们的开源框架由一个后景节点和多个前景节点组成,可以对复杂的动态场景进行建模。我们通过大量的实验证明了我们框架的有效性。所提出的管道在公共基准上实现了最先进的渲染性能。我们还支持场景表示和采样策略的不同设计选择,从而在模拟过程中提供灵活性和多功能性。
Limitations.
我们的方法需要数小时的训练,并且无法实时渲染。此外,我们的方法未能考虑玻璃或其他反射材料上的动态镜面反射效应,这可能会导致渲染图像中的伪影。提高模拟效率和视图相关效果将是我们未来的工作。


抛砖:

  1. NeRF在自动驾驶领域的有效应用,效果很棒。
  2. 这个模块化挺好,可以自由组合各个小模块,可以针对不同场景较方便地切换模块与优化。
  3. 这份工作结合的NeRF在渲染方向的优势,似乎在NeRF重建方向由于效率等原因,很少看到相关应用,目前来看,可能NeRF重建还是后处理方面比较有优势(比如重建街景?)。

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

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

相关文章

怎么压缩视频?视频过大跟我这样压缩

在日常生活中,我们常常会遇到需要上传或者发送视频的情况,然而,有时候视频文件过大,无法顺利上传或发送,这时候就需要对视频进行压缩。那么,如何有效地压缩视频呢?看完下面三个方法你就明白了。…

在四维轻云中,能够上传哪些地理空间数据?

四维轻云是一款地理空间数据在线管理软件,支持各类地理空间数据的在线管理、浏览及分享,用户可不受时间地点限制,随时随地上传、管理、查看及分享各类地理空间数据。软件还具有项目管理、场景搭建、素材库等功能模块,支持在线协作…

软件测试/测试开发名企定向培养训练营,升职加薪快人一步!

测试人员如何提升核心竞争力 作为一个测试工程师,自动化测试已经是必须要掌握的技能了。学习自动化测试有两个难点,除了其本身拥有一定的技术门槛之外,实战经验才是学习自动化测试的最大难点。部分初中级测试工程师往往在掌握了基本的编程与…

jupyter notebook找不到python内核(kernel)的解决记录

文章来源:jupyter notebook找不到python内核(kernel)的解决记录 – WhiteNights Site 貌似导致这个问题的原因有非常多,这里只是说一个可能的解决方法。 前情提要:在费了九牛二虎之力,终于安装成功了jupyter notebook,…

ubuntu设置初始的root密码

在用vmware安装ubuntu的虚拟机后,只有初始设置的用户和密码,当进入系统后使用su切换成root账户后,要求输入密码,但输入安装时设置的用户密码不对,需要设置初始的root密码。 解决: 1、使用安装时候的用户登…

一份责任、一个意识、一种情怀,名酒担当剑南春擦亮公益品牌,连续8年助力“高考”!

海南八月,椰风海韵,青春飞扬。 来自全国各地的150余名准大学新生,齐聚南海之滨,开启“剑南春2023强国青年爱国之旅西沙群岛游”。 知名教育专家张雪峰启航致辞、三沙市银屿岛升旗仪式、西沙群岛特别课程《照见未来的一节课》、中…

Java“牵手”唯品会商品详情数据,唯品会商品详情接口,唯品会API接口申请指南

唯品会商城是中国最大的会员制特卖电商平台之一,于2008年创立。它以低至1折的深度折扣及充满乐趣的限时抢购模式,为消费者提供一站式优质购物体验。 唯品会定位于"一家专门做特卖的网站",每天上新品。它与全球3000多家品牌及供应商…

SSL双向认证-SpringBoot项目

SSL双向认证需要CA证书,开发过程可以利用自签CA证书进行调试验证。 自签CA证书生成过程:SSL双向认证-自签CA证书生成 1.将server.p12证书和client.jks证书复制到项目resources目录下 2.修改配置文件,增加下述内容 #https端口 server.port…

华为云云耀云服务器L实例评测|基于宝塔部署SpringBoot后端+前端工程

目录 前言 一、云耀云服务器L实例购买 1.远程登录并重置密码 2. 第三方登录 二、宝塔Linux面板初始化 1.开放宝塔8888端口 2.初始化宝塔 3.登录宝塔后台 三、宝塔软件安装 1.安装ftp 2.配置JDK 四、Springboot工程部署 1.创建JDK管理 2.上传springboot工程jar包 3.新建Java项目…

【HarmonyOS】如何实现应用内引用HSP模块中ArkUI组件

【关键字】 HSP开发、引入HSP模块中ArkUI组件 【写在前面】 在使用ArkTS开发HarmonyOS应用时,通常会定义一些公共组件或公共接口功能,此时可以将这些功能封装到HSP模块中,然后通过在HSP模块中导出组件或接口方式在其他模块中引用&#xff0…

掌握Power Pages Power Apps 画布应用,创造无限可能!

在这个数字化时代,企业要保持竞争力,不仅需要紧跟科技的步伐,还需要拥有创新的工具和战略。为了帮助您的组织更好地适应变化,世达教育根据企业定制推出的“Power Pages & Power Apps 画布应用”课程,已经圆满结束&…

Python中的异常处理4-3

在《Python中的异常处理4-2》中提到,except语句后面可以加上具体的异常类型。有时我们需要这个异常的其他细节,此时可以使用except...as语句。 1 except...as语句 except..as语句的格式为 except 异常类型 as 异常实例名 从以上格式中可以看到&#…

最新版ESP32 IDF环境搭建教程:基于CLION同时安装多个版本的IDF

最新版ESP32 IDF环境搭建教程 说明下载ESP32 IDF下载并激活CLION同时安装多个版本的IDF参考 说明 通过CLION配置了V445和V503版本的IDF。通过将环境变量添加在BAT文件中,解决了安装两个版本的IDF冲突的问题。CLION配置IDF效果要比VSCODE好,vscode代码补…

PAT (Basic Level) Practice 1045~1066

PTA Basic Level Practice 解题思路和代码,主要用的是 C。每22题一篇博客,可以按目录来进行寻找。 文章目录 1045 快速排序1046 划拳1047 编程团体赛1048 数字加密1049 数列的片段和1050 螺旋矩阵1051 复数乘法1052 卖个萌1053 住房空置率1054 求平均值1…

Redis 集合(Set)快速指南 | Navicat

Redis 支持通过多种数据类型来存储项目集合。其中,包括列表、集合和哈希。上周的博文介绍了列表(List)数据类型并重点介绍了一些用于管理列表(List)的主要命令。在今天的文章中,我们将转向关注集合&#xf…

SpringBoot 整合 Websocket 通信demo (附浏览器聊天窗口)

1. 依赖 <!-- SpringBoot WebSocket --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>2. 自动注册配置类 import org.springframework.context…

Timeline的使用心得

timeline使用教程 timeline使用主要分为一下几步&#xff1a; 1、新建表格&#xff1b; 2、设置数据 3、发布网址 4、修改表格样式&#xff1b; 5、快速预览 需要用到的几个网址&#xff1a; 1、timeline官网网址&#xff1a;timeline 2、本地图片转链接&#xff1a;图片转链…

创建react脚手架项目——demo(react18 + react-router 6)

创建react脚手架项目——demo&#xff08;react18 react-router 6&#xff09; 1. 安装 create-react-app1.1 执行安装命令1.2 安装遇到的问题1.2.1 问题1——npm ERR! code ENOTFOUND 2. 创建项目2.1 创建项目命令2.2 查看项目结构2.2.1 目录结构2.2.2 注意点 3. 启动项目4. …

分享一下在微信公众号上怎么实现表单功能

在微信公众号上实现表单功能可以帮助公众号运营者与用户进行互动&#xff0c;收集用户反馈&#xff0c;提供个性化服务&#xff0c;以及进行数据分析等。以下是在微信公众号上实现表单功能的一些步骤和建议。 一、了解微信公众号平台的功能 首先&#xff0c;你需要了解微信公众…

关于《考研数学高分公式》系列的后续及一点说明

写在前面 在昨天&#xff0c;当我再次登录CSDN时&#xff0c;我惊讶地发现《考研数学高分公式》这一系列的两篇文章竟然拥有超过数万次的阅读量。许多学弟学妹也通过私信向我询问&#xff0c;为什么不再继续更新这个系列了。 未及时回复他们&#xff0c;颇感惭愧。 我仔细考…