如何在配置中多次重用一个包?

问题描述

我有一个通用的摄像头配置 yaml,其中通常在特定摄像头之间发生变化的唯一内容是 IP 地址。某些字段(在以下示例中为 fps)保持不变。

我可以在 Hydra/OmegaConf 中做这样的事情吗?

any_camera.yaml

any_camera:
  stream_url: ???
  fps: 25

all_cameras.yaml

all_cameras:
  cam1:
    @{any_camera}
    stream_url: rtsp://10.0.0.1

  cam2:
    @{any_camera}
    stream_url: rtsp://10.0.0.2

解决方法

我可以看到两个可能的选择:

  1. 在 Hydra 中,您可以尝试:extending configsselect_multiple_configs_from_config_group

基本上,您可以让 cam1 和 cam2 都从 any_camera 扩展并具有特定的覆盖。 然后在 all_cameras.yaml 中,可以选择多个配置组来拥有配置列表。

  1. 您还可以查看 omegaconf 的 node interpolation。但这可能需要您更改凸轮配置的结构。
,

多次使用相同配置的规范答案是覆盖配置包。

defaults:
 - server/db@src: mysql
 - server/db@dst: mysql

会在config对象的两个地方,src和dst中产生server/db/mysql.yaml的内容。

请参阅包页面中的 this 部分。