OVRL-V2: A simple state-of-art baseline for IMAGENAV and OBJECTNAV 论文阅读
论文信息
题目:OVRL-V2: A simple state-of-art baseline for IMAGENAV and OBJECTNAV
作者:Karmesh Yadav, Arjun Majumdar, Ram Ramrakhya
来源:arxiv
时间:2023
代码地址: https://github.com/ykarmesh/OVRL
Abstract
我们提出了一个由与任务无关的组件(ViT、卷积和 LSTM)组成的单一神经网络架构,该架构在 IMAGENAV(“转到 <这张图片> 中的位置”)和 OBJECTNAV(“查找椅子”)任务没有任何特定于任务的模块,如对象检测、分割、映射或规划模块。这种通用方法具有设计简单、利用可用计算进行正扩展以及对多种任务具有通用性等优点。
我们的工作建立在最近成功的预训练视觉变换器(ViT)自我监督学习(SSL)的基础上。然而,虽然卷积网络的训练方法是成熟且稳健的,但 ViT 的方法是偶然且脆弱的,并且就用于视觉导航的 ViT 而言,还有待充分发现。具体来说,我们发现普通 ViT 在视觉导航方面并不优于 ResNet。我们建议使用在 ViT 补丁表示上运行的压缩层来保留空间信息以及策略训练改进。这些改进使我们首次在视觉导航任务中展示正缩放定律。因此,我们的模型将 IMAGENAV 上的最先进性能从 54.2% 成功率提高到 82.0%,并且与 OBJECTNAV 上同时最先进的性能相比,成功率分别为 64.0% 和 65.0%。
总的来说,这项工作并没有提出一种全新的方法,而是提出了训练通用架构的建议,该架构可实现当今最先进的性能,并可以作为未来方法的强大基准。
Introduction
在这项工作中,我们推进了一个替代研究计划——训练由与任务无关的神经组件构建的通才智能体,而无需任何特定于任务的模块。这种通用方法具有设计简单、可用计算积极扩展(结合“惨痛教训”[35])以及对多种任务的通用性等优点。
最近一系列关于图像和视频理解的工作发现,由自监督表示学习驱动的视觉变换器 [13] (ViT) 可以为识别 [3, 11, 18] 和生成 [4, 6] 提供通用视觉表示] 任务。然而,虽然卷积网络的训练方法是成熟且稳健的,但 ViT 的方法是偶然且脆弱的,并且就用于视觉导航的 ViT 而言,尚未得到充分发现 - 而这种发现是我们工作的重点。
我们的主要技术贡献和发现如下:
-
视觉导航中的 ViT 需要压缩层。我们发现,与 RESNET 相比,从头开始训练的基于 ViT 的智能体表现较差(例如,在 IMAGENAV 上仅实现 36.1% 的成功率 (SR),而在 RESNET 上则为 59.9%)。尽管模型容量要高得多(ViT-SMALL 的参数比半宽 ResNet50 多约 4 倍)。我们发现使用 ViT 解决导航问题的一个关键问题是 [CLS] 令牌嵌入和全局平均池都删除了对任务很重要的空间结构。我们建议使用压缩层(由 2D 卷积加扁平化组成)在 ViT patch 表示上运行来保留空间信息,并发现它导致 ViT 优于 RESNET(IMAGENAV 上的 SR 为 67.4% vs. 59.9%)。
-
视觉预训练首次解锁正标度法则。我们首次在 IMAGENAV 上展示了基于 ViT 的代理的正标度律。具体来说,我们发现视觉表示学习(使用掩码自动编码(MAE)[18])不仅可以提高性能,还可以使用 ViT 进行模型缩放。通过这种预训练,我们能够将模型大小从 ViT-SMALL 增加到 ViT-BASE,并观察到成功率从 80.5% 增加到 82.0% (+1.5%),SPL(按路径效率加权的成功)从 55.2% 增加到58.7%(+3.5%)。
-
单一架构在IMAGENAV和OBJECTNAV上实现SoTA。将所有这些(ViT、压缩层、预训练、策略训练改进和扩展)放在一起,我们提出了 OVRL-V2(离线视觉表示学习 v2),这是一个简单的 ViT+压缩层+LSTM 架构,作为现有技术的后继者。 - 最先进的方法,OVRL [43]。 OVRL-V2 将 IMAGENAV 上最先进的成功率从 54.2%(在[43]中)提高到 82.0%(+27.8% 绝对改进和 51.3% 相对改进),并且在 OB-JECTNAV 上实现了 64.0% 的成功率,与 stateof 相当-最先进的(65.0%,通过并行但正交的工作获得[31])。 OVRL-V2代理仅使用RGB和GPS+Compass传感器;没有以自我为中心的深度(如[32]所使用),没有语义分割(如[32]所使用),没有对象检测(如[46]所使用),没有语义或几何映射(如[8, 49, 29、37、9])。
Background:Tasks and Visual Pretraining
我们研究两种视觉导航任务:图像目标导航(IMAGENAV)[51]和对象目标导航(OBJECTNAV)[5]。为了解决这些任务,我们设计了一个利用视觉转换器(ViT)的实体代理[13]。
本节概述了每项任务,然后描述了我们用于预训练 ViT 的方法。
Visual Navigation
图 2 说明了 IMAGENAV [51] 和 OBJECTNAV [5] 任务。在这两种情况下,代理都从未知 3D 场景中的随机位置和方向开始。代理必须探索环境才能找到目标位置。在 IMAGENAV 中,目标是从目标位置拍摄的图像(例如沙发的照片)。在 OBJECTNAV 中,代理被赋予了它必须找到的对象的名称(例如“沙发”)。
在这些任务中,代理使用以自我为中心的 RGB 相机感知环境。代理使用离散的动作空间进行导航。在 IMAGENAV 中,标准动作集包括:向前移动 (0.25m)、向左转 (30°)、向右转 (30°) 和停止,以指示智能体认为它已达到目标。在 OBJECTNAV 中,代理还可以“向上查找”(30°) 和“向下查找”(30°)。
代理在以前未见过的环境中进行评估,这可以测量导航行为的泛化程度。使用两个标准指标来评估代理的导航性能:成功率(SR)和按(逆)路径长度加权的成功率(SPL)[2]。 SPL 奖励采取较短路径到达目标的智能体,从而衡量智能体探索新环境的效率。
Masked Autoencoders(MAEs)
视觉导航任务需要理解视觉提示才能在新环境中导航。因此,代理需要强大的视觉表示。我们使用屏蔽自动编码(MAE)[18]——一种高效的自监督视觉表示学习算法,专为预训练视觉变换器[13](ViTs)而设计——来提高基于 ViT 的代理的性能。 MAE 的效率源自非对称编码器-解码器设计。具体来说,输入图像首先被分成不重叠的补丁,其中很大一部分(75%)在预训练期间被随机屏蔽。编码器仅处理剩余的未屏蔽补丁,这减少了预训练期间的计算负担。小型解码器的任务是重建完整的输入图像。编码器和解码器都是 ViT,它们自然会处理可变数量的补丁。由于现实世界图像中各块之间的自然冗余,可以实现高掩蔽百分比,这使得仅从组成部分的一小部分子集即可预测完整图像。预训练后,解码器被丢弃,仅编码器用于下游任务。
Approach
我们对视觉导航任务(IMAGENAV 和 OBJECTNAV)使用通用代理架构。如图 4 所示,两个代理主要由视觉编码器(随机初始化或使用 MAE 预训练的 ViT)、目标编码器和循环策略网络组成。本节描述了我们方法的几个关键组成部分。
Compression layers for ViTs
ViT 的压缩层。如图 4 所示,我们的视觉导航代理使用基于 ViT 的视觉编码器 fθobs 处理 RGB 观察值 Ot。具体来说,输入图像在数据增强后被转换为不重叠的 16×16 块,与 [CLS] 令牌连接,然后用 ViT 进行处理,输出每个块和 [CLS] 令牌的表示。在图像分类等任务中,通常使用(a)[CLS]令牌输出或(b)补丁表示的平均池化(即全局平均池化)来表示图像。
Visual Navigation with ViTs
使用 ViT 进行视觉导航 如图 4 所示,视觉编码器遥控钥匙的输出与目标表示和嵌入提供姿势信息的 GPS+罗盘传感器(仅用于 OBJECTNAV)相连接。连接的输出由基于 LSTM 的循环策略网络进行处理,该网络可预测操作。
每个任务的代理之间的区别在于用于编码目标的方法。在 IMAGENAV 中,图像目标 Og 使用视觉编码器 fθgoal 进行编码,其架构与 fθobs 相同。对于 OBJECTNAV,目标对象类别(例如“沙发”)通过学习的嵌入层进行编码。
我们使用 DD-PPO [39] 以及未来小节中描述的奖励函数通过强化学习(RL)来训练我们的 IMAGENAV 代理。对于 OBJECTNAV,我们使用人类演示和分布式行为克隆版本来训练我们的代理 [32]。
Visual Encoder Pretraining
视觉编码器预训练。我们提出的在无模型导航代理中使用基于 ViT 的视觉编码器的方法(图 4)可以从头开始进行端到端训练(例如,使用下一节中描述的 RL 奖励)。
此外,我们研究了使用第 2 节中描述的掩码自动编码(MAE)算法对基于 ViT 的视觉编码器进行预训练。 3.2.对于预训练,我们从 HM3D [30] 和 Gibson [40] 场景收集域内图像数据集。这遵循了先前工作中的观察结果(例如,[43]),该观察表明对域内数据(而不是像 ImageNet 这样的数据集)进行预训练可以提高下游性能。
ImageNav rewards
IMAGENAV 奖励。用于视觉导航的奖励通常由三个部分组成:(a)成功完成任务的稀疏奖励 c s c_s cs,(b)用于激励效率的每时间步惩罚 γ,以及(c)一个或多个奖励塑造项来简化优化问题。一个常见的奖励塑造术语是到目标的(测地线)距离的变化。形式上,令 dt 表示智能体在时间 t 时到目标的测地距离;现在,奖励塑造项可以写为: d t − 1 − d t d_{t−1} − d_t dt−1−dt。将所有三个奖励项放在一起,该奖励定义为:
等式中奖励函数的一个限制。 (1) 是它对终止时智能体的“航向”无关紧要——智能体既不会因为注视目标物体而受到奖励(这是一种理想的行为,因为导航通常是操纵的前兆),也不会因注视目标物体而受到惩罚。结束这一集,将目光从物体上移开。为了解决这个问题,[1]提出了两个额外的角度奖励项来激励,1)转向目标(使用角度到目标( θ t θ_t θt)奖励塑造项)和2)在看着目标时停下来(使用最终奖励)。这两种奖励仅在智能体进入目标半径 rg 后才会授予。虽然 [1] 证明了他们的奖励可以提高 IMAGENAV 性能,但我们发现我们的 OVRL-V2 代理能够通过永不结束情节、进入目标半径、转向目标、向外移动来破解奖励函数目标半径,返回并重复。我们提供了有关此奖励的更多详细信息,并在附录 F 中可视化了代理的行为。我们假设之前的工作没有注意到这种可利用性,因为只有当实验规模适当时它才会变得明显。
我们在[1]中提出了对奖励函数的原则性修复。
我们的主要见解是,我们可以将角度到目标的奖励塑造项转化为潜在函数的差异,这被证明对于奖励塑造是最佳的[26]。具体来说,我们定义一个目标角度函数 θ ^ t \hat{θ}_t θ^t,它等于目标半径之外的 π,否则等于目标角度:
Experimental findings
在本节中,我们首先建立与现有 SoTA 方法竞争的 IMAGENAV 基线。然后,我们使用这个强大的基线来系统地解决以下研究问题:
-
ViT 是否可以在 IMAGENAV 中开箱即用?不。我们发现,尽管模型容量更高,但从头开始训练的基于 ViT 的智能体的表现比较小的 ResNet 智能体要差很多。
-
添加压缩层对性能有何影响?我们发现使用压缩层来维护图像表示中的空间结构可以显着提高 IMAGENAV 上的导航性能。
-
性能是否会随着 ViT 的增加而扩展?当从头开始训练时,我们观察到不同的结果。然而,自我监督的视觉预训练会带来一致的全面改进以及缩放强大的视觉导航代理能否“破解”等式 3 中的新奖励函数? 不可以。可以“破解”ZER 奖励 [1] 的智能体不再能够通过我们提出的修正来“破解”奖励函数。
-
OVRL-V2 性能与 IMAGENAV SoTA 相比如何? OVRL-V2 比之前的工作有了显着改进,包括使用额外摄像机提供环境全景的方法。
-
架构改进是否会转移到 OBJECTNAV 上?是的。 OVRL-V2 在 SR 方面优于 OBJECTNAV SoTA,甚至无需使用 OBJECTNAV 常用的深度传感器或分割模块
Comparisions with the ImageNav SoTA
Conclusion
在本文中,我们证明了由任务无关组件(ViT、卷积和 LSTM)组成的无模型导航代理 (OVRL-V2) 可以在 IMAGENAV 和 OBJECTNAV 上实现最先进的结果。为了实现这一目标,我们证明需要一个在 ViT 补丁表示上运行的压缩层,它可以保留空间信息。最后,我们发现使用 MAE 进行视觉预训练可以通过更大的 ViT 架构实现积极的扩展趋势。
相关文章:
OVRL-V2: A simple state-of-art baseline for IMAGENAV and OBJECTNAV 论文阅读
论文信息 题目:OVRL-V2: A simple state-of-art baseline for IMAGENAV and OBJECTNAV 作者:Karmesh Yadav, Arjun Majumdar, Ram Ramrakhya 来源:arxiv 时间:2023 代码地址: https://github.com/ykarmesh…...
【安全】原型链污染 - Hackit2018
目录 准备工作 解题 代码审计 Payload 准备工作 将这道题所需依赖模块都安装好后 运行一下,然后可以试着访问一下,报错是因为里面没内容而已,不影响,准备工作就做好了 解题 代码审计 const express require(express) var hbs require…...
net.ipv4.ip_forward=0导致docker容器无法与外部通信
在启动一个docker容器时报错: WARNING: IPv4 forwarding is disabled. Networking will not work. 并且,此时本机上的其他容器的网络服务,只能在本机上访问,其他机器上访问不到。 原因: sysctl net.ipv4.ip_forward …...
软考高级系统架构设计师系列论文九十八:论软件开发平台的选择与应用
软考高级系统架构设计师系列论文九十八:论软件开发平台的选择与应用 一、相关知识点二、摘要三、正文四、总结一、相关知识点 软考高级系统架构设计师系列之:面向构件的软件设计,构件平台与典型架构二、摘要 本文讨论选择新软件开发平台用于重新开发银行中间业务系统。银行中…...
Springboot整合WebFlux
一、使用WebFlux入门 WebFlux整合MysqlWebFlux整合ESWebFlus整合MongdbWebFlus整合Redis 1、添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId><version>2.2.1.…...
uniapp 实现地图距离计算
在uniapp中实现地图距离计算可以借助第三方地图服务API来实现。以下是一种基本的实现方式: 注册地图服务API账号:你可以选择使用高德地图、百度地图等提供地图服务的厂商,注册一个开发者账号并获取API密钥。 安装相关插件或SDK:根…...
破除“中台化”误区,两大新原则考核中后台
近年来,“中台化”已成为许多企业追求的目标,旨在通过打通前后台数据和业务流程,提升运营效率和创新能力。然而,在实施过程中,一些误解可能导致“中台化”未能如预期般发挥作用。本文将探讨这些误解,并提出…...
基于YOLOV8模型和Kitti数据集的人工智能驾驶目标检测系统(PyTorch+Pyside6+YOLOv8模型)
摘要:基于YOLOV8模型和Kitti数据集的人工智能驾驶目标检测系统可用于日常生活中检测与定位车辆、汽车等目标,利用深度学习算法可实现图片、视频、摄像头等方式的目标检测,另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用…...
基于Android的课程教学互动系统 微信小程序uniapp
教学互动是学校针对学生必不可少的一个部分。在学校发展的整个过程中,教学互动担负着最重要的角色。为满足如今日益复杂的管理需求,各类教学互动程序也在不断改进。本课题所设计的springboot基于Android的教学互动系统,使用SpringBoot框架&am…...
OpenCV基础知识(9)— 视频处理(读取并显示摄像头视频、播放视频文件、保存视频文件等)
前言:Hello大家好,我是小哥谈。OpenCV不仅能够处理图像,还能够处理视频。视频是由大量的图像构成的,这些图像是以固定的时间间隔从视频中获取的。这样,就能够使用图像处理的方法对这些图像进行处理,进而达到…...
PostgreSQL命令行工具psql常用命令
1. 概述 通常情况下操作数据库使用图形化客户端工具,在实际工作中,生产环境是不允许直接连接数据库主机,只能在跳板机上登录到Linux服务器才能连接数据库服务器,此时就需要使用到命令行工具。psql是PostgreSQL中的一个命令行交互…...
【CSS 画个梯形】
使用clip-path: polygon画梯形 clip-path: polygon使用方式如下: 效果实现 clip-path: polygon 是CSS的属性之一,用于裁剪元素的形状。它可以通过定义一个具有多边形顶点坐标的值来创建一个多边形的裁剪区域,从而实现元素的非矩形裁剪效果。…...
Spring Data Redis
文章目录 Redis各种Java客户端Spring Data Redis使用方式操作字符串类型的数据操作哈希类型数据列表类型集合类型有序集合类型通用类型 Redis各种Java客户端 Java中如何操作redis,这里主讲IDEA中的框架Spring Data Redis来操作redis Jedis是官方推出的,…...
软件测试的方法有哪些?
软件测试 根据利用的被测对象信息的不同,可以将软件测试方法分为:黑盒测试、灰盒测试、白盒测试。 1、白盒测试 1)概念:是依据被测软件分析程序内部构造,并根据内部构造分析用例,来对内部控制流程进行测试…...
Python Qt学习(二)Qt Designer
一开始以为Designer是个IDE,多番尝试之后,发现,是个UI设计工具,并不能在其中直接添加代码。保存之后,会生成一个后缀是UI的文件,再用pyuic5.exe将ui文件转化成py文件。pyuic5 -o 目标py文件 源ui文件...
我的数据上传类操作(以webDAV为例)
在登录处进行初始化: 1.读取配置 GModel.ServerSetin JsonToIni.GetClass<ServerSet>(ConfigFiles.ConfigFile);if (!string.IsNullOrWhiteSpace(GModel.ServerSetin.FTPUser)){OPCommon.NetControls.NetworkShareConnect.connectToShare(GModel.ServerSeti…...
move与函数指针的简单使用
std::move() C11的标准库 提供了一个非常有用的函数 std::move(),std::move() 函数将一个左值强制转化为右值引用,以用于移动语义。 就是说 std::move(str); 之后原来的值因为变成了右值失效了 但是这样赋值可以避免出现拷贝 #include <iostream&g…...
第五章 树与二叉树 二、二叉树的定义和常考考点
一、定义 二叉树可以用以下方式详细定义: 二叉树是由节点构成的树形结构,每个节点最多可以有两个子节点。每个节点有以下几个属性: 值:存储该节点的数据。左子节点:有一个左子节点,如果没有则为空。右子节…...
算法笔记/USACO Guide GOLD金组DP 1. Introduction to DP
USACO Guide中金组的内容分为一下六个章节 DP数学图论数据结构树一些附加主题 今天学习DP,以下内容: 初入DP背包DP图表中的路线最长递增序列状态压缩DP区间DP数位DP 初入DP Dynamic Programming (DP) is an important algorithmic technique in Comp…...
天锐绿盾安全U盘系统
安全U盘系统 01 简介 天锐绿盾安全U盘系统,是一款致力于保障U盘数据内容安全的产品。通过严格身份认证、便捷安全的密保机制、智能的U盘锁定或自毁设置、详细的文件操作日志、文件粉碎、设置还原等,天锐绿盾安全U盘系统为您U盘的数据保驾护航࿰…...
灰色预测模型
当谈论灰色预测时,通常是指灰色系统理论,它是一种用于处理少量数据或缺乏充分信息的情况下进行预测和分析的数学方法。灰色预测的核心思想是通过建立灰色模型来分析和预测数据的变化趋势。 我会解释灰色预测的基本原理、步骤和方法: 1. 灰色…...
Yolo系列-yolov1
YOLO-V1 经典的one-stage方法 YouOnlyLookOnce,名字就已经说明了一切!把检测问题转化成回归问题,一个CNN就搞定了!可以对视频进行实时检测,应用领域非常广! 核心思想: Yolov1的核心思想是将对象…...
单片机TVS/ESD二极管防护
TVS 瞬态电压抑制二极管Transient Voltage Suppressor ESD 静电释放二极管 Electro-Static discharge 这两种本质上都是二极管。都是利用了二极管正向导通、反向截止的特性。二极管在反向截止截止条件下,如果电压继续增大,将会引发雪崩,使得…...
TCP协议的重点知识点
TCP协议的重点知识点 TCP(传输控制协议)是一种面向连接、可靠的数据传输协议,工作在传输层,提供可靠的字节流服务。它是互联网协议栈中最重要、最复杂的协议之一,也是面试中常被问到的知识点。本文将详细介绍TCP协议的各个重要概念。 TCP基本特性 TCP主要具有以下基本特性: …...
大数据——一文熟悉HBase
1、HBase是什么 HBase是基于HDFS的数据存储,它建立在HDFS文件系统上面,利用了HDFS的容错能力,内部还有哈希表并利用索引,可以快速对HDFS上的数据进行随时读写功能。 Hadoop在已经有一个HiveMapReduce结构的数据读写功能&#x…...
如何有效进行RLHF的数据标注?
编者按:随着大语言模型在自然语言处理领域的广泛应用,如何从人类反馈进行强化学习(RLHF)已成为一个重要的技术挑战。并且RLHF需要大量高质量的人工数据标注,这是一个非常费力的过程。 本文作者在数据标注领域具有丰富经…...
2023年8月22日OpenAI推出了革命性更新:ChatGPT-3.5 Turbo微调和API更新,为您的业务量身打造AI模型
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
windows配置wsl,Unbuntu启动GPU加速
wsl全称Windows Subsystem for Linux,windows电脑下的linux子系统,对于想用Linux的Windows用户来说wsl是一个不错的选择。 安装wsl 两种方法可以安装wsl,这个默认安装在C盘。 方法一运行命令安装 wsl --install方法二,在windo…...
Postman测WebSocket接口
01、WebSocket 简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直…...
【内网穿透】搭建我的世界Java版服务器,公网远程联机
目录 前言 1. 搭建我的世界服务器 1.1 服务器安装java环境 1.2 配置服务端 2. 测试局域网联机 3. 公网远程联机 3.1 安装cpolar内网穿透 3.1.1 windows系统 3.1.2 linux系统(支持一键自动安装脚本) 3.2 创建隧道映射内网端口 3.3 测试公网远程…...
网站改版Excel怎么做/宁波seo排名优化哪家好
Android手机的USB转串口开发Android手机的USB接口在各个领域都得到了广泛的应用和推广。笔者前几天接手一个项目,主要就是解决工业现场数据采集的问题,该项目是由深圳宏进科技委托笔者开发的。现场的总线是RS485和RS232总线,需要用电脑和手机…...
网站策划书格式/郑州客串seo
前言 cloudflare 是一家国外的 CDN 加速服务商,还是很有名气的。提供免费和付费的加速和网站保护服务。以前推荐过的百度云加速的国外节点就是和 cloudflare 合作使用的 cloudflare 的节点。 cloudflare 提供了不同类型的套餐,即使是免费用户,…...
怎么用手机做网站/网站排名推广工具
MSYS:Minimal GNU(POSIX)system on Windows,是一个小型的GNU环境,包括基本的bash,make等等。是Windows下最优秀的GNU环境。(是否厌倦了Cygwin蜗牛般的shell环境,试试MSYS中的rxvt吧&…...
深圳较便宜的网站建设/seo行业
获取变量类型 typeof(var) Number String 类型转换 parseInt parseFloat Date() getDate() 1-31日 getTime() 1970-1-1到当前的毫秒数 getDay() 星期几0-6 getHours() getMinutes() getSeconds() setFullYear() setDate() getFullYear()...
wordpress如何把导航栏一直固定/最近的电脑培训学校
随着Hadoop的不断发展,Hadoop生态体系越来越完善,现如今已经发展成一个庞大的生态体系。 Hadoop生态体系包含了很多子系统,下面介绍一些常见的子系统,具体如下: 1. HDFS分布式文件系统 HDFS是Hadoop分布…...
如何做独立手机网站/seo综合查询怎么用的
恭喜你! 你已经找到了大多数人都在使用的屏幕截图尺子的辅助工具.作为一个iOS开发者来说,我总觉得简单的应用程序来检查图片或截图中的对象/元素位置存在不足。现在通过本App很容易找到任意用户界面元素的位置和大小,特别是X/Y位置和宽度/高度/大小。这个应用程序是…...