"""One-time TensorFlow reference/constant extraction for the PyTorch port.""" import argparse import hashlib import json import os import sqlite3 from pathlib import Path os.environ.setdefault("CUDA_VISIBLE_DEVICES", "") os.environ.setdefault("TF_ENABLE_ONEDNN_OPTS", "0") os.environ.setdefault("TF_CPP_MIN_LOG_LEVEL", "2") import numpy as np import tensorflow as tf from tensorflow.core.framework import graph_pb2 from tensorflow.core.protobuf import saved_model_pb2 def constant_value(graph_def, name): """Evaluate the original constant-only subgraph, without map control edges.""" nodes = {n.name: n for n in graph_def.node} selected = set() def add(key): key = key.split(":")[0] if key in selected: return node = nodes[key] if node.op in ("Placeholder", "ReadVariableOp", "VarHandleOp"): raise ValueError("Requested frontend constant depends on runtime state: " + key) selected.add(key) for parent in node.input: if not parent.startswith("^"): add(parent) add(name) subset = graph_pb2.GraphDef() for node in graph_def.node: if node.name in selected: copied = subset.node.add() copied.CopyFrom(node) inputs = [v for v in copied.input if not v.startswith("^")] del copied.input[:] copied.input.extend(inputs) with tf.Graph().as_default() as graph: tf.import_graph_def(subset, name="") with tf.compat.v1.Session(graph=graph) as session: return session.run(graph.get_tensor_by_name(name + ":0")) def main(): parser = argparse.ArgumentParser() parser.add_argument("--project", type=Path, required=True) parser.add_argument("--output", type=Path, required=True) args = parser.parse_args() root = args.project.resolve() output = args.output.resolve() output.mkdir(parents=True, exist_ok=False) source = root / "data/artifacts/google-speech-embedding" identity = json.loads((source / ".source.json").read_text()) for name, expected in identity["files"].items(): if hashlib.sha256((source / name).read_bytes()).hexdigest() != expected: raise ValueError("Original artifact changed") saved = saved_model_pb2.SavedModel() saved.ParseFromString((source / "saved_model.pb").read_bytes()) meta = next(m for m in saved.meta_graphs if not m.meta_info_def.tags) window = constant_value(meta.graph_def, "map/while/stft/hann_window/sub_2") mel = constant_value(meta.graph_def, "map/while/linear_to_mel_weight_matrix") reader = tf.train.load_checkpoint(str(source / "variables/variables")) weights = {k: reader.get_tensor(k) for k in sorted(reader.get_variable_to_shape_map())} key = "embeddings/state/MudpuppyLite/ZeroMeanConv2d/weights" initial = tf.convert_to_tensor(weights[key]) centered = (initial - tf.reduce_mean(initial, axis=[0, 1], keepdims=True)).numpy() np.savez(output / "frontend.npz", window=window, mel_matrix=mel, initial_centered_hwio=centered) np.savez(output / "variables.npz", **weights) manifest = json.loads((root / "data/derived/development-clean460-v1/manifest.json").read_text()) crops = sorted((r for r in manifest["query_crops"].values() if r["split"] == "dev-select"), key=lambda r: (r["num_samples"], r["crop_id"])) positions = np.unique(np.linspace(0, len(crops) - 1, 32, dtype=int)) db = sqlite3.connect((root / "data/cache/keyword-clean460-google-v1/features.sqlite3").as_uri() + "?mode=ro&immutable=1", uri=True) examples = [] for i in positions: crop = crops[i] row = db.execute("SELECT pcm16,data,valid_length,sha256 FROM features WHERE crop_id=?", (crop["crop_id"],)).fetchone() if hashlib.sha256(row[0]).hexdigest() != crop["audio_sha256"] or hashlib.sha256(row[1]).hexdigest() != row[3]: raise ValueError("Retained feature/crop identity changed") wave = np.frombuffer(row[0], dtype="