chore(dependencies): upgrade rerun (#2237)
* chore(dependencies): upgrade rerun Co-authored-by: Ben Zhang <benzhangniu@gmail.com> * test(utils): fix rerun scalars --------- Co-authored-by: Ben Zhang <benzhangniu@gmail.com>
This commit is contained in:
@@ -82,7 +82,7 @@ dependencies = [
|
|||||||
|
|
||||||
"draccus==0.10.0", # TODO: Remove ==
|
"draccus==0.10.0", # TODO: Remove ==
|
||||||
"gymnasium>=1.0.0",
|
"gymnasium>=1.0.0",
|
||||||
"rerun-sdk>=0.21.0,<0.23.0", # TODO: Bumb dependency
|
"rerun-sdk>=0.24.0,<0.27.0",
|
||||||
|
|
||||||
# Support dependencies
|
# Support dependencies
|
||||||
"deepdiff>=7.0.1,<9.0.0",
|
"deepdiff>=7.0.1,<9.0.0",
|
||||||
|
|||||||
@@ -141,15 +141,15 @@ def visualize_dataset(
|
|||||||
gc.collect()
|
gc.collect()
|
||||||
|
|
||||||
if mode == "distant":
|
if mode == "distant":
|
||||||
rr.serve(open_browser=False, web_port=web_port, ws_port=ws_port)
|
rr.serve_web_viewer(open_browser=False, web_port=web_port)
|
||||||
|
|
||||||
logging.info("Logging to Rerun")
|
logging.info("Logging to Rerun")
|
||||||
|
|
||||||
for batch in tqdm.tqdm(dataloader, total=len(dataloader)):
|
for batch in tqdm.tqdm(dataloader, total=len(dataloader)):
|
||||||
# iterate over the batch
|
# iterate over the batch
|
||||||
for i in range(len(batch["index"])):
|
for i in range(len(batch["index"])):
|
||||||
rr.set_time_sequence("frame_index", batch["frame_index"][i].item())
|
rr.set_time("frame_index", sequence=batch["frame_index"][i].item())
|
||||||
rr.set_time_seconds("timestamp", batch["timestamp"][i].item())
|
rr.set_time("timestamp", timestamp=batch["timestamp"][i].item())
|
||||||
|
|
||||||
# display each camera image
|
# display each camera image
|
||||||
for key in dataset.meta.camera_keys:
|
for key in dataset.meta.camera_keys:
|
||||||
@@ -159,21 +159,21 @@ def visualize_dataset(
|
|||||||
# display each dimension of action space (e.g. actuators command)
|
# display each dimension of action space (e.g. actuators command)
|
||||||
if ACTION in batch:
|
if ACTION in batch:
|
||||||
for dim_idx, val in enumerate(batch[ACTION][i]):
|
for dim_idx, val in enumerate(batch[ACTION][i]):
|
||||||
rr.log(f"{ACTION}/{dim_idx}", rr.Scalar(val.item()))
|
rr.log(f"{ACTION}/{dim_idx}", rr.Scalars(val.item()))
|
||||||
|
|
||||||
# display each dimension of observed state space (e.g. agent position in joint space)
|
# display each dimension of observed state space (e.g. agent position in joint space)
|
||||||
if OBS_STATE in batch:
|
if OBS_STATE in batch:
|
||||||
for dim_idx, val in enumerate(batch[OBS_STATE][i]):
|
for dim_idx, val in enumerate(batch[OBS_STATE][i]):
|
||||||
rr.log(f"state/{dim_idx}", rr.Scalar(val.item()))
|
rr.log(f"state/{dim_idx}", rr.Scalars(val.item()))
|
||||||
|
|
||||||
if DONE in batch:
|
if DONE in batch:
|
||||||
rr.log(DONE, rr.Scalar(batch[DONE][i].item()))
|
rr.log(DONE, rr.Scalars(batch[DONE][i].item()))
|
||||||
|
|
||||||
if REWARD in batch:
|
if REWARD in batch:
|
||||||
rr.log(REWARD, rr.Scalar(batch[REWARD][i].item()))
|
rr.log(REWARD, rr.Scalars(batch[REWARD][i].item()))
|
||||||
|
|
||||||
if "next.success" in batch:
|
if "next.success" in batch:
|
||||||
rr.log("next.success", rr.Scalar(batch["next.success"][i].item()))
|
rr.log("next.success", rr.Scalars(batch["next.success"][i].item()))
|
||||||
|
|
||||||
if mode == "local" and save:
|
if mode == "local" and save:
|
||||||
# save .rrd locally
|
# save .rrd locally
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ def log_rerun_data(
|
|||||||
|
|
||||||
This function iterates through the provided observation and action dictionaries and sends their contents
|
This function iterates through the provided observation and action dictionaries and sends their contents
|
||||||
to the Rerun viewer. It handles different data types appropriately:
|
to the Rerun viewer. It handles different data types appropriately:
|
||||||
- Scalar values (floats, ints) are logged as `rr.Scalar`.
|
- Scalars values (floats, ints) are logged as `rr.Scalars`.
|
||||||
- 3D NumPy arrays that resemble images (e.g., with 1, 3, or 4 channels first) are transposed
|
- 3D NumPy arrays that resemble images (e.g., with 1, 3, or 4 channels first) are transposed
|
||||||
from CHW to HWC format and logged as `rr.Image`.
|
from CHW to HWC format and logged as `rr.Image`.
|
||||||
- 1D NumPy arrays are logged as a series of individual scalars, with each element indexed.
|
- 1D NumPy arrays are logged as a series of individual scalars, with each element indexed.
|
||||||
@@ -65,7 +65,7 @@ def log_rerun_data(
|
|||||||
key = k if str(k).startswith(OBS_PREFIX) else f"{OBS_STR}.{k}"
|
key = k if str(k).startswith(OBS_PREFIX) else f"{OBS_STR}.{k}"
|
||||||
|
|
||||||
if _is_scalar(v):
|
if _is_scalar(v):
|
||||||
rr.log(key, rr.Scalar(float(v)))
|
rr.log(key, rr.Scalars(float(v)))
|
||||||
elif isinstance(v, np.ndarray):
|
elif isinstance(v, np.ndarray):
|
||||||
arr = v
|
arr = v
|
||||||
# Convert CHW -> HWC when needed
|
# Convert CHW -> HWC when needed
|
||||||
@@ -73,7 +73,7 @@ def log_rerun_data(
|
|||||||
arr = np.transpose(arr, (1, 2, 0))
|
arr = np.transpose(arr, (1, 2, 0))
|
||||||
if arr.ndim == 1:
|
if arr.ndim == 1:
|
||||||
for i, vi in enumerate(arr):
|
for i, vi in enumerate(arr):
|
||||||
rr.log(f"{key}_{i}", rr.Scalar(float(vi)))
|
rr.log(f"{key}_{i}", rr.Scalars(float(vi)))
|
||||||
else:
|
else:
|
||||||
rr.log(key, rr.Image(arr), static=True)
|
rr.log(key, rr.Image(arr), static=True)
|
||||||
|
|
||||||
@@ -84,13 +84,13 @@ def log_rerun_data(
|
|||||||
key = k if str(k).startswith("action.") else f"action.{k}"
|
key = k if str(k).startswith("action.") else f"action.{k}"
|
||||||
|
|
||||||
if _is_scalar(v):
|
if _is_scalar(v):
|
||||||
rr.log(key, rr.Scalar(float(v)))
|
rr.log(key, rr.Scalars(float(v)))
|
||||||
elif isinstance(v, np.ndarray):
|
elif isinstance(v, np.ndarray):
|
||||||
if v.ndim == 1:
|
if v.ndim == 1:
|
||||||
for i, vi in enumerate(v):
|
for i, vi in enumerate(v):
|
||||||
rr.log(f"{key}_{i}", rr.Scalar(float(vi)))
|
rr.log(f"{key}_{i}", rr.Scalars(float(vi)))
|
||||||
else:
|
else:
|
||||||
# Fall back to flattening higher-dimensional arrays
|
# Fall back to flattening higher-dimensional arrays
|
||||||
flat = v.flatten()
|
flat = v.flatten()
|
||||||
for i, vi in enumerate(flat):
|
for i, vi in enumerate(flat):
|
||||||
rr.log(f"{key}_{i}", rr.Scalar(float(vi)))
|
rr.log(f"{key}_{i}", rr.Scalars(float(vi)))
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ def mock_rerun(monkeypatch):
|
|||||||
calls.append((key, obj, kwargs))
|
calls.append((key, obj, kwargs))
|
||||||
|
|
||||||
dummy_rr = SimpleNamespace(
|
dummy_rr = SimpleNamespace(
|
||||||
Scalar=DummyScalar,
|
Scalars=DummyScalar,
|
||||||
Image=DummyImage,
|
Image=DummyImage,
|
||||||
log=dummy_log,
|
log=dummy_log,
|
||||||
init=lambda *a, **k: None,
|
init=lambda *a, **k: None,
|
||||||
@@ -109,9 +109,9 @@ def test_log_rerun_data_envtransition_scalars_and_image(mock_rerun):
|
|||||||
vu.log_rerun_data(observation=obs_data, action=action_data)
|
vu.log_rerun_data(observation=obs_data, action=action_data)
|
||||||
|
|
||||||
# We expect:
|
# We expect:
|
||||||
# - observation.state.temperature -> Scalar
|
# - observation.state.temperature -> Scalars
|
||||||
# - observation.camera -> Image (HWC) with static=True
|
# - observation.camera -> Image (HWC) with static=True
|
||||||
# - action.throttle -> Scalar
|
# - action.throttle -> Scalars
|
||||||
# - action.vector_0, action.vector_1 -> Scalars
|
# - action.vector_0, action.vector_1 -> Scalars
|
||||||
expected_keys = {
|
expected_keys = {
|
||||||
f"{OBS_STATE}.temperature",
|
f"{OBS_STATE}.temperature",
|
||||||
|
|||||||
Reference in New Issue
Block a user