BonanDing commited on
Commit
c975233
·
1 Parent(s): 9913a60

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)