Auto-sync: 2026-06-28 01:00:39
Browse files
dovla_cil/training/trainer.py
CHANGED
|
@@ -120,6 +120,11 @@ class DoVLATrainer:
|
|
| 120 |
self.train_group_ids, self.val_group_ids = _split_group_ids(
|
| 121 |
self.dataset.group_ids, val_fraction=config.val_fraction, seed=config.seed
|
| 122 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 123 |
self.device = self._resolve_device(config.device)
|
| 124 |
self.model_config = DoVLAConfig(
|
| 125 |
obs_dim=config.obs_dim,
|
|
@@ -163,6 +168,14 @@ class DoVLATrainer:
|
|
| 163 |
|
| 164 |
def train(self) -> dict[str, Any]:
|
| 165 |
write_json(self._resolved_config(), self.output_dir / "resolved_config.json")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 166 |
if torch is None:
|
| 167 |
return self._train_without_torch()
|
| 168 |
|
|
@@ -556,6 +569,7 @@ class DoVLATrainer:
|
|
| 556 |
payload["backbone_feature_cache"] = str(payload["backbone_feature_cache"])
|
| 557 |
if payload["policy_target_map"] is not None:
|
| 558 |
payload["policy_target_map"] = str(payload["policy_target_map"])
|
|
|
|
| 559 |
return payload
|
| 560 |
|
| 561 |
def _initialize_frozen_backbone_cache(self) -> None:
|
|
@@ -729,6 +743,27 @@ def _load_policy_target_map(path: str | Path | None) -> dict[str, str]:
|
|
| 729 |
return output
|
| 730 |
|
| 731 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 732 |
def _record_score(record: CILRecord) -> tuple[float, float, str]:
|
| 733 |
rank_score = -float(record.rank_within_group) if record.rank_within_group is not None else 0.0
|
| 734 |
return record.reward.score, rank_score, record.record_id
|
|
|
|
| 120 |
self.train_group_ids, self.val_group_ids = _split_group_ids(
|
| 121 |
self.dataset.group_ids, val_fraction=config.val_fraction, seed=config.seed
|
| 122 |
)
|
| 123 |
+
self.policy_target_map_coverage = _policy_target_map_coverage(
|
| 124 |
+
self.policy_target_record_ids,
|
| 125 |
+
train_group_ids=self.train_group_ids,
|
| 126 |
+
val_group_ids=self.val_group_ids,
|
| 127 |
+
)
|
| 128 |
self.device = self._resolve_device(config.device)
|
| 129 |
self.model_config = DoVLAConfig(
|
| 130 |
obs_dim=config.obs_dim,
|
|
|
|
| 168 |
|
| 169 |
def train(self) -> dict[str, Any]:
|
| 170 |
write_json(self._resolved_config(), self.output_dir / "resolved_config.json")
|
| 171 |
+
if self.policy_target_record_ids:
|
| 172 |
+
coverage = self.policy_target_map_coverage
|
| 173 |
+
print(
|
| 174 |
+
"policy_target_map_coverage "
|
| 175 |
+
"train={train_covered}/{train_groups} ({train_coverage:.1%}) "
|
| 176 |
+
"val={val_covered}/{val_groups} ({val_coverage:.1%}) "
|
| 177 |
+
"targets={num_targets}".format(**coverage)
|
| 178 |
+
)
|
| 179 |
if torch is None:
|
| 180 |
return self._train_without_torch()
|
| 181 |
|
|
|
|
| 569 |
payload["backbone_feature_cache"] = str(payload["backbone_feature_cache"])
|
| 570 |
if payload["policy_target_map"] is not None:
|
| 571 |
payload["policy_target_map"] = str(payload["policy_target_map"])
|
| 572 |
+
payload["policy_target_map_coverage"] = self.policy_target_map_coverage
|
| 573 |
return payload
|
| 574 |
|
| 575 |
def _initialize_frozen_backbone_cache(self) -> None:
|
|
|
|
| 743 |
return output
|
| 744 |
|
| 745 |
|
| 746 |
+
def _policy_target_map_coverage(
|
| 747 |
+
target_record_ids: dict[str, str],
|
| 748 |
+
*,
|
| 749 |
+
train_group_ids: list[str],
|
| 750 |
+
val_group_ids: list[str],
|
| 751 |
+
) -> dict[str, float | int]:
|
| 752 |
+
train_covered = sum(1 for group_id in train_group_ids if group_id in target_record_ids)
|
| 753 |
+
val_covered = sum(1 for group_id in val_group_ids if group_id in target_record_ids)
|
| 754 |
+
train_groups = len(train_group_ids)
|
| 755 |
+
val_groups = len(val_group_ids)
|
| 756 |
+
return {
|
| 757 |
+
"num_targets": len(target_record_ids),
|
| 758 |
+
"train_groups": train_groups,
|
| 759 |
+
"train_covered": train_covered,
|
| 760 |
+
"train_coverage": train_covered / train_groups if train_groups else 0.0,
|
| 761 |
+
"val_groups": val_groups,
|
| 762 |
+
"val_covered": val_covered,
|
| 763 |
+
"val_coverage": val_covered / val_groups if val_groups else 0.0,
|
| 764 |
+
}
|
| 765 |
+
|
| 766 |
+
|
| 767 |
def _record_score(record: CILRecord) -> tuple[float, float, str]:
|
| 768 |
rank_score = -float(record.rank_within_group) if record.rank_within_group is not None else 0.0
|
| 769 |
return record.reward.score, rank_score, record.record_id
|