rahul-ai-01/groot_n1.7_inference_on_diff_data
GROOT Inference Analysis Log Evaluation records for a GR00T policy trained on the task "pick octopus and place inside brown basket", run on a Unitree G1 at 20 Hz with the ego_view stereo camera. Six training checkpoints (50, 100, 150, 200, 250, 300 demonstration episodes) were each evaluated on 50 inference episodes. Every episode is recorded here with video, per-tick state/action logs and run metadata. Success rate Checkpoint (training episodes) Success… See the full description on the dataset page: https://huggingface.co/datasets/rahul-ai-01/groot_n1.7_inference_on_diff_data.
07.3k
1#!/usr/bin/env python32"""Plot GROOT checkpoint success rate across the 50 -> 300 episode training runs.3 4Source of truth: notes.txt inside each *_inference_recordings/ directory.5Run: ./venv/bin/python plot_success_rate.py6"""7import matplotlib8matplotlib.use("Agg")9import matplotlib.pyplot as plt10 11# checkpoint (training episodes) -> failed evaluation episode ids, out of 50 runs12RESULTS = {13 50: [3, 32, 36],14 100: [8, 19],15 150: [],16 200: [5, 8],17 250: [14],18 300: [],19}20EPISODES_PER_EVAL = 5021 22# --- palette (light surface) ---23SURFACE = "#fcfcfb"24INK = "#0b0b0b"25SECONDARY = "#52514e"26MUTED = "#898781"27GRID = "#e1e0d9"28AXIS = "#c3c2b7"29SERIES = "#2a78d6"30 31ckpts = sorted(RESULTS)32rate = [100.0 * (EPISODES_PER_EVAL - len(RESULTS[c])) / EPISODES_PER_EVAL for c in ckpts]33 34plt.rcParams.update({35 "font.family": "sans-serif",36 "font.sans-serif": ["DejaVu Sans"],37 "figure.facecolor": SURFACE,38 "axes.facecolor": SURFACE,39})40 41fig, ax = plt.subplots(figsize=(9, 5.2), dpi=200)42 43ax.axhline(100, color=GRID, lw=1, solid_capstyle="butt", zorder=1)44ax.grid(axis="y", color=GRID, lw=1, ls="-", zorder=0)45ax.set_axisbelow(True)46 47ax.plot(ckpts, rate, color=SERIES, lw=2, solid_capstyle="round",48 solid_joinstyle="round", zorder=3)49ax.plot(ckpts, rate, "o", ms=9, color=SERIES, mec=SURFACE, mew=2, zorder=4)50 51# selective direct labels: the low point, the first 100%, and the endpoint52for c, r, dy, ha in [(50, rate[0], -16, "center"),53 (150, rate[2], 10, "center"),54 (300, rate[-1], 10, "right")]:55 ax.annotate(f"{r:.0f}%", (c, r), textcoords="offset points", xytext=(0, dy),56 ha=ha, va="center", fontsize=11, fontweight="600", color=INK)57 58ax.set_title("GROOT success rate improves with training episodes",59 fontsize=15, fontweight="600", color=INK, loc="left", pad=36)60ax.text(0, 1.012, "50 evaluation episodes per checkpoint · task: pick octopus "61 "and place inside brown basket · Unitree G1, 20 Hz",62 transform=ax.transAxes, fontsize=10, color=SECONDARY, va="bottom")63 64ax.set_xlabel("Training episodes (checkpoint)", fontsize=11, color=SECONDARY, labelpad=10)65ax.set_ylabel("Success rate", fontsize=11, color=SECONDARY, labelpad=10)66ax.set_xticks(ckpts)67ax.set_xlim(30, 320)68ax.set_ylim(92, 101.4)69ax.set_yticks([92, 94, 96, 98, 100])70ax.set_yticklabels(["92%", "94%", "96%", "98%", "100%"])71ax.tick_params(colors=MUTED, labelsize=10, length=0)72for side in ("top", "right"):73 ax.spines[side].set_visible(False)74for side in ("left", "bottom"):75 ax.spines[side].set_color(AXIS)76 ax.spines[side].set_linewidth(1)77 78ax.text(1.0, -0.16, "y-axis starts at 92% to show the spread; "79 "failures per checkpoint: 3, 2, 0, 2, 1, 0",80 transform=ax.transAxes, fontsize=9, color=MUTED, ha="right", va="top")81 82fig.tight_layout()83out = "success_rate.png"84fig.savefig(out, facecolor=SURFACE, bbox_inches="tight")85print(f"wrote {out}")86for c, r in zip(ckpts, rate):87 print(f" {c:>3} ep -> {r:5.1f}% failed: {RESULTS[c] or '-'}")88 