论文标题: Learning Bimanual Manipulation via Action Chunking and Inter-Arm Coordination with Transformers
作者: Tomohiro Motoda, Ryo Hanai, Ryoichi Nakajo, Masaki Murooka, Floris Erich, Yukiyasu Domae
机构: 产业技术综合研究所 (AIST), 日本
发表: arXiv:2503.13916 (v1, 2025-03-18)
基座: ACT (Action Chunking with Transformers)
关键词: 双臂操作、模仿学习、动作分块、Transformer、臂间协调、行为克隆
一句话总结:AIST 在 ACT 基础上加了一个臂间协调编码器(IACE),并把"每臂独立编码器 + 单/分裂解码器"的架构组合在 8 个真机双臂任务上做了系统消融——结论清晰得像选型手册:异步任务(两手各干各的)用分裂解码器,同步任务(两手一起干)用单解码器,而 IACE 是两条路线的共同地基(去掉后同步任务成功率从 98% 跌到 57%)。
一、介绍
1.1 双臂的"1+1"难题
双臂操作是机器人操作领域的硬骨头,也是这个系列博客的老朋友了——ALOHA、BRS、iDP3 里都绕不开它。但 AIST 这篇提出的问题更"元"一层:双臂策略网络的架构本身该怎么设计?
直接的做法是把双臂自由度拼起来端到端学(ACT 的做法),但作者指出这隐含两个问题:
作者的核心假设(hypothesis)很明确:深度单臂学习是学好双臂操作的前提。所以架构上应该给每只手一条独立的信息通路(独立编码器),再显式地建一条"协调通路"(IACE)。
1.2 与前作们的位置关系
这篇的定位是架构研究而非算法创新——它站在 ACT 的肩膀上(CVAE + 动作分块 + 时序集成全部保留),研究的问题是"编码器和解码器怎么摆"。相关的同类工作:
- INTERACT(Lee et al., CoRL 2024):层级注意力 Transformer 同步双臂轨迹——思路同源,但那是完整的新方法,本文是 ACT 上的最小侵入式改造 + 系统消融;
- Shikada et al.(IROS 2024):层级深度预测学习模型做双臂同步——用 RNN 路线,本文走 Transformer;
- π0、RDT-1B:基础模型路线,大数据堆泛化——本文反其道而行,研究小数据(每任务 50 条演示)下的架构效率。
1.3 任务的二分法:异步 vs 同步
实验设计沿用了 Krebs & Asfour 的双臂操作分类法(bimanual taxonomy),把任务切成两类:
- 异步任务(Asynchronous):左右臂动作相互独立、先后执行。例:折毛巾(先拿再放)、锤击(先抓锤再挥)、交接(一只手递一只手接)——4 项;
- 同步任务(Synchronous):双臂同时、协调地动。例:双人抬毛巾(必须同时抬否则掉)、开工具箱(一手按箱体一手开盖)、抬板(两点同时发力否则板翻)——4 项。
这个二分法直接决定了后面的核心结论:两类任务的最优解码器架构是相反的。这是全文最有价值的发现。
二、原理
2.1 基座:ACT 的快速回顾
ACT(Action Chunking with Transformers)的要素全部保留:
- 观测编码:4 路 RGB 相机(左右腕 + 上方 + 下方俯视)→ ResNet18 → 视觉特征 token;双臂关节位置序列 → 拼进输入序列;
- CVAE:条件变分自编码器建模人类示教的风格变化(同一个人做 50 次折毛巾,每次轨迹细节都不同,CVAE 用隐变量 z 吸收这种多样性);
- 动作分块(action chunking):不逐步预测,一次预测未来一段动作序列;
- 时序集成(temporal ensemble):推理时对过去多个时间步的预测按指数权重融合,平滑输出。
2.2 架构:三段式信息流
本文的改造集中在编码器-解码器的组织方式上,形成三段式结构(对应论文 Figure 1):
输入序列的三个 segment(各带 CLS token + 位置编码):
① 左臂 segment: 左臂关节序列 + 左腕相机 + 全局相机特征
② 右臂 segment: 右臂关节序列 + 右腕相机 + 全局相机特征
③ 全局 segment: 双臂关节 + 全部相机特征
第一层:双臂局部编码器。 每只手臂一个独立的 Transformer encoder,只吃自己的关节 + 自己的腕部相机(+ 全局视觉特征)。这就是"深学单臂技能"的架构化体现——左臂编码器不需要理解右臂的腕部视野,专注把自己的轨迹学扎实。
第二层:IACE(Inter-Arm Coordinated Transformer Encoder)。 全局的协调编码器,同时吃双臂状态 + 捕捉整个场景的视觉信息,负责建模式同步和时序对齐——“左手什么时候该动、动多快,取决于右手现在在哪”。它是独立于两个局部编码器的一条显式协调通路,输出协调 token 供解码器使用。
第三层:解码器的两种摆法(消融核心)。
- 单解码器(Single Decoder):把左右臂编码器输出 + IACE 输出拼接后喂给一个共享的 Transformer decoder,一次性输出双臂动作块(batch output)。信息全局共享,适合需要紧密耦合的任务;
- 分裂解码器(Split Decoders):两个独立 decoder,各自只吃自己臂的编码器输出 + IACE 输出,分别输出左/右臂动作块。各管各的,IACE 作为唯一的协调桥梁,适合两臂任务解耦的场景。
直觉类比(编码视角):单解码器像联合编码——把左右两路信号当一个对象整体压缩,冗余信息共享,同步性好但灵活性差;分裂解码器像独立编码 + 一条公共参考流——两路各自最优,靠 IACE 这条"参考流"对齐时序。哪个好取决于源信号的耦合度——这恰好就是异步/同步任务的分野。
2.3 训练与推理细节
- 数据:ALOHA 遥操作系统采集(操作员慢速操作提精度),关节位置 + RGB 图像,原始 50 Hz;
- 50 Hz → 25 Hz 降采样:作者发现原始帧率下关节值的微小抖动导致训练输出不稳定,降采样到 25 Hz 后训练稳定——动作分块模型对高频遥操作噪声敏感,这是个实用的经验值;
- 每任务 50 条演示;AdamW,λ=1e-5,5000 epochs,batch 8,单卡 RTX 4090(24GB);
- 推理耗时约 0.02 s,动作分块 + 时序集成输出平滑轨迹。
三、公式
这篇论文正文没有公式(6 页短文,架构以图代数),核心数学都继承自 ACT。为完整性,把被继承的关键公式列出,并标注 IACE 改动的落点。
3.1 CVAE 的变分下界
ACT 用 CVAE 建模示教风格多样性。变分自编码器的目标(ELBO):
LELBO=Ez∼qϕ(z∣o,y)[logpθ(y∣z,o)]−DKL(qϕ(z∣o,y) ∥ p(z))\\mathcal{L}_{\\text{ELBO}} = \\mathbb{E}_{z \\sim q_\\phi(z|o, y)} \\left[ \\log p_\\theta(y | z, o) \\right] – D_{\\text{KL}}\\left( q_\\phi(z | o, y) \\,\\|\\, p(z) \\right)LELBO=Ez∼qϕ(z∣o,y)[logpθ(y∣z,o)]−DKL(qϕ(z∣o,y)∥p(z))
- yyy:目标动作块(未来多步双臂关节位置序列);
- ooo:观测(图像特征 + 关节位置);
- zzz:风格隐变量,编码器 qϕq_\\phiqϕ 以 (观测, 目标) 为条件——注意 z 编码器看得见真值动作,所以学到的是"这条轨迹的风格";采样阶段 zzz 从先验 p(z)∼N(0,I)p(z) \\sim \\mathcal{N}(0,I)p(z)∼N(0,I) 抽取;
- 第一项是重建项,第二项 KL 约束把风格分布拉向标准正态。
IACE 不改这一层——风格建模与协调建模解耦。
3.2 输入序列组装(IACE 落点)
三段序列的形式化(以单解码器为例):
input=[CLSL,s1L,…,skL]⏟左臂段⊕[CLSR,s1R,…,skR]⏟右臂段⊕[CLSG,g1,…,gm]⏟全局段⊕PE\\text{input} = \\underbrace{[\\text{CLS}_L, s^L_1, \\dots, s^L_k]}_{\\text{左臂段}} \\oplus \\underbrace{[\\text{CLS}_R, s^R_1, \\dots, s^R_k]}_{\\text{右臂段}} \\oplus \\underbrace{[\\text{CLS}_G, g_1, \\dots, g_m]}_{\\text{全局段}} \\oplus \\text{PE}input=左臂段[CLSL,s1L,…,skL]⊕右臂段[CLSR,s1R,…,skR]⊕全局段[CLSG,g1,…,gm]⊕PE
- siL,siRs^L_i, s^R_isiL,siR:左/右臂的关节值与对应腕部相机 ResNet18 特征 token;
- gjg_jgj:双臂关节 + 全部相机特征;
- PE 为位置编码;每段开头的 CLS token 汇聚本段信息(论文引用 BERT 的 CLS 机制)。
IACE 的改动:在局部编码器之后插入一个全局协调编码器,其自注意力作用于拼接后的双臂 + 全局 token:
Hcoord=TransformerEncIACE([EL;ER;EG])H_{\\text{coord}} = \\text{TransformerEnc}_{\\text{IACE}}\\left( [E_L; E_R; E_G] \\right)Hcoord=TransformerEncIACE([EL;ER;EG])
其中 EL,ERE_L, E_REL,ER 为左右局部编码器输出,EGE_GEG 为全局段编码。正是这一步让"右手状态"成为"左手决策"的显式上下文。
3.3 动作分块与时序集成
解码器(query 位置嵌入为输入)输出未来 kkk 步动作块:
at:t+k=TransformerDec(query=Paction, key/value=[Hcoord;EL;ER])a_{t:t+k} = \\text{TransformerDec}(\\text{query}=P_{\\text{action}},\\ \\text{key/value}=[H_{\\text{coord}}; E_L; E_R])at:t+k=TransformerDec(query=Paction, key/value=[Hcoord;EL;ER])
单解码器一次出双臂联合块(2×ndof2 \\times n_{\\text{dof}}2×ndof 维);分裂解码器出两个独立块。推理时对时间上重叠的预测做指数加权融合:
a^t=∑iwi at(t−i)∑iwi,wi=exp(−λi)\\hat{a}_t = \\frac{\\sum_{i} w_i \\, a_t^{(t-i)}}{\\sum_i w_i}, \\quad w_i = \\exp(-\\lambda i)a^t=∑iwi∑iwiat(t−i),wi=exp(−λi)
较新的预测权重更高,旧预测逐渐失效——这层集成抹平了分块切换时的边界抖动。
四、图示
4.1 五种被测架构(对应论文 Figure 1 & Figure 5)
(a) Ours 单解码器 (b) Ours 分裂解码器
┌──────────────────┐ ┌──────────────────┐
│ 左臂Enc┐ │ │ 左臂Enc ─┐ │
│ 右臂Enc┼─▶ IACE ──┼─▶ 单Dec │ 右臂Enc ─┼─▶IACE │
│ 全局Enc┘ │ (拼输入) │ 全局Enc ─┘ │ │
│ │ │ ┌─────┴────┐ │
│ 输出: 双臂联合动作块 │ │ 左Dec◀─┤ │ │
└──────────────────┘ │ 右Dec◀─┘ (各自+IACE) │
│ 输出: 左右独立动作块 │
└──────────────────┘
(c)(d) 去掉 IACE 的对应消融版 (e) ACT 基线 (无分臂Enc, 无IACE)
4.2 任务二分法与架构选型结论
异步任务 (两手各干各的) 同步任务 (两手必须配合)
┌────────────────────────┐ ┌────────────────────────┐
│ Fold Towel 折毛巾 │ │ Lift & Place Towel 抬放毛巾│
│ Hand-over CAN 递罐子 │ │ Lift Board 抬板 │
│ Hit with Hammer 挥锤 │ │ Open Toolbox 开工具箱 │
│ Hand-over Silver Bag 递包 │ │ Open Lid 开盖 │
└────────────────────────┘ └────────────────────────┘
平均 89.3% ✅ 分裂解码器 平均 98.4% ✅ 单解码器
(单解码器 85.8%) (分裂解码器 90.4%)
└────── 共同地基: IACE ──────┘
去掉 IACE: 异步 89→75/60, 同步 98→57 (灾难性塌方)
4.3 实验配置速查表
| 机器人 | 2 × ViperX 300S(ALOHA 改装:调相机高度、加防护布) |
| 相机 | 4 路 RGB:左/右腕 + 上方俯视 + 下方水平视 |
| 遥操作 | ALOHA 主从臂,50 Hz 采集 → 25 Hz 训练 |
| 数据量 | 每任务 50 条演示 × 8 任务 |
| 优化 | AdamW,λ=1e-5,5000 epochs,batch 8 |
| 硬件 | Core i9 / 128GB RAM / RTX 4090 24GB |
| 推理延迟 | ~0.02 s |
| 评测 | 每任务 25 episodes |
五、踩坑点
范式级
坑 1:flatten 双臂自由度 ≠ 学会双臂。
这是全文的中心论点:把 21 维动作向量(或任意双臂拼接)直接端到端学,网络没有结构性动力去分别掌握每只手的技能,也没有显式通道去建模左右互依赖。消融数据支撑得很硬:去掉 IACE 后,同步任务平均成功率从 98.4%/90.4% 掉到 56.8%/57.6%——掉掉 40 个百分点,接近随机失败。协调不是"希望能学到",而是要给一条专门的通路。
坑 2:解码器架构没有万能答案——任务耦合度决定一切。
分裂解码器在异步任务赢(89.3% vs 85.8%),单解码器在同步任务赢(98.4% vs 90.4%)。原因直白:异步任务里两臂目标相互独立,分裂解码避免了"另一只手的噪声梯度"污染本臂动作;同步任务里两臂动作本质是一个整体(抬毛巾时左右必须镜像对称),分裂解码切断了低层信息共享,全靠 IACE 单点协调,反而吃亏。做架构选型前先问自己的任务属于哪一类。
坑 3:遥操作数据的高频噪声会打爆动作分块训练。
50 Hz 遥操作数据里,人手的微小抖动让相邻帧关节值高频振荡,ACT 式分块预测在这种数据上输出不稳定。降采样到 25 Hz 训练后稳定。这个坑和采样率-控制带宽的关系值得细品:分块模型预测的是"平滑意图",采样率高于意图带宽时,数据里全是噪声而没有意图。
坑 4:小数据下的 Diffusion Policy 不公平。
作者明确说不跟 Diffusion Policy 比:按 INTERACT 的结论,DP 在 50 条演示量级下根本学不动。这不是 DP 不行,是数据预算决定算法选型——50 条演示、5000 epochs、单卡 24GB 是这篇的预算约束,ACT 系架构正是为这个预算生的。
坑 5:基线选择的正当性要提前布防。
作者引用 Lee et al. 的结论为"只和 ACT 比"辩护(DP 需要更多数据、ACT 已在双臂任务上胜过多个策略)。这在审稿意义上是合理的,但读者应意识到:本文的比较对象是"架构变体",不是"SOTA 方法"——它回答"怎么摆编码器解码器",不回答"哪种算法最强"。
工程级
坑 6:每段开头的 CLS token 是廉价但关键的设计。
多段输入序列里,没有 CLS 汇聚的话,段级摘要信息只能靠注意力自发形成,训练不稳定。这是从 BERT 借来的老技术,在机器人策略里同样好使。
坑 7:真实场景的物理防护。
实验台上加了防护布(protective tarp),相机高度重新调整——双臂挥锤、抬板这类任务,策略失败一次就是物理碰撞。真机实验的工程预算里,防护永远该排在精度前面。
坑 8:作者自己承认提升幅度任务相关。
结论里明确写:“depending on the type of tasks, the improvement in success rate by the proposed method may not be significant”。看数据确实如此:Open Toolbox、Open Lid 上各架构几乎都 100%,IACE 的价值集中在需要精细协调的任务(抬放毛巾、折毛巾、挥锤)上。简单同步任务上堆架构是浪费。
六、源码拆解
论文未附官方代码(以论文正文 + 架构图为准重建伪代码;基座实现可直接复用 ACT 开源仓库)。
6.1 整体前向(对应论文 Figure 1a/1b)
# 伪代码:基于 ACT 的 IACE 架构。对应论文 Fig.1
class IACE_ACT(nn.Module):
def __init__(self, single_decoder=True):
self.img_backbone = ResNet18() # 4 路相机共享主干
self.enc_left = TransformerEncoder() # 左臂局部编码器
self.enc_right = TransformerEncoder() # 右臂局部编码器
self.enc_global= TransformerEncoder() # 全局段编码器
self.iace = TransformerEncoder() # ★ 臂间协调编码器 (核心)
if single_decoder:
self.decoder = TransformerDecoder() # 单解码器: 拼接输入
else:
self.dec_left = TransformerDecoder() # 分裂解码器
self.dec_right = TransformerDecoder()
self.cvae_enc = CVAEEncoder() # 风格隐变量 z
self.chunk_size = k # 一次预测 k 步
def build_sequence(self, joints_L, joints_R, cams):
# 每个 segment: CLS token + 逐帧 token + 位置编码
seg_L = with_cls(self.enc_left( tokens(joints_L, feats(cams.wrist_L))))
seg_R = with_cls(self.enc_right( tokens(joints_R, feats(cams.wrist_R))))
seg_G = with_cls(self.enc_global(tokens(cat(joints_L, joints_R),
feats(cams.upper, cams.lower))))
return seg_L, seg_R, seg_G
def forward(self, obs, z=None):
seg_L, seg_R, seg_G = self.build_sequence(**obs)
# ★ IACE: 双臂+全局 token 拼接后过协调编码器 → 同步与时序对齐
H_coord = self.iace(cat(seg_L, seg_R, seg_G))
if self.single_decoder:
memory = cat(seg_L, seg_R, H_coord) # 全部拼给单解码器
return self.decoder(action_queries, memory) # (k, 2*ndof) 联合块
else:
a_L = self.dec_left (action_queries_L, cat(seg_L, H_coord))
a_R = self.dec_right(action_queries_R, cat(seg_R, H_coord))
return a_L, a_R # 各自独立块
6.2 训练循环(对应论文 Section III-B)
# 伪代码:训练。对应论文 III-B 实现细节
# 数据: ALOHA 遥操作 50Hz 采集 → 降采样 25Hz (坑3: 高频抖动导致训练不稳)
for epoch in range(5000):
joints_L, joints_R, images, targets = sample_batch(batch=8) # 25Hz
z = self.cvae_enc(images, targets) # z 编码器看得见目标 → 吸收风格变化
z = reparameterize(z) # z ~ N(mu, sigma), KL 约束
pred = model(obs, z)
loss = l1_loss(pred, targets) + 1e-5 * kl_loss # ACT 损失: L1 + KL
adamw_step(lr=..., weight_decay=1e-5)
6.3 推理:分块 + 时序集成(对应论文 Section III-B 末)
# 伪代码:推理。对应论文 "temporal ensemble" + "action chunking"
action_queue = TemporalEnsembleBuffer(exp_weight=exp(–lambda*i))
@torch.no_grad()
def control_loop(t): # ~0.02s 每次推理
z = prior_sample() # 采样阶段: z 从 N(0,I) 抽
chunk = model(obs, z) # 一次预测未来 k 步
action_queue.push(chunk, t) # 与历史预测按指数权重融合
return action_queue.weighted_action(t) # 平滑输出当前步动作
6.4 关键超参数与设计决策表
| 训练频率 | 50 Hz 采集 → 25 Hz 训练 | 高频关节抖动导致输出不稳定(坑3) |
| 演示量 | 每任务 50 条 | ACT 原配置 |
| 优化 | AdamW, λ=1e-5, 5000 epochs, batch 8 | 论文 III-B |
| 风格建模 | CVAE + 隐变量 z | 继承 ACT |
| 输出 | 动作分块(k 步序列)+ 时序集成 | 继承 ACT |
| 视觉主干 | ResNet18(4 路相机) | 继承 ACT |
| 协调机制 | IACE(独立协调编码器) | 本文贡献 |
| 解码器 | 异步→分裂 / 同步→单 | 本文实验结论 |
七、效果对比
7.1 八个真机任务 × 25 episodes(Table I)
注:异步任务的原始表格在 PDF 提取中列序有错位,下表的行均值经逐行求和核算(与论文"平均比 ACT 高 8-9%"的声明交叉验证一致),个别单元格归属以正文明确叙述的数字为准。
异步任务(4 项,9 个子指标)平均成功率:
| ACT | 82.2% |
| Ours(单解码器) | 85.8% |
| Ours(分裂解码器) | 89.3% |
| Ours(单解码器)w/o IACE | 60.4% |
| Ours(分裂解码器)w/o IACE | 74.7% |
同步任务(4 项,5 个子指标)平均成功率:
| ACT | 80.8% |
| Ours(单解码器) | 98.4% |
| Ours(分裂解码器) | 90.4% |
| Ours(单解码器)w/o IACE | 56.8% |
| Ours(分裂解码器)w/o IACE | 57.6% |
全部 14 个子指标总平均: ACT 81.7% → Ours 单解码器 90.3% / 分裂解码器 89.7%——约 +8.6 个百分点,与论文摘要"8-9% higher success rate than ACT"完全吻合。
正文点名的高亮对比:
- 折毛巾:分裂解码器捡放全 96%,ACT 捡 92% / 放 88%;
- 递银包:ACT 和分裂解码器双双 100%(抓取 + 交接);
- 抬放毛巾(同步):ACT 的"放"子指标仅 4%,Ours 单解码器 96%——同步协调差距最刺眼的一个数字。
7.2 IACE 消融:坐标最重要的发现
| Ours(分裂)+ IACE | 89.3% | 90.4% | 89.7% |
| Ours(分裂)w/o IACE | 74.7%(↓14.6) | 57.6%(↓32.8) | 74.7% |
| Ours(单)+ IACE | 85.8% | 98.4% | 90.3% |
| Ours(单)w/o IACE | 60.4%(↓25.4) | 56.8%(↓41.6) | 60.4% |
两个读法:
7.3 一句话总结对比表
异步任务 同步任务 总均值
ACT 基线 82.2% 80.8% 81.7%
Ours(单) 85.8% 98.4% ★ 90.3%
Ours(分裂) 89.3% ★ 90.4% 89.7%
─────────────────────────────────────────────────────
去掉 IACE: 60~75% (异步) 57% (同步) ← 架构核心是 IACE, 不是解码器摆法
八、总结
8.1 核心思想一句话
双臂策略的架构不该是"维度拼接"的黑箱,而应该是"每臂一条深学通路 + 一条显式协调通路(IACE)"的分层设计——且解码器按任务耦合度选型:异步用分裂,同步用单。
8.2 边界
论文短小,边界也明摆着:
- 基线只有 ACT 一个,没有验证 IACE 思想能否迁移到 Diffusion Policy、SARNN 等其他算法(作者自己在结论里承认这是待办);
- 任务全部是桌面双臂,没有移动、没有全身协调(对比 BRS 的 21-DoF 全身任务),协调问题被简化在"两只手"的尺度;
- 每 task 50 条演示、固定 8 个任务——架构结论的外推范围(更多任务、更多数据量、其他机器人平台)未经检验;
- 提升幅度在部分简单任务上不显著(作者自己承认),IACE 的价值集中在协调敏感型任务。
8.3 与系列前三篇的连线
四篇连读,"协调"这个主题出现了三种截然不同的建模范式,非常值得对照:
| 协调对象 | 全身 25-DoF | 底盘-躯干-双臂 | 多阶段动作 | 左右臂 |
| 协调机制 | 隐式(端到端扩散) | 自回归条件链(上游→下游) | 调度器切换阶段 | 对称插入编码器 |
| 协调结构 | 无显式结构 | 有向层级(运动学序) | 时间序 | 对称双向(左右对等) |
| 任务性质 | 操作 | 全身操作 | 行走+交互 | 双臂操作 |
IACE 的协调是对称的(左右臂平等互查),BRS 的协调是有向的(底盘→躯干→臂,按运动学因果序),这个差异本身就是设计洞察:当协调双方没有天然的因果层级时(双臂对等),对称插入式协调更合适;当存在明确的因果链时(底盘误差放大末端误差),自回归条件链更合适。
8.4 延伸
用编码的类比收尾:这篇论文本质上是给"多通道信号联合建模"做了一次编码结构消融——分裂解码器 = 各通道独立编码 + 公共参考流(IACE),单解码器 = 联合编码,而"异步 vs 同步任务"就是通道间相关性的高与低。信号处理里早有结论:通道相关性低时独立编码更优(去除冗余开销),相关性高时联合编码更优(利用相关性)——机器人架构设计正在重新发现这些经典权衡,而 IACE 的角色恰好是那条"公共参考流":不管你怎么编码各通道,时序对齐的信息总得有一条专门的通路来传。
博客基于 arXiv:2503.13916v1 (2025-03-18) 撰写。注:论文 Table I 的异步任务部分在 PDF 文本提取中列序存在错位,博客中各行均值经逐行求和核算并与论文摘要声明(+8-9%)交叉验证;正文明确叙述的具体数字(折毛巾 96% vs 92/88%、银包 100%、抬放毛巾 ACT 放置 4%)均直接引自原文。
网硕互联帮助中心

评论前必须登录!
注册