论文于祥读及复现——《VDO-SLAM: A Visual Dynamic Object-aware SLAM System》

news2024/12/23 14:47:27

论文详读之------《一个视觉动态对象感知SLAM系统》

  • 0. 出发点(暨摘要)
  • 1.引言
  • 2. 相关工作
    • 2.1 探索针对动态环境的健壮SLAM
    • 2.2 分别执行SLAM和运动对象跟踪(MOT),作为传统SLAM的扩展,用于动态场景理解。
    • 2.3 对象SLAM(通常包括静态和动态对象)
    • 2.4 最近工作
  • 3. 主要内容概括
    • 3.1 预处理
      • 3.1.1 对象实例分割
      • 3.1.2 光流估计
    • 3.2 追踪
      • 3.2.1 模块一
      • 3.2.2 模块二
    • 3.3 建图
      • 3.3.1 局部批量处理
      • 3.3.2 全局批量处理
      • 3.3.3 从建图到跟踪
  • 4. 实验
    • 4.1 深度模型设置
    • 4.2 Oxford Multimotion数据集实验
      • 1.3.png
    • 4.3 KITTI数据集实验
      • 4.3.1 相机位姿和物体运动
      • 4.3.2对象跟踪和速度
      • 4.3.3定性结果
      • 4.3.4讨论
  • 5. 本文总结
  • 6. 个人读后感

论文网址:https://arxiv.org/pdf/2005.11052.pdf
源码网址:https://github.com/halajun/vdo_slam

0. 出发点(暨摘要)

将实时定位和建图(SLAM)估计与动态场景建模相结合,可以极大地促进机器人在动态环境中的自主性。机器人的路径规划和避障任务依赖于对场景中动态物体运动的准确估计。本文介绍了VDO-SLAM,这是一个健壮的视觉动态对象感知SLAM系统,它利用语义信息来实现对场景中动态刚性对象的精确运动估计和跟踪,而无需事先了解对象的形状或几何模型。该方法识别和跟踪环境中的动态对象和静态结构,并将这些信息集成到一个统一的SLAM框架中。最终获得高度精确的估计机器人的轨迹和物体的完整SE(3)运动,以及环境的时空地图。该系统能够从物体的SE(3)运动中提取线速度估计,为复杂动态环境中的导航提供了重要功能。我们在许多真实的室内和室外数据集上展示了所提出的系统的性能,结果显示出与最先进的算法相比,一致性和实质性的改进。源代码的开放源代码版本是可用的。

1.引言

下图1为视觉动态对象感知SLAM系统的框架。

  • Input为输入模块,输入为单目或者是双目的RGB图和深度图。首先立体深度估计都方法提取深度信息。为了充分利用基于图像的语义信息,同时采用了基于学习的单目系统,获得单目相机的深度信息;
  • Pre-processing为预处理模块,主要进行对象实例分割和光流估计;
  • Tracking为追踪模块,主要工作为特征检测、相机位姿估计、动态目标追踪和目标运动估计;
  • Mapping为建图模块,主要进行局部批量优化和全局批量优化
  • Output为最终的输出。

1.1.png
本文的主要贡献为:

  1. 在机器人位姿、静态和动态3D点以及物体运动的统一估计框架中对动态场景建模的新公式;
  2. 准确估计SE(3)动态物体的运动,优于最先进的算法,以及一种提取物体在场景中的速度的方法;
  3. 一种鲁棒的方法来跟踪运动对象利用语义信息与处理间接遮挡的能力,导致语义对象分割失败;
  4. 在复杂和引人注目的现实世界场景中演示完整系统。

2. 相关工作

目前,在不同的研究目的下,对于动态场景下的SLAM的研究主要分为以下3类

2.1 探索针对动态环境的健壮SLAM

时期方法结果
早期检测和删除动态场景中提取到的信息降低SLAM性能
发展移除动态前景+修复获重建被遮挡的静态场景
DynaSLAM经典几何+深度学习——>检测和移除动态对象多视角信息——>修复被遮挡的背景
Light Field SLAM通过合成孔径成像(SAI)重建被遮挡的静态场景对重建的静态背景上的特征也进行了跟踪与利用较好的SLAM性能

所有的方法几乎都是将动态信息丢弃,但是这些被丢弃的信息对SLAM也许会有潜在的好处;
除了SLAM之外,理解动态信息对机器人的其他任务(如:规划、控制和避障)也至关重要

2.2 分别执行SLAM和运动对象跟踪(MOT),作为传统SLAM的扩展,用于动态场景理解。

时期方法结果
最新将估计问题分解为两个独立的估计器以便实时更新两个滤波器并行解决运动中的结构和运动物体的跟踪问题系统输出统一包含静态结构和运行物体轨迹的的三维动态地图解决了动态物体的SLAM物体
随后整合语义约束进一步赶紧3D重建
最近基于立体的密集映射算法具有大规模动态环境中,准确高效地重建静态背景和运动物体的优势

证明了将多目标跟踪与SLAM相结合的可行性,适用于动态场景的探索。
通过适当的开发和建立机器人与静态背景、静态和动态物体之间的时空关系。证明了SLAM和多目标跟踪问题是相互有益的。

2.3 对象SLAM(通常包括静态和动态对象)

这种算法通常需要对三维物体进行特定的建模和表示,有三维形状、曲面或体积模型、几何模型等,提取高级原语并整合到SLAM框架中。

类型方法效果
SLAM++该范式在物体表层表示杂乱的场景在相机和物体姿态之间构建显示图实现联合姿态图优化
密集SLAM的同时重建、分割和识别提出一种新颖的3D物体识别算法保证系统的鲁棒性提高估计物体姿态的准确性
MaskFusion采用表面表示对场景中的物体进行建模和重建无需预先了解对象模型
MID-Fusion采用基于八叉树的体积模型
构建多目标动态SLAM系统无需预先了解对象模型

2.4 最近工作

类型方法效果
最近使用基本集合来表示对象复杂度低、易于集成到SLAM框架中
Quadric-SLAM紧凑参数化物体的大小和三维姿态将检测到的物体表示为椭球体将二次参数直接约束为几何误差并与相机位姿一起在因子图SLAM中进行联合估计
CubeSLAM将二维和三维目标检测与SLAM相结合多视图捆绑调整与点和相机一起优化

仍然存在的问题:
以上方法都能证明被检测对象和SLAM之间的利用关系,但是主要关注的都是静态场景下的对象检测和SLAM,本文沿着这一方向,在SLAM框架内解决动态目标跟踪的挑战性问题,并利用动态目标与智能机器人、静态和动态结构之间的关系来获得潜在的优势。

3. 主要内容概括

对于论文还没有进行公式推理,所以此处先进行的系统分析。
这篇论文建立的SLAM系统可以稳健的估计相机和物体的运动以及环境的静态和动态结构。主要由预处理、跟踪、建图三部分组成。
为了充分利用基于图像的语义信息,采用了基于学习的单目系统。将单目或者双目的RGB图像和深度图像。

3.1 预处理

此模块的主要分为两部分:

  1. 鲁棒的分离静态背景和目标
  2. 保证对动态目标的长期追踪

方法:实例语义分割+光流估计

3.1.1 对象实例分割

  • 用于分割潜在的可移动对象;
  • 利用语义信息进行先验;
  • 有助于进一步将语义前景划分为不用的实例掩码,使得跟踪单独的对象变得更加容易;
  • 掩码提供了精确的对象体边界,确保了对对象上的点进行鲁棒跟踪。

3.1.2 光流估计

使用的是稠密光流

  • 用于最大化运动物体上被跟踪点的数量;
  • 通过语义掩码内的所有点进行采样,大大增加了目标点的数量;
  • 通过产生分配给对象掩模上的每个点的唯一对象标识符来一致地跟踪多个对象;
  • 如果语义分割失败,它允许恢复对象掩码;这是一项使用稀疏特征匹配极其困难的任务。

3.2 追踪

包含两个模块:
模块一:特征检测+相机位姿估计
模块二:动态目标追踪+目标运动估计

3.2.1 模块一

  1. 特征检测
  1. 检测一组稀疏的焦点特征,利用光流跟踪它们。
  2. 每一帧中,只有与估计的相机运动相匹配的内层特征点被保存到地图中,并用于跟踪下一帧中的对应点。
  3. 如果内部轨迹的数量低于一定水平(默认为1200),则检测和添加新的特征。
  4. 这些稀疏特征是在静态背景上检测的,即不包括被分割对象的图像区域。
  1. 相机位姿估计
  1. 计算所有检测到的3D-2D静态点对应的相机位姿。
  2. 生成两个模型,并基于重投影误差比较内点数 通过相机之前的运动产生
  3. 通过使用RANSAC和P3P算法进行新的运动变换生成
  4. 选择生成的大多数内点的运动模型进行初始化

3.2.2 模块二

  1. 动态目标跟踪

第一步,从背景中分离对象
(虽然该算法可以估计所有分割对象的运动,但动态对象识别有助于减少所提出的系统的计算成本)
获取相机位姿–>描述场景流(理想情况下应该为0)

  1. 计算每个物体上所有采样点的场景流大小
  2. 当某点场景流>阈值时,则认为该点事动态的
  3. 当动态点的比例>总点的30%时,则认为该对象为动态物体,否则静态

第二步,只提供单个图像对象标签的实例级对象分割

运动模型随着时间推移而逐渐推进,所以需要跨帧进行对象追踪。
这里采用光流来关联跨帧的点标签。
点标签与点被采样的唯一对象标识符相同。
理想情况下,对于第k帧中检测到的每个物体与k-1帧中它们对应的标签唯一对齐。
实际实践中,受到噪声、图像边界和遮挡的影响。
解决:给所有的点分配标签 前一帧出现最多的标签是0,意味着该对象即将移动。 在边界处出现、从这当中重新出现,会被重新分配一个新的跟踪标签。

  1. 目标运动估计

目标通常以小块的形式出现在场景中,使得很难获得足够的稀疏特征来鲁棒的跟踪和估计其运动。
方法:

  • 在一个对象掩码内,每隔三个点进行采样,并跨帧跟踪
  • 内点被保存到地图,用于下一帧的跟踪
  • 当跟踪到的目标点数量下降到一定水平时,会采样并添加新的目标点。

3.3 建图

构建并维护一个全局地图,同事从全局地图提取一个局部地图。

3.3.1 局部批量处理

  • 维护和更新局部地图 局部批量优化目标是确保精确地相机位姿估计提供全局批量优化。
  • 相机位姿估计对物体运动的准确性和算法的整体性有很大影响。
  • 局部地图使用包含最后n帧信息的固定大小的滑动窗口来构建。
  • 仅在窗口大小内局部优化相机位姿和静态结构。
  • 执行因子优化图来细化局部地图内所有变量
  • 最后,更新到全局地图

3.3.2 全局批量处理

  • 由跟踪和局部批量优化的输出(相机位姿、物体运动和内部结构)组成。
  • 随着每一帧的更新不断更新
  • 所有输入真被处理后,给予全局地图构建因子图。
  • 有效地探索时间约束,只将被跟踪超过3个实例的点添加到因子图中
  • 优化结果为整个系统的输出

3.3.3 从建图到跟踪

  • 利用上一帧的内点来跟踪当前帧的对应关系,并估计相机位姿和物体运动。
  • 最后的相机位姿和物体运动也可以作为初始化当前估计的可能的先验模型
  • 语义对象分割失败导致“间接遮挡”的情况下,目标点通过其先前分割的掩码,帮助跨帧关联语义掩码,以确保对目标的鲁棒跟踪。

4. 实验

从相机运动、物体运动和速度以及物体跟踪性能等方面对VDO-SLAM进行了评估。对室内场景的Oxford Multimotion数据集和室外场景的KITTI Tracking数据集进行了评估,并与其他最先进的方法(包括MVO、ClusterVO、DynaSLAM II和CubeSLAM)进行了比较。由于系统运行的不确定性,例如RANSAC处理,将每个序列运行5次,并将中值作为演示结果。所有结果都是通过在默认参数设置下运行所提出的系统得到的。开放源代码实现包括演示YAML文件和在两个数据集中运行系统的指令。

4.1 深度模型设置

  • 对于实例分割,使用Mask-RCNN生成对象的分割掩码。实在COCO数据集上训练得到,没有进行任何微调。
  • 对于稠密光流,使用PWC-Net,在FlyingChairs数据集上训练,在Sintel和KITTI数据集上微调。
  • 特征检测,使用FAST完成
  • 单目深度估计,MonoDepth实在深度特征分裂上进行训练的

4.2 Oxford Multimotion数据集实验

与MVO相比,本文提出的方法在相机位姿估计和摆动box和左下方面效果比较好。
与ClusterVO相比,本文在相机位姿估计和右下旋转框的平移方面的性能略差。
本文在估计物体方面比ClusterVO实现了两倍以上的改进。
1.2.png
下图是本文算法在Oxford Multimotion数据集上的轨迹输出结果。摆动盒子上的动态特征轨迹在视觉上与盒子的实际运动相对应。
(左) 相机的3D轨迹(红色)和四个方框的中心。(右)静态背景和物体体上的检测点。黑色对应于静态点,每个物体上的特征以不同的颜色显示。

1.3.png

4.3 KITTI数据集实验

4.3.1 相机位姿和物体运动

下表中展示了9个序列的相机位姿和运动结果的估计。与DynaSLAM II和CubeSLAM在KITTI数据集中提取的九个运动物体序列上的相机姿态和物体运动估计精度的比较。加粗的数字表示更好的结果。
与DynaSLAM II相比,本文在相机位姿估计方面具有竞争力和较高的精确度,旋转误差略低,平移误差较高
与CubeSLAM相比,本文的RGB-D在相机位姿上的误差更低一些,单目的略高,此处认为是因为单目输入无法准确捕捉深度尺度。
单目和RGB-D在目标运动估计中都有持续较低的误差。
1.4.png
CubeSLAM的平移和旋转误差都在3米和3度以上,极端情况下误差分别达到32米和5度。然而,在RGB-D情下,我们的平移误差在0.1-0. 3米之间,旋转误差在0.2-1.5度之间,在基于学习的单目情况下,我们的平移误差在0.1-0.3米之间,旋转误差在0.4-3. 1度之间,这表明我们的目标运动估计在大多数情况下都实现了数量级的提高。
色条表示在对数尺度上对应于左y轴的平移误差。圆圈表示旋转误差,对应于线性尺度的右y轴。
1.5.png
结果表明,基于点的物体运动/位姿估计方法比使用高级几何模型的方法更鲁棒和准确,这可能是因为几何模型提取可能导致信息丢失并引入更多的不确定性。

4.3.2对象跟踪和速度

下图展示了所有测试序列中一些选定对象(跟踪超过 20帧)的对象跟踪长度和对象速度的结果。本文的系统能够跟踪序列中80%以上出现的大多数物体。此外,本文估计的物体速度总是始终接近于地面真实值。
由于空间有限,部分选定目标(跟踪了 20帧以上)的目标跟踪长度和目标速度的结果。颜色条表示对象轨迹的长度,对应于左y轴。圆圈表示物体的速度,对应于右y轴。GT表示真值,EST.表示估计值。
1.6.png

4.3.3定性结果

下图显示了本文系统对三个KITTI序列的输出。所提出的系统能够在时空地图表示中输出相机姿态,以及场景中每个检测到的移动对象的静态结构和动态轨迹。
带有相机姿态、静态背景结构和动态物体轨迹的动态地图。KITTI序列的VDO-SLAM样本结果。黑色代表静态背景,每个检测到的物体都以不同的颜色显示。左上图代表Seq.01和序列末尾交叉口的放大图,右上图代表Seq.06,右下图代表Seq.03。
1.7.png

4.3.4讨论

定义了旋转,平移的误差项,还有速度的计算方法,这里主要是讨论了作者这么设计这个系统的一些好处:

联合光流的优化使得更多的点能被连续追踪,这就使得通过这些点求出来值的精度能有小幅提升(15%~20%)。
增强了对非直接遮挡情况的鲁棒性:对于语义分割,他可能会在发生直接遮挡以及非直接遮挡(光照变化)时失效, 在非直接遮挡的情况下,把之前的语义mask传播到当前帧可以解决这个问题。下面用图来举一个具体例子:
序列一共有88帧,要追踪其中的白色车子,从第33帧开始,语义分割失效,但是追踪仍然可以进行。可以看到序列的后半段平均误差较大,这是因为此时有局部的直接遮挡(有车子局部是看不到的),以及物体离相机太远。
image.png
右下角白车上的点是把之前追踪的特征点传播到了当前帧
对物体运动的全局精确化:从下面的图可以看出来,速度估计是不平滑的,而且在后半段有很大的误差,这主要是因为物体距离相机越来越远,只在整个场景中占据了一小部分。这时,如果只靠传感器的测量值来做运动估计是很困难的,所以就使用了前面的因子图优化,可以看到结果更加平滑且提升明显。
image.png

实时性:帧率在5-8帧,会受到场景中移动物体的数目的影响。全局优化的耗时受相机帧总数,每帧移动物体数目的影响
image.png

5. 本文总结

在本文中,提出了VDO-SLAM,这是一种新的基于动态特征的SLAM系统,它利用场景中基于图像的语义信息,而不需要额外的物体姿态或几何知识,来实现动态物体的同步定位、建图和跟踪。该系统在室内和具有挑战性的室外数据集上始终显示出鲁棒和准确的结果, 并在对象运动估计方面取得了最先进的性能。在对象运动估计中实现的高性能精度是由于系统是一个基于特征的系统。在SLAM系统中,特征点仍然是最容易检测、跟踪和集成的,并且不需要前端对对象模型有额外的了解,也不需要明确地提供有关其姿态的任何信息。
一个重要问题是具有动态对象的SLAM的计算复杂度需要减少。在长期应用中,可以应用不同的技术来限制图的增长。

6. 个人读后感

本文的系统分别在室内和室外进行了实验,并进行了评估讨论。在需要深度信息时,RGB-D相机要比单目效果好一些。针对动态场景中特征点的检测和追踪的处理相较之前的方法是一个较新的点;并针对观测到的动态物体有一个速度上的估计。总体来说收获颇多。

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

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

相关文章

2023年高校大数据实验室建设方案

大数据实验室建设方案具体内容包括:人才培养方案建设、课程资源建设、师资建设、实验室建设、教学服务建设。 泰迪打造国内领先的大数据人工智能及课程资源,包括:商务数据分析实训管理平台、云计算资源管理平台、大数据编程实训平台、商务数据…

linux入门---用匿名管道实现一个功能

前言 在之前的学习中我们知道通信的概念和匿名管道的使用,那么接下来我们就要用匿名管道来实现一个功能,首先我们有很多的函数需要被执行,然后创建一些子进程通过匿名管道方式给子进程传递一些信息,然后子进程就根据这些信息来确…

Linux安装免费Https证书,过期自动更新 省钱秘籍

Linux安装免费Https证书,过期自动更新 acme.sh这个服务可以友好地帮助我们获取免费的证书以及过期实现自动更新操作 官方网站:https://github.com/acmesh-official/acme.sh 介绍 嗨!今天我要和大家聊聊关于使用acme.sh和Nginx结合生成HTT…

基于SpringBoot的招聘信息管理系统

基于SpringBootVue的招聘信息管理系统【附源码文档】、前后端分离 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/Ecilpse、Navicat、Maven 【主要功能】 角色:管理员、用户、…

运营商大数据可以帮助企业实现什么目标?

虽然现在有很多合法合规的运营商大数据,那么合法合规的运营商大数据可以实现什么目标? 1、对用户进行相应研究的目标 如果是合法合规的运营商大数据那么这种情况下,对于用户就能够进行相应的研究了。在这个过程中可以直接对产品的优化进行相…

【博客笔记+java+测试】

一、项目背景 1.个人博客采用前后端分离的方法来实现,同时使用数据库存储相关的数据,将其部署在云服务器上。前端主要分为五个页面:注册页、登录页、列表页、详情页和编辑页,以上模块实现了最简单的个人博客系统。其结合后端实现了…

读高性能MySQL(第4版)笔记05_优化服务器设置

1. 除非遇到异常情况,否则不需要调整配置 1.1. 不要“调优”服务器,不要使用比率、公式或“调优脚本”作为设置配置变量的基础 1.1.1. 在互联网上搜索配置建议并不总是一个好主意,你会在博客、论坛等找到很多糟糕的建议 1.1.2. 很难判断谁…

【高阶数据结构】红黑树 {概念及性质;红黑树的结构;带头结点的红黑树;红黑树的实现;红黑树插入操作详细解释;红黑树的验证}

红黑树 一、红黑树的概念 红黑树(Red Black Tree) 是一种自平衡二叉查找树,在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有…

Python算法练习 9.11

leetcode 392 判断子序列 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcd…

波奇学C++:多态知识点

多态中函数的重写&#xff08;基类指针访问派生类函数&#xff09;&#xff0c;只重写函数的实现&#xff0c;而不重写声明。 class Person { public:virtual void fun(int i 0){cout << "Person"<<" "<<i;} }; class Student:public …

H5页面safari浏览器底部遮挡问题解决方案亲测有效

media screen and (max-width: 767px) { _::-webkit-full-page-media, _:future, :root .safari_only { padding-bottom: 120px; //解决Safari浏览器底部遮挡问题 } } 然后给对应div加上这个类名就可以了

本地录像视频文件如何推送到视频监控平台EasyCVR进行AI视频智能分析?

安防监控平台EasyCVR支持多协议、多类型设备接入&#xff0c;可以实现多现场的前端摄像头等设备统一集中接入与视频汇聚管理&#xff0c;并能进行视频高清监控、录像、云存储与磁盘阵列存储、检索与回放、级联共享等视频功能。视频汇聚平台既具备传统安防监控、视频监控的视频能…

ESP32开发:Clion配置IDF

IDF环境搭建 使用安装包安装IDF 可以通过安装包进行安装&#xff0c;如下图&#xff1a; 下载链接如下&#xff1a;https://dl.espressif.cn/dl/esp-idf/?idf4.4 安装好后&#xff0c;IDF会添加环境变量IDF_TOOLS_PATH&#xff0c;如果要安装多个IDF&#xff0c;为了防止冲…

Java笔记:ThreadLocal

1. ThreadLocal简介 多线程访问同一个共享变量的时候容易出现并发问题&#xff0c;特别是多个线程对一个变量进行写入的时候&#xff0c;为了保证线程安全&#xff0c;一般使用者在访问共享变量的时候需要进行额外的同步措施才能保证线程安全性。ThreadLocal是除了加锁这种同步…

031:vue子组件向父组件传递多个参数,父组件2种解析方法

第031个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

6个超好用的视频素材网站,4K/8K高质量,免费下载。

很多视频剪辑和做自媒体的朋友都不知道去哪里找视频素材&#xff0c;而且很多网站的素材可以免费下载但是不能商用&#xff0c;还有需要付费购买使用。下面推荐几个良心网站&#xff0c;视频素材免费下载&#xff0c;还能商用&#xff0c;赶紧收藏起来吧。 1、菜鸟图库 https:…

基于Python和mysql开发的在线音乐网站系统(源码+数据库+程序配置说明书+程序使用说明书)

一、项目简介 本项目是一套基于Python和mysql开发的在线音乐网站系统(&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经…

qt 正则表达式

以上是正则表达式的格式说明 以下是自己写的正则表达式 22-25行 是一种设置正则表达式的方式&#xff0c; 29-34行 : 29行 new一个正则表达式的过滤器对象 30行 正则表达式 的过滤格式 这个格式是0-321的任意数字都可以输入 31行 将过滤格式保存到过滤器对象里面 32行 将验…

VSCode搭建Django开发环境

文章目录 一、Django二、搭建步骤1. 安装python和VSCode&#xff0c;安装插件2. VSCode打开项目文件夹3. 终端中键入命令&#xff1a;建立虚拟环境4. 选择Python的解释器路径为虚拟环境5. 在虚拟环境中安装Django6.创建Django项目7. 创建app应用8. 运行应用9. 修改配置中文显示…

JVM 虚拟机 ----> Java 类加载机制

文章目录 JVM 虚拟机 ----> Java 类加载机制一、概述二、类的生命周期1、类加载过程&#xff08;Loading&#xff09;&#xff08;1&#xff09;加载&#xff08;2&#xff09;验证&#xff08;3&#xff09;准备&#xff08;4&#xff09;解析&#xff08;5&#xff09;初始…