Learning Vision-and-Language Navigation from YouTube Videos

问题:

现有的VLN方法受小规模环境或不合理的路径指令训练的影响,限制了对不可见环境的泛化

解决方案:

使用Youtube上海量的房屋参观视频

1、根据youtube的视频创建一个大规模数据集,该数据集包含来自房屋参观视频的合理路径指令对

2、在创建的数据集上预训练智能体

面临的挑战:

1、很难从大量视频帧中确定轨迹节点的位置并表示节点中的视觉内容

2、真实的VLN指令包括各种动作描述,但由于动作隐含在视频中,从导航clips中获取相应的指令具有挑战性。因此,获取轨迹上的匹配指令并不简单

3、来自真实导航经验的布局知识难以挖掘和建模,这阻碍了智能体学习布局推理能力

具体方法:

1、基于熵的轨迹生成方法。设想轨迹中的节点应该尽可能的包含多类型的房间。因此,将视频中具有相同房间类型的帧分组,将每个组视为轨迹中的一个节点,并且选择组中分类熵最低的帧来表示节点中的视觉内容

2、训练一个动作感知生成器,从未标记的轨迹生成指令。即采用动作逆模型来伪标记沿着轨迹的动作,并通过手工设计的规则将它们填充到指令中

3、设计一个自我监督的轨迹合理性判断任务,要求智能体可以识别合理的导航轨迹。(该任务集成在智能体lily上,并且在R2R和REVERIE数据集上呈现出了最先进的性能)

构建一个youtube VLN数据集

多样化的轨迹生成——》基于熵的方法

我们寻求从 YouTube 视频构建离散的导航轨迹。与离散导航数据集(例如,R2R [2])类似,每个轨迹包含 K 个导航节点,代表导航路径的不同位置。

面临的两个挑战:

1、如何确定组成轨迹的位置,使得轨迹更加多样化;

2、如何表示每个节点位置的视觉内容

具体做法:

从youtube中收集导航数据

收集了4078个视频,使用稀疏采样和现成的图像分类器预处理视频,过滤掉冗余或者嘈杂的帧(去除掉人物和室外场景特征的帧)。

使用在places365上训练的wideresnet过滤户外帧

使用在coco上训练的maskrcnn过滤人

确定轨迹节点的位置

需要构建的轨迹在有限的导航节点内也包含不同的视觉内容。

因此,使用CLIP来识别室内图像的房间类型,将具有相同房间类型的时间相邻帧收集为一组,并将该组视为导航节点之一。

对抽取来的原始帧使用预训练好的Vit-B/32表示视觉内容

房间类型和物体类型参考了MP3D,其中房间类型有12种

areas = ['office', 'lounge', 'family room', 'entry way', 'dining room', 'living room', 'stairs', 'kitchen',

         'porch', 'bathroom', 'bedroom', 'hallway']

objects = ['wall', 'floor', 'chair', 'door', 'table', 'picture', 'cabinet', 'cushion', 'window', 'sofa', 'bed',

           'curtain', 'chest of drawers', 'plant', 'sink', 'stairs', 'ceiling', 'toilet', 'stool', 'towel',

           'mirror', 'tv monitor', 'shower', 'column', 'bathtub', 'counter', 'fireplace', 'lighting', 'beam',

           'railing', 'shelving', 'blinds', 'gym equipment', 'seating', 'board panel', 'furniture',

           'appliances', 'clothes','person']

为了增加轨迹的多样性,在相邻房间节点之间随机插入一个房间到另一个房间期间捕获的视频帧组成的过渡节点。

在节点中表示视觉内容

选择信息最丰富的图像来表示节点特征,因此使用具有最低分类熵的图像来表示节点的当前视图。为了模仿全景视觉上下文,合并当前视图的M个相邻连续图像。相比于airbert,合并了当前视图属于同一位置的相邻帧。

最终,我们随机选择K个连续节点来构建轨迹。

使用的是香农熵来表示节点的当前视图

动作感知的指令生成

挑战:如何正确描述导航路径上的视觉内容和操作

具体做法:

1、生成带有动作和名词短语的空白指令模板,使用的是R2R数据集中的指令空白模板

2、使用Clip描述轨迹中的每个节点,即名词短语的空白,包括物体类型和房间类型的名称

3、使用动作逆模型推断动作,推断的准确率有96%,选择动作填进去。主要是resnet18和搭建的一些CNN层

4、使用视觉描述和操作填充指令模板

动作map有三种:0:向前;1:左;2:右

Lily智能体

给定从YouTube视频生成的类似VLN的合理路径指令对,我们然后描述如何从这些数据中学习 Lily 代理。如图3所示,整个VLN模型由两个组件组成:一个视觉和语言backbone(即多层transformer),用于对轨迹和指令之间的关系进行建模;以及一个决策模块,用于预测下一个动作或路径指令对的匹配分数。视觉和语言backbone可以是任何类型的跨模式网络。我们选择 ViLBERT与 Airbert进行公平比较。作为一种常见的做法,pretext任务用于预训练backbone网络。接下来,我们描述如何使用提出的轨迹判断pretext任务在 Youtube-VLN 数据集上预训练backbone网络。

Learning Layout from Trajectory Judgment

鉴于上述模型架构,我们建议使用轨迹判断(TJ)任务来训练 VLN 代理,使其能够推理布局。在这里,我们详细阐述了所提出的轨迹判断任务。

具体的评判方式

轨迹判断任务旨在判断轨迹的合理性。

具体方法:

将生成的轨迹视为正(合理)样本,将打乱的轨迹视为负(不合理)样本。为了完成此任务,智能体需要推理视觉信息并识别房间类型,然后推断轨迹是否与真实环境布局分布相匹配。

具体来说,我们首先计算 [IMG] 和 [CLS] 标记的输出特征的点积。然后,我们将这个向量特征输入到线性层来预测指令轨迹是否合理的概率。该模型旨在最小化二元交叉熵损失:

其中,如果第 n 个轨迹合理,则 yn = 1,否则 yn = 0。pn 表示第 n 个轨迹被预测为合理的概率。 N 是批次中的轨迹数量。 w是缓解正负样本不平衡的因子,等于负样本数与正样本数的比值。

负样本的生成

对正样本进行洗牌以生成负样本:1)仅对转移节点进行洗牌; 2)对所有节点进行shuffle; 3)保持房间节点的顺序,并随机插入其他视频中的节点。通过这种方式,我们创建了丰富且困难的负样本,这增加了任务难度,帮助智能体以更复杂的方式理解真实布局。

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

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

相关文章

软件测试|测试平台开发-Flask 入门:编写第一个简单 Web 应用

简介 Flask 是一个轻量级的 Python Web 框架,它使得创建 Web 应用变得简单快捷。相比于Django框架,它具有以下的优点: 轻:Flask 是一个轻量级的 Web 框架,使用 Python 语言编写易:较其他同类型框架更为灵…

Spark基础内容

Spark基本介绍 Spark是什么 定义 Apache Spark是用于大规模数据(large-scala data)处理的统一(unified)分析引擎. Spark与MapReduce对比 mapreduce架构图如下: MapReduce的主要缺点: 1- MapReduce是基于进程进行数据处理,进程相对线程来说&#x…

编程语言的未来,通用代码生成器和超级语言

编程语言的未来,通用代码生成器和超级语言 我们生活在一个编程语言种类繁多,百花齐放的年代。形形色色的编程语言覆盖了软件开发的方方面面。如果说这些变成语言有什么共性的话,大家都知道,大多数编程语言是高级语言。 何为高级…

PyTorch|构建自己的卷积神经网络——nn.Sequential()

之前在构建神经网络时,我们一般是采用这种方式,就像这样: class Network1(nn.Module): def __init__(self): super(Network1,self).__init__() self.conv1 nn.Conv2d(in_channels3, out_channels6, kernel_size5) …

车辆运动学方程推导和代码实现

文章目录 1. 运动学方程2. 模型实现 1. 运动学方程 自行车模型(Bicycle Model)是车辆数字化模型中最常见的一种运动学模型。其除了可以反映车辆的一些基础特性外,更重要的是简单易用。通常情况下我们会把车辆模型简化为二自由度的自行车模型…

1.分组

#include<bits/stdc.h> using namespace std; int main() {unsigned long long a,b,c0,d,s0;cin>>a>>b;for(long long i1;i<a;i){cin>>d;cd;if(c>b){c0;s;}}cout<<s;return 0; }

【软件测试】概述

《软件缺陷》 定义 &#xff08;从产品内部看&#xff09;软件产品开发或维护过程中存在的错误、毛病等各种问题&#xff08;从产品外部看&#xff09;系统所需要实现的某种功能的失效或违背 表现形式(1) 软件没有实现产品规格说明所要求的功能模块(2) 软件中出现了产品规格说…

Micro-app 微前端框架demo介绍

Micro-app 框架 1、框架安装 npm i micro-zoe/micro-app --save2、子应用对应的view页面 <template><div><!-- name(必传)&#xff1a;应用名称url(必传)&#xff1a;应用地址&#xff0c;会被自动补全为http://localhost:3000/index.htmlbaseroute(可选)&…

Java 堆的设计,如何用堆进行排序

Java 学习面试指南&#xff1a;https://javaxiaobear.cn 1、堆的定义 堆是计算机科学中一类特殊的数据结构的统称&#xff0c;堆通常可以被看做是一棵完全二叉树的数组对象。 1、堆的特性 它是完全二叉树&#xff0c;除了树的最后一层结点不需要是满的&#xff0c;其它的每一层…

mac版viso软件 流程图软件omnigraffile

OmniGraffle 是一款由 The Omni Group 开发的绘图工具&#xff0c;主要用于创建各种类型的图表、流程图、组织结构图、网站地图等。它提供了丰富的绘图工具和功能&#xff0c;包括形状、线条、文本、颜色、样式等&#xff0c;可以帮助用户轻松地创建出精美的图表和图形。 OmniG…

《PySpark大数据分析实战》-24.数据可视化图表介绍

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…

深度解析基于模糊数学的C均值聚类算法

深度解析基于模糊数学的C均值聚类算法 模糊C均值聚类 (FCM)聚类步骤&#xff1a;FCM Python代码&#xff1a; 模糊C均值聚类 (FCM) 在数据挖掘和聚类分析领域&#xff0c;C均值聚类是一种广泛应用的方法。模糊C均值聚类&#xff08;FCM&#xff09;是C均值聚类的自然升级版。相…

WebSocket的优点和缺点:一文详解。

WebSocket 的优缺点 WebSocket 协议是一种双向通信协议&#xff0c;它使用单个 TCP 连接实现全双工通信&#xff0c;这使它比传统的 HTTP 协议更有效率。 WebSocket 优点 双向通信&#xff1a; WebSocket 协议支持双向通信&#xff0c;使服务器和客户端之间的通信更加方便和快…

关于使用统一服务器,vscode和网页版jupyter notebook的交互问题

autodl 查看虚拟环境 在antodl上租借了一个服务器&#xff0c;通过在网页上运行jupyter notebook和在vscode中运行&#xff0c;发现环境都默认的是miniconda3。 conda info --envs 当然环境中所有的包都是一样的。 要查看当前虚拟环境中安装的所有包&#xff0c;可以使用以…

解决Typescript报错问题[亲测有效]

目录 1、安装 2、报错 3、分析 4、三种更新途径 如果你tsc -v报错&#xff0c;请看这篇文章&#xff0c;本人亲测有效&#xff01; 1、安装 在前端项目中使用TS&#xff0c;需要进行安装&#xff0c;命令为&#xff1a;npm install -g typescript 查看TS版本&#xff1a; …

图像解析力测试

什么是图像解析力测试 图像解析力测试是衡量成像系统性能的关键指标之一,它决定了摄像头捕捉到的图像细节和清晰度。目前主流的图像解析力测试方法主要有TV line检测、MTF检测和SFR检测。 TV line检测主要用于主观测试,通过观察图像中的线条来评估解析力。然而,这种方法缺乏…

Django(六)

员工管理系统(用户管理&#xff09; {% extends layout.html %}{% block content %}<div class"container"><div style"margin-bottom: 10px"><a class"btn btn-success" href"#"><span class"glyphicon gl…

【python】连上钉钉机器人每日推送

使用Python向钉钉机器人发送消息 导入必要的库 导入json库用于处理JSON数据&#xff0c;time库用于获取当前时间&#xff0c;requests库用于发送HTTP请求。 定义send_ding_message函数 该函数接收一个消息作为参数&#xff0c;并通过POST请求发送给钉钉机器人。请求的URL和头部…

C语言光速入门笔记

C语言是一门面向过程的编译型语言&#xff0c;它的运行速度极快&#xff0c;仅次于汇编语言。C语言是计算机产业的核心语言&#xff0c;操作系统、硬件驱动、关键组件、数据库等都离不开C语言&#xff1b;不学习C语言&#xff0c;就不能了解计算机底层。 目录 C语言介绍C语言特…

Java二叉树的遍历以及最大深度问题

Java学习面试指南&#xff1a;https://javaxiaobear.cn 1、树的相关概念 1、树的基本定义 树是我们计算机中非常重要的一种数据结构&#xff0c;同时使用树这种数据结构&#xff0c;可以描述现实生活中的很多事物&#xff0c;例如家谱、单位的组织架构、等等。 树是由n&#…