From dc191e833e9d4c1b7834af4daee2b7d28cd7be87 Mon Sep 17 00:00:00 2001 From: firestar5683 <168790843+firestar5683@users.noreply.github.com> Date: Thu, 5 Feb 2026 14:15:36 -0600 Subject: [PATCH] CD210 --- frogpilot/assets/model_manager.py | 28 +++- frogpilot/common/frogpilot_variables.py | 4 +- frogpilot/tinygrad_modeld/SConscript | 10 +- .../models/driving_policy.onnx | Bin 13926324 -> 14060847 bytes .../models/driving_vision.onnx | Bin 46271942 -> 46877473 bytes frogpilot/tinygrad_modeld/tinygrad_modeld.py | 130 ++++++++++++++---- frogpilot/ui/qt/offroad/model_settings.cc | 9 ++ 7 files changed, 147 insertions(+), 34 deletions(-) diff --git a/frogpilot/assets/model_manager.py b/frogpilot/assets/model_manager.py index 63bf6a2f3..f760b1195 100644 --- a/frogpilot/assets/model_manager.py +++ b/frogpilot/assets/model_manager.py @@ -107,7 +107,7 @@ class ModelManager: self.downloading_model = False return - if model_version in ("v8", "v9", "v10", "v11"): + if model_version in ("v8", "v9", "v10", "v11", "v12"): # Download all PKL and metadata files for multi-file tinygrad models (v8 and v9) filenames = [ f"{model_to_download}_driving_policy_tinygrad.pkl", @@ -115,6 +115,11 @@ class ModelManager: f"{model_to_download}_driving_policy_metadata.pkl", f"{model_to_download}_driving_vision_metadata.pkl", ] + if model_version == "v12": + filenames += [ + f"{model_to_download}_driving_off_policy_tinygrad.pkl", + f"{model_to_download}_driving_off_policy_metadata.pkl", + ] for filename in filenames: model_path = MODELS_PATH / filename model_url = f"{repo_url}/Models/{filename}" @@ -208,13 +213,18 @@ class ModelManager: except Exception: model_version = None - if model_version in ("v8", "v9", "v10", "v11"): + if model_version in ("v8", "v9", "v10", "v11", "v12"): v8_v9_files = [ f"{model}_driving_policy_tinygrad.pkl", f"{model}_driving_vision_tinygrad.pkl", f"{model}_driving_policy_metadata.pkl", f"{model}_driving_vision_metadata.pkl", ] + if model_version == "v12": + v8_v9_files += [ + f"{model}_driving_off_policy_tinygrad.pkl", + f"{model}_driving_off_policy_metadata.pkl", + ] if all((MODELS_PATH / f).is_file() for f in v8_v9_files): downloaded_models.add(model) elif model_version == "v7": @@ -259,13 +269,18 @@ class ModelManager: except Exception: model_version = None - if model_version in ("v8", "v9", "v10", "v11"): + if model_version in ("v8", "v9", "v10", "v11", "v12"): v8_v9_files = [ f"{model}_driving_policy_tinygrad.pkl", f"{model}_driving_vision_tinygrad.pkl", f"{model}_driving_policy_metadata.pkl", f"{model}_driving_vision_metadata.pkl", ] + if model_version == "v12": + v8_v9_files += [ + f"{model}_driving_off_policy_tinygrad.pkl", + f"{model}_driving_off_policy_metadata.pkl", + ] for filename in v8_v9_files: path = MODELS_PATH / filename expected_size = model_sizes.get(filename.rsplit(".", 1)[0]) @@ -378,13 +393,18 @@ class ModelManager: handle_error(None, "Download cancelled...", "Download cancelled...", MODEL_DOWNLOAD_ALL_PARAM, DOWNLOAD_PROGRESS_PARAM, params_memory) return - if model_version in ("v8", "v9", "v10", "v11"): + if model_version in ("v8", "v9", "v10", "v11", "v12"): required_files = [ f"{model}_driving_policy_tinygrad.pkl", f"{model}_driving_vision_tinygrad.pkl", f"{model}_driving_policy_metadata.pkl", f"{model}_driving_vision_metadata.pkl", ] + if model_version == "v12": + required_files += [ + f"{model}_driving_off_policy_tinygrad.pkl", + f"{model}_driving_off_policy_metadata.pkl", + ] missing = [f for f in required_files if not (MODELS_PATH / f).is_file()] if missing: print(f"Tinygrad model {model} is missing files. Preparing to download...") diff --git a/frogpilot/common/frogpilot_variables.py b/frogpilot/common/frogpilot_variables.py index e0970491a..7374a2be2 100644 --- a/frogpilot/common/frogpilot_variables.py +++ b/frogpilot/common/frogpilot_variables.py @@ -96,6 +96,8 @@ EXCLUDED_KEYS = { } TINYGRAD_FILES = [ + ("driving_off_policy_metadata.pkl", "off-policy metadata"), + ("driving_off_policy_tinygrad.pkl", "off-policy model"), ("driving_policy_metadata.pkl", "policy metadata"), ("driving_policy_tinygrad.pkl", "policy model"), ("driving_vision_metadata.pkl", "vision metadata"), @@ -888,7 +890,7 @@ class FrogPilotVariables: toggle.model_version = DEFAULT_MODEL_VERSION toggle.classic_longitudinal = toggle.model_version in {"v1", "v2", "v3", "v4"} toggle.classic_model = toggle.model_version in {"v1", "v2", "v3", "v4"} - toggle.tinygrad_model = toggle.model_version in {"v8", "v9", "v10", "v11"} + toggle.tinygrad_model = toggle.model_version in {"v8", "v9", "v10", "v11", "v12"} toggle.tomb_raider = toggle.model == "space-lab" toggle.model_ui = params.get_bool("ModelUI") if tuning_level >= level["ModelUI"] else default.get_bool("ModelUI") diff --git a/frogpilot/tinygrad_modeld/SConscript b/frogpilot/tinygrad_modeld/SConscript index 42851bf91..0885c3c24 100644 --- a/frogpilot/tinygrad_modeld/SConscript +++ b/frogpilot/tinygrad_modeld/SConscript @@ -32,7 +32,10 @@ lenvCython.Program('models/commonmodel_pyx.so', 'models/commonmodel_pyx.pyx', LI tinygrad_files = ["#"+x for x in glob.glob(env.Dir("#tinygrad_repo").relpath + "/**", recursive=True, root_dir=env.Dir("#").abspath) if 'pycache' not in x] # Get model metadata -for model_name in ['driving_vision', 'driving_policy']: +model_metadata_names = ['driving_vision', 'driving_policy'] +if File("models/driving_off_policy.onnx").exists(): + model_metadata_names.append('driving_off_policy') +for model_name in model_metadata_names: fn = File(f"models/{model_name}").abspath script_files = [File(Dir("#frogpilot/tinygrad_modeld").File("get_model_metadata.py").abspath)] cmd = f'python3 {Dir("#frogpilot/tinygrad_modeld").abspath}/get_model_metadata.py {fn}.onnx' @@ -48,7 +51,10 @@ def tg_compile(flags, model_name): ) # Compile small models -for model_name in ['driving_vision', 'driving_policy', 'dmonitoring_model']: +model_compile_names = ['driving_vision', 'driving_policy', 'dmonitoring_model'] +if File("models/driving_off_policy.onnx").exists(): + model_compile_names.append('driving_off_policy') +for model_name in model_compile_names: flags = { 'larch64': 'DEV=QCOM', 'Darwin': 'DEV=CPU IMAGE=0', diff --git a/frogpilot/tinygrad_modeld/models/driving_policy.onnx b/frogpilot/tinygrad_modeld/models/driving_policy.onnx index e42bb8ea9f52966b9c85f8894f076728add33585..7de335528756007abecd34ce5e07f3dab399eae5 100644 GIT binary patch delta 137138 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 diff --git a/frogpilot/tinygrad_modeld/models/driving_vision.onnx b/frogpilot/tinygrad_modeld/models/driving_vision.onnx index 902f1dd344816d88096afc74feed98598833c177..aff86857ae49b55f58fd971f2dd24f821c5f8c33 100644 GIT binary patch delta 643329 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 U{+F|b-)MdE-rc5u%yee{AJsr>LjV8( delta 124284 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 loePdGza4%!+SyPlUwF!xQ>tB6?H tuple[dict[str, np.ndarray], str | None]: + numpy_inputs: dict[str, np.ndarray] = {} + + # Always-supported inputs (if model expects them) + desire_key_init = next((k for k in input_shapes if k.startswith('desire')), None) + if desire_key_init: + numpy_inputs[desire_key_init] = np.zeros((1, ModelConstants.INPUT_HISTORY_BUFFER_LEN, ModelConstants.DESIRE_LEN), dtype=np.float32) + if 'traffic_convention' in input_shapes: + numpy_inputs['traffic_convention'] = np.zeros((1, ModelConstants.TRAFFIC_CONVENTION_LEN), dtype=np.float32) + if 'features_buffer' in input_shapes: + numpy_inputs['features_buffer'] = np.zeros((1, ModelConstants.INPUT_HISTORY_BUFFER_LEN, ModelConstants.FEATURE_LEN), dtype=np.float32) + + # Optional inputs for non-v11 (and some v10/v9 variants) + # Lateral control params + if 'lateral_control_params' in input_shapes: + numpy_inputs['lateral_control_params'] = np.zeros((1, ModelConstants.LATERAL_CONTROL_PARAMS_LEN), dtype=np.float32) + + # Previous desired curvature: handle both singular and plural key names across model versions + prev_desired_curv_key = None + if 'prev_desired_curv' in input_shapes: + prev_desired_curv_key = 'prev_desired_curv' + numpy_inputs['prev_desired_curv'] = np.zeros((1, ModelConstants.INPUT_HISTORY_BUFFER_LEN, ModelConstants.PREV_DESIRED_CURV_LEN), dtype=np.float32) + elif 'prev_desired_curvs' in input_shapes: + prev_desired_curv_key = 'prev_desired_curvs' + numpy_inputs['prev_desired_curvs'] = np.zeros((1, ModelConstants.INPUT_HISTORY_BUFFER_LEN, ModelConstants.PREV_DESIRED_CURV_LEN), dtype=np.float32) + + return numpy_inputs, prev_desired_curv_key + def __init__(self, context: CLContext): # Dynamically build paths based on current model ID params = Params() @@ -101,13 +129,17 @@ class ModelState: models_dir = Path(__file__).parent / "models" VISION_PKL_PATH = models_dir / "driving_vision_tinygrad.pkl" POLICY_PKL_PATH = models_dir / "driving_policy_tinygrad.pkl" + OFF_POLICY_PKL_PATH = models_dir / "driving_off_policy_tinygrad.pkl" VISION_METADATA_PATH = models_dir / "driving_vision_metadata.pkl" POLICY_METADATA_PATH = models_dir / "driving_policy_metadata.pkl" + OFF_POLICY_METADATA_PATH = models_dir / "driving_off_policy_metadata.pkl" else: VISION_PKL_PATH = model_dir / f"{model_id}_driving_vision_tinygrad.pkl" POLICY_PKL_PATH = model_dir / f"{model_id}_driving_policy_tinygrad.pkl" + OFF_POLICY_PKL_PATH = model_dir / f"{model_id}_driving_off_policy_tinygrad.pkl" VISION_METADATA_PATH = model_dir / f"{model_id}_driving_vision_metadata.pkl" POLICY_METADATA_PATH = model_dir / f"{model_id}_driving_policy_metadata.pkl" + OFF_POLICY_METADATA_PATH = model_dir / f"{model_id}_driving_off_policy_metadata.pkl" # If ModelVersion is not set or not available, try to determine it from available model data if not model_version: @@ -159,7 +191,7 @@ class ModelState: self.policy_generation = model_version or "v8" self.is_v11 = (self.policy_generation == "v11") self.is_v9 = (self.policy_generation == "v9") - self.mlsim = (self.policy_generation in ("v8", "v10", "v11")) + self.mlsim = (self.policy_generation in ("v8", "v10", "v11", "v12")) self.frames = {name: DrivingModelFrame(context, ModelConstants.TEMPORAL_SKIP) for name in self.vision_input_names} self.prev_desire = np.zeros(ModelConstants.DESIRE_LEN, dtype=np.float32) @@ -170,33 +202,50 @@ class ModelState: # policy inputs (built dynamically to support all generations) - self.numpy_inputs = {} + self.numpy_inputs, self.prev_desired_curv_key = self._build_policy_inputs(self.policy_input_shapes) - # Always-supported inputs (if model expects them) - desire_key_init = next((k for k in self.policy_input_shapes if k.startswith('desire')), None) - if desire_key_init: - self.numpy_inputs[desire_key_init] = np.zeros((1, ModelConstants.INPUT_HISTORY_BUFFER_LEN, ModelConstants.DESIRE_LEN), dtype=np.float32) - if 'traffic_convention' in self.policy_input_shapes: - self.numpy_inputs['traffic_convention'] = np.zeros((1, ModelConstants.TRAFFIC_CONVENTION_LEN), dtype=np.float32) - if 'features_buffer' in self.policy_input_shapes: - self.numpy_inputs['features_buffer'] = np.zeros((1, ModelConstants.INPUT_HISTORY_BUFFER_LEN, ModelConstants.FEATURE_LEN), dtype=np.float32) + # Off-policy model (optional) + self.off_policy_enabled = False + self.off_policy_input_shapes: dict[str, tuple[int, ...]] = {} + self.off_policy_output_slices: dict[str, slice] = {} + self.off_policy_numpy_inputs: dict[str, np.ndarray] = {} + self.off_policy_prev_desired_curv_key: str | None = None + self.off_policy_desire_key: str | None = None + self.off_policy_inputs: dict[str, Tensor] | None = None + self.off_policy_output: np.ndarray | None = None - # Optional inputs for non-v11 (and some v10/v9 variants) - # Lateral control params - if 'lateral_control_params' in self.policy_input_shapes: - self.numpy_inputs['lateral_control_params'] = np.zeros((1, ModelConstants.LATERAL_CONTROL_PARAMS_LEN), dtype=np.float32) + off_policy_metadata = None + if self.policy_generation == "v12" or OFF_POLICY_METADATA_PATH.is_file() or OFF_POLICY_PKL_PATH.is_file(): + try: + with open(OFF_POLICY_METADATA_PATH, 'rb') as f: + off_policy_metadata = pickle.load(f) + except FileNotFoundError: + cloudlog.error(f"Missing metadata {OFF_POLICY_METADATA_PATH}, downloading...") + from openpilot.frogpilot.assets.model_manager import ModelManager + ModelManager().download_model(model_id) + try: + with open(OFF_POLICY_METADATA_PATH, 'rb') as f: + off_policy_metadata = pickle.load(f) + except FileNotFoundError: + cloudlog.warning(f"Off-policy metadata still missing: {OFF_POLICY_METADATA_PATH}") - # Previous desired curvature: handle both singular and plural key names across model versions - self.prev_desired_curv_key = None - if 'prev_desired_curv' in self.policy_input_shapes: - self.prev_desired_curv_key = 'prev_desired_curv' - self.numpy_inputs['prev_desired_curv'] = np.zeros((1, ModelConstants.INPUT_HISTORY_BUFFER_LEN, ModelConstants.PREV_DESIRED_CURV_LEN), dtype=np.float32) - elif 'prev_desired_curvs' in self.policy_input_shapes: - self.prev_desired_curv_key = 'prev_desired_curvs' - self.numpy_inputs['prev_desired_curvs'] = np.zeros((1, ModelConstants.INPUT_HISTORY_BUFFER_LEN, ModelConstants.PREV_DESIRED_CURV_LEN), dtype=np.float32) + if off_policy_metadata is not None: + self.off_policy_input_shapes = off_policy_metadata['input_shapes'] + self.off_policy_output_slices = off_policy_metadata['output_slices'] + off_policy_output_size = off_policy_metadata['output_shapes']['outputs'][1] + self.off_policy_numpy_inputs, self.off_policy_prev_desired_curv_key = self._build_policy_inputs(self.off_policy_input_shapes) + self.off_policy_desire_key = next((k for k in self.off_policy_numpy_inputs if k.startswith('desire')), None) + self.off_policy_inputs = {k: Tensor(v, device='NPY').realize() for k, v in self.off_policy_numpy_inputs.items()} + self.off_policy_output = np.zeros(off_policy_output_size, dtype=np.float32) + try: + with open(OFF_POLICY_PKL_PATH, "rb") as f: + self.off_policy_run = pickle.load(f) + self.off_policy_enabled = True + except FileNotFoundError: + cloudlog.warning(f"Missing off-policy model {OFF_POLICY_PKL_PATH}, skipping off-policy") - # Optional temporal buffer for previous desired curvature (allocate only if the policy expects it) - if getattr(self, 'prev_desired_curv_key', None) is not None: + # Optional temporal buffer for previous desired curvature (allocate only if any model expects it) + if self.prev_desired_curv_key is not None or self.off_policy_prev_desired_curv_key is not None: self.full_prev_desired_curv = np.zeros((1, ModelConstants.FULL_HISTORY_BUFFER_LEN, ModelConstants.PREV_DESIRED_CURV_LEN), dtype=np.float32) @@ -206,6 +255,7 @@ class ModelState: self.policy_inputs = {k: Tensor(v, device='NPY').realize() for k,v in self.numpy_inputs.items()} self.policy_output = np.zeros(policy_output_size, dtype=np.float32) self.parser = Parser() + self.off_policy_parser = Parser(ignore_missing=True) with open(VISION_PKL_PATH, "rb") as f: self.vision_run = pickle.load(f) @@ -231,10 +281,18 @@ class ModelState: self.full_desire[0,:-1] = self.full_desire[0,1:] self.full_desire[0,-1] = new_desire self.numpy_inputs[self.desire_key][:] = self.full_desire.reshape((1,ModelConstants.INPUT_HISTORY_BUFFER_LEN,ModelConstants.TEMPORAL_SKIP,-1)).max(axis=2) + if self.off_policy_enabled and self.off_policy_desire_key is not None: + self.off_policy_numpy_inputs[self.off_policy_desire_key][:] = self.numpy_inputs[self.desire_key] + + if 'traffic_convention' in self.numpy_inputs: + self.numpy_inputs['traffic_convention'][:] = inputs['traffic_convention'] + if self.off_policy_enabled and 'traffic_convention' in self.off_policy_numpy_inputs: + self.off_policy_numpy_inputs['traffic_convention'][:] = inputs['traffic_convention'] - self.numpy_inputs['traffic_convention'][:] = inputs['traffic_convention'] if 'lateral_control_params' in self.numpy_inputs: self.numpy_inputs['lateral_control_params'][:] = inputs['lateral_control_params'] + if self.off_policy_enabled and 'lateral_control_params' in self.off_policy_numpy_inputs: + self.off_policy_numpy_inputs['lateral_control_params'][:] = inputs['lateral_control_params'] if prepare_only: return None @@ -256,7 +314,10 @@ class ModelState: self.full_features_buffer[0,:-1] = self.full_features_buffer[0,1:] self.full_features_buffer[0,-1] = vision_outputs_dict['hidden_state'][0, :] - self.numpy_inputs['features_buffer'][:] = self.full_features_buffer[0, self.temporal_idxs] + if 'features_buffer' in self.numpy_inputs: + self.numpy_inputs['features_buffer'][:] = self.full_features_buffer[0, self.temporal_idxs] + if self.off_policy_enabled and 'features_buffer' in self.off_policy_numpy_inputs: + self.off_policy_numpy_inputs['features_buffer'][:] = self.full_features_buffer[0, self.temporal_idxs] self.policy_output = self.policy_run(**self.policy_inputs).contiguous().realize().uop.base.buffer.numpy() policy_outputs_dict = self.parser.parse_policy_outputs(self.slice_outputs(self.policy_output, self.policy_output_slices)) @@ -273,9 +334,24 @@ class ModelState: else: self.numpy_inputs[self.prev_desired_curv_key][:] = self.full_prev_desired_curv[0, self.temporal_idxs] + if self.off_policy_enabled and self.off_policy_prev_desired_curv_key is not None: + if self.is_v9: + self.off_policy_numpy_inputs[self.off_policy_prev_desired_curv_key][:] = 0 * self.full_prev_desired_curv[0, self.temporal_idxs] + else: + self.off_policy_numpy_inputs[self.off_policy_prev_desired_curv_key][:] = self.full_prev_desired_curv[0, self.temporal_idxs] + combined_outputs_dict = {**vision_outputs_dict, **policy_outputs_dict} + if self.off_policy_enabled: + self.off_policy_output = self.off_policy_run(**self.off_policy_inputs).contiguous().realize().uop.base.buffer.numpy() + off_policy_outputs_dict = self.off_policy_parser.parse_policy_outputs( + self.slice_outputs(self.off_policy_output, self.off_policy_output_slices) + ) + combined_outputs_dict.update(off_policy_outputs_dict) if SEND_RAW_PRED: - combined_outputs_dict['raw_pred'] = np.concatenate([self.vision_output.copy(), self.policy_output.copy()]) + raw_pred = [self.vision_output.copy(), self.policy_output.copy()] + if self.off_policy_enabled and self.off_policy_output is not None: + raw_pred.append(self.off_policy_output.copy()) + combined_outputs_dict['raw_pred'] = np.concatenate(raw_pred) return combined_outputs_dict diff --git a/frogpilot/ui/qt/offroad/model_settings.cc b/frogpilot/ui/qt/offroad/model_settings.cc index 0550202a7..67c0f9db9 100644 --- a/frogpilot/ui/qt/offroad/model_settings.cc +++ b/frogpilot/ui/qt/offroad/model_settings.cc @@ -503,6 +503,8 @@ bool FrogPilotModelPanel::isModelInstalled(const QString &key) const { bool has_policy_tg = false; bool has_vision_meta = false; bool has_vision_tg = false; + bool has_off_policy_meta = false; + bool has_off_policy_tg = false; bool foundAny = false; for (const QString &file : modelDir.entryList(QDir::Files)) { @@ -521,6 +523,10 @@ bool FrogPilotModelPanel::isModelInstalled(const QString &key) const { has_policy_meta = true; } else if (base.contains("_driving_policy_tinygrad")) { has_policy_tg = true; + } else if (base.contains("_driving_off_policy_metadata")) { + has_off_policy_meta = true; + } else if (base.contains("_driving_off_policy_tinygrad")) { + has_off_policy_tg = true; } else if (base.contains("_driving_vision_metadata")) { has_vision_meta = true; } else if (base.contains("_driving_vision_tinygrad")) { @@ -534,6 +540,9 @@ bool FrogPilotModelPanel::isModelInstalled(const QString &key) const { } if (has_policy_meta && has_policy_tg && has_vision_meta && has_vision_tg) { + if (has_off_policy_meta || has_off_policy_tg) { + return has_off_policy_meta && has_off_policy_tg; + } return true; }