mirror of
https://github.com/huggingface/lerobot.git
synced 2026-07-24 18:26:11 +00:00
fix(datasets): skip zero-width features in compute_episode_stats
`LeRobotDataset.save_episode()` raised `ValueError: cannot reshape array of size 0 into shape (0)` whenever a declared non-string feature had a zero-width dimension (e.g. `shape=(0,)`). The root cause was `compute_episode_stats` running stats on every non-string/language feature, then `RunningQuantileStats.update` calling `batch.reshape(-1, batch.shape[-1])` on the empty array. Skip features whose declared `shape` contains a zero dim, mirroring the existing skip for `string` / `language` dtype features. Fixes #3654
This commit is contained in:
@@ -519,6 +519,9 @@ def compute_episode_stats(
|
|||||||
if features[key]["dtype"] in {"string", "language"}:
|
if features[key]["dtype"] in {"string", "language"}:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
if any(d == 0 for d in features[key].get("shape", ())):
|
||||||
|
continue
|
||||||
|
|
||||||
if features[key]["dtype"] in ["image", "video"]:
|
if features[key]["dtype"] in ["image", "video"]:
|
||||||
ep_ft_array = sample_images(data)
|
ep_ft_array = sample_images(data)
|
||||||
axes_to_reduce = (0, 2, 3)
|
axes_to_reduce = (0, 2, 3)
|
||||||
|
|||||||
@@ -687,6 +687,29 @@ def test_compute_episode_stats_string_features_skipped():
|
|||||||
assert "q01" in stats["action"]
|
assert "q01" in stats["action"]
|
||||||
|
|
||||||
|
|
||||||
|
def test_compute_episode_stats_zero_width_features_skipped():
|
||||||
|
"""Test that features with a zero-width dim (e.g. shape=(0,)) are skipped."""
|
||||||
|
episode_data = {
|
||||||
|
"empty": np.zeros((100, 0), dtype=np.float32), # Zero-width feature
|
||||||
|
"action": np.random.normal(0, 1, (100, 5)),
|
||||||
|
}
|
||||||
|
features = {
|
||||||
|
"empty": {"dtype": "float32", "shape": (0,)},
|
||||||
|
"action": {"dtype": "float32", "shape": (5,)},
|
||||||
|
}
|
||||||
|
|
||||||
|
stats = compute_episode_stats(
|
||||||
|
episode_data,
|
||||||
|
features,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Zero-width features should be skipped
|
||||||
|
assert "empty" not in stats
|
||||||
|
assert "action" in stats
|
||||||
|
assert "q01" in stats["action"]
|
||||||
|
assert stats["action"]["mean"].shape == (5,)
|
||||||
|
|
||||||
|
|
||||||
def test_aggregate_feature_stats_with_quantiles():
|
def test_aggregate_feature_stats_with_quantiles():
|
||||||
"""Test aggregating feature stats that include quantiles."""
|
"""Test aggregating feature stats that include quantiles."""
|
||||||
stats_ft_list = [
|
stats_ft_list = [
|
||||||
|
|||||||
Reference in New Issue
Block a user