Skip to content

109. Using Evaluation Pipeline plugins

Several pipeline stages delegate their work to a plugin — a small, swappable component that handles one stage for one kind of data. Because raw recordings differ between data sources, the explore and parse stages in particular are almost always plugin-backed, so the pipeline can read your data without changing the pipeline itself.

This section explains how to select and configure plugins that already exist. To write your own, see Writing custom plugins.

109.1 Stages that use plugins

StagePlugin role
exploreDiscover the data files associated with a recording.
parseConvert a raw recording into a Foretellix object list.
mapProvide a usable map; can also call a map-generation or third-party plugin.
ext_matchEnrich a run with externally provided match data.
post_processRun custom post-processing over the results.

The denoise, ingest, match, and post_match stages do not use plugins.

Configure them directly in the flow — see Configuring the Evaluation Pipeline flow.

109.2 Referencing a plugin

In the flow configuration, select a plugin with the plugin: key in the stage's block, using the form <library>.<plugin_name>:

explore:
  plugin: common.pandaset_explorer

parse:
  plugin: common.pandaset_parser

The part before the dot is the plugin library; the part after it is the plugin name within that library.

109.3 Plugin libraries

A plugin library is a directory of plugin definitions, located through an environment variable named FTX_EVALUATE_<LIBRARY>_PLUGIN_LIB. For the library named common, that variable is FTX_EVALUATE_COMMON_PLUGIN_LIB.

The installer sets the environment variable for each plugin library included in your distribution, so a plugin reference such as common.pandaset_parser resolves out of the box.

109.3.1 common library

The common library ships with the base Foretify installation and provides general-purpose plugins:

PluginStagePurpose
common.pandaset_explorerexploreDiscover files in a Pandaset-format recording directory.
common.pandaset_parserparseConvert Pandaset recordings to a Foretellix object list.
common.ol_explorerexploreDiscover files for recordings already in object list format.
common.standard_mapmapProvide an existing map, with optional map-generation and third-party fallbacks.
common.foretify_result_explorerexploreDiscover files for inputs that are already Foretify run results.
common.stub_vendormap (third-party)Placeholder third-party map vendor — raises until replaced with a real vendor integration.

Pandaset is a public autonomous-driving dataset; the pandaset_* plugins read recordings laid out in that format, where each recording is a sequence directory. The pipeline accepts only single-file drive_data inputs, so reference a sequence by its meta/gps.json anchor file — for example "drive_data": "/datasets/pandaset/001/meta/gps.json". The explorer derives and validates the sequence directory from the anchor. The common library ships a parser for Pandaset only — for any other recording format, write a custom parser. When your data is already a Foretellix object list (a .pb file), reference common.ol_explorer and omit the parse stage.

Additional plugin libraries may be included in your distribution depending on the data sources you work with. Each sets its own FTX_EVALUATE_<LIBRARY>_PLUGIN_LIB environment variable and is referenced the same way.

109.4 Plugin reference resolution

When the pipeline reads plugin: <library>.<plugin_name>, it looks for a YAML fragment at $FTX_EVALUATE_<LIBRARY>_PLUGIN_LIB/<stage_subdir>/<plugin_name>.yaml.

The stage subdirectory depends on the stage type: explorers, parsers, mapgens, map_providers, third_party_maps, ext_matchers, or post_processors. So common.pandaset_parser resolves to $FTX_EVALUATE_COMMON_PLUGIN_LIB/parsers/pandaset_parser.yaml.

Each library fragment names the Python class to load and provides the plugin's default configuration:

# parsers/pandaset_parser.yaml
class: evaluation_pipeline.plugins.parsers.pandaset_parser.PandasetParser
config:
  conversion_to_ms: 1000      # ns -> ms factor
  utm_crs: "EPSG:32610"       # UTM zone used during ego-motion projection
  dataset_crs: "EPSG:4326"    # native dataset CRS (lat/lon)
  print_unique_objects: false

You do not edit library fragments to use a plugin — you reference the plugin from your flow and, when needed, override its defaults there.

109.5 Overriding a plugin's configuration

Values you set under a stage's config: block deep-merge on top of the plugin's defaults, so you only specify what you want to change:

parse:
  plugin: common.pandaset_parser
  config:
    utm_crs: "EPSG:32632"     # override just this default

Plugin-based stages also accept the stage's common options — shared by every plugin of that stage — at the top level of the block, alongside plugin::

parse:
  plugin: common.pandaset_parser
  max_clip_length_s: 30        # common stage option — applies to every parser
  round_times: true
  config:
    utm_crs: "EPSG:32632"

109.6 Pandaset end-to-end example

The following flow uses only common-library plugins to run an end-to-end evaluation on Pandaset-format recordings:

stages: [explore, parse, denoise, map, ingest, match, post_match]

user_top_file: $FTX/evaluate/library/config/user_configs/ftlx_user_config_pandaset_top.osc

explore:
  plugin: common.pandaset_explorer

parse:
  plugin: common.pandaset_parser

denoise:
  config: $FTX/evaluate/library/config/stage_configs/ftlx_denoiser_config_full.yaml

map:
  plugin: common.standard_map
  format: xodr
  enable_mapgen: false
  enable_third_party: false

When no existing plugin supports your data, write a custom plugin — see Writing custom plugins.