rydlrKE commited on
Commit
4d5a4d7
·
1 Parent(s): 787fe53

Add skeleton loader entry-exit diagnostics and robust fallback

Browse files
Files changed (1) hide show
  1. kimodo/skeleton/base.py +40 -6
kimodo/skeleton/base.py CHANGED
@@ -69,12 +69,41 @@ class SkeletonBase(torch.nn.Module):
69
 
70
  if load and folder is not None:
71
  pfolder = Path(folder)
72
- if not (pfolder / "joints.p").exists() and self.name is not None:
73
- fallback_folder = skeleton_asset_path(self.name)
74
- if (fallback_folder / "joints.p").exists():
75
- pfolder = fallback_folder
76
- self.folder = str(pfolder)
77
- neutral_joints = torch.load(pfolder / "joints.p").squeeze()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  self.register_buffer("neutral_joints", neutral_joints, persistent=False)
79
 
80
  if (pfolder / "bvh_joints.p").exists():
@@ -90,6 +119,11 @@ class SkeletonBase(torch.nn.Module):
90
  if baked_rest_path.exists():
91
  rest_pose_local_rot = torch.load(baked_rest_path).squeeze()
92
  self.register_buffer("rest_pose_local_rot", rest_pose_local_rot, persistent=False)
 
 
 
 
 
93
 
94
  self.bone_order_names = [x for x, y in self.bone_order_names_with_parents]
95
 
 
69
 
70
  if load and folder is not None:
71
  pfolder = Path(folder)
72
+ class_default_name = getattr(self.__class__, "name", None)
73
+ print(
74
+ "[kimodo][skeleton][init][entry]"
75
+ f" class={self.__class__.__name__} name={self.name} class_default={class_default_name}"
76
+ f" folder={pfolder} joints_exists={(pfolder / 'joints.p').exists()}"
77
+ )
78
+ if not (pfolder / "joints.p").exists():
79
+ candidate_names = []
80
+ if class_default_name:
81
+ candidate_names.append(str(class_default_name))
82
+ if self.name:
83
+ candidate_names.append(str(self.name))
84
+ # Robust fallback for renamed runtime names in model configs
85
+ candidate_names.extend(["somaskel30", "somaskel77", "g1skel34", "smplx22"])
86
+ for candidate in candidate_names:
87
+ fallback_folder = skeleton_asset_path(candidate)
88
+ if (fallback_folder / "joints.p").exists():
89
+ pfolder = fallback_folder
90
+ self.folder = str(pfolder)
91
+ print(
92
+ "[kimodo][skeleton][init][fallback]"
93
+ f" class={self.__class__.__name__} candidate={candidate} path={pfolder}"
94
+ )
95
+ break
96
+ try:
97
+ neutral_joints = torch.load(pfolder / "joints.p").squeeze()
98
+ except Exception as error:
99
+ print(
100
+ "[kimodo][skeleton][init][error]"
101
+ f" class={self.__class__.__name__} resolved_folder={pfolder}"
102
+ f" dir_exists={pfolder.exists()}"
103
+ f" dir_entries={sorted([p.name for p in pfolder.iterdir()]) if pfolder.exists() else []}"
104
+ f" error={type(error).__name__}: {error}"
105
+ )
106
+ raise
107
  self.register_buffer("neutral_joints", neutral_joints, persistent=False)
108
 
109
  if (pfolder / "bvh_joints.p").exists():
 
119
  if baked_rest_path.exists():
120
  rest_pose_local_rot = torch.load(baked_rest_path).squeeze()
121
  self.register_buffer("rest_pose_local_rot", rest_pose_local_rot, persistent=False)
122
+ print(
123
+ "[kimodo][skeleton][init][exit]"
124
+ f" class={self.__class__.__name__} resolved_folder={pfolder}"
125
+ f" neutral_shape={tuple(self.neutral_joints.shape)}"
126
+ )
127
 
128
  self.bone_order_names = [x for x, y in self.bone_order_names_with_parents]
129