Pass the avatar config explicitly; degas_eval no longer back-fills it
Browse files
README.md
CHANGED
|
@@ -68,12 +68,18 @@ python degas_eval.py \
|
|
| 68 |
--dat_dir "$PWD/DREAMS-AVATAR/data/P1C2" \
|
| 69 |
--ip none \
|
| 70 |
--model_path "$PWD/weights/avatars/P1_smplx" \
|
| 71 |
-
--configs
|
| 72 |
dataset.cache_dir="$PWD/cache/P1C2_eval_cam3" \
|
| 73 |
dataset.test.cam_select=[3] \
|
| 74 |
"dataset.test.frm_list=np.arange(0, 293, 8).tolist()"
|
| 75 |
```
|
| 76 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 77 |
**`--model_path` must be absolute.** A relative one is resolved *inside* `--dat_dir`
|
| 78 |
(`os.path.join(dat_dir, model_path)`), because that is where a training run writes by
|
| 79 |
default, so `weights/avatars/P1_smplx` fails with a `FileNotFoundError` on a path you never
|
|
@@ -81,9 +87,9 @@ typed. Hence `$PWD`.
|
|
| 81 |
|
| 82 |
Three more things fail quietly rather than loudly, so they are worth stating plainly:
|
| 83 |
|
| 84 |
-
1. **
|
| 85 |
-
|
| 86 |
-
is
|
| 87 |
2. **Give every capture its own `dataset.cache_dir`.** Decoded frames are named
|
| 88 |
`cam%02d/%08d.jpg` with no capture in the path, so a shared cache would serve P1C1's
|
| 89 |
frame 110 for P1C2's frame 110.
|
|
@@ -93,7 +99,8 @@ Three more things fail quietly rather than loudly, so they are worth stating pla
|
|
| 93 |
`--dat_dir` on their own. A config saved by your own training run holds an absolute path
|
| 94 |
to the training session's codes instead, and there you must override it.
|
| 95 |
|
| 96 |
-
For `P1_dpe`,
|
|
|
|
| 97 |
|
| 98 |
## Training setup
|
| 99 |
|
|
|
|
| 68 |
--dat_dir "$PWD/DREAMS-AVATAR/data/P1C2" \
|
| 69 |
--ip none \
|
| 70 |
--model_path "$PWD/weights/avatars/P1_smplx" \
|
| 71 |
+
--configs "$PWD/weights/avatars/P1_smplx/config.yaml" \
|
| 72 |
dataset.cache_dir="$PWD/cache/P1C2_eval_cam3" \
|
| 73 |
dataset.test.cam_select=[3] \
|
| 74 |
"dataset.test.frm_list=np.arange(0, 293, 8).tolist()"
|
| 75 |
```
|
| 76 |
|
| 77 |
+
**You pass the avatar's config yourself.** `degas_eval.py` does not read the run's
|
| 78 |
+
`config.yaml` behind your back; it used to append it last, which let a training-time value
|
| 79 |
+
silently outrank the command line. Each avatar here ships a portable, fully resolved
|
| 80 |
+
`config.yaml` (`dat_dir: ???`, no machine-specific paths), so naming it alone is enough.
|
| 81 |
+
Anything required but missing is reported by name up front, not deep inside the model.
|
| 82 |
+
|
| 83 |
**`--model_path` must be absolute.** A relative one is resolved *inside* `--dat_dir`
|
| 84 |
(`os.path.join(dat_dir, model_path)`), because that is where a training run writes by
|
| 85 |
default, so `weights/avatars/P1_smplx` fails with a `FileNotFoundError` on a path you never
|
|
|
|
| 87 |
|
| 88 |
Three more things fail quietly rather than loudly, so they are worth stating plainly:
|
| 89 |
|
| 90 |
+
1. **Pass the avatar's own `config.yaml`**, or it is not evaluated under the settings it was
|
| 91 |
+
trained with. Command-line `key=value` overrides still outrank every config file, which
|
| 92 |
+
is why the test split is set that way above.
|
| 93 |
2. **Give every capture its own `dataset.cache_dir`.** Decoded frames are named
|
| 94 |
`cam%02d/%08d.jpg` with no capture in the path, so a shared cache would serve P1C1's
|
| 95 |
frame 110 for P1C2's frame 110.
|
|
|
|
| 99 |
`--dat_dir` on their own. A config saved by your own training run holds an absolute path
|
| 100 |
to the training session's codes instead, and there you must override it.
|
| 101 |
|
| 102 |
+
For `P1_dpe`, point `--model_path` and `--configs` at that avatar instead, and add
|
| 103 |
+
`dataset.with_face_dpe=` for the session you are driving with.
|
| 104 |
|
| 105 |
## Training setup
|
| 106 |
|