Add PickClutter smoke_v5 benchmark GIF renders
Browse filesUpload the full smoke_v5_eval_tuned_softerpref dense-occlusion GIF rerender bundle, manifest/index, renderer script, and top-level docs updates.
This view is limited to 50 files because it contains too many changes. See raw diff
- .gitattributes +100 -0
- MODEL_AND_ARTIFACT_INDEX.md +6 -0
- PUBLIC_BENCHMARK_RESULTS.md +4 -0
- README.md +34 -0
- code/VLAarchtests2_code/VLAarchtests/code/reveal_vla_bimanual/eval/render_maniskill_pickclutter_benchmark_gifs.py +835 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/INDEX.md +59 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172000.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172001.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172002.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172003.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172004.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172005.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172006.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172007.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172008.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172009.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172010.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172011.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172012.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172013.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172014.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172015.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172016.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172017.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172018.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172019.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172020.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172021.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172022.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172023.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172024.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172025.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172026.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172027.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172028.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172029.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172030.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172031.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172032.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172033.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172034.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172035.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172036.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172037.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172038.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172039.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172040.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172041.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172042.gif +3 -0
- reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172043.gif +3 -0
.gitattributes
CHANGED
|
@@ -36,3 +36,103 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 36 |
code/VLAarchtests2_code/VLAarchtests/code/reveal_vla_bimanual/eval/__pycache__/run_maniskill_pickclutter_smoke.cpython-311.pyc filter=lfs diff=lfs merge=lfs -text
|
| 37 |
code/VLAarchtests2_code/VLAarchtests/code/reveal_vla_bimanual/eval/__pycache__/run_maniskill_bridge_retrieval_smoke.cpython-311.pyc filter=lfs diff=lfs merge=lfs -text
|
| 38 |
reports/proxy_rank_only_live/active/reveal_benchmark.json filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
code/VLAarchtests2_code/VLAarchtests/code/reveal_vla_bimanual/eval/__pycache__/run_maniskill_pickclutter_smoke.cpython-311.pyc filter=lfs diff=lfs merge=lfs -text
|
| 37 |
code/VLAarchtests2_code/VLAarchtests/code/reveal_vla_bimanual/eval/__pycache__/run_maniskill_bridge_retrieval_smoke.cpython-311.pyc filter=lfs diff=lfs merge=lfs -text
|
| 38 |
reports/proxy_rank_only_live/active/reveal_benchmark.json filter=lfs diff=lfs merge=lfs -text
|
| 39 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172000.gif filter=lfs diff=lfs merge=lfs -text
|
| 40 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172001.gif filter=lfs diff=lfs merge=lfs -text
|
| 41 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172002.gif filter=lfs diff=lfs merge=lfs -text
|
| 42 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172003.gif filter=lfs diff=lfs merge=lfs -text
|
| 43 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172004.gif filter=lfs diff=lfs merge=lfs -text
|
| 44 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172005.gif filter=lfs diff=lfs merge=lfs -text
|
| 45 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172006.gif filter=lfs diff=lfs merge=lfs -text
|
| 46 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172007.gif filter=lfs diff=lfs merge=lfs -text
|
| 47 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172008.gif filter=lfs diff=lfs merge=lfs -text
|
| 48 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172009.gif filter=lfs diff=lfs merge=lfs -text
|
| 49 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172010.gif filter=lfs diff=lfs merge=lfs -text
|
| 50 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172011.gif filter=lfs diff=lfs merge=lfs -text
|
| 51 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172012.gif filter=lfs diff=lfs merge=lfs -text
|
| 52 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172013.gif filter=lfs diff=lfs merge=lfs -text
|
| 53 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172014.gif filter=lfs diff=lfs merge=lfs -text
|
| 54 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172015.gif filter=lfs diff=lfs merge=lfs -text
|
| 55 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172016.gif filter=lfs diff=lfs merge=lfs -text
|
| 56 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172017.gif filter=lfs diff=lfs merge=lfs -text
|
| 57 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172018.gif filter=lfs diff=lfs merge=lfs -text
|
| 58 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172019.gif filter=lfs diff=lfs merge=lfs -text
|
| 59 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172020.gif filter=lfs diff=lfs merge=lfs -text
|
| 60 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172021.gif filter=lfs diff=lfs merge=lfs -text
|
| 61 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172022.gif filter=lfs diff=lfs merge=lfs -text
|
| 62 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172023.gif filter=lfs diff=lfs merge=lfs -text
|
| 63 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172024.gif filter=lfs diff=lfs merge=lfs -text
|
| 64 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172025.gif filter=lfs diff=lfs merge=lfs -text
|
| 65 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172026.gif filter=lfs diff=lfs merge=lfs -text
|
| 66 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172027.gif filter=lfs diff=lfs merge=lfs -text
|
| 67 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172028.gif filter=lfs diff=lfs merge=lfs -text
|
| 68 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172029.gif filter=lfs diff=lfs merge=lfs -text
|
| 69 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172030.gif filter=lfs diff=lfs merge=lfs -text
|
| 70 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172031.gif filter=lfs diff=lfs merge=lfs -text
|
| 71 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172032.gif filter=lfs diff=lfs merge=lfs -text
|
| 72 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172033.gif filter=lfs diff=lfs merge=lfs -text
|
| 73 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172034.gif filter=lfs diff=lfs merge=lfs -text
|
| 74 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172035.gif filter=lfs diff=lfs merge=lfs -text
|
| 75 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172036.gif filter=lfs diff=lfs merge=lfs -text
|
| 76 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172037.gif filter=lfs diff=lfs merge=lfs -text
|
| 77 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172038.gif filter=lfs diff=lfs merge=lfs -text
|
| 78 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172039.gif filter=lfs diff=lfs merge=lfs -text
|
| 79 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172040.gif filter=lfs diff=lfs merge=lfs -text
|
| 80 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172041.gif filter=lfs diff=lfs merge=lfs -text
|
| 81 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172042.gif filter=lfs diff=lfs merge=lfs -text
|
| 82 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172043.gif filter=lfs diff=lfs merge=lfs -text
|
| 83 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172044.gif filter=lfs diff=lfs merge=lfs -text
|
| 84 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172045.gif filter=lfs diff=lfs merge=lfs -text
|
| 85 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172046.gif filter=lfs diff=lfs merge=lfs -text
|
| 86 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172047.gif filter=lfs diff=lfs merge=lfs -text
|
| 87 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172048.gif filter=lfs diff=lfs merge=lfs -text
|
| 88 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172049.gif filter=lfs diff=lfs merge=lfs -text
|
| 89 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172000.gif filter=lfs diff=lfs merge=lfs -text
|
| 90 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172001.gif filter=lfs diff=lfs merge=lfs -text
|
| 91 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172002.gif filter=lfs diff=lfs merge=lfs -text
|
| 92 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172003.gif filter=lfs diff=lfs merge=lfs -text
|
| 93 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172004.gif filter=lfs diff=lfs merge=lfs -text
|
| 94 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172005.gif filter=lfs diff=lfs merge=lfs -text
|
| 95 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172006.gif filter=lfs diff=lfs merge=lfs -text
|
| 96 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172007.gif filter=lfs diff=lfs merge=lfs -text
|
| 97 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172008.gif filter=lfs diff=lfs merge=lfs -text
|
| 98 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172009.gif filter=lfs diff=lfs merge=lfs -text
|
| 99 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172010.gif filter=lfs diff=lfs merge=lfs -text
|
| 100 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172011.gif filter=lfs diff=lfs merge=lfs -text
|
| 101 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172012.gif filter=lfs diff=lfs merge=lfs -text
|
| 102 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172013.gif filter=lfs diff=lfs merge=lfs -text
|
| 103 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172014.gif filter=lfs diff=lfs merge=lfs -text
|
| 104 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172015.gif filter=lfs diff=lfs merge=lfs -text
|
| 105 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172016.gif filter=lfs diff=lfs merge=lfs -text
|
| 106 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172017.gif filter=lfs diff=lfs merge=lfs -text
|
| 107 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172018.gif filter=lfs diff=lfs merge=lfs -text
|
| 108 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172019.gif filter=lfs diff=lfs merge=lfs -text
|
| 109 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172020.gif filter=lfs diff=lfs merge=lfs -text
|
| 110 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172021.gif filter=lfs diff=lfs merge=lfs -text
|
| 111 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172022.gif filter=lfs diff=lfs merge=lfs -text
|
| 112 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172023.gif filter=lfs diff=lfs merge=lfs -text
|
| 113 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172024.gif filter=lfs diff=lfs merge=lfs -text
|
| 114 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172025.gif filter=lfs diff=lfs merge=lfs -text
|
| 115 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172026.gif filter=lfs diff=lfs merge=lfs -text
|
| 116 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172027.gif filter=lfs diff=lfs merge=lfs -text
|
| 117 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172028.gif filter=lfs diff=lfs merge=lfs -text
|
| 118 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172029.gif filter=lfs diff=lfs merge=lfs -text
|
| 119 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172030.gif filter=lfs diff=lfs merge=lfs -text
|
| 120 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172031.gif filter=lfs diff=lfs merge=lfs -text
|
| 121 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172032.gif filter=lfs diff=lfs merge=lfs -text
|
| 122 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172033.gif filter=lfs diff=lfs merge=lfs -text
|
| 123 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172034.gif filter=lfs diff=lfs merge=lfs -text
|
| 124 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172035.gif filter=lfs diff=lfs merge=lfs -text
|
| 125 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172036.gif filter=lfs diff=lfs merge=lfs -text
|
| 126 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172037.gif filter=lfs diff=lfs merge=lfs -text
|
| 127 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172038.gif filter=lfs diff=lfs merge=lfs -text
|
| 128 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172039.gif filter=lfs diff=lfs merge=lfs -text
|
| 129 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172040.gif filter=lfs diff=lfs merge=lfs -text
|
| 130 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172041.gif filter=lfs diff=lfs merge=lfs -text
|
| 131 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172042.gif filter=lfs diff=lfs merge=lfs -text
|
| 132 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172043.gif filter=lfs diff=lfs merge=lfs -text
|
| 133 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172044.gif filter=lfs diff=lfs merge=lfs -text
|
| 134 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172045.gif filter=lfs diff=lfs merge=lfs -text
|
| 135 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172046.gif filter=lfs diff=lfs merge=lfs -text
|
| 136 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172047.gif filter=lfs diff=lfs merge=lfs -text
|
| 137 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172048.gif filter=lfs diff=lfs merge=lfs -text
|
| 138 |
+
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/trunk_only_ft/seed_172049.gif filter=lfs diff=lfs merge=lfs -text
|
MODEL_AND_ARTIFACT_INDEX.md
CHANGED
|
@@ -16,6 +16,8 @@
|
|
| 16 |
|
| 17 |
- `reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref/`
|
| 18 |
- strongest current dense-occlusion result
|
|
|
|
|
|
|
| 19 |
- `reports/maniskill_bag_bridge_eval_less_bonus_seed17/`
|
| 20 |
- `reports/maniskill_bag_bridge_eval_less_bonus_seed23/`
|
| 21 |
- `reports/maniskill_bag_bridge_eval_less_bonus_2seed_manual_summary.json`
|
|
@@ -40,6 +42,10 @@
|
|
| 40 |
- `docs/public_bridge_smoke_run_log_2026-04-01.md`
|
| 41 |
- `docs/minimum_sign_of_life_maniskill_pickclutter_run_2026-04-01.md`
|
| 42 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 43 |
## Repo History
|
| 44 |
|
| 45 |
- `history/VLAarchtests_previous_README.md`
|
|
|
|
| 16 |
|
| 17 |
- `reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref/`
|
| 18 |
- strongest current dense-occlusion result
|
| 19 |
+
- `reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/`
|
| 20 |
+
- side-by-side visual rerender of the final dense-occlusion held-out benchmark
|
| 21 |
- `reports/maniskill_bag_bridge_eval_less_bonus_seed17/`
|
| 22 |
- `reports/maniskill_bag_bridge_eval_less_bonus_seed23/`
|
| 23 |
- `reports/maniskill_bag_bridge_eval_less_bonus_2seed_manual_summary.json`
|
|
|
|
| 42 |
- `docs/public_bridge_smoke_run_log_2026-04-01.md`
|
| 43 |
- `docs/minimum_sign_of_life_maniskill_pickclutter_run_2026-04-01.md`
|
| 44 |
|
| 45 |
+
## Main Current Render Code
|
| 46 |
+
|
| 47 |
+
- `code/VLAarchtests2_code/VLAarchtests/code/reveal_vla_bimanual/eval/render_maniskill_pickclutter_benchmark_gifs.py`
|
| 48 |
+
|
| 49 |
## Repo History
|
| 50 |
|
| 51 |
- `history/VLAarchtests_previous_README.md`
|
PUBLIC_BENCHMARK_RESULTS.md
CHANGED
|
@@ -53,6 +53,10 @@ Benchmark:
|
|
| 53 |
- `95% CI = [0.44, 0.72]`
|
| 54 |
- `intervention_rate = 1.0`
|
| 55 |
- `non_base_selection_rate = 1.0`
|
|
|
|
|
|
|
|
|
|
|
|
|
| 56 |
|
| 57 |
### Exact `smoke_v5` eval tuning carried to held-out
|
| 58 |
|
|
|
|
| 53 |
- `95% CI = [0.44, 0.72]`
|
| 54 |
- `intervention_rate = 1.0`
|
| 55 |
- `non_base_selection_rate = 1.0`
|
| 56 |
+
- `reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/`
|
| 57 |
+
- full rerender of all `50` held-out seeds for `trunk_only_ft` and `adapter_active_ft`
|
| 58 |
+
- includes `index.html`, `INDEX.md`, and `manifest.json`
|
| 59 |
+
- rerender manifest reports `0` success mismatches against the saved benchmark json files
|
| 60 |
|
| 61 |
### Exact `smoke_v5` eval tuning carried to held-out
|
| 62 |
|
README.md
CHANGED
|
@@ -33,6 +33,7 @@ The main new addition in this repo is the public benchmark track work for the el
|
|
| 33 |
- ManiSkill bridge cloth retrieval proxy as the folded-cloth retrieval proxy
|
| 34 |
- the public benchmark package code and summaries
|
| 35 |
- the train/eval logs, checkpoints, cached datasets, validation sweeps, and correction logs for those runs
|
|
|
|
| 36 |
- the same-machine environment snapshot for the public benchmark stack used on this RunPod
|
| 37 |
|
| 38 |
## Top-Level Contents
|
|
@@ -60,6 +61,24 @@ The main new addition in this repo is the public benchmark track work for the el
|
|
| 60 |
- `MODEL_AND_ARTIFACT_INDEX.md`
|
| 61 |
- practical map of the main artifact roots to start from
|
| 62 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 63 |
## Architecture State Carried Forward
|
| 64 |
|
| 65 |
The core model family inherited from `VLAarchtests3` is still:
|
|
@@ -218,6 +237,21 @@ The big changes across `smoke_v2`, `smoke_v3`, `smoke_v4`, and `smoke_v5` were:
|
|
| 218 |
|
| 219 |
The big occlusion win was not caused by changing the eval episodes.
|
| 220 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 221 |
## Crucial Caveats
|
| 222 |
|
| 223 |
### Occlusion result was planner-tuned
|
|
|
|
| 33 |
- ManiSkill bridge cloth retrieval proxy as the folded-cloth retrieval proxy
|
| 34 |
- the public benchmark package code and summaries
|
| 35 |
- the train/eval logs, checkpoints, cached datasets, validation sweeps, and correction logs for those runs
|
| 36 |
+
- full visual rerenders of the final `smoke_v5_eval_tuned_softerpref` dense-occlusion benchmark for both `trunk_only_ft` and `adapter_active_ft`
|
| 37 |
- the same-machine environment snapshot for the public benchmark stack used on this RunPod
|
| 38 |
|
| 39 |
## Top-Level Contents
|
|
|
|
| 61 |
- `MODEL_AND_ARTIFACT_INDEX.md`
|
| 62 |
- practical map of the main artifact roots to start from
|
| 63 |
|
| 64 |
+
## Benchmark GIF Renders
|
| 65 |
+
|
| 66 |
+
The repo now also includes a full rendered replay of the final dense-occlusion benchmark:
|
| 67 |
+
|
| 68 |
+
- `reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/`
|
| 69 |
+
- `50` held-out `trunk_only_ft` gifs
|
| 70 |
+
- `50` held-out `adapter_active_ft` gifs
|
| 71 |
+
- `index.html`, `INDEX.md`, and `manifest.json` for browsing and validation
|
| 72 |
+
- renderer:
|
| 73 |
+
- `code/VLAarchtests2_code/VLAarchtests/code/reveal_vla_bimanual/eval/render_maniskill_pickclutter_benchmark_gifs.py`
|
| 74 |
+
|
| 75 |
+
Important caveats:
|
| 76 |
+
|
| 77 |
+
- these gifs are rerendered from the saved `smoke_v5_eval_tuned_softerpref` checkpoints and exact held-out seeds, not a different benchmark run
|
| 78 |
+
- the rerender kept the same `softer_pref` planner override used in the reported held-out result
|
| 79 |
+
- the rerender manifest records `0` success mismatches versus the saved benchmark json files
|
| 80 |
+
- only the dense-occlusion track has this full gif export right now
|
| 81 |
+
|
| 82 |
## Architecture State Carried Forward
|
| 83 |
|
| 84 |
The core model family inherited from `VLAarchtests3` is still:
|
|
|
|
| 237 |
|
| 238 |
The big occlusion win was not caused by changing the eval episodes.
|
| 239 |
|
| 240 |
+
### Dense-Occlusion Render Artifacts
|
| 241 |
+
|
| 242 |
+
The final dense-occlusion run also has a full visual export in:
|
| 243 |
+
|
| 244 |
+
- `reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/`
|
| 245 |
+
|
| 246 |
+
Those gifs show the robot interacting with the 3D scene and overlay the adaptor state per frame. For `adapter_active_ft`, the overlay includes:
|
| 247 |
+
|
| 248 |
+
- adaptor on/off state
|
| 249 |
+
- whether a non-base proposal was selected
|
| 250 |
+
- candidate index
|
| 251 |
+
- planner name
|
| 252 |
+
- planner score/confidence
|
| 253 |
+
- state signals such as visibility, access, gap, and damage
|
| 254 |
+
|
| 255 |
## Crucial Caveats
|
| 256 |
|
| 257 |
### Occlusion result was planner-tuned
|
code/VLAarchtests2_code/VLAarchtests/code/reveal_vla_bimanual/eval/render_maniskill_pickclutter_benchmark_gifs.py
ADDED
|
@@ -0,0 +1,835 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
import argparse
|
| 4 |
+
import html
|
| 5 |
+
import json
|
| 6 |
+
from collections import deque
|
| 7 |
+
from pathlib import Path
|
| 8 |
+
from typing import Any, Callable, Sequence
|
| 9 |
+
|
| 10 |
+
import imageio.v2 as imageio
|
| 11 |
+
import numpy as np
|
| 12 |
+
from PIL import Image, ImageDraw, ImageFont
|
| 13 |
+
|
| 14 |
+
from eval import run_maniskill_pickclutter_smoke as smoke
|
| 15 |
+
|
| 16 |
+
|
| 17 |
+
WORKSPACE_ROOT = Path("/workspace/workspace")
|
| 18 |
+
DEFAULT_REPORT_DIR = WORKSPACE_ROOT / "reports" / "maniskill_pickclutter_smoke_v5_eval_tuned_softerpref"
|
| 19 |
+
DEFAULT_OUTPUT_DIR = WORKSPACE_ROOT / "reports" / "maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs"
|
| 20 |
+
DEFAULT_CHECKPOINT_ROOT = WORKSPACE_ROOT / "outputs" / "maniskill_pickclutter_smoke_v5"
|
| 21 |
+
DEFAULT_TRUNK_CHECKPOINT = DEFAULT_CHECKPOINT_ROOT / "trunk_only_ft_seed17" / "checkpoint_best.pt"
|
| 22 |
+
DEFAULT_ADAPTER_CHECKPOINT = DEFAULT_CHECKPOINT_ROOT / "adapter_active_ft_seed17" / "checkpoint_best.pt"
|
| 23 |
+
DEFAULT_SPLIT_PATH = WORKSPACE_ROOT / "data" / "maniskill_pickclutter" / "smoke_v3" / "episode_splits.json"
|
| 24 |
+
DEFAULT_RENDER_EPISODES = 50
|
| 25 |
+
SOFTER_PREF_OVERRIDES = {
|
| 26 |
+
"mode_preference_bonus": 0.75,
|
| 27 |
+
"premature_retrieve_penalty": 0.5,
|
| 28 |
+
"premature_insert_penalty": 0.25,
|
| 29 |
+
"premature_maintain_penalty": 1.0,
|
| 30 |
+
"occlusion_maintain_gap_min_access": 0.30,
|
| 31 |
+
"occlusion_maintain_gap_min_visibility": 0.20,
|
| 32 |
+
"retrieve_stage_access_threshold": 0.18,
|
| 33 |
+
"retrieve_stage_reveal_threshold": 0.18,
|
| 34 |
+
"retrieve_stage_support_threshold": 0.18,
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
|
| 38 |
+
def _load_font(size: int) -> ImageFont.ImageFont:
|
| 39 |
+
for candidate in (
|
| 40 |
+
"/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf",
|
| 41 |
+
"/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf",
|
| 42 |
+
):
|
| 43 |
+
path = Path(candidate)
|
| 44 |
+
if path.exists():
|
| 45 |
+
try:
|
| 46 |
+
return ImageFont.truetype(str(path), size=size)
|
| 47 |
+
except OSError:
|
| 48 |
+
continue
|
| 49 |
+
return ImageFont.load_default()
|
| 50 |
+
|
| 51 |
+
|
| 52 |
+
FONT = _load_font(16)
|
| 53 |
+
SMALL_FONT = _load_font(14)
|
| 54 |
+
|
| 55 |
+
|
| 56 |
+
def _parse_args() -> argparse.Namespace:
|
| 57 |
+
parser = argparse.ArgumentParser(description="Render the fixed smoke_v5_eval_tuned_softerpref PickClutter benchmark as GIFs.")
|
| 58 |
+
parser.add_argument("--report-dir", type=Path, default=DEFAULT_REPORT_DIR)
|
| 59 |
+
parser.add_argument("--output-dir", type=Path, default=DEFAULT_OUTPUT_DIR)
|
| 60 |
+
parser.add_argument("--split-path", type=Path, default=DEFAULT_SPLIT_PATH)
|
| 61 |
+
parser.add_argument("--trunk-checkpoint", type=Path, default=DEFAULT_TRUNK_CHECKPOINT)
|
| 62 |
+
parser.add_argument("--adapter-checkpoint", type=Path, default=DEFAULT_ADAPTER_CHECKPOINT)
|
| 63 |
+
parser.add_argument("--seed", type=int, default=17, help="Training seed used for the checkpoints.")
|
| 64 |
+
parser.add_argument("--limit", type=int, default=DEFAULT_RENDER_EPISODES)
|
| 65 |
+
parser.add_argument("--start-index", type=int, default=0)
|
| 66 |
+
parser.add_argument("--mode", choices=("both", "trunk_only_ft", "adapter_active_ft"), default="both")
|
| 67 |
+
parser.add_argument("--frame-stride", type=int, default=3, help="Capture every N low-level env steps.")
|
| 68 |
+
parser.add_argument("--fps", type=int, default=8)
|
| 69 |
+
parser.add_argument("--render-size", type=int, default=512)
|
| 70 |
+
parser.add_argument("--initial-hold", type=int, default=6)
|
| 71 |
+
parser.add_argument("--final-hold", type=int, default=10)
|
| 72 |
+
parser.add_argument("--skip-existing", action="store_true")
|
| 73 |
+
return parser.parse_args()
|
| 74 |
+
|
| 75 |
+
|
| 76 |
+
def _load_eval_seeds(split_path: Path, *, start_index: int, limit: int) -> list[int]:
|
| 77 |
+
payload = json.loads(split_path.read_text(encoding="utf-8"))
|
| 78 |
+
seeds = [int(seed) for seed in payload["eval"]]
|
| 79 |
+
return seeds[start_index : start_index + limit]
|
| 80 |
+
|
| 81 |
+
|
| 82 |
+
def _load_expected_records(report_path: Path) -> dict[int, dict[str, Any]]:
|
| 83 |
+
payload = json.loads(report_path.read_text(encoding="utf-8"))
|
| 84 |
+
return {
|
| 85 |
+
int(record["episode_seed"]): record
|
| 86 |
+
for record in payload.get("episode_records", [])
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
|
| 90 |
+
def _float_value(value: Any) -> float | None:
|
| 91 |
+
if value is None:
|
| 92 |
+
return None
|
| 93 |
+
array = smoke._np(value).reshape(-1)
|
| 94 |
+
if array.size == 0:
|
| 95 |
+
return None
|
| 96 |
+
return float(array[0])
|
| 97 |
+
|
| 98 |
+
|
| 99 |
+
def _vector_values(value: Any) -> list[float]:
|
| 100 |
+
return [float(item) for item in smoke._np(value).reshape(-1).tolist()]
|
| 101 |
+
|
| 102 |
+
|
| 103 |
+
def _stringify_mode_list(value: Any) -> list[str]:
|
| 104 |
+
if value is None:
|
| 105 |
+
return []
|
| 106 |
+
if isinstance(value, (list, tuple)):
|
| 107 |
+
if value and isinstance(value[0], (list, tuple)):
|
| 108 |
+
return [str(item) for item in value[0]]
|
| 109 |
+
return [str(item) for item in value]
|
| 110 |
+
return [str(value)]
|
| 111 |
+
|
| 112 |
+
|
| 113 |
+
def _to_render_rgb(frame: Any) -> np.ndarray:
|
| 114 |
+
array = smoke._np(frame)
|
| 115 |
+
if array.ndim == 4:
|
| 116 |
+
array = array[0]
|
| 117 |
+
array = np.asarray(array, dtype=np.uint8)
|
| 118 |
+
if array.shape[-1] == 4:
|
| 119 |
+
array = array[..., :3]
|
| 120 |
+
return array
|
| 121 |
+
|
| 122 |
+
|
| 123 |
+
def _state_line(label: str, value: float | None) -> str:
|
| 124 |
+
if value is None:
|
| 125 |
+
return f"{label}=n/a"
|
| 126 |
+
return f"{label}={value:.2f}"
|
| 127 |
+
|
| 128 |
+
|
| 129 |
+
def _build_overlay_lines(
|
| 130 |
+
*,
|
| 131 |
+
render_mode_name: str,
|
| 132 |
+
episode_seed: int,
|
| 133 |
+
macro_step: int,
|
| 134 |
+
macro_limit: int,
|
| 135 |
+
low_level_step: int,
|
| 136 |
+
selected_mode: str,
|
| 137 |
+
adapter_active: bool,
|
| 138 |
+
non_base: bool,
|
| 139 |
+
selected_index: int | None,
|
| 140 |
+
selected_score: float | None,
|
| 141 |
+
selected_confidence: float | None,
|
| 142 |
+
planning_mode: str | None,
|
| 143 |
+
interaction_state: dict[str, Any],
|
| 144 |
+
env: smoke.PickClutterRevealEnv,
|
| 145 |
+
) -> list[str]:
|
| 146 |
+
display_name = "adapter_on" if render_mode_name == "adapter_active_ft" else "trunk_only"
|
| 147 |
+
success_now = smoke._success_from_state(env)
|
| 148 |
+
progress = smoke._extraction_progress(env)
|
| 149 |
+
clearance = smoke._clearance_score(env)
|
| 150 |
+
lines = [
|
| 151 |
+
f"{display_name} | seed {episode_seed} | macro {macro_step}/{macro_limit}",
|
| 152 |
+
f"sim {low_level_step} | mode {selected_mode} | ok {'yes' if success_now else 'no'} | prog {progress:.2f} | clr {clearance:.2f}",
|
| 153 |
+
]
|
| 154 |
+
if render_mode_name == "trunk_only_ft":
|
| 155 |
+
lines.append("policy trunk_only | adaptor off")
|
| 156 |
+
return lines
|
| 157 |
+
state_conf = _float_value(interaction_state.get("state_confidence"))
|
| 158 |
+
visibility = _float_value(interaction_state.get("target_visibility_confidence"))
|
| 159 |
+
access = _float_value(interaction_state.get("actor_feasibility_score"))
|
| 160 |
+
gap_width = _float_value(interaction_state.get("gap_width"))
|
| 161 |
+
damage = _float_value(interaction_state.get("damage_proxy"))
|
| 162 |
+
lines.append(
|
| 163 |
+
f"adaptor {'on' if adapter_active else 'pass'} | non_base {'yes' if non_base else 'no'}"
|
| 164 |
+
f" | cand {selected_index if selected_index is not None else 'n/a'}"
|
| 165 |
+
)
|
| 166 |
+
lines.append(
|
| 167 |
+
f"planner {planning_mode or 'n/a'}"
|
| 168 |
+
+ " | "
|
| 169 |
+
+ (f"score {selected_score:.2f}" if selected_score is not None else "score n/a")
|
| 170 |
+
+ " | "
|
| 171 |
+
+ (f"conf {selected_confidence:.2f}" if selected_confidence is not None else "conf n/a")
|
| 172 |
+
)
|
| 173 |
+
lines.append(" | ".join([_state_line("state", state_conf), _state_line("vis", visibility), _state_line("access", access)]))
|
| 174 |
+
lines.append(
|
| 175 |
+
" | ".join(
|
| 176 |
+
[
|
| 177 |
+
_state_line("gap", gap_width),
|
| 178 |
+
_state_line("dmg", damage),
|
| 179 |
+
]
|
| 180 |
+
)
|
| 181 |
+
)
|
| 182 |
+
return lines
|
| 183 |
+
|
| 184 |
+
|
| 185 |
+
def _annotate_frame(frame: np.ndarray, lines: Sequence[str], *, render_size: int) -> np.ndarray:
|
| 186 |
+
image = Image.fromarray(frame)
|
| 187 |
+
if image.size != (render_size, render_size):
|
| 188 |
+
image = image.resize((render_size, render_size), resample=Image.Resampling.BILINEAR)
|
| 189 |
+
overlay_height = 148
|
| 190 |
+
canvas = Image.new("RGB", (render_size, render_size + overlay_height), color=(0, 0, 0))
|
| 191 |
+
canvas.paste(image, (0, 0))
|
| 192 |
+
draw = ImageDraw.Draw(canvas, "RGBA")
|
| 193 |
+
draw.rectangle((0, render_size, render_size, render_size + overlay_height), fill=(0, 0, 0, 220))
|
| 194 |
+
y = render_size + 10
|
| 195 |
+
for index, line in enumerate(lines):
|
| 196 |
+
font = FONT if index < 2 else SMALL_FONT
|
| 197 |
+
draw.text((12, y), line, font=font, fill=(245, 245, 245, 255))
|
| 198 |
+
y += 22 if index < 2 else 20
|
| 199 |
+
return np.asarray(canvas, dtype=np.uint8)
|
| 200 |
+
|
| 201 |
+
|
| 202 |
+
class FrameRecorder:
|
| 203 |
+
def __init__(
|
| 204 |
+
self,
|
| 205 |
+
*,
|
| 206 |
+
render_mode_name: str,
|
| 207 |
+
output_path: Path,
|
| 208 |
+
render_size: int,
|
| 209 |
+
frame_stride: int,
|
| 210 |
+
fps: int,
|
| 211 |
+
initial_hold: int,
|
| 212 |
+
final_hold: int,
|
| 213 |
+
) -> None:
|
| 214 |
+
self.render_mode_name = render_mode_name
|
| 215 |
+
self.output_path = output_path
|
| 216 |
+
self.render_size = int(render_size)
|
| 217 |
+
self.frame_stride = max(1, int(frame_stride))
|
| 218 |
+
self.fps = max(1, int(fps))
|
| 219 |
+
self.initial_hold = max(1, int(initial_hold))
|
| 220 |
+
self.final_hold = max(1, int(final_hold))
|
| 221 |
+
self.frames: list[np.ndarray] = []
|
| 222 |
+
self.low_level_step = 0
|
| 223 |
+
|
| 224 |
+
def capture(
|
| 225 |
+
self,
|
| 226 |
+
env: smoke.PickClutterRevealEnv,
|
| 227 |
+
*,
|
| 228 |
+
overlay_lines: Sequence[str],
|
| 229 |
+
force: bool = False,
|
| 230 |
+
hold: int = 1,
|
| 231 |
+
) -> None:
|
| 232 |
+
if not force and (self.low_level_step % self.frame_stride) != 0:
|
| 233 |
+
self.low_level_step += 1
|
| 234 |
+
return
|
| 235 |
+
frame = _to_render_rgb(env.render())
|
| 236 |
+
annotated = _annotate_frame(frame, overlay_lines, render_size=self.render_size)
|
| 237 |
+
repeat = max(1, int(hold))
|
| 238 |
+
for _ in range(repeat):
|
| 239 |
+
self.frames.append(annotated)
|
| 240 |
+
self.low_level_step += 1
|
| 241 |
+
|
| 242 |
+
def write(self) -> None:
|
| 243 |
+
self.output_path.parent.mkdir(parents=True, exist_ok=True)
|
| 244 |
+
imageio.mimsave(self.output_path, self.frames, duration=1.0 / float(self.fps), loop=0)
|
| 245 |
+
|
| 246 |
+
|
| 247 |
+
def _selected_adapter_details(outputs: dict[str, Any], *, selected_mode: str, active_mask: bool) -> dict[str, Any]:
|
| 248 |
+
if "proposal_mode_names" not in outputs or "best_candidate_indices" not in outputs:
|
| 249 |
+
return {
|
| 250 |
+
"selected_index": None,
|
| 251 |
+
"selected_score": None,
|
| 252 |
+
"selected_confidence": None,
|
| 253 |
+
"planning_mode": outputs.get("planning_mode"),
|
| 254 |
+
"interaction_state": outputs.get("interaction_state", {}),
|
| 255 |
+
}
|
| 256 |
+
proposal_mode_names = _stringify_mode_list(outputs.get("proposal_mode_names"))
|
| 257 |
+
best_index = int(smoke._np(outputs["best_candidate_indices"]).reshape(-1)[0])
|
| 258 |
+
planner_scores = _vector_values(outputs.get("planner_scores"))
|
| 259 |
+
confidences = _vector_values(outputs.get("adapter_confidence"))
|
| 260 |
+
score = planner_scores[best_index] if best_index < len(planner_scores) else None
|
| 261 |
+
confidence = confidences[best_index] if best_index < len(confidences) else None
|
| 262 |
+
if not active_mask:
|
| 263 |
+
best_index = proposal_mode_names.index(selected_mode) if selected_mode in proposal_mode_names else None
|
| 264 |
+
score = None if best_index is None or best_index >= len(planner_scores) else planner_scores[best_index]
|
| 265 |
+
confidence = None if best_index is None or best_index >= len(confidences) else confidences[best_index]
|
| 266 |
+
return {
|
| 267 |
+
"selected_index": best_index,
|
| 268 |
+
"selected_score": None if score is None else float(score),
|
| 269 |
+
"selected_confidence": None if confidence is None else float(confidence),
|
| 270 |
+
"planning_mode": outputs.get("planning_mode"),
|
| 271 |
+
"interaction_state": outputs.get("interaction_state", {}),
|
| 272 |
+
}
|
| 273 |
+
|
| 274 |
+
|
| 275 |
+
def _capture_repeat_delta(
|
| 276 |
+
env: smoke.PickClutterRevealEnv,
|
| 277 |
+
delta_xyz: Sequence[float],
|
| 278 |
+
*,
|
| 279 |
+
open_gripper: bool,
|
| 280 |
+
steps: int,
|
| 281 |
+
capture_callback: Callable[[smoke.PickClutterRevealEnv], None],
|
| 282 |
+
) -> dict[str, Any]:
|
| 283 |
+
last_obs: dict[str, Any] | None = None
|
| 284 |
+
action = np.zeros((1, 4), dtype=np.float32)
|
| 285 |
+
action[0, :3] = np.asarray(delta_xyz, dtype=np.float32)
|
| 286 |
+
action[0, 3] = smoke._gripper_action(open_gripper)
|
| 287 |
+
info = env.get_info()
|
| 288 |
+
for _ in range(int(steps)):
|
| 289 |
+
obs, _, terminated, truncated, info = env.step(action)
|
| 290 |
+
last_obs = obs
|
| 291 |
+
capture_callback(env)
|
| 292 |
+
if bool(np.asarray(terminated).reshape(-1)[0]) or bool(np.asarray(truncated).reshape(-1)[0]):
|
| 293 |
+
break
|
| 294 |
+
return {
|
| 295 |
+
"obs": last_obs if last_obs is not None else env.get_obs(info),
|
| 296 |
+
"terminated": False,
|
| 297 |
+
"truncated": False,
|
| 298 |
+
"info": info,
|
| 299 |
+
}
|
| 300 |
+
|
| 301 |
+
|
| 302 |
+
def _capture_move_tcp_to(
|
| 303 |
+
env: smoke.PickClutterRevealEnv,
|
| 304 |
+
target_xyz: Sequence[float],
|
| 305 |
+
*,
|
| 306 |
+
open_gripper: bool,
|
| 307 |
+
capture_callback: Callable[[smoke.PickClutterRevealEnv], None],
|
| 308 |
+
max_steps: int = 120,
|
| 309 |
+
tolerance: float = 0.008,
|
| 310 |
+
) -> dict[str, Any]:
|
| 311 |
+
last_obs: dict[str, Any] | None = None
|
| 312 |
+
target = np.asarray(target_xyz, dtype=np.float32)
|
| 313 |
+
info = env.get_info()
|
| 314 |
+
for _ in range(int(max_steps)):
|
| 315 |
+
tcp = smoke._vec3(env.unwrapped.agent.tcp.pose.p)
|
| 316 |
+
delta = target - tcp
|
| 317 |
+
if float(np.linalg.norm(delta)) <= float(tolerance):
|
| 318 |
+
break
|
| 319 |
+
action = np.zeros((1, 4), dtype=np.float32)
|
| 320 |
+
action[0, :3] = np.clip(delta / 0.04, -1.0, 1.0)
|
| 321 |
+
action[0, 3] = smoke._gripper_action(open_gripper)
|
| 322 |
+
obs, _, terminated, truncated, info = env.step(action)
|
| 323 |
+
last_obs = obs
|
| 324 |
+
capture_callback(env)
|
| 325 |
+
if bool(np.asarray(terminated).reshape(-1)[0]) or bool(np.asarray(truncated).reshape(-1)[0]):
|
| 326 |
+
break
|
| 327 |
+
return {
|
| 328 |
+
"obs": last_obs if last_obs is not None else env.get_obs(info),
|
| 329 |
+
"info": info,
|
| 330 |
+
}
|
| 331 |
+
|
| 332 |
+
|
| 333 |
+
def _capture_execute_push(
|
| 334 |
+
env: smoke.PickClutterRevealEnv,
|
| 335 |
+
*,
|
| 336 |
+
anchor_xyz: np.ndarray,
|
| 337 |
+
pre_offset: np.ndarray,
|
| 338 |
+
push_delta: np.ndarray,
|
| 339 |
+
push_steps: int,
|
| 340 |
+
capture_callback: Callable[[smoke.PickClutterRevealEnv], None],
|
| 341 |
+
) -> dict[str, Any]:
|
| 342 |
+
_capture_move_tcp_to(
|
| 343 |
+
env,
|
| 344 |
+
anchor_xyz + np.array([0.0, 0.0, 0.08], dtype=np.float32) + pre_offset,
|
| 345 |
+
open_gripper=True,
|
| 346 |
+
capture_callback=capture_callback,
|
| 347 |
+
)
|
| 348 |
+
_capture_move_tcp_to(
|
| 349 |
+
env,
|
| 350 |
+
anchor_xyz + pre_offset,
|
| 351 |
+
open_gripper=True,
|
| 352 |
+
capture_callback=capture_callback,
|
| 353 |
+
max_steps=100,
|
| 354 |
+
tolerance=0.010,
|
| 355 |
+
)
|
| 356 |
+
result = _capture_repeat_delta(
|
| 357 |
+
env,
|
| 358 |
+
push_delta,
|
| 359 |
+
open_gripper=True,
|
| 360 |
+
steps=push_steps,
|
| 361 |
+
capture_callback=capture_callback,
|
| 362 |
+
)
|
| 363 |
+
_capture_move_tcp_to(
|
| 364 |
+
env,
|
| 365 |
+
np.array([smoke._vec3(env.unwrapped.agent.tcp.pose.p)[0], smoke._vec3(env.unwrapped.agent.tcp.pose.p)[1], 0.10], dtype=np.float32),
|
| 366 |
+
open_gripper=True,
|
| 367 |
+
capture_callback=capture_callback,
|
| 368 |
+
max_steps=80,
|
| 369 |
+
tolerance=0.012,
|
| 370 |
+
)
|
| 371 |
+
return result
|
| 372 |
+
|
| 373 |
+
|
| 374 |
+
def _capture_execute_mode(
|
| 375 |
+
env: smoke.PickClutterRevealEnv,
|
| 376 |
+
mode_name: str,
|
| 377 |
+
*,
|
| 378 |
+
capture_callback: Callable[[smoke.PickClutterRevealEnv], None],
|
| 379 |
+
) -> dict[str, Any]:
|
| 380 |
+
target = smoke._target_position(env)
|
| 381 |
+
blocker = smoke._find_path_blocker(env)
|
| 382 |
+
if mode_name == "retrieve":
|
| 383 |
+
return _capture_execute_push(
|
| 384 |
+
env,
|
| 385 |
+
anchor_xyz=target,
|
| 386 |
+
pre_offset=np.array([0.0, 0.035, 0.026], dtype=np.float32),
|
| 387 |
+
push_delta=np.array([0.0, -0.7, 0.0], dtype=np.float32),
|
| 388 |
+
push_steps=18,
|
| 389 |
+
capture_callback=capture_callback,
|
| 390 |
+
)
|
| 391 |
+
if mode_name == "insert_actor":
|
| 392 |
+
return _capture_execute_push(
|
| 393 |
+
env,
|
| 394 |
+
anchor_xyz=target,
|
| 395 |
+
pre_offset=np.array([0.0, 0.045, 0.028], dtype=np.float32),
|
| 396 |
+
push_delta=np.array([0.0, -0.4, 0.0], dtype=np.float32),
|
| 397 |
+
push_steps=10,
|
| 398 |
+
capture_callback=capture_callback,
|
| 399 |
+
)
|
| 400 |
+
if mode_name == "widen_gap":
|
| 401 |
+
anchor = blocker if blocker is not None else target
|
| 402 |
+
direction = -1.0 if anchor[0] >= target[0] else 1.0
|
| 403 |
+
return _capture_execute_push(
|
| 404 |
+
env,
|
| 405 |
+
anchor_xyz=anchor,
|
| 406 |
+
pre_offset=np.array([0.0, 0.025, 0.028], dtype=np.float32),
|
| 407 |
+
push_delta=np.array([0.75 * direction, -0.12, 0.0], dtype=np.float32),
|
| 408 |
+
push_steps=18,
|
| 409 |
+
capture_callback=capture_callback,
|
| 410 |
+
)
|
| 411 |
+
if mode_name == "sweep_left":
|
| 412 |
+
anchor = blocker if blocker is not None else target
|
| 413 |
+
return _capture_execute_push(
|
| 414 |
+
env,
|
| 415 |
+
anchor_xyz=anchor,
|
| 416 |
+
pre_offset=np.array([0.015, 0.025, 0.028], dtype=np.float32),
|
| 417 |
+
push_delta=np.array([-0.70, -0.10, 0.0], dtype=np.float32),
|
| 418 |
+
push_steps=14,
|
| 419 |
+
capture_callback=capture_callback,
|
| 420 |
+
)
|
| 421 |
+
if mode_name == "sweep_right":
|
| 422 |
+
anchor = blocker if blocker is not None else target
|
| 423 |
+
return _capture_execute_push(
|
| 424 |
+
env,
|
| 425 |
+
anchor_xyz=anchor,
|
| 426 |
+
pre_offset=np.array([-0.015, 0.025, 0.028], dtype=np.float32),
|
| 427 |
+
push_delta=np.array([0.70, -0.10, 0.0], dtype=np.float32),
|
| 428 |
+
push_steps=14,
|
| 429 |
+
capture_callback=capture_callback,
|
| 430 |
+
)
|
| 431 |
+
if mode_name == "pin_canopy":
|
| 432 |
+
anchor = blocker if blocker is not None else target
|
| 433 |
+
return _capture_execute_push(
|
| 434 |
+
env,
|
| 435 |
+
anchor_xyz=anchor,
|
| 436 |
+
pre_offset=np.array([0.0, -0.015, 0.028], dtype=np.float32),
|
| 437 |
+
push_delta=np.array([0.0, 0.35, 0.0], dtype=np.float32),
|
| 438 |
+
push_steps=10,
|
| 439 |
+
capture_callback=capture_callback,
|
| 440 |
+
)
|
| 441 |
+
if mode_name in {"maintain_gap", "base_action"}:
|
| 442 |
+
_capture_move_tcp_to(
|
| 443 |
+
env,
|
| 444 |
+
np.array([target[0], target[1] + 0.02, 0.10], dtype=np.float32),
|
| 445 |
+
open_gripper=True,
|
| 446 |
+
capture_callback=capture_callback,
|
| 447 |
+
max_steps=60,
|
| 448 |
+
tolerance=0.015,
|
| 449 |
+
)
|
| 450 |
+
return _capture_repeat_delta(
|
| 451 |
+
env,
|
| 452 |
+
np.array([0.0, -0.10, 0.0], dtype=np.float32),
|
| 453 |
+
open_gripper=True,
|
| 454 |
+
steps=4,
|
| 455 |
+
capture_callback=capture_callback,
|
| 456 |
+
)
|
| 457 |
+
raise KeyError(f"Unsupported mode: {mode_name}")
|
| 458 |
+
|
| 459 |
+
|
| 460 |
+
def _render_episode(
|
| 461 |
+
*,
|
| 462 |
+
model: Any,
|
| 463 |
+
device: Any,
|
| 464 |
+
adapter_mode: str,
|
| 465 |
+
render_mode_name: str,
|
| 466 |
+
episode_seed: int,
|
| 467 |
+
expected_record: dict[str, Any] | None,
|
| 468 |
+
output_path: Path,
|
| 469 |
+
frame_stride: int,
|
| 470 |
+
fps: int,
|
| 471 |
+
render_size: int,
|
| 472 |
+
initial_hold: int,
|
| 473 |
+
final_hold: int,
|
| 474 |
+
) -> dict[str, Any]:
|
| 475 |
+
obs_env = smoke.PickClutterRevealEnv(
|
| 476 |
+
obs_mode="rgb+depth+segmentation",
|
| 477 |
+
control_mode="pd_ee_delta_pos",
|
| 478 |
+
render_mode="rgb_array",
|
| 479 |
+
)
|
| 480 |
+
sim_env = smoke.PickClutterRevealEnv(
|
| 481 |
+
obs_mode="none",
|
| 482 |
+
control_mode="pd_ee_delta_pos",
|
| 483 |
+
render_mode="rgb_array",
|
| 484 |
+
)
|
| 485 |
+
recorder = FrameRecorder(
|
| 486 |
+
render_mode_name=render_mode_name,
|
| 487 |
+
output_path=output_path,
|
| 488 |
+
render_size=render_size,
|
| 489 |
+
frame_stride=frame_stride,
|
| 490 |
+
fps=fps,
|
| 491 |
+
initial_hold=initial_hold,
|
| 492 |
+
final_hold=final_hold,
|
| 493 |
+
)
|
| 494 |
+
history: deque[dict[str, Any]] = deque(maxlen=smoke.HISTORY_STEPS)
|
| 495 |
+
success = False
|
| 496 |
+
first_reveal_step: int | None = None
|
| 497 |
+
first_retrieve_step: int | None = None
|
| 498 |
+
episode_disturbance: list[float] = []
|
| 499 |
+
try:
|
| 500 |
+
obs, _ = obs_env.reset(seed=int(episode_seed))
|
| 501 |
+
sim_env.reset(seed=int(episode_seed))
|
| 502 |
+
smoke._sync_env_state(obs_env, sim_env)
|
| 503 |
+
bootstrap_name = "adapter_on" if render_mode_name == "adapter_active_ft" else "trunk_only"
|
| 504 |
+
bootstrap_lines = [
|
| 505 |
+
f"{bootstrap_name} | seed {episode_seed} | macro 0/{smoke.MAX_MACRO_STEPS}",
|
| 506 |
+
"sim 0 | mode reset | ok no | prog 0.00 | clr 0.00",
|
| 507 |
+
"adaptor bootstrapping benchmark render",
|
| 508 |
+
]
|
| 509 |
+
recorder.capture(sim_env, overlay_lines=bootstrap_lines, force=True, hold=initial_hold)
|
| 510 |
+
for decision_step in range(smoke.MAX_MACRO_STEPS):
|
| 511 |
+
obs_bundle = smoke._extract_sensor_bundle(obs)
|
| 512 |
+
proprio = smoke._build_proprio(obs_env)
|
| 513 |
+
batch = smoke._batch_from_obs(obs_bundle, proprio, list(history), device)
|
| 514 |
+
with smoke.torch.no_grad():
|
| 515 |
+
if adapter_mode == "trunk_only":
|
| 516 |
+
outputs = model(**batch)
|
| 517 |
+
else:
|
| 518 |
+
outputs = model(
|
| 519 |
+
**batch,
|
| 520 |
+
adapter_mode=adapter_mode,
|
| 521 |
+
use_transition_model=True,
|
| 522 |
+
use_task_conditioning=True,
|
| 523 |
+
)
|
| 524 |
+
selected_mode, active_mask, non_base = smoke._eval_mode_name(outputs, render_mode_name)
|
| 525 |
+
adapter_details = _selected_adapter_details(outputs, selected_mode=selected_mode, active_mask=active_mask)
|
| 526 |
+
|
| 527 |
+
def capture_callback(current_env: smoke.PickClutterRevealEnv) -> None:
|
| 528 |
+
overlay_lines = _build_overlay_lines(
|
| 529 |
+
render_mode_name=render_mode_name,
|
| 530 |
+
episode_seed=episode_seed,
|
| 531 |
+
macro_step=decision_step + 1,
|
| 532 |
+
macro_limit=smoke.MAX_MACRO_STEPS,
|
| 533 |
+
low_level_step=recorder.low_level_step,
|
| 534 |
+
selected_mode=selected_mode,
|
| 535 |
+
adapter_active=active_mask,
|
| 536 |
+
non_base=non_base,
|
| 537 |
+
selected_index=adapter_details["selected_index"],
|
| 538 |
+
selected_score=adapter_details["selected_score"],
|
| 539 |
+
selected_confidence=adapter_details["selected_confidence"],
|
| 540 |
+
planning_mode=None if adapter_details["planning_mode"] is None else str(adapter_details["planning_mode"]),
|
| 541 |
+
interaction_state=adapter_details["interaction_state"] or {},
|
| 542 |
+
env=current_env,
|
| 543 |
+
)
|
| 544 |
+
recorder.capture(current_env, overlay_lines=overlay_lines)
|
| 545 |
+
|
| 546 |
+
pre_action_lines = _build_overlay_lines(
|
| 547 |
+
render_mode_name=render_mode_name,
|
| 548 |
+
episode_seed=episode_seed,
|
| 549 |
+
macro_step=decision_step + 1,
|
| 550 |
+
macro_limit=smoke.MAX_MACRO_STEPS,
|
| 551 |
+
low_level_step=recorder.low_level_step,
|
| 552 |
+
selected_mode=selected_mode,
|
| 553 |
+
adapter_active=active_mask,
|
| 554 |
+
non_base=non_base,
|
| 555 |
+
selected_index=adapter_details["selected_index"],
|
| 556 |
+
selected_score=adapter_details["selected_score"],
|
| 557 |
+
selected_confidence=adapter_details["selected_confidence"],
|
| 558 |
+
planning_mode=None if adapter_details["planning_mode"] is None else str(adapter_details["planning_mode"]),
|
| 559 |
+
interaction_state=adapter_details["interaction_state"] or {},
|
| 560 |
+
env=sim_env,
|
| 561 |
+
)
|
| 562 |
+
recorder.capture(sim_env, overlay_lines=pre_action_lines, force=True, hold=2)
|
| 563 |
+
start_positions = smoke._all_positions(obs_env)
|
| 564 |
+
smoke._sync_env_state(obs_env, sim_env)
|
| 565 |
+
_capture_execute_mode(sim_env, selected_mode, capture_callback=capture_callback)
|
| 566 |
+
end_metrics = smoke._candidate_metrics(sim_env, start_positions=start_positions, current_obs_bundle=None)
|
| 567 |
+
smoke._sync_env_state(sim_env, obs_env)
|
| 568 |
+
obs = obs_env.get_obs(obs_env.get_info())
|
| 569 |
+
history.append(
|
| 570 |
+
smoke._init_history_entry(
|
| 571 |
+
obs_bundle,
|
| 572 |
+
proprio,
|
| 573 |
+
smoke.CANONICAL_CHUNKS.get(selected_mode, smoke.CANONICAL_CHUNKS["base_action"]),
|
| 574 |
+
)
|
| 575 |
+
)
|
| 576 |
+
episode_disturbance.append(end_metrics["disturbance"])
|
| 577 |
+
if selected_mode != "retrieve" and selected_mode not in {"base_action", "maintain_gap"} and first_reveal_step is None:
|
| 578 |
+
first_reveal_step = decision_step + 1
|
| 579 |
+
if selected_mode == "retrieve" and first_retrieve_step is None:
|
| 580 |
+
first_retrieve_step = decision_step + 1
|
| 581 |
+
if smoke._success_from_state(obs_env):
|
| 582 |
+
success = True
|
| 583 |
+
break
|
| 584 |
+
completion_name = "adapter_on" if render_mode_name == "adapter_active_ft" else "trunk_only"
|
| 585 |
+
completion_lines = [
|
| 586 |
+
f"{completion_name} | seed {episode_seed} | macro {len(history)}/{smoke.MAX_MACRO_STEPS}",
|
| 587 |
+
f"sim {recorder.low_level_step} | done | success {'yes' if success else 'no'} | expected {'yes' if bool(expected_record and expected_record.get('success')) else 'no'}",
|
| 588 |
+
f"steps {len(history)} | first_reveal {first_reveal_step} | first_retrieve {first_retrieve_step}",
|
| 589 |
+
]
|
| 590 |
+
recorder.capture(sim_env, overlay_lines=completion_lines, force=True, hold=final_hold)
|
| 591 |
+
recorder.write()
|
| 592 |
+
finally:
|
| 593 |
+
obs_env.close()
|
| 594 |
+
sim_env.close()
|
| 595 |
+
expected_success = None if expected_record is None else bool(expected_record.get("success"))
|
| 596 |
+
return {
|
| 597 |
+
"episode_seed": int(episode_seed),
|
| 598 |
+
"render_mode_name": render_mode_name,
|
| 599 |
+
"adapter_mode": adapter_mode,
|
| 600 |
+
"gif_path": str(output_path),
|
| 601 |
+
"frames": len(recorder.frames),
|
| 602 |
+
"success": bool(success),
|
| 603 |
+
"expected_success": expected_success,
|
| 604 |
+
"matches_expected_success": None if expected_success is None else bool(success) == expected_success,
|
| 605 |
+
"steps": len(history),
|
| 606 |
+
"first_reveal_step": first_reveal_step,
|
| 607 |
+
"first_retrieve_step": first_retrieve_step,
|
| 608 |
+
"episode_disturbance": float(np.mean(episode_disturbance)) if episode_disturbance else 0.0,
|
| 609 |
+
}
|
| 610 |
+
|
| 611 |
+
|
| 612 |
+
def _render_mode_bundle(
|
| 613 |
+
*,
|
| 614 |
+
model: Any,
|
| 615 |
+
device: Any,
|
| 616 |
+
adapter_mode: str,
|
| 617 |
+
render_mode_name: str,
|
| 618 |
+
seeds: Sequence[int],
|
| 619 |
+
expected_records: dict[int, dict[str, Any]],
|
| 620 |
+
output_dir: Path,
|
| 621 |
+
frame_stride: int,
|
| 622 |
+
fps: int,
|
| 623 |
+
render_size: int,
|
| 624 |
+
initial_hold: int,
|
| 625 |
+
final_hold: int,
|
| 626 |
+
skip_existing: bool,
|
| 627 |
+
) -> list[dict[str, Any]]:
|
| 628 |
+
mode_dir = output_dir / render_mode_name
|
| 629 |
+
records: list[dict[str, Any]] = []
|
| 630 |
+
for episode_seed in seeds:
|
| 631 |
+
output_path = mode_dir / f"seed_{int(episode_seed)}.gif"
|
| 632 |
+
if skip_existing and output_path.exists():
|
| 633 |
+
expected = expected_records.get(int(episode_seed))
|
| 634 |
+
records.append(
|
| 635 |
+
{
|
| 636 |
+
"episode_seed": int(episode_seed),
|
| 637 |
+
"render_mode_name": render_mode_name,
|
| 638 |
+
"adapter_mode": adapter_mode,
|
| 639 |
+
"gif_path": str(output_path),
|
| 640 |
+
"frames": None,
|
| 641 |
+
"success": None,
|
| 642 |
+
"expected_success": None if expected is None else bool(expected.get("success")),
|
| 643 |
+
"matches_expected_success": None,
|
| 644 |
+
"steps": None,
|
| 645 |
+
"first_reveal_step": None,
|
| 646 |
+
"first_retrieve_step": None,
|
| 647 |
+
"episode_disturbance": None,
|
| 648 |
+
"skipped_existing": True,
|
| 649 |
+
}
|
| 650 |
+
)
|
| 651 |
+
print(json.dumps({"phase": "render_skip_existing", "mode": render_mode_name, "episode_seed": int(episode_seed)}), flush=True)
|
| 652 |
+
continue
|
| 653 |
+
record = _render_episode(
|
| 654 |
+
model=model,
|
| 655 |
+
device=device,
|
| 656 |
+
adapter_mode=adapter_mode,
|
| 657 |
+
render_mode_name=render_mode_name,
|
| 658 |
+
episode_seed=int(episode_seed),
|
| 659 |
+
expected_record=expected_records.get(int(episode_seed)),
|
| 660 |
+
output_path=output_path,
|
| 661 |
+
frame_stride=frame_stride,
|
| 662 |
+
fps=fps,
|
| 663 |
+
render_size=render_size,
|
| 664 |
+
initial_hold=initial_hold,
|
| 665 |
+
final_hold=final_hold,
|
| 666 |
+
)
|
| 667 |
+
records.append(record)
|
| 668 |
+
print(
|
| 669 |
+
json.dumps(
|
| 670 |
+
{
|
| 671 |
+
"phase": "render_episode_complete",
|
| 672 |
+
"mode": render_mode_name,
|
| 673 |
+
"episode_seed": int(episode_seed),
|
| 674 |
+
"success": record["success"],
|
| 675 |
+
"expected_success": record["expected_success"],
|
| 676 |
+
"matches_expected_success": record["matches_expected_success"],
|
| 677 |
+
"gif_path": str(output_path),
|
| 678 |
+
}
|
| 679 |
+
),
|
| 680 |
+
flush=True,
|
| 681 |
+
)
|
| 682 |
+
return records
|
| 683 |
+
|
| 684 |
+
|
| 685 |
+
def _write_manifest(output_dir: Path, payload: dict[str, Any]) -> None:
|
| 686 |
+
output_dir.mkdir(parents=True, exist_ok=True)
|
| 687 |
+
(output_dir / "manifest.json").write_text(json.dumps(payload, indent=2) + "\n", encoding="utf-8")
|
| 688 |
+
|
| 689 |
+
|
| 690 |
+
def _write_index(output_dir: Path, payload: dict[str, Any]) -> None:
|
| 691 |
+
rows = []
|
| 692 |
+
all_seeds = payload["seeds"]
|
| 693 |
+
by_mode: dict[str, dict[int, dict[str, Any]]] = {}
|
| 694 |
+
for mode_payload in payload["mode_records"]:
|
| 695 |
+
by_mode[mode_payload["render_mode_name"]] = {
|
| 696 |
+
int(record["episode_seed"]): record for record in mode_payload["records"]
|
| 697 |
+
}
|
| 698 |
+
for episode_seed in all_seeds:
|
| 699 |
+
trunk = by_mode.get("trunk_only_ft", {}).get(int(episode_seed))
|
| 700 |
+
active = by_mode.get("adapter_active_ft", {}).get(int(episode_seed))
|
| 701 |
+
rows.append(
|
| 702 |
+
{
|
| 703 |
+
"episode_seed": int(episode_seed),
|
| 704 |
+
"trunk_gif": "" if trunk is None else Path(str(trunk["gif_path"])).relative_to(output_dir).as_posix(),
|
| 705 |
+
"trunk_success": None if trunk is None else trunk["success"],
|
| 706 |
+
"adapter_gif": "" if active is None else Path(str(active["gif_path"])).relative_to(output_dir).as_posix(),
|
| 707 |
+
"adapter_success": None if active is None else active["success"],
|
| 708 |
+
}
|
| 709 |
+
)
|
| 710 |
+
markdown_lines = [
|
| 711 |
+
"# PickClutter smoke_v5_eval_tuned_softerpref GIF index",
|
| 712 |
+
"",
|
| 713 |
+
"- exact checkpoints: `maniskill_pickclutter_smoke_v5` seed17",
|
| 714 |
+
"- exact held-out seeds: `172000..172049`",
|
| 715 |
+
"- exact planner override: `softer_pref`",
|
| 716 |
+
"- overlays show selected mode and adaptor state on each frame",
|
| 717 |
+
"",
|
| 718 |
+
"| episode_seed | trunk_only_ft | success | adapter_active_ft | success |",
|
| 719 |
+
"| --- | --- | --- | --- | --- |",
|
| 720 |
+
]
|
| 721 |
+
html_rows = []
|
| 722 |
+
for row in rows:
|
| 723 |
+
markdown_lines.append(
|
| 724 |
+
f"| {row['episode_seed']} | "
|
| 725 |
+
f"[gif]({row['trunk_gif']}) | {row['trunk_success']} | "
|
| 726 |
+
f"[gif]({row['adapter_gif']}) | {row['adapter_success']} |"
|
| 727 |
+
)
|
| 728 |
+
html_rows.append(
|
| 729 |
+
"<tr>"
|
| 730 |
+
f"<td>{row['episode_seed']}</td>"
|
| 731 |
+
f"<td><img src=\"{html.escape(row['trunk_gif'])}\" width=\"360\"></td>"
|
| 732 |
+
f"<td>{row['trunk_success']}</td>"
|
| 733 |
+
f"<td><img src=\"{html.escape(row['adapter_gif'])}\" width=\"360\"></td>"
|
| 734 |
+
f"<td>{row['adapter_success']}</td>"
|
| 735 |
+
"</tr>"
|
| 736 |
+
)
|
| 737 |
+
(output_dir / "INDEX.md").write_text("\n".join(markdown_lines) + "\n", encoding="utf-8")
|
| 738 |
+
html_text = (
|
| 739 |
+
"<!doctype html><html><head><meta charset=\"utf-8\"><title>PickClutter smoke_v5_eval_tuned_softerpref GIFs</title>"
|
| 740 |
+
"<style>body{font-family:Arial,sans-serif;background:#111;color:#f0f0f0;margin:20px;}table{border-collapse:collapse;width:100%;}"
|
| 741 |
+
"td,th{border:1px solid #444;padding:8px;vertical-align:top;}img{display:block;background:#222;}</style></head><body>"
|
| 742 |
+
"<h1>PickClutter smoke_v5_eval_tuned_softerpref GIFs</h1>"
|
| 743 |
+
"<p>Exact checkpoints: maniskill_pickclutter_smoke_v5 seed17. Exact held-out seeds: 172000..172049. Exact planner override: softer_pref.</p>"
|
| 744 |
+
"<table><thead><tr><th>episode_seed</th><th>trunk_only_ft</th><th>success</th><th>adapter_active_ft</th><th>success</th></tr></thead><tbody>"
|
| 745 |
+
+ "".join(html_rows)
|
| 746 |
+
+ "</tbody></table></body></html>"
|
| 747 |
+
)
|
| 748 |
+
(output_dir / "index.html").write_text(html_text, encoding="utf-8")
|
| 749 |
+
|
| 750 |
+
|
| 751 |
+
def main() -> None:
|
| 752 |
+
args = _parse_args()
|
| 753 |
+
seeds = _load_eval_seeds(args.split_path, start_index=args.start_index, limit=args.limit)
|
| 754 |
+
manifest_payload = {
|
| 755 |
+
"source_report_dir": str(args.report_dir),
|
| 756 |
+
"output_dir": str(args.output_dir),
|
| 757 |
+
"split_path": str(args.split_path),
|
| 758 |
+
"checkpoints": {
|
| 759 |
+
"trunk_only_ft": str(args.trunk_checkpoint),
|
| 760 |
+
"adapter_active_ft": str(args.adapter_checkpoint),
|
| 761 |
+
},
|
| 762 |
+
"planner_overrides": SOFTER_PREF_OVERRIDES,
|
| 763 |
+
"seeds": [int(seed) for seed in seeds],
|
| 764 |
+
"mode_records": [],
|
| 765 |
+
}
|
| 766 |
+
|
| 767 |
+
mode_specs: list[tuple[str, str, Path, dict[int, dict[str, Any]]]] = []
|
| 768 |
+
if args.mode in {"both", "trunk_only_ft"}:
|
| 769 |
+
mode_specs.append(
|
| 770 |
+
(
|
| 771 |
+
"trunk_only",
|
| 772 |
+
"trunk_only_ft",
|
| 773 |
+
args.trunk_checkpoint,
|
| 774 |
+
_load_expected_records(args.report_dir / f"trunk_only_ft_seed{args.seed}.json"),
|
| 775 |
+
)
|
| 776 |
+
)
|
| 777 |
+
if args.mode in {"both", "adapter_active_ft"}:
|
| 778 |
+
mode_specs.append(
|
| 779 |
+
(
|
| 780 |
+
"adapter_active",
|
| 781 |
+
"adapter_active_ft",
|
| 782 |
+
args.adapter_checkpoint,
|
| 783 |
+
_load_expected_records(args.report_dir / f"adapter_active_ft_seed{args.seed}.json"),
|
| 784 |
+
)
|
| 785 |
+
)
|
| 786 |
+
|
| 787 |
+
for adapter_mode, render_mode_name, checkpoint_path, expected_records in mode_specs:
|
| 788 |
+
print(
|
| 789 |
+
json.dumps(
|
| 790 |
+
{
|
| 791 |
+
"phase": "render_mode_start",
|
| 792 |
+
"adapter_mode": adapter_mode,
|
| 793 |
+
"render_mode_name": render_mode_name,
|
| 794 |
+
"episodes": len(seeds),
|
| 795 |
+
"checkpoint_path": str(checkpoint_path),
|
| 796 |
+
}
|
| 797 |
+
),
|
| 798 |
+
flush=True,
|
| 799 |
+
)
|
| 800 |
+
model, _checkpoint = smoke._load_checkpoint(
|
| 801 |
+
checkpoint_path,
|
| 802 |
+
adapter_mode=adapter_mode if adapter_mode != "trunk_only" else None,
|
| 803 |
+
planner_overrides=SOFTER_PREF_OVERRIDES,
|
| 804 |
+
)
|
| 805 |
+
device = next(model.parameters()).device
|
| 806 |
+
mode_records = _render_mode_bundle(
|
| 807 |
+
model=model,
|
| 808 |
+
device=device,
|
| 809 |
+
adapter_mode=adapter_mode,
|
| 810 |
+
render_mode_name=render_mode_name,
|
| 811 |
+
seeds=seeds,
|
| 812 |
+
expected_records=expected_records,
|
| 813 |
+
output_dir=args.output_dir,
|
| 814 |
+
frame_stride=args.frame_stride,
|
| 815 |
+
fps=args.fps,
|
| 816 |
+
render_size=args.render_size,
|
| 817 |
+
initial_hold=args.initial_hold,
|
| 818 |
+
final_hold=args.final_hold,
|
| 819 |
+
skip_existing=args.skip_existing,
|
| 820 |
+
)
|
| 821 |
+
manifest_payload["mode_records"].append(
|
| 822 |
+
{
|
| 823 |
+
"adapter_mode": adapter_mode,
|
| 824 |
+
"render_mode_name": render_mode_name,
|
| 825 |
+
"records": mode_records,
|
| 826 |
+
}
|
| 827 |
+
)
|
| 828 |
+
_write_manifest(args.output_dir, manifest_payload)
|
| 829 |
+
_write_index(args.output_dir, manifest_payload)
|
| 830 |
+
_write_manifest(args.output_dir, manifest_payload)
|
| 831 |
+
print(json.dumps({"phase": "render_complete", "output_dir": str(args.output_dir)}), flush=True)
|
| 832 |
+
|
| 833 |
+
|
| 834 |
+
if __name__ == "__main__":
|
| 835 |
+
main()
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/INDEX.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# PickClutter smoke_v5_eval_tuned_softerpref GIF index
|
| 2 |
+
|
| 3 |
+
- exact checkpoints: `maniskill_pickclutter_smoke_v5` seed17
|
| 4 |
+
- exact held-out seeds: `172000..172049`
|
| 5 |
+
- exact planner override: `softer_pref`
|
| 6 |
+
- overlays show selected mode and adaptor state on each frame
|
| 7 |
+
|
| 8 |
+
| episode_seed | trunk_only_ft | success | adapter_active_ft | success |
|
| 9 |
+
| --- | --- | --- | --- | --- |
|
| 10 |
+
| 172000 | [gif](trunk_only_ft/seed_172000.gif) | False | [gif](adapter_active_ft/seed_172000.gif) | True |
|
| 11 |
+
| 172001 | [gif](trunk_only_ft/seed_172001.gif) | False | [gif](adapter_active_ft/seed_172001.gif) | True |
|
| 12 |
+
| 172002 | [gif](trunk_only_ft/seed_172002.gif) | True | [gif](adapter_active_ft/seed_172002.gif) | True |
|
| 13 |
+
| 172003 | [gif](trunk_only_ft/seed_172003.gif) | False | [gif](adapter_active_ft/seed_172003.gif) | False |
|
| 14 |
+
| 172004 | [gif](trunk_only_ft/seed_172004.gif) | False | [gif](adapter_active_ft/seed_172004.gif) | True |
|
| 15 |
+
| 172005 | [gif](trunk_only_ft/seed_172005.gif) | False | [gif](adapter_active_ft/seed_172005.gif) | True |
|
| 16 |
+
| 172006 | [gif](trunk_only_ft/seed_172006.gif) | False | [gif](adapter_active_ft/seed_172006.gif) | False |
|
| 17 |
+
| 172007 | [gif](trunk_only_ft/seed_172007.gif) | False | [gif](adapter_active_ft/seed_172007.gif) | False |
|
| 18 |
+
| 172008 | [gif](trunk_only_ft/seed_172008.gif) | False | [gif](adapter_active_ft/seed_172008.gif) | False |
|
| 19 |
+
| 172009 | [gif](trunk_only_ft/seed_172009.gif) | False | [gif](adapter_active_ft/seed_172009.gif) | True |
|
| 20 |
+
| 172010 | [gif](trunk_only_ft/seed_172010.gif) | False | [gif](adapter_active_ft/seed_172010.gif) | True |
|
| 21 |
+
| 172011 | [gif](trunk_only_ft/seed_172011.gif) | False | [gif](adapter_active_ft/seed_172011.gif) | True |
|
| 22 |
+
| 172012 | [gif](trunk_only_ft/seed_172012.gif) | False | [gif](adapter_active_ft/seed_172012.gif) | False |
|
| 23 |
+
| 172013 | [gif](trunk_only_ft/seed_172013.gif) | False | [gif](adapter_active_ft/seed_172013.gif) | False |
|
| 24 |
+
| 172014 | [gif](trunk_only_ft/seed_172014.gif) | False | [gif](adapter_active_ft/seed_172014.gif) | False |
|
| 25 |
+
| 172015 | [gif](trunk_only_ft/seed_172015.gif) | False | [gif](adapter_active_ft/seed_172015.gif) | False |
|
| 26 |
+
| 172016 | [gif](trunk_only_ft/seed_172016.gif) | True | [gif](adapter_active_ft/seed_172016.gif) | True |
|
| 27 |
+
| 172017 | [gif](trunk_only_ft/seed_172017.gif) | False | [gif](adapter_active_ft/seed_172017.gif) | True |
|
| 28 |
+
| 172018 | [gif](trunk_only_ft/seed_172018.gif) | False | [gif](adapter_active_ft/seed_172018.gif) | True |
|
| 29 |
+
| 172019 | [gif](trunk_only_ft/seed_172019.gif) | False | [gif](adapter_active_ft/seed_172019.gif) | False |
|
| 30 |
+
| 172020 | [gif](trunk_only_ft/seed_172020.gif) | False | [gif](adapter_active_ft/seed_172020.gif) | True |
|
| 31 |
+
| 172021 | [gif](trunk_only_ft/seed_172021.gif) | False | [gif](adapter_active_ft/seed_172021.gif) | True |
|
| 32 |
+
| 172022 | [gif](trunk_only_ft/seed_172022.gif) | False | [gif](adapter_active_ft/seed_172022.gif) | True |
|
| 33 |
+
| 172023 | [gif](trunk_only_ft/seed_172023.gif) | False | [gif](adapter_active_ft/seed_172023.gif) | True |
|
| 34 |
+
| 172024 | [gif](trunk_only_ft/seed_172024.gif) | False | [gif](adapter_active_ft/seed_172024.gif) | False |
|
| 35 |
+
| 172025 | [gif](trunk_only_ft/seed_172025.gif) | False | [gif](adapter_active_ft/seed_172025.gif) | True |
|
| 36 |
+
| 172026 | [gif](trunk_only_ft/seed_172026.gif) | False | [gif](adapter_active_ft/seed_172026.gif) | True |
|
| 37 |
+
| 172027 | [gif](trunk_only_ft/seed_172027.gif) | False | [gif](adapter_active_ft/seed_172027.gif) | True |
|
| 38 |
+
| 172028 | [gif](trunk_only_ft/seed_172028.gif) | False | [gif](adapter_active_ft/seed_172028.gif) | False |
|
| 39 |
+
| 172029 | [gif](trunk_only_ft/seed_172029.gif) | False | [gif](adapter_active_ft/seed_172029.gif) | True |
|
| 40 |
+
| 172030 | [gif](trunk_only_ft/seed_172030.gif) | False | [gif](adapter_active_ft/seed_172030.gif) | True |
|
| 41 |
+
| 172031 | [gif](trunk_only_ft/seed_172031.gif) | False | [gif](adapter_active_ft/seed_172031.gif) | False |
|
| 42 |
+
| 172032 | [gif](trunk_only_ft/seed_172032.gif) | False | [gif](adapter_active_ft/seed_172032.gif) | True |
|
| 43 |
+
| 172033 | [gif](trunk_only_ft/seed_172033.gif) | False | [gif](adapter_active_ft/seed_172033.gif) | True |
|
| 44 |
+
| 172034 | [gif](trunk_only_ft/seed_172034.gif) | False | [gif](adapter_active_ft/seed_172034.gif) | True |
|
| 45 |
+
| 172035 | [gif](trunk_only_ft/seed_172035.gif) | False | [gif](adapter_active_ft/seed_172035.gif) | True |
|
| 46 |
+
| 172036 | [gif](trunk_only_ft/seed_172036.gif) | False | [gif](adapter_active_ft/seed_172036.gif) | False |
|
| 47 |
+
| 172037 | [gif](trunk_only_ft/seed_172037.gif) | False | [gif](adapter_active_ft/seed_172037.gif) | False |
|
| 48 |
+
| 172038 | [gif](trunk_only_ft/seed_172038.gif) | False | [gif](adapter_active_ft/seed_172038.gif) | True |
|
| 49 |
+
| 172039 | [gif](trunk_only_ft/seed_172039.gif) | False | [gif](adapter_active_ft/seed_172039.gif) | True |
|
| 50 |
+
| 172040 | [gif](trunk_only_ft/seed_172040.gif) | False | [gif](adapter_active_ft/seed_172040.gif) | True |
|
| 51 |
+
| 172041 | [gif](trunk_only_ft/seed_172041.gif) | False | [gif](adapter_active_ft/seed_172041.gif) | True |
|
| 52 |
+
| 172042 | [gif](trunk_only_ft/seed_172042.gif) | False | [gif](adapter_active_ft/seed_172042.gif) | False |
|
| 53 |
+
| 172043 | [gif](trunk_only_ft/seed_172043.gif) | False | [gif](adapter_active_ft/seed_172043.gif) | False |
|
| 54 |
+
| 172044 | [gif](trunk_only_ft/seed_172044.gif) | False | [gif](adapter_active_ft/seed_172044.gif) | True |
|
| 55 |
+
| 172045 | [gif](trunk_only_ft/seed_172045.gif) | False | [gif](adapter_active_ft/seed_172045.gif) | False |
|
| 56 |
+
| 172046 | [gif](trunk_only_ft/seed_172046.gif) | False | [gif](adapter_active_ft/seed_172046.gif) | True |
|
| 57 |
+
| 172047 | [gif](trunk_only_ft/seed_172047.gif) | False | [gif](adapter_active_ft/seed_172047.gif) | False |
|
| 58 |
+
| 172048 | [gif](trunk_only_ft/seed_172048.gif) | False | [gif](adapter_active_ft/seed_172048.gif) | False |
|
| 59 |
+
| 172049 | [gif](trunk_only_ft/seed_172049.gif) | False | [gif](adapter_active_ft/seed_172049.gif) | True |
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172000.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172001.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172002.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172003.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172004.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172005.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172006.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172007.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172008.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172009.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172010.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172011.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172012.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172013.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172014.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172015.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172016.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172017.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172018.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172019.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172020.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172021.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172022.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172023.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172024.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172025.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172026.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172027.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172028.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172029.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172030.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172031.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172032.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172033.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172034.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172035.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172036.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172037.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172038.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172039.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172040.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172041.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172042.gif
ADDED
|
Git LFS Details
|
reports/maniskill_pickclutter_smoke_v5_eval_tuned_softerpref_gifs/adapter_active_ft/seed_172043.gif
ADDED
|
Git LFS Details
|