Implementation:Facebookresearch Habitat lab InfoDict Utils
| Knowledge Sources | |
|---|---|
| Domains | Embodied_AI, Utility |
| Last Updated | 2026-02-15 00:00 GMT |
Overview
The InfoDict Utils module provides utility functions for extracting scalar metrics from Gym environment info dictionaries, filtering out non-scalar values like top-down maps and collision flags.
Description
This module contains two functions:
extract_scalars_from_info takes a single Gym environment info dictionary and returns a flattened dictionary of string keys to float values. It recursively traverses nested dictionaries (using dot-separated keys), filters out non-scalar values (strings, arrays with size > 1), and excludes entries from the NON_SCALAR_METRICS set (which includes "top_down_map" and "collisions.is_collision") as well as any user-specified ignore_keys.
extract_scalars_from_infos applies extract_scalars_from_info to a list of info dictionaries (one per environment) and aggregates the results into a dictionary mapping metric names to lists of float values, using a defaultdict(list).
Usage
Use these functions during training or evaluation to extract loggable scalar metrics from environment info dictionaries for TensorBoard logging or metric aggregation.
Code Reference
Source Location
- Repository: Facebookresearch_Habitat_lab
- File: habitat-baselines/habitat_baselines/utils/info_dict.py
- Lines: 1-74
Signature
NON_SCALAR_METRICS = {"top_down_map", "collisions.is_collision"}
def extract_scalars_from_info(
info: Dict[str, Any], ignore_keys: Optional[Set[str]] = None
) -> Dict[str, float]:
def extract_scalars_from_infos(
infos: List[Dict[str, Any]],
ignore_keys: Optional[Set[str]] = None,
) -> Dict[str, List[float]]:
Import
from habitat_baselines.utils.info_dict import extract_scalars_from_info, extract_scalars_from_infos
I/O Contract
Inputs (extract_scalars_from_info)
| Name | Type | Required | Description |
|---|---|---|---|
| info | Dict[str, Any] | Yes | A single Gym environment info dictionary |
| ignore_keys | Optional[Set[str]] | No | Set of key names to exclude from the result (default: None) |
Outputs (extract_scalars_from_info)
| Name | Type | Description |
|---|---|---|
| scalars | Dict[str, float] | Flattened dictionary of scalar metric names to float values |
Inputs (extract_scalars_from_infos)
| Name | Type | Required | Description |
|---|---|---|---|
| infos | List[Dict[str, Any]] | Yes | List of Gym environment info dictionaries (one per environment) |
| ignore_keys | Optional[Set[str]] | No | Set of key names to exclude from results (default: None) |
Outputs (extract_scalars_from_infos)
| Name | Type | Description |
|---|---|---|
| scalars | Dict[str, List[float]] | Dictionary mapping metric names to lists of float values (one per environment) |
Usage Examples
Basic Usage
from habitat_baselines.utils.info_dict import (
extract_scalars_from_info,
extract_scalars_from_infos,
)
# Single environment info
info = {
"distance_to_goal": 1.5,
"success": 1.0,
"spl": 0.85,
"top_down_map": {"map": large_array}, # Filtered out
"collisions": {"is_collision": True, "count": 3},
}
scalars = extract_scalars_from_info(info)
# Result: {"distance_to_goal": 1.5, "success": 1.0, "spl": 0.85, "collisions.count": 3.0}
# Multiple environments
infos = [info_env0, info_env1, info_env2]
aggregated = extract_scalars_from_infos(infos)
# Result: {"distance_to_goal": [1.5, 2.0, 0.8], "success": [1.0, 0.0, 1.0], ...}