Match EasyCom oracle labels to EgoSpeak sampling

This commit is contained in:
Xin Wang
2026-09-07 10:22:05 +08:00
parent 70e3aaaaf6
commit 2632402a70
4 changed files with 78 additions and 46 deletions

View File

@@ -23,27 +23,33 @@ class OracleFeatureTests(unittest.TestCase):
def setUp(self) -> None:
torch.set_num_threads(1)
def test_transcript_intervals_are_rasterized_into_half_open_bins(self) -> None:
def test_transcript_intervals_match_egospeak_right_edge_sampling(self) -> None:
rows = [
SimpleNamespace(
uid="a",
participant_id=3,
dense_start_frame=3,
dense_end_frame_exclusive=5,
# EasyCom annotation Start_Frame=1, End_Frame=8. Samples at
# source markers 4,8,... therefore include only row 0.
dense_start_frame=0,
dense_end_frame_exclusive=8,
),
SimpleNamespace(
uid="b",
participant_id=2,
dense_start_frame=8,
dense_end_frame_exclusive=12,
# Start_Frame=5, End_Frame=13 includes markers 8 and 12.
dense_start_frame=4,
dense_end_frame_exclusive=13,
),
]
activity, wearer, audit = participant_activity(
rows, num_steps=4, wearer_id=2
)
self.assertEqual(activity[3].tolist(), [True, True, False, False])
self.assertEqual(wearer.tolist(), [False, False, True, False])
self.assertEqual(audit["discarded_terminal_transcript_frames"], 0)
self.assertEqual(activity[3].tolist(), [True, False, False, False])
self.assertEqual(wearer.tolist(), [False, True, True, False])
self.assertEqual(
audit["target_sampling_policy"],
"egospeak-right-edge-start-inclusive-end-exclusive",
)
def test_history_at_row_does_not_read_later_activity(self) -> None:
first = torch.tensor([0, 1, 0, 0, 0], dtype=torch.bool)
@@ -152,7 +158,7 @@ class OracleFeatureTests(unittest.TestCase):
"config": {
"oracle_analysis": True,
"uses_speech_labels": True,
"causal_policy": "fully-observed-half-open-5hz-bins",
"causal_policy": "egospeak-right-edge-current-state",
"oracle_condition": "per-person",
"visual_dim": 6,
"audio_dim": 5,
@@ -179,6 +185,8 @@ class OracleFeatureTests(unittest.TestCase):
self.assertEqual(audio.shape, (n, 6))
self.assertEqual(people.dimension, 6)
self.assertEqual(contract["format"], ORACLE_FORMAT)
self.assertTrue(torch.equal(people.row_to_frame, torch.arange(n)))
self.assertTrue(torch.allclose(people.chosen_frame_times, times))
head = TurnPredictionHead(
hidden_size=8,
num_horizons=2,