From 627f24317c73d48c4a219b4a8e507f2dd02c73d9 Mon Sep 17 00:00:00 2001 From: szhaovas Date: Wed, 23 Jul 2025 16:47:38 -0700 Subject: [PATCH 01/17] Updated libero submodule --- .gitmodules | 3 --- third_party/libero | 1 - 2 files changed, 4 deletions(-) delete mode 160000 third_party/libero diff --git a/.gitmodules b/.gitmodules index 4abd60e977..8ac69d6e6a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ [submodule "third_party/aloha"] path = third_party/aloha url = https://github.com/Physical-Intelligence/aloha.git -[submodule "third_party/libero"] - path = third_party/libero - url = https://github.com/Lifelong-Robot-Learning/LIBERO.git diff --git a/third_party/libero b/third_party/libero deleted file mode 160000 index f78abd68ee..0000000000 --- a/third_party/libero +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f78abd68ee283de9f9be3c8f7e2a9ad60246e95c From a58fb250d4adf8f8a8d05f78c06dec46a38d3505 Mon Sep 17 00:00:00 2001 From: szhaovas Date: Thu, 7 Aug 2025 14:06:31 -0700 Subject: [PATCH 02/17] Added QD script and visualization --- .gitmodules | 3 ++ examples/libero/main.py | 13 +++-- run_experiment.sh | 29 +++++++++++ third_party/libero | 1 + viz_spatial_attack.py | 110 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 151 insertions(+), 5 deletions(-) create mode 100755 run_experiment.sh create mode 160000 third_party/libero create mode 100644 viz_spatial_attack.py diff --git a/.gitmodules b/.gitmodules index 8ac69d6e6a..f2c9fc197e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "third_party/aloha"] path = third_party/aloha url = https://github.com/Physical-Intelligence/aloha.git +[submodule "third_party/libero"] + path = third_party/libero + url = https://github.com/szhaovas/LIBERO.git diff --git a/examples/libero/main.py b/examples/libero/main.py index dc015a6174..7d04ec9e71 100644 --- a/examples/libero/main.py +++ b/examples/libero/main.py @@ -32,10 +32,10 @@ class Args: # LIBERO environment-specific parameters ################################################################################################################# task_suite_name: str = ( - "libero_spatial" # Task suite. Options: libero_spatial, libero_object, libero_goal, libero_10, libero_90 + "custom" # Task suite. Options: libero_spatial, libero_object, libero_goal, libero_10, libero_90, custom ) num_steps_wait: int = 10 # Number of steps to wait for objects to stabilize i n sim - num_trials_per_task: int = 50 # Number of rollouts per task + num_trials_per_task: int = 5 # Number of rollouts per task ################################################################################################################# # Utils @@ -57,7 +57,7 @@ def eval_libero(args: Args) -> None: pathlib.Path(args.video_out_path).mkdir(parents=True, exist_ok=True) - if args.task_suite_name == "libero_spatial": + if args.task_suite_name in ["libero_spatial", "custom"]: max_steps = 220 # longest training demo has 193 steps elif args.task_suite_name == "libero_object": max_steps = 280 # longest training demo has 254 steps @@ -94,7 +94,10 @@ def eval_libero(args: Args) -> None: action_plan = collections.deque() # Set initial states - obs = env.set_init_state(initial_states[episode_idx]) + if initial_states is None: + obs = env.env._get_observations() + else: + obs = env.set_init_state(initial_states[episode_idx]) # Setup t = 0 @@ -168,7 +171,7 @@ def eval_libero(args: Args) -> None: suffix = "success" if done else "failure" task_segment = task_description.replace(" ", "_") imageio.mimwrite( - pathlib.Path(args.video_out_path) / f"rollout_{task_segment}_{suffix}.mp4", + pathlib.Path(args.video_out_path) / f"rollout_{task_id}_{episode_idx}.mp4", [np.asarray(x) for x in replay_images], fps=10, ) diff --git a/run_experiment.sh b/run_experiment.sh new file mode 100755 index 0000000000..aab0f23781 --- /dev/null +++ b/run_experiment.sh @@ -0,0 +1,29 @@ +SESSION=openpi-libero + +# Check if session exists +if tmux has-session -t "$SESSION" 2>/dev/null; then + echo "Session $SESSION already exists. Attaching..." + tmux attach-session -t "$SESSION" + exit 0 +fi + +# Create new session +tmux new-session -d -s "$SESSION" + +# Pane 0: Terminal 1 +tmux send-keys -t $SESSION " +cd \"$(pwd)\" +source examples/libero/.venv/bin/activate +export PYTHONPATH=\$PYTHONPATH:\$PWD/third_party/libero +python third_party/libero/scripts/qd_spatial.py +" C-m + +# Pane 1: Terminal 2 +tmux split-window -h -t "$SESSION" +tmux send-keys -t "$SESSION:0.1" " +cd \"$(pwd)\" +uv run scripts/serve_policy.py --env LIBERO +" C-m + +# Attach +tmux attach-session -t "$SESSION" diff --git a/third_party/libero b/third_party/libero new file mode 160000 index 0000000000..b3a24e4198 --- /dev/null +++ b/third_party/libero @@ -0,0 +1 @@ +Subproject commit b3a24e41980a971621acda4e6c48bbb323282b80 diff --git a/viz_spatial_attack.py b/viz_spatial_attack.py new file mode 100644 index 0000000000..774fcdf758 --- /dev/null +++ b/viz_spatial_attack.py @@ -0,0 +1,110 @@ +import pickle as pkl +import sys + +import matplotlib.pyplot as plt +import numpy as np + +sys.path.insert(0, '/project/shihanzh/openpi/third_party/libero/scripts') +import plotly.graph_objects as go +from dash import Dash, Input, Output, dcc, html, no_update +from qd_spatial import evaluate +from ribs.visualize import grid_archive_heatmap + + +def show_interactive_archive(archive): + fig = plt.figure(figsize=(8, 6)) + grid_archive_heatmap(archive, vmin=0, vmax=1, cmap="viridis") + plt.tight_layout() + + def onclick(event): + occupied, data = archive.retrieve_single([event.xdata, event.ydata]) + + if occupied: + print( + f'Recorded objective: {data["objective"]}; Recorded measures: {data["measures"]}' + ) + obj, meas = evaluate(params=[data["solution"]], ntrials=1, seed=42, video_logdir='interactive_vids') + else: + print("Archive cell not occupied") + + fig.canvas.mpl_connect("button_press_event", onclick) + plt.show() + + +def _plotly_grid_archive_heatmap(archive, shape={'width': 600, 'height': 600}): + x_dim, y_dim = archive.dims + colors = np.full((y_dim, x_dim), np.nan) + index_batch = archive.data("index") + objective_batch = archive.data("objective") + grid_index_batch = archive.int_to_grid_index(index_batch) + colors[grid_index_batch[:, 1], grid_index_batch[:, 0]] = objective_batch + + x_bounds = archive.boundaries[0] + y_bounds = archive.boundaries[1] + + fig = go.Figure(data=go.Heatmap( + z=colors, + x=x_bounds, + y=y_bounds, + colorbar= { + "title": 'Ent. success' + }, + colorscale='Viridis' + )) + fig.update_layout(**shape) + fig.update_xaxes(title='Spread') + fig.update_yaxes(title='Similarity') + + return fig + + +def host_interactive_archive(archive, port=8050): + '''Similar to :func:`show_interactive_archive`, except it hosts the + interactive plot at localhost: to allow generating the plot on a + remote machine and then viewing it on your local machine (e.g. if you only + have access to ssh). After configuring port forwarding between your local + machine and ``port`` on the remote machine, you will be able to view and + interact with the plot on your local machine's browser. + + Args: + archive (GridArchive): Archive to be displayed. + port (int): The port on which to display the plot. + ''' + app = Dash(__name__) + + app.layout = html.Div([ + dcc.Graph(id='archive-heatmap', figure=_plotly_grid_archive_heatmap(archive)), + html.Div(id='dummy-output', style={'display': 'none'}) # hidden dummy output + ], style={'display': 'flex', 'justifyContent': 'center'}) + + @app.callback( + Output('dummy-output', 'children'), + Input("archive-heatmap", "clickData"), + ) + def onclick(clickData): + if clickData is None: + return no_update + + occupied, data = archive.retrieve_single([clickData["points"][0]["x"], clickData["points"][0]["y"]]) + + if occupied: + print( + f'Recorded objective: {data["objective"]}; Recorded measures: {data["measures"]}' + ) + evaluate(params=[data["solution"]], ntrials=5, seed=42, video_logdir='interactive_vids') + else: + print("Archive cell not occupied") + + return None + + app.run(host="0.0.0.0", port=port, debug=True) + + +if __name__ == "__main__": + with open( + file="test_logs/scheduler_00000200.pkl", + mode="rb", + ) as f: + archive = pkl.load(f).result_archive + # show_interactive_archive(archive) + host_interactive_archive(archive) From a10c5194f5e1c03f83527f1093e6edc987a9dc93 Mon Sep 17 00:00:00 2001 From: szhaovas Date: Thu, 7 Aug 2025 14:54:04 -0700 Subject: [PATCH 03/17] Moved qd_spatial.py from libero to openpi --- qd_spatial.py | 318 ++++++++++++++++++++++++++++++++++++++++++++++ run_experiment.sh | 2 +- 2 files changed, 319 insertions(+), 1 deletion(-) create mode 100644 qd_spatial.py diff --git a/qd_spatial.py b/qd_spatial.py new file mode 100644 index 0000000000..52098b1d7c --- /dev/null +++ b/qd_spatial.py @@ -0,0 +1,318 @@ +import collections +import csv +import datetime +import math +import pickle as pkl +import re +from functools import partial +from pathlib import Path + +import fire +import imageio +import matplotlib.pyplot as plt +import numpy as np +from libero.libero import get_libero_path +from libero.libero.envs import OffScreenRenderEnv +from openpi_client import websocket_client_policy as _websocket_client_policy +from ribs.archives import GridArchive +from ribs.emitters import EvolutionStrategyEmitter +from ribs.schedulers import Scheduler +from ribs.visualize import grid_archive_heatmap + +task_5_bddl = ( + Path(get_libero_path("bddl_files")) + / "custom" + / "pick_up_the_black_bowl_next_to_the_ramekin_and_place_it_on_the_plate.bddl" +) +TASK_ENV = partial( + OffScreenRenderEnv, + bddl_file_name=task_5_bddl, + camera_heights=256, + camera_widths=256, +) + +max_steps = 220 +num_steps_wait = 10 +host = "0.0.0.0" +port = 8000 +client = _websocket_client_policy.WebsocketClientPolicy(host, port) +replan_steps = 5 + +def _quat2axisangle(quat): + """ + Copied from robosuite: https://github.com/ARISE-Initiative/robosuite/blob/eafb81f54ffc104f905ee48a16bb15f059176ad3/robosuite/utils/transform_utils.py#L490C1-L512C55 + """ + # clip quaternion + if quat[3] > 1.0: + quat[3] = 1.0 + elif quat[3] < -1.0: + quat[3] = -1.0 + + den = np.sqrt(1.0 - quat[3] * quat[3]) + if math.isclose(den, 0.0): + # This is (close to) a zero degree rotation, immediately return + return np.zeros(3) + + return (quat[:3] * 2.0 * math.acos(quat[3])) / den + +def _extract_scheduler_itr(filename): + """Tries extracting the iteration number from a scheduler filename following + the ``*/scheduler_[0-9]{8}.pkl`` format, where ``[0-9]{8}`` is the iteration + number. If match fails, returns None. + + Args: + filename (str): A scheduler filename following the + ``*/scheduler_[0-9]{8}.pkl`` format. + + Returns: + itr (int or None): Iteration number if match succeeds, else None. + """ + pattern = r"scheduler_(\d{8})\.pkl" + match = re.search(pattern, filename) + if match: + return int(match.group(1)) + return None + +def evaluate(params, ntrials, seed, video_logdir=None): + """Evaluates params by creating LIBERO environments and computing + objective and measure values from the environments' features and VLA + rollout. + + Args: + params (array-like): Array of shape (batch_size, solution_dim) + containing params to be evaluated. + ntrials (int): Number of rollouts for each solution. + seed (int): Seed. + video_logdir (str): Folder for saving rollout videos. If None no video + is saved. + + Return: + objective (np.ndarray): Array of shape (batch_size,) containing VLA's + success rates on environments created from each row of ``params``. + Invalid rows get np.nan. + measures (np.ndarray): Array of shape (batch_size, measure_dim) + containing measure values computed from the environments' features. + Invalid rows get [np.nan] * measure_dim. + """ + # NOTE: Ideally this should be parallelized, but we may have to evaluate + # solutions one at a time due to VLA's high GPU memory requirement. + np.random.seed(seed) + + objectives = [] + measures = [] + for sol_id, sol in enumerate(params): + env = TASK_ENV(params=sol) + + env.seed(seed) + obs = env.reset() + if obs is None: + # TODO: How to handle solutions that fail to generate + objectives.append(1e-6) + measures.append([0, 0]) + continue + + if video_logdir is not None: + # ID each sol with datetime to prevent overwriting + sol_logdir = Path(video_logdir) / f"{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}" + sol_logdir.mkdir(parents=True) + + # compute_spread_similarity must be called at the start before any + # action since actions might change objects' locations + spread, similarity = env.env.compute_spread_similarity() + measures.append([spread, similarity]) + + # Get success rates by running openpi on env + print(f"------------------ Rolling out solution{sol_id}") + success_rate = 0 + for trial_id in range(ntrials): + obs = env.reset() + action_plan = collections.deque() + + replay_images = [] + + success = False + for t in range(max_steps + num_steps_wait): + try: + if t < num_steps_wait: + # Do nothing at the start to wait for env to settle + obs, reward, done, info = env.step([0.0] * 6 + [-1.0]) + continue + + img = np.ascontiguousarray(obs["agentview_image"][::-1, ::-1]) + wrist_img = np.ascontiguousarray(obs["robot0_eye_in_hand_image"][::-1, ::-1]) + + replay_images.append(img) + + if not action_plan: + element = { + "observation/image": img, + "observation/wrist_image": wrist_img, + "observation/state": np.concatenate( + ( + obs["robot0_eef_pos"], + _quat2axisangle(obs["robot0_eef_quat"]), + obs["robot0_gripper_qpos"], + ) + ), + "prompt": env.language_instruction, + } + + action_chunk = client.infer(element)["actions"] + assert ( + len(action_chunk) >= replan_steps + ), f"We want to replan every {replan_steps} steps, but policy only predicts {len(action_chunk)} steps." + action_plan.extend(action_chunk[: replan_steps]) + + action = action_plan.popleft() + + obs, reward, done, info = env.step(action.tolist()) + if done: + success_rate += 1 / ntrials + success = True + break + + except Exception as e: + print(e) + break + + print(f"\t trial{trial_id}: {'success' if success else 'fail'}") + + if video_logdir is not None: + imageio.mimwrite( + sol_logdir / f"trial{trial_id}_{'success' if success else 'fail'}.mp4", + [np.asarray(x) for x in replay_images], + fps=10, + ) + + # Maximizes entropy as objective, i.e. we want more uncertain + # success rates + success_rate = np.clip(success_rate, 1e-6, 1 - 1e-6) + objectives.append(-success_rate*math.log2(success_rate) - (1-success_rate)*math.log2(1-success_rate)) + + return np.asarray(objectives), np.asarray(measures) + + +def save_heatmap(archive, heatmap_path): + """Saves a heatmap of the archive to the given path. + + Args: + archive (GridArchive): The archive to save. + heatmap_path: Image path for the heatmap. + """ + plt.figure(figsize=(8, 6)) + grid_archive_heatmap(archive, vmin=0, vmax=1, cmap="viridis") + plt.tight_layout() + plt.savefig(heatmap_path) + plt.close(plt.gcf()) + + +def main( + iterations=1000, + num_trials_per_sol=5, + batch_size=8, + num_emitters=1, + archive_resolution=[100,100], + seed=42, + outdir="test_logs", + reload_from=None, + log_every=10, +): + logdir = Path(outdir) + logdir.mkdir(exist_ok=True) + summary_filename = logdir / "summary.csv" + + if reload_from is None: + # For now ``params`` should be an array listing object + # coordinates in the following order: + # [ + # akita_black_bowl_1_x, akita_black_bowl_1_y, + # akita_black_bowl_2_x, akita_black_bowl_2_y, + # cookies_1_x, cookies_1_y, + # glazed_rim_porcelain_ramekin_1_x, + # glazed_rim_porcelain_ramekin_1_y, + # plate_1_x, plate_1_y + # ] + main_archive = GridArchive( + solution_dim=10, + dims=archive_resolution, + ranges=[(0, 1)] * 2, + # learning_rate=0.1, + # threshold_min=0, + seed=seed, + ) + passive_archive = GridArchive( + solution_dim=10, + dims=archive_resolution, + ranges=[(0, 1)] * 2, + seed=seed, + ) + + emitters = [ + EvolutionStrategyEmitter( + archive=main_archive, + # Range centers copied from BDDL file + x0=[-0.18, 0.32, 0.13, -0.07, 0.07, 0.03, -0.20, 0.20, 0.06, 0.20], + sigma0=0.02, + # TODO: Define bounds if we want to stay close to the original BDDL + bounds=None, + batch_size=batch_size, + seed=seed + i, + ) + for i in range(num_emitters) + ] + + scheduler = Scheduler(main_archive, emitters, result_archive=passive_archive) + + with open(summary_filename, "w") as summary_file: + writer = csv.writer(summary_file) + writer.writerow(["Iteration", "QD-Score", "Coverage", "Maximum", "Average"]) + else: + reload_itr = _extract_scheduler_itr(reload_from) + assert reload_itr is not None, ( + f'Received invalid reload_from parameter {reload_from}; ' + 'expected */scheduler_[0-9]{8}.pkl' + ) + with open(file=reload_from, mode="rb") as f: + scheduler = pkl.load(f) + + start = 1 if reload_from is None else reload_itr + 1 + end = start + iterations + for i in range(start, end): + solutions = scheduler.ask() + objectives, measures = evaluate(params=solutions, ntrials=num_trials_per_sol, seed=seed, video_logdir=None) + scheduler.tell(objectives, measures) + + print( + f"\n------------------ Iteration{i} ------------------\n" + f"\t QD-Score: {scheduler.result_archive.stats.qd_score}\n" + f"\t Coverage: {scheduler.result_archive.stats.coverage}\n" + f"\t Maximum : {scheduler.result_archive.stats.obj_max}\n" + f"\t Average : {scheduler.result_archive.stats.obj_mean}\n" + ) + + final_itr = i == end + if i % log_every == 0 or final_itr: + pkl.dump( + scheduler, + open(logdir / f"scheduler_{i:08d}.pkl", "wb"), + ) + + with open(summary_filename, "a") as summary_file: + writer = csv.writer(summary_file) + data = [ + i, + scheduler.result_archive.stats.qd_score, + scheduler.result_archive.stats.coverage, + scheduler.result_archive.stats.obj_max, + scheduler.result_archive.stats.obj_mean, + ] + writer.writerow(data) + + save_heatmap( + scheduler.result_archive, + logdir / f"heatmap_{i:08d}.png", + ) + + +if __name__ == "__main__": + fire.Fire(main) diff --git a/run_experiment.sh b/run_experiment.sh index aab0f23781..6f6aedd4c5 100755 --- a/run_experiment.sh +++ b/run_experiment.sh @@ -15,7 +15,7 @@ tmux send-keys -t $SESSION " cd \"$(pwd)\" source examples/libero/.venv/bin/activate export PYTHONPATH=\$PYTHONPATH:\$PWD/third_party/libero -python third_party/libero/scripts/qd_spatial.py +python qd_spatial.py " C-m # Pane 1: Terminal 2 From 3e710cc144a1bb1fe5b680e3f6e14889b1ac4528 Mon Sep 17 00:00:00 2001 From: szhaovas Date: Thu, 7 Aug 2025 14:59:44 -0700 Subject: [PATCH 04/17] Updated libero submodule --- third_party/libero | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/libero b/third_party/libero index b3a24e4198..9e93580a63 160000 --- a/third_party/libero +++ b/third_party/libero @@ -1 +1 @@ -Subproject commit b3a24e41980a971621acda4e6c48bbb323282b80 +Subproject commit 9e93580a6395a89f896ccd20157deb3788e77ebb From 18b811f001d6567c98757bbd3d45b2d8336a1199 Mon Sep 17 00:00:00 2001 From: szhaovas Date: Thu, 7 Aug 2025 15:56:55 -0700 Subject: [PATCH 05/17] Updated QD dependencies --- examples/libero/requirements.in | 3 +++ examples/libero/requirements.txt | 43 +++++++++++++++++++++++++++++--- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/examples/libero/requirements.in b/examples/libero/requirements.in index 149006564d..53f8e06ba8 100644 --- a/examples/libero/requirements.in +++ b/examples/libero/requirements.in @@ -4,8 +4,11 @@ tqdm tyro PyYaml opencv-python==4.6.0.66 +--extra-index-url https://download.pytorch.org/whl/cu113 torch==1.11.0+cu113 torchvision==0.12.0+cu113 torchaudio==0.11.0+cu113 robosuite==1.4.1 matplotlib==3.5.3 +ribs==0.7.1 +fire \ No newline at end of file diff --git a/examples/libero/requirements.txt b/examples/libero/requirements.txt index 1a52b42887..0c860f65df 100644 --- a/examples/libero/requirements.txt +++ b/examples/libero/requirements.txt @@ -16,6 +16,8 @@ eval-type-backport==0.2.0 # via tyro evdev==1.7.1 # via pynput +fire==0.7.0 + # via -r examples/libero/requirements.in fonttools==4.55.3 # via matplotlib glfw==1.12.0 @@ -30,6 +32,8 @@ importlib-metadata==8.5.0 # via typeguard importlib-resources==6.4.5 # via etils +joblib==1.4.2 + # via scikit-learn kiwisolver==1.4.7 # via matplotlib llvmlite==0.36.0 @@ -43,7 +47,9 @@ mdurl==0.1.2 mujoco==3.2.3 # via robosuite numba==0.53.1 - # via robosuite + # via + # ribs + # robosuite numpy==1.22.4 # via # -r examples/libero/requirements.in @@ -51,16 +57,24 @@ numpy==1.22.4 # matplotlib # mujoco # numba + # numpy-groupies # opencv-python + # pandas + # ribs # robosuite + # scikit-learn # scipy # torchvision +numpy-groupies==0.9.22 + # via ribs opencv-python==4.6.0.66 # via # -r examples/libero/requirements.in # robosuite packaging==24.2 # via matplotlib +pandas==2.0.3 + # via ribs pillow==10.4.0 # via # imageio @@ -78,19 +92,30 @@ pyopengl==3.1.7 pyparsing==3.1.4 # via matplotlib python-dateutil==2.9.0.post0 - # via matplotlib + # via + # matplotlib + # pandas python-xlib==0.33 # via pynput +pytz==2025.2 + # via pandas pyyaml==6.0.2 # via -r examples/libero/requirements.in requests==2.32.3 # via torchvision +ribs==0.7.1 + # via -r examples/libero/requirements.in rich==13.9.4 # via tyro robosuite==1.4.1 # via -r examples/libero/requirements.in +scikit-learn==1.3.2 + # via ribs scipy==1.10.1 - # via robosuite + # via + # ribs + # robosuite + # scikit-learn setuptools==75.3.0 # via # imageio-ffmpeg @@ -102,8 +127,16 @@ six==1.17.0 # pynput # python-dateutil # python-xlib +sortedcontainers==2.4.0 + # via ribs termcolor==2.4.0 - # via robosuite + # via + # fire + # robosuite +threadpoolctl==3.5.0 + # via + # ribs + # scikit-learn torch==1.11.0+cu113 # via # -r examples/libero/requirements.in @@ -127,6 +160,8 @@ typing-extensions==4.12.2 # tyro tyro==0.9.2 # via -r examples/libero/requirements.in +tzdata==2025.2 + # via pandas urllib3==2.2.3 # via requests zipp==3.20.2 From f281064dca7faabb025f9c2087748c199d033bb8 Mon Sep 17 00:00:00 2001 From: szhaovas Date: Thu, 7 Aug 2025 16:57:52 -0700 Subject: [PATCH 06/17] Updated README and uploaded a sample checkpoint --- README.md | 201 ++++------------------------------------- scheduler_00000220.pkl | Bin 0 -> 2352216 bytes viz_spatial_attack.py | 9 +- 3 files changed, 22 insertions(+), 188 deletions(-) create mode 100644 scheduler_00000220.pkl diff --git a/README.md b/README.md index 7280d04ea4..cf9dbab808 100644 --- a/README.md +++ b/README.md @@ -1,195 +1,30 @@ -# openpi - -openpi holds open-source models and packages for robotics, published by the [Physical Intelligence team](https://www.physicalintelligence.company/). - -Currently, this repo contains two types of models: -- the [π₀ model](https://www.physicalintelligence.company/blog/pi0), a flow-based diffusion vision-language-action model (VLA) -- the [π₀-FAST model](https://www.physicalintelligence.company/research/fast), an autoregressive VLA, based on the FAST action tokenizer. - -For both models, we provide _base model_ checkpoints, pre-trained on 10k+ hours of robot data, and examples for using them out of the box or fine-tuning them to your own datasets. - -This is an experiment: $\pi_0$ was developed for our own robots, which differ from the widely used platforms such as [ALOHA](https://tonyzhaozh.github.io/aloha/) and [DROID](https://droid-dataset.github.io/), and though we are optimistic that researchers and practitioners will be able to run creative new experiments adapting $\pi_0$ to their own platforms, we do not expect every such attempt to be successful. All this is to say: $\pi_0$ may or may not work for you, but you are welcome to try it and see! - -## Updates - -- [Jun 2025]: We have added [instructions](examples/droid/README_train.md) for using `openpi` to train VLAs on the full [DROID dataset](https://droid-dataset.github.io/). This is an approximate open-source implementation of the training pipeline used to train pi0-FAST-DROID. - - -## Requirements - -To run the models in this repository, you will need an NVIDIA GPU with at least the following specifications. These estimations assume a single GPU, but you can also use multiple GPUs with model parallelism to reduce per-GPU memory requirements by configuring `fsdp_devices` in the training config. Please also note that the current training script does not yet support multi-node training. - -| Mode | Memory Required | Example GPU | -| ------------------ | --------------- | ------------------ | -| Inference | > 8 GB | RTX 4090 | -| Fine-Tuning (LoRA) | > 22.5 GB | RTX 4090 | -| Fine-Tuning (Full) | > 70 GB | A100 (80GB) / H100 | - -The repo has been tested with Ubuntu 22.04, we do not currently support other operating systems. - ## Installation - -When cloning this repo, make sure to update submodules: - -```bash -git clone --recurse-submodules git@github.com:Physical-Intelligence/openpi.git - -# Or if you already cloned the repo: -git submodule update --init --recursive -``` - -We use [uv](https://docs.astral.sh/uv/) to manage Python dependencies. See the [uv installation instructions](https://docs.astral.sh/uv/getting-started/installation/) to set it up. Once uv is installed, run the following to set up the environment: - ```bash +git clone --recurse-submodules https://github.com/szhaovas/openpi.git +cd openpi GIT_LFS_SKIP_SMUDGE=1 uv sync GIT_LFS_SKIP_SMUDGE=1 uv pip install -e . +uv venv --python 3.8 examples/libero/.venv +source examples/libero/.venv/bin/activate +uv pip sync examples/libero/requirements.txt third_party/libero/requirements.txt --extra-index-url https://download.pytorch.org/whl/cu113 --index-strategy=unsafe-best-match +uv pip install -e packages/openpi-client +uv pip install -e third_party/libero ``` -NOTE: `GIT_LFS_SKIP_SMUDGE=1` is needed to pull LeRobot as a dependency. - -**Docker**: As an alternative to uv installation, we provide instructions for installing openpi using Docker. If you encounter issues with your system setup, consider using Docker to simplify installation. See [Docker Setup](docs/docker.md) for more details. - - - - -## Model Checkpoints - -### Base Models -We provide multiple base VLA model checkpoints. These checkpoints have been pre-trained on 10k+ hours of robot data, and can be used for fine-tuning. - -| Model | Use Case | Description | Checkpoint Path | -| ------------ | ----------- | ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------- | -| $\pi_0$ | Fine-Tuning | Base diffusion [π₀ model](https://www.physicalintelligence.company/blog/pi0) for fine-tuning | `gs://openpi-assets/checkpoints/pi0_base` | -| $\pi_0$-FAST | Fine-Tuning | Base autoregressive [π₀-FAST model](https://www.physicalintelligence.company/research/fast) for fine-tuning | `gs://openpi-assets/checkpoints/pi0_fast_base` | - -### Fine-Tuned Models -We also provide "expert" checkpoints for various robot platforms and tasks. These models are fine-tuned from the base models above and intended to run directly on the target robot. These may or may not work on your particular robot. Since these checkpoints were fine-tuned on relatively small datasets collected with more widely available robots, such as ALOHA and the DROID Franka setup, they might not generalize to your particular setup, though we found some of these, especially the DROID checkpoint, to generalize quite broadly in practice. - -| Model | Use Case | Description | Checkpoint Path | -| ------------------------ | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | -| $\pi_0$-FAST-DROID | Inference | $\pi_0$-FAST model fine-tuned on the [DROID dataset](https://droid-dataset.github.io/), can perform a wide range of simple table-top manipulation tasks 0-shot in new scenes on the DROID robot platform | `gs://openpi-assets/checkpoints/pi0_fast_droid` | -| $\pi_0$-DROID | Fine-Tuning | $\pi_0$ model fine-tuned on the [DROID dataset](https://droid-dataset.github.io/), faster inference than $\pi_0$-FAST-DROID, but may not follow language commands as well | `gs://openpi-assets/checkpoints/pi0_droid` | -| $\pi_0$-ALOHA-towel | Inference | $\pi_0$ model fine-tuned on internal ALOHA data, can fold diverse towels 0-shot on [ALOHA](https://tonyzhaozh.github.io/aloha/) robot platforms | `gs://openpi-assets/checkpoints/pi0_aloha_towel` | -| $\pi_0$-ALOHA-tupperware | Inference | $\pi_0$ model fine-tuned on internal ALOHA data, can unpack food from a tupperware container | `gs://openpi-assets/checkpoints/pi0_aloha_tupperware` | -| $\pi_0$-ALOHA-pen-uncap | Inference | $\pi_0$ model fine-tuned on [public ALOHA data](https://dit-policy.github.io/), can uncap a pen | `gs://openpi-assets/checkpoints/pi0_aloha_pen_uncap` | - - -By default, checkpoints are automatically downloaded from `gs://openpi-assets` and are cached in `~/.cache/openpi` when needed. You can overwrite the download path by setting the `OPENPI_DATA_HOME` environment variable. - - - - -## Running Inference for a Pre-Trained Model - -Our pre-trained model checkpoints can be run with a few lines of code (here our $\pi_0$-FAST-DROID model): -```python -from openpi.training import config -from openpi.policies import policy_config -from openpi.shared import download - -config = config.get_config("pi0_fast_droid") -checkpoint_dir = download.maybe_download("gs://openpi-assets/checkpoints/pi0_fast_droid") - -# Create a trained policy. -policy = policy_config.create_trained_policy(config, checkpoint_dir) - -# Run inference on a dummy example. -example = { - "observation/exterior_image_1_left": ..., - "observation/wrist_image_left": ..., - ... - "prompt": "pick up the fork" -} -action_chunk = policy.infer(example)["actions"] -``` -You can also test this out in the [example notebook](examples/inference.ipynb). - -We provide detailed step-by-step examples for running inference of our pre-trained checkpoints on [DROID](examples/droid/README.md) and [ALOHA](examples/aloha_real/README.md) robots. - -**Remote Inference**: We provide [examples and code](docs/remote_inference.md) for running inference of our models **remotely**: the model can run on a different server and stream actions to the robot via a websocket connection. This makes it easy to use more powerful GPUs off-robot and keep robot and policy environments separate. - -**Test inference without a robot**: We provide a [script](examples/simple_client/README.md) for testing inference without a robot. This script will generate a random observation and run inference with the model. See [here](examples/simple_client/README.md) for more details. - - - - - -## Fine-Tuning Base Models on Your Own Data - -We will fine-tune the $\pi_0$-FAST model on the [Libero dataset](https://libero-project.github.io/datasets) as a running example for how to fine-tune a base model on your own data. We will explain three steps: -1. Convert your data to a LeRobot dataset (which we use for training) -2. Defining training configs and running training -3. Spinning up a policy server and running inference - -### 1. Convert your data to a LeRobot dataset - -We provide a minimal example script for converting Libero data to a LeRobot dataset in [`examples/libero/convert_libero_data_to_lerobot.py`](examples/libero/convert_libero_data_to_lerobot.py). You can easily modify it to convert your own data! You can download the raw Libero dataset from [here](https://huggingface.co/datasets/openvla/modified_libero_rlds), and run the script with: - -```bash -uv run examples/libero/convert_libero_data_to_lerobot.py --data_dir /path/to/your/libero/data -``` - -### 2. Defining training configs and running training - -To fine-tune a base model on your own data, you need to define configs for data processing and training. We provide example configs with detailed comments for Libero below, which you can modify for your own dataset: - -- [`LiberoInputs` and `LiberoOutputs`](src/openpi/policies/libero_policy.py): Defines the data mapping from the Libero environment to the model and vice versa. Will be used for both, training and inference. -- [`LeRobotLiberoDataConfig`](src/openpi/training/config.py): Defines how to process raw Libero data from LeRobot dataset for training. -- [`TrainConfig`](src/openpi/training/config.py): Defines fine-tuning hyperparameters, data config, and weight loader. - -We provide example fine-tuning configs for both, [π₀](src/openpi/training/config.py) and [π₀-FAST](src/openpi/training/config.py) on Libero data. - -Before we can run training, we need to compute the normalization statistics for the training data. Run the script below with the name of your training config: - +## Experiment ```bash -uv run scripts/compute_norm_stats.py --config-name pi0_fast_libero +./run_experiment.sh ``` +Archive heatmaps, checkpoints, and other metrics are logged to `test_logs`. -Now we can kick off training with the following command (the `--overwrite` flag is used to overwrite existing checkpoints if you rerun fine-tuning with the same config): - +## Visualization +Needs to be run within the LIBERO venv. Make sure [dash](https://pypi.org/project/dash/) is installed. ```bash -XLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi0_fast_libero --exp-name=my_experiment --overwrite +source examples/libero/.venv/bin/activate +python -m pip install dash ``` - -The command will log training progress to the console and save checkpoints to the `checkpoints` directory. You can also monitor training progress on the Weights & Biases dashboard. For maximally using the GPU memory, set `XLA_PYTHON_CLIENT_MEM_FRACTION=0.9` before running training -- this enables JAX to use up to 90% of the GPU memory (vs. the default of 75%). - -**Note:** We provide functionality for *reloading* normalization statistics for state / action normalization from pre-training. This can be beneficial if you are fine-tuning to a new task on a robot that was part of our pre-training mixture. For more details on how to reload normalization statistics, see the [norm_stats.md](docs/norm_stats.md) file. - -### 3. Spinning up a policy server and running inference - -Once training is complete, we can run inference by spinning up a policy server and then querying it from a Libero evaluation script. Launching a model server is easy (we use the checkpoint for iteration 20,000 for this example, modify as needed): - -```bash -uv run scripts/serve_policy.py policy:checkpoint --policy.config=pi0_fast_libero --policy.dir=checkpoints/pi0_fast_libero/my_experiment/20000 +Enter the scheduler `.pkl` checkpoint you wish to visualize near the end of `viz_spatial_attack.py`, and run +```python +python viz_spatial_attack.py ``` - -This will spin up a server that listens on port 8000 and waits for observations to be sent to it. We can then run the Libero evaluation script to query the server. For instructions how to install Libero and run the evaluation script, see the [Libero README](examples/libero/README.md). - -If you want to embed a policy server call in your own robot runtime, we have a minimal example of how to do so in the [remote inference docs](docs/remote_inference.md). - - - -### More Examples - -We provide more examples for how to fine-tune and run inference with our models on the ALOHA platform in the following READMEs: -- [ALOHA Simulator](examples/aloha_sim) -- [ALOHA Real](examples/aloha_real) -- [UR5](examples/ur5) - - - -## Troubleshooting - -We will collect common issues and their solutions here. If you encounter an issue, please check here first. If you can't find a solution, please file an issue on the repo (see [here](CONTRIBUTING.md) for guidelines). - -| Issue | Resolution | -| ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `uv sync` fails with dependency conflicts | Try removing the virtual environment directory (`rm -rf .venv`) and running `uv sync` again. If issues persist, check that you have the latest version of `uv` installed (`uv self update`). | -| Training runs out of GPU memory | Make sure you set `XLA_PYTHON_CLIENT_MEM_FRACTION=0.9` before running training to allow JAX to use more GPU memory. You can also try reducing the batch size in your training config. | -| Policy server connection errors | Check that the server is running and listening on the expected port. Verify network connectivity and firewall settings between client and server. | -| Missing norm stats error when training | Run `scripts/compute_norm_stats.py` with your config name before starting training. | -| Dataset download fails | Check your internet connection. For HuggingFace datasets, ensure you're logged in (`huggingface-cli login`). | -| CUDA/GPU errors | Verify NVIDIA drivers and CUDA toolkit are installed correctly. For Docker, ensure nvidia-container-toolkit is installed. Check GPU compatibility. | -| Import errors when running examples | Make sure you've installed all dependencies with `uv sync` and activated the virtual environment. Some examples may have additional requirements listed in their READMEs. | -| Action dimensions mismatch | Verify your data processing transforms match the expected input/output dimensions of your robot. Check the action space definitions in your policy classes. | - +This will display an interactive archive heatmap at `localhost:8050`. You can view it in the browser and click on a cell to save rollouts of that cell's solution to `interactive_vids`. If you are on ssh, you can also configure port forwarding to view and interact with heatmap on your own computer. \ No newline at end of file diff --git a/scheduler_00000220.pkl b/scheduler_00000220.pkl new file mode 100644 index 0000000000000000000000000000000000000000..5e0f5ea90ebabea4693e597f613ea3eca181f03c GIT binary patch literal 2352216 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 z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF 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 T?cICtPHvl)Qno{%jt%}F$5#>$ literal 0 HcmV?d00001 diff --git a/viz_spatial_attack.py b/viz_spatial_attack.py index 774fcdf758..03bb8dec8b 100644 --- a/viz_spatial_attack.py +++ b/viz_spatial_attack.py @@ -1,15 +1,13 @@ import pickle as pkl -import sys import matplotlib.pyplot as plt import numpy as np - -sys.path.insert(0, '/project/shihanzh/openpi/third_party/libero/scripts') import plotly.graph_objects as go from dash import Dash, Input, Output, dcc, html, no_update -from qd_spatial import evaluate from ribs.visualize import grid_archive_heatmap +from qd_spatial import evaluate + def show_interactive_archive(archive): fig = plt.figure(figsize=(8, 6)) @@ -102,7 +100,8 @@ def onclick(clickData): if __name__ == "__main__": with open( - file="test_logs/scheduler_00000200.pkl", + # Enter the scheduler checkpoint you want to visualize here + file="scheduler_00000200.pkl", mode="rb", ) as f: archive = pkl.load(f).result_archive From 53af1f398308d62544725b217b4a4593a616f37c Mon Sep 17 00:00:00 2001 From: szhaovas Date: Sat, 16 Aug 2025 15:37:31 -0700 Subject: [PATCH 07/17] Updated checkpoint for demo --- ...ler_00000220.pkl => scheduler_00001000.pkl | Bin 2352216 -> 2352086 bytes 1 file changed, 0 insertions(+), 0 deletions(-) rename scheduler_00000220.pkl => scheduler_00001000.pkl (91%) diff --git a/scheduler_00000220.pkl b/scheduler_00001000.pkl similarity index 91% rename from scheduler_00000220.pkl rename to scheduler_00001000.pkl index 5e0f5ea90ebabea4693e597f613ea3eca181f03c..f853d0ca8704f40f08df6fff955f207fc777689d 100644 GIT binary patch delta 153766 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
?Rf5js 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 ?SzRMcrNeF9LbY z8tz;BKtdfwoeLT%ao9Yqo{oaE&Wp5z5&Z|1o9wiTv_C10-`$%kQ9!%nNFL72KU#QX3S&L-4^FNy|GVE;G2XD98wz)WJM zl3>V0LPMix=3LC8Ao^U(mwTpDora~bUN4%oJl%dcjt;wsIH`u$Fmmr*-PQ}XDCKy1FaYN zYr2t+*E!V`T&Md!$Il^an2v0hcXtkDb|I?Zt)IISE5UNNpySG)TA=z@@K@ZRA8vbj zKMNLaMkDE0zpYgb!g9Sl9g|ob9Nf>W(kNDkhzoj2p+QdY^eiEE*NRa*Y?(Y>q3|^# zd!$9bu&)`UuHJrC(NzFjl2Jm(-}Zp?4_322x@NQ!t^e=wXg{QstX+R+83ryk-%W;+ zs?pw;g>}?IDR3|=w$~&59b}qsOUTR<(eMA*&aHBhz-GU%)v0ggkXo!Bpyq++zr)}5 zAKNZNYlQmV8)TLt=pwWIdzl;pMGJL5e|pvh4FCr4zyz5c+&vt)hr(}-VvdQCBdeZtq+vF|2@B) zOGGM}m3+AzjgXjr=Z#@{EAZ4lT;s!P#Lk4BtgMS2oa=ivCqjsTm!ls(4j5GpD$3@}pN9hQy2G_-5xPkg3YO@y^i3EtZF-@hqk5J-? zAgj@YC}6Ylzx4+PnAOsR+*ibF(JSpgH*NYGz)Sb&byM#qs5@`|rFyCh1bCh#Z+ev? zwr1)0#?=AXd32@q@<19C8C>h3(!@a-9Zj}RpTmG&>P)`m-vo$NJAPR3YAIs=)z0N3 zQ3GmIh4VWvu%MH0+=S?p)dd&V7QgylkAVVd!an}vJs_d1Sl%4c2EPwK;VvA^L5`2h zpM?%YLEX#cwqBM}ux{MH%c-jfy-HY%)|9~(zI3j@GU@Mw}ec$`(^E3Uom1r?$*L*m^sTykL%KonXD+kT!J89eNndqy`=ns}p zaqw_j@B55=E9{caBV6g|hWHNFrNWZ8Aaa^-X(Nsdr@NlW46C#Q!|Fa0Hk(>>Ue=#J z2FE%GGO;i3@037Rd*#Zq2mUCkx|n$`*+4^)&V4OM68H@|=+*!3hM6aV)r9N^F_1R; zo}fb23}pExXNF%bu*ut;dta>yT}w46x#(06pI-9O+zTpzZQ~Vn1M?z8qanE4_+kt& zEDe=BuxN&^{n`;qH#%YKXZ$4kkOb~0&vGKna-sgXpQ%;66(2b5#j}!?$hKWD@D8ZTS%lymO{Nax6-U%1q5ag6;rD7kz61D&-WuPsNYJ4 zyn7I<>{q%RSmipw;LnwxaXu-K^LwO5KBWT^xn<_HPg;_|e3!+(?a)$`UlAZZ{iYo5 zt$r#icv1xdoS6!Vsws$()>M?-5r(F0EGUIzEx@D@ond)|{QumfqC1Uo1xsYKzxKnV z{uTv-zL%dhO-e)hVFBWfs_n=Z8kc4+#33=0SE5VF?jRWwX?*2u7m_P}Ggvy&2`-}V z;{mR~l39eP#(4_JO3l+>yhKJxhZ1xoHU}Yiazs`6Xg)gl<<{F(?hbUCfu;W7a~E{~ ze6uUjD-MTL`4*)@bm%m_nz$( zM|+SdnS33@L4gCs{cF2|$SD4rm;W&-e3SmyKmQN0xFE*&52EKIT_~HKga*R=c)58z(CU+u zzXt51kTO?>t#wU1I+xpS!T6{VULR)UU#$H&HLrR&4`uvbT>$-2FqsBpIX6ylU^yUI2clP zi?&!T_k;84nS@RZKj4|<4-mKM0~t%rUo)Q@(Vagl6F%&#>KT z&Km|Q31{AB7;we)^!c@L zd;WG<+sY2=6)wk_l|%p3RoS3iBg`^`GivKn zZSMATxaW5I-AKscP(+*;s{?@+_?*R5?195G6(41Ch68F*N5}b%3yuSDJfCjB`db7v zwDCUrEmDu>^TM9-hUEiQx<~tRVj6fUd+{Wh)FZ;p$JyM1nl<45;1uyQ6L!e!t~&__ z;$NF`-BbHg>X8Yr%;Ofd7Py?GePj4=2Rt7wIHWy=n?M}2%?Ul8(46yIVyxW*R8Ehd zz3x?uwZ~1{hmsluaQL!AT%x?n)}!}&69r@#r}*~5w( zrRW^ruPdI3^|0oo?u9eEji6}o?`!K=FVrty{6$ADN6D-i_H_)MP)!OsG*nN5k3X`P zKVHGYqQuf@*zG4kEnwj9N0SG~hf=N*`S4@p${01fRt~gm^1IBMWWt^-8c&Ne{lNd@ z*j)+SAea4D;JqIsXX+V!RgJJNVe%RsdoP)V3Jm!6jRMXUCG}|*I%M5Zz6^`@03G{ce+FSQUwy4 zo)h3b90KTrN$_#OVmQBlmv8n<+}bpwGI`}41`^r&PgQ6-AkyeWtkx$7mQGL|Vzo`T0{bdgPHF74w$@CWsQy%$f zhP?Fl@!Nb5G$<*Eyf}#0+@4qK| zQM2Xiax-^a*jRVTJbxtw*+29W?%j>^P`)4Q&tB<7(VpZWlNW>V@Uh6WU#1_j)I3&K zBY?3Y?VG7TIUEqjOR0_ZqErInH+<1~xV#h5SE}iz7+?fYzG}tDp;stDIv}$Wqr>8^ zIf^Bhv?KL_twf8yK@f9%H^PwM4ZMf8?rpX=A%4pTU1Dy&V45s^`2Fo*IOM-i^chPR z(sueJa$>3-j)dDbuI+I}!_hI+6a83@jv~pKN3&d$&yUTWYeV_PYr<4GNU<2Isk(614azAR>Dzo1u$la= z^dhw#3EYhKj8dh*;TtnUubiyVo-fOOxgs?v+J)xmMwmWw`(#!z9pMipuV`sFlrU1p z*gj&Lpwk3)6Fkik@mb(SZ=V{-FaWA2^?z69wjxGJ#bu4XSl~|6d(#r?1Gd&@dKO;d zjuSjOWAQQsro2KAl`cpjKi0?I`W_wVR5&x8iZv0wKhKiYPl^M+U$)vCTm2xw`&&UV zq8Wvm81Rr-2H+{RJBNy8Htg~Yy+`0?Z$PO}!@F9f(&6=!m8S@O>E0ZpO|7uZ$w-Z4y%8o zNYM0=c-L$r4vI))Q2ei8en zU=B{UKQ_2@5=wf@`ayTd@xxZc}@ZbXjL{)|sRwNA#eu7oP^ul*Tr_mB+#Y6RJBBU{iE>(+xo ztop8B)yyFKwSe|91Ce!(B9td*Uw6LB2gEg*gv|M}-~qp-{t#CQA{;)$B=h`k1~@NONLcxy~jYLVIBt_XHl1Tmk^Nj*8x1gF-2JwE8%1AkgFTsp2+q6um#HKsY- zM7Nj{czBaUfTo%hp4nI%xZlWl*-*g?c2keYzl&AR9IUy7(kxBL%OtPe%O=b(Lz zbS4F0Myk4?OY8%mg!~@^oFzygB$es%Q~V{|`RJi{unNA_s_oE?HKJ?cOGQ`3HGmkn zoXxX%8`Yn_pxY`^ga#Uu*^f=&8MjaAf@3Rz2*Kj*)NEp1(7tgv^(G|;rT&-7nU2*q zKGPzngVP0YK<%EPV0S%2i@A$GymDaiR^fEDm?xMQ^b``S%g`k2lB^69f&>?Gv*an< z&3O~G&u5Da9?gX%8F@jd%;(Gt1NT0-lV4zZXt4r}WNiOg_17YUz3R^U2p=PWcHyeL zb?`el^>X%hlV%luq`VRQJyQpt)Y9$MOdA1Mrmx52q2)()#i?)q#Xz#nv%y(z3_=pR z;b4ldXyA8R*7{b07NZZD(f-T z&M7z#ZM>tsZ@J8b`uh z>xOUr_+K?8ES?^ADDUO^*Nxf|-+L7mQQ(%~0JA|)8fvNXvRY-sq{pRYM`1CHoU<=T z=sp<-eu4+OC(m~y*^ze))gQXCrp>Q&>X{Ad{mAljy>k%kyGCgL+IFG`^<%l->lBcq zt4noj&qm?7C#pXYn^Bwee@t1pjd0ORgIkLlKY93Kf>?wV`p|Ws1uYY*E^x{JvO03k z4$enO4Zph55AqMr=u!P{M|q+LsqJYf@bp%MGH0#}g7nfWMi_n=l;`^BMyCZ5po%uN z(@cP)VWY1Nc6tyW@!>am%>0SUZ7dk<_e4v=HP|{EgcFut@|r35V!VH2=hZgOAKA

o=SnWbU7Jf7tG67^ndqKuf=1Cj0%MOGlQMn=N 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 z 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 Q3P#ia_ZUqj?8$`v3p{ From 57ebe9cda1ab2c2cb69cac10de9905da359784b3 Mon Sep 17 00:00:00 2001 From: szhaovas Date: Sat, 16 Aug 2025 15:37:31 -0700 Subject: [PATCH 08/17] Updated checkpoint 1000itr --- ...ler_00000220.pkl => scheduler_00001000.pkl | Bin 2352216 -> 2352086 bytes viz_spatial_attack.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename scheduler_00000220.pkl => scheduler_00001000.pkl (91%) diff --git a/scheduler_00000220.pkl b/scheduler_00001000.pkl similarity index 91% rename from scheduler_00000220.pkl rename to scheduler_00001000.pkl index 5e0f5ea90ebabea4693e597f613ea3eca181f03c..f853d0ca8704f40f08df6fff955f207fc777689d 100644 GIT binary patch delta 153766 zcmZsj2VBl?`}f-tN`*vQQW+5`qYfe|4JCw#CRRocjIuK_ zl94^0!|%TT&wc-&*VD`U`W)wR&hL4C=XsvL-<{@b`~ywb_=S9hBCi$;Ve@2@ermHlcf-mgJ71 z7vU{}E4LV4TDQ5RTzgmUix$M=8gFc;+=3Z1()Zl&u7^iw!D_}e#OTi^xur6xFxf*| zoAWdd!ZqId+*N4BMcZbY8|1Wr%f&rMe#(}^+O@6KyiIN4UP8;HsobgVTCeY=j`c#f zS~c_2*yC^%(h`e7dmW|Fo`jmGA|dGx zcWB$+tU~`T_kRU!|HcUXQ~v+*Z=e28v;I~3|NZ@Y92Wn{vGcDi<&H1O$zplxD`|E%H{yN0|zb{{5bAha3+?(77Bgyil95av~q! zAA%>w$EQAtkMB3xmq@P=4&>t!8f5Py4JK_O)g;xUbP2=(3csUpBH1^HTcUh?w}};G z@29xqWb2a6N46uuPn;m%D)OzK$j9K5pg=P@2S`mP@bS5mGDP_Ja>?!^djqL4kwat? z;^aF_gc&uyfH+C^Jz|hZqQ;~Wo@C!849HF) zgec!B3VRXB6rLtZ<1b83X>xcF`s4&ckbEsf8*z~MOg$h^4PX%0$sQ&xq)Imt=0p)u zOw6I4dqqsAvPMW>6PDx;A}t|(OS+HFCl)c6Y_-2<`X%BG(MV1E)o`$ zu9TQT`G$xz>fxJ&h!~CkA?n@~inOOp%c+tdM6V!S5u~w14535(CVmkKgf8)i(4fK{ zC?A)&O7vW$EYL=^Fz2qz*L z^z)5aLc|e$R7pRfM|M1Mi)=T-oj6X26DNo(6sJLKrb-SFKv&B&Iw_?IFQS;PloDb( z*%qXyNzF-%h@+IhhqzA%%qXLlt)Zh{OE}X|ETXeJjQB*fQn;P?NcJ|$xSgmWK2Ufo zX*DsQ>=5D_QAOeRq~k;=v5;`0{6VCu#B1Ue@rHOys7<2r=TS?Vh);Ah2S~ZZRkD8x z(Abi_k5H#Dhx9Tjn^culjhIJ_687Y~MEaHpA}py#E|6X%UJ_;$Rv|SfwIGU#5emN& zqVc~^U9*O|FP#vTpt~DUNk=l9{Bp!&!iRW5tfw@CG@kc}Wa>Frs#uH=C5{o3h;HIA z(M230ju4BfvQE-xRE96%NB9%945~7~H2|Mb(i_}#r#0c?{m_xj# z0_PG%bR>;b@Eo$=5ZTl~BSM@GB8xPW5F>jcafCQbbP>BG>GC6GOrW17Q|YWEz7ft8 z)+UW0z7oO|?jQ!KF{xBoJK1f-LW)~NSWyE`QJg---6LHVgmJl*zuN0#3=cmA8I{B6m5yThbD}i+6pGn84zz!-ziwc`W6)&Yqml2V~78-&; z@+%V+WIv?_Xi@s3l4UBmyX59Yy++z99UF=R`im)sX)@*~7#$Vk7ycP@#g3FK_n9bR7f6WsHHe1 z%4|Zm0_h2Aa0?aOMmP}%iAB`?lH@m|G#;c<#3>rzX@oKPj#GFtAwd{XIGYeBd+HRv zO?>WTcoMnfL@I1Cb$b{QPL)LvcPQ>IAw&&oC7g(Zgd)XNQ{&`GeF-we@YZ(EUwWPl#1u!`{aS&$vXYe)bM$qDjyr)$_Pg$mO4+D% z`sK4TZKbFsm8(4=sR@@`bz7@PHb9igk7eg)6yp=2=E4%b7I=gkcD1K)Fh_Rq$6N0{ zc+s!AtZq&t-q=&ptRu`rfqhDUe)*T<@!I#cYF>Ftn6x&b75{Z%kDe%#W0r-e|B~OboXf;lQI8@L-!kFq+9P}JtSG>&nmnt(S>2UX=n?_TxjQ9O z2A36s97p?Syet>0G$v2wDYZeE&#qOmFDkLC_Tk8a!a{h|y!)_)UJ0e!E~{)<43BZKP2RMFz2?K?&_qrzfHAbl%#k#m|GXXa7oK$7h?`M)lcdu5^8})Jh?q@ zQ7vA#UnLh(TLPDy!S7gQF3ew*y^{T>1WrXQs4#Rcz&wE+MW!=Y@G?=bp8rrMIC92R zBn?VobSQtK@>&+i7(F&kJkyBdCdi@D$I)dl?0 zn_YQ+G0-qKO!12y7m}l6gi6M$;pSQg%!Kq!mPe}#6r5=;wAo-e3d z3cp2MCft(=#Evg(Uw)m+g8S>_3}&Bc{yRe7{`t<2llpspcM354G`9$ym21T#XGI$X zmiNPSX5M?P8V(*P5*&uNDxHe$`XI*W*cB6Jn}F8bKA8At7>D`}QB!E

?Rf5js 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 ?SzRMcrNeF9LbY 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

o=SnWbU7Jf7tG67^ndqKuf=1Cj0%MOGlQMn=N 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 z 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 Q3P#ia_ZUqj?8$`v3p{ diff --git a/viz_spatial_attack.py b/viz_spatial_attack.py index 03bb8dec8b..da9bf0cca8 100644 --- a/viz_spatial_attack.py +++ b/viz_spatial_attack.py @@ -101,7 +101,7 @@ def onclick(clickData): if __name__ == "__main__": with open( # Enter the scheduler checkpoint you want to visualize here - file="scheduler_00000200.pkl", + file="scheduler_00001000.pkl", mode="rb", ) as f: archive = pkl.load(f).result_archive From 932859c28f30fd075291151f2b592e4d7b969ea4 Mon Sep 17 00:00:00 2001 From: szhaovas Date: Sat, 16 Aug 2025 15:44:17 -0700 Subject: [PATCH 09/17] Fixed path issue in LIBERO setup.py --- third_party/libero | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/libero b/third_party/libero index 9e93580a63..9060213e2f 160000 --- a/third_party/libero +++ b/third_party/libero @@ -1 +1 @@ -Subproject commit 9e93580a6395a89f896ccd20157deb3788e77ebb +Subproject commit 9060213e2f96a265c82d2725e7e0866968fc56bf From bcf2e96feae0b40a20c82aa60bcde8dab8c3b2eb Mon Sep 17 00:00:00 2001 From: szhaovas Date: Sat, 16 Aug 2025 15:58:49 -0700 Subject: [PATCH 10/17] Added shapely to dependencies --- examples/libero/requirements.in | 3 ++- examples/libero/requirements.txt | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/examples/libero/requirements.in b/examples/libero/requirements.in index 53f8e06ba8..1ac8e1491a 100644 --- a/examples/libero/requirements.in +++ b/examples/libero/requirements.in @@ -11,4 +11,5 @@ torchaudio==0.11.0+cu113 robosuite==1.4.1 matplotlib==3.5.3 ribs==0.7.1 -fire \ No newline at end of file +fire +shapely \ No newline at end of file diff --git a/examples/libero/requirements.txt b/examples/libero/requirements.txt index 0c860f65df..5fd1e2fa74 100644 --- a/examples/libero/requirements.txt +++ b/examples/libero/requirements.txt @@ -64,6 +64,7 @@ numpy==1.22.4 # robosuite # scikit-learn # scipy + # shapely # torchvision numpy-groupies==0.9.22 # via ribs @@ -120,6 +121,8 @@ setuptools==75.3.0 # via # imageio-ffmpeg # numba +shapely==2.0.7 + # via -r examples/libero/requirements.in shtab==1.7.1 # via tyro six==1.17.0 From 11e4b8a9f0676935f00a1e5c012b5e095946ea48 Mon Sep 17 00:00:00 2001 From: szhaovas Date: Tue, 19 Aug 2025 17:15:49 -0700 Subject: [PATCH 11/17] Added MILP repair. --- qd_spatial.py | 2 +- third_party/libero | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/qd_spatial.py b/qd_spatial.py index 52098b1d7c..f9c655be1c 100644 --- a/qd_spatial.py +++ b/qd_spatial.py @@ -101,7 +101,7 @@ def evaluate(params, ntrials, seed, video_logdir=None): objectives = [] measures = [] for sol_id, sol in enumerate(params): - env = TASK_ENV(params=sol) + env = TASK_ENV(params=sol, repair_env=True, repair_config={'time_limit':1500, 'seed':seed}) env.seed(seed) obs = env.reset() diff --git a/third_party/libero b/third_party/libero index 9060213e2f..3d537c1c7e 160000 --- a/third_party/libero +++ b/third_party/libero @@ -1 +1 @@ -Subproject commit 9060213e2f96a265c82d2725e7e0866968fc56bf +Subproject commit 3d537c1c7eb37f8c9885e6b36fecc224ec034ae9 From 2544f1934469180fb86a07987468ab34a59aa405 Mon Sep 17 00:00:00 2001 From: szhaovas Date: Wed, 20 Aug 2025 16:30:11 -0700 Subject: [PATCH 12/17] Simple dask parallelization. --- examples/libero/requirements.in | 3 +- examples/libero/requirements.txt | 65 +++++++- qd_spatial.py | 262 +++++++++++++++++++------------ third_party/libero | 2 +- 4 files changed, 224 insertions(+), 108 deletions(-) diff --git a/examples/libero/requirements.in b/examples/libero/requirements.in index 1ac8e1491a..20a6b439ae 100644 --- a/examples/libero/requirements.in +++ b/examples/libero/requirements.in @@ -12,4 +12,5 @@ robosuite==1.4.1 matplotlib==3.5.3 ribs==0.7.1 fire -shapely \ No newline at end of file +shapely +dask[distributed] \ No newline at end of file diff --git a/examples/libero/requirements.txt b/examples/libero/requirements.txt index 5fd1e2fa74..e2020925ab 100644 --- a/examples/libero/requirements.txt +++ b/examples/libero/requirements.txt @@ -6,8 +6,22 @@ certifi==2024.12.14 # via requests charset-normalizer==3.4.0 # via requests +click==8.1.8 + # via + # dask + # distributed +cloudpickle==3.1.1 + # via + # dask + # distributed cycler==0.12.1 # via matplotlib +dask==2023.5.0 + # via + # -r examples/libero/requirements.in + # distributed +distributed==2023.5.0 + # via dask docstring-parser==0.16 # via tyro etils==1.3.0 @@ -20,6 +34,8 @@ fire==0.7.0 # via -r examples/libero/requirements.in fonttools==4.55.3 # via matplotlib +fsspec==2025.3.0 + # via dask glfw==1.12.0 # via mujoco idna==3.10 @@ -29,21 +45,33 @@ imageio==2.35.1 imageio-ffmpeg==0.5.1 # via imageio importlib-metadata==8.5.0 - # via typeguard + # via + # dask + # typeguard importlib-resources==6.4.5 # via etils +jinja2==3.1.6 + # via distributed joblib==1.4.2 # via scikit-learn kiwisolver==1.4.7 # via matplotlib llvmlite==0.36.0 # via numba +locket==1.0.0 + # via + # distributed + # partd markdown-it-py==3.0.0 # via rich +markupsafe==2.1.5 + # via jinja2 matplotlib==3.5.3 # via -r examples/libero/requirements.in mdurl==0.1.2 # via markdown-it-py +msgpack==1.1.1 + # via distributed mujoco==3.2.3 # via robosuite numba==0.53.1 @@ -73,9 +101,14 @@ opencv-python==4.6.0.66 # -r examples/libero/requirements.in # robosuite packaging==24.2 - # via matplotlib + # via + # dask + # distributed + # matplotlib pandas==2.0.3 # via ribs +partd==1.4.1 + # via dask pillow==10.4.0 # via # imageio @@ -83,7 +116,9 @@ pillow==10.4.0 # robosuite # torchvision psutil==6.1.0 - # via imageio + # via + # distributed + # imageio pygments==2.18.0 # via rich pynput==1.7.7 @@ -101,7 +136,10 @@ python-xlib==0.33 pytz==2025.2 # via pandas pyyaml==6.0.2 - # via -r examples/libero/requirements.in + # via + # -r examples/libero/requirements.in + # dask + # distributed requests==2.32.3 # via torchvision ribs==0.7.1 @@ -131,7 +169,11 @@ six==1.17.0 # python-dateutil # python-xlib sortedcontainers==2.4.0 - # via ribs + # via + # distributed + # ribs +tblib==3.0.0 + # via distributed termcolor==2.4.0 # via # fire @@ -140,6 +182,11 @@ threadpoolctl==3.5.0 # via # ribs # scikit-learn +toolz==1.0.0 + # via + # dask + # distributed + # partd torch==1.11.0+cu113 # via # -r examples/libero/requirements.in @@ -149,6 +196,8 @@ torchaudio==0.11.0+cu113 # via -r examples/libero/requirements.in torchvision==0.12.0+cu113 # via -r examples/libero/requirements.in +tornado==6.4.2 + # via distributed tqdm==4.67.1 # via -r examples/libero/requirements.in typeguard==4.4.0 @@ -166,7 +215,11 @@ tyro==0.9.2 tzdata==2025.2 # via pandas urllib3==2.2.3 - # via requests + # via + # distributed + # requests +zict==3.0.0 + # via distributed zipp==3.20.2 # via # etils diff --git a/qd_spatial.py b/qd_spatial.py index f9c655be1c..1dcf9cea5b 100644 --- a/qd_spatial.py +++ b/qd_spatial.py @@ -11,6 +11,7 @@ import imageio import matplotlib.pyplot as plt import numpy as np +from dask.distributed import Client, LocalCluster from libero.libero import get_libero_path from libero.libero.envs import OffScreenRenderEnv from openpi_client import websocket_client_policy as _websocket_client_policy @@ -35,7 +36,6 @@ num_steps_wait = 10 host = "0.0.0.0" port = 8000 -client = _websocket_client_policy.WebsocketClientPolicy(host, port) replan_steps = 5 def _quat2axisangle(quat): @@ -74,123 +74,178 @@ def _extract_scheduler_itr(filename): return None def evaluate(params, ntrials, seed, video_logdir=None): - """Evaluates params by creating LIBERO environments and computing + """Evaluates param by creating LIBERO environments and computing objective and measure values from the environments' features and VLA rollout. Args: - params (array-like): Array of shape (batch_size, solution_dim) - containing params to be evaluated. + params (np.ndarray): Array of shape (solution_dim,) containing a single + solution to be evaluated. ntrials (int): Number of rollouts for each solution. seed (int): Seed. video_logdir (str): Folder for saving rollout videos. If None no video is saved. Return: - objective (np.ndarray): Array of shape (batch_size,) containing VLA's - success rates on environments created from each row of ``params``. - Invalid rows get np.nan. - measures (np.ndarray): Array of shape (batch_size, measure_dim) - containing measure values computed from the environments' features. - Invalid rows get [np.nan] * measure_dim. + objective (float): Entropy of VLA's success rate on the environment + created from ``params``. + measures (float, float): Spread and similarity of the environment + created from ``params``. """ - # NOTE: Ideally this should be parallelized, but we may have to evaluate - # solutions one at a time due to VLA's high GPU memory requirement. np.random.seed(seed) + openpi_client = _websocket_client_policy.WebsocketClientPolicy(host, port) + + env = TASK_ENV( + params=params, + repair_env=True, + repair_config={ + 'time_limit':1500, + 'seed':seed + } + ) + + env.seed(seed) + obs = env.reset() + if obs is None: + # TODO: How to handle solutions that fail to evaluate + return 1e-6, 0, 0 + + if video_logdir is not None: + # ID each sol with datetime to prevent overwriting + sol_logdir = Path(video_logdir) / f"{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}" + sol_logdir.mkdir(parents=True) + + # compute_spread_similarity must be called at the start before any + # action since actions might change objects' locations + spread, similarity = env.env.compute_spread_similarity() - objectives = [] - measures = [] - for sol_id, sol in enumerate(params): - env = TASK_ENV(params=sol, repair_env=True, repair_config={'time_limit':1500, 'seed':seed}) - - env.seed(seed) + # Get success rates by running openpi on env + success_rate = 0 + for trial_id in range(ntrials): obs = env.reset() - if obs is None: - # TODO: How to handle solutions that fail to generate - objectives.append(1e-6) - measures.append([0, 0]) - continue - - if video_logdir is not None: - # ID each sol with datetime to prevent overwriting - sol_logdir = Path(video_logdir) / f"{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}" - sol_logdir.mkdir(parents=True) - - # compute_spread_similarity must be called at the start before any - # action since actions might change objects' locations - spread, similarity = env.env.compute_spread_similarity() - measures.append([spread, similarity]) - - # Get success rates by running openpi on env - print(f"------------------ Rolling out solution{sol_id}") - success_rate = 0 - for trial_id in range(ntrials): - obs = env.reset() - action_plan = collections.deque() - - replay_images = [] - - success = False - for t in range(max_steps + num_steps_wait): - try: - if t < num_steps_wait: - # Do nothing at the start to wait for env to settle - obs, reward, done, info = env.step([0.0] * 6 + [-1.0]) - continue - - img = np.ascontiguousarray(obs["agentview_image"][::-1, ::-1]) - wrist_img = np.ascontiguousarray(obs["robot0_eye_in_hand_image"][::-1, ::-1]) - - replay_images.append(img) - - if not action_plan: - element = { - "observation/image": img, - "observation/wrist_image": wrist_img, - "observation/state": np.concatenate( - ( - obs["robot0_eef_pos"], - _quat2axisangle(obs["robot0_eef_quat"]), - obs["robot0_gripper_qpos"], - ) - ), - "prompt": env.language_instruction, - } - - action_chunk = client.infer(element)["actions"] - assert ( - len(action_chunk) >= replan_steps - ), f"We want to replan every {replan_steps} steps, but policy only predicts {len(action_chunk)} steps." - action_plan.extend(action_chunk[: replan_steps]) - - action = action_plan.popleft() - - obs, reward, done, info = env.step(action.tolist()) - if done: - success_rate += 1 / ntrials - success = True - break - - except Exception as e: - print(e) + action_plan = collections.deque() + + replay_images = [] + + success = False + for t in range(max_steps + num_steps_wait): + try: + if t < num_steps_wait: + # Do nothing at the start to wait for env to settle + obs, reward, done, info = env.step([0.0] * 6 + [-1.0]) + continue + + img = np.ascontiguousarray(obs["agentview_image"][::-1, ::-1]) + wrist_img = np.ascontiguousarray(obs["robot0_eye_in_hand_image"][::-1, ::-1]) + + replay_images.append(img) + + if not action_plan: + element = { + "observation/image": img, + "observation/wrist_image": wrist_img, + "observation/state": np.concatenate( + ( + obs["robot0_eef_pos"], + _quat2axisangle(obs["robot0_eef_quat"]), + obs["robot0_gripper_qpos"], + ) + ), + "prompt": env.language_instruction, + } + + action_chunk = openpi_client.infer(element)["actions"] + assert ( + len(action_chunk) >= replan_steps + ), f"We want to replan every {replan_steps} steps, but policy only predicts {len(action_chunk)} steps." + action_plan.extend(action_chunk[: replan_steps]) + + action = action_plan.popleft() + + obs, reward, done, info = env.step(action.tolist()) + if done: + success_rate += 1 / ntrials + success = True break - print(f"\t trial{trial_id}: {'success' if success else 'fail'}") - - if video_logdir is not None: - imageio.mimwrite( - sol_logdir / f"trial{trial_id}_{'success' if success else 'fail'}.mp4", - [np.asarray(x) for x in replay_images], - fps=10, - ) + except Exception as e: + print(e) + # TODO: How to handle solutions that fail to evaluate + return 1e-6, 0, 0 + + print(f"\t trial{trial_id}: {'success' if success else 'fail'}") + + if video_logdir is not None: + imageio.mimwrite( + sol_logdir / f"trial{trial_id}_{'success' if success else 'fail'}.mp4", + [np.asarray(x) for x in replay_images], + fps=10, + ) - # Maximizes entropy as objective, i.e. we want more uncertain - # success rates - success_rate = np.clip(success_rate, 1e-6, 1 - 1e-6) - objectives.append(-success_rate*math.log2(success_rate) - (1-success_rate)*math.log2(1-success_rate)) + # Maximizes entropy as objective, i.e. we want more uncertain + # success rates + success_rate = np.clip(success_rate, 1e-6, 1 - 1e-6) + entropy = -success_rate*math.log2(success_rate) - (1-success_rate)*math.log2(1-success_rate) + + openpi_client._ws.close() + + return entropy, spread, similarity + +# def evaluate_parallel(client, params, ntrials, seed, video_logdir=None): +# objs = [] +# meas = [] +# for sol_id, sol in enumerate(params): +# entropy, spread, similarity = evaluate(sol, ntrials, seed+sol_id, video_logdir) +# objs.append(entropy) +# meas.append([spread, similarity]) + +# return np.asarray(objs), np.asarray(meas) + +def evaluate_parallel(client, params, ntrials, seed, video_logdir=None): + """Parallelized version of :func:`evaluate`. - return np.asarray(objectives), np.asarray(measures) + Args: + params (np.ndarray): Array of shape (batch_size, solution_dim) + containing solutions to be evaluated. + ntrials (int): Number of rollouts for each solution. + seed (int): Seed. + video_logdir (str): Folder for saving rollout videos. If None no video + is saved. + + Return: + objective (np.ndarray): Array of shape (batch_size,). Entropies of + VLA's success rates on the environments created from ``params``. + measures (np.ndarray): Array of shape (batch_size, measure_dim). + Spread and similarity of environments created from ``params``. + """ + batch_size = params.shape[0] + nworkers = len(client.scheduler_info()['workers']) + assert nworkers >= batch_size, ( + f"batch_size={batch_size} exceeds the number of workers " + f"{nworkers}" + ) + + futures = [ + client.submit( + evaluate, + params=sol, + ntrials=ntrials, + seed=seed+sol_id, + video_logdir=video_logdir, + pure=False, + ) + for sol_id, sol in enumerate(params) + ] + results = client.gather(futures) + objs, meas = [], [] + + # Process the results. + for entropy, spread, similarity in results: + objs.append(entropy) + meas.append([spread, similarity]) + + return np.asarray(objs), np.asarray(meas) def save_heatmap(archive, heatmap_path): """Saves a heatmap of the archive to the given path. @@ -275,11 +330,18 @@ def main( with open(file=reload_from, mode="rb") as f: scheduler = pkl.load(f) + cluster = LocalCluster( + processes=True, + n_workers=batch_size, + threads_per_worker=1, + ) + client = Client(cluster) + start = 1 if reload_from is None else reload_itr + 1 end = start + iterations for i in range(start, end): solutions = scheduler.ask() - objectives, measures = evaluate(params=solutions, ntrials=num_trials_per_sol, seed=seed, video_logdir=None) + objectives, measures = evaluate_parallel(client=client, params=solutions, ntrials=num_trials_per_sol, seed=seed, video_logdir=None) scheduler.tell(objectives, measures) print( diff --git a/third_party/libero b/third_party/libero index 3d537c1c7e..6d3821b763 160000 --- a/third_party/libero +++ b/third_party/libero @@ -1 +1 @@ -Subproject commit 3d537c1c7eb37f8c9885e6b36fecc224ec034ae9 +Subproject commit 6d3821b763c67e5a25cb94742e6015ff1f9d0d9d From 022e94c12b4dea51a23c464cecd07e9e64c272b1 Mon Sep 17 00:00:00 2001 From: szhaovas Date: Wed, 20 Aug 2025 22:36:53 -0700 Subject: [PATCH 13/17] Added MILP for task alignment --- third_party/libero | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/libero b/third_party/libero index 6d3821b763..de521c0a33 160000 --- a/third_party/libero +++ b/third_party/libero @@ -1 +1 @@ -Subproject commit 6d3821b763c67e5a25cb94742e6015ff1f9d0d9d +Subproject commit de521c0a33e9af445876cefb5979962e79019189 From 8212143cc0a090d9c77001d94a44c56d797ac5f4 Mon Sep 17 00:00:00 2001 From: szhaovas Date: Thu, 21 Aug 2025 13:53:08 -0700 Subject: [PATCH 14/17] Store trajectories during rollout --- qd_spatial.py | 78 ++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 56 insertions(+), 22 deletions(-) diff --git a/qd_spatial.py b/qd_spatial.py index 1dcf9cea5b..15260f9126 100644 --- a/qd_spatial.py +++ b/qd_spatial.py @@ -89,8 +89,21 @@ def evaluate(params, ntrials, seed, video_logdir=None): Return: objective (float): Entropy of VLA's success rate on the environment created from ``params``. - measures (float, float): Spread and similarity of the environment - created from ``params``. + spread (float): In the environment created from ``params``, how well do + objects cover the table. + similarity (float): In the environment created from ``params``, how + tightly are objects clustered. + trajectories (np.ndarray): Array of shape (ntrials,) containing all + rollout trajectories. Each rollout trajectory is a dictionary of + the following format: + { + "success": bool, + "prompt": str, + "image": List, + "wrist_image": List, + "state": List, + "action_plan": List + } """ np.random.seed(seed) openpi_client = _websocket_client_policy.WebsocketClientPolicy(host, port) @@ -108,7 +121,7 @@ def evaluate(params, ntrials, seed, video_logdir=None): obs = env.reset() if obs is None: # TODO: How to handle solutions that fail to evaluate - return 1e-6, 0, 0 + return 1e-6, 0, 0, None if video_logdir is not None: # ID each sol with datetime to prevent overwriting @@ -119,15 +132,21 @@ def evaluate(params, ntrials, seed, video_logdir=None): # action since actions might change objects' locations spread, similarity = env.env.compute_spread_similarity() + trajectories = [] # Get success rates by running openpi on env success_rate = 0 for trial_id in range(ntrials): obs = env.reset() action_plan = collections.deque() - replay_images = [] - - success = False + new_trajectory = { + "success": False, + "prompt": env.language_instruction, + "image": [], + "wrist_image": [], + "state": [], + "action_plan": [] + } for t in range(max_steps + num_steps_wait): try: if t < num_steps_wait: @@ -138,8 +157,6 @@ def evaluate(params, ntrials, seed, video_logdir=None): img = np.ascontiguousarray(obs["agentview_image"][::-1, ::-1]) wrist_img = np.ascontiguousarray(obs["robot0_eye_in_hand_image"][::-1, ::-1]) - replay_images.append(img) - if not action_plan: element = { "observation/image": img, @@ -160,25 +177,32 @@ def evaluate(params, ntrials, seed, video_logdir=None): ), f"We want to replan every {replan_steps} steps, but policy only predicts {len(action_chunk)} steps." action_plan.extend(action_chunk[: replan_steps]) + # store in trajectory list + new_trajectory["image"].append(img) + new_trajectory["wrist_image"].append(wrist_img) + new_trajectory["state"].append(element["observation/state"]) + new_trajectory["action_plan"].append(list(action_plan)) # (?) is this correct + action = action_plan.popleft() obs, reward, done, info = env.step(action.tolist()) if done: success_rate += 1 / ntrials - success = True + new_trajectory['success'] = True break except Exception as e: print(e) # TODO: How to handle solutions that fail to evaluate - return 1e-6, 0, 0 + return 1e-6, 0, 0, None - print(f"\t trial{trial_id}: {'success' if success else 'fail'}") + trajectories.append(new_trajectory) + print(f"\t trial{trial_id}: {'success' if new_trajectory['success'] else 'fail'}") if video_logdir is not None: imageio.mimwrite( - sol_logdir / f"trial{trial_id}_{'success' if success else 'fail'}.mp4", - [np.asarray(x) for x in replay_images], + sol_logdir / f"trial{trial_id}_{'success' if new_trajectory['success'] else 'fail'}.mp4", + [np.asarray(x) for x in new_trajectory["image"]], fps=10, ) @@ -189,17 +213,19 @@ def evaluate(params, ntrials, seed, video_logdir=None): openpi_client._ws.close() - return entropy, spread, similarity + return entropy, spread, similarity, np.array(trajectories) # def evaluate_parallel(client, params, ntrials, seed, video_logdir=None): # objs = [] # meas = [] +# trajs = [] # for sol_id, sol in enumerate(params): -# entropy, spread, similarity = evaluate(sol, ntrials, seed+sol_id, video_logdir) +# entropy, spread, similarity, trajectoris = evaluate(sol, ntrials, seed+sol_id, video_logdir) # objs.append(entropy) # meas.append([spread, similarity]) +# trajs.append(trajectoris) -# return np.asarray(objs), np.asarray(meas) +# return np.array(objs), np.array(meas), np.array(trajs) def evaluate_parallel(client, params, ntrials, seed, video_logdir=None): """Parallelized version of :func:`evaluate`. @@ -217,6 +243,8 @@ def evaluate_parallel(client, params, ntrials, seed, video_logdir=None): VLA's success rates on the environments created from ``params``. measures (np.ndarray): Array of shape (batch_size, measure_dim). Spread and similarity of environments created from ``params``. + trajectories (np.ndarray): Array of shape (batch_size, ntrials). + Rollout trajectories. """ batch_size = params.shape[0] nworkers = len(client.scheduler_info()['workers']) @@ -238,14 +266,15 @@ def evaluate_parallel(client, params, ntrials, seed, video_logdir=None): ] results = client.gather(futures) - objs, meas = [], [] + objs, meas, trajs = [], [], [] # Process the results. - for entropy, spread, similarity in results: + for entropy, spread, similarity, trajectoris in results: objs.append(entropy) meas.append([spread, similarity]) + trajs.append(trajectoris) - return np.asarray(objs), np.asarray(meas) + return np.array(objs), np.array(meas), np.array(trajs) def save_heatmap(archive, heatmap_path): """Saves a heatmap of the archive to the given path. @@ -260,7 +289,6 @@ def save_heatmap(archive, heatmap_path): plt.savefig(heatmap_path) plt.close(plt.gcf()) - def main( iterations=1000, num_trials_per_sol=5, @@ -294,12 +322,18 @@ def main( # learning_rate=0.1, # threshold_min=0, seed=seed, + extra_fields={ + "trajectories": ((num_trials_per_sol,), object) + } ) passive_archive = GridArchive( solution_dim=10, dims=archive_resolution, ranges=[(0, 1)] * 2, seed=seed, + extra_fields={ + "trajectories": ((num_trials_per_sol,), object) + } ) emitters = [ @@ -341,8 +375,8 @@ def main( end = start + iterations for i in range(start, end): solutions = scheduler.ask() - objectives, measures = evaluate_parallel(client=client, params=solutions, ntrials=num_trials_per_sol, seed=seed, video_logdir=None) - scheduler.tell(objectives, measures) + objectives, measures, trajectories = evaluate_parallel(client=client, params=solutions, ntrials=num_trials_per_sol, seed=seed, video_logdir=None) + scheduler.tell(objectives, measures, trajectories=trajectories) print( f"\n------------------ Iteration{i} ------------------\n" From b9e6e14d73f10b7e217a69831fc4f38e299c9c9f Mon Sep 17 00:00:00 2001 From: henry chen Date: Thu, 25 Sep 2025 23:10:30 -0700 Subject: [PATCH 15/17] added finetuning scripts for google robot and libero --- .gitmodules | 3 + convert_google_robot_to_lerobot.py | 74 ++++++++++++++ create_lerobot_ds.py | 106 +++++++++++++++++++++ evaluate_google_robot.py | 84 ++++++++++++++++ qd_spatial.py | 49 +++++----- scripts/compute_norm_stats.py | 16 ++++ src/openpi/policies/google_robot_policy.py | 54 +++++++++++ src/openpi/training/config.py | 63 +++++++++++- third_party/SimplerEnv | 1 + 9 files changed, 424 insertions(+), 26 deletions(-) create mode 100644 convert_google_robot_to_lerobot.py create mode 100644 create_lerobot_ds.py create mode 100644 evaluate_google_robot.py create mode 100644 src/openpi/policies/google_robot_policy.py create mode 160000 third_party/SimplerEnv diff --git a/.gitmodules b/.gitmodules index f2c9fc197e..ebce9d0865 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "third_party/libero"] path = third_party/libero url = https://github.com/szhaovas/LIBERO.git +[submodule "third_party/SimplerEnv"] + path = third_party/SimplerEnv + url = https://github.com/simpler-env/SimplerEnv.git diff --git a/convert_google_robot_to_lerobot.py b/convert_google_robot_to_lerobot.py new file mode 100644 index 0000000000..34e1780c43 --- /dev/null +++ b/convert_google_robot_to_lerobot.py @@ -0,0 +1,74 @@ +import numpy as np +import json + +from pathlib import Path + +from lerobot.common.datasets.lerobot_dataset import HF_LEROBOT_HOME +from lerobot.common.datasets.lerobot_dataset import LeRobotDataset +import tensorflow_datasets as tfds +import tyro + +google_demo_conversion_cfg = { + "repo_id": "hchen/google_robot", + "demo_dir": "./simpler_env_demos/demo_collection/collected_data" +} + +def main(data_cfg): + demo_root_dir = Path(data_cfg["demo_dir"]) + task_dirs = [d for d in demo_root_dir.iterdir() if d.is_dir()] + task_metadata_paths = [d / "metadata.json" for d in task_dirs] + + task_metadata = [json.loads(p.read_text()) for p in task_metadata_paths] + + dataset = LeRobotDataset.create( + repo_id=data_cfg["repo_id"], + robot_type="google_robot", + fps=10, + features={ + "image": { + "dtype": "image", + "shape": (224, 224, 3), + "names": ["height", "width", "channel"] + }, + "state": { + "dtype": "float32", + "shape": (8,), + "names": ["state"], + }, + "actions": { + "dtype": "float32", + "shape": (7,), + "names": ["actions"], + } + }, + image_writer_threads=10, + image_writer_processes=5 + ) + + for single_task_ds in task_metadata: + success_episode_files = ["./simpler_env_demos/demo_collection/" + file for file in single_task_ds["success_episode_files"]] + for i, episode_file in enumerate(success_episode_files): + traj_data = np.load(episode_file) + + traj_images = traj_data["images"] + traj_states = traj_data["states"] + traj_actions = traj_data["actions"] + traj_language = str(traj_data["language"]) + + episode_len = len(traj_images) + + for t in range(episode_len): + dataset.add_frame( + { + "image": traj_images[t], + "state": traj_states[t], + "actions": traj_actions[t], + "task": traj_language + } + ) + + dataset.save_episode() + print(f"Saved trajectory {i} out of {single_task_ds['total_saved_episodes']} for {single_task_ds['environment_name']}") + +if __name__ == "__main__": + main(data_cfg=google_demo_conversion_cfg) \ No newline at end of file diff --git a/create_lerobot_ds.py b/create_lerobot_ds.py new file mode 100644 index 0000000000..0e4b106c04 --- /dev/null +++ b/create_lerobot_ds.py @@ -0,0 +1,106 @@ +""" +Minimal example script for converting a dataset to LeRobot format. + +We use the Libero dataset (stored in RLDS) for this example, but it can be easily +modified for any other data you have saved in a custom format. + +Usage: +uv run examples/libero/convert_libero_data_to_lerobot.py --data_dir /path/to/your/data + +If you want to push your dataset to the Hugging Face Hub, you can use the following command: +uv run examples/libero/convert_libero_data_to_lerobot.py --data_dir /path/to/your/data --push_to_hub + +Note: to run the script, you need to install tensorflow_datasets: +`uv pip install tensorflow tensorflow_datasets` + +You can download the raw Libero datasets from https://huggingface.co/datasets/openvla/modified_libero_rlds +The resulting dataset will get saved to the $HF_LEROBOT_HOME directory. +Running this conversion script will take approximately 30 minutes. +""" + +import shutil + +from lerobot.common.datasets.lerobot_dataset import HF_LEROBOT_HOME +from lerobot.common.datasets.lerobot_dataset import LeRobotDataset +import tensorflow_datasets as tfds +import tyro + +import numpy as np +import pickle + +import os, struct + +def main(scheduler_pkl_path="./test_logs/scheduler_00000010.pkl", + repo_name="hchen/libero"): + # Clean up any existing dataset in the output directory + output_path = HF_LEROBOT_HOME / repo_name + if output_path.exists(): + shutil.rmtree(output_path) + + # Create LeRobot dataset, define features to store + # OpenPi assumes that proprio is stored in `state` and actions in `action` + # LeRobot assumes that dtype of image data is `image` + dataset = LeRobotDataset.create( + repo_id=repo_name, + robot_type="panda", + fps=10, + features={ + "image": { + "dtype": "image", + "shape": (256, 256, 3), + "names": ["height", "width", "channel"], + }, + "wrist_image": { + "dtype": "image", + "shape": (256, 256, 3), + "names": ["height", "width", "channel"], + }, + "state": { + "dtype": "float64", + "shape": (8,), + "names": ["state"], + }, + "actions": { + "dtype": "float64", + "shape": (7,), + "names": ["actions"], + }, + }, + image_writer_threads=10, + image_writer_processes=5, + ) + + with open(scheduler_pkl_path, "rb") as f: + scheduler = pickle.load(f) + + archive = scheduler.archive + all_trajectories = archive.data("trajectories") + + include_failures = True + + for elite_trajectories in all_trajectories: + for traj_id, traj in enumerate(elite_trajectories): + episode_len = np.array(traj["image"]).shape[0] + + if not include_failures and not traj["success"]: + continue + + for step in range(episode_len): + dataset.add_frame( + { + "image": traj["image"][step], + "wrist_image": traj["wrist_image"][step], + "state": traj["state"][step], + "actions": traj["action"][step], + "task": traj["prompt"] + } + ) + + dataset.save_episode() + print(f"Saved trajectory {traj_id}!") + + print(dataset) + +if __name__ == "__main__": + main(scheduler_pkl_path="./test_logs/scheduler_00000010.pkl", + repo_name="hchen/libero") \ No newline at end of file diff --git a/evaluate_google_robot.py b/evaluate_google_robot.py new file mode 100644 index 0000000000..bed94f9566 --- /dev/null +++ b/evaluate_google_robot.py @@ -0,0 +1,84 @@ +import third_party.SimplerEnv.simpler_env as simpler_env +from third_party.SimplerEnv.simpler_env.utils.env.observation_utils import get_image_from_maniskill2_obs_dict +import numpy as np +import imageio +import collections + +import openpi.training.config as config +from openpi.policies import policy_config +from openpi.shared import download +from openpi_client import websocket_client_policy as _websocket_client_policy + +from tqdm import trange, tqdm + +experiment_cfg = { + "env_name": "google_robot_pick_coke_can", + + "max_timesteps": 50, + "ntrials": 5, + "env_seed": 42 +} + +pi_cfg = { + "replan_steps": 5, + "host": "0.0.0.0", + "port": 8000, +} + +def main(experiment_cfg, + pi_cfg): + # load simpler env + env = simpler_env.make(experiment_cfg["env_name"]) + prompt = env.get_language_instruction() + + # load openpi client + client = _websocket_client_policy.WebsocketClientPolicy(pi_cfg["host"], + pi_cfg["port"]) + + for i in trange(experiment_cfg["ntrials"]): + t = 0 + + image_seq = [] + action_plan = collections.deque() + obs, reset_info = env.reset(seed=(experiment_cfg["env_seed"] + i)) + + while t < experiment_cfg["max_timesteps"]: + tcp_pose = np.asarray(obs["extra"]["tcp_pose"], dtype=np.float32) + qpos = np.asarray(obs["agent"]["qpos"], dtype=np.float32) + finger_l, finger_r = qpos[7], qpos[8] + gripper = 0.5 * (finger_l + finger_r) + input_obs = np.concatenate([tcp_pose, [gripper]]) + + image = get_image_from_maniskill2_obs_dict(env, obs) + + if not action_plan: + element = { + "state": input_obs, + "image": image, + "prompt": str(prompt) + } + + action_chunk = client.infer(element)["actions"] + action_plan.extend(action_chunk[: pi_cfg["replan_steps"]]) + + action = action_plan.popleft() + action = np.array(action, dtype=np.float32, copy=True) + + print("ACTION") + print(action) + print("STATE") + print(input_obs) + + obs, reward, done, truncated, info = env.step(action) + + image_seq.append(image) + t += 1 + + imageio.mimwrite( + f"trial_{i}.mp4", + [np.asarray(x) for x in image_seq], + fps=10, + ) + +if __name__ == "__main__": + main(experiment_cfg, pi_cfg) \ No newline at end of file diff --git a/qd_spatial.py b/qd_spatial.py index 15260f9126..4d6de57751 100644 --- a/qd_spatial.py +++ b/qd_spatial.py @@ -20,6 +20,8 @@ from ribs.schedulers import Scheduler from ribs.visualize import grid_archive_heatmap +from tqdm import tqdm, trange + task_5_bddl = ( Path(get_libero_path("bddl_files")) / "custom" @@ -102,7 +104,7 @@ def evaluate(params, ntrials, seed, video_logdir=None): "image": List, "wrist_image": List, "state": List, - "action_plan": List + "action": List } """ np.random.seed(seed) @@ -135,7 +137,7 @@ def evaluate(params, ntrials, seed, video_logdir=None): trajectories = [] # Get success rates by running openpi on env success_rate = 0 - for trial_id in range(ntrials): + for trial_id in trange(ntrials): obs = env.reset() action_plan = collections.deque() @@ -145,8 +147,9 @@ def evaluate(params, ntrials, seed, video_logdir=None): "image": [], "wrist_image": [], "state": [], - "action_plan": [] + "action": [] } + print(f"Evaluating trial {trial_id}") for t in range(max_steps + num_steps_wait): try: if t < num_steps_wait: @@ -177,14 +180,14 @@ def evaluate(params, ntrials, seed, video_logdir=None): ), f"We want to replan every {replan_steps} steps, but policy only predicts {len(action_chunk)} steps." action_plan.extend(action_chunk[: replan_steps]) - # store in trajectory list - new_trajectory["image"].append(img) - new_trajectory["wrist_image"].append(wrist_img) - new_trajectory["state"].append(element["observation/state"]) - new_trajectory["action_plan"].append(list(action_plan)) # (?) is this correct - action = action_plan.popleft() + # store in trajectory list + new_trajectory["image"].append(img) + new_trajectory["wrist_image"].append(wrist_img) + new_trajectory["state"].append(element["observation/state"]) + new_trajectory["action"].append(action) + obs, reward, done, info = env.step(action.tolist()) if done: success_rate += 1 / ntrials @@ -215,18 +218,6 @@ def evaluate(params, ntrials, seed, video_logdir=None): return entropy, spread, similarity, np.array(trajectories) -# def evaluate_parallel(client, params, ntrials, seed, video_logdir=None): -# objs = [] -# meas = [] -# trajs = [] -# for sol_id, sol in enumerate(params): -# entropy, spread, similarity, trajectoris = evaluate(sol, ntrials, seed+sol_id, video_logdir) -# objs.append(entropy) -# meas.append([spread, similarity]) -# trajs.append(trajectoris) - -# return np.array(objs), np.array(meas), np.array(trajs) - def evaluate_parallel(client, params, ntrials, seed, video_logdir=None): """Parallelized version of :func:`evaluate`. @@ -274,7 +265,11 @@ def evaluate_parallel(client, params, ntrials, seed, video_logdir=None): meas.append([spread, similarity]) trajs.append(trajectoris) - return np.array(objs), np.array(meas), np.array(trajs) + print(np.array(objs).shape) + print(np.array(meas).shape) + print(np.array(trajs).shape) + + return np.array(objs), np.array(meas), np.array(trajs, dtype=object) def save_heatmap(archive, heatmap_path): """Saves a heatmap of the archive to the given path. @@ -298,7 +293,7 @@ def main( seed=42, outdir="test_logs", reload_from=None, - log_every=10, + log_every=5 ): logdir = Path(outdir) logdir.mkdir(exist_ok=True) @@ -373,7 +368,7 @@ def main( start = 1 if reload_from is None else reload_itr + 1 end = start + iterations - for i in range(start, end): + for i in trange(start, end): solutions = scheduler.ask() objectives, measures, trajectories = evaluate_parallel(client=client, params=solutions, ntrials=num_trials_per_sol, seed=seed, video_logdir=None) scheduler.tell(objectives, measures, trajectories=trajectories) @@ -388,6 +383,12 @@ def main( final_itr = i == end if i % log_every == 0 or final_itr: + directory = Path(logdir) + + for pkl_file in directory.glob("*.pkl"): + pkl_file.unlink() + print(f"Deleted: {pkl_file}") + pkl.dump( scheduler, open(logdir / f"scheduler_{i:08d}.pkl", "wb"), diff --git a/scripts/compute_norm_stats.py b/scripts/compute_norm_stats.py index 93a59625a8..6859e3e3cd 100644 --- a/scripts/compute_norm_stats.py +++ b/scripts/compute_norm_stats.py @@ -15,6 +15,22 @@ import openpi.training.data_loader as _data_loader import openpi.transforms as transforms +# Monkey-patch to fix 'List' feature type error in old datasets +try: + import datasets.features.features as features + + _OLD_GENERATE_FROM_DICT = features.generate_from_dict + + def _new_generate_from_dict(obj): + if isinstance(obj, dict) and obj.get("_type") == "List": + obj["_type"] = "Sequence" + return _OLD_GENERATE_FROM_DICT(obj) + + features.generate_from_dict = _new_generate_from_dict +except (ImportError, AttributeError): + # If datasets or the function doesn't exist, do nothing. + pass +# End of monkey-patch class RemoveStrings(transforms.DataTransformFn): def __call__(self, x: dict) -> dict: diff --git a/src/openpi/policies/google_robot_policy.py b/src/openpi/policies/google_robot_policy.py new file mode 100644 index 0000000000..f79d45ec37 --- /dev/null +++ b/src/openpi/policies/google_robot_policy.py @@ -0,0 +1,54 @@ +import dataclasses + +import einops +import numpy as np + +from openpi import transforms +from openpi.models import model as _model + +def _parse_image(image) -> np.ndarray: + image = np.asarray(image) + if np.issubdtype(image.dtype, np.floating): + image = (255 * image).astype(np.uint8) + if image.shape[0] == 3: + image = einops.rearrange(image, "c h w -> h w c") + return image + +@dataclasses.dataclass(frozen=True) +class GoogleRobotInputs(transforms.DataTransformFn): + action_dim: int + model_type: _model.ModelType = _model.ModelType.PI0 + + def __call__(self, data: dict) -> dict: + # state = np.concatenate([data["joints_qpos"], data["gripper_qpos"]]) + state = transforms.pad_to_dim(data["state"], self.action_dim) + + base_image = _parse_image(data["image"]) + + inputs = { + "state": state, + "image": { + "base_0_rgb": base_image, + "left_wrist_0_rgb": np.zeros_like(base_image), + "right_wrist_0_rgb": np.zeros_like(base_image) + }, + "image_mask": { + "base_0_rgb": np.True_, + "left_wrist_0_rgb": np.False_, + "right_wrist_0_rgb": np.False_ + }, + } + + if "actions" in data: + actions = transforms.pad_to_dim(data["actions"], self.action_dim) + inputs["actions"] = actions + + if "prompt" in data: + inputs["prompt"] = data["prompt"] + + return inputs + +@dataclasses.dataclass(frozen=True) +class GoogleRobotOutputs(transforms.DataTransformFn): + def __call__(self, data: dict) -> dict: + return {"actions": np.asarray(data["actions"][:, :7])} \ No newline at end of file diff --git a/src/openpi/training/config.py b/src/openpi/training/config.py index 19ce34ee3c..0cd01b3dee 100644 --- a/src/openpi/training/config.py +++ b/src/openpi/training/config.py @@ -20,6 +20,7 @@ import openpi.policies.aloha_policy as aloha_policy import openpi.policies.droid_policy as droid_policy import openpi.policies.libero_policy as libero_policy +import openpi.policies.google_robot_policy as google_robot_policy import openpi.shared.download as _download import openpi.shared.normalize as _normalize import openpi.training.droid_rlds_dataset as droid_rlds_dataset @@ -389,6 +390,44 @@ def create(self, assets_dirs: pathlib.Path, model_config: _model.BaseModelConfig ) +@dataclasses.dataclass(frozen=True) +class LeRobotGoogleRobotDataConfig(DataConfigFactory): + @override + def create(self, assets_dirs: pathlib.Path, model_config: _model.BaseModelConfig) -> DataConfig: + repack_transform = _transforms.Group( + inputs=[ + _transforms.RepackTransform( + { + "state": "state", + "image": "image", + "actions": "actions", + "prompt": "prompt" + } + ) + ] + ) + + data_transforms = _transforms.Group( + inputs=[google_robot_policy.GoogleRobotInputs(action_dim=model_config.action_dim, model_type=model_config.model_type)], + outputs=[google_robot_policy.GoogleRobotOutputs()] + ) + + delta_action_map = _transforms.make_bool_mask(6, -1) + data_transforms = data_transforms.push( + inputs=[_transforms.DeltaActions(delta_action_map)], + outputs=[_transforms.AbsoluteActions(delta_action_map)] + ) + + model_transforms = ModelTransformFactory()(model_config) + + return dataclasses.replace( + self.create_base_config(assets_dirs, model_config), + repack_transforms=repack_transform, + data_transforms=data_transforms, + model_transforms=model_transforms + ) + + @dataclasses.dataclass(frozen=True) class TrainConfig: # Name of the config. Must be unique. Will be used to reference this config. @@ -622,10 +661,10 @@ def __post_init__(self) -> None: action_dim=7, action_horizon=10, max_token_len=180, paligemma_variant="gemma_2b_lora" ), data=LeRobotLiberoDataConfig( - repo_id="physical-intelligence/libero", + repo_id="hchen/libero", base_config=DataConfig(prompt_from_task=True), ), - weight_loader=weight_loaders.CheckpointWeightLoader("gs://openpi-assets/checkpoints/pi0_fast_base/params"), + weight_loader=weight_loaders.CheckpointWeightLoader("gs://openpi-assets/checkpoints/pi0_fast_libero/params"), num_train_steps=30_000, # Again, make sure to match the model config above when extracting the freeze filter # that specifies which parameters should be frozen during LoRA finetuning. @@ -714,6 +753,26 @@ def __post_init__(self) -> None: num_train_steps=20_000, ), # + # Fine-tuning Google Robot configs + # + TrainConfig( + name="pi0_google_robot_low_mem_finetune", + model=pi0.Pi0Config(paligemma_variant="gemma_2b_lora", action_expert_variant="gemma_300m_lora"), + data=LeRobotGoogleRobotDataConfig( + repo_id="hchen/google_robot", + base_config=DataConfig( + prompt_from_task=True + ) + ), + weight_loader=weight_loaders.CheckpointWeightLoader("gs://openpi-assets/checkpoints/pi0_base/params"), + num_train_steps=30_000, + save_interval=1000, + freeze_filter=pi0.Pi0Config( + paligemma_variant="gemma_2b_lora", action_expert_variant="gemma_300m_lora" + ).get_freeze_filter(), + ema_decay=None, + ), + # # Debugging configs. # TrainConfig( diff --git a/third_party/SimplerEnv b/third_party/SimplerEnv new file mode 160000 index 0000000000..4ab7178e83 --- /dev/null +++ b/third_party/SimplerEnv @@ -0,0 +1 @@ +Subproject commit 4ab7178e83e84ee06894034ec6dbf9e7aad1e882 From 5a84f239864347568cbd7d9094daf09a638cef07 Mon Sep 17 00:00:00 2001 From: henry chen Date: Thu, 9 Oct 2025 04:15:43 -0700 Subject: [PATCH 16/17] evaluating finetuned model on libero --- evaluate_libero_env.py | 218 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 218 insertions(+) create mode 100644 evaluate_libero_env.py diff --git a/evaluate_libero_env.py b/evaluate_libero_env.py new file mode 100644 index 0000000000..6373015659 --- /dev/null +++ b/evaluate_libero_env.py @@ -0,0 +1,218 @@ +import collections +import csv +import datetime +import math +import pickle as pkl +import re +from functools import partial +from pathlib import Path + +import fire +import imageio +import matplotlib.pyplot as plt +import numpy as np +from dask.distributed import Client, LocalCluster +from libero.libero import get_libero_path +from libero.libero.envs import OffScreenRenderEnv +from openpi_client import websocket_client_policy as _websocket_client_policy +from ribs.archives import GridArchive +from ribs.emitters import EvolutionStrategyEmitter +from ribs.schedulers import Scheduler +from ribs.visualize import grid_archive_heatmap + +from tqdm import tqdm, trange + +task_5_bddl = ( + Path(get_libero_path("bddl_files")) + / "custom" + / "pick_up_the_black_bowl_next_to_the_ramekin_and_place_it_on_the_plate.bddl" +) + +TASK_ENV = partial( + OffScreenRenderEnv, + bddl_file_name=task_5_bddl, + camera_heights=256, + camera_widths=256, +) + +max_steps = 220 +num_steps_wait = 10 +host = "0.0.0.0" +port = 8000 +replan_steps = 5 + +def _quat2axisangle(quat): + """ + Copied from robosuite: https://github.com/ARISE-Initiative/robosuite/blob/eafb81f54ffc104f905ee48a16bb15f059176ad3/robosuite/utils/transform_utils.py#L490C1-L512C55 + """ + # clip quaternion + if quat[3] > 1.0: + quat[3] = 1.0 + elif quat[3] < -1.0: + quat[3] = -1.0 + + den = np.sqrt(1.0 - quat[3] * quat[3]) + if math.isclose(den, 0.0): + # This is (close to) a zero degree rotation, immediately return + return np.zeros(3) + + return (quat[:3] * 2.0 * math.acos(quat[3])) / den + +def extract_env_solutions(scheduler_pkl): + with open(scheduler_pkl, "rb") as f: + scheduler = pkl.load(f) + + archive = scheduler.archive + params = archive.data(fields="solution") + return params + +def evaluate(params, ntrials, seed, video_logdir=None, sol_id=0, summary_file=None): + np.random.seed(seed) + openpi_client = _websocket_client_policy.WebsocketClientPolicy(host, port) + + env = TASK_ENV( + params=params, + repair_env=True, + repair_config={ + 'time_limit':1500, + 'seed':seed + } + ) + + env.seed(seed) + obs = env.reset() + if obs is None: + # TODO: How to handle solutions that fail to evaluate + return 1e-6, 0, 0, None + + if video_logdir is not None: + # ID each sol with datetime to prevent overwriting + sol_logdir = Path(video_logdir) / f"{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}" + sol_logdir.mkdir(parents=True) + + success_rate = 0 + for trial_id in trange(ntrials): + obs = env.reset() + action_plan = collections.deque() + + success = False + for t in trange(max_steps + num_steps_wait): + try: + if t < num_steps_wait: + # Do nothing at the start to wait for env to settle + obs, reward, done, info = env.step([0.0] * 6 + [-1.0]) + continue + + img = np.ascontiguousarray(obs["agentview_image"][::-1, ::-1]) + wrist_img = np.ascontiguousarray(obs["robot0_eye_in_hand_image"][::-1, ::-1]) + + if not action_plan: + element = { + "observation/image": img, + "observation/wrist_image": wrist_img, + "observation/state": np.concatenate( + ( + obs["robot0_eef_pos"], + _quat2axisangle(obs["robot0_eef_quat"]), + obs["robot0_gripper_qpos"], + ) + ), + "prompt": env.language_instruction, + } + + action_chunk = openpi_client.infer(element)["actions"] + assert ( + len(action_chunk) >= replan_steps + ), f"We want to replan every {replan_steps} steps, but policy only predicts {len(action_chunk)} steps." + action_plan.extend(action_chunk[: replan_steps]) + + action = action_plan.popleft() + obs, reward, done, info = env.step(action.tolist()) + if done: + success_rate += 1 / ntrials + success = True + break + except Exception as e: + print(e) + # TODO: How to handle solutions that fail to evaluate + return 1e-6, 0, 0, None + + # print(f"\t trial{trial_id}: {'success' if success else 'fail'}") + + if video_logdir is not None: + imageio.mimwrite( + sol_logdir / f"trial{trial_id}_{'success' if success else 'fail'}.mp4", + fps=10, + ) + + with open(summary_file, "w") as summary_file: + writer = csv.writer(summary_file) + writer.writerow([sol_id, success_rate]) + + return success_rate + +def evaluate_parallel(client, params, ntrials, seed, video_logdir=None, summary_file=None): + batch_size = 16 + nworkers = len(client.scheduler_info()['workers']) + assert nworkers >= batch_size, ( + f"batch_size={batch_size} exceeds the number of workers " + f"{nworkers}" + ) + + futures = [ + client.submit( + evaluate, + params=sol, + ntrials=ntrials, + seed=seed+sol_id, + video_logdir=video_logdir, + sol_id=sol_id, + summary_file=summary_file, + pure=False, + ) + for sol_id, sol in enumerate(params) + ] + results = client.gather(futures) + + success_rates = [] + + for success_rate in results: + success_rates.append(success_rate) + + return success_rates + +def main( + experiment_cfg +): + logdir = Path(experiment_cfg["outdir"]) + logdir.mkdir(exist_ok=True) + summary_filename = logdir / "summary.csv" + + with open(summary_filename, "w") as summary_file: + writer = csv.writer(summary_file) + writer.writerow(["env_num", "success_rate"]) + + params = extract_env_solutions(experiment_cfg["scheduler_pkl"]) + + cluster = LocalCluster( + processes=True, + n_workers=16, + threads_per_worker=1, + ) + client = Client(cluster) + + success_rates = evaluate_parallel(client=client, + params=params, + ntrials=experiment_cfg["ntrials"], + seed=experiment_cfg["seed"], + summary_file=summary_filename) + +experiment_cfg = { + "outdir": "eval_logs", + "scheduler_pkl": "./test_logs/scheduler_00000105.pkl", + "ntrials": 5, + "seed": 42 +} + +if __name__ == "__main__": + main(experiment_cfg) \ No newline at end of file From 078161b3f51e073612b7221637c5ae903d413e85 Mon Sep 17 00:00:00 2001 From: henry chen Date: Wed, 29 Oct 2025 14:58:56 -0700 Subject: [PATCH 17/17] libero evaluation plotting code --- eval_base_libero_logs/summary.csv | 51 +++++ eval_finetuned_libero_logs/summary.csv | 51 +++++ eval_finetuned_random_logs/summary.csv | 225 ++++++++++++++++++++ eval_random_logs/summary.csv | 51 +++++ evaluate_libero_env.py | 282 ++++++++++++++++++------- plot_eval.py | 155 ++++++++++++++ 6 files changed, 743 insertions(+), 72 deletions(-) create mode 100644 eval_base_libero_logs/summary.csv create mode 100644 eval_finetuned_libero_logs/summary.csv create mode 100644 eval_finetuned_random_logs/summary.csv create mode 100644 eval_random_logs/summary.csv create mode 100644 plot_eval.py diff --git a/eval_base_libero_logs/summary.csv b/eval_base_libero_logs/summary.csv new file mode 100644 index 0000000000..19d7a3b0df --- /dev/null +++ b/eval_base_libero_logs/summary.csv @@ -0,0 +1,51 @@ +env_num,success_rate +0,1.0 +1,1.0 +2,1.0 +3,1.0 +4,0.8 +5,1.0 +6,1.0 +7,1.0 +8,1.0 +9,1.0 +10,1.0 +11,1.0 +12,1.0 +13,1.0 +14,1.0 +15,1.0 +16,1.0 +17,1.0 +18,1.0 +19,1.0 +20,1.0 +21,0.8 +22,1.0 +23,1.0 +24,1.0 +25,1.0 +26,1.0 +27,1.0 +28,1.0 +29,1.0 +30,0.8 +31,1.0 +32,1.0 +33,1.0 +34,0.8 +35,1.0 +36,1.0 +37,1.0 +38,0.8 +39,1.0 +40,1.0 +41,1.0 +42,0.8 +43,1.0 +44,1.0 +45,1.0 +46,1.0 +47,0.8 +48,1.0 +49,1.0 diff --git a/eval_finetuned_libero_logs/summary.csv b/eval_finetuned_libero_logs/summary.csv new file mode 100644 index 0000000000..3f84a41231 --- /dev/null +++ b/eval_finetuned_libero_logs/summary.csv @@ -0,0 +1,51 @@ +env_num,success_rate +0,1.0 +1,1.0 +2,1.0 +3,1.0 +4,1.0 +5,1.0 +6,1.0 +7,0.8 +8,1.0 +9,0.8 +10,1.0 +11,1.0 +12,1.0 +13,0.8 +14,1.0 +15,1.0 +16,0.8 +17,1.0 +18,1.0 +19,0.8 +20,1.0 +21,0.8 +22,1.0 +23,0.8 +24,1.0 +25,1.0 +26,1.0 +27,1.0 +28,1.0 +29,1.0 +30,1.0 +31,1.0 +32,0.8 +33,1.0 +34,1.0 +35,1.0 +36,1.0 +37,1.0 +38,1.0 +39,1.0 +40,1.0 +41,0.8 +42,0.8 +43,1.0 +44,1.0 +45,1.0 +46,1.0 +47,1.0 +48,0.8 +49,1.0 diff --git a/eval_finetuned_random_logs/summary.csv b/eval_finetuned_random_logs/summary.csv new file mode 100644 index 0000000000..d4790cce13 --- /dev/null +++ b/eval_finetuned_random_logs/summary.csv @@ -0,0 +1,225 @@ +env_num,success_rate +0,0 +1,0 +2,0 +3,0 +4,0 +5,0 +6,0 +7,0 +8,0 +9,0 +10,0 +11,0 +12,0 +13,0 +14,0 +15,0 +16,0 +17,0 +18,0 +19,0 +20,0 +21,0 +22,0 +23,0 +24,0 +25,0 +26,0 +27,0 +28,0 +29,0 +30,0 +31,0 +32,0 +33,0 +34,0 +35,0 +36,0 +37,0 +38,0 +39,0 +40,0 +41,0 +42,0 +43,0 +44,0 +45,0 +46,0 +47,0 +48,0 +49,0 +50,0 +51,0 +52,0 +53,0 +54,0 +55,0 +56,0 +57,0 +58,0 +59,0 +60,0 +61,0 +62,0 +63,0 +64,0 +65,0 +66,0 +67,0 +68,0 +69,0 +70,0 +71,0 +72,0 +73,0 +74,0 +75,0 +76,0 +77,0 +78,0 +79,0 +80,0 +81,0 +82,0.4 +83,0 +84,0 +85,0 +86,0 +87,0 +88,0 +89,0 +90,0 +91,0 +92,0 +93,0 +94,0 +95,0 +96,0 +97,0 +98,0 +99,0 +100,0 +101,0 +102,0 +103,0 +104,0 +105,0 +106,0 +107,0 +108,0 +109,0 +110,0 +111,0 +112,0 +113,0 +114,0 +115,0 +116,0 +117,0 +118,0 +119,0 +120,0 +121,0 +122,0 +123,0 +124,0 +125,0 +126,0 +127,0 +128,0 +129,0 +130,0 +131,0 +132,0 +133,0 +134,0 +135,0 +136,0 +137,0 +138,0 +139,0 +140,0 +141,0 +142,0 +143,0 +144,0 +145,0 +146,0 +147,0 +148,0 +149,0 +150,0 +151,0 +152,0 +153,0 +154,0 +155,0 +156,0 +157,0 +158,0 +159,0 +160,0 +161,0 +162,0 +163,0 +164,0 +165,0 +166,0 +167,0 +168,0 +169,0 +170,0 +171,0 +172,0 +173,0 +174,0 +175,0 +176,0 +177,0 +178,0 +179,0 +180,0 +181,0 +182,0 +183,0 +184,0 +185,0 +186,0 +187,0 +188,0 +189,0 +190,0 +191,0 +192,0 +193,0 +194,0 +195,0 +196,0 +197,0 +198,0 +199,0 +200,0 +201,0 +202,0.4 +203,0 +204,0 +205,0 +206,0 +207,0 +208,0 +209,0 +210,0 +211,0 +212,0 +213,0 +214,0 +215,0 +216,0 +217,0 +218,0 +219,0 +220,0 +221,0 +222,0 +223,0 diff --git a/eval_random_logs/summary.csv b/eval_random_logs/summary.csv new file mode 100644 index 0000000000..62fb5383ad --- /dev/null +++ b/eval_random_logs/summary.csv @@ -0,0 +1,51 @@ +env_num,success_rate +0,0 +1,0 +2,0.2 +3,0 +4,0 +5,0 +6,0 +7,0 +8,0 +9,0 +10,0 +11,0 +12,0 +13,0 +14,0 +15,0 +16,0 +17,0 +18,0 +19,0 +20,0 +21,0 +22,0 +23,0 +24,0 +25,0 +26,0 +27,0 +28,0 +29,0 +30,0 +31,0 +32,0 +33,0 +34,0 +35,0 +36,0 +37,0 +38,0 +39,0 +40,0 +41,0 +42,0 +43,0 +44,0 +45,0 +46,0 +47,0 +48,0 +49,"(1e-06, 0, 0, None)" diff --git a/evaluate_libero_env.py b/evaluate_libero_env.py index 6373015659..8da3109493 100644 --- a/evaluate_libero_env.py +++ b/evaluate_libero_env.py @@ -9,16 +9,13 @@ import fire import imageio -import matplotlib.pyplot as plt import numpy as np -from dask.distributed import Client, LocalCluster + +from libero.libero import benchmark from libero.libero import get_libero_path from libero.libero.envs import OffScreenRenderEnv + from openpi_client import websocket_client_policy as _websocket_client_policy -from ribs.archives import GridArchive -from ribs.emitters import EvolutionStrategyEmitter -from ribs.schedulers import Scheduler -from ribs.visualize import grid_archive_heatmap from tqdm import tqdm, trange @@ -35,12 +32,6 @@ camera_widths=256, ) -max_steps = 220 -num_steps_wait = 10 -host = "0.0.0.0" -port = 8000 -replan_steps = 5 - def _quat2axisangle(quat): """ Copied from robosuite: https://github.com/ARISE-Initiative/robosuite/blob/eafb81f54ffc104f905ee48a16bb15f059176ad3/robosuite/utils/transform_utils.py#L490C1-L512C55 @@ -66,7 +57,113 @@ def extract_env_solutions(scheduler_pkl): params = archive.data(fields="solution") return params -def evaluate(params, ntrials, seed, video_logdir=None, sol_id=0, summary_file=None): +def evaluate_libero_base(host, + port, + ntrials, + max_steps, + num_steps_wait, + replan_steps, + seed): + # setting up libero + benchmark_dict = benchmark.get_benchmark_dict() + task_suite = benchmark_dict["libero_spatial"]() + + task_id = -1 + for i in range(10): + task = task_suite.get_task(i) + if task.language == "pick up the black bowl next to the ramekin and place it on the plate": + task_id = i + break + + initial_states = task_suite.get_task_init_states(task_id) + task = task_suite.get_task(task_id) + task_description = task.language + + print(task_description) + + task_bddl_file = Path(get_libero_path("bddl_files")) / task.problem_folder / task.bddl_file + env_args = {"bddl_file_name": task_bddl_file, "camera_heights": 256, "camera_widths": 256} + + env = OffScreenRenderEnv(**env_args) + env.seed(seed) + + # setting up openpi + client = _websocket_client_policy.WebsocketClientPolicy(host, port) + + success_rate = 0 + for episode_idx in trange(ntrials): + # Reset environment + env.reset() + action_plan = collections.deque() + + # Set initial states + if initial_states is None: + obs = env.env._get_observations() + else: + obs = env.set_init_state(initial_states[episode_idx]) + + success = False + t = 0 + while t < max_steps + num_steps_wait: + try: + if t < num_steps_wait: + obs, reward, done, info = env.step([0.0] * 6 + [-1.0]) + t += 1 + continue + + # Get preprocessed image + # IMPORTANT: rotate 180 degrees to match train preprocessing + img = np.ascontiguousarray(obs["agentview_image"][::-1, ::-1]) + wrist_img = np.ascontiguousarray(obs["robot0_eye_in_hand_image"][::-1, ::-1]) + + if not action_plan: + # Finished executing previous action chunk -- compute new chunk + # Prepare observations dict + element = { + "observation/image": img, + "observation/wrist_image": wrist_img, + "observation/state": np.concatenate( + ( + obs["robot0_eef_pos"], + _quat2axisangle(obs["robot0_eef_quat"]), + obs["robot0_gripper_qpos"], + ) + ), + "prompt": env.language_instruction, + } + + # Query model to get action + action_chunk = client.infer(element)["actions"] + assert ( + len(action_chunk) >= replan_steps + ), f"We want to replan every {replan_steps} steps, but policy only predicts {len(action_chunk)} steps." + action_plan.extend(action_chunk[: replan_steps]) + + action = action_plan.popleft() + + # Execute action in environment + obs, reward, done, info = env.step(action.tolist()) + if done: + success_rate += 1 / ntrials + success = True + break + t += 1 + + except Exception as e: + break + + return success_rate + + +def evaluate(params, + host, + port, + ntrials, + max_steps, + num_steps_wait, + replan_steps, + seed, + video_logdir=None): np.random.seed(seed) openpi_client = _websocket_client_policy.WebsocketClientPolicy(host, port) @@ -80,13 +177,12 @@ def evaluate(params, ntrials, seed, video_logdir=None, sol_id=0, summary_file=No ) env.seed(seed) - obs = env.reset() + obs = env.reset() + if obs is None: - # TODO: How to handle solutions that fail to evaluate return 1e-6, 0, 0, None if video_logdir is not None: - # ID each sol with datetime to prevent overwriting sol_logdir = Path(video_logdir) / f"{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}" sol_logdir.mkdir(parents=True) @@ -96,6 +192,7 @@ def evaluate(params, ntrials, seed, video_logdir=None, sol_id=0, summary_file=No action_plan = collections.deque() success = False + images = [] for t in trange(max_steps + num_steps_wait): try: if t < num_steps_wait: @@ -104,6 +201,7 @@ def evaluate(params, ntrials, seed, video_logdir=None, sol_id=0, summary_file=No continue img = np.ascontiguousarray(obs["agentview_image"][::-1, ::-1]) + images.append(img) wrist_img = np.ascontiguousarray(obs["robot0_eye_in_hand_image"][::-1, ::-1]) if not action_plan: @@ -136,55 +234,82 @@ def evaluate(params, ntrials, seed, video_logdir=None, sol_id=0, summary_file=No print(e) # TODO: How to handle solutions that fail to evaluate return 1e-6, 0, 0, None - - # print(f"\t trial{trial_id}: {'success' if success else 'fail'}") if video_logdir is not None: imageio.mimwrite( sol_logdir / f"trial{trial_id}_{'success' if success else 'fail'}.mp4", + images, fps=10, ) - - with open(summary_file, "w") as summary_file: - writer = csv.writer(summary_file) - writer.writerow([sol_id, success_rate]) - return success_rate - -def evaluate_parallel(client, params, ntrials, seed, video_logdir=None, summary_file=None): - batch_size = 16 - nworkers = len(client.scheduler_info()['workers']) - assert nworkers >= batch_size, ( - f"batch_size={batch_size} exceeds the number of workers " - f"{nworkers}" - ) + return success_rate - futures = [ - client.submit( - evaluate, - params=sol, - ntrials=ntrials, - seed=seed+sol_id, - video_logdir=video_logdir, - sol_id=sol_id, - summary_file=summary_file, - pure=False, - ) - for sol_id, sol in enumerate(params) +def main( + experiment_cfg_name +): + experiment_configs = [ + { + "name": "pi0_libero_base", + "outdir": "eval_base_libero_logs", + "scheduler_pkl": "./test_logs/scheduler_00000105.pkl", + "finetune_true": False, + "ntrials": 5, + "seed": 42, + "max_steps": 220, + "num_steps_wait": 10, + "host": "0.0.0.0", + "port": 8000, + "replan_steps": 5 + }, + { + "name": "pi0_libero_finetuned", + "outdir": "eval_finetuned_libero_logs", + "scheduler_pkl": "./test_logs/scheduler_00000105.pkl", + "finetune_true": False, + "ntrials": 5, + "seed": 42, + "max_steps": 220, + "num_steps_wait": 10, + "host": "0.0.0.0", + "port": 8001, + "replan_steps": 5 + }, + { + "name": "pi0_qd_random_base", + "outdir": "eval_random_logs", + + "scheduler_pkl": "./test_logs_random/scheduler_00000080.pkl", + "finetune_true": False, + "ntrials": 5, + "seed": 42, + "max_steps": 220, + "num_steps_wait": 10, + "host": "0.0.0.0", + "port": 8002, + "replan_steps": 5 + }, + { + "name": "pi0_qd_random_finetuned", + "outdir": "eval_finetuned_random_logs", + "scheduler_pkl": "./test_logs_random/scheduler_00000080.pkl", + "finetune_true": False, + "ntrials": 5, + "seed": 42, + "max_steps": 220, + "num_steps_wait": 10, + "host": "0.0.0.0", + "port": 8003, + "replan_steps": 5 + } ] - results = client.gather(futures) - success_rates = [] - - for success_rate in results: - success_rates.append(success_rate) - - return success_rates + for cfg in experiment_configs: + if cfg["name"] == experiment_cfg_name: + experiment_cfg = cfg + break -def main( - experiment_cfg -): logdir = Path(experiment_cfg["outdir"]) + logdir.mkdir(exist_ok=True) summary_filename = logdir / "summary.csv" @@ -192,27 +317,40 @@ def main( writer = csv.writer(summary_file) writer.writerow(["env_num", "success_rate"]) - params = extract_env_solutions(experiment_cfg["scheduler_pkl"]) + params = None + if "qd" in experiment_cfg["name"]: + params = extract_env_solutions(experiment_cfg["scheduler_pkl"]) - cluster = LocalCluster( - processes=True, - n_workers=16, - threads_per_worker=1, - ) - client = Client(cluster) + if params is not None: + for sol_id, sol in enumerate(params): + success_rate = evaluate(params=sol, + host=experiment_cfg["host"], + port=experiment_cfg["port"], + ntrials=experiment_cfg["ntrials"], + max_steps=experiment_cfg["max_steps"], + num_steps_wait=experiment_cfg["num_steps_wait"], + replan_steps=experiment_cfg["replan_steps"], + seed=experiment_cfg["seed"]+sol_id, + video_logdir="./vids") - success_rates = evaluate_parallel(client=client, - params=params, - ntrials=experiment_cfg["ntrials"], - seed=experiment_cfg["seed"], - summary_file=summary_filename) + with open(summary_filename, "a", newline="", encoding="utf-8") as f: + writer = csv.writer(f) + writer.writerow([sol_id, success_rate]) + else: + for sol_id in np.arange(50): + success_rate = evaluate_libero_base(host=experiment_cfg["host"], + port=experiment_cfg["port"], + ntrials=experiment_cfg["ntrials"], + max_steps=experiment_cfg["max_steps"], + num_steps_wait=experiment_cfg["num_steps_wait"], + replan_steps=experiment_cfg["replan_steps"], + seed=experiment_cfg["seed"]+sol_id) -experiment_cfg = { - "outdir": "eval_logs", - "scheduler_pkl": "./test_logs/scheduler_00000105.pkl", - "ntrials": 5, - "seed": 42 -} + with open(summary_filename, "a", newline="", encoding="utf-8") as f: + writer = csv.writer(f) + writer.writerow([sol_id, success_rate]) if __name__ == "__main__": - main(experiment_cfg) \ No newline at end of file + # python evaluate_libero_env.py --experiment_cfg_name="pi0_libero_finetuned" + + fire.Fire(main) \ No newline at end of file diff --git a/plot_eval.py b/plot_eval.py new file mode 100644 index 0000000000..53274c7ec2 --- /dev/null +++ b/plot_eval.py @@ -0,0 +1,155 @@ +import pandas as pd +import numpy as np + +from matplotlib import pyplot as plt +import pickle + +from tqdm import trange, tqdm + +def graph_and_value(finetuned_csv, + base_csv): + finetuned_df = pd.read_csv(finetuned_csv) + base_df = pd.read_csv(base_csv) + + finetuned_sr = finetuned_df["success_rate"] + base_sr = base_df["success_rate"] + + # Use the smaller dataset length for comparison + less_n = min(len(base_sr), len(finetuned_sr)) + + finetuned_avg = np.mean(finetuned_sr[:less_n]) + base_avg = np.mean(base_sr[:less_n]) + + print(f"finetuned avg: {finetuned_avg}") + print(f"base avg: {base_avg}") + + # Create a wider figure for a stretched x-axis + plt.figure(figsize=(14, 5)) + + x = np.arange(less_n) # environment numbers 0..299 + width = 1.5 # make bars thicker (0.8 of the bin width) + + # Plot base first, then finetuned on top + plt.bar( + x, + base_sr[:less_n], + width, + color="steelblue", + alpha=0.6, + label="Base", + edgecolor=None + ) + plt.bar( + x, + finetuned_sr[:less_n], + width, + color="darkorange", + alpha=0.6, + label="Finetuned", + edgecolor=None + ) + + plt.xlabel("Environment Number") + plt.ylabel("Success Rate") + plt.title("Finetuned vs Base Success Rates per Environment (Overlaid Bars)") + plt.legend() + plt.grid(True, linestyle="--", alpha=0.6, axis="y") + + # Adjust spacing and save + plt.tight_layout() + plt.savefig("comparison_all.png", dpi=300) + plt.close() + +def train_stats(sched_pkl="./test_logs_legacy/scheduler_00000010.pkl"): + with open(sched_pkl, "rb") as f: + scheduler = pickle.load(f) + + archive = scheduler.archive + + all_traj = archive.data("solution") + print(len(all_traj)) + +def extract_unseen(finetune_sched_pkl="./test_logs_legacy/scheduler_00000010.pkl", + sched_pkl="./test_logs/scheduler_00000105.pkl"): + with open(finetune_sched_pkl, "rb") as f: + training_scheduler = pickle.load(f) + + with open(sched_pkl, "rb") as f: + eval_scheduler = pickle.load(f) + + training_params = training_scheduler.archive.data("solution") + eval_params = eval_scheduler.archive.data("solution") + + sol_id_to_keep = [] + for sol_id, sol in tqdm(enumerate(training_params)): + # print(sol) + # print(eval_params[sol_id]) + if not np.array_equal(sol, eval_params[sol_id]): + sol_id_to_keep.append(sol_id) + + return sol_id_to_keep + +def graph_and_value_unseen(finetuned_csv, + base_csv, + to_keep_sol_ids): + finetuned_df = pd.read_csv(finetuned_csv) + base_df = pd.read_csv(base_csv) + + old_finetuned_sr = np.array(finetuned_df["success_rate"]) + old_base_sr = np.array(base_df["success_rate"]) + + finetuned_sr = old_finetuned_sr[to_keep_sol_ids] + base_sr = old_base_sr[to_keep_sol_ids] + + # Use the smaller dataset length for comparison + less_n = min(len(base_sr), len(finetuned_sr)) + + finetuned_avg = np.mean(finetuned_sr[:less_n]) + base_avg = np.mean(base_sr[:less_n]) + + print(f"finetuned avg: {finetuned_avg}") + print(f"base avg: {base_avg}") + + # Create a wider figure for a stretched x-axis + plt.figure(figsize=(14, 5)) + + x = np.arange(less_n) # environment numbers 0..299 + width = 1.5 # make bars thicker (0.8 of the bin width) + + # Plot base first, then finetuned on top + plt.bar( + x, + base_sr[:less_n], + width, + color="steelblue", + alpha=0.6, + label="Base", + edgecolor=None + ) + plt.bar( + x, + finetuned_sr[:less_n], + width, + color="darkorange", + alpha=0.6, + label="Finetuned", + edgecolor=None + ) + + plt.xlabel("Environment Number") + plt.ylabel("Success Rate") + plt.title("Finetuned vs Base Success Rates per Environment (Overlaid Bars)") + plt.legend() + plt.grid(True, linestyle="--", alpha=0.6, axis="y") + + # Adjust spacing and save + plt.tight_layout() + plt.savefig("comparison_unseen.png", dpi=300) + plt.close() + +# graph_and_value_unseen("./qd/eval_logs_finetuned/summary.csv", +# "./qd/eval_logs_base/summary.csv", +# sol_id_to_keep) + +graph_and_value("./eval_base_libero_logs/summary.csv", + "./eval_finetuned_libero_logs/summary.csv") \ No newline at end of file