UniTexture:用通用纹理暴露VLA模型的跨任务脆弱性 如果有一块纹理图案贴在桌面、机械臂夹爪或者目标物体表面能让一个视觉-语言-动作模型VLA在抓取、推动、放置等多个不同类型的任务里同时出现判断错误你会怎么想大多数人的第一反应可能是“模型遇到了分布外噪声”或者“某个任务的数据不够”。但 UniTexture 这个研究方向给出了一种更系统性的解释这不一定是你数据里的随机问题而可能是模型在跨任务共享的视觉表示上存在一类可以被纹理触发的系统性漏洞。它既是一类对抗样本研究也是一面拿来审视 VLA 模型到底“看到了什么”的镜子。这篇文章我想从 VLA 模型的决策链路、UniTexture 这类跨任务通用对抗纹理的设计逻辑聊到实际工程中应该如何做鲁棒性评测。重点不是教你如何构造攻击而是讲清楚当一个项目标题里同时出现 universal、texture、cross-task 时它背后关注的工程问题到底是什么以及你在部署或评估 VLA 模型时为什么不能只盯着单任务成功率的数字。1. VLA 模型真的看清了物体还是只认清了纹理VLA 模型的全称是 Vision-Language-Action Model国内也常称为“视觉-语言-动作模型”。它与传统视觉模型最大的区别是不再只输出一个类别标签或检测框而是需要结合图像和自然语言指令生成一段机器人可以执行的动作序列。听起来像是三个成熟模块拼在一起视觉编码器看懂场景语言模型理解指令动作头输出关节角或末端位姿。但实际落地时你会发现VLA 并不是“三个模型拿胶水粘起来”那么简单。图像和语言要先在某个共享表示空间里对齐再映射到动作空间上。这个链路越长中间可以出错的位置就越多而且错误不一定发生在显式的“分类错误”上更多时候是隐性地被带偏。1.1 多模态链路叠加后错误更容易被放大传统图像分类模型的输入输出相对直接像素进入视觉骨干最后接一个分类头。如果图片里加了一个很小的噪声视觉骨干可能仍然输出正确类别因为很多分类任务中存在冗余特征。VLA 则完全不同。它的输入里包含了视觉特征、语言指令的语义特征以及机器人当前状态、任务目标等信息。动作输出往往是一个连续轨迹或者一组离散动作参数。哪怕视觉骨干提取的高层特征里只有一小部分被污染经过跨模态注意力、状态历史融合、动作头回归这些环节这个偏差也可能被逐步放大成完全偏移的动作指令。更麻烦的是传统图像任务的对抗扰动通常以“最不明显的方式骗过分类器”为目标。但对 VLA 这种多模态决策模型来说对抗扰动不一定要让模型看不见物体只需要让模型“对物体的理解发生偏移”。例如把“杯子”识别成“可以推的物体”或者导致模型对“夹爪靠近”这个动作产生错误的置信度。这种错误的理解不一定会直观显示在目标检测框里而是直接体现在动作输出上。1.2 纹理一个容易被忽略的物理对抗信号如果你在数字图像领域做过对抗样本会知道最常见的手法是直接修改输入图像的像素值。但在机器人场景里攻击者通常无法直接修改摄像头传回的画面——这是一个非常不现实且脆弱的假设。所以机器人领域的对抗研究更关注“物理可实现扰动”也就是把扰动打印成贴纸、改变物体表面的纹理、或者改变光照后形成的真实视觉变化。UniTexture 选择的载体就是“纹理”。这非常有意思纹理和颜色、形状不一样它往往是任务无关的。人类判断“一个红色马克杯能不能抓”时不会因为杯身上的花纹是波点还是格子就改变策略。但如果模型在训练数据里潜在地学习到了“特定纹理与某种动作结果高度相关”那么一块经过设计的纹理就可能让模型在真实环境里产生错误动作。这也解释了为什么 UniTexture 这样以 texture 命名的工作会在最近受到关注在物理世界的机器人任务中纹理比局部像素噪声更容易被实体化同时又比修改三维几何结构更容易被优化。2. UniTexture 的三个关键词纹理、通用、跨任务只看标题UniTexture 可以拆成两个关键表达Universal Adversarial Textures以及 Cross-Task。这个命名本身就透露出它想解决的问题边界不是生成只针对一个任务、一个场景、一个物体有效的对抗噪声而是希望生成一个可以跨任务使用的通用对抗纹理。它在学术上的“卖点”看起来是攻击更高效但对我而言它真正的价值在于跨任务通用扰动往往意味着模型内部存在一个共同的高层表示弱点。你只要找到这个弱点就能用一个输入扰动在很多任务上同时产生影响。2.1 Universal Adversarial Texture 不是“万能贴纸”先说 universal。在对抗样本研究里universal 的含义是同一个扰动能够欺骗模型对大量不同输入样本的预测。放到 VLA 里这里的“样本”可以是不同图像、不同语言指令、不同物体或者不同任务状态。一个严格的通用扰动设计需要考虑的维度很多物体类别变化同一个纹理贴在杯子上有效贴在剪刀上是否还能影响模型场景背景变化换一个桌面、换一种光照贴纸是否仍然起作用视点变化机械臂从不同角度观察纹理透视和畸变会不会破坏扰动效果任务变化抓取任务被扰动推动、放置、倒水这类任务是否也会被影响。“通用”并不是一个零点/一点的性质而是一个泛化谱系有的扰动只能在同一任务的不同实例上迁移有的能跨任务迁移有的能在跨场景、跨视角、跨光照下保持稳定。UniTexture 既然叫 Cross-Task Universal重点显然放在“跨任务迁移”这个维度上同一个纹理干扰不同 VLA 任务的能力。2.2 为什么纹理是比噪声更“自然”的扰动形式纯数字噪声的优势是可以做到非常小但它移植到物理世界后很难存活。光线稍微变化、打印色差、相机传感器去噪都可能让高频噪声失效。纹理的优势在于它和正常物理表面特征高度一致。比如陶瓷杯上的不规则色块、桌面上的防水贴纸、机器人夹爪上的硅胶纹理在模型眼里都是合理存在的图像内容但却是经过优化的对抗信号。它不会直接被预处理模块当作异常噪声过滤掉而且可以像普通贴纸一样贴在物体表面。从优化角度看纹理天然存在于 UV 贴图空间。研究者可以先对三维物体建一个可微渲染流程让纹理作为可优化变量通过可微渲染投影到图像传感器上再回传梯度到纹理的每个像素。这个流程和传统数字对抗样本的区别在于目标不是优化图像平面上的扰动量而是优化物体表面材质属性。纹理在视角变化时会发生透视变形因此直接在屏幕上优化二维像素并不能保证贴在三维表面后有效。这也是为什么“纹理”类攻击的研究需要更复杂的渲染和采样过程。2.3 Cross-Task 揭示的是共享表示问题从研究和工程实践角度跨任务对抗扰动最关键的机制不是它骗过了语言模型或动作头而是它污染了多个任务共享的视觉表示。一个 VLA 模型通常通过一个视觉编码器把图像转换成“场景表示”这个表示会提供给后续的指令对齐模块和动作生成模块。如果很多任务共享同一套视觉编码器那么当对抗纹理让视觉编码器输出一个偏差很大的场景表示时下游每个任务都会基于这个错误表示继续做推理。任务 A 的动作头可能正好容忍了这个偏差任务 B 的动作头则被放大成完全不同的执行结果而任务 C 可能因为语言指令帮助模型重新校准抵抗住了干扰。这给了我们一个很有意思的启示如果我们想判断 VLA 模型的视觉表示是否健康跨任务通用扰动比单任务扰动要灵敏得多。一个扰动能够在多个任务上同时造成失败说明它不是偶然触发了某个动作头的小概率错误而是击中了一个系统性的特征盲区。3. 单任务成功率会掩盖全局问题一种更完整的鲁棒性评测框架我在很多项目评估报告里看到过类似情况VLA 模型在桌面抓取任务上测出了 95% 的成功率于是大家觉得模型已经适合进入灰度测试。但在后续加入一件带花纹的衬衫、一块木纹桌垫、一个表面有彩色图案的收纳盒之后模型成功率骤降。这里常见的第一反应是“数据没覆盖到”然后去补采集数据。可是补了一轮之后可能仍然会发现某个看似正常的纹理图案会在低概率下触发完全错误动作。这让我越来越相信单任务、单场景、单纹理分布上的成功率不能作为 VLA 模型鲁棒性的完整证据。我们需要一套更系统的评测框架。3.1 从单任务对抗评测到跨任务通用对抗评测传统对抗鲁棒性评测通常会先选定一个任务比如图像分类然后在测试集上叠加对抗扰动最后观察准确率下降幅度。对这种评测模型的鲁棒性结论只对当前任务成立。VLA 模型要处理的是不同任务之间的共享视觉表示因此更建议把评测分成四个阶段评测阶段输入条件主要回答的问题一个典型失败模式干净场景基线标准光照、无故意扰动模型在目标任务上是否基本可用某个任务本身成功率为 0说明任务定义有问题自然域随机化随机纹理、颜色、材质、光照模型是否真的理解物体属性还是依赖表面特征换了可正常识别的纹理后成功率剧烈下降单任务对抗纹理针对任务A优化的纹理当前任务的决策链路是否存在可被利用的漏洞任务A的识别被干扰其他任务正常跨任务通用对抗纹理针对若干任务联合优化的纹理模型是否存在跨任务共享的脆弱表示一个纹理同时压低任务A、B、C成功率如果模型在第二阶段就出现大幅下降说明它更多依赖表面统计特征而非语义特征。这种情况都不一定需要对抗纹理自然材质变化足以让它失败。第三阶段能帮我们发现单条能力链路上的薄弱点。第四阶段测试的才是模型底层通用表示是否稳健。3.2 跨任务评测时怎么定义“攻击成功”更合理单任务分类模型用 accuracy 下降即可。VLA 模型的输出是高维动作空间一个动作错误会以多种方式呈现轨迹偏移、夹爪张开时机错误、目标物体选择错误、甚至在任务中途停顿。我建议在评测中定义三种粒度的失败策略级失败任务最终是否成功完成比如是否把物体放到指定位置动作级失败动作序列和参考轨迹之间的偏差是否超过安全阈值比如机械臂末端是否偏离目标物体太远感知级失败目标物体定位、抓取点估计或场景描述是否出现明显错误。跨任务通用纹理评测的重点是看“策略级失败”是否在多任务间同时出现。如果多个任务最终都无法完成而且视觉特征可视化也发生了显著偏移那问题就很可能是共享感知层被击中。3.3 一个可执行的评测流程建议考虑到真实机器人采样成本我不建议一开始就在真机上跑纹理对抗测试。更稳妥的顺序是先用仿真环境做筛选再用真机做小样本复核。下面是常见做法从 VLA 模型的训练/测试任务里选 3 到 5 个代表性任务比如单抓取、堆叠、推动、按按钮、倒水。为每个任务准备至少两类纹理集随机自然纹理木纹、布料、大理石和受控测试纹理棋盘格、噪声贴图等。先跑干净场景基线记录每个任务的成功率和平均任务耗时。再跑随机纹理集确认模型是否对普通表面变化敏感。若存在跨任务纹理优化算法就在联合训练集上生成一个或多个候选纹理放到所有任务中做测试。最后记录“任务 × 纹理”矩阵中的成功率并观察失败是否集中在某些共享模块。真机复核时每个条件至少重复 10 到 20 次并统计失败类型分布不能只看平均成功率。这个流程跑下来也许会花一些时间但它能让你在模型上线前就回答掉一个关键问题模型是真的在按物体的语义属性执行任务还是在靠纹理捷径“碰运气”。4. 拿到 VLA 模型后如何做一次纹理级别的脆弱性体检很多读者可能不是做对抗样本研究而是准备把一个 VLA 模型部署到实际工作流里。如果你不做系统体检一旦出现“纹理相关失败”你大概率会陷入无休止的补数据循环。下面是一条排查链路能帮你在出现问题时快速定位到环节。4.1 先区分“环境扰动”与“系统性纹理漏洞”遇到某个表面纹理让模型失败时不要立刻将其定性为“对抗攻击”。先做几个小实验换一个相近纹理把波点间距改变看失败是否持续把纹理贴在不同物体上如果无论贴在杯身还是桌面上都会失败说明模型对该纹理的区域不敏感只是对纹理本身敏感调整光照强度如果只在低角度灯光下失败可能是模型对光照和纹理组合存在过拟合只替换纹理但不修改语言指令排除指令歧义造成的干扰。如果失败只在特定纹理上稳定复现并且该纹理不包含任何与物体语义相关的信息那么就能初步判定这个纹理在模型眼里可能被编码成了某种误导性的高阶特征。4.2 定位到决策链路的哪一段VLA 模型通常可以粗略分成感知、指令对齐、动作生成三个环节。定位方法如下第一步观察在纹理干扰下模型是否会给出错误的目标物体描述或定位结果。如果视觉问答/目标定位分支已经出错说明感知层可能被干扰第二步保持视觉输入不变把语言指令里的物体属性换成和纹理不冲突的描述看动作是否恢复正常。如果恢复说明语言指令可能帮助模型跳过了错误视觉特征问题或许不在动作头第三步把纹理放到图像中的非目标区域观察是否产生同样的影响。如果非目标区域纹理也能影响任务说明模型很可能没有形成稳定的“中心目标注意力”而是过分依赖整图统计特征第四步查看动作头输出的中间特征或注意力热图看模型当前在看哪些区域。如果动作生成之前模型关注的区域已经偏到纹理上那么问题大概率出在多模态融合前的表示层。如果你只能拿到模型 API没法看中间特征那也至少可以通过上述行为实验确定一层可能的主责范围是视觉输入解释错误、语言指令融合不鲁棒还是动作输出对表示变化过于敏感。4.3 做一个低成本的“任务 × 纹理”矩阵不需要先训练复杂的对抗纹理先用自然纹理和人工规律纹理做矩阵测试就能积累很多有用数据。比如你有 4 个任务、5 种纹理就可以得到一张 20 格的表格。每个格子里记录成功率、平均轨迹长度和失败模式。表格结构可以参照下面这样任务/纹理条件无纹理干净随机条纹木纹背景棋盘贴纸高频噪点纹理单抓取杯子96%92%70%30%85%推动方块94%90%88%78%91%按按钮90%91%60%40%89%注意表格里这些只是示意数值真实场景需要你自己跑出数据。这个矩阵最有价值的地方是暴露“共性”与“个体差异”如果棋盘贴纸对所有任务都造成大幅下降说明它对共享视觉特征影响显著如果只有按按钮任务大幅下降那么原因很可能出在“按钮小目标识别依赖高粒度纹理”这一层而不是共享视觉编码器的问题。4.4 将失败日志沉淀为可回归测试集人总有判断盲区所以一旦发现特定纹理导致异常最好把样本截图、语言指令、动作输出、失败类型、环境参数全部保存下来整理成一个小的回归测试集。后续每次更新模型或调整 prompt 后都用同样的纹理条件跑一遍。这个动作看起来很简单但它能把那种“一次性的玄学失败”变成“可追踪、可复现、可回归”的工程问题。对于 VLA 模型尤其重要因为同一个模型在不同机器人和相机位姿下的表现可能差异很大只有建立标准化的“纹理挑战集”才能长期判断模型是否真的在变好。5. 防御视角哪些方法值得试哪些只是看起来安稳读到这里可能有人会问既然 UniTexture 能通过纹理干扰 VLA 模型那我们应该怎么防御是直接拿对抗纹理再做对抗训练吗我可以先给个判断直接把所有对抗纹理加入训练通常解决不了一个工程模型的全部问题。对抗训练确实是最常见的手段但它伴随稳定性下降和训练成本上升。尤其 VLA 模型的动作空间高维如果只做感知层对抗训练而不在动作头和无缝整合上做文章效果往往有限。5.1 值得优先尝试纹理随机化与材质域随机化纹理触发错误的原因大多是模型把与任务无关的表面特征当成了决策信号。这时让训练数据的纹理足够丰富会是一个低成本但有效的方向。具体做法可以分为两层在仿真训练阶段随机生成不同纹理材质包括木纹、金属拉丝、布料编织、点阵图案、水磨石背景让视觉骨干不能依赖单一纹理统计在真实数据收集中刻意加入多种表面印刷品和贴纸减少模型对光滑纯净表面对象的倾向。纹理随机化的目标不是穷尽所有对抗样本而是切断“纹理到动作”的捷径逼迫模型去关注形状、位置、相对关系和语言指示。5.2 想法不错但要评估感知层面的对抗训练如果你确实有条件做对抗训练建议先在视觉编码器输出层加一个小型对抗扰动的目标函数再做联合训练。这个小扰动可以由快速梯度类方法生成不一定需要完整渲染成 UV 纹理先证明视觉编码器的鲁棒性是否有改善。需要留意的是VLA 模型训练非常耗时对抗训练会让 loss 景观更复杂。我一般会建议先选择一个比较容易过拟合的任务子集做小规模实验如果干净场景成功率下降超过可接受阈值就得调整扰动强度和对抗样本比例。5.3 面向长期给共享表示加“跨任务一致性约束”既然 UniTexture 的杀伤力主要体现在跨任务通用性那么防御思路也可以从跨任务一致性出发。常规做法是希望同一个物体在不同的任务中共享相近的高层语义特征。如果一个特征只对任务 A 有用却导致任务 B 产生错误动作那这个特征本质上是很脆弱的。你可以尝试在训练时增加一个代理任务让模型在多个任务里对同一场景的表示向量尽量保持稳定或者增加特征空间里的“任务无关对抗扰动”正则。这里不展开公式但要记住一点防御必须以“模型不能只依赖任务特有的捷径特征”为目标而不仅仅是对特定贴纸训练到不犯错。5.4 部署侧的兜底措施任何模型级防御都可能存在空白。如果 VLA 模型将来会驱动机械臂或移动设备建议在系统架构里加入额外的安全机制动作范围限制、速度限制、人体接近检测、紧急停机逻辑等。对抗纹理也许能让模型“以为”任务完成了但物理层面的限位和安全监控依然是最终防线。这一条很多人会忽略安全不能只靠模型“看不见坏纹理”必须做成系统性的多层防护。6. 应该怎样看待这类“以失败为目标”的研究回到 UniTexture 本身。这个方向的研究本质上是“红队测试”的一种。它会明确寻找模型失败的条件并把失败模式提炼成一个可迁移的纹理模式。这类研究容易被误解成攻击工具但实际上它更重要的作用是帮社区理解模型内部机制的边界。如果你想复现类似工作不要把它当作黑掉某个系统的手段而应当作一个能力评估项目。在你自己的仿真环境、自己的模型权重、自己的评估任务里执行红队测试是企业内部做安全测试的合法方式。没有授权对着真实设备做测试既不合规也不负责。6.1 短期的价值帮团队建立失败预期我在很多项目里发现技术团队不讨厌模型出错最讨厌的是模型不知道什么时候会出错。UniTexture 这类研究能帮你制造一个稳定的失败样例它最大的价值不是“证明模型不安全”而是把不确定性变成了一个可讨论的复现问题。有了稳定的失败样例你才能设计指标、监控上线后的表现。很多问题在生产环境里看起来是偶发故障实际原因是某个表面纹理频繁出现而测试集里没有覆盖。一个跨任务纹理挑战集就是低成本为模型建立“失败预期”的工具。6.2 长期的价值让 VLA 模型不只优化“平均表现”今天的 VLA 评测有很多还是平均成功率导向。平均成功率 90% 的模型可能在某个纹理、某个光照域中只有 20%。如果这个域恰恰是真实应用里最常见的场景那这个 90% 就没有参考意义。跨任务通用对抗纹理是一个干预变量。它强制我们去看在同样一种可解释的输入扰动下模型的不同能力是否同时被破坏。这种视角对模型选型、数据增广、部署区域都有指导意义。6.3 研究者该有的克制如果你是后续做相关研究的同学想站在 UniTexture 的肩膀上继续延展我会给你一条建议不要只把“攻击成功率”当成唯一指标。设计完扰动之后至少还要做两件事分析失败在哪个模块产生尽量通过可视化或探针实验说明是视觉骨干、跨模态融合还是动作头的问题尝试提出一种可能的防御或评测改进方案哪怕只是一个 loss 项或一个训练策略。这几年我们见过太多只做攻击端、不做分析端的工作。真正有影响力的对抗样本研究往往不是因为它能把成功率打到多低而是因为它让模型的设计者看到了更深层的结构缺陷。UniTexture 里 cross-task 这个词本身就暗示着一件事它想让你看到的不只是机器人在某个动作上失败了而是多个任务共同依赖的那个表示层可能比想象中脆弱。如果你正在准备部署 VLA 模型下一步最值得做的不是去复现一个对抗纹理来吓自己而是先整理出一份你自己的任务列表、纹理分布和失败定义跑一遍我在第三节里给出的四阶段评测。先搞清楚模型是看懂了物体还是只认得表面图案再谈后续优化也不迟。