Unsupervised Learning of Depth and Ego-Motion from Video 论文精读

视频中深度和自我运动的无监督学习

摘要

我们提出了一个无监督学习框架,用于从非结构化视频序列中进行单眼深度和相机运动估计。与其他工作[10,14,16]一样,我们使用端到端的学习方法,将视图合成作为监督信号。与之前的工作相比,我们的方法完全没有监督,只需要单目视频序列进行训练。我们的方法使用单视图深度和多视图姿态网络,损失基于使用计算的深度和姿态将附近的视图扭曲到目标。因此,网络在训练过程中由于损耗而耦合,但可以在测试时独立应用。对KITTI数据集的经验评估证明了我们方法的有效性:

1)单眼深度与使用地面实况姿态或深度进行训练的监督方法相比表现良好,

2)姿态估计在类似输入设置下与已建立的SLAM系统相比表现良好。

一、介绍

即使在短时间尺度上,人类也能推断出自我运动和场景的3D结构。例如,在街道上导航时,我们可以很容易地找到障碍物,并迅速做出反应以避开它们。多年的几何计算机视觉研究未能为真实世界场景(例如,存在非刚性、遮挡和缺乏纹理的场景)重新创建类似的建模能力。那么,为什么人类擅长这项任务呢?一种现象是,我们通过过去的视觉体验对世界产生了丰富的结构性理解,这种体验主要包括四处走动和观察大量场景,以及对我们的观察进行一致的建模。从数百万次这样的观察中,我们了解了世界上道路平坦、建筑物笔直、汽车由道路支撑等的规律,我们可以在感知新场景时应用这些知识,即使是从单个单眼图像中也可以。

图1. 我们系统的训练数据仅由从不同视点捕捉场景外观的未标记图像序列组成,其中不提供图像的姿态。我们的训练过程产生了两个独立运行的模型,一个用于单视图深度预测,另一个用于多视图相机姿态估计。

在这项工作中,我们通过训练一个模型来模拟这种方法,该模型观察图像序列,并旨在通过预测可能的相机运动和场景结构来解释其观察结果(如图1所示)。我们采用端到端的方法,允许模型直接从输入像素映射到自我运动的估计(参数化为6-DoF变换矩阵)和底层场景结构(参数化的为参考视图下的每像素深度图)。我们特别受到先前工作的启发,这些工作建议将视图合成作为一种度量[44],以及最近在端到端框架中处理校准的多视图3D情况的工作[10]。我们的方法是无监督的,可以简单地使用图像序列进行训练,而无需手动标记,甚至无需相机运动信息。

我们的方法建立在这样一个观点的基础上,即几何视图合成系统只有在其对场景几何和相机姿态的中间预测与物理地面实况相对应时才能始终表现良好。虽然对于某些类型的场景(例如,无纹理),不完美的几何形状和/或姿态估计可能会在合理的合成视图中作弊,但当呈现另一组具有更多样布局和外观结构的场景时,同一模型将惨败。因此,我们的目标是将整个视图合成管道公式化为卷积神经网络的推理过程,以便通过在大规模视频数据上训练网络进行视图合成的“元”任务,迫使网络学习深度和凸轮时代姿态估计的中间任务,以便对视觉世界做出一致的解释。对KITTI[15]基准的经验评估证明了我们的方法在单视图深度和相机姿态估计方面的有效性。我们的代码将在 GitHub - tinghuiz/SfMLearner: An unsupervised learning framework for depth and ego-motion estimation from monocular videos 上提供。

二、相关工作

运动产生的结构

结构和运动的同时估计是一个经过充分研究的问题,具有已建立的技术工具链[12,50,38]。虽然传统的工具链在许多情况下是有效和高效的,但它对精确图像对应的依赖可能会在低纹理、复杂几何/光度、薄结构和遮挡区域造成问题。为了解决这些问题,最近使用深度学习解决了几个流水线阶段,例如特征匹配[18]、姿态估计[26]和立体[10,27,53]。这些基于学习的技术很有吸引力,因为它们能够在训练期间利用外部监督,并且在应用于测试数据时可能会克服上述问题。

基于翘曲的视图合成

几何场景理解的一个重要应用是新颖视图合成任务,其目标是合成从新颖的相机视点看到的场景的外观。视图合成的经典范例是首先明确地估计潜在的3D几何结构或在输入视图之间建立像素对应关系,然后通过合成来自输入视图的图像块来合成新视图(例如,[4,55,43,6,9])。最近,端到端学习已被应用于通过基于深度或流转换输入来重建新视图,例如,DeepStereo[10]、Deep3D[51]和Appearance Flows[54]。在这些方法中,底层几何体分别由量化深度平面(DeepStereo)、概率视差图(Deep3D)和视图相关流场(外观流)表示。与直接从输入视图映射到目标视图的方法不同(例如,[45]),基于扭曲的方法被迫学习几何和/或对应关系的中间预测。在这项工作中,我们的目标是从训练来执行基于扭曲的视图合成的细胞神经网络中提取这种几何推理能力。

从注册的二维视图学习单视图三维

我们的工作与最近的一系列研究密切相关,这些研究涉及从注册的2D观测中学习单视图3D推断。Garg等人[14]建议学习单视图深度估计CNN,将投影误差应用于校准的立体声孪晶进行监督。同时,Deep3D[51]使用立体电影镜头作为训练数据,从输入图像预测第二立体视点。Godard等人[16]也采取了类似的方法,增加了左右一致性约束,并采用了更好的架构设计,从而获得了令人印象深刻的性能。与我们的方法一样,这些技术只从世界的图像观测中学习,而不像需要明确深度进行训练的方法,例如[20,42,7,27,30]。

这些技术与结构和运动估计的直接方法有一些相似之处[22],其中调整相机参数和场景深度以最小化基于像素的误差函数。然而,基于CNN的方法并没有直接将误差最小化以获得估计,而是只对每一批输入实例采取渐进步骤,这允许网络工作从大量相关信息库中学习隐式先验。几位作者已经探索了在他们的模型中构建可微分的重排序操作,这些模型是以这种方式训练的,例如[19,29,34]。

虽然上述大多数技术(包括我们的技术)主要集中于推断深度图作为场景几何输出,但最近的工作(例如[13,41,46,52])也表明,基于类似的投影几何原理,从2D观测中学习3D体积表示是成功的。Fouhey等人[11]进一步表明,通过利用场景规则性,甚至可以在没有3D标签(或注册的2D视图)的情况下学习3D推理

无监督/自我监督的视频学习

与我们的另一项相关工作是从视频中进行视觉表示学习,其中的总体目标是设计借口任务,用于从视频数据中学习通用视觉特征,这些任务后来可以重新用于其他视觉任务,如对象检测和语义分割。此类借口任务包括自我运动估计[2,24]、跟踪[49]、时间一致性[17]、时间顺序验证[36]和对象运动掩码预测[39]。虽然我们在这项工作中专注于推断明确的场景几何和自我运动,但直观地说,深度网络(尤其是单视图深度CNN)学习的内部表示应该捕捉到某种程度的语义,这些语义也可以通用于其他任务。

在我们工作的同时,Vijayanarasimhan等人[48]独立地提出了一个从视频中联合训练深度、相机运动和场景运动的框架。虽然这两种方法在概念上相似,但我们的方法侧重于无监督方面,而它们的框架增加了结合超视觉(例如,深度、相机运动或场景运动)的能力。在训练过程中,场景动力学的建模方式存在显著差异,在训练中,它们明确地解决了对象运动,而我们的可解释性遮罩不考虑经历运动、聚集和其他因素的区域。

三、方法

在这里,我们提出了一个框架,用于从未标记的视频序列中联合训练单视图深度CNN和相机姿态估计CNN。尽管是联合训练的,但深度模型和姿态估计模型可以在测试时间推断期间独立使用。我们模型的训练示例包括由移动相机拍摄的场景的短图像序列。虽然我们的训练过程在一定程度上对场景运动是稳健的,但我们假设我们感兴趣的场景大多是刚性的,即不同帧之间的场景外观变化由相机运动主导。

3.1.将综合视为监督

我们的深度和姿态预测神经网络的关键监督信号来自新视图合成任务:给定场景的一个输入视图,合成从不同相机姿态看到的场景的新图像。给定图像中的每像素深度,再加上附近视图中的姿势和可见性,我们可以合成目标视图。正如我们接下来将要展示的那样,该合成过程可以以完全可微的方式实现,将细胞神经网络作为几何和姿态估计模块。可见性以及非刚性和其他非建模因素可以通过使用“可解释性”掩码来处理,我们稍后将对此进行讨论(第3.3节)。

让我们表示<I1,In>作为训练图像序列,其中一帧It是目标视图,其余帧是源视图Is(1≤s≤N,s不等于t)。视图合成目标可以公式化为

其中,p在像素坐标上进行索引,Iõs是源视图。基于基于深度图像的渲染模块[8](如第3.2节所述),将源视图扭曲到目标坐标系,采用预先预测的深度Plot Dt,即预测的4×4相机变换矩阵1 T Plot T→s和源代码视图Is作为输入。

请注意,最近还探索了将视图合成作为监督的想法,用于学习单视图深度估计[14,16]和多视图立体[10]。然而,据我们所知,之前的所有工作都需要在训练过程中设置姿势图像集(在DeepStereo的情况下也需要测试),而我们的框架可以应用于没有姿势信息的标准视频。此外,它还将姿势作为学习框架的一部分进行预测。有关深度和姿态估计的学习管道,请参见图2。

图2:基于视图合成的监理管道概述。深度网络仅将目标视图作为输入,并输出每个像素的深度图。姿势网络将目标视图(It)和附近/源视图(例如,It−1和It+1)作为输入,并输出相对相机姿势(Tt→t−1,Tt→t+1)。然后,两个网络的输出用于反向扭曲源视图(见第3.2节),以重建目标视图,光度重建损失用于训练细胞神经网络。通过利用视图合成作为监督,我们能够以无监督的方式从视频中训练整个框架。

3.2.基于不同深度图像的渲染

如等式1所示,我们的学习框架工作的一个关键组件是一个可微分的基于深度图像的渲染器,该渲染器通过基于预测的深度图 Dt 和相对姿态T从源视图Is采样像素来重构目标视图It→s

设pt表示目标视图中像素的齐次坐标,K表示相机内部矩阵。我们可以通过2获得pt在源视图ps上的投影坐标

请注意,投影坐标ps是连续值。为了获得Is(ps)来填充Iõs(pt)的值(见图3),我们使用空间变换器网络[23]中提出的可微双线性采样机制,该机制线性地对ps的4像素邻居(左上、右上、左下和右下)的值进行三次插值,以近似Is(ps。Iõs(pt)=Is(ps)=P I∈{t,b},j∈{l,r}w ij Is(P ij s),其中w ij与ps和P ij之间的空间接近度成线性比例,并且P I,j w ij=1。[54]中使用了类似的策略来学习在不同视图之间直接扭曲,而这里像素扭曲的坐标是通过投影几何获得的,该几何能够对深度和相机姿态进行因子分解。

图3。可微分图像扭曲过程的说明。对于目标视图中的每个点pt,我们首先基于预测的深度和相机姿态将其投影到源视图上,然后使用双线性插值来获得位置pt处扭曲图像I的值。

3.3.模型限制建模

注意,当应用于单眼视频时,上述视图合成公式隐含地假设

1)场景是静态的,没有移动对象;

2) 在目标视图和源视图之间不存在遮挡/不遮挡;

3) 表面是Lambertian的,因此照片一致性误差是有意义的。

如果在训练序列中违反了这些假设中的任何一个,则梯度可能会被破坏,并可能抑制训练。为了提高我们的学习管道对这些因素的鲁棒性,我们还训练了一个可解释性预测网络(与深度和姿态网络联合并同时训练),该网络为每个目标-源对输出每个像素的软掩模Es,这表明该网络相信直接视图合成将成功地为每个目标像素完全建模。基于预测的Es,视图合成目标相应地由

由于我们没有对Es的直接监督,用上述损失进行训练将导致网络的平凡解决方案总是预测Es为零,这完美地将损失最小化。为了解决这个问题,我们添加了正则化项Lreg(Es),该正则化项通过最小化每个像素位置处具有常数标签1的交叉熵损失来鼓励非零预测。

3.4.克服梯度局部性

上述学习流水线的一个剩余问题是,梯度主要从I(pt)和I(ps)的四个邻居之间的像素强度差导出,如果正确的ps(使用地面实况深度和姿态投影)位于低纹理区域或远离当前估计,则这将抑制训练。这是运动估计中众所周知的问题[3]。 根据经验,我们发现两种策略可以有效地解决这个问题:

1)使用卷积编码器-解码器架构,该架构对深度网络有一个小瓶颈,它隐含地限制输出全局平滑,并有助于梯度从有意义的区域传播到附近的区域;

2) 显式的多尺度和平滑度损失(例如,如[14,16]中所述),其允许直接从较大的空间区域导出梯度。

我们在这项工作中采用了第二种策略,因为它对架构选择不太敏感。对于平滑度,我们最小化预测深度图的二阶梯度的L1范数(类似于[48])。

我们的最终目标是

其中,不同图像尺度上的l个索引,源图像上的s个索引,以及λs和λe分别是深度平滑度损失和可解释性正则化的权重。

3.5.网络架构

单视图深度

对于单视图深度预测,我们采用了[35]中提出的DispNet架构,该架构主要基于具有跳过连接和多尺度侧预测的编码器-解码器设计(见图4)。除预测层外,所有conv层之后都是ReLU激活,其中我们使用α=10和β=0.1的1/(α*sigmoid(x)+β)来将预测深度限制在合理范围内始终为正。我们还尝试使用多个视图作为深度网络的输入,但没有发现这能改善结果。这与[47]中的观察结果一致,其中需要强制执行光流约束以有效利用多个视图

图4。我们的深度/姿势/可解释性预测模块的网络架构。每个矩形块的宽度和高度分别指示相应层处的输出通道和特征图的空间维度,并且大小的每次减小/增加指示因子2的变化。(a) 对于单视图深度,我们采用了具有多尺度侧预测的DispNet[35]架构。除前4个conv层外,所有层的内核大小均为3,分别为7、7、5、5。用于第一conv层的输出通道的数量是32。(b) 姿态和可解释性网络共享最初的几个对流层,然后分别分支预测6-DoF相对姿态和多尺度可解释性掩码。第一conv层的输出通道的数量是16,并且除了前两个conv和最后两个去卷积/预测层之外的所有层的内核大小是3,其中我们分别使用7、5、5、7。详见第3.5节。

姿势

姿态估计网络的输入是与所有源视图连接的目标视图(沿着颜色通道),输出是目标视图和每个源视图之间的相对姿态。该网络由7个跨步-2卷积组成,然后是1×1卷积,具有6个*(N−1)输出通道(对应于每个源视图的3个欧拉角和三维平移)。最后,将全局平均池应用于所有空间位置的聚合预测。除了没有应用非线性激活的最后一层之外,所有conv层之后都是ReLU。

可解释性掩码

可解释性预测网络与姿态网络共享前五个特征编码层,然后是具有多尺度侧预处理的5个去卷积层。除了没有非线性激活的预测层之外,所有的对流/去对流层之后都是ReLU。每个预测层的输出通道数为2*(N−1),每两个通道都通过softmax进行归一化,以获得对应源-目标对的解释性预测(归一化后的第二个通道为Eõs,用于计算方程中的损失。3)。

四、实验

在这里,我们评估了我们的系统的性能,并在单视图深度和自我运动估计方面与现有方法进行了比较。我们主要使用KITTI数据集[15]进行基准测试,但也使用Make3D数据集[42]来评估跨数据集的泛化能力。

培训详细信息

我们使用公开可用的TensorFlow[1]框架实现了该系统。对于所有实验,我们设置λs=0.5/l(l是相应尺度的降尺度因子)和λe=0.2。在训练过程中,我们对除输出层外的所有层使用了批处理正态化[21],并使用了Adam[28]优化器,其中β1=0.9,β2=0.999,学习率为0.0002,小批量大小为4。训练通常在大约150K次迭代之后收敛。所有实验都是用单眼相机拍摄的图像序列进行的。在训练过程中,我们将图像大小重新调整为128×416,但在测试时,对于任意大小的图像,深度和姿态网络都可以完全卷积运行。

4.1单视图深度估计

我们在[7]提供的分割上训练我们的系统,并从测试场景中排除所有帧,以及平均光流幅度小于1像素的静态序列进行训练。 我们将图像序列的长度固定为3帧,并将中心帧作为目标视图,将±1帧作为源视图。我们使用两个彩色相机拍摄的图像,但在形成训练序列时独立处理它们。这导致总共44540个序列,其中我们使用40109个用于训练,使用44331个用于验证。

据我们所知,以前不存在以无监督的方式从单眼视频中学习单视图深度估计的系统。尽管如此,我们在这里提供了与先前的深度监督方法[7]和最近使用校准立体图像(即姿势监督)进行训练的方法[14,16]的比较。由于我们的方法预测的深度被定义为一个比例因子,因此为了进行评估,我们将预测的深度图乘以与中值和地面实况相匹配的标量s trl,即s trl=中值(Dgt)/中值(Dpred)。

与[16]类似,我们还试验了首先在较大的Cityscapes数据集[5]上对系统进行预训练(样本预测如图5所示),然后对KITTI进行微调,这会导致性能略有提高。

KITTI

在这里,我们评估了[7]测试分割的697幅图像的单视图深度性能。如表1所示,我们的无监督方法与几种监督方法(如Eigen等人[7]和Garg等人[14])的性能相当,但达不到Godard等人[16]的并行工作,后者使用具有左右循环一致性损失的校准立体图像(即姿势监督)进行训练。对于未来的工作,将类似的周期一致性损失纳入我们的框架是否可以进一步改善结果,这将是一个有趣的问题。图6提供了我们的结果与一些监督基线之间的视觉比较示例,这些比较示例涵盖了各种示例。可以看出,尽管以无监督的方式进行训练,但我们的结果与监督基线的结果相当,有时可以更好地保留深度边界和薄结构,如树木和路灯。

在这里,我们在图7中显示了由我们的初始城市景观模型和最终模型(在城市景观上预训练,然后在KITTI上微调)所做的样本预测。由于两个数据集之间的领域差距,我们的城市景观模型有时很难恢复汽车/灌木丛的完整形状,并将其误认为是远处的物体。

说明

Lambertian

Lambertian表面是指在一个固定的照明分布下从所有的视场方向上观测都具有相同亮度的表面

光学知识(一) - 知乎

作者介绍

Tinghui Zhou

Tinghui Zhou's Homepage

个人理解

公式二的讲解,这个很关键

这篇论文应该算是基于深度图和姿态进行自监督学习的一个鼻祖吧

核心思想就是深度网络出深度图,姿态网络出相机姿态,详细见公式二的讲解,图像左乘相机参数和深度,得到像素点在3D坐标系下的坐标,然后乘姿态(两张图的相对位姿),得到目标图在3D坐标系下的坐标,然后乘相机参数,将目标图的3D坐标转为2D。之后将预测的目标图和真实的目标图做差(损失函数,公式一),训练最终得到可用的深度网络和姿态网络

论文下载地址

https://arxiv.org/pdf/1704.07813.pdf

工程下载地址

GitHub - tinghuiz/SfMLearner: An unsupervised learning framework for depth and ego-motion estimation from monocular videos

参考

【SLAM系列】Unsupervised Learning of Depth and Ego-Motion from Video_^_^ 晅菲的博客-CSDN博客

Unsupervised Learning of Depth and Ego-Motion - 知乎

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

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

相关文章

[openwrt] valgrind定位内存泄漏

目录 要求 valgrind 简介 工具介绍 linux程序的内存布局 内存检查的原理 valgrind的使用 使用举例 内存泄漏 内存越界 内存覆盖 Linux分配虚拟内存(申请内存)的两种方式 brk和mmap 要求 被调试程序带有-g参数编译,携带debug参数…

Ubuntu22.04部署Pytorch2.0深度学习环境

文章目录 安装Anaconda创建新环境安装Pytorch2.0安装VS CodeUbuntu下实时查看GPU状态的方法小实验:Ubuntu、Windows10下GPU训练速度对比 Ubuntu安装完显卡驱动、CUDA和cudnn后,下面部署深度学习环境。 (安装Ubuntu系统、显卡驱动、CUDA和cudn…

10 dubbo源码学习_线程池

1. 线程模型&线程池介绍1.1 线程池1.2 线程模型 2. 线程池源码分析2.1 FixedThreadPool2.2 CachedThreadPool2.3 LimitedThreadPool 3. 线程模型源码3.1 AllDispatcher3.2 DirectDispatcher3.3 MessageOnlyDispatcher3.4 ExecutionDispatcher3.5 ConnectionOrderedDispatch…

这些使用工具大推荐,现在知道不晚

1.Snip Snip是一款截图软件,它突出的优点就是可以制作滚动截图。 例如:对整个网页进行截图,使用Snip即可轻松获取,无需处理水印。 2.Sleep Cycle 快节奏、高压力的生活导致我们越来越晚睡觉,睡眠质量越来越差。 想提…

jsp家庭农场投入品信息管理系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 jsp家庭农场投入品信息管理系统是一套完善的java web信息管理系统 serlvet dao bean 开发,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发…

SQL学习日记

目录 一、数据定义(create,alter,drop) 1.1数据类型 补充注释 1.2定义基本表(create,alter,drop) 1.3约束 1.3.1主键约束 1.3.2外码约束 ​编辑 补充CASCADE 关键字 1.3.3…

深度学习 - 45.MMOE Gate 简单实现 By Keras

目录 一.引言 二.MMoE 模型分析 三.MMoE 逻辑实现 • Input • Expert Output • Gate Output • Weighted Sum • Sigmoid Output • 完整代码 四.总结 一.引言 上一篇文章介绍了 MMoE 借鉴 MoE 的思路,为每一类输出构建一个 Gate 并最终加权多个 Exper…

05 KVM虚拟化Linux Bridge环境部署

文章目录 05 KVM虚拟化Linux Bridge环境部署5.1 安装Linux Bridge5.1.1 安装bridge-utils软件包5.1.2 确认安装是否成功 5.2 配置Linux Bridge5.2.1 创建网桥br05.2.2 将物理网卡ens33绑定到Linux Bridge5.2.3 配置ens33的ip5.2.4 为Linux Bridge网桥br0分配ip5.2.4.1 DHCP设置…

sin(x) + cos(x) 的极大值和极小值

sinx cosx 的极大值和极小值 理论推导图像 今天遇到了一个问题,就是如何求解 sin ⁡ x cos ⁡ x \sin{x} \cos{x} sinxcosx 的极大值和极小值。这里特来记录一下。 理论推导 首先,我们假设: sin ⁡ x cos ⁡ x R sin ⁡ ( x α ) (…

Vue(Vue脚手架)

一、使用Vue脚手架(Vue Cli) Vue官方提供脚手架平台选择最新版本: 可以相加兼容的标准化开发工具(开发平台) 禁止:最新的开发技术版本和比较旧版本的开发平台 Vue CLI🛠️ Vue.js 开发的标准工…

所有知识付费都可以用 ChatGPT 再割一次?

伴随春天一起到来的,还有如雨后春笋般冒出的 ChatGPT / AI 相关的付费社群、课程训练营、知识星球等。 ChatGPT 吹来的这股 AI 热潮,这几个月想必大家多多少少都能感受到。 ▲ 图片来源:网络 这两张图是最近在圈子里看到的。 一张是国内各…

第五章——动态规划3

蒙德里安的梦想 我们在黑框内横着放红框,我们发现当横向小方格摆好之后,纵向小方格只能一次纵向摆好,即纵向小方格只有一种方案,即整个摆放小方格的方案数等于横着摆放小方格的方案数 f[i,j]表示的是现在要在第i列摆,j…

MyBats

一、MyBatis简介 1. MyBatis历史 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github。 iBatis一词来…

Packet Tracer - 研究直连路由

Packet Tracer - 研究直连路由 目标 第 1 部分:研究 IPv4 直连路由 第 2 部分:研究 IPv6 直连路由 拓扑图 背景信息 本活动中的网络已配置。 您将登录路由器并使用 show 命令发现并回答以下有关直连路由的问题。 注:用户 EXEC 密码是 c…

通用智能的瓶颈及可能的解决途径

通用智能是指能够在各种不同的任务和环境中灵活地适应和执行任务的智能。通用智能与特定任务的智能相反,后者只能在特定领域或任务中表现出色。通用智能的理论基础是人工智能领域的通用人工智能(AGI)研究,旨在设计出能够像人类一样…

三分钟看懂Python分支循环规范:if elif for while

人生苦短,我用python 分支与循环 条件是分支与循环中最为核心的点, 解决的问题场景是不同的问题有不同的处理逻辑。 当满足单个或者多个条件或者不满足条件进入分支和循环, 这里也就说明这个对相同问题处理执行逻辑依据具体参数动态变化&…

从0搭建Vue3组件库(四): 如何开发一个组件

本篇文章将介绍如何在组件库中开发一个组件,其中包括 如何本地实时调试组件如何让组件库支持全局引入如何在 setup 语法糖下给组件命名如何开发一个组件 目录结构 在packages目录下新建components和utils两个包,其中components就是我们组件存放的位置,而utils包则是存放一些…

史上最全Maven教程(五)

文章目录 🔥Maven聚合案例_搭建dao模块🔥Maven聚合案例_搭建service模块🔥Maven聚合案例_搭建web模块🔥Maven聚合案例_运行项目🔥依赖传递失效及解决方案 🔥Maven聚合案例_搭建dao模块 dao子工程中一般写实…

055:cesium两种方法加载天地影像图

第055个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中用两种方法加载天地影像图。一种是利用WebMapTileServiceImageryProvider,另一种是利用UrlTemplateImageryProvider. 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方…

面试题30天打卡-day14

1、线程的生命周期是什么,线程有几种状态,什么是上下文切换? 线程通常有五种状态:创建,就绪,运行、阻塞和死亡状态。 新建状态(New):新创建了一个线程对象。就绪状态&am…