anhtld commited on
Commit
fb612cb
·
verified ·
1 Parent(s): 9ccb91b

Auto-sync: 2026-06-30 04:59:14

Browse files
dovla_cil/eval/maniskill_policy_rollout.py CHANGED
@@ -1,5 +1,6 @@
1
  from __future__ import annotations
2
 
 
3
  import pickle
4
  from collections import Counter, defaultdict
5
  from dataclasses import dataclass, replace
@@ -101,6 +102,7 @@ def evaluate_maniskill_policy_rollout(
101
  retrieval_residual_direction: str = "candidate_minus_anchor",
102
  retrieval_residual_reduce: str = "none",
103
  retrieval_residual_challenger_types: tuple[str, ...] = (),
 
104
  retrieval_residual_challenger_margin: float = 0.0,
105
  lattice_exclude_types: tuple[str, ...] = (),
106
  candidate_type_bonuses: dict[str, float] | None = None,
@@ -244,6 +246,9 @@ def evaluate_maniskill_policy_rollout(
244
  for candidate_type in retrieval_residual_challenger_types
245
  if candidate_type.strip()
246
  )
 
 
 
247
  candidate_type_bonuses = {
248
  str(candidate_type): float(bonus)
249
  for candidate_type, bonus in (candidate_type_bonuses or {}).items()
@@ -367,6 +372,9 @@ def evaluate_maniskill_policy_rollout(
367
  retrieval_residual_challenger_types=(
368
  retrieval_residual_challenger_types
369
  ),
 
 
 
370
  retrieval_residual_challenger_margin=(
371
  retrieval_residual_challenger_margin
372
  ),
@@ -490,6 +498,11 @@ def evaluate_maniskill_policy_rollout(
490
  )
491
  if selection_mode == "retrieval_residual"
492
  else [],
 
 
 
 
 
493
  "retrieval_residual_challenger_margin": (
494
  retrieval_residual_challenger_margin
495
  if selection_mode == "retrieval_residual"
@@ -1179,6 +1192,7 @@ def _evaluate_task_cases(
1179
  retrieval_residual_reduce: str = "none",
1180
  retrieval_residual_action_l2_penalty: float = 0.0,
1181
  retrieval_residual_challenger_types: tuple[str, ...] = (),
 
1182
  retrieval_residual_challenger_margin: float = 0.0,
1183
  lattice_exclude_types: tuple[str, ...] = (),
1184
  candidate_type_bonuses: dict[str, float] | None = None,
@@ -1252,6 +1266,7 @@ def _evaluate_task_cases(
1252
  retrieval_residual_scales=retrieval_residual_scales,
1253
  retrieval_residual_reduce=retrieval_residual_reduce,
1254
  retrieval_residual_action_l2_penalty=retrieval_residual_action_l2_penalty,
 
1255
  action_low=action_low,
1256
  action_high=action_high,
1257
  action_candidates=(
@@ -1790,6 +1805,7 @@ def _select_action_chunk(
1790
  retrieval_residual_scales: tuple[float, ...] = (),
1791
  retrieval_residual_reduce: str = "none",
1792
  retrieval_residual_action_l2_penalty: float = 0.0,
 
1793
  action_low: Any | None = None,
1794
  action_high: Any | None = None,
1795
  action_candidates: Any | None = None,
@@ -1855,6 +1871,7 @@ def _select_action_chunk(
1855
  selection_seed=selection_seed,
1856
  selection_margin=selection_margin,
1857
  residual_aggregate_mask=residual_aggregate_mask,
 
1858
  challenger_mask=challenger_mask,
1859
  challenger_margin=challenger_margin,
1860
  )
@@ -2256,6 +2273,7 @@ def _select_residual_lattice_action_chunk(
2256
  residual_reduce: str = "none",
2257
  residual_aggregate_mask: Any | None = None,
2258
  action_l2_penalty: float = 0.0,
 
2259
  challenger_mask: Any | None = None,
2260
  challenger_margin: float = 0.0,
2261
  ) -> tuple[Any, np.ndarray]:
@@ -2303,7 +2321,8 @@ def _select_residual_lattice_action_chunk(
2303
  challenger_mask = _expand_residual_lattice_mask(
2304
  challenger_mask,
2305
  torch=torch,
2306
- scale_count=len(tuple(float(scale) for scale in residual_scales) or (float(residual_scale),)),
 
2307
  num_gaussian_candidates=num_gaussian_candidates,
2308
  candidate_sigma=candidate_sigma,
2309
  )
@@ -2396,15 +2415,22 @@ def _expand_residual_lattice_mask(
2396
  mask: Any | None,
2397
  *,
2398
  torch: Any,
2399
- scale_count: int,
 
2400
  num_gaussian_candidates: int,
2401
  candidate_sigma: float,
2402
  ) -> Any | None:
2403
  if mask is None:
2404
  return None
2405
- expanded = mask
2406
- if scale_count > 1:
2407
- expanded = torch.cat([expanded for _ in range(scale_count)], dim=1)
 
 
 
 
 
 
2408
  if num_gaussian_candidates > 1 and candidate_sigma > 0:
2409
  extra = torch.zeros(
2410
  expanded.shape[0],
@@ -2416,6 +2442,15 @@ def _expand_residual_lattice_mask(
2416
  return expanded
2417
 
2418
 
 
 
 
 
 
 
 
 
 
2419
  def _align_residual_horizon_to_policy(policy_mean: Any, residuals: Any, *, torch: Any) -> Any:
2420
  if residuals.ndim != 4:
2421
  raise ValueError("residuals must have shape [B,K,H,D]")
 
1
  from __future__ import annotations
2
 
3
+ import math
4
  import pickle
5
  from collections import Counter, defaultdict
6
  from dataclasses import dataclass, replace
 
102
  retrieval_residual_direction: str = "candidate_minus_anchor",
103
  retrieval_residual_reduce: str = "none",
104
  retrieval_residual_challenger_types: tuple[str, ...] = (),
105
+ retrieval_residual_challenger_scales: tuple[float, ...] = (),
106
  retrieval_residual_challenger_margin: float = 0.0,
107
  lattice_exclude_types: tuple[str, ...] = (),
108
  candidate_type_bonuses: dict[str, float] | None = None,
 
246
  for candidate_type in retrieval_residual_challenger_types
247
  if candidate_type.strip()
248
  )
249
+ retrieval_residual_challenger_scales = tuple(
250
+ float(scale) for scale in retrieval_residual_challenger_scales
251
+ )
252
  candidate_type_bonuses = {
253
  str(candidate_type): float(bonus)
254
  for candidate_type, bonus in (candidate_type_bonuses or {}).items()
 
372
  retrieval_residual_challenger_types=(
373
  retrieval_residual_challenger_types
374
  ),
375
+ retrieval_residual_challenger_scales=(
376
+ retrieval_residual_challenger_scales
377
+ ),
378
  retrieval_residual_challenger_margin=(
379
  retrieval_residual_challenger_margin
380
  ),
 
498
  )
499
  if selection_mode == "retrieval_residual"
500
  else [],
501
+ "retrieval_residual_challenger_scales": list(
502
+ retrieval_residual_challenger_scales
503
+ )
504
+ if selection_mode == "retrieval_residual"
505
+ else [],
506
  "retrieval_residual_challenger_margin": (
507
  retrieval_residual_challenger_margin
508
  if selection_mode == "retrieval_residual"
 
1192
  retrieval_residual_reduce: str = "none",
1193
  retrieval_residual_action_l2_penalty: float = 0.0,
1194
  retrieval_residual_challenger_types: tuple[str, ...] = (),
1195
+ retrieval_residual_challenger_scales: tuple[float, ...] = (),
1196
  retrieval_residual_challenger_margin: float = 0.0,
1197
  lattice_exclude_types: tuple[str, ...] = (),
1198
  candidate_type_bonuses: dict[str, float] | None = None,
 
1266
  retrieval_residual_scales=retrieval_residual_scales,
1267
  retrieval_residual_reduce=retrieval_residual_reduce,
1268
  retrieval_residual_action_l2_penalty=retrieval_residual_action_l2_penalty,
1269
+ retrieval_residual_challenger_scales=retrieval_residual_challenger_scales,
1270
  action_low=action_low,
1271
  action_high=action_high,
1272
  action_candidates=(
 
1805
  retrieval_residual_scales: tuple[float, ...] = (),
1806
  retrieval_residual_reduce: str = "none",
1807
  retrieval_residual_action_l2_penalty: float = 0.0,
1808
+ retrieval_residual_challenger_scales: tuple[float, ...] = (),
1809
  action_low: Any | None = None,
1810
  action_high: Any | None = None,
1811
  action_candidates: Any | None = None,
 
1871
  selection_seed=selection_seed,
1872
  selection_margin=selection_margin,
1873
  residual_aggregate_mask=residual_aggregate_mask,
1874
+ retrieval_residual_challenger_scales=retrieval_residual_challenger_scales,
1875
  challenger_mask=challenger_mask,
1876
  challenger_margin=challenger_margin,
1877
  )
 
2273
  residual_reduce: str = "none",
2274
  residual_aggregate_mask: Any | None = None,
2275
  action_l2_penalty: float = 0.0,
2276
+ retrieval_residual_challenger_scales: tuple[float, ...] = (),
2277
  challenger_mask: Any | None = None,
2278
  challenger_margin: float = 0.0,
2279
  ) -> tuple[Any, np.ndarray]:
 
2321
  challenger_mask = _expand_residual_lattice_mask(
2322
  challenger_mask,
2323
  torch=torch,
2324
+ scales=scales,
2325
+ include_scales=retrieval_residual_challenger_scales,
2326
  num_gaussian_candidates=num_gaussian_candidates,
2327
  candidate_sigma=candidate_sigma,
2328
  )
 
2415
  mask: Any | None,
2416
  *,
2417
  torch: Any,
2418
+ scales: tuple[float, ...],
2419
+ include_scales: tuple[float, ...] = (),
2420
  num_gaussian_candidates: int,
2421
  candidate_sigma: float,
2422
  ) -> Any | None:
2423
  if mask is None:
2424
  return None
2425
+ scale_values = tuple(float(scale) for scale in scales)
2426
+ if not scale_values:
2427
+ raise ValueError("scales must not be empty")
2428
+ allowed_scales = tuple(float(scale) for scale in include_scales)
2429
+ blocks = [
2430
+ mask if _scale_is_allowed(scale, allowed_scales) else torch.zeros_like(mask)
2431
+ for scale in scale_values
2432
+ ]
2433
+ expanded = torch.cat(blocks, dim=1) if len(blocks) > 1 else blocks[0]
2434
  if num_gaussian_candidates > 1 and candidate_sigma > 0:
2435
  extra = torch.zeros(
2436
  expanded.shape[0],
 
2442
  return expanded
2443
 
2444
 
2445
+ def _scale_is_allowed(scale: float, allowed_scales: tuple[float, ...]) -> bool:
2446
+ if not allowed_scales:
2447
+ return True
2448
+ return any(
2449
+ math.isclose(float(scale), float(allowed), rel_tol=1.0e-6, abs_tol=1.0e-6)
2450
+ for allowed in allowed_scales
2451
+ )
2452
+
2453
+
2454
  def _align_residual_horizon_to_policy(policy_mean: Any, residuals: Any, *, torch: Any) -> Any:
2455
  if residuals.ndim != 4:
2456
  raise ValueError("residuals must have shape [B,K,H,D]")