[EAI-023] FAST: Efficient Action Tokenization for Vision-Language-Action Models
Paper Card
论文标题:FAST: Efficient Action Tokenization for Vision-Language-Action Models
论文作者:Karl Pertsch, Kyle Stachowicz, Brian Ichter, Danny Driess, Suraj Nair, Quan Vuong, Oier Mees, Chelsea Finn, Sergey Levine
论文链接:https://arxiv.org/abs/2501.09747
论文出处:/
论文被引:/
项目主页:https://www.pi.website/research/fast
Abstract
基于Transformer的视觉-语言-动作(VLA)策略等自回归序列模型,可以非常有效地捕捉复杂且可泛化的机器人行为。 但是,此类模型对连续动作信号的进行 tokenization(离散标记化),这决定了模型预测的离散token (标记)如何映射到连续的机器人动作(action)。 当前基于简单逐维度、逐时间步长分箱方案的机器人动作离散标记化方法,在从高频机器人数据中学习灵巧技能时,通常表现不佳。 为了解决这一挑战,本文提出了一种基于离散余弦变换的基于压缩的机器人动作离散标记化方案——Frequency-space Action Sequence Tokenization (FAST),能够为高度灵巧和高频的任务训练自回归VLA,而标准离散化方法在此类任务中完全失效。 基于FAST,发布了一个通用的机器人动作离散标记化器 FAST+,它在100万个真实的机器人动作轨迹上训练。 它可以用作各种机器人动作序列(具有不同的动作空间和控制频率)的黑盒分词器(tokenizer)。 当与 VLA 模型 pi0 结合使用时,可以扩展到在1万小时的机器人数据上进行训练,并与扩散VLA模型的性能相当,但训练时间减少了5倍。
Summary
研究背景
性能好的tokenizer对序列模型的性能至关重要。当前机器人策略通常使用基于每个维度、每个时间步长分箱方案的简单 tokenization 方法,这类方法在学习具有高频控制的灵巧技能时的表现不好(本文中涉及的测试全部失败)。当预测未来动作序列时,简单的tokenizer难以捕获各个时间步之间的相关性,高度相关的action token降低了自回归VLA模型对 next token prediction 建模的有效性。
方法介绍
从第一性原理出发,开发新的 action tokenizer。关键想法:受到llama中使用的 BPE 编码方法的启发,在模型训练之前压缩机器人动作信号,减少连续token之间的相关性。考虑到机器人动作是连续信号,因此采用离散余弦变换编码,由此产生的 tokenization 方法称为 Frequency-space Action Sequence Tokenization (FAST)。在 DROID 数据集上高效训练 VLA 模型,在未见的真实环境通过自然语言提示进行零样本评测。
构建了 FAST+ 通用的机器人动作 tokenizer,在100万条真机数据上训练。可以对各种机器人动作序列进行分词,报错单臂机器人、双臂机器人和移动机器人。当pi0模型结合FAST进行训练时,比原来的结合扩散思想的模型训练时间缩短了 5 倍,但性能相当。
相关工作
基于VLM构建的VLA模型是构建通用机器人策略的有效方法。他在大规模的互联网图文对上训练,并使用机器人数据微调,用于机器人控制。VLA的优势是:1)数十亿参数的VLM骨干为策略提供了适应大型机器人数据集所需要的表达能力;2)重用VLM的权重可以提高VLA模型遵从多样化指令的能力和泛化能力,例如泛化到未见物体和未见场景背景。
当前VLA模型的控制频率基本都很低,自回归的VLA模型更甚,难以适应高频的灵巧操作任务。原因是 tokenizer 使用简单的每个维度、每个时间步长分箱方案。为此,本文提出了一种基于时间序列压缩技术的机器人动作分词器 FAST。
前置知识
问题描述:目标是训练策略 π ( a 1 : H ∣ o ) π(a_{1:H}|o) π(a1:H∣o),将观测结果 o o o 映射到未来机器人动作序列 a 1 : H a_{1:H} a1:H。假设策略输出动作块(Action Chunk),即序列长度为 H H H 动作,这使得更容易产生时间上一致的动作并减少复合误差。 动作分词(Action Tokenization)的目标是定义一个映射 T a : a 1 : H → [ T 1 , … , T n ] \mathcal{T}_{a}:a_{1:H} → [T_1,…,T_n] Ta:a1:H→[T1,…,Tn],从维度为 ∣ A ∣ |\mathcal{A}| ∣A∣ 的连续动作 a 1 : H a_{1:H} a1:H 序列映射到来自大小为 ∣ V ∣ |\mathcal{V}| ∣V∣ 的词汇表中的 n n n 个离散token序列 T ∈ ∣ V ∣ T∈|\mathcal{V}| T∈∣V∣。动作序列之间的token数量 n 可能不同,就像相同长度的句子可能被离散化为可变数量的文本token一样。
基于分箱的动作token化:动作token化最常用的方法是简单的分箱离散化。 对于给定的动作 a,这种方法独立地离散化每个维度,将训练数据集中值的范围划分为 N N N 个均匀的箱,最常用的是 N = 256 N=256 N=256。对于D维的动作序列 a 1 : H a_{1:H} a1:H,此token化方案将应用于每个时间步,从而产生最终的token序列 T a ( a 1 : H ) = [ T 1 , 1 , … , T 1 , D , … , T H , 1 , … , T H , D ] \mathcal{T}a(a1:H)=[T_{1,1},…,T_{1,D},…,T_{H,1},…,T_{H,D}] Ta(a1:H)=[T1,1,…,T1,D,…,TH,1,…,TH,D]。对于高频机器人数据,这种token化方案并非最优:很容易为每个动作片段生成数百个 token,使得难以训练并且推理速度慢。
Tokenization 对 VLA 模型训练的影响
创建了一个简单的合成时间序列数据集,其目标是预测一个插值四个随机生成点的三次曲线,如图3所示。这个问题反映了高频动作片段上训练的策略面临的挑战,即策略必须预测一系列连续的动作。训练一个小型自回归Transformer进行实验,序列时间步H从25到800,以模拟不同频率收集的动作数据。Navie方法表示将动作序列中的每一个元素进行256bins分箱操作。
实验结果表明,分箱方案的模型在低采样频率的条件下预测效果较好,但是随着采样频率增加,预测误差急剧增加。为什么呢?因为自回归模型的训练目标是下一个token预测,因此,他们的学习信号在给定 T 1 : i − 1 T_{1:i-1} T1:i−1 的情况下与 T i T_i Ti 的边际信息内容成正比。分箱方案随着采样频率的增加,边际信息接近于零:对于平滑信号,随着时间步长的缩短,每个时间步长的变化成比例地缩小。这极大地减慢了训练收敛速度,并且难以你和复杂的高频数据集。例如,OpenVLA在低频的 BridgeV2 和 RT-1 数据集上运行良好,但是对于高频的 DROID 数据集表现不佳。这说明为机器人动作设计更好的分词器的重要性。
通过时间序列压缩实现高效的动作分词器
为了解决前述提到的高频动作轨迹中的 冗余会导致每个action token的边际信息量低进而导致训练性能差的问题,需要一种能够将高度冗余的动作信号压缩减少成少量高信息量token的动作离散化方法。
本文使用基于离散余弦变换(DCT)的压缩算法构建FAST。DCT是一种频域变换,它将连续信号表示为各种频率的余弦元素之和。低频捕获信号的整体形状,而高频份量反映尖锐的跳变(sharp jumps)。
图4说明了FAST从原始机器人动作到action token的变换步骤。首先对输入动作进行归一化,然后对每个动作维度应用DCT,为了压缩信号,忽略不重要的系数,得到量化后的稀疏的矩阵。然后将矩阵展平为一个一维整数向量,然后训练一个BPE分词器将其无损压缩成稠密的token。
通用机器人动作分词器
FAST 中唯一需要学习的组件是 BPE 编码器的词汇表,这个词汇表需要针对分词器应用的每个新数据集进行循例那,虽然只需要几分钟,但也增加了使用FAST的难度。因此,使用100万个1s的动作块训练了一个通用的机器人动作分词器。已经开源并合入到Transformers库了。
训练所需要的数据集:数据集有多种动作空间:联合空间、末端执行器世界坐标系和末端执行器相机坐标系,以确保所得分词器的通用性。Open X-Embodiment、DROID和Bridge V2则以其原始形式包含在内。 在分词之前,所有动作都填充到32维,以适应不同维度的动作空间。
消融实验
模型基线:pi0、OpenVLA
实验目标:验证FAST分词器+自回归VLA模型的有效性
评估任务
如图5所示,包含7个评估任务(6个真实机器人任务,1个模拟任务),旨在测试VLA在高度灵巧的任务(例如折叠衣物)和泛化任务(例如在未见环境中进行0样本桌面操作)上的性能。
- Libero:在Libero [43]模拟基准套件上进行测试。测量了Libero-Spatial、Libero-Object、Libero-Goal和Libero-10的平均性能。
- 餐桌清理 [7] (20 Hz):一台UR5单臂机器人需要清理桌子,将12个物体分类到垃圾桶(用于垃圾)和塑料容器(用于盘子、碗、杯子和餐具)中。此任务需要精确抓取各种物体。
- 折叠T恤 [7] (50 Hz):一套双臂ARX机器人需要在一个静止的桌面上折叠各种衬衫。在任务开始时,衬衫平放在桌子上。 成功完成此任务需要精确的抓取和移动才能折叠衬衫。
- 杂货装袋 [7] (20 Hz):一台UR5单臂机器人需要将 7 个物体从桌子上装入杂货袋中,注意不要弄倒或撕破袋子。 此任务需要拾取各种各样的物体并小心地将它们放入袋中。
- 从烤面包机中取出吐司 [7] (50 Hz):一台双臂Trossen Viper-X机器人需要从烤面包机中取出两片面包并将它们放在盘子上。 此任务需要精确地抓取和放置面包片。
- 衣物折叠 [7] (50 Hz):一台双臂ARX机器人需要从篮子里取出衬衫和短裤,将它们平放在桌子上,然后折叠并堆叠起来。 这是我们测试中最灵巧的任务。 它需要精确的抓取,动态的动作来使衣物平整,在衣物缠结时进行重试和纠正,以及将折叠好的衣物精确地放置在现有的衣物堆上。报告了单个服装物品的成功率。
- 零样本DROID桌面操作 [38] (15 Hz):测试了一个在完整DROID数据集上训练的策略,该策略涵盖各种桌面操作任务,例如拾取和放置物体、擦拭、打开和关闭抽屉等。在未见的环境中测试该策略,该环境具有新的桌子设置、背景、新颖的物体、视角和桌子高度。这是第一次在完全未见的环境中对DROID策略进行“零样本”评估,无需协同训练或微调,只需使用自然语言提示预训练模型即可。
机器人动作分词器对比
使用1秒的动作片段。FAST分词器对所有数据集都实现了有效的压缩,高频动作上效果更显著,token为20-53。
先前工作中应用的naive分词方法难以在高频机器人数据上学习有效的策略。最高频的任务中尤为明显:餐桌整理 (20Hz) 和 T 恤折叠 (50Hz)。
FAST 分词技术实现了在 DROID 数据集上成功训练强大的通用策略,该策略可以通过自然语言提示,在未见过的环境中进行零样本评估,无需微调。所有先前的工作都没有显示零样本结果,而是完全专注于联合训练或微调评估。在三个大学的校园中对各种桌面操作任务进行测试,证明了策略的通用性(图 7)。 无需额外训练,该策略能够熟练地执行简单的操作任务,例如在各种场景和摄像机视角下拾取和放置物体、打开和关闭橱柜以及打开水龙头。即使是不成功的尝试也表现出合理的行为,例如靠近微波炉和洗碗机门的把手,即使最终未能打开它们。
消融研究
回答两个问题:
- FAST分词方法是否独立于底层VLA主干?
- BPE压缩步骤有多重要?
为了回答第一个问题,在高频T恤折叠数据集上训练了一个OpenVLA策略,修改了OpenVLA模型代码以接受多个输入图像并预测1秒的动作块。结果表明,FAST能够显著提高OpenVLA的性能,使其能够有效地训练高频机器人操作数据。这表明,分词方法独立于底层模型主干,并且可以轻松应用于各种预训练的自回归Transformer模型。
在桌面整理和T恤折叠任务上消融了BPE编码步骤。结果表明,没有BPE编码的策略获得了更差的性能(但仍然优于朴素分词)。 直观地说,DCT变换仍然将大部分信号信息集中在少数几个token中,从而改善了学习信号。 然而,如果没有BPE,就会出现大量重复的值为0的token,这会稀释学习信号,并显著减慢推理速度,因为模型需要自回归地预测数百个动作token,最终导致策略性能下降。
自回归VLA与扩散VLA对比
图 9 所示,在小型数据集(Libero,折叠T恤;<50小时)上,两种VLA的性能相当。 但是在像搬运桌子这样的大型数据集上,基于FAST的VLA收敛速度明显更快,在训练步骤比π0的扩散变体少3倍的情况下达到了高性能。使用FAST分词训练的自回归 π0 模型更严格地遵循语言指令:在DROID评估中,扩散π0模型经常忽略语言指令,导致分数较低。 未来会继续研究扩散和自回归VLA的语言遵循能力。
自回归VLA的一个当前局限性在于其推理速度:π0使用扩散模型通常可以在NVIDIA 4090 GPU上在100毫秒内预测一秒钟的动作片段,但π0模型使用FAST分词需要大约750毫秒的每个片段推理时间,因为它必须执行更多自回归解码步骤(通常需要解码30-60个动作token,而扩散模型π0需要10个扩散步骤)并使用完整的20亿参数语言模型主干进行自回归解码(而扩散模型π0使用3亿参数的“动作专家”)。 未来会继续研究离散token自回归Transformer模型的推理提速。
实验结论
本文介绍了 FAST,一种用于高频机器人控制数据的动作分词器。FAST使用离散余弦变换(DCT)和字节对编码(BPE)来压缩动作块,使得其具有更好的压缩效果。实验表明,与以前使用的简单动作离散化方法相比,FAST带来了显著的性能提升,并且优于基于矢量量化的更复杂的学习分词方法。
未来工作:
动作分词器。FAST是朝着通用机器人动作分词器迈出的重要一步,但仍有很多问题有待解决。在这项工作对静态机器人机械臂测试了 FAST。FAST+在其他机器人形态(如移动机器人、灵巧手和人形机器人)上具有良好的压缩能力。在这些平台上测试实际策略性能是未来工作的一个令人兴奋的方向。探索替代压缩方案,以及测试基于压缩的动作编码与非自回归解码方法(如扩散[7])的组合,是未来研究的有趣方向。
VLA 架构。本文初步探索了两种主要类型的 VLA 架构(自回归和扩散解码 VLA)之间的权衡,但最佳 VLA 架构仍未确定。未来工作应仔细研究训练速度、语言基础能力和任一方法的表达能力之间的权衡。
推理速度。 虽然π0-FAST 的整体性能与扩散π0匹配,但在推理时间上较慢。未来的工作应该探索加快自回归 VLA 模型推理速度的方法,以使它们能够解决高度动态的任务。
相关文章:

[EAI-023] FAST: Efficient Action Tokenization for Vision-Language-Action Models
Paper Card 论文标题:FAST: Efficient Action Tokenization for Vision-Language-Action Models 论文作者:Karl Pertsch, Kyle Stachowicz, Brian Ichter, Danny Driess, Suraj Nair, Quan Vuong, Oier Mees, Chelsea Finn, Sergey Levine 论文链接&…...

解锁微服务:五大进阶业务场景深度剖析
目录 医疗行业:智能诊疗的加速引擎 电商领域:数据依赖的破局之道 金融行业:运维可观测性的提升之路 物流行业:智慧物流的创新架构 综合业务:服务依赖的优化策略 医疗行业:智能诊疗的加速引擎 在医疗行业迈…...

java入门笔记基础语法篇(4)
变量 在Java中,每个变量都有一个类型(type)。在声明变量时,变量的类型位于变量 名之前。例如: int days; double salary; long earthPopulation; boolean done; 在Java中,每个声明以分号结束。变量名必须…...

java语法学习
目录 一、基础语法 1.注释 2.关键字 3.字面量 4.变量 定义与使用 存储 5.数据类型 6.标识符 7.集成环境 二、运算符 1.概念 2.种类 算术运算符 除法与取模 转化规则 自增减 赋值运算符 关系运算符 逻辑运算符 短路运算符 三元运算符 其它运算符 三、流…...

装饰SpringMVC的适配器实现响应自动包装
文章目录 1.common-tool-starter1.目录结构2.ResultWrapper.java 2.common-web-starter1.目录结构2.IgnoredResultWrapper.java 自定义注解,忽略对返回结果的自动包装3.ReturnValueHandlersDecorator.java 对适配器进行扩展的装饰器4.WebAutoConfiguration.java 将装…...

【Rust自学】15.4. Drop trait:告别手动清理,释放即安全
喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 15.4.1. Drop trait的意义 类型如果实现了Drop trait,就可以让程序员自定义当值…...

【算法】【归并排序】AcWing 算法基础 788. 逆序对的数量
题目 给定一个长度为 n 的整数数列,请你计算数列中的逆序对的数量。 逆序对的定义如下:对于数列的第 i个和第 j 个元素,如果满足 i<j且 a[i]>a[j],则其为一个逆序对;否则不是。 输入格式 第一行包含整数 n&#…...

一个局域网通过NAT访问另一个地址重叠的局域网(IP方式访问)
正文共:1335 字 7 图,预估阅读时间:4 分钟 现在,我们已经可以通过调整两台设备的组合配置(地址重叠时,用户如何通过NAT访问对端IP网络?)或仅调整一台设备的配置(仅操作一…...

05-机器学习-数据标注
一、学习数据标注的核心目标 数据标注不仅是“打标签”,而是理解数据与AI模型之间的桥梁。需要掌握: 标注技术:不同任务类型的标注方法(如分割、实体识别)。标注工具:高效使用专业工具(如CVAT…...

LQ1052 Fibonacci斐波那契数列
题目描述 Fibonacci斐波那契数列也称为兔子数列,它的递推公式为:FnFn-1Fn-2,其中F1F21。 当n比较大时,Fn也非常大,现在小蓝想知道,Fn除以10007的余数是多少,请你编程告诉她。 输入 输入包含一…...

AWTK 骨骼动画控件发布
Spine 是一款广泛使用的 2D 骨骼动画工具,专为游戏开发和动态图形设计设计。它通过基于骨骼的动画系统,帮助开发者创建流畅、高效的角色动画。本项目是基于 Spine 实现的 AWTK 骨骼动画控件。 代码:https://gitee.com/zlgopen/awtk-widget-s…...

分库分表后如何进行join操作
在分库分表后的系统中,进行表之间的 JOIN 操作比在单一数据库表中复杂得多,因为涉及的数据可能位于不同的物理节点或分片中。此时,传统的 SQL JOIN 语句不能直接用于不同分片的数据,以下是几种处理这样的跨分片 JOIN 操作的方法&a…...

arkui-x 前端布局编码模板
build() {Column() {Row() {// 上侧页面布局实现}// 下侧页面布局实现}.width(Const.THOUSANDTH_1000).height(Const.THOUSANDTH_1000).justifyContent(FlexAlign.SpaceBetween).backgroundImage($r(app.media.background_xxx)).backgroundImageSize(ImageSize.Cover).backgrou…...

宝塔面板SSL加密访问设置教程
参考:https://www.bt.cn/bbs/thread-117246-1-1.html 如何快速使用证书加密访问面板 因早期默认未开启https访问所以没有相关的风险提醒,现面板默认已开启https加密访问、提升安全性 由于采用的是服务器内部本身签发证书,不被公网浏览器信任请参考以下步…...

c++ set/multiset 容器
1. set 基本概念 简介: 所有元素都会在插入时自动排序本质: set/multiset属于关联式容器,底层结构是用二叉树实现。set 和 multiset 区别: set容器不允许有重复的元素。 multiset允许有重复的元素。2. set 构造和赋值 构造&a…...

前部分知识复习02
一、物体的屏幕UV坐标 float2 ScreenUV i.pos.xy / _ScreenParams.xy; 二、抓取屏幕图像 GrabPass{" _A "} //_A为贴图图像名称 之后需在Pass中声明该贴图才能在Pass中引用此贴图 三、屏幕抓取并制作热效应代码 Shader"unity/HeatDistort 07" {Pr…...

开发环境搭建-3:配置 JavaScript 开发环境 (fnm+ nodejs + pnpm + nrm)
在 WSL 环境中配置:WSL2 (2.3.26.0) Oracle Linux 8.7 官方镜像 node 官网:https://nodejs.org/zh-cn/download 点击【下载】,选择想要的 node 版本、操作系统、node 版本管理器、npm包管理器 根据下面代码提示依次执行对应代码即可 基本概…...

kotlin内联函数——let,run,apply,also,with的区别
一、概述 为了帮助您根据使用场景选择合适的作用域函数(scope function),我们将对它们进行详细描述并提供使用建议。从技术上讲,许多情况下范围函数是可以互换使用的,因此示例中展示了使用它们的约定俗成的做法。 1.…...

【深度学习|DenseNet-121】Densely Connected Convolutional Networks内部结构和参数设置
【深度学习|DenseNet-121】Densely Connected Convolutional Networks内部结构和参数设置 【深度学习|DenseNet-121】Densely Connected Convolutional Networks内部结构和参数设置 文章目录 【深度学习|DenseNet-121】Densely Connected Convolutional Networks内部结构和参数…...

数据结构与算法-要点整理
知识导图: 一、数据结构 包含:线性表(数组、队列、链表、栈)、散列表、树(二叉树、多路查找树)、图 1.线性表 数据之间就是“一对一“的逻辑关系。 线性表存储数据的实现方案有两种,分别是顺序存储结构和链式存储结构。 包含:数组、队列、链表、栈。 1.1 数组…...

Fort Firewall:全方位守护网络安全
Fort Firewall是一款专为 Windows 操作系统设计的开源防火墙工具,旨在为用户提供全面的网络安全保护。它基于 Windows 过滤平台(WFP),能够与系统无缝集成,确保高效的网络流量管理和安全防护。该软件支持实时监控网络流…...

Nginx实战技巧(Practical Tips for nginx)
引言 简介 Nginx(发音为 "engine-x")是一个高性能的HTTP和反向代理服务器. Nginx以其高并发处理能力、低资源消耗和灵活的配置而闻名,适用于高流量的Web服务器和应用程序。 Nginx的主要功能包括: HTTP服务器…...

YOLOv8:目标检测与实时应用的前沿探索
随着深度学习和计算机视觉技术的迅速发展,目标检测(Object Detection)一直是研究热点。YOLO(You Only Look Once)系列模型作为业界广受关注的目标检测框架,凭借其高效、实时的特点,一直迭代更新…...

解锁数字经济新动能:探寻 Web3 核心价值
随着科技的快速发展,我们正迈入一个全新的数字时代,Web3作为这一时代的核心构成之一,正在为全球数字经济带来革命性的变革。本文将探讨Web3的核心价值,并如何推动数字经济的新动能。 Web3是什么? Web3,通常…...

Lua 环境的安装
1.安装Lua运行环境 本人采用的是在windows系统中使用cmd指令方式进行安装,安装指令如下: winget install "lua for windows" 也曾使用可执行程序安装过,但由于电脑是加密电脑,最后都已失败告终。使用此方式安装可以安…...

Object类(2)
大家好,今天我们继续来看看Object类中一些成员方法,这些方法在实际中有很大的用处,话不多说,来看。 注:所有类都默认继承Object类的,所以可调用Object类中的方法,如equals,也可以发生…...

汽车网络信息安全-ISO/SAE 21434解析(中)
目录 第七章-分布式网络安全活动 1. 供应商能力评估 2. 报价 3. 网络安全职责界定 第八章-持续的网络安全活动 1. 网路安全监控 2. 网络安全事件评估 3. 漏洞分析 4. 漏洞管理 第九章-概念阶段 1. 对象定义 2. 网路安全目标 3. 网络安全概念 第十章 - 产品开发 第十…...

fatal error C1083: [特殊字符]ļ: openssl/opensslv.h: No such file or directory
一、环境 1. Visual Studio 2017 2. edk2:202305 3. Python:3.11.4 二、 fatal error C1083: 򿪰ļ: openssl/opensslv.h: No such file or directory 上图出现这个警告,不用管。 出现Done,说明编译成功。 执行上…...

C#System.Threading.Timer定时器意外回收注意事项
System.Threading.Timer定时器使用时会出现意外回收的情况。具体解释如下: 只要在使用 Timer,就必须保留对它的引用。对于任何托管对象,如果没有对 Timer 的引用,计时器会被垃圾回收。即使 Timer 仍处在活动状态,也会被回收。 实例对比测试 实例 定义两个类,其中一个…...

20.Word:小谢-病毒知识的科普文章❗【38】
目录 题目 NO1.2.3文档格式 NO4.5 NO6.7目录/图表目录/书目 NO8.9.10 NO11索引 NO12.13.14 每一步操作完,确定之后记得保存最后所有操作完记得再次删除空行 题目 NO1.2.3文档格式 样式的应用 选中应用段落段落→开始→选择→→检查→应用一个一个应用ctr…...