LIGA-Stereo:为基于立体 3D 检测器的学习 LiDAR 几何感知表示

论文地址:https://openaccess.thecvf.com/content/ICCV2021/papers/Guo_LIGA-Stereo_Learning_LiDAR_Geometry_Aware_Representations_for_Stereo-Based_3D_Detector_ICCV_2021_paper.pdf

论文代码:https://github.com/xy-guo/LIGA-Stereo

摘要

基于立体的3D检测旨在从立体图像中检测3D目标,为3D感知提供了低成本的解决方案。然而,与基于激光雷达的检测算法相比,其性能仍然较差。为了检测和定位准确的 3D 边界框,基于 LiDAR 的检测器对 LiDAR 点云的高级表示进行编码,例如准确的边界边界和表面法线方向。相反,由于立体匹配的限制,基于立体的检测器学习的高级特征很容易受到错误的深度估计的影响。
为了解决这个问题,论文提出了 LIGA-Stereo(LiDAR 几何感知立体检测器),在基于 LiDAR 的检测模型的高级几何感知表示的指导下学习基于立体的 3D 检测器。
此外,论文发现现有的基于体素的立体检测器无法从间接 3D 监督中有效地学习语义特征。因此附加一个辅助 2D 检测头来提供直接的 2D 语义监督。
上述两种策略提高了几何和语义表示能力。

论文背景

近年来,基于 LiDAR 的 3D 检测在自动驾驶和机器人技术中取得了不断提高的性能和稳定性。然而,LiDAR传感器的高成本限制了其在低成本产品中的应用。立体匹配是最常见的仅使用相机的深度感测技术。与LiDAR传感器相比,立体相机成本更低,分辨率更高,这使其成为3D感知的合适替代解决方案。立体图像的 3D 检测旨在使用估计的深度图 或隐式 3D 几何表示来检测目标。然而,与基于LiDAR的算法相比,现有的基于立体的3D检测算法的性能仍然较差。

基于 LiDAR 的检测算法将原始点云作为输入,然后将 3D 几何信息编码为中级和高级特征表示。为了检测和定位准确的 3D 边界框,模型必须学习有关目标边界和表面法线方向的鲁棒局部特征,这对于预测准确的边界框大小和方向至关重要。基于 LiDAR 的探测器学习的特征提供了精确 3D 几何结构的强大的高级总结。相比之下,由于立体匹配的限制,不准确的估计深度或隐式 3D 表示很难对目标的准确 3D 几何进行编码,尤其是对于远处的目标。此外,目标框监督仅提供目标级监督(位置、大小和方向)

论文利用先进的激光雷达检测模型,通过模仿激光雷达模型编码的几何感知表示来指导立体检测模型的训练。与识别任务的传统知识蒸馏相比,论文没有将LiDAR模型的最终错误分类和回归预测作为“软”目标,发现这对于训练立体检测网络没有什么好处。错误的回归目标会限制边界框回归的上限精度。
相反,论文强制模型将中间特征与 LiDAR 模型的中间特征对齐,后者对场景的高级几何表示进行编码。 LiDAR 模型的特征可以提供强大且有辨别力的高级几何感知特征,例如表面法线方向和边界位置。另一方面,LiDAR 特征可以提供额外的正则化,以缓解由错误的立体预测引起的过拟合问题。

除了学习更好的几何特征之外,论文还进一步探索如何学习更好的语义特征来提高 3D 检测性能。论文提出在 2D 语义特征上附加一个辅助的多尺度 2D 检测头,而不是从间接 3D 监督中学习语义特征,它可以直接指导 2D 语义特征的学习。根据DSGN 的消融研究,基线模型深度立体几何网络(DSGN)未能有效地从额外的语义特征中受益。论文认为,由于深度估计错误,网络从间接 3D 监督中提供了错误的语义监督,而提出的直接指导可以通过更好地学习 2D 语义特征来极大地提高 3D 检测性能。实验结果表明,性能进一步提高,特别是对于自行车手等样本较少的类别。

论文相关

立体匹配
第一个深度立体算法DispNet,从基于特征的相关 cost volume 回归视差图。后来使用多阶段细化和辅助语义特征来扩展 DispNet。最先进的立体模型通过连接所有视差候选者的左右 2D 特征来构建基于特征的 cost volume ,然后应用 3D 聚合网络来预测视差概率分布。最先进的立体检测网络也通过类似的网络结构来估计深度。

基于 LiDAR 的 3D 检测
通过利用 LiDAR 传感器捕获的更准确的深度信息,使用 LiDAR 点云的 3D 检测方法通常比基于图像的方法具有更好的性能。为了从不规则和稀疏的点云中学习有效的特征,大多数现有方法采用体素化操作将点云转移到规则网格,其中3D空间首先被划分为规则3D体素或鸟瞰2D网格通过检测头的卷积进行处理。
受它们的启发,论文提出模仿 LiDAR 模型中信息丰富的特征图,以便在 3D 框注释之外提供更好的指导。

基于立体的 3D 检测
基于立体的 3D 检测算法大致可以分为三种类型:
1)基于2D的方法
首先检测2D边界框提案,然后回归实例3D框。 Stereo-RCNN 扩展了 Faster RCNN ,用于立体输入以关联左右图像。 Disp R-CNN 和 ZoomNet 结合了额外的实例分割掩模和 part location map 来提高检测质量。然而,最终的性能受到 2D 检测算法的召回限制,并且 3D 几何信息没有得到充分利用。
2)基于伪LiDAR的3D检测
首先估计深度图,然后使用现有的基于LiDAR的算法检测3D边界框。 例如,Pseudo LiDAR++ 将 stereo cost volume 调整为深度成本量,以进行直接深度估计。。然而,这些模型仅考虑几何信息,缺乏互补的语义特征。
3)基于 volume 的方法构建
3D 锚空间或从 3D 立体 volume 进行检测。 DSGN 直接构建可微分 volume 表示,对场景的隐式 3D 几何结构进行编码,用于单阶段基于立体的 3D 检测。 PLUME 直接在 3D 空间中构造几何 volume 以进行加速。论文的工作以 DSGN 作为基线模型。解决了 DSGN 中存在的几个关键问题,并大幅超越了最先进的模型。

知识蒸馏
蒸馏是由 Hinton 等人首先提出的。 [1]通过使用大型教师网络预测中的“软化标签”来监督学生网络来进行模型压缩。进一步从“软化标签”来看,中间层的知识为教师提供了更丰富的信息。最近,知识蒸馏已成功应用于检测和语义分割。知识也可以跨模态转移

[1] Geoffrey Hinton, Oriol Vinyals, and Jeff Dean. Distilling the knowledge in a neural network. arXiv preprint arXiv:1503.02531, 2015.

论文方法

在这项工作中,为了提高模型的性能,论文开发了两种策略来分别学习更好的几何和语义特征。由于立体匹配的限制,基于立体的检测器很容易出现错误的深度估计,特别是对于低纹理表面、模糊边界和遮挡区域
相比之下,基于激光雷达的检测器学习的特征提供了强大的高级几何感知表示(准确的边界和表面法线方向)。为了最小化基于 LiDAR 的检测器和基于立体的探测器之间的差距,论文提出利用 LiDAR 模型来指导基于立体的探测器的训练,以实现更好的几何监督。此外,论文采用辅助二维语义监督来提高语义特征的学习效率。

深度立体几何网络

论文利用深度立体几何网络(DSGN)作为基线模型,它使用隐式 volumetric 表示直接检测目标。

立体空间中的 Volume
给定左右图像对 ( I L , I R ) (\mathcal I_L,\mathcal I_R) (IL,IR) 及其特征 ( F L , F R ) (\mathcal F_L,\mathcal F_R) (FLFR),通过连接每个候选深度级别的左特征和相应的右特征来构造平面扫描 volume V s t \mathcal V_{st} Vst
V s t ( u , v , w ) = concat [ F L ( u , v ) , F R ( u − f L d ( w ) s F , v ) ] (1) \tag1 \mathcal V_{st}(u,v,w) = \text{concat} \lbrack \mathcal F_L (u,v),\mathcal F_R(u - \frac{fL}{d(w)s \mathcal F},v) \rbrack Vst(u,v,w)=concat[FL(u,v)FR(ud(w)sFfL,v)](1)

其中 ( u , v ) (u,v) (u,v) 是当前像素坐标。 w = 0 , 1 , ⋅ ⋅ ⋅ ⋅ w=0, 1,···· w=0,1,⋅⋅⋅⋅ 为候选深度索引, d ( w ) = w ⋅ v d + z min ⁡ d(w)=w·v_d+z_{\min} d(w)=wvd+zmin 为计算其对应深度的函数,其中 v d v_d vd 为深度区间, z min ⁡ z_{\min} zmin为该深度的最小深度检测区域。 f f f L L L s F s_{\mathcal F} sF 分别是相机焦距、立体相机对的基线和特征图的步幅。使用 3D cost volume 聚合网络对 V s t \mathcal V_{st} Vst 进行滤波后,我们获得聚合立体体积 V s t \mathcal V_{st} Vst 和深度分布体积 P s t \mathcal P_{st} Pst P s t ( u , v , : ) \mathcal P_{st}(u,v,:) Pst(u,v,:)表示像素 ( u , v ) (u, v) (u,v) 在所有离散深度级别 d ( w ) d(w) d(w) 上的深度概率分布。

3D 空间中的体积
为了将 feature volume 从立体空间转换到正常的3D空间,将3D检测区域划分为相同大小的小体素。对于每个体素,使用特征内在函数 K F \boldsymbol K_{\mathcal F} KF 将其中心 ( x , y , z ) (x, y, z) (x,y,z) 投影回立体空间,以获得其重新投影的像素坐标 ( u , v ) (u, v) (u,v) 和深度索引 d − 1 ( z ) = ( z − z min ⁡ ) / v d d^{−1}(z)=(z−z_{\min} )/v_d d1(z)=(zzmin)/vd。然后,3D 空间中的 volume 被定义为重采样立体 volume 和深度概率 masked 的语义特征的串联,
V 3 d ( x , y , z ) = concat [ V s t ( u , v , d − 1 ( z ) ) , F s e m ( u , v ) ⋅ P s t ( u , v , d − 1 ( z ) ) ] (2) \tag2 \mathcal V_{3d}(x,y,z) = \text{concat}[\mathcal V_{st}(u,v,d^{-1}(z)),\mathcal F_{sem}(u,v)\cdot \mathcal P_{st}(u,v,d^{-1}(z))] V3d(x,y,z)=concat[Vst(u,v,d1(z)),Fsem(u,v)Pst(u,v,d1(z))](2)

其中 V s t \mathcal V_{st} Vst F s e m \mathcal F_{sem} Fsem 分别提供几何和语义特征。请注意,为了简单起见,我们忽略了三线性和双线性重采样运算符。

BEV 空间和检测头的功能
然后通过将通道尺寸和高度尺寸像 DSGN 一样合并,将 3D volume V 3 d \mathcal V_{3d} V3d 重新排列为 2D 鸟瞰图 (BEV) 特征 F B E V \mathcal F_{BEV} FBEV。2D 聚合网络和检测头连接到 F B E V \mathcal F_{BEV} FBEV,以生成聚合的 BEV 特征 F ~ B E V \tilde {\mathcal F}_{BEV} F~BEV 并分别预测最终的 3D 边界框。
训练损失分为两部分,深度回归损失和3D检测损失​​,
L b s l = L d e p t h + L d e t (3) \tag3 \mathcal L_{bsl} = \mathcal L_{depth}+ \mathcal L_{det} Lbsl=Ldepth+Ldet(3)

学习 LiDAR 几何感知表示

基于 LiDAR 的检测模型将原始点云作为输入,然后将其编码为高级特征(例如精确边界和表面法线方向)以获得精确的边界框局部化。对于基于立体的模型,由于错误的深度表示,纯粹的深度损失和检测损失不能很好地使模型学习遮挡区域、非纹理区域和远处物体的这些特征

受上述观察的启发,论文提出使用激光雷达模型的高级几何感知特征来指导基于立体的检测器的训练。在本文中,我们利用 SECOND 作为 LiDAR “teacher”。为了使两个模型之间的特征尽可能一致,论文采用相同结构的 2D 聚合网络和检测头,如图所示。
在这里插入图片描述

由于LiDAR模型和立体模型的主干存在巨大差异,论文只关注如何对高级特征 F i m ⊆ { V 3 d , F B E V , F ~ B E V } \mathbb F_{im} \sube \{\mathcal V_{3d}, \mathcal F_{BEV}, \tilde {\mathcal F}_{BEV} \} Fim{V3d,FBEV,F~BEV} 进行特征模仿,这些特征在LiDAR模型和立体模型之间具有相同的形状两个模型。
论文的模仿损失旨在最小化立体特征 F i m ∈ F i m \mathcal F_{im} \in \mathbb F_{im} FimFim 与其对应的 LiDAR 特征 F i m l i d a r F^{lidar}_{im} Fimlidar 之间的特征距离:
L i m = ∑ F i m ∈ F i m 1 N p o s ∣ ∣ M f g M s g ( g ( F i m ) − F i m l i d a r E [ ∣ F i m l i d a r ∣ ] ) ∣ ∣ 2 2 (4) \tag4 \mathcal L_{im} = \sum_{\mathcal F_{im} \in \mathbb F_{im}} \frac{1}{N_{pos}}\bigg|\bigg| M_{fg}M_{sg}\bigg( g(\mathcal F_{im})-\frac{\mathcal F_{im}^{lidar}}{\mathbb E[|\mathcal F_{im}^{lidar}|]} \bigg) \bigg| \bigg|_2^2 Lim=FimFimNpos1 MfgMsg(g(Fim)E[Fimlidar]Fimlidar) 22(4)

其中 g g g 是内核大小为 1 1 1 的单个卷积层,后跟可选的 ReLU 层(取决于 ReLU 是否应用于 F i m l i d a r \mathcal F_{im}^{lidar} Fimlidar)。 M f g M_{fg} Mfg 是前景掩码,在任何真实对象框内为 1 1 1,否则为 0 0 0 M s p M_{sp} Msp F i m l i d a r \mathcal F_{im}^{lidar} Fimlidar 的稀疏掩码,对于非空索引为 1 1 1,否则为 1 1 1 N p o s = ∑ M f g M s p N_{pos} =\sum M_{fg}M_{sp} Npos=MfgMsp 是归一化因子。请要注意的是,LiDAR 特征 F i m l i d a r \mathcal F_{im}^{lidar} Fimlidar 通过 F i m l i d a r \mathcal F_{im}^{lidar} Fimlidar 非零绝对值的通道期望进行归一化,以确保 L2 损失的尺度稳定性。

实验结果表明,模仿整个特征图对检测性能的提升不大,因此 M f g M_{fg} Mfg 对于使模仿损失集中在前景物体上至关重要。实验发现 F B E V \mathcal F_{BEV} FBEV V 3 d \mathcal V_{3d} V3d 为训练我们的立体检测网络提供了最有效的监督。

通过直接 2D 监督提升语义特征

从方程 (2) 可以看到,在将语义特征重采样到 3D 空间之前,它首先乘以 P s t \mathcal P_{st} Pst 的深度概率(可以看作是 3D 占用掩模的估计)。

这样,语义特征仅在估计表面附近重新采样(图3中的橙色虚线)。
在这里插入图片描述
然而,当估计的深度值存在较大误差时,语义特征将被重新采样到错误的位置,如图所示。因此,重采样的语义特征偏离了真实位置,然后被分配负锚点(图中的红色方块),并且正锚点周围没有重采样的语义特征(图3中的绿色方块) 。因此,这种情况下语义特征的监督信号不正确,导致语义特征的学习效率低。

为了解决这个问题,论文添加了一个辅助的 2D 检测头来为学习语义特征提供直接监督。论文没有使用多级特征创建特征金字塔(FPN),而是只使用单个特征图 F s e m \mathcal F_{sem} Fsem 来构建特征金字塔,如图1(e)所示,这形成了信息“瓶颈”强制将所有语义特征编码到 F s e m \mathcal F_{sem} Fsem 中。将步幅为 2 2 2 的五个连续卷积层附加到 F s e m \mathcal F_{sem} Fsem 上,构建多级特征金字塔,然后将其连接到 ATSS 头进行 2D 检测。
由于论文发现扩张卷积和空间金字塔池化(SPP)已经产生了具有大感受野的高度语义特征,因此为了简单起见,论文忽略了 FPN 自上而下的路径。

为了确保 2D 和 3D 特征之间的语义对齐,2D 检测头应该预测重新投影的 3D 目标中心周围的高分。论文对 ATSS 的正样本分配算法做了一个小的修改。对于每个真实边界框 g g g,如果它们的中心最接近重新投影的 3D 目标中心,会从每个尺度中选择 k k k 个候选锚点,而不是样选择 2D 边界框中心。然后按照 ATSS 中的动态 IoU 阈值对候选锚点进行过滤,以分配最终的正样本。

Baseline 和训练损失的修改

论文对 DSGN 进行了一些重要修改,以获得更快、更稳健的基线模型。 1)减少通道数和层数,以减少内存消耗和计算成本。 2) 利用SECOND 检测头进行3D检测。 3)基于 Kullback-Leibler 散度将等式(6)中的 smooth-L1 深度回归损失替换为单模态深度损失。4)结合使用 L1 损失和辅助旋转 3D IoU 损失以获得更好的边界框回归。5) 将一个小型 U-Net 连接到 2D 主干,以编码全分辨率特征图以构建立体体积。

我们模型的新总体损失公式为:
L = L d e p t h + L d e t + λ i m L i m + λ 2 d L 2 d , L d e t = L c l s + λ r e g L 1 L r e g L 1 + λ r e g I o U L r e g I o U + λ d i r L d i r (5) \tag5 \mathcal L = \mathcal L_{depth} + \mathcal L_{det} + \lambda_{im}\mathcal L_{im} + \lambda_{2d}\mathcal L_{2d}, \\ \mathcal L_{det} = \mathcal L_{cls}+ \lambda_{reg}^{L1} \mathcal L_{reg}^{L1}+ \lambda_{reg}^{IoU} \mathcal L_{reg}^{IoU}+ \lambda_{dir} \mathcal L_{dir} L=Ldepth+Ldet+λimLim+λ2dL2d,Ldet=Lcls+λregL1LregL1+λregIoULregIoU+λdirLdir(5)

其中 L c l s \mathcal L_{cls} Lcls, L r e g L 1 L_{reg}^{L1} LregL1, 和 L d i r L_{dir} Ldir 是与 SECOND 中相同的分类损失、框回归损失和方向分类损失。 L r e g I o U \mathcal L_{reg}^{IoU} LregIoU 是 3D 框预测和真实边界框之间的平均旋转 I o U IoU IoU 损失。单模态深度损失 L d e p t h L_{depth} Ldepth 的公式为
L d e p t h = 1 N ∑ u , v ∑ w [ − max ⁡ ( 1 − ∣ d ∗ − d ( w ) ∣ v d ) log ⁡ P s t ( u , v , w ) ] (6) \tag6 \mathcal L_{depth} = \frac{1}{N} \sum_{u,v} \sum_{w} \bigg[ -\max \bigg( 1-\frac{ |d^{*} - d(w)| }{v_{d}} \bigg) \log \mathcal P_{st} (u,v,w) \bigg] Ldepth=N1u,vw[max(1vddd(w))logPst(u,v,w)](6)

其中 d ∗ d^* d 是真实深度。请注意,损失仅适用于具有有效 LiDAR 深度的像素 ( u , v ) (u, v) (u,v) N g t N_{gt} Ngt 表示有效像素的数量。与原来的 L1 损失相比,式(6)中的损失为: 对目标分布进行更加集中的监管。

论文结论

在论文中,提出在高级几何感知 LiDAR 特征和直接语义监督的指导下学习基于立体的 3D 检测器,成功提高了几何和语义能力。模型在官方 KITTI 3D 检测基准上超越了最先进的算法超过 10.44% mAP,这缩小了基于立体和基于 LiDAR 的 3D 检测算法之间的差距。然而,基于立体的 3D 探测器仍然面临遮挡、无纹理区域和远处物体的问题

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于MybatisPlus批量高效插入百万条数据

引言 在JAVA程序开发中,对数据库进行大量数据插入是一个常见的操作,作为一个软件开发工程师,大批量的数据处理是日常工作,如何优化插入性能,提升数据处理效率是对大多数工程师的一个重要考验。本文将围绕逐条插入和批…

一分钟学会“沉浸式翻译”插件的安装与使用

一、安装 安装地址:https://immersivetranslate.com/ 选择对应的浏览器进入安装即可 二、简单的翻译使用方法 第一次安装需要先刷新界面才可以达到翻译效果 核心需要修改的地方在以下三个: 第一处:设置翻译服务,免费版的可以直接…

重温经典struts1之自定义类型转换器及注册的两种方式(Servlet,PlugIn)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 Struts的ActionServlet接收用户在浏览器发送的请求,并将用户输入的数据,按照FormBean中定义的数据类型,赋值给FormBean中每个变量&a…

八:爬虫-MySQL基础

一:MySQL数据库基础 1.MySQL数据库介绍 MySQL是一个[关系型数据库管理系统],由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Rela…

Kafka大数据框架学习攻略:精选Kafka学习资源,助你迅速掌握分布式消息系统!

介绍:Kafka是一个分布式、支持分区、多副本的基于zookeeper协调的分布式消息系统,可以实时处理大量数据和满足各种需求场景。它是一个基于发布/订阅模式的消息队列,主要应用于大数据实时处理领域,支持消息的发布、订阅、消费和处理…

2023年12月21日开发正式版v1.2.3更新·本次更新30多个细节优化·完善丰富后台功能·加入演员关联机制

2023年12月21日开发正式版v1.2.3更新本次更新30多个细节优化完善丰富后台功能加入演员关联机制 产品简介 安卓苹果PCH5四端,蜻蜓z暗影版的衍生级版本,2023年优雅草蜻蜓z冬季雪花限定版,不仅继承了蜻蜓z的精良功能,还特色增加了弹…

[LitCTF 2023]PHP是世界上最好的语言!!

[LitCTF 2023]PHP是世界上最好的语言&#xff01;&#xff01; wp 进入页面&#xff0c;发现左边有输入框&#xff0c;下面有 RUN CODE 字样&#xff0c;估计是可以执行命令的。 执行 PHP 代码测试 <?php print(1); ?>将 PHP 一句话木马写入文件 为了蚁剑能连上&am…

通过几个基本概念说一下为什么openGauss是当下之选?

Database、Schema、User都是数据库的基本概念&#xff0c;SQL标准中也有明确规范。但不同数据库的具体实现也不尽相同&#xff0c;有些甚至大相径庭。这就导致用户在做国产化选型和数据库迁移时可能会遇到种种困难。本文从这几个基本概念展开&#xff0c;说说为什么openGauss系…

uniapp实战 -- 个人信息维护(含选择图片 uni.chooseMedia,上传文件 uni.uploadFile,获取和更新表单数据)

效果预览 相关代码 页面–我的 src\pages\my\my.vue <!-- 个人资料 --><view class"profile" :style"{ paddingTop: safeAreaInsets!.top px }"><!-- 情况1&#xff1a;已登录 --><view class"overview" v-if"membe…

docker数据卷数据卷容器

前言 今天调休在家&#xff0c;随便玩玩&#xff0c;简单做下学习记录 1. 数据卷特点 数据卷在容器启动时初始化&#xff0c;如果容器使用的镜像在挂载点包含了数据&#xff0c;这些数据会被拷贝到新初始化的数据卷中数据卷可以在容器之间共享和重用可以对数据卷里的内容直接…

【Linux】编辑、查看和搜索文件

大多数 Linux 发行版不包含真正的 vi;而是自带一款高级替代版本&#xff0c;叫做 vim(它是“vi improved”的简写)由 Bram Moolenaar 开发的&#xff0c;vim 相对于传统的 Unix vi 来说&#xff0c;取得了实质性进步。 启动和退出 vim 使用vim可以启动&#xff0c;如命令行输…

电脑文件msvcp140.dll丢失该怎么解决?靠谱的msvcp140.dll修复方法

面对计算机系统报告的msvcp140.dll文件丢失警报&#xff0c;这个问题可能会阻碍依赖此特定动态链接库(DLL)的一些程序的正常启动和运行。解决msvcp140.dll文件丢失的问题对于保障相关应用程序能够无障碍操作非常关键&#xff0c;并且这还是确保计算机系统保持高效稳定运行的必要…

华为gre隧道全部跑静态路由

最终实现&#xff1a; 1、pc1能用nat上网ping能pc3 2、pc1能通过gre访问pc2 3、全部用静态路由做&#xff0c;没有用ospf&#xff0c;如果要用ospf&#xff0c;那么两边除了路由器上跑ospf&#xff0c;核心交换机也得用ospf r2配置&#xff1a; acl number 3000 rule 5 deny…

Java设计模式之单例模式以及如何防止通过反射破坏单例模式

单例模式 单例模式使用场景 ​ 什么是单例模式&#xff1f;保障一个类只能有一个对象&#xff08;实例&#xff09;的代码开发模式就叫单例模式 ​ 什么时候使用&#xff1f; 工具类&#xff01;&#xff08;一种做法&#xff0c;所有的方法都是static&#xff0c;还有一种单…

Notepad++如果同一个窗口,打开了很多文件,需另开一个窗口

如果一个窗口已经这么多了&#xff0c;需要另外再一个 这里打开

效果图云渲染是什么意思?如何渲染出照片级别的效果图?

​在当前的建筑规划、室内装修以及电影视效制作等行业内&#xff0c;制作高质量的效果图起着至关重要的作用&#xff0c;因为它能够给予观众或客户极为逼真和吸引人的视觉体验。在此篇文章中&#xff0c;我们将深入了解什么是云端效果图渲染&#xff0c;并探讨如何运用Renderbu…

C#中如何稳定精确地每隔5ms执行某个函数?

C#中如何稳定精确地每隔5ms执行某个函数&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「C#的资料从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xf…

技术丨 浅谈以太网系统级刷写测试

在研发阶段&#xff0c;我们一般将ECU直连至刷写上位机进行软件更新&#xff0c;但在整车环境中&#xff0c;各ECU之间通过线束连接在一起&#xff0c;如果此时想对某个单独的样件进行软件更新&#xff0c;把零件拆下来再接到上位机上进行软件更新是不现实的。 作为测试工程师…

QT编写应用的界面自适应分辨率的解决方案

博主在工作机上完成QT软件开发&#xff08;控件大小与字体大小比例正常&#xff09;&#xff0c;部署到客户机后&#xff0c;发现控件大小与字体大小比例失调&#xff0c;具体表现为控件装不下字体&#xff0c;即字体显示不全&#xff0c;推测是软件不能自适应分辨率导致的。 …