Fix disabled DeMemWM memory selection slots
Browse files
datasets/video/memory_selection.py
CHANGED
|
@@ -392,15 +392,15 @@ def select_memory_indices(poses, target_positions, cfg=None, split: str = "train
|
|
| 392 |
poses = _as_pose_array(poses)
|
| 393 |
target_positions = np.asarray(target_positions, dtype=np.int64)
|
| 394 |
target_positions = target_positions[(target_positions >= 0) & (target_positions < len(poses))]
|
|
|
|
| 395 |
|
| 396 |
counts = {
|
| 397 |
-
"anchor": int(cfg_get(cfg, "max_anchor_frames", 0)),
|
| 398 |
-
"dynamic": int(cfg_get(cfg, "max_dynamic_frames", 0)),
|
| 399 |
-
"revisit": int(cfg_get(cfg, "max_revisit_frames", 0)),
|
| 400 |
}
|
| 401 |
indices, masks = _empty_selection(counts)
|
| 402 |
|
| 403 |
-
enabled = bool(cfg_get(cfg, "enabled", True))
|
| 404 |
backend = cfg_get(cfg, "backend", "dememwm")
|
| 405 |
backend = "dememwm" if backend is None else str(backend).lower()
|
| 406 |
if enabled and backend != "dememwm":
|
|
@@ -429,9 +429,10 @@ def select_memory_indices(poses, target_positions, cfg=None, split: str = "train
|
|
| 429 |
|
| 430 |
|
| 431 |
def memory_segment_lengths(target_length: int, cfg=None) -> Dict[str, int]:
|
|
|
|
| 432 |
return {
|
| 433 |
"target": int(target_length),
|
| 434 |
-
"anchor": int(cfg_get(cfg, "max_anchor_frames", 0)),
|
| 435 |
-
"dynamic": int(cfg_get(cfg, "max_dynamic_frames", 0)),
|
| 436 |
-
"revisit": int(cfg_get(cfg, "max_revisit_frames", 0)),
|
| 437 |
}
|
|
|
|
| 392 |
poses = _as_pose_array(poses)
|
| 393 |
target_positions = np.asarray(target_positions, dtype=np.int64)
|
| 394 |
target_positions = target_positions[(target_positions >= 0) & (target_positions < len(poses))]
|
| 395 |
+
enabled = bool(cfg_get(cfg, "enabled", True))
|
| 396 |
|
| 397 |
counts = {
|
| 398 |
+
"anchor": int(cfg_get(cfg, "max_anchor_frames", 0)) if enabled else 0,
|
| 399 |
+
"dynamic": int(cfg_get(cfg, "max_dynamic_frames", 0)) if enabled else 0,
|
| 400 |
+
"revisit": int(cfg_get(cfg, "max_revisit_frames", 0)) if enabled else 0,
|
| 401 |
}
|
| 402 |
indices, masks = _empty_selection(counts)
|
| 403 |
|
|
|
|
| 404 |
backend = cfg_get(cfg, "backend", "dememwm")
|
| 405 |
backend = "dememwm" if backend is None else str(backend).lower()
|
| 406 |
if enabled and backend != "dememwm":
|
|
|
|
| 429 |
|
| 430 |
|
| 431 |
def memory_segment_lengths(target_length: int, cfg=None) -> Dict[str, int]:
|
| 432 |
+
enabled = bool(cfg_get(cfg, "enabled", True))
|
| 433 |
return {
|
| 434 |
"target": int(target_length),
|
| 435 |
+
"anchor": int(cfg_get(cfg, "max_anchor_frames", 0)) if enabled else 0,
|
| 436 |
+
"dynamic": int(cfg_get(cfg, "max_dynamic_frames", 0)) if enabled else 0,
|
| 437 |
+
"revisit": int(cfg_get(cfg, "max_revisit_frames", 0)) if enabled else 0,
|
| 438 |
}
|
tests/test_dememwm_latent_dataset.py
CHANGED
|
@@ -630,6 +630,24 @@ class DeMemWMLatentDatasetTests(unittest.TestCase):
|
|
| 630 |
with self.assertRaisesRegex(NotImplementedError, "packed .* frame-memory API"):
|
| 631 |
DeMemWMMinecraft.interactive(object(), None, None, None, None, None, None, None, None, None)
|
| 632 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 633 |
def test_dataset_returns_target_anchor_dynamic_revisit_contract(self):
|
| 634 |
with tempfile.TemporaryDirectory() as tmp:
|
| 635 |
root = Path(tmp)
|
|
|
|
| 630 |
with self.assertRaisesRegex(NotImplementedError, "packed .* frame-memory API"):
|
| 631 |
DeMemWMMinecraft.interactive(object(), None, None, None, None, None, None, None, None, None)
|
| 632 |
|
| 633 |
+
def test_disabled_memory_selection_does_not_allocate_memory_slots(self):
|
| 634 |
+
with tempfile.TemporaryDirectory() as tmp:
|
| 635 |
+
root = Path(tmp)
|
| 636 |
+
_write_latent_npz(root / "training" / "sample.npz", 104)
|
| 637 |
+
dataset = MinecraftVideoDeMemWMLatentDataset(
|
| 638 |
+
_dataset_cfg(root, memory_selection=_selection_cfg(enabled=False)),
|
| 639 |
+
split="training",
|
| 640 |
+
)
|
| 641 |
+
sample = dataset[0]
|
| 642 |
+
|
| 643 |
+
self.assertEqual(dataset.memory_condition_length, 0)
|
| 644 |
+
self.assertEqual(sample["memory_segments"], {"target": 3, "anchor": 0, "dynamic": 0, "revisit": 0})
|
| 645 |
+
self.assertEqual(tuple(sample["latents"].shape), (3, 1, 1, 2))
|
| 646 |
+
self.assertEqual(sample["frame_indices"].tolist(), [100, 101, 102])
|
| 647 |
+
self.assertTrue(sample["memory_masks"]["target"].all().item())
|
| 648 |
+
for key in ("anchor", "dynamic", "revisit"):
|
| 649 |
+
self.assertEqual(tuple(sample["memory_masks"][key].shape), (0,))
|
| 650 |
+
|
| 651 |
def test_dataset_returns_target_anchor_dynamic_revisit_contract(self):
|
| 652 |
with tempfile.TemporaryDirectory() as tmp:
|
| 653 |
root = Path(tmp)
|