【占用网络】OccNet: Scene as Occupancy 适用于检测、分割和规划任务 ICCV2023

前言

本文分享“占用网络”方案中,具有代表性的方法:OccNet。

它以多视角相机为核心,首先生成BEV特征,然后通过级联结构时间体素解码器重建生成3D占用特征

构建一个通用的“3D占用编码特征”,用以表示3D物理世界。这样的特征描述可以应用于广泛的自动驾驶任务,包括检测、分割和规划。

论文地址:Scene as Occupancy

开源地址:https://github.com/OpenDriveLab/OccNet

一、框架思路

OccNet输入多视角图像数据,类似BEVFormer思想,首先通过Deformable Attention融合多视角相机空间特征时序特征,生成BEV特征。

然后通过级联-体素编码器,逐步生成Voxel特征;最后供BEV分割、3D目标检测、运动规划等任务使用。

OccNet的思路流程如下图所示,

  1. 输入多视角图像数据,比如6张环视图像。经过主干网络提取图形特征,得到多视角图像特征。
  2. 通过BEV Queries,查询先前时序的BEV特征,融合对应的特征。再融合图像的空间特征。融合了时间和空间特征的BEV Queries,也就是BEV特征。
  3. BEV特征经过前馈网络,生成初步的Voxel特征,也就是体素特征。
  4. 通过t时刻的Voxel特征,和t-1时刻的Voxel特征,做注意力操作,融合时序特征。
  5. 获取多视角特征和Voxel特征,做注意力操作,融合图形空间特征。
  6. Voxel特征生成的过程分为多步,逐步生成最终的占用特征。
  7. 占用特征用于各种驾驶任务。

OccNet从BEV特征(HxWxC)Voxel特征(ZxHxWxC)的重建,分为 N 步。命名为 cascade structure,表示级联结构。

这里H和W是BEV 空间的二维空间形状、C是特征维度,Z是体素空间的期望高度。

在输入的BEV特征和期望的体素特征之间,成为不同高度的“中间体素特征”,表示为:V^{'}_{t,i}\in R^{Z_{i}\times H\times W\times C_{i}}

  • Z_{i}分布在{1, N}之间
  • C_{i}分布在{C_{BEV}, C_{Voexl}}之间

BEV特征通过前馈网络转为Voxel特征,即:B_{t-1}通过前馈网络被提升V^{'}_{t-1,i}B_{t}通过前馈网络被提升V^{'}_{t,i}

然后得到的Voxel特征,结合多视图特征,做空间交叉注意力,融合图像特征

通过获取先前的Voxel特征,通过时间自注意力,融合时序Voxel特征

此时融合图像特征和时序Voxel特征,得到进一步的Voxel特征V^{''}_{t,i}

接着逐步融合,共执行N步,得到最终的Voxel特征,表示占用网络的特征。

二、关键设计——生成BEV特征

OccNet输入是多视角图形数据,在生成BEV特征中,类似BEVFormer思想,通过Deformable Attention融合多视角相机空间特征时序特征

主要由3个关键模块组成:

  • BEV Queries Q:用于查询得到BEV特征图
  • Spatial Cross-Attention:用于融合多视角空间特征
  • Temporal Self-Attention:用于融合时序BEV特征

基本思想:使用可学习的查询Queries表示BEV特征查找图像中的空间特征先前BEV地图中的时间特征

采用3D到2D的方式,先在BEV空间初始化特征,通过在BEV高度维度“升维”形成3D特征。再通过映射关系,使用多层transformer与每个图像2D特征进行交互融合,最终再得到BEV特征。

2.1 BEV Queries 查询得到BEV特征图

 BEV平面(Bird's-Eye View,鸟瞰视图)是一个以车辆自身为中心的,被划分成许多小方格的二维平面

这个平面的高度H和宽度W代表了:在x轴(横向)和y轴(纵向)上的栅格数量。

BEV平面直观地反映了车辆周围的物理空间,其中每个小方格代表现实世界中的一定面积,例如s米。

比如针对nuScenes数据集,可能会定义BEV平面的栅格尺寸为200x200,这意味着这个平面可以覆盖从车辆中心向各个方向延伸51.2米的区域。在这种情况下,每个小方格(栅格)代表的实际面积是0.512米。

关键要的:

1、BEV Queries是一组预先定义的、具有栅格形状的可学习参数, 维度是H*W*C,用来捕获围绕自车的BEV特征。

简单来说,一旦学习完成,BEV Queries就会变成BEV features,即鸟瞰视图特征。

2、BEV Queries的高度H和宽度W,与BEV平面在x轴(横向)和y轴(纵向)的栅格尺寸保持一致,这意味着它们也具有与BEV平面类似的特性,即直观地映射车辆周围的物理空间。

然而,BEV Queries的C维,即在通道(channel)维度上的尺寸,并不直接对应于BEV平面z轴的物理空间尺寸。

3、每个位于(x, y)位置的query都仅负责表征其对应的小范围区域。轮番查询“空间信息”和“时间信息”,生成BEV特征图。

重点:BEV Queries在模型中经过连续的微调和转换,最终成为BEV features。

2.2 融合多视角空间特征

 通过BEV Queries查询和融合空间信息,BEV Queries表示整幅栅格图,BEV Query表示其中一个网格,步骤如下:

  1. 将每个BEV Query拉升为一个支柱。在z方向进行lift操作,预测该网格的离散高度形成N个高度值预定义它们对应的高度范围是-5m到3m。结合该网格的x,y坐标,生成N个3D参考点。
  2. 通过相机内外参,将柱子中的3D参考点投影到视图中得到2D点,数量记为V_num。正常一个3D参考点,对应1~2幅多视图,毕竟不能所有相机都看到同一个物体。
  3. 从命中视图中的区域中采样特征。采用Deformable Attention,把像平面上的这些投影点作为2D图像参考点在其周围进行特征采样
  4. 最后,每个3D参考点有V_num个特征图,进行加权求和。每个网格有N个3D参考点,形成的特征图,进行加权求和,最终输出多视角空间特征。

如下图所示,一个3D参考点(x, y, z),投影到多视角图中,只有2幅是对应的。这样很正常,毕竟相机是四周安装的,不可能所有相机都看到同一个物体。

2.3 融合时序BEV特征

 受到经典的循环神经网络(RNN)的启发,BEV特征 B _{t}可以被视作一种能够传递序列信息的“记忆体”。

在这种框架下,每一个时刻生成的BEV特征B_{t} 都是基于上一时刻的BEV特征 B_{t-1}获取所需的时序信息

  • 这种方法的优势在于,它能够动态地获取所需的时序特征,而不是像简单地堆叠不同时刻的BEV特征那样,仅能获取固定长度的时序信息。
  • 这种动态获取时序特征的方式使得BEV特征能够更加有效地反映出环境的动态变化,比如车辆的移动或周围环境的变化。

融合时序BEV特征,通过BEV Queries 查询时间信息,步骤如下:

  1. 根据自我运动对齐两个时刻的BEV图。两个时刻是指上一时刻和当前时刻。目前是使得相同索引位置的栅格对应于现实世界中的同一位置
  2. 过去时刻BEV图的和当前采样特征
  3. 对过去和当前BEV图中采样的特征进行加权求和。
  4. 使用RNN风格迭代收集历史BEV图特征。

 思路流程:

  • 在给定时间点t-1的BEV特征B_{t-1}的情况下,首先需要根据自我运动(ego motion)将B_{t-1}对齐到时间点t
  • 这个对齐过程确保了B_{t-1}B_{t} 在相同索引位置的栅格对应于现实世界中的同一位置。这样对齐后的BEV特征记作 {B_{t-1}}^{'}
  • 在时间点t,位于网格中A处的BEV query所代表的物体可能是静态的(不动的)或者是动态的(在移动中)。
  • 这个物体在时间点t-1会出现在{B_{t-1}}^{'}的 A周围。因此,为了采集特征,使用可变形注意力机制(deformable attention)以 A为参考点,在其周围进行特征采样

通过这种方式,模型能够更加准确地捕捉到物体随时间的动态变化。

可变形注意力允许模型关注于相邻时刻在空间上对应但位置可能略有变化的特征,从而有效地捕捉动态物体的运动轨迹和静态物体的稳定性。

这种方法在处理时序数据时,特别是在动态和复杂的环境中,如自动驾驶场景下,显得尤为重要和有效。

2.4 BEV特征

通过BEV Queries,查询先前时序的BEV特征,融合对应的时间特征。再融合图像的空间特征。

融合了时间和空间特征的BEV Queries,也就是BEV特征。

BEV特征的维度是:HxWxC。

三、关键设计——BEV特征转为Voxel特征

输入多视角图像数据,经过主干网络提取图形特征,得到多视角图像特征。

通过BEV Queries,融合了时间和空间特征的BEV Queries,得到BEV特征(HxWxC)。

需要通过前馈网络进行升维,提升多一个Z高度信息,即:

BEV特征(HxWxC)转为 Voxel特征(ZxHxWxC)

这里H和W是BEV 空间的二维空间形状、C是特征维度,Z是体素空间的期望高度。

四、核心内容——逐步生成Voxel特征

上面得到Voxel特征只是初步的,由BEV特征升维得到的,不够精细,需要进一步提升Z高度信息,缩小C特征维度;

形成最终的Voxel特征,表示占用网络的特征,

OccNet从BEV特征(HxWxC)Voxel特征(ZxHxWxC)的重建,分为 N 步。命名为 cascade structure,表示级联结构。

这里H和W是BEV 空间的二维空间形状、C是特征维度,Z是体素空间的期望高度。

在输入的BEV特征和期望的体素特征之间,成为不同高度的“中间体素特征”,表示为:V^{'}_{t,i}\in R^{Z_{i}\times H\times W\times C_{i}}

  • Z_{i}分布在{1, N}之间
  • C_{i}分布在{C_{BEV}, C_{Voexl}}之间

BEV特征通过前馈网络转为Voxel特征,即:B_{t-1}通过前馈网络被提升V^{'}_{t-1,i}B_{t}通过前馈网络被提升V^{'}_{t,i}

然后得到的Voxel特征,结合多视图特征,做空间交叉注意力,融合图像特征

通过获取先前的Voxel特征,通过时间自注意力,融合时序Voxel特征

此时融合图像特征和时序Voxel特征,得到进一步的Voxel特征V^{''}_{t,i}

接着逐步融合,共执行N步,得到最终的Voxel特征,表示占用网络的特征。

这里过程中用到了3D Deformable Att.  即:3D可变形注意力(3D-DA)

3D Deformable Attention (3D-DA) 是一种为处理三维数据设计的注意力机制,它源于2D可变形注意力(deformable attention)的原理。

这个方法将传统的2D可变形注意力扩展到了3D形式。可变形注意力是一种自注意力机制,它允许网络学习在计算注意力时应关注的关键点位置的偏移。

扩展自传统的2D注意力机制:2D可变形注意力是设计用于处理二维数据(如图像),允许模型在计算注意力时学习到的偏移量集中在关键特征上。3D-DA将这种机制扩展到三维空间,以处理具有深度的数据(如体积医疗图像或三维环境扫描数据)。

可变形部分:“可变形”指的是模型不仅学习特征的重要性(即注意力权重),还学习在原始参照点周围的特定偏移量,这些偏移量可以使模型更准确地聚焦于有信息的区域,这与固定的、规则的采样网格不同。

由于太多公式符号了,这里一个截图,便于大家理解:

五、OccNet的实现细节

主干网络(Backbone)、多尺度特征(Multi-scale Features)

  • ResNet101:OccNet使用的基础网络是ResNet101,这是一个有101层的深度卷积神经网络,广泛用于图像任务。
  • 特征金字塔网络(FPN):OccNet利用FPN来提取多尺度特征,这意味着网络能够在不同的分辨率上捕捉图像信息。
  • 输出特征:从ResNet101的不同阶段(S3、S4、S5)提取特征,每个阶段的输出特征具有不同的下采样率。在FPN中,这些特征被聚合并转换成三个尺度的层级,大小分别是原图的1/16、1/32和1/64,特征维度保持为256。

BEV编码器

  • BEV特征:FPN的多尺度特征被转换成BEV特征。BEV(鸟瞰图)特征是对车辆周围环境的二维顶视图表示,用于自动驾驶中的环境感知和决策。
  • 编码层:BEV编码器具有两层,使用时间自注意力和空间交叉注意力。这种结构允许网络注意到不同时间步长的特征,并跨越空间位置关联信息。
  • BEV查询(BEV Query ):通过空间-时间变换机制在编码层中逐步细化,以在BEV空间中学习场景表示。

体素解码器的特征转换

  • 体素特征:使用多层感知机(MLP)将体素特征Vi,t从Zi x Ci维度,转换为Zi+1 x Ci+1维度。
  • 空间交叉注意力:用于体素特征的空间交叉注意力机制,使网络能够关注不同空间区域的特征。

训练策略:

  • 周期和学习率:OccNet训练了24个周期(epochs),学习率设为2 x 10^-4,这是在训练过程中用于更新网络权重的步长。
  • 优化器:使用带有权重衰减的AdamW优化器,这种优化器结合了Adam优化算法和权重衰减,有助于控制模型的过拟合。
  • 任务训练:所有感知任务(除了BEV分割)同时训练,其他任务基于已经训练的任务进行微调,这是一种常见的多任务学习策略。

与VoxelNet和BEVNet对比:

  • OccNet与VoxelNet和BEVNet不同,它使用级联特征图,而后两者使用单尺度特征图。
  • VoxelNet使用体素查询来构造体素特征图,然后直接使用3D-DA扩展到完整的占用空间。
  • BEVNet生成BEV特征,然后扩展到完整的占用空间。
  • VoxelNet和BEVNet都采用了时间上下文融合,OccNet也采用了融合了时序信息。

评价指标:

OccNet生成的占用特征,用到了BEV分割、3D目标检测、运动规划等任务。

语义场景完成(SSC)指标

  • 这个指标是专为3D空间中的场景完成任务设计的,任务的目标是为每个体素(一个3D空间的最小单元)分配正确的语义标签。
  • mIoU计算公式:这个指标是通过计算所有类别的平均交并比(mean intersection-over-union, mIoU)得出的。公式中,mIoU等于所有类别的交并比的平均值。公式如下: 其中,C是类别的数量,在这个上下文中是16。TPc​、FPc​ 和 FNc​ 分别代表对于第 c 类别的真阳性、假阳性和假阴性的数量。
  • 类别不可知的几何重建质量指标 IoU_geo:为了评估场景的几何重建质量,作者还考虑了一个与类别无关的指标,即 IoU_geo。

3D物体检测指标

  • 这些是nuScenes数据集专用的官方评估指标,用于评估3D检测算法的性能。这些指标包括:
    • NDS:nuScenes检测分数,是一个综合指标,考虑了多个因素来评估检测性能。
    • mAP:平均精度均值,是一个常见的评估指标,用于衡量模型在所有类别上的平均检测准确性。
    • ATE:平均平移误差,衡量预测位置和实际位置之间的平均差异。
    • ASE:平均尺度误差,衡量预测大小和实际大小之间的误差。
    • AOE:平均方向误差,衡量预测方向和实际方向之间的误差。
    • AVE:平均速度误差,衡量预测速度和实际速度之间的误差。
    • AAE:平均属性误差,衡量预测属性(如车辆类型)和实际属性之间的误差。

运动规划指标

  • 为了评估自动驾驶系统在规划未来行动时的性能,作者使用了ST-P3指标体系中的指标:
    • L2距离:这是规划轨迹和实际轨迹之间的欧氏距离,用于衡量规划路径的准确性。
    • 碰撞时间(CT):这是与其他车辆和行人的预测接触时间,重要的是安全性评估,它帮助确保规划的轨迹不会导致碰撞。

六、设计占用网络的意义

为什么这部分放这么后,因为感觉不是论文的重点,简单讲讲即可。

在BEV分割中,每个单元格隐含地包含了高度信息。这意味着在BEV地图的每个单元格中,高度信息被整合进去了,但没有显式地表达出来。

在特定的、更具挑战性的城市场景中,需要明确地识别和处理地面以上物体的高度信息。例如,为了正确识别交通灯和立交桥这样的结构,仅仅隐含地处理高度信息是不够的。

占用网络映射考虑了3D空间中的物体。这表明占用网络映射是“3D几何感知”的,意味着它能够更好地理解和表达物体在三维空间中的位置和形状,包括高度信息。

七、模型效果

 在语义场景完成方面的三维占用预测,对于使用RGB输入的模型,语义占用预测和几何预测指标进行了比较。

在平均交并比(mIoU)和几何交并比(IoUgeo)方面,OccNet显著超过了之前的最佳状态(SOTAs)。带有星号(*)的方法表示在OpenOcc数据集上进行训练和评估。

分割任务,OccNet(ResNet101)在nuScenes验证集上的分割性能。

使用相机输入的OccNet与基于LiDAR的方法相当。带星号(*)的方法表示从头开始在OpenOcc数据集上进行训练。 

三维占用三维检测的联合训练。在nuScenes验证集上报告的结果显示,三维占用与三维检测的联合训练可以帮助后者任务。

使用不同场景的规划结果,占用表征帮助规划任务在时间间隔内,实现更低的碰撞率和更准确的L2距离。

运动规划的可视化,蓝线代表规划的轨迹,下图是边界框和占用情况的栅格化结果。

通过栅格化占用输入得到的轨迹可以与卡车保持更大的安全距离,这归因于更精确的多边形表示。


 

占用预测的可视化,对于每个场景,左上图是周围相机的输入,左下图和右图分别代表占用预测结果的透视视图和俯视图。

虚线区域表示OccNet可以很好地预测小尺寸目标或远距离目标。

分享完成~

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

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

相关文章

2023-12-29 服务器开发-centos-安装php8

摘要: 2023-12-29 服务器开发-centos-安装php8 centos-安装php8 必备条件 Minimal CentOS 8 / RHEL 8User with sudo rightsInternet Connection (1) 更新系统 更新系统 $ sudo dnf update $ sudo dnf upgrade 重启系统 $ sudo reboot (2) 启用 EPEL & Remi 软件库…

Starling-LM-7B与GPT-4:开源AI的新纪录

引言 在人工智能的前沿领域,Starling-LM-7B的出现标志着开源大型语言模型(LLM)的一大突破。与GPT-4的近距离竞争不仅展示了Starling-LM-7B的技术实力,也突显了开源社区在推动AI发展方面的重要作用。 模型特点 Starling-LM-7B&a…

HTML使用JavaScript的三种方式

要使用 JavaScript&#xff0c;你可以在 HTML 文件中的 <script> 标签中编写代码&#xff0c;或者将代码保存到一个单独的 .js 文件中并在 HTML 文件中引入。以下是一些常用的 JavaScript 使用方式&#xff1a; 内联 JavaScript&#xff1a;在 HTML 文件的 <script&g…

【电子通识】开关的种类

开关在我们日常生活与工作中使用较多。开关有无数种形式&#xff0c;种类繁多。从微小的按钮到巨大的控制器&#xff0c;功能多种多样。这种多样性受到机械或电气操作、手动或电子控制等因素的影响&#xff0c;并且与个人在设计美学和用户界面方面的偏好也有关。 电子开关采用 …

mysql查询出json格式字段中的值

一、使用场景 由于一些特殊数据使用json格式保存到表数据种中了&#xff0c;在查询的时候需要查询出这条数据中json格式中的某个字段 比如&#xff1a;需要将下列字符串中的“nationality”字段单独查询出来 json格式是一个对象 结果&#xff1a; json格式是一个集合 查询结…

第三章 Zookeeper服务注册与发现

Zookeeper服务注册与发现 gitee&#xff1a;springcloud_study: springcloud&#xff1a;服务集群、注册中心、配置中心&#xff08;热更新&#xff09;、服务网关&#xff08;校验、路由、负载均衡&#xff09;、分布式缓存、分布式搜索、消息队列&#xff08;异步通信&#…

泛目录是干什么用的蚂蚁seo泛程序

泛目录是干什么用的蚂蚁seo泛程序目录 泛目录是一种常见的网站优化方法&#xff0c;属于黑帽技术的一种。它的核心原理是利用高权重的网站继承目录&#xff0c;然后快速获得收录与排名。这种方法可以帮助网站在搜索引擎中获得更好的排名&#xff0c;从而吸引更多的流量。 泛目…

C++面试宝典第11题:两数之和

题目 给定一个整数数组和一个目标值,请在该数组中找出和为目标值的那两个整数,并返回他们的数组下标,要求时间复杂度为O(n)。可以假设每种输入只会对应一个答案,注意:不能重复利用这个数组中同样的元素。 解析 这道题主要考察应聘者对算法时间复杂度和空间复杂度的理解,时…

“踩坑”经验分享:Swift语言落地实践

作者 | 路涛、艳红 导读 Swift 是一种适用于iOS/macOS应用开发、服务器端的编程语言。自2014年苹果发布 Swift 语言以来&#xff0c;Swift5 实现了 ABI 稳定性、Module 稳定性和Library Evolution&#xff0c;与Objective-C&#xff08;下文简称“OC”&#xff09;相比&#xf…

边缘智能网关在智慧大棚上的应用突破物联网大关

边缘智能网关在智慧大棚上的应用&#xff0c;是现代农业技术的一大突破。通过与农作物生长模型的结合&#xff0c;边缘智能网关可以根据实时的环境数据和历史数据&#xff0c;预测农作物的生长趋势和产量&#xff0c;提供决策支持和优化方案。这对于农民来说&#xff0c;不仅可…

算法学习系列(十五):最小堆、堆排序

目录 引言一、最小堆概念二、堆排序模板&#xff08;最小堆&#xff09;三、模拟堆 引言 这个堆排序的话&#xff0c;考的还挺多的&#xff0c;主要是构建最小堆&#xff0c;并且在很多情况下某些东西还用得着它来优化&#xff0c;比如说迪杰斯特拉算法可以用最小堆优化&#…

软件测试/测试开发丨学习笔记之Python运算符

运算符的作用 Python基础语法的内容通常表示不同数据或变量之间的关系 算数运算符 运算符描述加-减*乘/除%取模**幂//取整除 取模与取余区别 概念上&#xff1a;取模是计算机术语&#xff0c;取余属于数学概念&#xff1b; 结果上&#xff1a;当同号的两个数相除&#xff…

【北亚服务器数据恢复】ZFS文件系统服务器ZPOOL下线的数据恢复案例

服务器数据恢复环境&#xff1a; 服务器中有32块硬盘&#xff0c;组建了3组RAIDZ&#xff0c;部分磁盘作为热备盘。zfs文件系统。 服务器故障&#xff1a; 服务器运行中突然崩溃&#xff0c;排除断电、进水、异常操作等外部因素。工作人员将服务器重启后发现无法进入操作系统。…

CData ADO.NET Data Providers 2022 Crack

ADO.NET 数据提供程序 轻松将 .NET 应用程序与 SaaS、NoSQL 和大数据连接起来 数据绑定到应用程序、数据库和服务 完整的创建、读取、更新和删除 (CRUD) 支持&#xff0c;无需编码 200 基于标准的 ADO.NET 数据提供程序 100% 适用于 .NET Standard、.NET Core 和 Xamarin 的完全…

低成本高效率易部署,Ruff工业数采网关+IoT云平台赋能工厂数字化管理

随着工业4.0的快速发展&#xff0c;工业物联网是工业企业实现数字化转型的重要助力&#xff0c;物联网技术的应用也越来越广泛。 作为连接设备与网络的关键节点&#xff0c;数据采集网关是连接工业设备与物联网平台的硬件设备&#xff0c;它负责将工业设备的数据采集、传输到物…

Vite+Vue3学习笔记(2)——语法、渲染、事件、数据传递、生命周期、第三方库、前端部署

官网链接&#xff1a;https://cn.vuejs.org/ 如果出现普通用户无法新建项目&#xff0c;必须要管理员身份新建&#xff0c;那么可以在nodejs的安装路径设置安全选项&#xff0c;提高普通用户的权限。 具体方法参考&#xff1a; https://blog.csdn.net/weixin_43174650/article/…

助力城市部件[标石/电杆/光交箱/人井]精细化管理,基于YOLOv6开发构建生活场景下城市部件检测识别系统

井盖、店杆、光交箱、通信箱、标石等为城市中常见部件&#xff0c;在方便居民生活的同时&#xff0c;因为后期维护的不及时往往会出现一些“井盖吃人”、“线杆、电杆、线缆伤人”事件。造成这类问题的原因是客观的多方面的&#xff0c;这也是城市化进程不断发展进步的过程中难…

VSCODE : SSH远程配置+免密登录

SSH基础配置 填入地址&#xff0c;回车 ssh userhost-or-ip 然后选择默认的配置&#xff0c;回车&#xff0c;得到以下结果&#xff1a; 点击链接 选择远程的系统 输入密码 免密登录 生成SSH密钥&#xff1a; 首先&#xff0c;确保你已经在本地生成了SSH密钥。你可以使…

flutter学习-day21-使用permission_handler进行系统权限的申请和操作

文章目录 1. 介绍2. 环境准备2-1. Android2-2. iOS 3. 使用 1. 介绍 在大多数操作系统上&#xff0c;权限不是在安装时才授予应用程序的。相反&#xff0c;开发人员必须在应用程序运行时请求用户的许可。在 flutter 开发中&#xff0c;则需要一个跨平台(iOS, Android)的 API 来…

GoLang学习之路,对Elasticsearch的使用,一文足以(包括泛型使用思想)(二)

书写上回&#xff0c;上回讲到&#xff0c;Elasticsearch的使用前提即&#xff1a;语法&#xff0c;表结构&#xff0c;使用类型结构等。要学这个必须要看前面这个&#xff1a;GoLang学习之路&#xff0c;对Elasticsearch的使用&#xff0c;一文足以&#xff08;包括泛型使用思…