1. “dataset.yaml”
这个文件是数据集配置,用于定义场景、对象、容器(receptacle)、采样器等元素。主要用于模拟环境的构建,如机器人任务中的物体放置、场景采样。文件结构是一个大的YAML字典,包含路径、场景设置、对象定义等。整体目的:
- 定义数据集路径、对象类别、场景划分、采样规则等,用于生成训练/验证/测试场景。
- 支持物体交互、关节对象(如冰箱、抽屉)的状态采样。
键的种类和含义:文件中的键可以分为以下几类:路径/配置(字符串/布尔)、列表/集合(数组)、采样器(字典)、标记(列表)等。以下按出现顺序分类解释:
- 基本配置键(字符串/布尔类型):
- dataset_path: 类型:字符串。含义:数据集的根路径,例如 “/data/zxy/trustvlm/EmbodiedBench/embodiedbench/envs/eb_habitat/data/versioned_data/replica_cad_dataset/replicaCAD.scene_dataset_config.json”。用于加载场景数据集的JSON配置文件。
- correct_unstable_results: 类型:布尔(False)。含义:是否纠正不稳定的模拟结果(如物体放置不稳)。设置为False表示不进行纠正,可能用于真实模拟。
- 附加路径键(列表类型):
- additional_object_paths: 类型:列表(包含字符串)。含义:附加的对象模型路径,例如 [“/data/zxy/trustvlm/EmbodiedBench/embodiedbench/envs/eb_habitat/data/versioned_data/ycb/configs”]。用于加载额外的物体模型(如YCB数据集的配置)。
- 场景设置键(列表类型,嵌套字典):
- scene_sets: 类型:列表(每个元素是字典)。含义:场景集合的定义,用于划分训练/验证/测试场景。每个字典包含:
- name: 字符串,如 “scene_train_split”(训练场景划分)。
- included_substrings: 列表,包含的子字符串(如 “v3_sc0_staging”),用于过滤场景。
- excluded_substrings(显式给出): 列表,排除的子字符串(通常为空)。 含义:用于根据子字符串匹配来选择场景,例如训练集包括特定版本的场景。
- scene_sets: 类型:列表(每个元素是字典)。含义:场景集合的定义,用于划分训练/验证/测试场景。每个字典包含:
- 类别组键(字典类型,嵌套字典):
- category_groups: 类型:字典(键为组名,如 “all_cats”,值为嵌套字典)。含义:物体类别的分组定义,用于训练/评估分离。
- 子键如 “all_cats”:包含 included 列表(所有物体类别,如 “ball”、”clamp” 等)。
- 其他组如 “all_eval_cats”(评估类别)、”all_train_cats”(训练类别)、”all_fruit”(水果子组)。 含义:分类物体,用于采样不同任务的物体,例如训练时排除评估类别以避免过拟合。
- category_groups: 类型:字典(键为组名,如 “all_cats”,值为嵌套字典)。含义:物体类别的分组定义,用于训练/评估分离。
- 对象设置键(列表类型,嵌套字典):
- object_sets: 类型:列表(每个元素是字典)。含义:物体集合的定义,每个集合对应一组物体模型。
- name: 字符串,如 “CLUTTER_OBJECTS”(杂物物体)。
- excluded_substrings: 列表,排除的子字符串(通常为空)。
- included_substrings: 列表,包含的物体ID(如 “053_mini_soccer_ball” 表示小足球)。 含义:定义物体子集,例如 “ball” 组只包括各种球类物体。用于采样特定类型的物体。
- object_sets: 类型:列表(每个元素是字典)。含义:物体集合的定义,每个集合对应一组物体模型。
- 容器设置键(列表类型,嵌套字典):
- receptacle_sets: 类型:列表(每个元素是字典)。含义:容器(receptacle,如桌子、沙发)的集合定义。
- name: 字符串,如 “all_receps”(所有容器)。
- included_object_substrings: 列表,包含的对象子字符串(通常为空,表示所有)。
- excluded_object_substrings: 列表,排除的对象子字符串。
- excluded_receptacle_substrings: 列表,排除的容器子字符串。
- included_receptacle_substrings: 列表,包含的容器ID(如 “receptacle_aabb_Chr1_Top1_frl_apartment_chair_01” 表示椅子顶部)。 含义:定义可放置物体的表面或容器,例如 “open_air_receps” 只包括开放表面(如桌子、沙发)。
- receptacle_sets: 类型:列表(每个元素是字典)。含义:容器(receptacle,如桌子、沙发)的集合定义。
- 容器限制键(列表类型,嵌套列表):
- max_objects_per_receptacle: 类型:列表(每个元素是[容器ID, 最大数])。含义:每个容器允许的最大物体数量,例如 [“receptacle_aabb_Chr1_Top1_frl_apartment_chair_01”, 2] 表示椅子最多2个物体。
- 采样器键(字典类型,嵌套字典):
- scene_sampler: 类型:字典。含义:场景采样器配置。
- type: 字符串,如 “subset”(子集采样)。
- params: 字典,包含 scene_sets 列表(引用场景组)。 含义:用于从场景集中采样场景。
- object_samplers: 类型:列表(每个元素是字典)。含义:物体采样器。
- name: 字符串,如 “CLUTTER”。
- type: 字符串,如 “uniform”(均匀采样)。
- params: 字典,包含 object_sets(物体组)、receptacle_sets(容器组)、num_samples(采样数量范围,如 [30, 30])、orientation_sampling(方向采样,如 “up”)。 含义:定义如何采样物体并放置到容器中。
- object_target_samplers: 类型:空列表。含义:目标物体采样器(未使用,可能预留)。
- ao_state_samplers: 类型:列表(每个元素是字典)。含义:关节对象(Articulated Object,如冰箱、抽屉)状态采样器。
- name: 字符串,如 “open_fridge_cab”。
- type: 字符串,如 “composite”(复合采样)。
- params: 列表,包含关节状态,如 ao_handle(句柄,如 “fridge”)、joint_states(关节值范围,如 [“top_door”, 1.5, 1.5])、should_sample_all_joints(是否采样所有关节)。 含义:用于采样关节对象的打开/关闭状态。
- scene_sampler: 类型:字典。含义:场景采样器配置。
- 标记键(列表类型,嵌套字典):
- markers: 类型:列表(每个元素是字典)。含义:标记点定义,用于交互(如推动点)。
- name: 字符串,如 “cab_push_point_7″(左抽屉推动点)。
- type: 字符串,如 “articulated_object”(关节对象)。
- params: 字典,包含 offset(偏移,如 [0.3,0.0,0])、link(链接,如 “drawer1_top”)、object(对象,如 “kitchen_counter_:0000″)。 含义:定义机器人交互的特定点,例如推动抽屉或冰箱。
- markers: 类型:列表(每个元素是字典)。含义:标记点定义,用于交互(如推动点)。
2. “instructions.yaml”
这个文件是任务指令配置,用于生成自然语言指令、目标表达式、采样规则等。主要用于定义机器人任务的语言描述、解决方案模板和评估条件。文件结构是一个大的YAML字典,包含指令模板、名称映射等。整体目的:
- 定义各种任务指令(如物体移动、打开/关闭、导航),包括训练/评估语言模板。
- 支持条件任务、语义变体、量化等,用于生成多样化的指令。
键的种类和含义:文件中的键可以分为以下几类:配置值(整数)、指令字典(嵌套字典)、映射(字典)。以下按出现顺序分类解释:
- 基本配置键(整数类型):
- max_per_obj_count: 类型:整数(1)。含义:每个物体的最大计数,限制采样时物体重复。
- 指令键(字典类型,嵌套多层字典):
- instructions: 类型:字典(键为指令ID,如 “42f1b012″,值为嵌套字典)。含义:任务指令的详细定义,每个ID对应一个具体任务类型(如单物体重排列)。
- 子键 lang: 字典,包含 train 和 eval 列表(字符串模板,如 “Move a target_object_name from the source_receptacle_name to the target_receptacle_name”)。含义:语言模板,用于生成训练/评估指令,占位符如 target_object_name 会替换为实际名称。
- 子键 tags: 列表(如 [‘v2_train’, ‘obj_gen’, ‘v1’, ‘rearrange’, ‘simple’])。含义:任务标签,用于分类(如训练版本、物体生成、重排列、简单任务)。
- 子键 overweight_freq: 整数(如4)。含义:过采样频率,表示该任务在采样中的权重(越高越频繁)。
- 子键 solution_template: 列表(如 [“nav(source_receptacle_name)”, “pick_target_object_name()”])。含义:解决方案模板,描述任务步骤(如导航、拾取、放置)。
- 子键 goal_expr: 字典。含义:目标表达式,用于定义任务成功条件。
- expr_type: 字符串,如 “AND”(逻辑与)。
- quantifier: 字符串,如 “EXISTS”(存在量化)或 “FORALL”(全称量化)。
- inputs: 列表,定义变量(如 “X” 为 “target_object_name”)。
- sub_exprs: 列表,子表达式(如 “on_top(X, target_receptacle_name)” 表示物体X在容器上)。
- 子键 sampled_receps: 字典。含义:采样容器配置。
- 子键如 “source_receptacle_name”: 字典,包含 type(如 “open_air_receps”)、not_equal(不等于其他容器)。
- 子键 sampled_objects: 字典。含义:采样物体配置。
- 子键如 “target_object_name”: 字典,包含 types(train/eval类别)、recep(放置容器)、not_equal(不等于其他物体)。
- 子键 semantics: 字典(可选)。含义:语义变体,匹配特定物体/容器,提供额外语言模板(如匹配 “plate” 时用 “Set out a target_object_name for one person”)。
- 子键 sampler_info: 字典(可选)。含义:额外采样信息,如 place_search_all_receps(搜索所有容器放置)。
- 子键 start_preds: 列表(可选,如 “opened_fridge(fridge_push_point)”)。含义:起始谓词,定义任务开始状态(如冰箱打开)。
- 子键 subsample_entity_ratio: 浮点数(可选,如0.75)。含义:实体子采样比例,用于减少采样复杂度。
- instructions: 类型:字典(键为指令ID,如 “42f1b012″,值为嵌套字典)。含义:任务指令的详细定义,每个ID对应一个具体任务类型(如单物体重排列)。
- 名称映射键(字典类型):
- name_mappings: 类型:字典(键为资产ID,值为字符串)。含义:将内部ID映射为可读名称,例如 “receptacle_aabb_Chr1_Top1_frl_apartment_chair_01”: “chair”。用于指令中替换为人类可懂的名称,如 “chair” 而非长ID。
生成数据集参考:
python -m eb_habitat.dataset.create_episodes --config eb_habitat/dataset/configs/dataset_wzj.yaml --instruct-path eb_habitat/dataset/configs/instructions_wzj.yaml --tag rearrange --phrase eval --obj-sample-split train --n-procs 1 --num-episodes 1 --out eb_habitat/datasets/wzj.pickle --seed 42
运行前在EBHabEnv.py中 Validevalsets中添加自己数据集名称(注意路径)
运行评估参考:
export DASHSCOPE_API_KEY=""
python -m embodiedbench.main env=eb-hab model_name=qwen-vl-max exp_name='wzj1' eval_sets=['wzj']
sk-20f082d7820b456aaab6316b3692d0df
3、其它注意
dataset.yaml必须包含
object_samplers:
-
name: "CLUTTER" #名字不能改!其它可以改
type: "uniform"
params:
object_sets: ["CLUTTER_OBJECTS"]
receptacle_sets: ["open_air_receps"]
num_samples: [30, 30]
orientation_sampling: "up"
以及
receptacle_sets:
name: "open_air_receps" #必须要有!
included_object_substrings:
- ""
excluded_object_substrings: []
excluded_receptacle_substrings: []
included_receptacle_substrings:
# - "receptacle_aabb_Chr1_Top1_frl_apartment_chair_01"
- "receptacle_aabb_Tbl1_Top1_frl_apartment_table_01"
- "receptacle_aabb_Tbl2_Top1_frl_apartment_table_02"
- "receptacle_aabb_TvStnd1_Top1_frl_apartment_tvstand"
- "receptacle_aabb_sink_kitchen_counter"
- "receptacle_aabb_counter_right_kitchen_counter"
- "receptacle_aabb_counter_left_kitchen_counter"
- "receptacle_aabb_Sofa_frl_apartment_sofa"
发表回复