LIBERO-Plus评测体系:VLA模型鲁棒性压力测试与实战指南

发布时间:2026/9/17 10:43:10
LIBERO-Plus评测体系:VLA模型鲁棒性压力测试与实战指南 1. LIBERO-Plus要补齐的短板现有VLA评测体系的盲区先讲个我亲身经历的场景。去年年底我在LIBERO的四个标准套件上测几个开源VLA模型挑一个表现最好的准备接到真实机械臂上做demo。仿真里任务成功率接近90%结果同一套权重搬到真实场景开灯变关灯、桌子从深色换浅色、物体位置偏了3厘米成功率直接掉到三成以下。那一刻我意识到一个问题标准benchmark的高分在很多情况下只是模型在特定渲染环境里过拟合出来的假象。这个问题不是个例。VLAVision-Language-Action模型本质上是一条视觉编码器语言模型动作头的流水线任何一个环节对训练分布过度依赖整条链路在分布外OOD场景下都会崩。而主流的评测基准比如LIBERO原始版本提供的是干净、固定、低扰动的仿真环境——光照恒定、相机视角固定、物体初始位置严格一致、指令文本模板化。这种环境测的是模型能不能学会任务测不出模型换了个环境还能不能干活。对学术研究来说前者够用但对任何想把VLA推到真实世界的团队来说后者才是决定生死的指标。LIBERO-Plus就是冲着这个缺口来的。它在原始LIBERO的任务骨架之上系统地引入视觉、语言、状态、物理参数等多个维度的扰动做成一套专门的鲁棒性评测体系。思路并不复杂把任务成功率从单点指标变成一条随干扰强度变化的曲线看模型在压力下是怎么退化的。这条曲线才是VLA真实落地能力的画像。这篇文章我不会去复述论文里的表格而是从实操角度拆解LIBERO-Plus的评测维度怎么设计、环境怎么搭、指标怎么算、坑在哪里、以及评测结果怎么反哺模型训练。如果你正准备评估手头的VLA模型能不能上真机或者想搞清楚自己的模型在哪个环节最脆弱这篇文章应该能给你一份可以直接用的检查清单。1.1 从LIBERO到LIBERO-Plus一个评测基准的进化逻辑LIBERO这个基准大家应该不陌生它设计了一套基于robosuite仿真器的机器人操作任务覆盖了四类能力维度空间关系理解Spatial、物体泛化Object、目标泛化Goal和长程任务Long。每个套件里有10到20个不等的任务每个任务由自然语言指令初始观测目标状态构成评测指标就是多回合独立运行的任务成功率。它最大的贡献是把语言指令到动作序列这个映射关系标准化了让不同VLA模型能在同一个平台上横向比较。但LIBERO有一个隐含假设训练和测试来自同一个分布。仿真环境里的纹理、光照、相机参数、物体初始位置在训练和测试阶段基本保持一致。模型在LIBERO-Spatial上拿高分只能说明它学会了根据指令区分左/右/前/后的空间语义并不能说明它在光照变了、桌子纹理换了、或者相机歪了几度之后还能保持这个能力。这两个问题完全是两码事。LIBERO-Plus的进化逻辑一句话概括就是用受控扰动打破训练与测试的同分布假设量化模型在分布偏移下的性能衰减曲线。它不像有些benchmark那样推倒重来换一套全新的任务集而是保留LIBERO原始任务作为底座在关键环节上做系统性改造。这样做的好处非常明显——所有模型在原始LIBERO上的成绩可以直接作为baseline加入扰动后的成绩和baseline做差就得出了鲁棒性损失这个干净指标。迁移成本低结果可对比性强这比另起炉灶搞一套全新benchmark要务实得多。1.2 我在实际评测中遇到的仿真满分、移植翻车现象说一个让我印象深刻的实测数据。手头有一个在LIBERO-Object套件上训练完成的模型原始评测成功率91%。这个套件的任务是识别物体类型并完成对应的操作比如拿起盘子或拿起奶油。我把场景里的背景纹理从深色木纹换成浅色大理石纹其他一切不变成功率掉到63%。再叠加光照色温从暖黄光切换到冷白光成功率进一步掉到41%。这不是个别模型的毛病。我拿几个主流开源VLA模型在同样条件下做了横向对比趋势高度一致视觉干扰是最容易击穿VLA模型的维度其次是语言指令的措辞变化再其次是物体初始位置的小幅扰动。这和我后来在真实机械臂上踩坑的经验是吻合的——VLA模型在仿真里表现出的聪明很多时候只是对渲染分布的死记硬背。还有一个细节值得注意原始LIBERO评测里每个episode会设置一个初始化状态所有物体位置、物体类型、目标物体都从这个状态里读取。很多模型在训练时其实记住了这个固定初始状态的视觉特征而不是真正理解按照指令操作目标物体的语义。一旦初始条件偏移模型就露馅。LIBERO-Plus的评测设计本质上就是把这些假泛化的遮羞布一层层揭开。2. 评测维度的设计逻辑四类干扰源与任务集如何搭建LIBERO-Plus评测体系的核心是受控扰动。既然是受控就必须保证每次只动一个变量、其余条件镜像保持。我在搭建自己的评测流程时把干扰源分成四大类视觉扰动、指令扰动、状态扰动、物理参数扰动。每一类都对应VLA流水线中的特定环节——视觉扰动打视觉编码器指令扰动打语言理解与对齐状态扰动打感知与动作规划的耦合物理参数扰动打动作执行策略。这种按模块设计扰动的思路能帮你快速定位模型的短板到底出在哪个环节。2.1 视觉扰动触碰以貌取物型模型的命门视觉扰动是LIBERO-Plus里对模型打击面最大的一类也是设计起来最需要小心的一类。它要回答的问题是视觉编码器提取的特征到底绑定的是物体的类别属性还是环境的表面纹理我实际使用的视觉扰动包括以下几个维度背景纹理替换把LIBERO默认的厨房桌面纹理换成大理石、木材、亚麻布等不同材质同时保持台面以上所有物体不变。这是最基础的一档扰动用来检测模型是否把背景当成了判断依据。光照条件变化调整仿真的光源强度、光源色温、光源方向。正常日光到暖黄光的跨度大概是色温从6500K到2700K我一般分三档做阶梯测试看成功率是线性下降还是断崖式崩塌。相机视角微调把相机位置在原始基础上平移5到10厘米或绕轴旋转5度。这个扰动在仿真里看似不大但实际会让模型的视觉特征空间发生整体偏移对依赖视角特征的动作策略影响很大。图像噪声叠加在渲染画面上叠加高斯噪声、椒盐噪声或局部遮挡块。这里我通常叠加在图像中央区域而不是边缘因为机器人操作的目标物体基本都在画面中央边缘噪声对成功率影响有限。物体外观变化在不改变物体类别标签的前提下改变物体纹理或颜色。比如把红色马克杯改成蓝色马克杯指令里依然说拿起马克杯。每个视觉维度我都建议单独跑一档不要混合扰动。否则你只知道模型性能下降了却说不清是背景的锅还是光照的锅。我在初期吃过这个亏混合扰动测完只能得到一句视觉鲁棒性差的空泛结论对定位问题毫无帮助。2.2 指令扰动语言理解鲁棒性的压力测试指令扰动针对的是VLA模型的语言理解模块。原始LIBERO的指令文本是模板化生成的句式高度固定比如pick up the red cup和put the bowl on the plate这类简单祈使句。真实使用场景里用户可不会这么规规矩矩地说话指令会有同义改写、语序调整、冗余修饰词甚至还有指代不明确的歧义表达。我整理了几种最实用的指令扰动方式同义替换把动词和名词替换成同义表达比如pick up换grasp、place换put down。这是最温和的一档扰动测的是模型词汇层面的泛化能力。冗余修饰词插入在原始指令里加入不影响语义的修饰词。比如pick up the red cup改成please carefully pick up the red cup on the table。注意这类扰动不能改变任务本身的语义否则就不叫鲁棒性测试而是任务变更了。语序调整把pick up the red cup改成the red cup, pick it up这类口语化的倒装表达测试模型对句法结构的容忍度。指令复杂化把单步指令改成复合句比如pick up the red cup and place it on the plate这种。这实际上是在测长程语义理解的能力边界。指令扰动的结果往往比视觉扰动更反直觉。我测过的一个模型背景和光照都扛住了但指令里加了please这种无意义礼貌词成功率掉了将近15个百分点。这说明模型在做语言-动作对齐时对某些高频词产生了过于强烈的注意力偏差把please的出现当成了某种隐含约束。还有一点要提醒指令扰动的评测必须保证同一任务在不同扰动版本下目标一致。比如put the bowl on the plate改成place the bowl onto the plate目标状态不能变否则你测的就是任务泛化而不是语言鲁棒性了。2.3 状态与物理扰动动作生成模块的边界测试状态扰动和物理参数扰动主要作用于动作生成模块是检验VLA模型精细操作能力的关键。状态扰动包括物体初始位置偏移在固定范围内随机平移物体位置比如±3厘米、±5厘米两档。这是VLA模型在真实场景里最常见的分布偏移来源之一因为真实场景中你不可能每次都把物体摆到像素级一致的位置。物体初始朝向旋转绕竖直轴随机旋转物体一定角度测试抓取策略对物体姿态变化的敏感度。物体数量变化在场景中加入额外的干扰物体但指令指定的目标物体保持不变。这测的是模型在视觉拥挤场景下的目标辨识能力。物理参数扰动则更底层一些直接动仿真器的物理属性摩擦系数变化把桌面和物体的摩擦系数在0.2到1.0之间调整测试模型在抓取和推拉动作中对摩擦力的适应能力。物体质量调整把目标物体的质量从默认值增减30%测试动作规划是否依赖固定的动力学模型。重力微调这个我一般只在极端测试里用改动重力对整个仿真环境的动力学都会产生影响容易把其他变量的干扰也带进来。一个容易被忽略的细节状态扰动和视觉扰动是耦合的。物体位置一变渲染出来的画面肯定也跟着变。所以在评测时如果只想测状态扰动的影响就必须固定相机视角、光照等视觉条件反之亦然。我在实际评测中就是靠严格的对照组设计来解耦这两个维度的每个干扰维度单独跑独立的trail而不是一把梭把所有扰动全开。2.4 控制变量是评测的灵魂固定和扰动怎么搭配控制变量这件事听起来像是本科实验课的内容但在VLA评测里是决定结果可信度的核心。做得不严谨评测结果就只是一堆不可复现的数字。我的做法是预先定义一张评测变量控制表每个评测维度都明确列出哪些变量固定、哪些变量扰动、扰动的具体范围是多少。评测维度固定变量扰动变量扰动档位背景纹理替换光照、相机、物体位置桌面纹理3种材质光照变化背景、相机、物体位置光源色温与强度3档相机视角微调背景、光照、物体位置相机平移/旋转2档物体位置偏移背景、光照、相机物体x-y坐标2档指令扰动视觉条件、物体状态指令文本4种改法这张表看起来简单但实际执行中有一个大坑LIBERO环境里的物体初始位置和相机参数在每次环境reset时是基于随机种子生成的如果不固定种子你根本没法判断成功率的波动是环境噪声还是模型能力的真实变化。我在初期评测时没固定种子同一个模型同一组参数跑了三次结果成绩差了12个百分点最后排查半天才发现是环境随机性在作怪。后来的做法是每个评测配置固定5到10个随机种子每个种子跑20个episode取平均值和方差一起报告。方差大了说明模型本身就很不稳定这个信息比平均分更重要。3. 搭建评测流程的关键细节环境部署、指标计算与复现陷阱聊完了评测维度设计接下来是真正动手搭流程的部分。这一节我尽量写得像一本可以直接照抄的操作手册把我踩过的坑和试出来的最佳实践都放进来。3.1 基于LIBERO仿真框架的底层配置LIBERO是构建在robosuite之上的底层物理引擎是MuJoCo。跑评测之前需要把这两层环境装好。先说环境配置建议直接用conda新建一个独立环境避免和训练环境打架。conda create -n libero-plus python3.9 conda activate libero-plus pip install robosuite1.4.0 pip install libero安装完robosuite和LIBERO之后建议先跑一下官方自带的demo验证环境是否正常。我遇到过的一个典型问题是MuJoCo的glfw渲染依赖在无显示器环境下会报错如果你是跑在纯服务器上需要设置离屏渲染模式。具体做法是在代码里把渲染器设置为EGL或OSMesa后端robosuite从1.4版本开始支持通过环境变量切换渲染后端export MUJOCO_GLegl这个细节不解决后面所有评测脚本都会卡在环境初始化阶段。另外要注意的是如果机器上没有NVIDIA GPUEGL后端可能起不来退而求其次可以用OSMesa但渲染速度会慢不少批量评测时要有心理准备。LIBERO的任务集是动态加载的通过task suite名称来区分from libero.libero import benchmark bench benchmark.get_benchmark_dict() task_suite bench[libero_object]()对应LIBERO-Plus的评测套件逻辑上是在原始任务之上叠加扰动所以底层的任务描述和环境配置可以复用只是在reset和step的环节插入扰动改写逻辑。这也是我说LIBERO-Plus是在原基准上做扩展而不是另起炉灶的原因。3.2 评测指标设计成功率之外还需要看什么单一的成功率指标无法刻画鲁棒性特征。我在评测VLA模型时至少会统计四个层面上的指标任务成功率SR。这是所有人都看的指标不需要多解释。但要注意按任务分组合并统计而不是拉通算总平均。不同任务套件的难度差异很大拉通平均会掩盖模型在特定任务上的脆弱性。鲁棒性衰减率RDR。这是LIBERO-Plus最核心的量化指标定义是RDR (baseline_SR - perturbed_SR) / baseline_SRRDR越接近0说明模型越鲁棒越接近1说明干扰对模型是毁灭性的。如果RDR为负那反而是干扰提升了性能这种情况我遇到得很少但一旦出现通常是因为环境扰动意外地引入了某种对模型有利的偏置。干扰耐受阈值。这个指标需要逐步增加干扰强度找到成功率下降到原始成绩50%时对应的干扰强度。比如光照色温从6500K逐步偏向2700K看模型在哪个色温区间内成功率跌破一半。这个阈值能直观反映模型的安全操作边界对真实部署非常有参考价值。策略行为轨迹质量。成功率归零的时候这些指标还没有得到应有的重视——在评测过程中模型的轨迹质量往往可以解释为什么模型会失败。比如我记录每个episode里的碰撞次数、动作抖动频率、任务完成用时、与规划路径的偏离程度。这些指标能够帮助区分模型是完全不知道该干什么还是知道目标但动作执行质量差。两者对应的改进方向截然不同。3.3 评测脚本与随机种子区分模型退化和环境噪声评测脚本的写法直接决定了结果的可信度。我总结了一套比较稳妥的流程写在这里供参考固定全局随机种子。在评测脚本开头设置numpy.random.seed()、torch.manual_seed()、random.seed()确保所有随机源都可复现。逐任务逐配置运行。每个任务在每个扰动档位下独立跑N个episode我通常设N20记录每个episode的成功与否、轨迹长度、碰撞次数等原始数据最后再汇总统计。输出结构化结果。把每个episode的记录保存成JSON或CSV而不是只保存最终成功率。这样后期可以做更细粒度的分析比如按物体类型、按指令类型分组统计。跑对照组。在相同种子下先用无扰动配置跑一遍baseline再跑扰动配置。这一步不能省否则无法计算RDR。还有一个很容易被忽视的问题环境随机性不只来自物体初始位置还来自动作执行的物理仿真噪声。MuJoCo的仿真过程是确定性的但如果你用了stochastic policy比如带高斯噪声的动作采样同一个初始条件下两次rollout的结果也可能不同。我在评测时统一用deterministic的动作生成取动作分布的均值这样才能保证评测可复现。另外建议把每个episode的渲染画面保存下来至少保存关键帧。鲁棒性评测的意义不只是拿一个分数而是要能定位到具体的失效场景。我经常在评测结束之后回头看录像很多时候能发现一些指标上看不出来的规律比如模型总是在物体被手臂遮挡的那一刻开始抖动或者总是在某个特定光照角度下抓偏。3.4 GPU资源与批量评测策略VLA模型评测非常吃GPU资源尤其是那种基于大语言模型做动作输出的架构单次模型推理的耗时可能在几百毫秒到几秒之间。LIBERO一个任务套件里有10到20个任务每个任务跑20个episode加上多个扰动档位整体算下来一个模型完成全部评测可能要跑几十个小时。我的策略是先做小规模验证再上全量评测。具体来说第一阶段每个任务只跑5个episode快速看一遍所有扰动档位下的初步趋势发现明显异常比如某个扰动完全无法通过可以提前定位。第二阶段针对初步结果选定有区分度的扰动档位和任务子集跑满20个episode以上得到可靠的统计结果。第三阶段如果要做论文级别的数据每个配置跑50个episode以上同时报告95%置信区间。批量评测时可以用Python的concurrent.futures或ray做并行。但要注意的是robosuite环境本身不是线程安全的每个worker必须用独立的进程。我在实践中的做法是每个GPU上起多个进程每个进程绑定一个环境实例同时通过环境变量隔离MuJoCo的临时目录避免多进程渲染时发生冲突。还有一个GPU内存调优的经验VLA模型在评测时batch size设置为1就够了大batch不会带来任何加速反而会因为padding浪费显存。把flash attention打开、用bfloat16精度推理实测在大多数模型上能把显存占用降到原来的60%左右。4. 实测发现VLA模型在鲁棒性压力下的典型失效模式评测体系搭好之后我用它跑了几个主流的开源VLA模型包括基于RT-2架构范式的模型、扩散策略类的模型以及我自己训练的一个基线模型。这一节我总结几个反复出现的失效模式这些模式在论文的泛泛总结里看不到但对实际改进模型非常有参考价值。4.1 背景替换后成功率骤降视觉编码器学到了什么几乎所有被测模型都在背景纹理替换这个最简单、最不影响任务语义的扰动下出现了明显的性能下降。一个模型在原始背景下成功率89%背景换成大理石纹路后掉到63%换成浅色木纹后进一步掉到58%。这个现象揭示了一个底层问题视觉编码器在训练过程中没有学会分割出前景物体而是把背景纹理当成了和任务相关的特征。也就是说模型在做视觉推理时实际上是背景前景物体的联合特征在驱动动作决策而不是单独的前景物体特征。这一点和我们人类理解世界的方式完全不同——人类天然知道桌面的纹理和拿起红色杯子这个任务无关。我在处理这个问题时的思路是在训练阶段做针对性的增强对渲染图像做随机裁剪、随机擦除、背景替换等操作强制编码器把注意力放到前景物体上。这个方向是有效的经过增强训练后同一个模型的背景替换RDR从38%降到了21%。4.2 指令加修饰词就失败语言对齐的脆弱性指令扰动暴露出来的问题比视觉扰动更隐蔽。在原始LIBERO评测里表现不错的模型往往在指令从pick up the red cup改成please pick up the red cup之后成功率就掉了十几个百分点。这个现象的根本原因我倾向于认为是训练数据中指令模板的多样性不足造成的。如果训练数据里90%的指令都符合动词名词颜色定语的固定模板模型的语言编码器就会对模板外的句式产生不稳定的特征映射。一个please虽然从语义上看是无意义的礼貌词但它在词向量空间里激活了和请求/指令相关的语义子空间干扰了模型对核心指令词如pick up和red cup的注意力权重分配。解决这个问题的直接方法是在训练集里做指令模板增强。把每一条原始指令用规则生成10到20个同义改写版本覆盖礼貌词、同义词、语序调整等变体让模型见过足够多样化的指令表达方式。这里有一个度的问题值得注意指令增强做得过头比如把指令改得过于口语化、随意化反而会让模型在标准指令上的表现下降。我在实验中发现增强指令的比例控制在训练数据的30%左右比较合适既能提升鲁棒性又不会破坏原有能力。4.3 初始位置微调导致抓取偏移动作闭环的盲区物体位置扰动带来的影响主要体现在抓取动作的执行精度上。原始评测中物体位于桌面中心位置模型经过训练已经学会了朝桌子中心方向生成抓取动作的偏置。一旦物体位置偏移±5厘米模型生成的动作起始点就出现了系统性偏移导致机械臂朝向位置偏差抓取失败。这个失效模式的本质是模型的视觉-动作映射是绝对坐标式的而不是相对坐标式的。它学到的是看到物体在画面中心→朝中心方向抓而不是看到物体和机械臂的相对位置关系→调整抓取方向。这也是仿真环境中训练VLA模型最常见的假泛化之一。在仿真里改进这个问题的两个方向一是训练阶段做位置随机化。在每次episode开始时把物体初始位置在合理范围内随机化让模型见过更多位置分布逼它学习相对位置映射。二是动作解码器直接输入相对位置特征。具体做法是在动作头之前把目标物体在相机坐标系下的位置显式编码成特征向量和语言特征拼接之后一起输入动作解码器。这样做相当于给模型提供了一个视觉-动作对齐的先验知识实测对位置扰动下的成功率提升效果明显。5. 从评测结果到模型改进鲁棒性训练的落地思路评测的最终目的是指导改进。有了LIBERO-Plus测出来的RDR和失效模式接下来就要针对性地做模型训练层面的调整。这一节分享几个我自己验证过有效的方法以及在过程中踩过的坑。5.1 数据增强与域随机化用评测挖掘盲区用训练补齐盲区针对视觉扰动暴露出的鲁棒性问题最直接的手段是域随机化。这个思想其实在 sim-to-real transfer 领域已经有很成熟的应用但具体到VLA模型上几个细节值得推敲。第一域随机化的范围要和评测维度对齐。如果你在评测中发现模型对光照色温变化特别敏感训练时就应该重点随机化光照如果对背景纹理敏感就随机化纹理。评测告诉你哪里痛训练就打哪里的补丁这样最有针对性。第二域随机化的强度要逐步增加。我在初期尝试过直接对整张图像做最强的随机扰动结果训练直接发散了模型连原始任务都学不会。原因是视觉特征空间的剧烈变化让语言-动作对齐变得极不稳定。后来改成课程学习的方式先让模型在干净环境上学会基本任务然后逐渐加大随机化强度每轮微调都在上一轮基础上引入更高强度的扰动。这样训练曲线稳定得多最终鲁棒性也更好。第三适度的正则化是必要的。在VLA训练中加入权重衰减和dropout能有效防止模型对训练分布的死记硬背。但正则化强度要控制好我一般把权重衰减设在1e-4到1e-5之间太强的正则化会限制模型的动作表达能力。5.2 动作头与执行策略的鲁棒性考量动作头action head是VLA模型里最容易被忽视、但对鲁棒性影响巨大的一个模块。目前主流的设计有两种离散动作空间把动作量化为离散token和连续动作空间直接输出连续向量或让扩散模型来生成动作序列。我在评测中发现它们对扰动的响应模式差异很大。离散动作模型的优势在于动作空间被压缩成有限的候选集合天生具备一定的抗噪能力但也意味着动作分辨率受限在精细操作任务比如抓取小物体、精确放置上成功率偏低。连续动作模型的优势是动作表达能力强但对视觉输入的小扰动非常敏感。原因也很好理解连续动作是基于视觉token生成的视觉特征向量哪怕有一点点偏移经过多层线性变换放大之后动作输出就可能偏离一大截。扩散策略对动作头的鲁棒性优化提供了一种不错的解决思路。它的做法是让模型学习一个动作生成的概率分布而不是学习一组确定性的动作映射。这样就可以在推理时对他受干扰的特征进行多轮去噪采样减小误差。我实测过基于扩散策略的模型在位置扰动下的表现远优于基于确定性动作头的模型。代价是推理速度慢了3到5倍在实时机器人控制场景下需要考虑这个开销。5.3 测试时自适应与部署兜底策略无论训练阶段做多少数据增强真实场景里的分布偏移总会有超出预期的部分。因此在部署阶段我通常还会加两道兜底措施。第一道是测试时图像归一化校正。在推理时对输入图像做一个轻量的颜色分布对齐把当前图像的RGB均值和方差对齐到训练集的平均水平。这个操作实现成本极低只需要维护一组训练集的统计量但对光照扰动带来的性能下降能挽回相当一部分。第二道是多模态冗余决策。在低成本的前提下可以加入一个纯几何感知模块比如基于RGB-D的物体检测器做动作约束。语言-视觉大模型负责生成粗略的任务意图检测器负责提供精确的目标位置坐标两者结合起来做最终的动作输出。这实际上是把VLA从端到端全包降级为高层规划底层约束的架构牺牲了一部分端到端的优雅性但换来了部署阶段的可控性和安全性。根据我的个人实践经验如果VLA模型要在真实环境中部署纯端到端通常不会是最终选择几乎必然要加一层规则性的安全约束或基于经典算法的冗余校验。这不算退步而是一种务实的产品化考量。评测存在的意义就是提前用数据告诉你哪些环节必须加这种护栏。再说一个让你头疼但务必提前处理的细节评测过程中如果模型在某个扰动维度下完全崩溃先检查评测脚本而不是马上怀疑模型。我在一次评测里发现模型在物体数量增加的扰动下成功率接近0刚开始以为是模型辨识不了多余物体后来debug发现是环境状态配置函数在加入多余物体时没有正确设置初始位置导致物体重叠。这种环境bug和模型失效的表现形式上完全一样只会浪费时间。所以每次跑完异常结果先随机抽几个episode的渲染画面确认环境本身没有异常再下结论。