diff --git a/.github/ci/benchmark_config.json b/.github/ci/benchmark_config.json index 43f8895d..ca9d8533 100644 --- a/.github/ci/benchmark_config.json +++ b/.github/ci/benchmark_config.json @@ -315,6 +315,53 @@ }, "smolvlm_500m": { "config": "ported_models/llama_cpp_et/benchmarks/smolvlm_500m.json" + }, + "yolov10n_hf_reference": { + "canonical_variant": "yolov10n_hf_full", + "source": "ported_models/yolov10n_hf_reference/src/leaderboard_full.c", + "bench_dir": "yolov10n-bench", + "manifest": "yolov10n_variants.txt", + "score": { + "metric": "kernel_wait_s", + "label": "Full-graph kernel wait", + "higher_is_better": false, + "baseline_variant": "yolov10n_hf_full" + }, + "build": { + "opt": "-O2", + "defines": [ + "-std=gnu11", + "-funroll-loops", + "-fno-tree-loop-distribute-patterns", + "-fno-strict-aliasing", + "-fno-fast-math", + "-ffp-contract=off", + "-fno-tree-vectorize", + "-DYR_PMC", + "-Wl,--defsym=STACK_SIZE=4096" + ] + }, + "artifacts": { + "port_runtime": { + "kind": "framework_source", + "submodule_path": "ported_models/yolov10n_hf_reference/src" + } + }, + "mem_size": "0x03030000", + "region_size": "0x00400000", + "dump_size": "0x022A0000", + "file_loads": [ + { + "address": "0x022A0000", + "paths": ["yolov10n_hf_reference/inputs.bin"], + "required": true + }, + { + "address": "0x02750000", + "paths": ["yolov10n_hf_reference/weights.bin"], + "required": true + } + ] } } } diff --git a/.gitignore b/.gitignore index 752615a4..cec26c57 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ !ported_models/yolo_e2e/assets/**/*.bin !ported_models/dncnn/assets/ !ported_models/dncnn/assets/**/*.bin +!ported_models/yolov10n_hf_reference/assets/**/*.bin !ported_models/dncnn/assets/**/*.npy !ported_models/dncnn/refs/ !ported_models/dncnn/refs/**/*.npy diff --git a/README.md b/README.md index ee7525ed..9bdd3d85 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,7 @@ Start here: - [`docs/opinionated_porting_options/martin.md`](docs/opinionated_porting_options/martin.md): ET-SoC1 board mental model, correctness footguns, and performance playbook. - `ported_models/yolo/` +- `ported_models/yolov10n_hf_reference/` (separate pinned-ONNX scalar FP32 correctness path) - `ported_models/llama_cpp_et/` - `ported_models/ggonnx/` diff --git a/docs/HF_REFERENCES.md b/docs/HF_REFERENCES.md index b54dfcee..b800ac92 100644 --- a/docs/HF_REFERENCES.md +++ b/docs/HF_REFERENCES.md @@ -15,6 +15,7 @@ Hugging Face base model. |--------------|-------------------|----------|-------------|---------| | `dncnn` | `deepinv/dncnn` | `3bb1f2a95321781343331069776c3eba98707a56` | `bsd-3-clause` | `dncnn_sigma2_gray.pth` | | `yolo` | `kadirnar/yolov10n` | `9fa42234fbcdb13b78fa57ebaac6c50e6dd2eb21` | `agpl-3.0` | `yolov10n.pt` | +| `yolov10n_hf_reference` | `onnx-community/yolov10n` | `57657320425ee34056408a57ad9d29c4d4815bd8` | `agpl-3.0` | `onnx/model.onnx` (direct source; no re-export) | | `lfm25` | `LiquidAI/LFM2.5-1.2B-Instruct-GGUF` | `047e06635fbe71469926b35ea414537245218200` | `other` | `LFM2.5-1.2B-Instruct-Q8_0.gguf` | | `llama32_1b` | `lmstudio-community/Llama-3.2-1B-Instruct-GGUF` | `199151125cf15a129ab3b548b26afeed976df066` | `llama3.2` | `Llama-3.2-1B-Instruct-Q8_0.gguf` | | `gemma3n_e2b` | `ggml-org/gemma-3n-E2B-it-GGUF` | `989cffaba23976934324f5e3abfabe31b30eb73b` | `gemma` | `gemma-3n-E2B-it-Q8_0.gguf` | diff --git a/docs/THIRD_PARTY.md b/docs/THIRD_PARTY.md index efb1d835..cb545088 100644 --- a/docs/THIRD_PARTY.md +++ b/docs/THIRD_PARTY.md @@ -11,6 +11,7 @@ inventory; per-port `THIRD_PARTY.md` files hold the detailed records. |-----------|------|------|---------|-------| | ET `llama.cpp` fork | `ported_models/llama_cpp_et/src/llama.cpp-et` | git submodule (pointer) | MIT | Upstream `aifoundry-org/llama.cpp`, branch `et`. License travels with the submodule. See `ported_models/llama_cpp_et/THIRD_PARTY.md`. | | GGONNX | `ported_models/ggonnx/src/ggonnx` | vendored source | Pending (expected Apache-2.0) | Upstream `marty1885/ggonnx` had no LICENSE at vendoring time; license grant being secured with the author. See `ported_models/ggonnx/THIRD_PARTY.md`. | +| YOLOv10n pinned ONNX | `local-artifacts/yolov10n_hf_reference/model.onnx` (not committed) | downloaded model graph and weights | AGPL-3.0 | `onnx-community/yolov10n` revision `57657320425ee34056408a57ad9d29c4d4815bd8`; see `ported_models/yolov10n_hf_reference/THIRD_PARTY.md`. | | Model weights (GGUF, ONNX) | not committed | downloaded at runtime | Per upstream model card | Fetched on the board host from Hugging Face / source URLs declared in each port's `artifacts.json`; each model retains its own license. | ## How licensing is structured here diff --git a/ported_models/yolov10n_hf_reference/README.md b/ported_models/yolov10n_hf_reference/README.md new file mode 100644 index 00000000..1f9cc6d2 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/README.md @@ -0,0 +1,217 @@ +# YOLOv10n pinned-ONNX scalar reference + +This directory contains a readable FP32 C port of one exact Hugging Face ONNX +artifact. It is a correctness and workshop baseline for ET-SoC1, not an +optimized submission. + +| Source fact | Pinned value | +|---|---| +| Repository | `onnx-community/yolov10n` | +| Revision | `57657320425ee34056408a57ad9d29c4d4815bd8` | +| File | `onnx/model.onnx` | +| Size | 9,386,116 bytes | +| SHA-256 | `a77dd863933f184a19e84361c64b788228a7c7dacc2c78939239a96ad3efca3b` | +| License | AGPL-3.0 | + +The model is ONNX opset 13. Its interface is `images` FP32 +`[1,3,640,640]` to `output0` FP32 `[1,300,6]`. The graph has 308 nodes, +187 initializers, 83 Conv nodes, and 22 operator types. It includes decode and +NMS-free Top-300 selection; it does not contain a `NonMaxSuppression` node. + +Every ONNX node is kept as a separate scalar operation. There is no VPU, +TFMA, fusion, tiling, threading, fast-math, or other performance +transformation. + +## Model parts + +| Part | ONNX nodes | Purpose | +|---|---:|---| +| Stem | `N000:N005` | Two stride-2 Conv/SiLU steps | +| Backbone | `N006:N090` | C2f-style features and P3/P4/P5 downsampling | +| SPPF and partial attention | `N091:N128` | Spatial pyramid pooling and attention/FFN | +| Neck | `N129:N207` | Top-down and bottom-up multiscale fusion | +| Three-scale head | `N208:N270` | P3/P4/P5 box and class branches | +| DFL and decode | `N271:N288` | Distribution expectation, boxes, and class sigmoid | +| Top-300 selection | `N289:N307` | Two TopK stages and final `[box, score, class]` rows | + +The first five parts are learned feature extraction and detection. The last +two are output transformation implemented inside the ONNX. Preprocessing, +score filtering, label names, drawing, and mapping boxes back to the original +image are outside the model. + +`manifests/layers.tsv` provides stable `Nxxx`, high-level `Lxxx`, and +per-operator IDs. `manifests/graph_inventory.json` contains every node, +attribute, inferred tensor, and initializer. + +## Supported workflows + +There are only two execution modes: + +1. `generate_full_graph.py` creates an end-to-end `N000:N307` package. +2. `capture_range.py` creates one node or any contiguous range, such as + `N003:N003` or `N271:N288`. + +Both use the same hand-written runtime in `src/ref_runtime.c`. Generated ONNX +instrumentation, headers, weights, inputs, goldens, ELFs, dumps, and logs stay +under ignored `local-artifacts/`. + +### 1. Set up and verify the pinned model + +Run from the repository root: + +```bash +PORT=ported_models/yolov10n_hf_reference +PY=local-artifacts/yolov10n_hf_reference/venv/bin/python + +"$PORT/tools/setup_host_env.sh" +"$PY" "$PORT/tools/download_model.py" +"$PY" "$PORT/tools/inspect_onnx.py" +"$PY" "$PORT/tools/pack_initializers.py" +``` + +The environment is pinned in `requirements-host.txt` and supports Python +3.8–3.11. The download and every generator reject the wrong model checksum. + +### 2. Run the full graph on the host + +```bash +"$PY" "$PORT/tools/generate_full_graph.py" --name deterministic +"$PORT/scripts/run_host_full.sh" \ + local-artifacts/yolov10n_hf_reference/full_graph/deterministic +``` + +This compares 16 architecture checkpoints and final `output0` against ONNX +Runtime with graph optimization disabled. FP32 values use +`abs(actual-reference) <= 5e-5 + 1e-4*abs(reference)`, except for the +documented `N288` decode checkpoint override. INT64 comparisons are exact. + +### 3. Run one layer or a small range + +This example captures and checks nodes `N003:N005`: + +```bash +NAME=n003_n005 +RANGE=local-artifacts/yolov10n_hf_reference/ranges/$NAME + +"$PY" "$PORT/tools/capture_range.py" \ + --range N003:N005 \ + --name "$NAME" +"$PORT/scripts/run_host_range.sh" "$RANGE" +``` + +Every output of every selected node is retained and compared. Boundary +tensors are captured from the same pinned model through ONNX Runtime. A +single node is selected by repeating it or using it once: + +```bash +"$PY" "$PORT/tools/capture_range.py" \ + --range N003 \ + --name n003 +``` + +### 4. Build and run that range in `sys_emu` + +The ET compiler requires a valid `ET_PLATFORM` or `ET_INSTALL`. Set +`LAUNCHER` to the system-emulator launcher installed on the ET host. + +```bash +ELF="$RANGE/yolov10n_hf_range.elf" +RUN=local-artifacts/yolov10n_hf_reference/results/sys_emu_$NAME + +"$PORT/scripts/build_et_slice.sh" "$RANGE" "$ELF" +"$PORT/scripts/run_et_slice.sh" \ + --device sys_emu \ + --slice-dir "$RANGE" \ + --elf "$ELF" \ + --launcher "$LAUNCHER" \ + --output-dir "$RUN" \ + --outer-timeout 1800 \ + --launcher-timeout 1740 +"$PORT/scripts/validate_device_run.sh" "$RANGE" "$RUN" sys_emu +``` + +`sys_emu` is intentionally slow. Use it for one layer or a bounded range, +not for routine end-to-end inference. The validator checks the saved command, +ELF, input and weight identities, every selected output, and the PMC record. + +### 5. Run the complete graph on ET-SoC1 + +On a configured ET board host: + +```bash +FULL=local-artifacts/yolov10n_hf_reference/full_graph/deterministic +ELF="$FULL/yolov10n_hf_full.elf" +RUN=local-artifacts/yolov10n_hf_reference/results/full_board +MODEL=local-artifacts/yolov10n_hf_reference/model.onnx + +"$PORT/scripts/build_et_full.sh" "$FULL" "$ELF" +"$PORT/scripts/run_et_full.sh" \ + --device soc1sim \ + --full-dir "$FULL" \ + --elf "$ELF" \ + --launcher "$LAUNCHER" \ + --output-dir "$RUN" +"$PORT/scripts/validate_et_full.sh" \ + "$FULL" "$RUN" soc1sim "$MODEL" 1 +``` + +The real board path obtains the repository board lock, resets ET-SoC1, and +stores hash-bound run evidence. It never registers the port with the +leaderboard. + +## PMCs + +`src/ref_pmc.h` programs and reads these counters: + +- `hpmcounter3`: minion cycles +- `hpmcounter4/5`: retired instructions on thread 0/1 +- `hpmcounter6`: L2 miss requests +- `hpmcounter7`: minion I-cache requests +- `hpmcounter8`: I-cache ET-link requests + +A range has one PMC interval around exactly its selected nodes. Full +execution has seven intervals matching the model-parts table above. Input +loading, launcher startup, dumping, and host comparison are outside those +intervals. `validate_device_run.sh` and `validate_et_full.sh` decode and check +the records automatically; `tools/decode_pmc.py` is available for manual +inspection. + +Simulator PMCs prove execution and instrumentation. Use real-board PMCs for +performance conclusions. + +## Current validation + +| Path | Result | +|---|---| +| Full host, deterministic input | PASS, all 308 nodes and 16 checkpoints | +| Full host, checked real image | PASS, strict `output0` 0/1,800 mismatches | +| Host arbitrary ranges | PASS, including every supported operator | +| `sys_emu` bounded ranges | PASS, selected outputs and PMC records | +| ET-SoC1 full real image | PASS, strict `output0`, 16 checkpoints, seven PMCs | + +The measured full-board kernel wait for this unoptimized scalar baseline was +721.396 seconds. This is correctness evidence, not a target latency. +`manifests/board_full_summary_strict.json` is the compact, hash-bound record; +raw binaries and logs are deliberately not committed. + +## Repository contents + +- `src/`: scalar runtime, host/ET runners, and PMC support. +- `tools/`: model download, graph generation, comparison, preprocessing, and + evidence utilities. +- `scripts/`: small host and ET build/run/validate entry points. +- `manifests/`: pinned graph, layer, weight, execution, and board facts. +- `tools/tests/`: tamper and contract regression tests. +- [THIRD_PARTY.md](THIRD_PARTY.md): upstream artifact and license record. + +Run lightweight source checks with: + +```bash +python3 -m compileall -q "$PORT/tools" +for script in "$PORT"/scripts/*.sh "$PORT"/tools/*.sh; do + bash -n "$script" +done +``` + +The complete graph and weight package are generated locally because the model +artifact remains under its upstream AGPL-3.0 terms. diff --git a/ported_models/yolov10n_hf_reference/THIRD_PARTY.md b/ported_models/yolov10n_hf_reference/THIRD_PARTY.md new file mode 100644 index 00000000..9fa0d519 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/THIRD_PARTY.md @@ -0,0 +1,16 @@ +# Third-party model artifact + +The model weights and ONNX graph are not part of this repository's Apache-2.0 +licensed source and are not committed. + +| Component | Source | Revision | File | SHA-256 | License | +|---|---|---|---|---|---| +| YOLOv10n ONNX | `onnx-community/yolov10n` | `57657320425ee34056408a57ad9d29c4d4815bd8` | `onnx/model.onnx` | `a77dd863933f184a19e84361c64b788228a7c7dacc2c78939239a96ad3efca3b` | AGPL-3.0 | + +Resolve URL: +`https://huggingface.co/onnx-community/yolov10n/resolve/57657320425ee34056408a57ad9d29c4d4815bd8/onnx/model.onnx?download=true`. + +`tools/download_model.py` downloads the pinned artifact into the ignored +`local-artifacts/` cache and verifies its 9,386,116-byte size and checksum +before it is used. The port does not re-export from PyTorch: this ONNX file is +the sole source of topology, weights, tensor names, shapes, and golden outputs. diff --git a/ported_models/yolov10n_hf_reference/artifacts.json b/ported_models/yolov10n_hf_reference/artifacts.json new file mode 100644 index 00000000..707f4307 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/artifacts.json @@ -0,0 +1,23 @@ +{ + "schema_version": 1, + "artifacts": { + "yolov10n_onnx": { + "kind": "model", + "format": "onnx", + "dtype": "fp32", + "source": { + "type": "huggingface", + "repo": "onnx-community/yolov10n", + "revision": "57657320425ee34056408a57ad9d29c4d4815bd8", + "filename": "onnx/model.onnx", + "url": "https://huggingface.co/onnx-community/yolov10n/resolve/57657320425ee34056408a57ad9d29c4d4815bd8/onnx/model.onnx?download=true" + }, + "size_bytes": 9386116, + "sha256": "a77dd863933f184a19e84361c64b788228a7c7dacc2c78939239a96ad3efca3b", + "license": "AGPL-3.0", + "local_cache": "local-artifacts/yolov10n_hf_reference/model.onnx", + "source_of_truth": true, + "export": "none" + } + } +} diff --git a/ported_models/yolov10n_hf_reference/assets/yolov10n_hf_reference/inputs.bin b/ported_models/yolov10n_hf_reference/assets/yolov10n_hf_reference/inputs.bin new file mode 100644 index 00000000..67380744 Binary files /dev/null and b/ported_models/yolov10n_hf_reference/assets/yolov10n_hf_reference/inputs.bin differ diff --git a/ported_models/yolov10n_hf_reference/assets/yolov10n_hf_reference/weights.bin b/ported_models/yolov10n_hf_reference/assets/yolov10n_hf_reference/weights.bin new file mode 100644 index 00000000..d527e3be Binary files /dev/null and b/ported_models/yolov10n_hf_reference/assets/yolov10n_hf_reference/weights.bin differ diff --git a/ported_models/yolov10n_hf_reference/generated/full_graph/slice_manifest.h b/ported_models/yolov10n_hf_reference/generated/full_graph/slice_manifest.h new file mode 100644 index 00000000..caad359e --- /dev/null +++ b/ported_models/yolov10n_hf_reference/generated/full_graph/slice_manifest.h @@ -0,0 +1,889 @@ +/* Generated directly from the pinned ONNX by tools/generate_full_graph.py. */ +#ifndef YOLOV10N_HF_SLICE_MANIFEST_H +#define YOLOV10N_HF_SLICE_MANIFEST_H + +#include + +#define YR_MANIFEST_VERSION 2u +#define YR_FIRST_NODE 0u +#define YR_LAST_NODE 307u +#define YR_NODE_COUNT 308u +#define YR_TENSOR_COUNT 512u +#define YR_RESULT_HEADER_BYTES 4096u +#define YR_RESULT_DEVICE_OFFSET 0x00000000u +#define YR_INPUT_DEVICE_OFFSET 0x022a0000u +#define YR_WEIGHT_DEVICE_OFFSET 0x02750000u +#define YR_PMC_DEVICE_OFFSET 0x02230000u +#define YR_PMC_STAGE_COUNT 7u +#define YR_PMC_STAGE_STRIDE 0x00010000u +#define YR_INPUT_BLOB_BYTES 4915200u +#define YR_WEIGHT_BLOB_BYTES 9299136u +#define YR_WORKSPACE_BYTES 35788800u +#define YR_DUMP_SIZE 0x022a0000u +#define YR_MEM_SIZE 0x03030000u + +enum yr_storage { YR_STORAGE_INPUT = 1, YR_STORAGE_WEIGHTS = 2, YR_STORAGE_WORKSPACE = 3 }; +enum yr_dtype { YR_DTYPE_FLOAT = 1, YR_DTYPE_INT64 = 2 }; +enum yr_op { YR_OP_CONV = 1, YR_OP_SIGMOID = 2, YR_OP_MUL = 3, YR_OP_CONCAT = 4, YR_OP_ADD = 5, YR_OP_SPLIT = 6, YR_OP_MAXPOOL = 7, YR_OP_RESIZE = 8, YR_OP_MATMUL = 9, YR_OP_SOFTMAX = 10, YR_OP_RESHAPE = 11, YR_OP_TRANSPOSE = 12, YR_OP_SUB = 13, YR_OP_REDUCEMAX = 14, YR_OP_TOPK = 15, YR_OP_UNSQUEEZE = 16, YR_OP_TILE = 17, YR_OP_GATHERELEMENTS = 18, YR_OP_FLATTEN = 19, YR_OP_MOD = 20, YR_OP_DIV = 21, YR_OP_CAST = 22 }; + +struct yr_tensor_desc { + uint32_t storage, offset, nbytes, elements, rank, dtype; + uint32_t dims[6]; +}; + +struct yr_node_desc { + uint32_t onnx_index, op, input_count, output_count; + uint32_t inputs[4], outputs[3]; + int32_t group, kernel_h, kernel_w, stride_h, stride_w; + int32_t pad_top, pad_left, pad_bottom, pad_right; + int32_t dilation_h, dilation_w, axis; + uint32_t axes_count; + int32_t axes[6]; + uint32_t perm_count; + int32_t perm[6]; + int32_t ceil_mode, keepdims, largest, sorted, fmod, to; + int32_t resize_nearest_asymmetric_floor; +}; + +struct yr_pmc_stage_desc { + uint32_t first_local_node, last_local_node; + uint32_t first_onnx_node, last_onnx_node; +}; + +static const struct yr_tensor_desc yr_tensors[YR_TENSOR_COUNT] = { + { 1u, 0u, 4915200u, 1228800u, 4u, 1u, { 1, 3, 640, 640, 0, 0 } }, + { 2u, 0u, 4u, 1u, 0u, 1u, { 0, 0, 0, 0, 0, 0 } }, + { 2u, 64u, 32u, 4u, 1u, 2u, { 4, 0, 0, 0, 0, 0 } }, + { 2u, 128u, 32u, 4u, 1u, 2u, { 4, 0, 0, 0, 0, 0 } }, + { 2u, 192u, 16u, 4u, 1u, 1u, { 4, 0, 0, 0, 0, 0 } }, + { 2u, 256u, 24u, 3u, 1u, 2u, { 3, 0, 0, 0, 0, 0 } }, + { 2u, 320u, 8u, 1u, 0u, 2u, { 0, 0, 0, 0, 0, 0 } }, + { 2u, 384u, 67200u, 16800u, 3u, 1u, { 1, 2, 8400, 0, 0, 0 } }, + { 2u, 67584u, 33600u, 8400u, 2u, 1u, { 1, 8400, 0, 0, 0, 0 } }, + { 2u, 101184u, 8u, 1u, 1u, 2u, { 1, 0, 0, 0, 0, 0 } }, + { 2u, 101248u, 8u, 1u, 1u, 2u, { 1, 0, 0, 0, 0, 0 } }, + { 2u, 101312u, 24u, 3u, 1u, 2u, { 3, 0, 0, 0, 0, 0 } }, + { 2u, 101376u, 24u, 3u, 1u, 2u, { 3, 0, 0, 0, 0, 0 } }, + { 2u, 101440u, 24u, 3u, 1u, 2u, { 3, 0, 0, 0, 0, 0 } }, + { 2u, 101504u, 32u, 4u, 1u, 2u, { 4, 0, 0, 0, 0, 0 } }, + { 2u, 101568u, 64u, 16u, 1u, 1u, { 16, 0, 0, 0, 0, 0 } }, + { 2u, 101632u, 1728u, 432u, 4u, 1u, { 16, 3, 3, 3, 0, 0 } }, + { 2u, 103360u, 128u, 32u, 1u, 1u, { 32, 0, 0, 0, 0, 0 } }, + { 2u, 103488u, 18432u, 4608u, 4u, 1u, { 32, 16, 3, 3, 0, 0 } }, + { 2u, 121920u, 512u, 128u, 1u, 1u, { 128, 0, 0, 0, 0, 0 } }, + { 2u, 122432u, 4608u, 1152u, 4u, 1u, { 128, 1, 3, 3, 0, 0 } }, + { 2u, 127040u, 512u, 128u, 1u, 1u, { 128, 0, 0, 0, 0, 0 } }, + { 2u, 127552u, 65536u, 16384u, 4u, 1u, { 128, 128, 1, 1, 0, 0 } }, + { 2u, 193088u, 1024u, 256u, 1u, 1u, { 256, 0, 0, 0, 0, 0 } }, + { 2u, 194112u, 131072u, 32768u, 4u, 1u, { 256, 128, 1, 1, 0, 0 } }, + { 2u, 325184u, 1024u, 256u, 1u, 1u, { 256, 0, 0, 0, 0, 0 } }, + { 2u, 326208u, 262144u, 65536u, 4u, 1u, { 256, 256, 1, 1, 0, 0 } }, + { 2u, 588352u, 1024u, 256u, 1u, 1u, { 256, 0, 0, 0, 0, 0 } }, + { 2u, 589376u, 262144u, 65536u, 4u, 1u, { 256, 256, 1, 1, 0, 0 } }, + { 2u, 851520u, 1024u, 256u, 1u, 1u, { 256, 0, 0, 0, 0, 0 } }, + { 2u, 852544u, 131072u, 32768u, 4u, 1u, { 256, 128, 1, 1, 0, 0 } }, + { 2u, 983616u, 512u, 128u, 1u, 1u, { 128, 0, 0, 0, 0, 0 } }, + { 2u, 984128u, 131072u, 32768u, 4u, 1u, { 128, 256, 1, 1, 0, 0 } }, + { 2u, 1115200u, 512u, 128u, 1u, 1u, { 128, 0, 0, 0, 0, 0 } }, + { 2u, 1115712u, 196608u, 49152u, 4u, 1u, { 128, 384, 1, 1, 0, 0 } }, + { 2u, 1312320u, 512u, 128u, 1u, 1u, { 128, 0, 0, 0, 0, 0 } }, + { 2u, 1312832u, 98304u, 24576u, 4u, 1u, { 128, 192, 1, 1, 0, 0 } }, + { 2u, 1411136u, 256u, 64u, 1u, 1u, { 64, 0, 0, 0, 0, 0 } }, + { 2u, 1411392u, 147456u, 36864u, 4u, 1u, { 64, 64, 3, 3, 0, 0 } }, + { 2u, 1558848u, 256u, 64u, 1u, 1u, { 64, 0, 0, 0, 0, 0 } }, + { 2u, 1559104u, 147456u, 36864u, 4u, 1u, { 64, 64, 3, 3, 0, 0 } }, + { 2u, 1706560u, 256u, 64u, 1u, 1u, { 64, 0, 0, 0, 0, 0 } }, + { 2u, 1706816u, 49152u, 12288u, 4u, 1u, { 64, 192, 1, 1, 0, 0 } }, + { 2u, 1755968u, 256u, 64u, 1u, 1u, { 64, 0, 0, 0, 0, 0 } }, + { 2u, 1756224u, 24576u, 6144u, 4u, 1u, { 64, 96, 1, 1, 0, 0 } }, + { 2u, 1780800u, 128u, 32u, 1u, 1u, { 32, 0, 0, 0, 0, 0 } }, + { 2u, 1780928u, 36864u, 9216u, 4u, 1u, { 32, 32, 3, 3, 0, 0 } }, + { 2u, 1817792u, 128u, 32u, 1u, 1u, { 32, 0, 0, 0, 0, 0 } }, + { 2u, 1817920u, 36864u, 9216u, 4u, 1u, { 32, 32, 3, 3, 0, 0 } }, + { 2u, 1854784u, 256u, 64u, 1u, 1u, { 64, 0, 0, 0, 0, 0 } }, + { 2u, 1855040u, 147456u, 36864u, 4u, 1u, { 64, 64, 3, 3, 0, 0 } }, + { 2u, 2002496u, 512u, 128u, 1u, 1u, { 128, 0, 0, 0, 0, 0 } }, + { 2u, 2003008u, 98304u, 24576u, 4u, 1u, { 128, 192, 1, 1, 0, 0 } }, + { 2u, 2101312u, 512u, 128u, 1u, 1u, { 128, 0, 0, 0, 0, 0 } }, + { 2u, 2101824u, 98304u, 24576u, 4u, 1u, { 128, 192, 1, 1, 0, 0 } }, + { 2u, 2200128u, 256u, 64u, 1u, 1u, { 64, 0, 0, 0, 0, 0 } }, + { 2u, 2200384u, 147456u, 36864u, 4u, 1u, { 64, 64, 3, 3, 0, 0 } }, + { 2u, 2347840u, 256u, 64u, 1u, 1u, { 64, 0, 0, 0, 0, 0 } }, + { 2u, 2348096u, 147456u, 36864u, 4u, 1u, { 64, 64, 3, 3, 0, 0 } }, + { 2u, 2495552u, 128u, 32u, 1u, 1u, { 32, 0, 0, 0, 0, 0 } }, + { 2u, 2495680u, 4096u, 1024u, 4u, 1u, { 32, 32, 1, 1, 0, 0 } }, + { 2u, 2499776u, 128u, 32u, 1u, 1u, { 32, 0, 0, 0, 0, 0 } }, + { 2u, 2499904u, 6144u, 1536u, 4u, 1u, { 32, 48, 1, 1, 0, 0 } }, + { 2u, 2506048u, 64u, 16u, 1u, 1u, { 16, 0, 0, 0, 0, 0 } }, + { 2u, 2506112u, 9216u, 2304u, 4u, 1u, { 16, 16, 3, 3, 0, 0 } }, + { 2u, 2515328u, 64u, 16u, 1u, 1u, { 16, 0, 0, 0, 0, 0 } }, + { 2u, 2515392u, 9216u, 2304u, 4u, 1u, { 16, 16, 3, 3, 0, 0 } }, + { 2u, 2524608u, 512u, 128u, 1u, 1u, { 128, 0, 0, 0, 0, 0 } }, + { 2u, 2525120u, 65536u, 16384u, 4u, 1u, { 128, 128, 1, 1, 0, 0 } }, + { 2u, 2590656u, 512u, 128u, 1u, 1u, { 128, 0, 0, 0, 0, 0 } }, + { 2u, 2591168u, 4608u, 1152u, 4u, 1u, { 128, 1, 3, 3, 0, 0 } }, + { 2u, 2595776u, 1024u, 256u, 1u, 1u, { 256, 0, 0, 0, 0, 0 } }, + { 2u, 2596800u, 393216u, 98304u, 4u, 1u, { 256, 384, 1, 1, 0, 0 } }, + { 2u, 2990016u, 1024u, 256u, 1u, 1u, { 256, 0, 0, 0, 0, 0 } }, + { 2u, 2991040u, 393216u, 98304u, 4u, 1u, { 256, 384, 1, 1, 0, 0 } }, + { 2u, 3384256u, 512u, 128u, 1u, 1u, { 128, 0, 0, 0, 0, 0 } }, + { 2u, 3384768u, 4608u, 1152u, 4u, 1u, { 128, 1, 3, 3, 0, 0 } }, + { 2u, 3389376u, 1024u, 256u, 1u, 1u, { 256, 0, 0, 0, 0, 0 } }, + { 2u, 3390400u, 131072u, 32768u, 4u, 1u, { 256, 128, 1, 1, 0, 0 } }, + { 2u, 3521472u, 1024u, 256u, 1u, 1u, { 256, 0, 0, 0, 0, 0 } }, + { 2u, 3522496u, 50176u, 12544u, 4u, 1u, { 256, 1, 7, 7, 0, 0 } }, + { 2u, 3572672u, 512u, 128u, 1u, 1u, { 128, 0, 0, 0, 0, 0 } }, + { 2u, 3573184u, 131072u, 32768u, 4u, 1u, { 128, 256, 1, 1, 0, 0 } }, + { 2u, 3704256u, 512u, 128u, 1u, 1u, { 128, 0, 0, 0, 0, 0 } }, + { 2u, 3704768u, 4608u, 1152u, 4u, 1u, { 128, 1, 3, 3, 0, 0 } }, + { 2u, 3709376u, 64u, 16u, 4u, 1u, { 1, 16, 1, 1, 0, 0 } }, + { 2u, 3709440u, 256u, 64u, 1u, 1u, { 64, 0, 0, 0, 0, 0 } }, + { 2u, 3709696u, 147456u, 36864u, 4u, 1u, { 64, 64, 3, 3, 0, 0 } }, + { 2u, 3857152u, 256u, 64u, 1u, 1u, { 64, 0, 0, 0, 0, 0 } }, + { 2u, 3857408u, 147456u, 36864u, 4u, 1u, { 64, 64, 3, 3, 0, 0 } }, + { 2u, 4004864u, 256u, 64u, 1u, 1u, { 64, 0, 0, 0, 0, 0 } }, + { 2u, 4005120u, 16384u, 4096u, 4u, 1u, { 64, 64, 1, 1, 0, 0 } }, + { 2u, 4021504u, 256u, 64u, 1u, 1u, { 64, 0, 0, 0, 0, 0 } }, + { 2u, 4021760u, 294912u, 73728u, 4u, 1u, { 64, 128, 3, 3, 0, 0 } }, + { 2u, 4316672u, 256u, 64u, 1u, 1u, { 64, 0, 0, 0, 0, 0 } }, + { 2u, 4316928u, 147456u, 36864u, 4u, 1u, { 64, 64, 3, 3, 0, 0 } }, + { 2u, 4464384u, 256u, 64u, 1u, 1u, { 64, 0, 0, 0, 0, 0 } }, + { 2u, 4464640u, 16384u, 4096u, 4u, 1u, { 64, 64, 1, 1, 0, 0 } }, + { 2u, 4481024u, 256u, 64u, 1u, 1u, { 64, 0, 0, 0, 0, 0 } }, + { 2u, 4481280u, 589824u, 147456u, 4u, 1u, { 64, 256, 3, 3, 0, 0 } }, + { 2u, 5071104u, 256u, 64u, 1u, 1u, { 64, 0, 0, 0, 0, 0 } }, + { 2u, 5071360u, 147456u, 36864u, 4u, 1u, { 64, 64, 3, 3, 0, 0 } }, + { 2u, 5218816u, 256u, 64u, 1u, 1u, { 64, 0, 0, 0, 0, 0 } }, + { 2u, 5219072u, 16384u, 4096u, 4u, 1u, { 64, 64, 1, 1, 0, 0 } }, + { 2u, 5235456u, 256u, 64u, 1u, 1u, { 64, 0, 0, 0, 0, 0 } }, + { 2u, 5235712u, 2304u, 576u, 4u, 1u, { 64, 1, 3, 3, 0, 0 } }, + { 2u, 5238016u, 320u, 80u, 1u, 1u, { 80, 0, 0, 0, 0, 0 } }, + { 2u, 5238336u, 20480u, 5120u, 4u, 1u, { 80, 64, 1, 1, 0, 0 } }, + { 2u, 5258816u, 320u, 80u, 1u, 1u, { 80, 0, 0, 0, 0, 0 } }, + { 2u, 5259136u, 2880u, 720u, 4u, 1u, { 80, 1, 3, 3, 0, 0 } }, + { 2u, 5262016u, 320u, 80u, 1u, 1u, { 80, 0, 0, 0, 0, 0 } }, + { 2u, 5262336u, 25600u, 6400u, 4u, 1u, { 80, 80, 1, 1, 0, 0 } }, + { 2u, 5287936u, 320u, 80u, 1u, 1u, { 80, 0, 0, 0, 0, 0 } }, + { 2u, 5288256u, 25600u, 6400u, 4u, 1u, { 80, 80, 1, 1, 0, 0 } }, + { 2u, 5313856u, 512u, 128u, 1u, 1u, { 128, 0, 0, 0, 0, 0 } }, + { 2u, 5314368u, 4608u, 1152u, 4u, 1u, { 128, 1, 3, 3, 0, 0 } }, + { 2u, 5318976u, 320u, 80u, 1u, 1u, { 80, 0, 0, 0, 0, 0 } }, + { 2u, 5319296u, 40960u, 10240u, 4u, 1u, { 80, 128, 1, 1, 0, 0 } }, + { 2u, 5360256u, 320u, 80u, 1u, 1u, { 80, 0, 0, 0, 0, 0 } }, + { 2u, 5360576u, 2880u, 720u, 4u, 1u, { 80, 1, 3, 3, 0, 0 } }, + { 2u, 5363456u, 320u, 80u, 1u, 1u, { 80, 0, 0, 0, 0, 0 } }, + { 2u, 5363776u, 25600u, 6400u, 4u, 1u, { 80, 80, 1, 1, 0, 0 } }, + { 2u, 5389376u, 320u, 80u, 1u, 1u, { 80, 0, 0, 0, 0, 0 } }, + { 2u, 5389696u, 25600u, 6400u, 4u, 1u, { 80, 80, 1, 1, 0, 0 } }, + { 2u, 5415296u, 1024u, 256u, 1u, 1u, { 256, 0, 0, 0, 0, 0 } }, + { 2u, 5416320u, 9216u, 2304u, 4u, 1u, { 256, 1, 3, 3, 0, 0 } }, + { 2u, 5425536u, 320u, 80u, 1u, 1u, { 80, 0, 0, 0, 0, 0 } }, + { 2u, 5425856u, 81920u, 20480u, 4u, 1u, { 80, 256, 1, 1, 0, 0 } }, + { 2u, 5507776u, 320u, 80u, 1u, 1u, { 80, 0, 0, 0, 0, 0 } }, + { 2u, 5508096u, 2880u, 720u, 4u, 1u, { 80, 1, 3, 3, 0, 0 } }, + { 2u, 5510976u, 320u, 80u, 1u, 1u, { 80, 0, 0, 0, 0, 0 } }, + { 2u, 5511296u, 25600u, 6400u, 4u, 1u, { 80, 80, 1, 1, 0, 0 } }, + { 2u, 5536896u, 320u, 80u, 1u, 1u, { 80, 0, 0, 0, 0, 0 } }, + { 2u, 5537216u, 25600u, 6400u, 4u, 1u, { 80, 80, 1, 1, 0, 0 } }, + { 2u, 5562816u, 256u, 64u, 1u, 1u, { 64, 0, 0, 0, 0, 0 } }, + { 2u, 5563072u, 73728u, 18432u, 4u, 1u, { 64, 32, 3, 3, 0, 0 } }, + { 2u, 5636800u, 256u, 64u, 1u, 1u, { 64, 0, 0, 0, 0, 0 } }, + { 2u, 5637056u, 16384u, 4096u, 4u, 1u, { 64, 64, 1, 1, 0, 0 } }, + { 2u, 5653440u, 256u, 64u, 1u, 1u, { 64, 0, 0, 0, 0, 0 } }, + { 2u, 5653696u, 32768u, 8192u, 4u, 1u, { 64, 128, 1, 1, 0, 0 } }, + { 2u, 5686464u, 128u, 32u, 1u, 1u, { 32, 0, 0, 0, 0, 0 } }, + { 2u, 5686592u, 36864u, 9216u, 4u, 1u, { 32, 32, 3, 3, 0, 0 } }, + { 2u, 5723456u, 128u, 32u, 1u, 1u, { 32, 0, 0, 0, 0, 0 } }, + { 2u, 5723584u, 36864u, 9216u, 4u, 1u, { 32, 32, 3, 3, 0, 0 } }, + { 2u, 5760448u, 128u, 32u, 1u, 1u, { 32, 0, 0, 0, 0, 0 } }, + { 2u, 5760576u, 36864u, 9216u, 4u, 1u, { 32, 32, 3, 3, 0, 0 } }, + { 2u, 5797440u, 128u, 32u, 1u, 1u, { 32, 0, 0, 0, 0, 0 } }, + { 2u, 5797568u, 36864u, 9216u, 4u, 1u, { 32, 32, 3, 3, 0, 0 } }, + { 2u, 5834432u, 512u, 128u, 1u, 1u, { 128, 0, 0, 0, 0, 0 } }, + { 2u, 5834944u, 32768u, 8192u, 4u, 1u, { 128, 64, 1, 1, 0, 0 } }, + { 2u, 5867712u, 512u, 128u, 1u, 1u, { 128, 0, 0, 0, 0, 0 } }, + { 2u, 5868224u, 4608u, 1152u, 4u, 1u, { 128, 1, 3, 3, 0, 0 } }, + { 2u, 5872832u, 512u, 128u, 1u, 1u, { 128, 0, 0, 0, 0, 0 } }, + { 2u, 5873344u, 65536u, 16384u, 4u, 1u, { 128, 128, 1, 1, 0, 0 } }, + { 2u, 5938880u, 512u, 128u, 1u, 1u, { 128, 0, 0, 0, 0, 0 } }, + { 2u, 5939392u, 131072u, 32768u, 4u, 1u, { 128, 256, 1, 1, 0, 0 } }, + { 2u, 6070464u, 256u, 64u, 1u, 1u, { 64, 0, 0, 0, 0, 0 } }, + { 2u, 6070720u, 147456u, 36864u, 4u, 1u, { 64, 64, 3, 3, 0, 0 } }, + { 2u, 6218176u, 256u, 64u, 1u, 1u, { 64, 0, 0, 0, 0, 0 } }, + { 2u, 6218432u, 147456u, 36864u, 4u, 1u, { 64, 64, 3, 3, 0, 0 } }, + { 2u, 6365888u, 256u, 64u, 1u, 1u, { 64, 0, 0, 0, 0, 0 } }, + { 2u, 6366144u, 147456u, 36864u, 4u, 1u, { 64, 64, 3, 3, 0, 0 } }, + { 2u, 6513600u, 256u, 64u, 1u, 1u, { 64, 0, 0, 0, 0, 0 } }, + { 2u, 6513856u, 147456u, 36864u, 4u, 1u, { 64, 64, 3, 3, 0, 0 } }, + { 2u, 6661312u, 1024u, 256u, 1u, 1u, { 256, 0, 0, 0, 0, 0 } }, + { 2u, 6662336u, 131072u, 32768u, 4u, 1u, { 256, 128, 1, 1, 0, 0 } }, + { 2u, 6793408u, 1024u, 256u, 1u, 1u, { 256, 0, 0, 0, 0, 0 } }, + { 2u, 6794432u, 9216u, 2304u, 4u, 1u, { 256, 1, 3, 3, 0, 0 } }, + { 2u, 6803648u, 1024u, 256u, 1u, 1u, { 256, 0, 0, 0, 0, 0 } }, + { 2u, 6804672u, 262144u, 65536u, 4u, 1u, { 256, 256, 1, 1, 0, 0 } }, + { 2u, 7066816u, 1024u, 256u, 1u, 1u, { 256, 0, 0, 0, 0, 0 } }, + { 2u, 7067840u, 393216u, 98304u, 4u, 1u, { 256, 384, 1, 1, 0, 0 } }, + { 2u, 7461056u, 512u, 128u, 1u, 1u, { 128, 0, 0, 0, 0, 0 } }, + { 2u, 7461568u, 589824u, 147456u, 4u, 1u, { 128, 128, 3, 3, 0, 0 } }, + { 2u, 8051392u, 512u, 128u, 1u, 1u, { 128, 0, 0, 0, 0, 0 } }, + { 2u, 8051904u, 589824u, 147456u, 4u, 1u, { 128, 128, 3, 3, 0, 0 } }, + { 2u, 8641728u, 512u, 128u, 1u, 1u, { 128, 0, 0, 0, 0, 0 } }, + { 2u, 8642240u, 131072u, 32768u, 4u, 1u, { 128, 256, 1, 1, 0, 0 } }, + { 2u, 8773312u, 1024u, 256u, 1u, 1u, { 256, 0, 0, 0, 0, 0 } }, + { 2u, 8774336u, 524288u, 131072u, 4u, 1u, { 256, 512, 1, 1, 0, 0 } }, + { 2u, 9298624u, 16u, 2u, 1u, 2u, { 2, 0, 0, 0, 0, 0 } }, + { 2u, 9298688u, 16u, 2u, 1u, 2u, { 2, 0, 0, 0, 0, 0 } }, + { 2u, 9298752u, 16u, 2u, 1u, 2u, { 2, 0, 0, 0, 0, 0 } }, + { 2u, 9298816u, 16u, 2u, 1u, 2u, { 2, 0, 0, 0, 0, 0 } }, + { 2u, 9298880u, 16u, 2u, 1u, 2u, { 2, 0, 0, 0, 0, 0 } }, + { 2u, 9298944u, 24u, 3u, 1u, 2u, { 3, 0, 0, 0, 0, 0 } }, + { 2u, 9299008u, 16u, 2u, 1u, 2u, { 2, 0, 0, 0, 0, 0 } }, + { 2u, 9299072u, 16u, 2u, 1u, 2u, { 2, 0, 0, 0, 0, 0 } }, + { 3u, 0u, 6553600u, 1638400u, 4u, 1u, { 1, 16, 320, 320, 0, 0 } }, + { 3u, 6553600u, 6553600u, 1638400u, 4u, 1u, { 1, 16, 320, 320, 0, 0 } }, + { 3u, 13107200u, 6553600u, 1638400u, 4u, 1u, { 1, 16, 320, 320, 0, 0 } }, + { 3u, 0u, 3276800u, 819200u, 4u, 1u, { 1, 32, 160, 160, 0, 0 } }, + { 3u, 3276800u, 3276800u, 819200u, 4u, 1u, { 1, 32, 160, 160, 0, 0 } }, + { 3u, 6553600u, 3276800u, 819200u, 4u, 1u, { 1, 32, 160, 160, 0, 0 } }, + { 3u, 0u, 3276800u, 819200u, 4u, 1u, { 1, 32, 160, 160, 0, 0 } }, + { 3u, 3276800u, 3276800u, 819200u, 4u, 1u, { 1, 32, 160, 160, 0, 0 } }, + { 3u, 9830400u, 3276800u, 819200u, 4u, 1u, { 1, 32, 160, 160, 0, 0 } }, + { 3u, 0u, 1638400u, 409600u, 4u, 1u, { 1, 16, 160, 160, 0, 0 } }, + { 3u, 1638400u, 1638400u, 409600u, 4u, 1u, { 1, 16, 160, 160, 0, 0 } }, + { 3u, 3276800u, 1638400u, 409600u, 4u, 1u, { 1, 16, 160, 160, 0, 0 } }, + { 3u, 4915200u, 1638400u, 409600u, 4u, 1u, { 1, 16, 160, 160, 0, 0 } }, + { 3u, 9830400u, 1638400u, 409600u, 4u, 1u, { 1, 16, 160, 160, 0, 0 } }, + { 3u, 3276800u, 1638400u, 409600u, 4u, 1u, { 1, 16, 160, 160, 0, 0 } }, + { 3u, 4915200u, 1638400u, 409600u, 4u, 1u, { 1, 16, 160, 160, 0, 0 } }, + { 3u, 9830400u, 1638400u, 409600u, 4u, 1u, { 1, 16, 160, 160, 0, 0 } }, + { 3u, 3276800u, 1638400u, 409600u, 4u, 1u, { 1, 16, 160, 160, 0, 0 } }, + { 3u, 9830400u, 4915200u, 1228800u, 4u, 1u, { 1, 48, 160, 160, 0, 0 } }, + { 3u, 0u, 3276800u, 819200u, 4u, 1u, { 1, 32, 160, 160, 0, 0 } }, + { 3u, 3276800u, 3276800u, 819200u, 4u, 1u, { 1, 32, 160, 160, 0, 0 } }, + { 3u, 9830400u, 3276800u, 819200u, 4u, 1u, { 1, 32, 160, 160, 0, 0 } }, + { 3u, 0u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 1638400u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 3276800u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 0u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 1638400u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 3276800u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 0u, 819200u, 204800u, 4u, 1u, { 1, 32, 80, 80, 0, 0 } }, + { 3u, 819200u, 819200u, 204800u, 4u, 1u, { 1, 32, 80, 80, 0, 0 } }, + { 3u, 1638400u, 819200u, 204800u, 4u, 1u, { 1, 32, 80, 80, 0, 0 } }, + { 3u, 2457600u, 819200u, 204800u, 4u, 1u, { 1, 32, 80, 80, 0, 0 } }, + { 3u, 3276800u, 819200u, 204800u, 4u, 1u, { 1, 32, 80, 80, 0, 0 } }, + { 3u, 1638400u, 819200u, 204800u, 4u, 1u, { 1, 32, 80, 80, 0, 0 } }, + { 3u, 2457600u, 819200u, 204800u, 4u, 1u, { 1, 32, 80, 80, 0, 0 } }, + { 3u, 3276800u, 819200u, 204800u, 4u, 1u, { 1, 32, 80, 80, 0, 0 } }, + { 3u, 1638400u, 819200u, 204800u, 4u, 1u, { 1, 32, 80, 80, 0, 0 } }, + { 3u, 2457600u, 819200u, 204800u, 4u, 1u, { 1, 32, 80, 80, 0, 0 } }, + { 3u, 3276800u, 819200u, 204800u, 4u, 1u, { 1, 32, 80, 80, 0, 0 } }, + { 3u, 4096000u, 819200u, 204800u, 4u, 1u, { 1, 32, 80, 80, 0, 0 } }, + { 3u, 2457600u, 819200u, 204800u, 4u, 1u, { 1, 32, 80, 80, 0, 0 } }, + { 3u, 3276800u, 819200u, 204800u, 4u, 1u, { 1, 32, 80, 80, 0, 0 } }, + { 3u, 4096000u, 819200u, 204800u, 4u, 1u, { 1, 32, 80, 80, 0, 0 } }, + { 3u, 2457600u, 819200u, 204800u, 4u, 1u, { 1, 32, 80, 80, 0, 0 } }, + { 3u, 3276800u, 3276800u, 819200u, 4u, 1u, { 1, 128, 80, 80, 0, 0 } }, + { 3u, 0u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 1638400u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 3276800u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 0u, 3276800u, 819200u, 4u, 1u, { 1, 128, 80, 80, 0, 0 } }, + { 3u, 13107200u, 3276800u, 819200u, 4u, 1u, { 1, 128, 80, 80, 0, 0 } }, + { 3u, 16384000u, 3276800u, 819200u, 4u, 1u, { 1, 128, 80, 80, 0, 0 } }, + { 3u, 0u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 819200u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 0u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 1638400u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 0u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 409600u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 819200u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 1228800u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 1638400u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 819200u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 1228800u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 1638400u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 819200u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 1228800u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 1638400u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 2048000u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 1228800u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 1638400u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 2048000u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 1228800u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 1638400u, 1638400u, 409600u, 4u, 1u, { 1, 256, 40, 40, 0, 0 } }, + { 3u, 0u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 819200u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 1638400u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 0u, 1638400u, 409600u, 4u, 1u, { 1, 256, 40, 40, 0, 0 } }, + { 3u, 4915200u, 1638400u, 409600u, 4u, 1u, { 1, 256, 40, 40, 0, 0 } }, + { 3u, 13107200u, 1638400u, 409600u, 4u, 1u, { 1, 256, 40, 40, 0, 0 } }, + { 3u, 0u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 409600u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 0u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 819200u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 0u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 204800u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 409600u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 614400u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 819200u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 409600u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 614400u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 819200u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 409600u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 614400u, 614400u, 153600u, 4u, 1u, { 1, 384, 20, 20, 0, 0 } }, + { 3u, 0u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 409600u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 819200u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 0u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 204800u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 409600u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 0u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 204800u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 614400u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 2457600u, 819200u, 204800u, 4u, 1u, { 1, 512, 20, 20, 0, 0 } }, + { 3u, 0u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 409600u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 1228800u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 0u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 409600u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 2457600u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 0u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 204800u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 409600u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 2457600u, 409600u, 102400u, 4u, 1u, { 1, 2, 128, 400, 0, 0 } }, + { 3u, 409600u, 102400u, 25600u, 4u, 1u, { 1, 2, 32, 400, 0, 0 } }, + { 3u, 512000u, 102400u, 25600u, 4u, 1u, { 1, 2, 32, 400, 0, 0 } }, + { 3u, 614400u, 204800u, 51200u, 4u, 1u, { 1, 2, 64, 400, 0, 0 } }, + { 3u, 2457600u, 102400u, 25600u, 4u, 1u, { 1, 2, 400, 32, 0, 0 } }, + { 3u, 4915200u, 1280000u, 320000u, 4u, 1u, { 1, 2, 400, 400, 0, 0 } }, + { 3u, 13107200u, 1280000u, 320000u, 4u, 1u, { 1, 2, 400, 400, 0, 0 } }, + { 3u, 4915200u, 1280000u, 320000u, 4u, 1u, { 1, 2, 400, 400, 0, 0 } }, + { 3u, 13107200u, 1280000u, 320000u, 4u, 1u, { 1, 2, 400, 400, 0, 0 } }, + { 3u, 409600u, 204800u, 51200u, 4u, 1u, { 1, 2, 64, 400, 0, 0 } }, + { 3u, 2457600u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 409600u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 614400u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 409600u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 614400u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 409600u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 2457600u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 2867200u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 4915200u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 204800u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 614400u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 204800u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 2457600u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 0u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 409600u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 4915200u, 1638400u, 409600u, 4u, 1u, { 1, 256, 40, 40, 0, 0 } }, + { 3u, 13107200u, 2457600u, 614400u, 4u, 1u, { 1, 384, 40, 40, 0, 0 } }, + { 3u, 2457600u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 4915200u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 5734400u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 0u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 2457600u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 2867200u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 4915200u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 5324800u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 2867200u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 4915200u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 5324800u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 13107200u, 1228800u, 307200u, 4u, 1u, { 1, 192, 40, 40, 0, 0 } }, + { 3u, 2457600u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 4915200u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 5734400u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 13107200u, 3276800u, 819200u, 4u, 1u, { 1, 128, 80, 80, 0, 0 } }, + { 3u, 19660800u, 4915200u, 1228800u, 4u, 1u, { 1, 192, 80, 80, 0, 0 } }, + { 3u, 13107200u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 14745600u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 16384000u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 2457600u, 819200u, 204800u, 4u, 1u, { 1, 32, 80, 80, 0, 0 } }, + { 3u, 4915200u, 819200u, 204800u, 4u, 1u, { 1, 32, 80, 80, 0, 0 } }, + { 3u, 13107200u, 819200u, 204800u, 4u, 1u, { 1, 32, 80, 80, 0, 0 } }, + { 3u, 13926400u, 819200u, 204800u, 4u, 1u, { 1, 32, 80, 80, 0, 0 } }, + { 3u, 14745600u, 819200u, 204800u, 4u, 1u, { 1, 32, 80, 80, 0, 0 } }, + { 3u, 13107200u, 819200u, 204800u, 4u, 1u, { 1, 32, 80, 80, 0, 0 } }, + { 3u, 13926400u, 819200u, 204800u, 4u, 1u, { 1, 32, 80, 80, 0, 0 } }, + { 3u, 14745600u, 819200u, 204800u, 4u, 1u, { 1, 32, 80, 80, 0, 0 } }, + { 3u, 15564800u, 2457600u, 614400u, 4u, 1u, { 1, 96, 80, 80, 0, 0 } }, + { 3u, 13107200u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 14745600u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 16384000u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 0u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 2457600u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 2867200u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 13107200u, 1228800u, 307200u, 4u, 1u, { 1, 192, 40, 40, 0, 0 } }, + { 3u, 2457600u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 4915200u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 13107200u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 0u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 2457600u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 2867200u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 4915200u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 5324800u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 2867200u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 4915200u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 5324800u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 13107200u, 1228800u, 307200u, 4u, 1u, { 1, 192, 40, 40, 0, 0 } }, + { 3u, 2457600u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 4915200u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 13107200u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 2457600u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 4915200u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 13926400u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 0u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 2457600u, 614400u, 153600u, 4u, 1u, { 1, 384, 20, 20, 0, 0 } }, + { 3u, 0u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 2457600u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 2867200u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 0u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 204800u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 2457600u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 2662400u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 2867200u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 2457600u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 2867200u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 4915200u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 2457600u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 2867200u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 4915200u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 2457600u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 2662400u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 2867200u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 2457600u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 2662400u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 2867200u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 2457600u, 204800u, 51200u, 4u, 1u, { 1, 128, 20, 20, 0, 0 } }, + { 3u, 2662400u, 614400u, 153600u, 4u, 1u, { 1, 384, 20, 20, 0, 0 } }, + { 3u, 0u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 2457600u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 2867200u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 13926400u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 18022400u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 19660800u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 13926400u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 18022400u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 19660800u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 13926400u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 18022400u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 19660800u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 21299200u, 1638400u, 409600u, 4u, 1u, { 1, 64, 80, 80, 0, 0 } }, + { 3u, 18022400u, 2048000u, 512000u, 4u, 1u, { 1, 80, 80, 80, 0, 0 } }, + { 3u, 20070400u, 2048000u, 512000u, 4u, 1u, { 1, 80, 80, 80, 0, 0 } }, + { 3u, 22118400u, 2048000u, 512000u, 4u, 1u, { 1, 80, 80, 80, 0, 0 } }, + { 3u, 18022400u, 2048000u, 512000u, 4u, 1u, { 1, 80, 80, 80, 0, 0 } }, + { 3u, 20070400u, 2048000u, 512000u, 4u, 1u, { 1, 80, 80, 80, 0, 0 } }, + { 3u, 22118400u, 2048000u, 512000u, 4u, 1u, { 1, 80, 80, 80, 0, 0 } }, + { 3u, 18022400u, 2048000u, 512000u, 4u, 1u, { 1, 80, 80, 80, 0, 0 } }, + { 3u, 20070400u, 2048000u, 512000u, 4u, 1u, { 1, 80, 80, 80, 0, 0 } }, + { 3u, 22118400u, 2048000u, 512000u, 4u, 1u, { 1, 80, 80, 80, 0, 0 } }, + { 3u, 18022400u, 2048000u, 512000u, 4u, 1u, { 1, 80, 80, 80, 0, 0 } }, + { 3u, 20070400u, 3686400u, 921600u, 4u, 1u, { 1, 144, 80, 80, 0, 0 } }, + { 3u, 0u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 2457600u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 4915200u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 0u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 2457600u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 4915200u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 0u, 409600u, 102400u, 4u, 1u, { 1, 64, 40, 40, 0, 0 } }, + { 3u, 4915200u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 13926400u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 14745600u, 819200u, 204800u, 4u, 1u, { 1, 128, 40, 40, 0, 0 } }, + { 3u, 4915200u, 512000u, 128000u, 4u, 1u, { 1, 80, 40, 40, 0, 0 } }, + { 3u, 13926400u, 512000u, 128000u, 4u, 1u, { 1, 80, 40, 40, 0, 0 } }, + { 3u, 14438400u, 512000u, 128000u, 4u, 1u, { 1, 80, 40, 40, 0, 0 } }, + { 3u, 4915200u, 512000u, 128000u, 4u, 1u, { 1, 80, 40, 40, 0, 0 } }, + { 3u, 13926400u, 512000u, 128000u, 4u, 1u, { 1, 80, 40, 40, 0, 0 } }, + { 3u, 14438400u, 512000u, 128000u, 4u, 1u, { 1, 80, 40, 40, 0, 0 } }, + { 3u, 4915200u, 512000u, 128000u, 4u, 1u, { 1, 80, 40, 40, 0, 0 } }, + { 3u, 13926400u, 512000u, 128000u, 4u, 1u, { 1, 80, 40, 40, 0, 0 } }, + { 3u, 14438400u, 512000u, 128000u, 4u, 1u, { 1, 80, 40, 40, 0, 0 } }, + { 3u, 4915200u, 512000u, 128000u, 4u, 1u, { 1, 80, 40, 40, 0, 0 } }, + { 3u, 13926400u, 921600u, 230400u, 4u, 1u, { 1, 144, 40, 40, 0, 0 } }, + { 3u, 0u, 102400u, 25600u, 4u, 1u, { 1, 64, 20, 20, 0, 0 } }, + { 3u, 102400u, 102400u, 25600u, 4u, 1u, { 1, 64, 20, 20, 0, 0 } }, + { 3u, 204800u, 102400u, 25600u, 4u, 1u, { 1, 64, 20, 20, 0, 0 } }, + { 3u, 0u, 102400u, 25600u, 4u, 1u, { 1, 64, 20, 20, 0, 0 } }, + { 3u, 102400u, 102400u, 25600u, 4u, 1u, { 1, 64, 20, 20, 0, 0 } }, + { 3u, 204800u, 102400u, 25600u, 4u, 1u, { 1, 64, 20, 20, 0, 0 } }, + { 3u, 0u, 102400u, 25600u, 4u, 1u, { 1, 64, 20, 20, 0, 0 } }, + { 3u, 2457600u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 4915200u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 5324800u, 409600u, 102400u, 4u, 1u, { 1, 256, 20, 20, 0, 0 } }, + { 3u, 102400u, 128000u, 32000u, 4u, 1u, { 1, 80, 20, 20, 0, 0 } }, + { 3u, 230400u, 128000u, 32000u, 4u, 1u, { 1, 80, 20, 20, 0, 0 } }, + { 3u, 2457600u, 128000u, 32000u, 4u, 1u, { 1, 80, 20, 20, 0, 0 } }, + { 3u, 102400u, 128000u, 32000u, 4u, 1u, { 1, 80, 20, 20, 0, 0 } }, + { 3u, 230400u, 128000u, 32000u, 4u, 1u, { 1, 80, 20, 20, 0, 0 } }, + { 3u, 2457600u, 128000u, 32000u, 4u, 1u, { 1, 80, 20, 20, 0, 0 } }, + { 3u, 102400u, 128000u, 32000u, 4u, 1u, { 1, 80, 20, 20, 0, 0 } }, + { 3u, 230400u, 128000u, 32000u, 4u, 1u, { 1, 80, 20, 20, 0, 0 } }, + { 3u, 2457600u, 128000u, 32000u, 4u, 1u, { 1, 80, 20, 20, 0, 0 } }, + { 3u, 102400u, 128000u, 32000u, 4u, 1u, { 1, 80, 20, 20, 0, 0 } }, + { 3u, 2457600u, 230400u, 57600u, 4u, 1u, { 1, 144, 20, 20, 0, 0 } }, + { 3u, 24576000u, 3686400u, 921600u, 3u, 1u, { 1, 144, 6400, 0, 0, 0 } }, + { 3u, 14848000u, 921600u, 230400u, 3u, 1u, { 1, 144, 1600, 0, 0, 0 } }, + { 3u, 0u, 230400u, 57600u, 3u, 1u, { 1, 144, 400, 0, 0, 0 } }, + { 3u, 28262400u, 4838400u, 1209600u, 3u, 1u, { 1, 144, 8400, 0, 0, 0 } }, + { 3u, 23756800u, 2150400u, 537600u, 3u, 1u, { 1, 64, 8400, 0, 0, 0 } }, + { 3u, 33100800u, 2688000u, 672000u, 3u, 1u, { 1, 80, 8400, 0, 0, 0 } }, + { 3u, 25907200u, 2150400u, 537600u, 4u, 1u, { 1, 4, 16, 8400, 0, 0 } }, + { 3u, 23756800u, 2150400u, 537600u, 4u, 1u, { 1, 16, 4, 8400, 0, 0 } }, + { 3u, 25907200u, 2150400u, 537600u, 4u, 1u, { 1, 16, 4, 8400, 0, 0 } }, + { 3u, 0u, 134400u, 33600u, 4u, 1u, { 1, 1, 4, 8400, 0, 0 } }, + { 3u, 134400u, 134400u, 33600u, 3u, 1u, { 1, 4, 8400, 0, 0, 0 } }, + { 3u, 0u, 67200u, 16800u, 3u, 1u, { 1, 2, 8400, 0, 0, 0 } }, + { 3u, 67200u, 67200u, 16800u, 3u, 1u, { 1, 2, 8400, 0, 0, 0 } }, + { 3u, 134400u, 67200u, 16800u, 3u, 1u, { 1, 2, 8400, 0, 0, 0 } }, + { 3u, 0u, 67200u, 16800u, 3u, 1u, { 1, 2, 8400, 0, 0, 0 } }, + { 3u, 201600u, 134400u, 33600u, 3u, 1u, { 1, 4, 8400, 0, 0, 0 } }, + { 3u, 0u, 134400u, 33600u, 3u, 1u, { 1, 4, 8400, 0, 0, 0 } }, + { 3u, 23756800u, 2688000u, 672000u, 3u, 1u, { 1, 80, 8400, 0, 0, 0 } }, + { 3u, 26444800u, 2822400u, 705600u, 3u, 1u, { 1, 84, 8400, 0, 0, 0 } }, + { 3u, 29267200u, 2822400u, 705600u, 3u, 1u, { 1, 8400, 84, 0, 0, 0 } }, + { 3u, 0u, 134400u, 33600u, 3u, 1u, { 1, 8400, 4, 0, 0, 0 } }, + { 3u, 23756800u, 2688000u, 672000u, 3u, 1u, { 1, 8400, 80, 0, 0, 0 } }, + { 3u, 134400u, 33600u, 8400u, 2u, 1u, { 1, 8400, 0, 0, 0, 0 } }, + { 3u, 168000u, 1200u, 300u, 2u, 1u, { 1, 300, 0, 0, 0, 0 } }, + { 3u, 169216u, 2400u, 300u, 2u, 2u, { 1, 300, 0, 0, 0, 0 } }, + { 3u, 134400u, 2400u, 300u, 3u, 2u, { 1, 300, 1, 0, 0, 0 } }, + { 3u, 136832u, 9600u, 1200u, 3u, 2u, { 1, 300, 4, 0, 0, 0 } }, + { 3u, 146432u, 4800u, 1200u, 3u, 1u, { 1, 300, 4, 0, 0, 0 } }, + { 3u, 151232u, 192000u, 24000u, 3u, 2u, { 1, 300, 80, 0, 0, 0 } }, + { 3u, 0u, 96000u, 24000u, 3u, 1u, { 1, 300, 80, 0, 0, 0 } }, + { 3u, 151232u, 96000u, 24000u, 2u, 1u, { 1, 24000, 0, 0, 0, 0 } }, + { 3u, 0u, 1200u, 300u, 2u, 1u, { 1, 300, 0, 0, 0, 0 } }, + { 3u, 1216u, 2400u, 300u, 2u, 2u, { 1, 300, 0, 0, 0, 0 } }, + { 3u, 3648u, 2400u, 300u, 2u, 2u, { 1, 300, 0, 0, 0, 0 } }, + { 3u, 6080u, 2400u, 300u, 2u, 2u, { 1, 300, 0, 0, 0, 0 } }, + { 3u, 1216u, 2400u, 300u, 3u, 2u, { 1, 300, 1, 0, 0, 0 } }, + { 3u, 6080u, 9600u, 1200u, 3u, 2u, { 1, 300, 4, 0, 0, 0 } }, + { 3u, 15680u, 4800u, 1200u, 3u, 1u, { 1, 300, 4, 0, 0, 0 } }, + { 3u, 1216u, 1200u, 300u, 3u, 1u, { 1, 300, 1, 0, 0, 0 } }, + { 3u, 6080u, 2400u, 300u, 3u, 2u, { 1, 300, 1, 0, 0, 0 } }, + { 3u, 0u, 1200u, 300u, 3u, 1u, { 1, 300, 1, 0, 0, 0 } }, + { 3u, 2432u, 7200u, 1800u, 3u, 1u, { 1, 300, 6, 0, 0, 0 } }, +}; + +static const struct yr_node_desc yr_nodes[YR_NODE_COUNT] = { + { 0u, 1u, 3u, 1u, { 0u, 16u, 15u, 0u }, { 188u, 0u, 0u }, 1, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 1u, 2u, 1u, 1u, { 188u, 0u, 0u, 0u }, { 189u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 2u, 3u, 2u, 1u, { 188u, 189u, 0u, 0u }, { 190u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 3u, 1u, 3u, 1u, { 190u, 18u, 17u, 0u }, { 191u, 0u, 0u }, 1, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 4u, 2u, 1u, 1u, { 191u, 0u, 0u, 0u }, { 192u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 5u, 3u, 2u, 1u, { 191u, 192u, 0u, 0u }, { 193u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 6u, 1u, 3u, 1u, { 193u, 60u, 59u, 0u }, { 194u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 7u, 2u, 1u, 1u, { 194u, 0u, 0u, 0u }, { 195u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 8u, 3u, 2u, 1u, { 194u, 195u, 0u, 0u }, { 196u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 9u, 6u, 2u, 2u, { 196u, 181u, 0u, 0u }, { 197u, 198u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 10u, 1u, 3u, 1u, { 198u, 64u, 63u, 0u }, { 199u, 0u, 0u }, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 11u, 2u, 1u, 1u, { 199u, 0u, 0u, 0u }, { 200u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 12u, 3u, 2u, 1u, { 199u, 200u, 0u, 0u }, { 201u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 13u, 1u, 3u, 1u, { 201u, 66u, 65u, 0u }, { 202u, 0u, 0u }, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 14u, 2u, 1u, 1u, { 202u, 0u, 0u, 0u }, { 203u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 15u, 3u, 2u, 1u, { 202u, 203u, 0u, 0u }, { 204u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 16u, 5u, 2u, 1u, { 198u, 204u, 0u, 0u }, { 205u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 17u, 4u, 3u, 1u, { 197u, 198u, 205u, 0u }, { 206u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 18u, 1u, 3u, 1u, { 206u, 62u, 61u, 0u }, { 207u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 19u, 2u, 1u, 1u, { 207u, 0u, 0u, 0u }, { 208u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 20u, 3u, 2u, 1u, { 207u, 208u, 0u, 0u }, { 209u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 21u, 1u, 3u, 1u, { 209u, 135u, 134u, 0u }, { 210u, 0u, 0u }, 1, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 22u, 2u, 1u, 1u, { 210u, 0u, 0u, 0u }, { 211u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 23u, 3u, 2u, 1u, { 210u, 211u, 0u, 0u }, { 212u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 24u, 1u, 3u, 1u, { 212u, 137u, 136u, 0u }, { 213u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 25u, 2u, 1u, 1u, { 213u, 0u, 0u, 0u }, { 214u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 26u, 3u, 2u, 1u, { 213u, 214u, 0u, 0u }, { 215u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 27u, 6u, 2u, 2u, { 215u, 182u, 0u, 0u }, { 216u, 217u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 28u, 1u, 3u, 1u, { 217u, 141u, 140u, 0u }, { 218u, 0u, 0u }, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 29u, 2u, 1u, 1u, { 218u, 0u, 0u, 0u }, { 219u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 30u, 3u, 2u, 1u, { 218u, 219u, 0u, 0u }, { 220u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 31u, 1u, 3u, 1u, { 220u, 143u, 142u, 0u }, { 221u, 0u, 0u }, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 32u, 2u, 1u, 1u, { 221u, 0u, 0u, 0u }, { 222u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 33u, 3u, 2u, 1u, { 221u, 222u, 0u, 0u }, { 223u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 34u, 5u, 2u, 1u, { 217u, 223u, 0u, 0u }, { 224u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 35u, 1u, 3u, 1u, { 224u, 145u, 144u, 0u }, { 225u, 0u, 0u }, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 36u, 2u, 1u, 1u, { 225u, 0u, 0u, 0u }, { 226u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 37u, 3u, 2u, 1u, { 225u, 226u, 0u, 0u }, { 227u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 38u, 1u, 3u, 1u, { 227u, 147u, 146u, 0u }, { 228u, 0u, 0u }, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 39u, 2u, 1u, 1u, { 228u, 0u, 0u, 0u }, { 229u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 40u, 3u, 2u, 1u, { 228u, 229u, 0u, 0u }, { 230u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 41u, 5u, 2u, 1u, { 224u, 230u, 0u, 0u }, { 231u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 42u, 4u, 4u, 1u, { 216u, 217u, 224u, 231u }, { 232u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 43u, 1u, 3u, 1u, { 232u, 139u, 138u, 0u }, { 233u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 44u, 2u, 1u, 1u, { 233u, 0u, 0u, 0u }, { 234u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 45u, 3u, 2u, 1u, { 233u, 234u, 0u, 0u }, { 235u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 46u, 1u, 3u, 1u, { 235u, 149u, 148u, 0u }, { 236u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 47u, 2u, 1u, 1u, { 236u, 0u, 0u, 0u }, { 237u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 48u, 3u, 2u, 1u, { 236u, 237u, 0u, 0u }, { 238u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 49u, 1u, 3u, 1u, { 238u, 151u, 150u, 0u }, { 239u, 0u, 0u }, 128, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 50u, 1u, 3u, 1u, { 239u, 153u, 152u, 0u }, { 240u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 51u, 2u, 1u, 1u, { 240u, 0u, 0u, 0u }, { 241u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 52u, 3u, 2u, 1u, { 240u, 241u, 0u, 0u }, { 242u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 53u, 6u, 2u, 2u, { 242u, 183u, 0u, 0u }, { 243u, 244u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 54u, 1u, 3u, 1u, { 244u, 157u, 156u, 0u }, { 245u, 0u, 0u }, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 55u, 2u, 1u, 1u, { 245u, 0u, 0u, 0u }, { 246u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 56u, 3u, 2u, 1u, { 245u, 246u, 0u, 0u }, { 247u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 57u, 1u, 3u, 1u, { 247u, 159u, 158u, 0u }, { 248u, 0u, 0u }, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 58u, 2u, 1u, 1u, { 248u, 0u, 0u, 0u }, { 249u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 59u, 3u, 2u, 1u, { 248u, 249u, 0u, 0u }, { 250u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 60u, 5u, 2u, 1u, { 244u, 250u, 0u, 0u }, { 251u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 61u, 1u, 3u, 1u, { 251u, 161u, 160u, 0u }, { 252u, 0u, 0u }, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 62u, 2u, 1u, 1u, { 252u, 0u, 0u, 0u }, { 253u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 63u, 3u, 2u, 1u, { 252u, 253u, 0u, 0u }, { 254u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 64u, 1u, 3u, 1u, { 254u, 163u, 162u, 0u }, { 255u, 0u, 0u }, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 65u, 2u, 1u, 1u, { 255u, 0u, 0u, 0u }, { 256u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 66u, 3u, 2u, 1u, { 255u, 256u, 0u, 0u }, { 257u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 67u, 5u, 2u, 1u, { 251u, 257u, 0u, 0u }, { 258u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 68u, 4u, 4u, 1u, { 243u, 244u, 251u, 258u }, { 259u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 69u, 1u, 3u, 1u, { 259u, 155u, 154u, 0u }, { 260u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 70u, 2u, 1u, 1u, { 260u, 0u, 0u, 0u }, { 261u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 71u, 3u, 2u, 1u, { 260u, 261u, 0u, 0u }, { 262u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 72u, 1u, 3u, 1u, { 262u, 165u, 164u, 0u }, { 263u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 73u, 2u, 1u, 1u, { 263u, 0u, 0u, 0u }, { 264u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 74u, 3u, 2u, 1u, { 263u, 264u, 0u, 0u }, { 265u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 75u, 1u, 3u, 1u, { 265u, 167u, 166u, 0u }, { 266u, 0u, 0u }, 256, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 76u, 1u, 3u, 1u, { 266u, 169u, 168u, 0u }, { 267u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 77u, 2u, 1u, 1u, { 267u, 0u, 0u, 0u }, { 268u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 78u, 3u, 2u, 1u, { 267u, 268u, 0u, 0u }, { 269u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 79u, 6u, 2u, 2u, { 269u, 184u, 0u, 0u }, { 270u, 271u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 80u, 1u, 3u, 1u, { 271u, 173u, 172u, 0u }, { 272u, 0u, 0u }, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 81u, 2u, 1u, 1u, { 272u, 0u, 0u, 0u }, { 273u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 82u, 3u, 2u, 1u, { 272u, 273u, 0u, 0u }, { 274u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 83u, 1u, 3u, 1u, { 274u, 175u, 174u, 0u }, { 275u, 0u, 0u }, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 84u, 2u, 1u, 1u, { 275u, 0u, 0u, 0u }, { 276u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 85u, 3u, 2u, 1u, { 275u, 276u, 0u, 0u }, { 277u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 86u, 5u, 2u, 1u, { 271u, 277u, 0u, 0u }, { 278u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 87u, 4u, 3u, 1u, { 270u, 271u, 278u, 0u }, { 279u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 88u, 1u, 3u, 1u, { 279u, 171u, 170u, 0u }, { 280u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 89u, 2u, 1u, 1u, { 280u, 0u, 0u, 0u }, { 281u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 90u, 3u, 2u, 1u, { 280u, 281u, 0u, 0u }, { 282u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 91u, 1u, 3u, 1u, { 282u, 177u, 176u, 0u }, { 283u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 92u, 2u, 1u, 1u, { 283u, 0u, 0u, 0u }, { 284u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 93u, 3u, 2u, 1u, { 283u, 284u, 0u, 0u }, { 285u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 94u, 7u, 1u, 1u, { 285u, 0u, 0u, 0u }, { 286u, 0u, 0u }, 1, 5, 5, 1, 1, 2, 2, 2, 2, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 95u, 7u, 1u, 1u, { 286u, 0u, 0u, 0u }, { 287u, 0u, 0u }, 1, 5, 5, 1, 1, 2, 2, 2, 2, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 96u, 7u, 1u, 1u, { 287u, 0u, 0u, 0u }, { 288u, 0u, 0u }, 1, 5, 5, 1, 1, 2, 2, 2, 2, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 97u, 4u, 4u, 1u, { 285u, 286u, 287u, 288u }, { 289u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 98u, 1u, 3u, 1u, { 289u, 179u, 178u, 0u }, { 290u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 99u, 2u, 1u, 1u, { 290u, 0u, 0u, 0u }, { 291u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 100u, 3u, 2u, 1u, { 290u, 291u, 0u, 0u }, { 292u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 101u, 1u, 3u, 1u, { 292u, 26u, 25u, 0u }, { 293u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 102u, 2u, 1u, 1u, { 293u, 0u, 0u, 0u }, { 294u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 103u, 3u, 2u, 1u, { 293u, 294u, 0u, 0u }, { 295u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 104u, 6u, 2u, 2u, { 295u, 184u, 0u, 0u }, { 296u, 297u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 105u, 1u, 3u, 1u, { 297u, 24u, 23u, 0u }, { 298u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 106u, 11u, 2u, 1u, { 298u, 3u, 0u, 0u }, { 299u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 107u, 6u, 2u, 3u, { 299u, 185u, 0u, 0u }, { 300u, 301u, 302u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 2, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 108u, 12u, 1u, 1u, { 300u, 0u, 0u, 0u }, { 303u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 4u, { 0, 1, 3, 2, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 109u, 9u, 2u, 1u, { 303u, 301u, 0u, 0u }, { 304u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 110u, 3u, 2u, 1u, { 304u, 1u, 0u, 0u }, { 305u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 111u, 10u, 1u, 1u, { 305u, 0u, 0u, 0u }, { 306u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, -1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 112u, 12u, 1u, 1u, { 306u, 0u, 0u, 0u }, { 307u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 4u, { 0, 1, 3, 2, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 113u, 9u, 2u, 1u, { 302u, 307u, 0u, 0u }, { 308u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 114u, 11u, 2u, 1u, { 308u, 2u, 0u, 0u }, { 309u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 115u, 11u, 2u, 1u, { 302u, 2u, 0u, 0u }, { 310u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 116u, 1u, 3u, 1u, { 310u, 20u, 19u, 0u }, { 311u, 0u, 0u }, 128, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 117u, 5u, 2u, 1u, { 309u, 311u, 0u, 0u }, { 312u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 118u, 1u, 3u, 1u, { 312u, 22u, 21u, 0u }, { 313u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 119u, 5u, 2u, 1u, { 297u, 313u, 0u, 0u }, { 314u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 120u, 1u, 3u, 1u, { 314u, 30u, 29u, 0u }, { 315u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 121u, 2u, 1u, 1u, { 315u, 0u, 0u, 0u }, { 316u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 122u, 3u, 2u, 1u, { 315u, 316u, 0u, 0u }, { 317u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 123u, 1u, 3u, 1u, { 317u, 32u, 31u, 0u }, { 318u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 124u, 5u, 2u, 1u, { 314u, 318u, 0u, 0u }, { 319u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 125u, 4u, 2u, 1u, { 296u, 319u, 0u, 0u }, { 320u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 126u, 1u, 3u, 1u, { 320u, 28u, 27u, 0u }, { 321u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 127u, 2u, 1u, 1u, { 321u, 0u, 0u, 0u }, { 322u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 128u, 3u, 2u, 1u, { 321u, 322u, 0u, 0u }, { 323u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 129u, 8u, 3u, 1u, { 323u, 4294967295u, 4u, 0u }, { 324u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 1 }, + { 130u, 4u, 2u, 1u, { 324u, 262u, 0u, 0u }, { 325u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 131u, 1u, 3u, 1u, { 325u, 34u, 33u, 0u }, { 326u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 132u, 2u, 1u, 1u, { 326u, 0u, 0u, 0u }, { 327u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 133u, 3u, 2u, 1u, { 326u, 327u, 0u, 0u }, { 328u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 134u, 6u, 2u, 2u, { 328u, 183u, 0u, 0u }, { 329u, 330u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 135u, 1u, 3u, 1u, { 330u, 38u, 37u, 0u }, { 331u, 0u, 0u }, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 136u, 2u, 1u, 1u, { 331u, 0u, 0u, 0u }, { 332u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 137u, 3u, 2u, 1u, { 331u, 332u, 0u, 0u }, { 333u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 138u, 1u, 3u, 1u, { 333u, 40u, 39u, 0u }, { 334u, 0u, 0u }, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 139u, 2u, 1u, 1u, { 334u, 0u, 0u, 0u }, { 335u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 140u, 3u, 2u, 1u, { 334u, 335u, 0u, 0u }, { 336u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 141u, 4u, 3u, 1u, { 329u, 330u, 336u, 0u }, { 337u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 142u, 1u, 3u, 1u, { 337u, 36u, 35u, 0u }, { 338u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 143u, 2u, 1u, 1u, { 338u, 0u, 0u, 0u }, { 339u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 144u, 3u, 2u, 1u, { 338u, 339u, 0u, 0u }, { 340u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 145u, 8u, 3u, 1u, { 340u, 4294967295u, 4u, 0u }, { 341u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 1 }, + { 146u, 4u, 2u, 1u, { 341u, 235u, 0u, 0u }, { 342u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 147u, 1u, 3u, 1u, { 342u, 42u, 41u, 0u }, { 343u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 148u, 2u, 1u, 1u, { 343u, 0u, 0u, 0u }, { 344u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 149u, 3u, 2u, 1u, { 343u, 344u, 0u, 0u }, { 345u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 150u, 6u, 2u, 2u, { 345u, 182u, 0u, 0u }, { 346u, 347u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 151u, 1u, 3u, 1u, { 347u, 46u, 45u, 0u }, { 348u, 0u, 0u }, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 152u, 2u, 1u, 1u, { 348u, 0u, 0u, 0u }, { 349u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 153u, 3u, 2u, 1u, { 348u, 349u, 0u, 0u }, { 350u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 154u, 1u, 3u, 1u, { 350u, 48u, 47u, 0u }, { 351u, 0u, 0u }, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 155u, 2u, 1u, 1u, { 351u, 0u, 0u, 0u }, { 352u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 156u, 3u, 2u, 1u, { 351u, 352u, 0u, 0u }, { 353u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 157u, 4u, 3u, 1u, { 346u, 347u, 353u, 0u }, { 354u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 158u, 1u, 3u, 1u, { 354u, 44u, 43u, 0u }, { 355u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 159u, 2u, 1u, 1u, { 355u, 0u, 0u, 0u }, { 356u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 160u, 3u, 2u, 1u, { 355u, 356u, 0u, 0u }, { 357u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 161u, 1u, 3u, 1u, { 357u, 50u, 49u, 0u }, { 358u, 0u, 0u }, 1, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 162u, 2u, 1u, 1u, { 358u, 0u, 0u, 0u }, { 359u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 163u, 3u, 2u, 1u, { 358u, 359u, 0u, 0u }, { 360u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 164u, 4u, 2u, 1u, { 360u, 340u, 0u, 0u }, { 361u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 165u, 1u, 3u, 1u, { 361u, 52u, 51u, 0u }, { 362u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 166u, 2u, 1u, 1u, { 362u, 0u, 0u, 0u }, { 363u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 167u, 3u, 2u, 1u, { 362u, 363u, 0u, 0u }, { 364u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 168u, 6u, 2u, 2u, { 364u, 183u, 0u, 0u }, { 365u, 366u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 169u, 1u, 3u, 1u, { 366u, 56u, 55u, 0u }, { 367u, 0u, 0u }, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 170u, 2u, 1u, 1u, { 367u, 0u, 0u, 0u }, { 368u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 171u, 3u, 2u, 1u, { 367u, 368u, 0u, 0u }, { 369u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 172u, 1u, 3u, 1u, { 369u, 58u, 57u, 0u }, { 370u, 0u, 0u }, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 173u, 2u, 1u, 1u, { 370u, 0u, 0u, 0u }, { 371u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 174u, 3u, 2u, 1u, { 370u, 371u, 0u, 0u }, { 372u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 175u, 4u, 3u, 1u, { 365u, 366u, 372u, 0u }, { 373u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 176u, 1u, 3u, 1u, { 373u, 54u, 53u, 0u }, { 374u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 177u, 2u, 1u, 1u, { 374u, 0u, 0u, 0u }, { 375u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 178u, 3u, 2u, 1u, { 374u, 375u, 0u, 0u }, { 376u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 179u, 1u, 3u, 1u, { 376u, 68u, 67u, 0u }, { 377u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 180u, 2u, 1u, 1u, { 377u, 0u, 0u, 0u }, { 378u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 181u, 3u, 2u, 1u, { 377u, 378u, 0u, 0u }, { 379u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 182u, 1u, 3u, 1u, { 379u, 70u, 69u, 0u }, { 380u, 0u, 0u }, 128, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 183u, 4u, 2u, 1u, { 380u, 323u, 0u, 0u }, { 381u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 184u, 1u, 3u, 1u, { 381u, 72u, 71u, 0u }, { 382u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 185u, 2u, 1u, 1u, { 382u, 0u, 0u, 0u }, { 383u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 186u, 3u, 2u, 1u, { 382u, 383u, 0u, 0u }, { 384u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 187u, 6u, 2u, 2u, { 384u, 184u, 0u, 0u }, { 385u, 386u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 188u, 1u, 3u, 1u, { 386u, 76u, 75u, 0u }, { 387u, 0u, 0u }, 128, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 189u, 2u, 1u, 1u, { 387u, 0u, 0u, 0u }, { 388u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 190u, 3u, 2u, 1u, { 387u, 388u, 0u, 0u }, { 389u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 191u, 1u, 3u, 1u, { 389u, 78u, 77u, 0u }, { 390u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 192u, 2u, 1u, 1u, { 390u, 0u, 0u, 0u }, { 391u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 193u, 3u, 2u, 1u, { 390u, 391u, 0u, 0u }, { 392u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 194u, 1u, 3u, 1u, { 392u, 80u, 79u, 0u }, { 393u, 0u, 0u }, 256, 7, 7, 1, 1, 3, 3, 3, 3, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 195u, 2u, 1u, 1u, { 393u, 0u, 0u, 0u }, { 394u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 196u, 3u, 2u, 1u, { 393u, 394u, 0u, 0u }, { 395u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 197u, 1u, 3u, 1u, { 395u, 82u, 81u, 0u }, { 396u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 198u, 2u, 1u, 1u, { 396u, 0u, 0u, 0u }, { 397u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 199u, 3u, 2u, 1u, { 396u, 397u, 0u, 0u }, { 398u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 200u, 1u, 3u, 1u, { 398u, 84u, 83u, 0u }, { 399u, 0u, 0u }, 128, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 201u, 2u, 1u, 1u, { 399u, 0u, 0u, 0u }, { 400u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 202u, 3u, 2u, 1u, { 399u, 400u, 0u, 0u }, { 401u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 203u, 5u, 2u, 1u, { 386u, 401u, 0u, 0u }, { 402u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 204u, 4u, 3u, 1u, { 385u, 386u, 402u, 0u }, { 403u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 205u, 1u, 3u, 1u, { 403u, 74u, 73u, 0u }, { 404u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 206u, 2u, 1u, 1u, { 404u, 0u, 0u, 0u }, { 405u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 207u, 3u, 2u, 1u, { 404u, 405u, 0u, 0u }, { 406u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 208u, 1u, 3u, 1u, { 357u, 87u, 86u, 0u }, { 407u, 0u, 0u }, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 209u, 2u, 1u, 1u, { 407u, 0u, 0u, 0u }, { 408u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 210u, 3u, 2u, 1u, { 407u, 408u, 0u, 0u }, { 409u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 211u, 1u, 3u, 1u, { 409u, 89u, 88u, 0u }, { 410u, 0u, 0u }, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 212u, 2u, 1u, 1u, { 410u, 0u, 0u, 0u }, { 411u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 213u, 3u, 2u, 1u, { 410u, 411u, 0u, 0u }, { 412u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 214u, 1u, 3u, 1u, { 412u, 91u, 90u, 0u }, { 413u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 215u, 1u, 3u, 1u, { 357u, 105u, 104u, 0u }, { 414u, 0u, 0u }, 64, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 216u, 2u, 1u, 1u, { 414u, 0u, 0u, 0u }, { 415u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 217u, 3u, 2u, 1u, { 414u, 415u, 0u, 0u }, { 416u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 218u, 1u, 3u, 1u, { 416u, 107u, 106u, 0u }, { 417u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 219u, 2u, 1u, 1u, { 417u, 0u, 0u, 0u }, { 418u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 220u, 3u, 2u, 1u, { 417u, 418u, 0u, 0u }, { 419u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 221u, 1u, 3u, 1u, { 419u, 109u, 108u, 0u }, { 420u, 0u, 0u }, 80, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 222u, 2u, 1u, 1u, { 420u, 0u, 0u, 0u }, { 421u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 223u, 3u, 2u, 1u, { 420u, 421u, 0u, 0u }, { 422u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 224u, 1u, 3u, 1u, { 422u, 111u, 110u, 0u }, { 423u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 225u, 2u, 1u, 1u, { 423u, 0u, 0u, 0u }, { 424u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 226u, 3u, 2u, 1u, { 423u, 424u, 0u, 0u }, { 425u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 227u, 1u, 3u, 1u, { 425u, 113u, 112u, 0u }, { 426u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 228u, 4u, 2u, 1u, { 413u, 426u, 0u, 0u }, { 427u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 229u, 1u, 3u, 1u, { 376u, 93u, 92u, 0u }, { 428u, 0u, 0u }, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 230u, 2u, 1u, 1u, { 428u, 0u, 0u, 0u }, { 429u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 231u, 3u, 2u, 1u, { 428u, 429u, 0u, 0u }, { 430u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 232u, 1u, 3u, 1u, { 430u, 95u, 94u, 0u }, { 431u, 0u, 0u }, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 233u, 2u, 1u, 1u, { 431u, 0u, 0u, 0u }, { 432u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 234u, 3u, 2u, 1u, { 431u, 432u, 0u, 0u }, { 433u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 235u, 1u, 3u, 1u, { 433u, 97u, 96u, 0u }, { 434u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 236u, 1u, 3u, 1u, { 376u, 115u, 114u, 0u }, { 435u, 0u, 0u }, 128, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 237u, 2u, 1u, 1u, { 435u, 0u, 0u, 0u }, { 436u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 238u, 3u, 2u, 1u, { 435u, 436u, 0u, 0u }, { 437u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 239u, 1u, 3u, 1u, { 437u, 117u, 116u, 0u }, { 438u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 240u, 2u, 1u, 1u, { 438u, 0u, 0u, 0u }, { 439u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 241u, 3u, 2u, 1u, { 438u, 439u, 0u, 0u }, { 440u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 242u, 1u, 3u, 1u, { 440u, 119u, 118u, 0u }, { 441u, 0u, 0u }, 80, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 243u, 2u, 1u, 1u, { 441u, 0u, 0u, 0u }, { 442u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 244u, 3u, 2u, 1u, { 441u, 442u, 0u, 0u }, { 443u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 245u, 1u, 3u, 1u, { 443u, 121u, 120u, 0u }, { 444u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 246u, 2u, 1u, 1u, { 444u, 0u, 0u, 0u }, { 445u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 247u, 3u, 2u, 1u, { 444u, 445u, 0u, 0u }, { 446u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 248u, 1u, 3u, 1u, { 446u, 123u, 122u, 0u }, { 447u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 249u, 4u, 2u, 1u, { 434u, 447u, 0u, 0u }, { 448u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 250u, 1u, 3u, 1u, { 406u, 99u, 98u, 0u }, { 449u, 0u, 0u }, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 251u, 2u, 1u, 1u, { 449u, 0u, 0u, 0u }, { 450u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 252u, 3u, 2u, 1u, { 449u, 450u, 0u, 0u }, { 451u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 253u, 1u, 3u, 1u, { 451u, 101u, 100u, 0u }, { 452u, 0u, 0u }, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 254u, 2u, 1u, 1u, { 452u, 0u, 0u, 0u }, { 453u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 255u, 3u, 2u, 1u, { 452u, 453u, 0u, 0u }, { 454u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 256u, 1u, 3u, 1u, { 454u, 103u, 102u, 0u }, { 455u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 257u, 1u, 3u, 1u, { 406u, 125u, 124u, 0u }, { 456u, 0u, 0u }, 256, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 258u, 2u, 1u, 1u, { 456u, 0u, 0u, 0u }, { 457u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 259u, 3u, 2u, 1u, { 456u, 457u, 0u, 0u }, { 458u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 260u, 1u, 3u, 1u, { 458u, 127u, 126u, 0u }, { 459u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 261u, 2u, 1u, 1u, { 459u, 0u, 0u, 0u }, { 460u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 262u, 3u, 2u, 1u, { 459u, 460u, 0u, 0u }, { 461u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 263u, 1u, 3u, 1u, { 461u, 129u, 128u, 0u }, { 462u, 0u, 0u }, 80, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 264u, 2u, 1u, 1u, { 462u, 0u, 0u, 0u }, { 463u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 265u, 3u, 2u, 1u, { 462u, 463u, 0u, 0u }, { 464u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 266u, 1u, 3u, 1u, { 464u, 131u, 130u, 0u }, { 465u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 267u, 2u, 1u, 1u, { 465u, 0u, 0u, 0u }, { 466u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 268u, 3u, 2u, 1u, { 465u, 466u, 0u, 0u }, { 467u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 269u, 1u, 3u, 1u, { 467u, 133u, 132u, 0u }, { 468u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 270u, 4u, 2u, 1u, { 455u, 468u, 0u, 0u }, { 469u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 271u, 11u, 2u, 1u, { 427u, 12u, 0u, 0u }, { 470u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 272u, 11u, 2u, 1u, { 448u, 12u, 0u, 0u }, { 471u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 273u, 11u, 2u, 1u, { 469u, 12u, 0u, 0u }, { 472u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 274u, 4u, 3u, 1u, { 470u, 471u, 472u, 0u }, { 473u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 2, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 275u, 6u, 2u, 2u, { 473u, 186u, 0u, 0u }, { 474u, 475u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 276u, 11u, 2u, 1u, { 474u, 14u, 0u, 0u }, { 476u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 277u, 12u, 1u, 1u, { 476u, 0u, 0u, 0u }, { 477u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 4u, { 0, 2, 1, 3, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 278u, 10u, 1u, 1u, { 477u, 0u, 0u, 0u }, { 478u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 279u, 1u, 2u, 1u, { 478u, 85u, 0u, 0u }, { 479u, 0u, 0u }, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 280u, 11u, 2u, 1u, { 479u, 13u, 0u, 0u }, { 480u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 281u, 6u, 2u, 2u, { 480u, 180u, 0u, 0u }, { 481u, 482u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 282u, 13u, 2u, 1u, { 7u, 481u, 0u, 0u }, { 483u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 283u, 5u, 2u, 1u, { 7u, 482u, 0u, 0u }, { 484u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 284u, 4u, 2u, 1u, { 483u, 484u, 0u, 0u }, { 485u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 285u, 3u, 2u, 1u, { 485u, 8u, 0u, 0u }, { 486u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 286u, 2u, 1u, 1u, { 475u, 0u, 0u, 0u }, { 487u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 287u, 4u, 2u, 1u, { 486u, 487u, 0u, 0u }, { 488u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 288u, 12u, 1u, 1u, { 488u, 0u, 0u, 0u }, { 489u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 3u, { 0, 2, 1, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 289u, 6u, 2u, 2u, { 489u, 187u, 0u, 0u }, { 490u, 491u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, -1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 290u, 14u, 1u, 1u, { 491u, 0u, 0u, 0u }, { 492u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1u, { -1, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 0, 1, 1, 0, 0, 0 }, + { 291u, 15u, 2u, 2u, { 492u, 9u, 0u, 0u }, { 493u, 494u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, -1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 292u, 16u, 2u, 1u, { 494u, 10u, 0u, 0u }, { 495u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 293u, 17u, 2u, 1u, { 495u, 11u, 0u, 0u }, { 496u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 294u, 18u, 2u, 1u, { 490u, 496u, 0u, 0u }, { 497u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 295u, 17u, 2u, 1u, { 495u, 5u, 0u, 0u }, { 498u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 296u, 18u, 2u, 1u, { 491u, 498u, 0u, 0u }, { 499u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 297u, 19u, 1u, 1u, { 499u, 0u, 0u, 0u }, { 500u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 298u, 15u, 2u, 2u, { 500u, 9u, 0u, 0u }, { 501u, 502u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, -1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 299u, 20u, 2u, 1u, { 502u, 6u, 0u, 0u }, { 503u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 300u, 21u, 2u, 1u, { 502u, 6u, 0u, 0u }, { 504u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 301u, 16u, 2u, 1u, { 504u, 10u, 0u, 0u }, { 505u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 302u, 17u, 2u, 1u, { 505u, 11u, 0u, 0u }, { 506u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 303u, 18u, 2u, 1u, { 497u, 506u, 0u, 0u }, { 507u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 304u, 16u, 2u, 1u, { 501u, 10u, 0u, 0u }, { 508u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 305u, 16u, 2u, 1u, { 503u, 10u, 0u, 0u }, { 509u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, + { 306u, 22u, 1u, 1u, { 509u, 0u, 0u, 0u }, { 510u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 1, 0 }, + { 307u, 4u, 3u, 1u, { 507u, 508u, 510u, 0u }, { 511u, 0u, 0u }, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, -1, 0u, { 0, 0, 0, 0, 0, 0 }, 0u, { 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1, 0, 0, 0 }, +}; + +static const struct yr_pmc_stage_desc yr_pmc_stages[YR_PMC_STAGE_COUNT] = { + { 0u, 5u, 0u, 5u }, + { 6u, 90u, 6u, 90u }, + { 91u, 128u, 91u, 128u }, + { 129u, 207u, 129u, 207u }, + { 208u, 270u, 208u, 270u }, + { 271u, 288u, 271u, 288u }, + { 289u, 307u, 289u, 307u }, +}; + +#endif diff --git a/ported_models/yolov10n_hf_reference/manifests/board_full_summary_strict.json b/ported_models/yolov10n_hf_reference/manifests/board_full_summary_strict.json new file mode 100644 index 00000000..0d1943bf --- /dev/null +++ b/ported_models/yolov10n_hf_reference/manifests/board_full_summary_strict.json @@ -0,0 +1,230 @@ +{ + "schema_version": 1, + "status": "PASS", + "kind": "strict_full_graph_real_etsoc1_evidence", + "source": { + "repo": "onnx-community/yolov10n", + "revision": "57657320425ee34056408a57ad9d29c4d4815bd8", + "filename": "onnx/model.onnx", + "sha256": "a77dd863933f184a19e84361c64b788228a7c7dacc2c78939239a96ad3efca3b", + "license": "AGPL-3.0" + }, + "selection": { + "selector": "N000:N307", + "node_count": 308, + "output": { + "name": "output0", + "shape": [ + 1, + 300, + 6 + ] + } + }, + "device": { + "launcher_device": "soc1sim", + "hardware": true, + "runtime_backend": "DevicePcie", + "architecture": "ETSOC1", + "pcie_id": "1e0a:eb01", + "kernel_wait_seconds": 721.396, + "launcher_elapsed_seconds": 737 + }, + "compiler": { + "path": "/root/hf-hackathon-yolov10n-hf/ported_models/yolov10n_hf_reference/scripts/et_gcc_docker_wrapper.sh", + "version": "riscv64-unknown-elf-gcc (g5115c7e44) 15.2.0", + "docker_image": "et-gcc:24.04", + "docker_image_id": "sha256:6a811b9dcb63231c903d837fd969fbcee64aa2a6e8d685b8e0af3f9d92cfaa67" + }, + "comparison": { + "checkpoint_count": 16, + "checkpoint_pass_count": 16, + "direct_output_required": true, + "output_mismatch_count": 0, + "output_unexplained_mismatch_count": 0, + "output_max_abs": 0.00042724609375, + "output_max_rel": 7.514777829110251e-05, + "selected_anchor_overlap": 300, + "final_anchor_class_overlap": 300, + "actual_output_sha256": "6822b795131436aa691a8db77c345f601969ba3e532262a9991b7bfb0153ee3a", + "reference_output_sha256": "f70492b34e410bfd712604a2cb2c453aa5fe8fb0a4122ac3d8f8452db2f5990c" + }, + "real_image": { + "fixture": "coco_room_000139", + "input_sha256": "65afc38f381c09712cd9a6a78e8e7e9800c713d21679abee588b218a6a137c7b", + "display_threshold": 0.25, + "records_at_or_above_threshold": 10, + "top_record": { + "rank": 0, + "box_xyxy_canvas": [ + 4.693794250488281, + 266.9769287109375, + 155.10342407226562, + 375.75567626953125 + ], + "box_xyxy_original": [ + 4.693794250488281, + 186.9769287109375, + 155.10342407226562, + 295.75567626953125 + ], + "score": 0.899284303188324, + "class_id": 62 + }, + "class_labels": "numeric IDs only; the pinned ONNX does not provide human class names", + "postprocessing": "two-stage in-graph TopK/GatherElements; no NMS node" + }, + "pmc": { + "status": "PASS", + "scope": "seven disjoint intervals around ONNX nodes only", + "stages": [ + { + "name": "stem", + "first_node": "N000", + "last_node": "N005", + "minion_cycles": 15903571548, + "retired_instructions_thread_0": 4979902049, + "l2_miss_requests": 84187039, + "minion_icache_requests": 1175405374 + }, + { + "name": "backbone", + "first_node": "N006", + "last_node": "N090", + "minion_cycles": 150929916959, + "retired_instructions_thread_0": 47972885926, + "l2_miss_requests": 800627436, + "minion_icache_requests": 12048058410 + }, + { + "name": "sppf_psa", + "first_node": "N091", + "last_node": "N128", + "minion_cycles": 34916207890, + "retired_instructions_thread_0": 10503802878, + "l2_miss_requests": 211467863, + "minion_icache_requests": 2816053150 + }, + { + "name": "neck", + "first_node": "N129", + "last_node": "N207", + "minion_cycles": 124145435420, + "retired_instructions_thread_0": 39051788133, + "l2_miss_requests": 663706918, + "minion_icache_requests": 10039033455 + }, + { + "name": "three_scale_head", + "first_node": "N208", + "last_node": "N270", + "minion_cycles": 102548474177, + "retired_instructions_thread_0": 33249340626, + "l2_miss_requests": 534267342, + "minion_icache_requests": 8191298447 + }, + { + "name": "dfl_decode", + "first_node": "N271", + "last_node": "N288", + "minion_cycles": 1916064054, + "retired_instructions_thread_0": 431774722, + "l2_miss_requests": 5527353, + "minion_icache_requests": 135731010 + }, + { + "name": "topk_selection", + "first_node": "N289", + "last_node": "N307", + "minion_cycles": 675602783, + "retired_instructions_thread_0": 177731436, + "l2_miss_requests": 2164787, + "minion_icache_requests": 51979760 + } + ] + }, + "package_blobs": { + "inputs": { + "path": "local-artifacts/yolov10n_hf_reference/full_graph/coco_room_000139_full308_v3/inputs.bin", + "nbytes": 4915200, + "sha256": "65afc38f381c09712cd9a6a78e8e7e9800c713d21679abee588b218a6a137c7b" + }, + "weights": { + "path": "local-artifacts/yolov10n_hf_reference/full_graph/coco_room_000139_full308_v3/weights.bin", + "nbytes": 9299136, + "sha256": "b6d5aa13ef3238328c19ff0f646f72841bcf44dc1651383d089f0d57e37cf850" + }, + "goldens": { + "path": "local-artifacts/yolov10n_hf_reference/full_graph/coco_room_000139_full308_v3/goldens.bin", + "nbytes": 21594432, + "sha256": "e2c68a622fe151f29627b7b0ca62930e26ee7d86572f88e7bdd6a06aa0b85295" + } + }, + "artifacts": { + "full_manifest": { + "path": "local-artifacts/yolov10n_hf_reference/full_graph/coco_room_000139_full308_v3/slice_manifest.json", + "nbytes": 481575, + "sha256": "1e3d783a28b276f9650c8a5375ad617adee43c33c677c0e91acea5b0c3372b5a" + }, + "generated_header": { + "path": "local-artifacts/yolov10n_hf_reference/full_graph/coco_room_000139_full308_v3/slice_manifest.h", + "nbytes": 92881, + "sha256": "79be5b751842df025a3612ebb690e283813ea9ac8e373fd1bc44b706ca7a2a7e" + }, + "elf": { + "path": "local-artifacts/yolov10n_hf_reference/results/full_board/coco_room_000139_full308_v3/slice.elf", + "nbytes": 177864, + "sha256": "278e1769020036ee835ba8838c1595f9f48d54dcd7ec6ff2c743fbff688409cc" + }, + "build_record": { + "path": "local-artifacts/yolov10n_hf_reference/results/full_board/coco_room_000139_full308_v3/build_record.json", + "nbytes": 4030, + "sha256": "7989eb4cc83264e356bfe5f79f0e0cc0b53281efcc0f6a6a2783fbebba3bcd32" + }, + "dump": { + "path": "local-artifacts/yolov10n_hf_reference/results/full_board/coco_room_000139_full308_v3/dump.bin", + "nbytes": 36306944, + "sha256": "b4975576d65ad90adced01a8e6ad16e456a8a644213edd8452e41bd7a50b1202" + }, + "run_log": { + "path": "local-artifacts/yolov10n_hf_reference/results/full_board/coco_room_000139_full308_v3/run.log", + "nbytes": 5534, + "sha256": "304fe247ded872bb8c35205b61edc5bbc69347e97333e9116b08f495cbdde049" + }, + "run_result": { + "path": "local-artifacts/yolov10n_hf_reference/results/full_board/coco_room_000139_full308_v3/run_result.json", + "nbytes": 4404, + "sha256": "98643c1c9a819415558750c5e076b6660176133e6d2f703497802e7aaf4af11d" + }, + "device_evidence": { + "path": "local-artifacts/yolov10n_hf_reference/results/full_board/coco_room_000139_full308_v3/device_evidence.txt", + "nbytes": 319, + "sha256": "ca3dd65010d44550cffd9e2c059ad64fccb072a319ec6b0feb6fabb57bb4ee52" + }, + "full_compare": { + "path": "local-artifacts/yolov10n_hf_reference/results/full_board/coco_room_000139_full308_v3/full_compare.json", + "nbytes": 25535, + "sha256": "6462bda97290918cb73c62b1fc08943f28316a53b8eedb782ca55b2a6c8b5f31" + }, + "pmc_stages": { + "path": "local-artifacts/yolov10n_hf_reference/results/full_board/coco_room_000139_full308_v3/pmc_stages.json", + "nbytes": 175654, + "sha256": "c7c326d43f091781e4278e5354fa0d3775fedb6344bdb4c7127e23b82c990185" + }, + "detections": { + "path": "local-artifacts/yolov10n_hf_reference/results/full_board/coco_room_000139_full308_v3/detections.json", + "nbytes": 5416, + "sha256": "d8ca730e19181fbf33b2e9b5f27fb8c49c6f96bb110f773c91f0f46d643e3299" + }, + "instrumented_onnx": { + "path": "local-artifacts/yolov10n_hf_reference/full_graph/coco_room_000139_full308_v3/instrumented_full.onnx", + "nbytes": 9386974, + "sha256": "1ad416adc4528e37bece03d860dec1abf694006c55e31a57e41cf36b6030f77e" + }, + "launcher": { + "path": "/root/afonso/demo/host/erbium_soc1sim_argbuf_dynmem", + "nbytes": 98008, + "sha256": "fa2e63f1fd1e2cfd2dd6e29106e57de7d208c6e64c391098115235a7a98bfb5f" + } + } +} diff --git a/ported_models/yolov10n_hf_reference/manifests/full_execution.json b/ported_models/yolov10n_hf_reference/manifests/full_execution.json new file mode 100644 index 00000000..b49beb9e --- /dev/null +++ b/ported_models/yolov10n_hf_reference/manifests/full_execution.json @@ -0,0 +1,21387 @@ +{ + "schema_version": 2, + "manifest_kind": "full_graph_liveness", + "source": { + "repo": "onnx-community/yolov10n", + "revision": "57657320425ee34056408a57ad9d29c4d4815bd8", + "filename": "onnx/model.onnx", + "sha256": "a77dd863933f184a19e84361c64b788228a7c7dacc2c78939239a96ad3efca3b", + "license": "AGPL-3.0", + "instrumentation": "shape inference plus checkpoint graph outputs only", + "instrumented_sha256": "1ad416adc4528e37bece03d860dec1abf694006c55e31a57e41cf36b6030f77e" + }, + "reference": { + "runtime": "onnxruntime", + "runtime_version": "1.16.3", + "providers": [ + "CPUExecutionProvider" + ], + "graph_optimization": "ORT_DISABLE_ALL", + "intra_op_threads": 1, + "inter_op_threads": 1, + "input": { + "kind": "deterministic_lcg", + "formula": "(index * 1664525 + 1013904223) & 0x00ffffff, divided by 16777215" + } + }, + "selection": { + "selector": "N000:N307", + "first_node": "N000", + "last_node": "N307", + "inclusive": true, + "supported_ops": [ + "Conv", + "Sigmoid", + "Mul", + "Concat", + "Add", + "Split", + "MaxPool", + "Resize", + "MatMul", + "Softmax", + "Reshape", + "Transpose", + "Sub", + "ReduceMax", + "TopK", + "Unsqueeze", + "Tile", + "GatherElements", + "Flatten", + "Mod", + "Div", + "Cast" + ] + }, + "nodes": [ + { + "node_id": "N000", + "index": 0, + "name": "/model.0/conv/Conv", + "op_type": "Conv", + "inputs": [ + "images", + "model.0.conv.weight", + "model.0.conv.bias" + ], + "outputs": [ + "/model.0/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 2, + 2 + ] + } + }, + { + "node_id": "N001", + "index": 1, + "name": "/model.0/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.0/conv/Conv_output_0" + ], + "outputs": [ + "/model.0/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N002", + "index": 2, + "name": "/model.0/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.0/conv/Conv_output_0", + "/model.0/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.0/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N003", + "index": 3, + "name": "/model.1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.0/act/Mul_output_0", + "model.1.conv.weight", + "model.1.conv.bias" + ], + "outputs": [ + "/model.1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 2, + 2 + ] + } + }, + { + "node_id": "N004", + "index": 4, + "name": "/model.1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.1/conv/Conv_output_0" + ], + "outputs": [ + "/model.1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N005", + "index": 5, + "name": "/model.1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.1/conv/Conv_output_0", + "/model.1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N006", + "index": 6, + "name": "/model.2/cv1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.1/act/Mul_output_0", + "model.2.cv1.conv.weight", + "model.2.cv1.conv.bias" + ], + "outputs": [ + "/model.2/cv1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N007", + "index": 7, + "name": "/model.2/cv1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.2/cv1/conv/Conv_output_0" + ], + "outputs": [ + "/model.2/cv1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N008", + "index": 8, + "name": "/model.2/cv1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.2/cv1/conv/Conv_output_0", + "/model.2/cv1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.2/cv1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N009", + "index": 9, + "name": "/model.2/Split", + "op_type": "Split", + "inputs": [ + "/model.2/cv1/act/Mul_output_0", + "onnx::Split_225" + ], + "outputs": [ + "/model.2/Split_output_0", + "/model.2/Split_output_1" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N010", + "index": 10, + "name": "/model.2/m.0/cv1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.2/Split_output_1", + "model.2.m.0.cv1.conv.weight", + "model.2.m.0.cv1.conv.bias" + ], + "outputs": [ + "/model.2/m.0/cv1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N011", + "index": 11, + "name": "/model.2/m.0/cv1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.2/m.0/cv1/conv/Conv_output_0" + ], + "outputs": [ + "/model.2/m.0/cv1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N012", + "index": 12, + "name": "/model.2/m.0/cv1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.2/m.0/cv1/conv/Conv_output_0", + "/model.2/m.0/cv1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.2/m.0/cv1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N013", + "index": 13, + "name": "/model.2/m.0/cv2/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.2/m.0/cv1/act/Mul_output_0", + "model.2.m.0.cv2.conv.weight", + "model.2.m.0.cv2.conv.bias" + ], + "outputs": [ + "/model.2/m.0/cv2/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N014", + "index": 14, + "name": "/model.2/m.0/cv2/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.2/m.0/cv2/conv/Conv_output_0" + ], + "outputs": [ + "/model.2/m.0/cv2/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N015", + "index": 15, + "name": "/model.2/m.0/cv2/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.2/m.0/cv2/conv/Conv_output_0", + "/model.2/m.0/cv2/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.2/m.0/cv2/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N016", + "index": 16, + "name": "/model.2/m.0/Add", + "op_type": "Add", + "inputs": [ + "/model.2/Split_output_1", + "/model.2/m.0/cv2/act/Mul_output_0" + ], + "outputs": [ + "/model.2/m.0/Add_output_0" + ], + "attributes": {} + }, + { + "node_id": "N017", + "index": 17, + "name": "/model.2/Concat", + "op_type": "Concat", + "inputs": [ + "/model.2/Split_output_0", + "/model.2/Split_output_1", + "/model.2/m.0/Add_output_0" + ], + "outputs": [ + "/model.2/Concat_output_0" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N018", + "index": 18, + "name": "/model.2/cv2/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.2/Concat_output_0", + "model.2.cv2.conv.weight", + "model.2.cv2.conv.bias" + ], + "outputs": [ + "/model.2/cv2/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N019", + "index": 19, + "name": "/model.2/cv2/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.2/cv2/conv/Conv_output_0" + ], + "outputs": [ + "/model.2/cv2/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N020", + "index": 20, + "name": "/model.2/cv2/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.2/cv2/conv/Conv_output_0", + "/model.2/cv2/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.2/cv2/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N021", + "index": 21, + "name": "/model.3/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.2/cv2/act/Mul_output_0", + "model.3.conv.weight", + "model.3.conv.bias" + ], + "outputs": [ + "/model.3/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 2, + 2 + ] + } + }, + { + "node_id": "N022", + "index": 22, + "name": "/model.3/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.3/conv/Conv_output_0" + ], + "outputs": [ + "/model.3/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N023", + "index": 23, + "name": "/model.3/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.3/conv/Conv_output_0", + "/model.3/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.3/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N024", + "index": 24, + "name": "/model.4/cv1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.3/act/Mul_output_0", + "model.4.cv1.conv.weight", + "model.4.cv1.conv.bias" + ], + "outputs": [ + "/model.4/cv1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N025", + "index": 25, + "name": "/model.4/cv1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.4/cv1/conv/Conv_output_0" + ], + "outputs": [ + "/model.4/cv1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N026", + "index": 26, + "name": "/model.4/cv1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.4/cv1/conv/Conv_output_0", + "/model.4/cv1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.4/cv1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N027", + "index": 27, + "name": "/model.4/Split", + "op_type": "Split", + "inputs": [ + "/model.4/cv1/act/Mul_output_0", + "onnx::Split_245" + ], + "outputs": [ + "/model.4/Split_output_0", + "/model.4/Split_output_1" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N028", + "index": 28, + "name": "/model.4/m.0/cv1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.4/Split_output_1", + "model.4.m.0.cv1.conv.weight", + "model.4.m.0.cv1.conv.bias" + ], + "outputs": [ + "/model.4/m.0/cv1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N029", + "index": 29, + "name": "/model.4/m.0/cv1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.4/m.0/cv1/conv/Conv_output_0" + ], + "outputs": [ + "/model.4/m.0/cv1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N030", + "index": 30, + "name": "/model.4/m.0/cv1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.4/m.0/cv1/conv/Conv_output_0", + "/model.4/m.0/cv1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.4/m.0/cv1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N031", + "index": 31, + "name": "/model.4/m.0/cv2/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.4/m.0/cv1/act/Mul_output_0", + "model.4.m.0.cv2.conv.weight", + "model.4.m.0.cv2.conv.bias" + ], + "outputs": [ + "/model.4/m.0/cv2/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N032", + "index": 32, + "name": "/model.4/m.0/cv2/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.4/m.0/cv2/conv/Conv_output_0" + ], + "outputs": [ + "/model.4/m.0/cv2/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N033", + "index": 33, + "name": "/model.4/m.0/cv2/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.4/m.0/cv2/conv/Conv_output_0", + "/model.4/m.0/cv2/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.4/m.0/cv2/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N034", + "index": 34, + "name": "/model.4/m.0/Add", + "op_type": "Add", + "inputs": [ + "/model.4/Split_output_1", + "/model.4/m.0/cv2/act/Mul_output_0" + ], + "outputs": [ + "/model.4/m.0/Add_output_0" + ], + "attributes": {} + }, + { + "node_id": "N035", + "index": 35, + "name": "/model.4/m.1/cv1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.4/m.0/Add_output_0", + "model.4.m.1.cv1.conv.weight", + "model.4.m.1.cv1.conv.bias" + ], + "outputs": [ + "/model.4/m.1/cv1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N036", + "index": 36, + "name": "/model.4/m.1/cv1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.4/m.1/cv1/conv/Conv_output_0" + ], + "outputs": [ + "/model.4/m.1/cv1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N037", + "index": 37, + "name": "/model.4/m.1/cv1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.4/m.1/cv1/conv/Conv_output_0", + "/model.4/m.1/cv1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.4/m.1/cv1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N038", + "index": 38, + "name": "/model.4/m.1/cv2/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.4/m.1/cv1/act/Mul_output_0", + "model.4.m.1.cv2.conv.weight", + "model.4.m.1.cv2.conv.bias" + ], + "outputs": [ + "/model.4/m.1/cv2/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N039", + "index": 39, + "name": "/model.4/m.1/cv2/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.4/m.1/cv2/conv/Conv_output_0" + ], + "outputs": [ + "/model.4/m.1/cv2/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N040", + "index": 40, + "name": "/model.4/m.1/cv2/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.4/m.1/cv2/conv/Conv_output_0", + "/model.4/m.1/cv2/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.4/m.1/cv2/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N041", + "index": 41, + "name": "/model.4/m.1/Add", + "op_type": "Add", + "inputs": [ + "/model.4/m.0/Add_output_0", + "/model.4/m.1/cv2/act/Mul_output_0" + ], + "outputs": [ + "/model.4/m.1/Add_output_0" + ], + "attributes": {} + }, + { + "node_id": "N042", + "index": 42, + "name": "/model.4/Concat", + "op_type": "Concat", + "inputs": [ + "/model.4/Split_output_0", + "/model.4/Split_output_1", + "/model.4/m.0/Add_output_0", + "/model.4/m.1/Add_output_0" + ], + "outputs": [ + "/model.4/Concat_output_0" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N043", + "index": 43, + "name": "/model.4/cv2/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.4/Concat_output_0", + "model.4.cv2.conv.weight", + "model.4.cv2.conv.bias" + ], + "outputs": [ + "/model.4/cv2/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N044", + "index": 44, + "name": "/model.4/cv2/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.4/cv2/conv/Conv_output_0" + ], + "outputs": [ + "/model.4/cv2/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N045", + "index": 45, + "name": "/model.4/cv2/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.4/cv2/conv/Conv_output_0", + "/model.4/cv2/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.4/cv2/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N046", + "index": 46, + "name": "/model.5/cv1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.4/cv2/act/Mul_output_0", + "model.5.cv1.conv.weight", + "model.5.cv1.conv.bias" + ], + "outputs": [ + "/model.5/cv1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N047", + "index": 47, + "name": "/model.5/cv1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.5/cv1/conv/Conv_output_0" + ], + "outputs": [ + "/model.5/cv1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N048", + "index": 48, + "name": "/model.5/cv1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.5/cv1/conv/Conv_output_0", + "/model.5/cv1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.5/cv1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N049", + "index": 49, + "name": "/model.5/cv2/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.5/cv1/act/Mul_output_0", + "model.5.cv2.conv.weight", + "model.5.cv2.conv.bias" + ], + "outputs": [ + "/model.5/cv2/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 128, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 2, + 2 + ] + } + }, + { + "node_id": "N050", + "index": 50, + "name": "/model.6/cv1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.5/cv2/conv/Conv_output_0", + "model.6.cv1.conv.weight", + "model.6.cv1.conv.bias" + ], + "outputs": [ + "/model.6/cv1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N051", + "index": 51, + "name": "/model.6/cv1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.6/cv1/conv/Conv_output_0" + ], + "outputs": [ + "/model.6/cv1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N052", + "index": 52, + "name": "/model.6/cv1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.6/cv1/conv/Conv_output_0", + "/model.6/cv1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.6/cv1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N053", + "index": 53, + "name": "/model.6/Split", + "op_type": "Split", + "inputs": [ + "/model.6/cv1/act/Mul_output_0", + "onnx::Split_273" + ], + "outputs": [ + "/model.6/Split_output_0", + "/model.6/Split_output_1" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N054", + "index": 54, + "name": "/model.6/m.0/cv1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.6/Split_output_1", + "model.6.m.0.cv1.conv.weight", + "model.6.m.0.cv1.conv.bias" + ], + "outputs": [ + "/model.6/m.0/cv1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N055", + "index": 55, + "name": "/model.6/m.0/cv1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.6/m.0/cv1/conv/Conv_output_0" + ], + "outputs": [ + "/model.6/m.0/cv1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N056", + "index": 56, + "name": "/model.6/m.0/cv1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.6/m.0/cv1/conv/Conv_output_0", + "/model.6/m.0/cv1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.6/m.0/cv1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N057", + "index": 57, + "name": "/model.6/m.0/cv2/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.6/m.0/cv1/act/Mul_output_0", + "model.6.m.0.cv2.conv.weight", + "model.6.m.0.cv2.conv.bias" + ], + "outputs": [ + "/model.6/m.0/cv2/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N058", + "index": 58, + "name": "/model.6/m.0/cv2/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.6/m.0/cv2/conv/Conv_output_0" + ], + "outputs": [ + "/model.6/m.0/cv2/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N059", + "index": 59, + "name": "/model.6/m.0/cv2/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.6/m.0/cv2/conv/Conv_output_0", + "/model.6/m.0/cv2/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.6/m.0/cv2/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N060", + "index": 60, + "name": "/model.6/m.0/Add", + "op_type": "Add", + "inputs": [ + "/model.6/Split_output_1", + "/model.6/m.0/cv2/act/Mul_output_0" + ], + "outputs": [ + "/model.6/m.0/Add_output_0" + ], + "attributes": {} + }, + { + "node_id": "N061", + "index": 61, + "name": "/model.6/m.1/cv1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.6/m.0/Add_output_0", + "model.6.m.1.cv1.conv.weight", + "model.6.m.1.cv1.conv.bias" + ], + "outputs": [ + "/model.6/m.1/cv1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N062", + "index": 62, + "name": "/model.6/m.1/cv1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.6/m.1/cv1/conv/Conv_output_0" + ], + "outputs": [ + "/model.6/m.1/cv1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N063", + "index": 63, + "name": "/model.6/m.1/cv1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.6/m.1/cv1/conv/Conv_output_0", + "/model.6/m.1/cv1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.6/m.1/cv1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N064", + "index": 64, + "name": "/model.6/m.1/cv2/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.6/m.1/cv1/act/Mul_output_0", + "model.6.m.1.cv2.conv.weight", + "model.6.m.1.cv2.conv.bias" + ], + "outputs": [ + "/model.6/m.1/cv2/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N065", + "index": 65, + "name": "/model.6/m.1/cv2/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.6/m.1/cv2/conv/Conv_output_0" + ], + "outputs": [ + "/model.6/m.1/cv2/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N066", + "index": 66, + "name": "/model.6/m.1/cv2/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.6/m.1/cv2/conv/Conv_output_0", + "/model.6/m.1/cv2/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.6/m.1/cv2/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N067", + "index": 67, + "name": "/model.6/m.1/Add", + "op_type": "Add", + "inputs": [ + "/model.6/m.0/Add_output_0", + "/model.6/m.1/cv2/act/Mul_output_0" + ], + "outputs": [ + "/model.6/m.1/Add_output_0" + ], + "attributes": {} + }, + { + "node_id": "N068", + "index": 68, + "name": "/model.6/Concat", + "op_type": "Concat", + "inputs": [ + "/model.6/Split_output_0", + "/model.6/Split_output_1", + "/model.6/m.0/Add_output_0", + "/model.6/m.1/Add_output_0" + ], + "outputs": [ + "/model.6/Concat_output_0" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N069", + "index": 69, + "name": "/model.6/cv2/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.6/Concat_output_0", + "model.6.cv2.conv.weight", + "model.6.cv2.conv.bias" + ], + "outputs": [ + "/model.6/cv2/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N070", + "index": 70, + "name": "/model.6/cv2/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.6/cv2/conv/Conv_output_0" + ], + "outputs": [ + "/model.6/cv2/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N071", + "index": 71, + "name": "/model.6/cv2/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.6/cv2/conv/Conv_output_0", + "/model.6/cv2/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.6/cv2/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N072", + "index": 72, + "name": "/model.7/cv1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.6/cv2/act/Mul_output_0", + "model.7.cv1.conv.weight", + "model.7.cv1.conv.bias" + ], + "outputs": [ + "/model.7/cv1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N073", + "index": 73, + "name": "/model.7/cv1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.7/cv1/conv/Conv_output_0" + ], + "outputs": [ + "/model.7/cv1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N074", + "index": 74, + "name": "/model.7/cv1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.7/cv1/conv/Conv_output_0", + "/model.7/cv1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.7/cv1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N075", + "index": 75, + "name": "/model.7/cv2/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.7/cv1/act/Mul_output_0", + "model.7.cv2.conv.weight", + "model.7.cv2.conv.bias" + ], + "outputs": [ + "/model.7/cv2/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 256, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 2, + 2 + ] + } + }, + { + "node_id": "N076", + "index": 76, + "name": "/model.8/cv1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.7/cv2/conv/Conv_output_0", + "model.8.cv1.conv.weight", + "model.8.cv1.conv.bias" + ], + "outputs": [ + "/model.8/cv1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N077", + "index": 77, + "name": "/model.8/cv1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.8/cv1/conv/Conv_output_0" + ], + "outputs": [ + "/model.8/cv1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N078", + "index": 78, + "name": "/model.8/cv1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.8/cv1/conv/Conv_output_0", + "/model.8/cv1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.8/cv1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N079", + "index": 79, + "name": "/model.8/Split", + "op_type": "Split", + "inputs": [ + "/model.8/cv1/act/Mul_output_0", + "onnx::Split_301" + ], + "outputs": [ + "/model.8/Split_output_0", + "/model.8/Split_output_1" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N080", + "index": 80, + "name": "/model.8/m.0/cv1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.8/Split_output_1", + "model.8.m.0.cv1.conv.weight", + "model.8.m.0.cv1.conv.bias" + ], + "outputs": [ + "/model.8/m.0/cv1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N081", + "index": 81, + "name": "/model.8/m.0/cv1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.8/m.0/cv1/conv/Conv_output_0" + ], + "outputs": [ + "/model.8/m.0/cv1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N082", + "index": 82, + "name": "/model.8/m.0/cv1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.8/m.0/cv1/conv/Conv_output_0", + "/model.8/m.0/cv1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.8/m.0/cv1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N083", + "index": 83, + "name": "/model.8/m.0/cv2/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.8/m.0/cv1/act/Mul_output_0", + "model.8.m.0.cv2.conv.weight", + "model.8.m.0.cv2.conv.bias" + ], + "outputs": [ + "/model.8/m.0/cv2/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N084", + "index": 84, + "name": "/model.8/m.0/cv2/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.8/m.0/cv2/conv/Conv_output_0" + ], + "outputs": [ + "/model.8/m.0/cv2/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N085", + "index": 85, + "name": "/model.8/m.0/cv2/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.8/m.0/cv2/conv/Conv_output_0", + "/model.8/m.0/cv2/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.8/m.0/cv2/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N086", + "index": 86, + "name": "/model.8/m.0/Add", + "op_type": "Add", + "inputs": [ + "/model.8/Split_output_1", + "/model.8/m.0/cv2/act/Mul_output_0" + ], + "outputs": [ + "/model.8/m.0/Add_output_0" + ], + "attributes": {} + }, + { + "node_id": "N087", + "index": 87, + "name": "/model.8/Concat", + "op_type": "Concat", + "inputs": [ + "/model.8/Split_output_0", + "/model.8/Split_output_1", + "/model.8/m.0/Add_output_0" + ], + "outputs": [ + "/model.8/Concat_output_0" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N088", + "index": 88, + "name": "/model.8/cv2/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.8/Concat_output_0", + "model.8.cv2.conv.weight", + "model.8.cv2.conv.bias" + ], + "outputs": [ + "/model.8/cv2/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N089", + "index": 89, + "name": "/model.8/cv2/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.8/cv2/conv/Conv_output_0" + ], + "outputs": [ + "/model.8/cv2/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N090", + "index": 90, + "name": "/model.8/cv2/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.8/cv2/conv/Conv_output_0", + "/model.8/cv2/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.8/cv2/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N091", + "index": 91, + "name": "/model.9/cv1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.8/cv2/act/Mul_output_0", + "model.9.cv1.conv.weight", + "model.9.cv1.conv.bias" + ], + "outputs": [ + "/model.9/cv1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N092", + "index": 92, + "name": "/model.9/cv1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.9/cv1/conv/Conv_output_0" + ], + "outputs": [ + "/model.9/cv1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N093", + "index": 93, + "name": "/model.9/cv1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.9/cv1/conv/Conv_output_0", + "/model.9/cv1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.9/cv1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N094", + "index": 94, + "name": "/model.9/m/MaxPool", + "op_type": "MaxPool", + "inputs": [ + "/model.9/cv1/act/Mul_output_0" + ], + "outputs": [ + "/model.9/m/MaxPool_output_0" + ], + "attributes": { + "ceil_mode": 0, + "dilations": [ + 1, + 1 + ], + "kernel_shape": [ + 5, + 5 + ], + "pads": [ + 2, + 2, + 2, + 2 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N095", + "index": 95, + "name": "/model.9/m_1/MaxPool", + "op_type": "MaxPool", + "inputs": [ + "/model.9/m/MaxPool_output_0" + ], + "outputs": [ + "/model.9/m_1/MaxPool_output_0" + ], + "attributes": { + "ceil_mode": 0, + "dilations": [ + 1, + 1 + ], + "kernel_shape": [ + 5, + 5 + ], + "pads": [ + 2, + 2, + 2, + 2 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N096", + "index": 96, + "name": "/model.9/m_2/MaxPool", + "op_type": "MaxPool", + "inputs": [ + "/model.9/m_1/MaxPool_output_0" + ], + "outputs": [ + "/model.9/m_2/MaxPool_output_0" + ], + "attributes": { + "ceil_mode": 0, + "dilations": [ + 1, + 1 + ], + "kernel_shape": [ + 5, + 5 + ], + "pads": [ + 2, + 2, + 2, + 2 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N097", + "index": 97, + "name": "/model.9/Concat", + "op_type": "Concat", + "inputs": [ + "/model.9/cv1/act/Mul_output_0", + "/model.9/m/MaxPool_output_0", + "/model.9/m_1/MaxPool_output_0", + "/model.9/m_2/MaxPool_output_0" + ], + "outputs": [ + "/model.9/Concat_output_0" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N098", + "index": 98, + "name": "/model.9/cv2/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.9/Concat_output_0", + "model.9.cv2.conv.weight", + "model.9.cv2.conv.bias" + ], + "outputs": [ + "/model.9/cv2/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N099", + "index": 99, + "name": "/model.9/cv2/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.9/cv2/conv/Conv_output_0" + ], + "outputs": [ + "/model.9/cv2/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N100", + "index": 100, + "name": "/model.9/cv2/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.9/cv2/conv/Conv_output_0", + "/model.9/cv2/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.9/cv2/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N101", + "index": 101, + "name": "/model.10/cv1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.9/cv2/act/Mul_output_0", + "model.10.cv1.conv.weight", + "model.10.cv1.conv.bias" + ], + "outputs": [ + "/model.10/cv1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N102", + "index": 102, + "name": "/model.10/cv1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.10/cv1/conv/Conv_output_0" + ], + "outputs": [ + "/model.10/cv1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N103", + "index": 103, + "name": "/model.10/cv1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.10/cv1/conv/Conv_output_0", + "/model.10/cv1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.10/cv1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N104", + "index": 104, + "name": "/model.10/Split", + "op_type": "Split", + "inputs": [ + "/model.10/cv1/act/Mul_output_0", + "onnx::Split_301" + ], + "outputs": [ + "/model.10/Split_output_0", + "/model.10/Split_output_1" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N105", + "index": 105, + "name": "/model.10/attn/qkv/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.10/Split_output_1", + "model.10.attn.qkv.conv.weight", + "model.10.attn.qkv.conv.bias" + ], + "outputs": [ + "/model.10/attn/qkv/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N106", + "index": 106, + "name": "/model.10/attn/Reshape", + "op_type": "Reshape", + "inputs": [ + "/model.10/attn/qkv/conv/Conv_output_0", + "/model.10/attn/Constant_output_0" + ], + "outputs": [ + "/model.10/attn/Reshape_output_0" + ], + "attributes": {} + }, + { + "node_id": "N107", + "index": 107, + "name": "/model.10/attn/Split", + "op_type": "Split", + "inputs": [ + "/model.10/attn/Reshape_output_0", + "onnx::Split_347" + ], + "outputs": [ + "/model.10/attn/Split_output_0", + "/model.10/attn/Split_output_1", + "/model.10/attn/Split_output_2" + ], + "attributes": { + "axis": 2 + } + }, + { + "node_id": "N108", + "index": 108, + "name": "/model.10/attn/Transpose", + "op_type": "Transpose", + "inputs": [ + "/model.10/attn/Split_output_0" + ], + "outputs": [ + "/model.10/attn/Transpose_output_0" + ], + "attributes": { + "perm": [ + 0, + 1, + 3, + 2 + ] + } + }, + { + "node_id": "N109", + "index": 109, + "name": "/model.10/attn/MatMul", + "op_type": "MatMul", + "inputs": [ + "/model.10/attn/Transpose_output_0", + "/model.10/attn/Split_output_1" + ], + "outputs": [ + "/model.10/attn/MatMul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N110", + "index": 110, + "name": "/model.10/attn/Mul", + "op_type": "Mul", + "inputs": [ + "/model.10/attn/MatMul_output_0", + "/model.10/attn/Constant_1_output_0" + ], + "outputs": [ + "/model.10/attn/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N111", + "index": 111, + "name": "/model.10/attn/Softmax", + "op_type": "Softmax", + "inputs": [ + "/model.10/attn/Mul_output_0" + ], + "outputs": [ + "/model.10/attn/Softmax_output_0" + ], + "attributes": { + "axis": -1 + } + }, + { + "node_id": "N112", + "index": 112, + "name": "/model.10/attn/Transpose_1", + "op_type": "Transpose", + "inputs": [ + "/model.10/attn/Softmax_output_0" + ], + "outputs": [ + "/model.10/attn/Transpose_1_output_0" + ], + "attributes": { + "perm": [ + 0, + 1, + 3, + 2 + ] + } + }, + { + "node_id": "N113", + "index": 113, + "name": "/model.10/attn/MatMul_1", + "op_type": "MatMul", + "inputs": [ + "/model.10/attn/Split_output_2", + "/model.10/attn/Transpose_1_output_0" + ], + "outputs": [ + "/model.10/attn/MatMul_1_output_0" + ], + "attributes": {} + }, + { + "node_id": "N114", + "index": 114, + "name": "/model.10/attn/Reshape_1", + "op_type": "Reshape", + "inputs": [ + "/model.10/attn/MatMul_1_output_0", + "/model.10/attn/Constant_2_output_0" + ], + "outputs": [ + "/model.10/attn/Reshape_1_output_0" + ], + "attributes": {} + }, + { + "node_id": "N115", + "index": 115, + "name": "/model.10/attn/Reshape_2", + "op_type": "Reshape", + "inputs": [ + "/model.10/attn/Split_output_2", + "/model.10/attn/Constant_2_output_0" + ], + "outputs": [ + "/model.10/attn/Reshape_2_output_0" + ], + "attributes": {} + }, + { + "node_id": "N116", + "index": 116, + "name": "/model.10/attn/pe/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.10/attn/Reshape_2_output_0", + "model.10.attn.pe.conv.weight", + "model.10.attn.pe.conv.bias" + ], + "outputs": [ + "/model.10/attn/pe/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 128, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N117", + "index": 117, + "name": "/model.10/attn/Add", + "op_type": "Add", + "inputs": [ + "/model.10/attn/Reshape_1_output_0", + "/model.10/attn/pe/conv/Conv_output_0" + ], + "outputs": [ + "/model.10/attn/Add_output_0" + ], + "attributes": {} + }, + { + "node_id": "N118", + "index": 118, + "name": "/model.10/attn/proj/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.10/attn/Add_output_0", + "model.10.attn.proj.conv.weight", + "model.10.attn.proj.conv.bias" + ], + "outputs": [ + "/model.10/attn/proj/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N119", + "index": 119, + "name": "/model.10/Add", + "op_type": "Add", + "inputs": [ + "/model.10/Split_output_1", + "/model.10/attn/proj/conv/Conv_output_0" + ], + "outputs": [ + "/model.10/Add_output_0" + ], + "attributes": {} + }, + { + "node_id": "N120", + "index": 120, + "name": "/model.10/ffn/ffn.0/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.10/Add_output_0", + "model.10.ffn.0.conv.weight", + "model.10.ffn.0.conv.bias" + ], + "outputs": [ + "/model.10/ffn/ffn.0/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N121", + "index": 121, + "name": "/model.10/ffn/ffn.0/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.10/ffn/ffn.0/conv/Conv_output_0" + ], + "outputs": [ + "/model.10/ffn/ffn.0/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N122", + "index": 122, + "name": "/model.10/ffn/ffn.0/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.10/ffn/ffn.0/conv/Conv_output_0", + "/model.10/ffn/ffn.0/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.10/ffn/ffn.0/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N123", + "index": 123, + "name": "/model.10/ffn/ffn.1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.10/ffn/ffn.0/act/Mul_output_0", + "model.10.ffn.1.conv.weight", + "model.10.ffn.1.conv.bias" + ], + "outputs": [ + "/model.10/ffn/ffn.1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N124", + "index": 124, + "name": "/model.10/Add_1", + "op_type": "Add", + "inputs": [ + "/model.10/Add_output_0", + "/model.10/ffn/ffn.1/conv/Conv_output_0" + ], + "outputs": [ + "/model.10/Add_1_output_0" + ], + "attributes": {} + }, + { + "node_id": "N125", + "index": 125, + "name": "/model.10/Concat", + "op_type": "Concat", + "inputs": [ + "/model.10/Split_output_0", + "/model.10/Add_1_output_0" + ], + "outputs": [ + "/model.10/Concat_output_0" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N126", + "index": 126, + "name": "/model.10/cv2/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.10/Concat_output_0", + "model.10.cv2.conv.weight", + "model.10.cv2.conv.bias" + ], + "outputs": [ + "/model.10/cv2/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N127", + "index": 127, + "name": "/model.10/cv2/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.10/cv2/conv/Conv_output_0" + ], + "outputs": [ + "/model.10/cv2/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N128", + "index": 128, + "name": "/model.10/cv2/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.10/cv2/conv/Conv_output_0", + "/model.10/cv2/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.10/cv2/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N129", + "index": 129, + "name": "/model.11/Resize", + "op_type": "Resize", + "inputs": [ + "/model.10/cv2/act/Mul_output_0", + "", + "/model.11/Constant_output_0" + ], + "outputs": [ + "/model.11/Resize_output_0" + ], + "attributes": { + "coordinate_transformation_mode": "asymmetric", + "cubic_coeff_a": -0.75, + "mode": "nearest", + "nearest_mode": "floor" + } + }, + { + "node_id": "N130", + "index": 130, + "name": "/model.12/Concat", + "op_type": "Concat", + "inputs": [ + "/model.11/Resize_output_0", + "/model.6/cv2/act/Mul_output_0" + ], + "outputs": [ + "/model.12/Concat_output_0" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N131", + "index": 131, + "name": "/model.13/cv1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.12/Concat_output_0", + "model.13.cv1.conv.weight", + "model.13.cv1.conv.bias" + ], + "outputs": [ + "/model.13/cv1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N132", + "index": 132, + "name": "/model.13/cv1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.13/cv1/conv/Conv_output_0" + ], + "outputs": [ + "/model.13/cv1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N133", + "index": 133, + "name": "/model.13/cv1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.13/cv1/conv/Conv_output_0", + "/model.13/cv1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.13/cv1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N134", + "index": 134, + "name": "/model.13/Split", + "op_type": "Split", + "inputs": [ + "/model.13/cv1/act/Mul_output_0", + "onnx::Split_273" + ], + "outputs": [ + "/model.13/Split_output_0", + "/model.13/Split_output_1" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N135", + "index": 135, + "name": "/model.13/m.0/cv1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.13/Split_output_1", + "model.13.m.0.cv1.conv.weight", + "model.13.m.0.cv1.conv.bias" + ], + "outputs": [ + "/model.13/m.0/cv1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N136", + "index": 136, + "name": "/model.13/m.0/cv1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.13/m.0/cv1/conv/Conv_output_0" + ], + "outputs": [ + "/model.13/m.0/cv1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N137", + "index": 137, + "name": "/model.13/m.0/cv1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.13/m.0/cv1/conv/Conv_output_0", + "/model.13/m.0/cv1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.13/m.0/cv1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N138", + "index": 138, + "name": "/model.13/m.0/cv2/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.13/m.0/cv1/act/Mul_output_0", + "model.13.m.0.cv2.conv.weight", + "model.13.m.0.cv2.conv.bias" + ], + "outputs": [ + "/model.13/m.0/cv2/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N139", + "index": 139, + "name": "/model.13/m.0/cv2/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.13/m.0/cv2/conv/Conv_output_0" + ], + "outputs": [ + "/model.13/m.0/cv2/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N140", + "index": 140, + "name": "/model.13/m.0/cv2/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.13/m.0/cv2/conv/Conv_output_0", + "/model.13/m.0/cv2/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.13/m.0/cv2/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N141", + "index": 141, + "name": "/model.13/Concat", + "op_type": "Concat", + "inputs": [ + "/model.13/Split_output_0", + "/model.13/Split_output_1", + "/model.13/m.0/cv2/act/Mul_output_0" + ], + "outputs": [ + "/model.13/Concat_output_0" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N142", + "index": 142, + "name": "/model.13/cv2/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.13/Concat_output_0", + "model.13.cv2.conv.weight", + "model.13.cv2.conv.bias" + ], + "outputs": [ + "/model.13/cv2/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N143", + "index": 143, + "name": "/model.13/cv2/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.13/cv2/conv/Conv_output_0" + ], + "outputs": [ + "/model.13/cv2/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N144", + "index": 144, + "name": "/model.13/cv2/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.13/cv2/conv/Conv_output_0", + "/model.13/cv2/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.13/cv2/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N145", + "index": 145, + "name": "/model.14/Resize", + "op_type": "Resize", + "inputs": [ + "/model.13/cv2/act/Mul_output_0", + "", + "/model.11/Constant_output_0" + ], + "outputs": [ + "/model.14/Resize_output_0" + ], + "attributes": { + "coordinate_transformation_mode": "asymmetric", + "cubic_coeff_a": -0.75, + "mode": "nearest", + "nearest_mode": "floor" + } + }, + { + "node_id": "N146", + "index": 146, + "name": "/model.15/Concat", + "op_type": "Concat", + "inputs": [ + "/model.14/Resize_output_0", + "/model.4/cv2/act/Mul_output_0" + ], + "outputs": [ + "/model.15/Concat_output_0" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N147", + "index": 147, + "name": "/model.16/cv1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.15/Concat_output_0", + "model.16.cv1.conv.weight", + "model.16.cv1.conv.bias" + ], + "outputs": [ + "/model.16/cv1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N148", + "index": 148, + "name": "/model.16/cv1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.16/cv1/conv/Conv_output_0" + ], + "outputs": [ + "/model.16/cv1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N149", + "index": 149, + "name": "/model.16/cv1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.16/cv1/conv/Conv_output_0", + "/model.16/cv1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.16/cv1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N150", + "index": 150, + "name": "/model.16/Split", + "op_type": "Split", + "inputs": [ + "/model.16/cv1/act/Mul_output_0", + "onnx::Split_245" + ], + "outputs": [ + "/model.16/Split_output_0", + "/model.16/Split_output_1" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N151", + "index": 151, + "name": "/model.16/m.0/cv1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.16/Split_output_1", + "model.16.m.0.cv1.conv.weight", + "model.16.m.0.cv1.conv.bias" + ], + "outputs": [ + "/model.16/m.0/cv1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N152", + "index": 152, + "name": "/model.16/m.0/cv1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.16/m.0/cv1/conv/Conv_output_0" + ], + "outputs": [ + "/model.16/m.0/cv1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N153", + "index": 153, + "name": "/model.16/m.0/cv1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.16/m.0/cv1/conv/Conv_output_0", + "/model.16/m.0/cv1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.16/m.0/cv1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N154", + "index": 154, + "name": "/model.16/m.0/cv2/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.16/m.0/cv1/act/Mul_output_0", + "model.16.m.0.cv2.conv.weight", + "model.16.m.0.cv2.conv.bias" + ], + "outputs": [ + "/model.16/m.0/cv2/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N155", + "index": 155, + "name": "/model.16/m.0/cv2/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.16/m.0/cv2/conv/Conv_output_0" + ], + "outputs": [ + "/model.16/m.0/cv2/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N156", + "index": 156, + "name": "/model.16/m.0/cv2/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.16/m.0/cv2/conv/Conv_output_0", + "/model.16/m.0/cv2/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.16/m.0/cv2/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N157", + "index": 157, + "name": "/model.16/Concat", + "op_type": "Concat", + "inputs": [ + "/model.16/Split_output_0", + "/model.16/Split_output_1", + "/model.16/m.0/cv2/act/Mul_output_0" + ], + "outputs": [ + "/model.16/Concat_output_0" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N158", + "index": 158, + "name": "/model.16/cv2/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.16/Concat_output_0", + "model.16.cv2.conv.weight", + "model.16.cv2.conv.bias" + ], + "outputs": [ + "/model.16/cv2/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N159", + "index": 159, + "name": "/model.16/cv2/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.16/cv2/conv/Conv_output_0" + ], + "outputs": [ + "/model.16/cv2/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N160", + "index": 160, + "name": "/model.16/cv2/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.16/cv2/conv/Conv_output_0", + "/model.16/cv2/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.16/cv2/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N161", + "index": 161, + "name": "/model.17/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.16/cv2/act/Mul_output_0", + "model.17.conv.weight", + "model.17.conv.bias" + ], + "outputs": [ + "/model.17/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 2, + 2 + ] + } + }, + { + "node_id": "N162", + "index": 162, + "name": "/model.17/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.17/conv/Conv_output_0" + ], + "outputs": [ + "/model.17/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N163", + "index": 163, + "name": "/model.17/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.17/conv/Conv_output_0", + "/model.17/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.17/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N164", + "index": 164, + "name": "/model.18/Concat", + "op_type": "Concat", + "inputs": [ + "/model.17/act/Mul_output_0", + "/model.13/cv2/act/Mul_output_0" + ], + "outputs": [ + "/model.18/Concat_output_0" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N165", + "index": 165, + "name": "/model.19/cv1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.18/Concat_output_0", + "model.19.cv1.conv.weight", + "model.19.cv1.conv.bias" + ], + "outputs": [ + "/model.19/cv1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N166", + "index": 166, + "name": "/model.19/cv1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.19/cv1/conv/Conv_output_0" + ], + "outputs": [ + "/model.19/cv1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N167", + "index": 167, + "name": "/model.19/cv1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.19/cv1/conv/Conv_output_0", + "/model.19/cv1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.19/cv1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N168", + "index": 168, + "name": "/model.19/Split", + "op_type": "Split", + "inputs": [ + "/model.19/cv1/act/Mul_output_0", + "onnx::Split_273" + ], + "outputs": [ + "/model.19/Split_output_0", + "/model.19/Split_output_1" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N169", + "index": 169, + "name": "/model.19/m.0/cv1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.19/Split_output_1", + "model.19.m.0.cv1.conv.weight", + "model.19.m.0.cv1.conv.bias" + ], + "outputs": [ + "/model.19/m.0/cv1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N170", + "index": 170, + "name": "/model.19/m.0/cv1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.19/m.0/cv1/conv/Conv_output_0" + ], + "outputs": [ + "/model.19/m.0/cv1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N171", + "index": 171, + "name": "/model.19/m.0/cv1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.19/m.0/cv1/conv/Conv_output_0", + "/model.19/m.0/cv1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.19/m.0/cv1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N172", + "index": 172, + "name": "/model.19/m.0/cv2/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.19/m.0/cv1/act/Mul_output_0", + "model.19.m.0.cv2.conv.weight", + "model.19.m.0.cv2.conv.bias" + ], + "outputs": [ + "/model.19/m.0/cv2/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N173", + "index": 173, + "name": "/model.19/m.0/cv2/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.19/m.0/cv2/conv/Conv_output_0" + ], + "outputs": [ + "/model.19/m.0/cv2/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N174", + "index": 174, + "name": "/model.19/m.0/cv2/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.19/m.0/cv2/conv/Conv_output_0", + "/model.19/m.0/cv2/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.19/m.0/cv2/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N175", + "index": 175, + "name": "/model.19/Concat", + "op_type": "Concat", + "inputs": [ + "/model.19/Split_output_0", + "/model.19/Split_output_1", + "/model.19/m.0/cv2/act/Mul_output_0" + ], + "outputs": [ + "/model.19/Concat_output_0" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N176", + "index": 176, + "name": "/model.19/cv2/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.19/Concat_output_0", + "model.19.cv2.conv.weight", + "model.19.cv2.conv.bias" + ], + "outputs": [ + "/model.19/cv2/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N177", + "index": 177, + "name": "/model.19/cv2/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.19/cv2/conv/Conv_output_0" + ], + "outputs": [ + "/model.19/cv2/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N178", + "index": 178, + "name": "/model.19/cv2/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.19/cv2/conv/Conv_output_0", + "/model.19/cv2/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.19/cv2/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N179", + "index": 179, + "name": "/model.20/cv1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.19/cv2/act/Mul_output_0", + "model.20.cv1.conv.weight", + "model.20.cv1.conv.bias" + ], + "outputs": [ + "/model.20/cv1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N180", + "index": 180, + "name": "/model.20/cv1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.20/cv1/conv/Conv_output_0" + ], + "outputs": [ + "/model.20/cv1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N181", + "index": 181, + "name": "/model.20/cv1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.20/cv1/conv/Conv_output_0", + "/model.20/cv1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.20/cv1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N182", + "index": 182, + "name": "/model.20/cv2/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.20/cv1/act/Mul_output_0", + "model.20.cv2.conv.weight", + "model.20.cv2.conv.bias" + ], + "outputs": [ + "/model.20/cv2/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 128, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 2, + 2 + ] + } + }, + { + "node_id": "N183", + "index": 183, + "name": "/model.21/Concat", + "op_type": "Concat", + "inputs": [ + "/model.20/cv2/conv/Conv_output_0", + "/model.10/cv2/act/Mul_output_0" + ], + "outputs": [ + "/model.21/Concat_output_0" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N184", + "index": 184, + "name": "/model.22/cv1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.21/Concat_output_0", + "model.22.cv1.conv.weight", + "model.22.cv1.conv.bias" + ], + "outputs": [ + "/model.22/cv1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N185", + "index": 185, + "name": "/model.22/cv1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.22/cv1/conv/Conv_output_0" + ], + "outputs": [ + "/model.22/cv1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N186", + "index": 186, + "name": "/model.22/cv1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.22/cv1/conv/Conv_output_0", + "/model.22/cv1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.22/cv1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N187", + "index": 187, + "name": "/model.22/Split", + "op_type": "Split", + "inputs": [ + "/model.22/cv1/act/Mul_output_0", + "onnx::Split_301" + ], + "outputs": [ + "/model.22/Split_output_0", + "/model.22/Split_output_1" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N188", + "index": 188, + "name": "/model.22/m.0/cv1/cv1.0/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.22/Split_output_1", + "model.22.m.0.cv1.0.conv.weight", + "model.22.m.0.cv1.0.conv.bias" + ], + "outputs": [ + "/model.22/m.0/cv1/cv1.0/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 128, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N189", + "index": 189, + "name": "/model.22/m.0/cv1/cv1.0/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.22/m.0/cv1/cv1.0/conv/Conv_output_0" + ], + "outputs": [ + "/model.22/m.0/cv1/cv1.0/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N190", + "index": 190, + "name": "/model.22/m.0/cv1/cv1.0/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.22/m.0/cv1/cv1.0/conv/Conv_output_0", + "/model.22/m.0/cv1/cv1.0/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.22/m.0/cv1/cv1.0/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N191", + "index": 191, + "name": "/model.22/m.0/cv1/cv1.1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.22/m.0/cv1/cv1.0/act/Mul_output_0", + "model.22.m.0.cv1.1.conv.weight", + "model.22.m.0.cv1.1.conv.bias" + ], + "outputs": [ + "/model.22/m.0/cv1/cv1.1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N192", + "index": 192, + "name": "/model.22/m.0/cv1/cv1.1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.22/m.0/cv1/cv1.1/conv/Conv_output_0" + ], + "outputs": [ + "/model.22/m.0/cv1/cv1.1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N193", + "index": 193, + "name": "/model.22/m.0/cv1/cv1.1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.22/m.0/cv1/cv1.1/conv/Conv_output_0", + "/model.22/m.0/cv1/cv1.1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.22/m.0/cv1/cv1.1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N194", + "index": 194, + "name": "/model.22/m.0/cv1/cv1.2/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.22/m.0/cv1/cv1.1/act/Mul_output_0", + "model.22.m.0.cv1.2.conv.weight", + "model.22.m.0.cv1.2.conv.bias" + ], + "outputs": [ + "/model.22/m.0/cv1/cv1.2/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 256, + "kernel_shape": [ + 7, + 7 + ], + "pads": [ + 3, + 3, + 3, + 3 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N195", + "index": 195, + "name": "/model.22/m.0/cv1/cv1.2/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.22/m.0/cv1/cv1.2/conv/Conv_output_0" + ], + "outputs": [ + "/model.22/m.0/cv1/cv1.2/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N196", + "index": 196, + "name": "/model.22/m.0/cv1/cv1.2/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.22/m.0/cv1/cv1.2/conv/Conv_output_0", + "/model.22/m.0/cv1/cv1.2/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.22/m.0/cv1/cv1.2/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N197", + "index": 197, + "name": "/model.22/m.0/cv1/cv1.3/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.22/m.0/cv1/cv1.2/act/Mul_output_0", + "model.22.m.0.cv1.3.conv.weight", + "model.22.m.0.cv1.3.conv.bias" + ], + "outputs": [ + "/model.22/m.0/cv1/cv1.3/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N198", + "index": 198, + "name": "/model.22/m.0/cv1/cv1.3/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.22/m.0/cv1/cv1.3/conv/Conv_output_0" + ], + "outputs": [ + "/model.22/m.0/cv1/cv1.3/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N199", + "index": 199, + "name": "/model.22/m.0/cv1/cv1.3/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.22/m.0/cv1/cv1.3/conv/Conv_output_0", + "/model.22/m.0/cv1/cv1.3/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.22/m.0/cv1/cv1.3/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N200", + "index": 200, + "name": "/model.22/m.0/cv1/cv1.4/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.22/m.0/cv1/cv1.3/act/Mul_output_0", + "model.22.m.0.cv1.4.conv.weight", + "model.22.m.0.cv1.4.conv.bias" + ], + "outputs": [ + "/model.22/m.0/cv1/cv1.4/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 128, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N201", + "index": 201, + "name": "/model.22/m.0/cv1/cv1.4/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.22/m.0/cv1/cv1.4/conv/Conv_output_0" + ], + "outputs": [ + "/model.22/m.0/cv1/cv1.4/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N202", + "index": 202, + "name": "/model.22/m.0/cv1/cv1.4/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.22/m.0/cv1/cv1.4/conv/Conv_output_0", + "/model.22/m.0/cv1/cv1.4/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.22/m.0/cv1/cv1.4/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N203", + "index": 203, + "name": "/model.22/m.0/Add", + "op_type": "Add", + "inputs": [ + "/model.22/Split_output_1", + "/model.22/m.0/cv1/cv1.4/act/Mul_output_0" + ], + "outputs": [ + "/model.22/m.0/Add_output_0" + ], + "attributes": {} + }, + { + "node_id": "N204", + "index": 204, + "name": "/model.22/Concat", + "op_type": "Concat", + "inputs": [ + "/model.22/Split_output_0", + "/model.22/Split_output_1", + "/model.22/m.0/Add_output_0" + ], + "outputs": [ + "/model.22/Concat_output_0" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N205", + "index": 205, + "name": "/model.22/cv2/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.22/Concat_output_0", + "model.22.cv2.conv.weight", + "model.22.cv2.conv.bias" + ], + "outputs": [ + "/model.22/cv2/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N206", + "index": 206, + "name": "/model.22/cv2/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.22/cv2/conv/Conv_output_0" + ], + "outputs": [ + "/model.22/cv2/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N207", + "index": 207, + "name": "/model.22/cv2/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.22/cv2/conv/Conv_output_0", + "/model.22/cv2/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.22/cv2/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N208", + "index": 208, + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.0/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.16/cv2/act/Mul_output_0", + "model.23.one2one_cv2.0.0.conv.weight", + "model.23.one2one_cv2.0.0.conv.bias" + ], + "outputs": [ + "/model.23/one2one_cv2.0/one2one_cv2.0.0/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N209", + "index": 209, + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.0/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.23/one2one_cv2.0/one2one_cv2.0.0/conv/Conv_output_0" + ], + "outputs": [ + "/model.23/one2one_cv2.0/one2one_cv2.0.0/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N210", + "index": 210, + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.0/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.23/one2one_cv2.0/one2one_cv2.0.0/conv/Conv_output_0", + "/model.23/one2one_cv2.0/one2one_cv2.0.0/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.23/one2one_cv2.0/one2one_cv2.0.0/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N211", + "index": 211, + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.23/one2one_cv2.0/one2one_cv2.0.0/act/Mul_output_0", + "model.23.one2one_cv2.0.1.conv.weight", + "model.23.one2one_cv2.0.1.conv.bias" + ], + "outputs": [ + "/model.23/one2one_cv2.0/one2one_cv2.0.1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N212", + "index": 212, + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.23/one2one_cv2.0/one2one_cv2.0.1/conv/Conv_output_0" + ], + "outputs": [ + "/model.23/one2one_cv2.0/one2one_cv2.0.1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N213", + "index": 213, + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.23/one2one_cv2.0/one2one_cv2.0.1/conv/Conv_output_0", + "/model.23/one2one_cv2.0/one2one_cv2.0.1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.23/one2one_cv2.0/one2one_cv2.0.1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N214", + "index": 214, + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.2/Conv", + "op_type": "Conv", + "inputs": [ + "/model.23/one2one_cv2.0/one2one_cv2.0.1/act/Mul_output_0", + "model.23.one2one_cv2.0.2.weight", + "model.23.one2one_cv2.0.2.bias" + ], + "outputs": [ + "/model.23/one2one_cv2.0/one2one_cv2.0.2/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N215", + "index": 215, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.16/cv2/act/Mul_output_0", + "model.23.one2one_cv3.0.0.0.conv.weight", + "model.23.one2one_cv3.0.0.0.conv.bias" + ], + "outputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 64, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N216", + "index": 216, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/conv/Conv_output_0" + ], + "outputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N217", + "index": 217, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/conv/Conv_output_0", + "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N218", + "index": 218, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/act/Mul_output_0", + "model.23.one2one_cv3.0.0.1.conv.weight", + "model.23.one2one_cv3.0.0.1.conv.bias" + ], + "outputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N219", + "index": 219, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/conv/Conv_output_0" + ], + "outputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N220", + "index": 220, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/conv/Conv_output_0", + "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N221", + "index": 221, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/act/Mul_output_0", + "model.23.one2one_cv3.0.1.0.conv.weight", + "model.23.one2one_cv3.0.1.0.conv.bias" + ], + "outputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 80, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N222", + "index": 222, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/conv/Conv_output_0" + ], + "outputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N223", + "index": 223, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/conv/Conv_output_0", + "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N224", + "index": 224, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/act/Mul_output_0", + "model.23.one2one_cv3.0.1.1.conv.weight", + "model.23.one2one_cv3.0.1.1.conv.bias" + ], + "outputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N225", + "index": 225, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/conv/Conv_output_0" + ], + "outputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N226", + "index": 226, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/conv/Conv_output_0", + "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N227", + "index": 227, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.2/Conv", + "op_type": "Conv", + "inputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/act/Mul_output_0", + "model.23.one2one_cv3.0.2.weight", + "model.23.one2one_cv3.0.2.bias" + ], + "outputs": [ + "/model.23/one2one_cv3.0/one2one_cv3.0.2/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N228", + "index": 228, + "name": "/model.23/Concat", + "op_type": "Concat", + "inputs": [ + "/model.23/one2one_cv2.0/one2one_cv2.0.2/Conv_output_0", + "/model.23/one2one_cv3.0/one2one_cv3.0.2/Conv_output_0" + ], + "outputs": [ + "/model.23/Concat_output_0" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N229", + "index": 229, + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.0/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.19/cv2/act/Mul_output_0", + "model.23.one2one_cv2.1.0.conv.weight", + "model.23.one2one_cv2.1.0.conv.bias" + ], + "outputs": [ + "/model.23/one2one_cv2.1/one2one_cv2.1.0/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N230", + "index": 230, + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.0/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.23/one2one_cv2.1/one2one_cv2.1.0/conv/Conv_output_0" + ], + "outputs": [ + "/model.23/one2one_cv2.1/one2one_cv2.1.0/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N231", + "index": 231, + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.0/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.23/one2one_cv2.1/one2one_cv2.1.0/conv/Conv_output_0", + "/model.23/one2one_cv2.1/one2one_cv2.1.0/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.23/one2one_cv2.1/one2one_cv2.1.0/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N232", + "index": 232, + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.23/one2one_cv2.1/one2one_cv2.1.0/act/Mul_output_0", + "model.23.one2one_cv2.1.1.conv.weight", + "model.23.one2one_cv2.1.1.conv.bias" + ], + "outputs": [ + "/model.23/one2one_cv2.1/one2one_cv2.1.1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N233", + "index": 233, + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.23/one2one_cv2.1/one2one_cv2.1.1/conv/Conv_output_0" + ], + "outputs": [ + "/model.23/one2one_cv2.1/one2one_cv2.1.1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N234", + "index": 234, + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.23/one2one_cv2.1/one2one_cv2.1.1/conv/Conv_output_0", + "/model.23/one2one_cv2.1/one2one_cv2.1.1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.23/one2one_cv2.1/one2one_cv2.1.1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N235", + "index": 235, + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.2/Conv", + "op_type": "Conv", + "inputs": [ + "/model.23/one2one_cv2.1/one2one_cv2.1.1/act/Mul_output_0", + "model.23.one2one_cv2.1.2.weight", + "model.23.one2one_cv2.1.2.bias" + ], + "outputs": [ + "/model.23/one2one_cv2.1/one2one_cv2.1.2/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N236", + "index": 236, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.19/cv2/act/Mul_output_0", + "model.23.one2one_cv3.1.0.0.conv.weight", + "model.23.one2one_cv3.1.0.0.conv.bias" + ], + "outputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 128, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N237", + "index": 237, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/conv/Conv_output_0" + ], + "outputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N238", + "index": 238, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/conv/Conv_output_0", + "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N239", + "index": 239, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/act/Mul_output_0", + "model.23.one2one_cv3.1.0.1.conv.weight", + "model.23.one2one_cv3.1.0.1.conv.bias" + ], + "outputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N240", + "index": 240, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/conv/Conv_output_0" + ], + "outputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N241", + "index": 241, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/conv/Conv_output_0", + "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N242", + "index": 242, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/act/Mul_output_0", + "model.23.one2one_cv3.1.1.0.conv.weight", + "model.23.one2one_cv3.1.1.0.conv.bias" + ], + "outputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 80, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N243", + "index": 243, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/conv/Conv_output_0" + ], + "outputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N244", + "index": 244, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/conv/Conv_output_0", + "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N245", + "index": 245, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/act/Mul_output_0", + "model.23.one2one_cv3.1.1.1.conv.weight", + "model.23.one2one_cv3.1.1.1.conv.bias" + ], + "outputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N246", + "index": 246, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/conv/Conv_output_0" + ], + "outputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N247", + "index": 247, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/conv/Conv_output_0", + "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N248", + "index": 248, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.2/Conv", + "op_type": "Conv", + "inputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/act/Mul_output_0", + "model.23.one2one_cv3.1.2.weight", + "model.23.one2one_cv3.1.2.bias" + ], + "outputs": [ + "/model.23/one2one_cv3.1/one2one_cv3.1.2/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N249", + "index": 249, + "name": "/model.23/Concat_1", + "op_type": "Concat", + "inputs": [ + "/model.23/one2one_cv2.1/one2one_cv2.1.2/Conv_output_0", + "/model.23/one2one_cv3.1/one2one_cv3.1.2/Conv_output_0" + ], + "outputs": [ + "/model.23/Concat_1_output_0" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N250", + "index": 250, + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.0/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.22/cv2/act/Mul_output_0", + "model.23.one2one_cv2.2.0.conv.weight", + "model.23.one2one_cv2.2.0.conv.bias" + ], + "outputs": [ + "/model.23/one2one_cv2.2/one2one_cv2.2.0/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N251", + "index": 251, + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.0/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.23/one2one_cv2.2/one2one_cv2.2.0/conv/Conv_output_0" + ], + "outputs": [ + "/model.23/one2one_cv2.2/one2one_cv2.2.0/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N252", + "index": 252, + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.0/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.23/one2one_cv2.2/one2one_cv2.2.0/conv/Conv_output_0", + "/model.23/one2one_cv2.2/one2one_cv2.2.0/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.23/one2one_cv2.2/one2one_cv2.2.0/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N253", + "index": 253, + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.23/one2one_cv2.2/one2one_cv2.2.0/act/Mul_output_0", + "model.23.one2one_cv2.2.1.conv.weight", + "model.23.one2one_cv2.2.1.conv.bias" + ], + "outputs": [ + "/model.23/one2one_cv2.2/one2one_cv2.2.1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N254", + "index": 254, + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.23/one2one_cv2.2/one2one_cv2.2.1/conv/Conv_output_0" + ], + "outputs": [ + "/model.23/one2one_cv2.2/one2one_cv2.2.1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N255", + "index": 255, + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.23/one2one_cv2.2/one2one_cv2.2.1/conv/Conv_output_0", + "/model.23/one2one_cv2.2/one2one_cv2.2.1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.23/one2one_cv2.2/one2one_cv2.2.1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N256", + "index": 256, + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.2/Conv", + "op_type": "Conv", + "inputs": [ + "/model.23/one2one_cv2.2/one2one_cv2.2.1/act/Mul_output_0", + "model.23.one2one_cv2.2.2.weight", + "model.23.one2one_cv2.2.2.bias" + ], + "outputs": [ + "/model.23/one2one_cv2.2/one2one_cv2.2.2/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N257", + "index": 257, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.22/cv2/act/Mul_output_0", + "model.23.one2one_cv3.2.0.0.conv.weight", + "model.23.one2one_cv3.2.0.0.conv.bias" + ], + "outputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 256, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N258", + "index": 258, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/conv/Conv_output_0" + ], + "outputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N259", + "index": 259, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/conv/Conv_output_0", + "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N260", + "index": 260, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/act/Mul_output_0", + "model.23.one2one_cv3.2.0.1.conv.weight", + "model.23.one2one_cv3.2.0.1.conv.bias" + ], + "outputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N261", + "index": 261, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/conv/Conv_output_0" + ], + "outputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N262", + "index": 262, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/conv/Conv_output_0", + "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N263", + "index": 263, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/act/Mul_output_0", + "model.23.one2one_cv3.2.1.0.conv.weight", + "model.23.one2one_cv3.2.1.0.conv.bias" + ], + "outputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 80, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N264", + "index": 264, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/conv/Conv_output_0" + ], + "outputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N265", + "index": 265, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/conv/Conv_output_0", + "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N266", + "index": 266, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/act/Mul_output_0", + "model.23.one2one_cv3.2.1.1.conv.weight", + "model.23.one2one_cv3.2.1.1.conv.bias" + ], + "outputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N267", + "index": 267, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/act/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/conv/Conv_output_0" + ], + "outputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/act/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N268", + "index": 268, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/act/Mul", + "op_type": "Mul", + "inputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/conv/Conv_output_0", + "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/act/Sigmoid_output_0" + ], + "outputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/act/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N269", + "index": 269, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.2/Conv", + "op_type": "Conv", + "inputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/act/Mul_output_0", + "model.23.one2one_cv3.2.2.weight", + "model.23.one2one_cv3.2.2.bias" + ], + "outputs": [ + "/model.23/one2one_cv3.2/one2one_cv3.2.2/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N270", + "index": 270, + "name": "/model.23/Concat_2", + "op_type": "Concat", + "inputs": [ + "/model.23/one2one_cv2.2/one2one_cv2.2.2/Conv_output_0", + "/model.23/one2one_cv3.2/one2one_cv3.2.2/Conv_output_0" + ], + "outputs": [ + "/model.23/Concat_2_output_0" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N271", + "index": 271, + "name": "/model.23/Reshape", + "op_type": "Reshape", + "inputs": [ + "/model.23/Concat_output_0", + "/model.23/Constant_output_0" + ], + "outputs": [ + "/model.23/Reshape_output_0" + ], + "attributes": {} + }, + { + "node_id": "N272", + "index": 272, + "name": "/model.23/Reshape_1", + "op_type": "Reshape", + "inputs": [ + "/model.23/Concat_1_output_0", + "/model.23/Constant_output_0" + ], + "outputs": [ + "/model.23/Reshape_1_output_0" + ], + "attributes": {} + }, + { + "node_id": "N273", + "index": 273, + "name": "/model.23/Reshape_2", + "op_type": "Reshape", + "inputs": [ + "/model.23/Concat_2_output_0", + "/model.23/Constant_output_0" + ], + "outputs": [ + "/model.23/Reshape_2_output_0" + ], + "attributes": {} + }, + { + "node_id": "N274", + "index": 274, + "name": "/model.23/Concat_3", + "op_type": "Concat", + "inputs": [ + "/model.23/Reshape_output_0", + "/model.23/Reshape_1_output_0", + "/model.23/Reshape_2_output_0" + ], + "outputs": [ + "/model.23/Concat_3_output_0" + ], + "attributes": { + "axis": 2 + } + }, + { + "node_id": "N275", + "index": 275, + "name": "/model.23/Split", + "op_type": "Split", + "inputs": [ + "/model.23/Concat_3_output_0", + "onnx::Split_572" + ], + "outputs": [ + "/model.23/Split_output_0", + "/model.23/Split_output_1" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N276", + "index": 276, + "name": "/model.23/dfl/Reshape", + "op_type": "Reshape", + "inputs": [ + "/model.23/Split_output_0", + "/model.23/dfl/Constant_output_0" + ], + "outputs": [ + "/model.23/dfl/Reshape_output_0" + ], + "attributes": {} + }, + { + "node_id": "N277", + "index": 277, + "name": "/model.23/dfl/Transpose", + "op_type": "Transpose", + "inputs": [ + "/model.23/dfl/Reshape_output_0" + ], + "outputs": [ + "/model.23/dfl/Transpose_output_0" + ], + "attributes": { + "perm": [ + 0, + 2, + 1, + 3 + ] + } + }, + { + "node_id": "N278", + "index": 278, + "name": "/model.23/dfl/Softmax", + "op_type": "Softmax", + "inputs": [ + "/model.23/dfl/Transpose_output_0" + ], + "outputs": [ + "/model.23/dfl/Softmax_output_0" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N279", + "index": 279, + "name": "/model.23/dfl/conv/Conv", + "op_type": "Conv", + "inputs": [ + "/model.23/dfl/Softmax_output_0", + "model.23.dfl.conv.weight" + ], + "outputs": [ + "/model.23/dfl/conv/Conv_output_0" + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N280", + "index": 280, + "name": "/model.23/dfl/Reshape_1", + "op_type": "Reshape", + "inputs": [ + "/model.23/dfl/conv/Conv_output_0", + "/model.23/dfl/Constant_1_output_0" + ], + "outputs": [ + "/model.23/dfl/Reshape_1_output_0" + ], + "attributes": {} + }, + { + "node_id": "N281", + "index": 281, + "name": "/model.23/Split_1", + "op_type": "Split", + "inputs": [ + "/model.23/dfl/Reshape_1_output_0", + "onnx::Split_214" + ], + "outputs": [ + "/model.23/Split_1_output_0", + "/model.23/Split_1_output_1" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N282", + "index": 282, + "name": "/model.23/Sub", + "op_type": "Sub", + "inputs": [ + "/model.23/Constant_3_output_0", + "/model.23/Split_1_output_0" + ], + "outputs": [ + "/model.23/Sub_output_0" + ], + "attributes": {} + }, + { + "node_id": "N283", + "index": 283, + "name": "/model.23/Add", + "op_type": "Add", + "inputs": [ + "/model.23/Constant_3_output_0", + "/model.23/Split_1_output_1" + ], + "outputs": [ + "/model.23/Add_output_0" + ], + "attributes": {} + }, + { + "node_id": "N284", + "index": 284, + "name": "/model.23/Concat_4", + "op_type": "Concat", + "inputs": [ + "/model.23/Sub_output_0", + "/model.23/Add_output_0" + ], + "outputs": [ + "/model.23/Concat_4_output_0" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N285", + "index": 285, + "name": "/model.23/Mul", + "op_type": "Mul", + "inputs": [ + "/model.23/Concat_4_output_0", + "/model.23/Constant_5_output_0" + ], + "outputs": [ + "/model.23/Mul_output_0" + ], + "attributes": {} + }, + { + "node_id": "N286", + "index": 286, + "name": "/model.23/Sigmoid", + "op_type": "Sigmoid", + "inputs": [ + "/model.23/Split_output_1" + ], + "outputs": [ + "/model.23/Sigmoid_output_0" + ], + "attributes": {} + }, + { + "node_id": "N287", + "index": 287, + "name": "/model.23/Concat_5", + "op_type": "Concat", + "inputs": [ + "/model.23/Mul_output_0", + "/model.23/Sigmoid_output_0" + ], + "outputs": [ + "/model.23/Concat_5_output_0" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N288", + "index": 288, + "name": "/model.23/Transpose", + "op_type": "Transpose", + "inputs": [ + "/model.23/Concat_5_output_0" + ], + "outputs": [ + "/model.23/Transpose_output_0" + ], + "attributes": { + "perm": [ + 0, + 2, + 1 + ] + } + }, + { + "node_id": "N289", + "index": 289, + "name": "/model.23/Split_2", + "op_type": "Split", + "inputs": [ + "/model.23/Transpose_output_0", + "onnx::Split_612" + ], + "outputs": [ + "/model.23/Split_2_output_0", + "/model.23/Split_2_output_1" + ], + "attributes": { + "axis": -1 + } + }, + { + "node_id": "N290", + "index": 290, + "name": "/model.23/ReduceMax", + "op_type": "ReduceMax", + "inputs": [ + "/model.23/Split_2_output_1" + ], + "outputs": [ + "/model.23/ReduceMax_output_0" + ], + "attributes": { + "axes": [ + -1 + ], + "keepdims": 0 + } + }, + { + "node_id": "N291", + "index": 291, + "name": "/model.23/TopK", + "op_type": "TopK", + "inputs": [ + "/model.23/ReduceMax_output_0", + "/model.23/Constant_6_output_0" + ], + "outputs": [ + "/model.23/TopK_output_0", + "/model.23/TopK_output_1" + ], + "attributes": { + "axis": -1, + "largest": 1, + "sorted": 1 + } + }, + { + "node_id": "N292", + "index": 292, + "name": "/model.23/Unsqueeze", + "op_type": "Unsqueeze", + "inputs": [ + "/model.23/TopK_output_1", + "/model.23/Constant_7_output_0" + ], + "outputs": [ + "/model.23/Unsqueeze_output_0" + ], + "attributes": {} + }, + { + "node_id": "N293", + "index": 293, + "name": "/model.23/Tile", + "op_type": "Tile", + "inputs": [ + "/model.23/Unsqueeze_output_0", + "/model.23/Constant_8_output_0" + ], + "outputs": [ + "/model.23/Tile_output_0" + ], + "attributes": {} + }, + { + "node_id": "N294", + "index": 294, + "name": "/model.23/GatherElements", + "op_type": "GatherElements", + "inputs": [ + "/model.23/Split_2_output_0", + "/model.23/Tile_output_0" + ], + "outputs": [ + "/model.23/GatherElements_output_0" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N295", + "index": 295, + "name": "/model.23/Tile_1", + "op_type": "Tile", + "inputs": [ + "/model.23/Unsqueeze_output_0", + "/model.23/Constant_10_output_0" + ], + "outputs": [ + "/model.23/Tile_1_output_0" + ], + "attributes": {} + }, + { + "node_id": "N296", + "index": 296, + "name": "/model.23/GatherElements_1", + "op_type": "GatherElements", + "inputs": [ + "/model.23/Split_2_output_1", + "/model.23/Tile_1_output_0" + ], + "outputs": [ + "/model.23/GatherElements_1_output_0" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N297", + "index": 297, + "name": "/model.23/Flatten", + "op_type": "Flatten", + "inputs": [ + "/model.23/GatherElements_1_output_0" + ], + "outputs": [ + "/model.23/Flatten_output_0" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N298", + "index": 298, + "name": "/model.23/TopK_1", + "op_type": "TopK", + "inputs": [ + "/model.23/Flatten_output_0", + "/model.23/Constant_6_output_0" + ], + "outputs": [ + "/model.23/TopK_1_output_0", + "/model.23/TopK_1_output_1" + ], + "attributes": { + "axis": -1, + "largest": 1, + "sorted": 1 + } + }, + { + "node_id": "N299", + "index": 299, + "name": "/model.23/Mod", + "op_type": "Mod", + "inputs": [ + "/model.23/TopK_1_output_1", + "/model.23/Constant_13_output_0" + ], + "outputs": [ + "/model.23/Mod_output_0" + ], + "attributes": { + "fmod": 0 + } + }, + { + "node_id": "N300", + "index": 300, + "name": "/model.23/Div", + "op_type": "Div", + "inputs": [ + "/model.23/TopK_1_output_1", + "/model.23/Constant_13_output_0" + ], + "outputs": [ + "/model.23/Div_output_0" + ], + "attributes": {} + }, + { + "node_id": "N301", + "index": 301, + "name": "/model.23/Unsqueeze_1", + "op_type": "Unsqueeze", + "inputs": [ + "/model.23/Div_output_0", + "/model.23/Constant_7_output_0" + ], + "outputs": [ + "/model.23/Unsqueeze_1_output_0" + ], + "attributes": {} + }, + { + "node_id": "N302", + "index": 302, + "name": "/model.23/Tile_2", + "op_type": "Tile", + "inputs": [ + "/model.23/Unsqueeze_1_output_0", + "/model.23/Constant_8_output_0" + ], + "outputs": [ + "/model.23/Tile_2_output_0" + ], + "attributes": {} + }, + { + "node_id": "N303", + "index": 303, + "name": "/model.23/GatherElements_2", + "op_type": "GatherElements", + "inputs": [ + "/model.23/GatherElements_output_0", + "/model.23/Tile_2_output_0" + ], + "outputs": [ + "/model.23/GatherElements_2_output_0" + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N304", + "index": 304, + "name": "/model.23/Unsqueeze_2", + "op_type": "Unsqueeze", + "inputs": [ + "/model.23/TopK_1_output_0", + "/model.23/Constant_7_output_0" + ], + "outputs": [ + "/model.23/Unsqueeze_2_output_0" + ], + "attributes": {} + }, + { + "node_id": "N305", + "index": 305, + "name": "/model.23/Unsqueeze_3", + "op_type": "Unsqueeze", + "inputs": [ + "/model.23/Mod_output_0", + "/model.23/Constant_7_output_0" + ], + "outputs": [ + "/model.23/Unsqueeze_3_output_0" + ], + "attributes": {} + }, + { + "node_id": "N306", + "index": 306, + "name": "/model.23/Cast_2", + "op_type": "Cast", + "inputs": [ + "/model.23/Unsqueeze_3_output_0" + ], + "outputs": [ + "/model.23/Cast_2_output_0" + ], + "attributes": { + "to": 1 + } + }, + { + "node_id": "N307", + "index": 307, + "name": "/model.23/Concat_6", + "op_type": "Concat", + "inputs": [ + "/model.23/GatherElements_2_output_0", + "/model.23/Unsqueeze_2_output_0", + "/model.23/Cast_2_output_0" + ], + "outputs": [ + "output0" + ], + "attributes": { + "axis": -1 + } + } + ], + "tensors": [ + { + "name": "images", + "dtype": "FLOAT", + "shape": [ + 1, + 3, + 640, + 640 + ], + "elements": 1228800, + "nbytes": 4915200, + "storage": "input", + "offset": 0 + }, + { + "name": "/model.10/attn/Constant_1_output_0", + "dtype": "FLOAT", + "shape": [], + "elements": 1, + "nbytes": 4, + "storage": "weights", + "offset": 0, + "pack_index": 0 + }, + { + "name": "/model.10/attn/Constant_2_output_0", + "dtype": "INT64", + "shape": [ + 4 + ], + "elements": 4, + "nbytes": 32, + "storage": "weights", + "offset": 64, + "pack_index": 1 + }, + { + "name": "/model.10/attn/Constant_output_0", + "dtype": "INT64", + "shape": [ + 4 + ], + "elements": 4, + "nbytes": 32, + "storage": "weights", + "offset": 128, + "pack_index": 2 + }, + { + "name": "/model.11/Constant_output_0", + "dtype": "FLOAT", + "shape": [ + 4 + ], + "elements": 4, + "nbytes": 16, + "storage": "weights", + "offset": 192, + "pack_index": 3 + }, + { + "name": "/model.23/Constant_10_output_0", + "dtype": "INT64", + "shape": [ + 3 + ], + "elements": 3, + "nbytes": 24, + "storage": "weights", + "offset": 256, + "pack_index": 4 + }, + { + "name": "/model.23/Constant_13_output_0", + "dtype": "INT64", + "shape": [], + "elements": 1, + "nbytes": 8, + "storage": "weights", + "offset": 320, + "pack_index": 5 + }, + { + "name": "/model.23/Constant_3_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 8400 + ], + "elements": 16800, + "nbytes": 67200, + "storage": "weights", + "offset": 384, + "pack_index": 6 + }, + { + "name": "/model.23/Constant_5_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 8400 + ], + "elements": 8400, + "nbytes": 33600, + "storage": "weights", + "offset": 67584, + "pack_index": 7 + }, + { + "name": "/model.23/Constant_6_output_0", + "dtype": "INT64", + "shape": [ + 1 + ], + "elements": 1, + "nbytes": 8, + "storage": "weights", + "offset": 101184, + "pack_index": 8 + }, + { + "name": "/model.23/Constant_7_output_0", + "dtype": "INT64", + "shape": [ + 1 + ], + "elements": 1, + "nbytes": 8, + "storage": "weights", + "offset": 101248, + "pack_index": 9 + }, + { + "name": "/model.23/Constant_8_output_0", + "dtype": "INT64", + "shape": [ + 3 + ], + "elements": 3, + "nbytes": 24, + "storage": "weights", + "offset": 101312, + "pack_index": 10 + }, + { + "name": "/model.23/Constant_output_0", + "dtype": "INT64", + "shape": [ + 3 + ], + "elements": 3, + "nbytes": 24, + "storage": "weights", + "offset": 101376, + "pack_index": 11 + }, + { + "name": "/model.23/dfl/Constant_1_output_0", + "dtype": "INT64", + "shape": [ + 3 + ], + "elements": 3, + "nbytes": 24, + "storage": "weights", + "offset": 101440, + "pack_index": 12 + }, + { + "name": "/model.23/dfl/Constant_output_0", + "dtype": "INT64", + "shape": [ + 4 + ], + "elements": 4, + "nbytes": 32, + "storage": "weights", + "offset": 101504, + "pack_index": 13 + }, + { + "name": "model.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 16 + ], + "elements": 16, + "nbytes": 64, + "storage": "weights", + "offset": 101568, + "pack_index": 14 + }, + { + "name": "model.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 16, + 3, + 3, + 3 + ], + "elements": 432, + "nbytes": 1728, + "storage": "weights", + "offset": 101632, + "pack_index": 15 + }, + { + "name": "model.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ], + "elements": 32, + "nbytes": 128, + "storage": "weights", + "offset": 103360, + "pack_index": 16 + }, + { + "name": "model.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 16, + 3, + 3 + ], + "elements": 4608, + "nbytes": 18432, + "storage": "weights", + "offset": 103488, + "pack_index": 17 + }, + { + "name": "model.10.attn.pe.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "nbytes": 512, + "storage": "weights", + "offset": 121920, + "pack_index": 18 + }, + { + "name": "model.10.attn.pe.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 1, + 3, + 3 + ], + "elements": 1152, + "nbytes": 4608, + "storage": "weights", + "offset": 122432, + "pack_index": 19 + }, + { + "name": "model.10.attn.proj.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "nbytes": 512, + "storage": "weights", + "offset": 127040, + "pack_index": 20 + }, + { + "name": "model.10.attn.proj.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 128, + 1, + 1 + ], + "elements": 16384, + "nbytes": 65536, + "storage": "weights", + "offset": 127552, + "pack_index": 21 + }, + { + "name": "model.10.attn.qkv.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "nbytes": 1024, + "storage": "weights", + "offset": 193088, + "pack_index": 22 + }, + { + "name": "model.10.attn.qkv.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 128, + 1, + 1 + ], + "elements": 32768, + "nbytes": 131072, + "storage": "weights", + "offset": 194112, + "pack_index": 23 + }, + { + "name": "model.10.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "nbytes": 1024, + "storage": "weights", + "offset": 325184, + "pack_index": 24 + }, + { + "name": "model.10.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 256, + 1, + 1 + ], + "elements": 65536, + "nbytes": 262144, + "storage": "weights", + "offset": 326208, + "pack_index": 25 + }, + { + "name": "model.10.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "nbytes": 1024, + "storage": "weights", + "offset": 588352, + "pack_index": 26 + }, + { + "name": "model.10.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 256, + 1, + 1 + ], + "elements": 65536, + "nbytes": 262144, + "storage": "weights", + "offset": 589376, + "pack_index": 27 + }, + { + "name": "model.10.ffn.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "nbytes": 1024, + "storage": "weights", + "offset": 851520, + "pack_index": 28 + }, + { + "name": "model.10.ffn.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 128, + 1, + 1 + ], + "elements": 32768, + "nbytes": 131072, + "storage": "weights", + "offset": 852544, + "pack_index": 29 + }, + { + "name": "model.10.ffn.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "nbytes": 512, + "storage": "weights", + "offset": 983616, + "pack_index": 30 + }, + { + "name": "model.10.ffn.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 256, + 1, + 1 + ], + "elements": 32768, + "nbytes": 131072, + "storage": "weights", + "offset": 984128, + "pack_index": 31 + }, + { + "name": "model.13.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "nbytes": 512, + "storage": "weights", + "offset": 1115200, + "pack_index": 32 + }, + { + "name": "model.13.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 384, + 1, + 1 + ], + "elements": 49152, + "nbytes": 196608, + "storage": "weights", + "offset": 1115712, + "pack_index": 33 + }, + { + "name": "model.13.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "nbytes": 512, + "storage": "weights", + "offset": 1312320, + "pack_index": 34 + }, + { + "name": "model.13.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 192, + 1, + 1 + ], + "elements": 24576, + "nbytes": 98304, + "storage": "weights", + "offset": 1312832, + "pack_index": 35 + }, + { + "name": "model.13.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "nbytes": 256, + "storage": "weights", + "offset": 1411136, + "pack_index": 36 + }, + { + "name": "model.13.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "nbytes": 147456, + "storage": "weights", + "offset": 1411392, + "pack_index": 37 + }, + { + "name": "model.13.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "nbytes": 256, + "storage": "weights", + "offset": 1558848, + "pack_index": 38 + }, + { + "name": "model.13.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "nbytes": 147456, + "storage": "weights", + "offset": 1559104, + "pack_index": 39 + }, + { + "name": "model.16.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "nbytes": 256, + "storage": "weights", + "offset": 1706560, + "pack_index": 40 + }, + { + "name": "model.16.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 192, + 1, + 1 + ], + "elements": 12288, + "nbytes": 49152, + "storage": "weights", + "offset": 1706816, + "pack_index": 41 + }, + { + "name": "model.16.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "nbytes": 256, + "storage": "weights", + "offset": 1755968, + "pack_index": 42 + }, + { + "name": "model.16.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 96, + 1, + 1 + ], + "elements": 6144, + "nbytes": 24576, + "storage": "weights", + "offset": 1756224, + "pack_index": 43 + }, + { + "name": "model.16.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ], + "elements": 32, + "nbytes": 128, + "storage": "weights", + "offset": 1780800, + "pack_index": 44 + }, + { + "name": "model.16.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 32, + 3, + 3 + ], + "elements": 9216, + "nbytes": 36864, + "storage": "weights", + "offset": 1780928, + "pack_index": 45 + }, + { + "name": "model.16.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ], + "elements": 32, + "nbytes": 128, + "storage": "weights", + "offset": 1817792, + "pack_index": 46 + }, + { + "name": "model.16.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 32, + 3, + 3 + ], + "elements": 9216, + "nbytes": 36864, + "storage": "weights", + "offset": 1817920, + "pack_index": 47 + }, + { + "name": "model.17.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "nbytes": 256, + "storage": "weights", + "offset": 1854784, + "pack_index": 48 + }, + { + "name": "model.17.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "nbytes": 147456, + "storage": "weights", + "offset": 1855040, + "pack_index": 49 + }, + { + "name": "model.19.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "nbytes": 512, + "storage": "weights", + "offset": 2002496, + "pack_index": 50 + }, + { + "name": "model.19.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 192, + 1, + 1 + ], + "elements": 24576, + "nbytes": 98304, + "storage": "weights", + "offset": 2003008, + "pack_index": 51 + }, + { + "name": "model.19.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "nbytes": 512, + "storage": "weights", + "offset": 2101312, + "pack_index": 52 + }, + { + "name": "model.19.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 192, + 1, + 1 + ], + "elements": 24576, + "nbytes": 98304, + "storage": "weights", + "offset": 2101824, + "pack_index": 53 + }, + { + "name": "model.19.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "nbytes": 256, + "storage": "weights", + "offset": 2200128, + "pack_index": 54 + }, + { + "name": "model.19.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "nbytes": 147456, + "storage": "weights", + "offset": 2200384, + "pack_index": 55 + }, + { + "name": "model.19.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "nbytes": 256, + "storage": "weights", + "offset": 2347840, + "pack_index": 56 + }, + { + "name": "model.19.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "nbytes": 147456, + "storage": "weights", + "offset": 2348096, + "pack_index": 57 + }, + { + "name": "model.2.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ], + "elements": 32, + "nbytes": 128, + "storage": "weights", + "offset": 2495552, + "pack_index": 58 + }, + { + "name": "model.2.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 32, + 1, + 1 + ], + "elements": 1024, + "nbytes": 4096, + "storage": "weights", + "offset": 2495680, + "pack_index": 59 + }, + { + "name": "model.2.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ], + "elements": 32, + "nbytes": 128, + "storage": "weights", + "offset": 2499776, + "pack_index": 60 + }, + { + "name": "model.2.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 48, + 1, + 1 + ], + "elements": 1536, + "nbytes": 6144, + "storage": "weights", + "offset": 2499904, + "pack_index": 61 + }, + { + "name": "model.2.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 16 + ], + "elements": 16, + "nbytes": 64, + "storage": "weights", + "offset": 2506048, + "pack_index": 62 + }, + { + "name": "model.2.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 16, + 16, + 3, + 3 + ], + "elements": 2304, + "nbytes": 9216, + "storage": "weights", + "offset": 2506112, + "pack_index": 63 + }, + { + "name": "model.2.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 16 + ], + "elements": 16, + "nbytes": 64, + "storage": "weights", + "offset": 2515328, + "pack_index": 64 + }, + { + "name": "model.2.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 16, + 16, + 3, + 3 + ], + "elements": 2304, + "nbytes": 9216, + "storage": "weights", + "offset": 2515392, + "pack_index": 65 + }, + { + "name": "model.20.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "nbytes": 512, + "storage": "weights", + "offset": 2524608, + "pack_index": 66 + }, + { + "name": "model.20.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 128, + 1, + 1 + ], + "elements": 16384, + "nbytes": 65536, + "storage": "weights", + "offset": 2525120, + "pack_index": 67 + }, + { + "name": "model.20.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "nbytes": 512, + "storage": "weights", + "offset": 2590656, + "pack_index": 68 + }, + { + "name": "model.20.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 1, + 3, + 3 + ], + "elements": 1152, + "nbytes": 4608, + "storage": "weights", + "offset": 2591168, + "pack_index": 69 + }, + { + "name": "model.22.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "nbytes": 1024, + "storage": "weights", + "offset": 2595776, + "pack_index": 70 + }, + { + "name": "model.22.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 384, + 1, + 1 + ], + "elements": 98304, + "nbytes": 393216, + "storage": "weights", + "offset": 2596800, + "pack_index": 71 + }, + { + "name": "model.22.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "nbytes": 1024, + "storage": "weights", + "offset": 2990016, + "pack_index": 72 + }, + { + "name": "model.22.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 384, + 1, + 1 + ], + "elements": 98304, + "nbytes": 393216, + "storage": "weights", + "offset": 2991040, + "pack_index": 73 + }, + { + "name": "model.22.m.0.cv1.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "nbytes": 512, + "storage": "weights", + "offset": 3384256, + "pack_index": 74 + }, + { + "name": "model.22.m.0.cv1.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 1, + 3, + 3 + ], + "elements": 1152, + "nbytes": 4608, + "storage": "weights", + "offset": 3384768, + "pack_index": 75 + }, + { + "name": "model.22.m.0.cv1.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "nbytes": 1024, + "storage": "weights", + "offset": 3389376, + "pack_index": 76 + }, + { + "name": "model.22.m.0.cv1.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 128, + 1, + 1 + ], + "elements": 32768, + "nbytes": 131072, + "storage": "weights", + "offset": 3390400, + "pack_index": 77 + }, + { + "name": "model.22.m.0.cv1.2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "nbytes": 1024, + "storage": "weights", + "offset": 3521472, + "pack_index": 78 + }, + { + "name": "model.22.m.0.cv1.2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 1, + 7, + 7 + ], + "elements": 12544, + "nbytes": 50176, + "storage": "weights", + "offset": 3522496, + "pack_index": 79 + }, + { + "name": "model.22.m.0.cv1.3.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "nbytes": 512, + "storage": "weights", + "offset": 3572672, + "pack_index": 80 + }, + { + "name": "model.22.m.0.cv1.3.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 256, + 1, + 1 + ], + "elements": 32768, + "nbytes": 131072, + "storage": "weights", + "offset": 3573184, + "pack_index": 81 + }, + { + "name": "model.22.m.0.cv1.4.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "nbytes": 512, + "storage": "weights", + "offset": 3704256, + "pack_index": 82 + }, + { + "name": "model.22.m.0.cv1.4.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 1, + 3, + 3 + ], + "elements": 1152, + "nbytes": 4608, + "storage": "weights", + "offset": 3704768, + "pack_index": 83 + }, + { + "name": "model.23.dfl.conv.weight", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 1, + 1 + ], + "elements": 16, + "nbytes": 64, + "storage": "weights", + "offset": 3709376, + "pack_index": 84 + }, + { + "name": "model.23.one2one_cv2.0.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "nbytes": 256, + "storage": "weights", + "offset": 3709440, + "pack_index": 85 + }, + { + "name": "model.23.one2one_cv2.0.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "nbytes": 147456, + "storage": "weights", + "offset": 3709696, + "pack_index": 86 + }, + { + "name": "model.23.one2one_cv2.0.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "nbytes": 256, + "storage": "weights", + "offset": 3857152, + "pack_index": 87 + }, + { + "name": "model.23.one2one_cv2.0.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "nbytes": 147456, + "storage": "weights", + "offset": 3857408, + "pack_index": 88 + }, + { + "name": "model.23.one2one_cv2.0.2.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "nbytes": 256, + "storage": "weights", + "offset": 4004864, + "pack_index": 89 + }, + { + "name": "model.23.one2one_cv2.0.2.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 1, + 1 + ], + "elements": 4096, + "nbytes": 16384, + "storage": "weights", + "offset": 4005120, + "pack_index": 90 + }, + { + "name": "model.23.one2one_cv2.1.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "nbytes": 256, + "storage": "weights", + "offset": 4021504, + "pack_index": 91 + }, + { + "name": "model.23.one2one_cv2.1.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 128, + 3, + 3 + ], + "elements": 73728, + "nbytes": 294912, + "storage": "weights", + "offset": 4021760, + "pack_index": 92 + }, + { + "name": "model.23.one2one_cv2.1.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "nbytes": 256, + "storage": "weights", + "offset": 4316672, + "pack_index": 93 + }, + { + "name": "model.23.one2one_cv2.1.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "nbytes": 147456, + "storage": "weights", + "offset": 4316928, + "pack_index": 94 + }, + { + "name": "model.23.one2one_cv2.1.2.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "nbytes": 256, + "storage": "weights", + "offset": 4464384, + "pack_index": 95 + }, + { + "name": "model.23.one2one_cv2.1.2.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 1, + 1 + ], + "elements": 4096, + "nbytes": 16384, + "storage": "weights", + "offset": 4464640, + "pack_index": 96 + }, + { + "name": "model.23.one2one_cv2.2.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "nbytes": 256, + "storage": "weights", + "offset": 4481024, + "pack_index": 97 + }, + { + "name": "model.23.one2one_cv2.2.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 256, + 3, + 3 + ], + "elements": 147456, + "nbytes": 589824, + "storage": "weights", + "offset": 4481280, + "pack_index": 98 + }, + { + "name": "model.23.one2one_cv2.2.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "nbytes": 256, + "storage": "weights", + "offset": 5071104, + "pack_index": 99 + }, + { + "name": "model.23.one2one_cv2.2.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "nbytes": 147456, + "storage": "weights", + "offset": 5071360, + "pack_index": 100 + }, + { + "name": "model.23.one2one_cv2.2.2.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "nbytes": 256, + "storage": "weights", + "offset": 5218816, + "pack_index": 101 + }, + { + "name": "model.23.one2one_cv2.2.2.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 1, + 1 + ], + "elements": 4096, + "nbytes": 16384, + "storage": "weights", + "offset": 5219072, + "pack_index": 102 + }, + { + "name": "model.23.one2one_cv3.0.0.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "nbytes": 256, + "storage": "weights", + "offset": 5235456, + "pack_index": 103 + }, + { + "name": "model.23.one2one_cv3.0.0.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 1, + 3, + 3 + ], + "elements": 576, + "nbytes": 2304, + "storage": "weights", + "offset": 5235712, + "pack_index": 104 + }, + { + "name": "model.23.one2one_cv3.0.0.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ], + "elements": 80, + "nbytes": 320, + "storage": "weights", + "offset": 5238016, + "pack_index": 105 + }, + { + "name": "model.23.one2one_cv3.0.0.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 64, + 1, + 1 + ], + "elements": 5120, + "nbytes": 20480, + "storage": "weights", + "offset": 5238336, + "pack_index": 106 + }, + { + "name": "model.23.one2one_cv3.0.1.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ], + "elements": 80, + "nbytes": 320, + "storage": "weights", + "offset": 5258816, + "pack_index": 107 + }, + { + "name": "model.23.one2one_cv3.0.1.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 1, + 3, + 3 + ], + "elements": 720, + "nbytes": 2880, + "storage": "weights", + "offset": 5259136, + "pack_index": 108 + }, + { + "name": "model.23.one2one_cv3.0.1.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ], + "elements": 80, + "nbytes": 320, + "storage": "weights", + "offset": 5262016, + "pack_index": 109 + }, + { + "name": "model.23.one2one_cv3.0.1.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 80, + 1, + 1 + ], + "elements": 6400, + "nbytes": 25600, + "storage": "weights", + "offset": 5262336, + "pack_index": 110 + }, + { + "name": "model.23.one2one_cv3.0.2.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ], + "elements": 80, + "nbytes": 320, + "storage": "weights", + "offset": 5287936, + "pack_index": 111 + }, + { + "name": "model.23.one2one_cv3.0.2.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 80, + 1, + 1 + ], + "elements": 6400, + "nbytes": 25600, + "storage": "weights", + "offset": 5288256, + "pack_index": 112 + }, + { + "name": "model.23.one2one_cv3.1.0.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "nbytes": 512, + "storage": "weights", + "offset": 5313856, + "pack_index": 113 + }, + { + "name": "model.23.one2one_cv3.1.0.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 1, + 3, + 3 + ], + "elements": 1152, + "nbytes": 4608, + "storage": "weights", + "offset": 5314368, + "pack_index": 114 + }, + { + "name": "model.23.one2one_cv3.1.0.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ], + "elements": 80, + "nbytes": 320, + "storage": "weights", + "offset": 5318976, + "pack_index": 115 + }, + { + "name": "model.23.one2one_cv3.1.0.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 128, + 1, + 1 + ], + "elements": 10240, + "nbytes": 40960, + "storage": "weights", + "offset": 5319296, + "pack_index": 116 + }, + { + "name": "model.23.one2one_cv3.1.1.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ], + "elements": 80, + "nbytes": 320, + "storage": "weights", + "offset": 5360256, + "pack_index": 117 + }, + { + "name": "model.23.one2one_cv3.1.1.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 1, + 3, + 3 + ], + "elements": 720, + "nbytes": 2880, + "storage": "weights", + "offset": 5360576, + "pack_index": 118 + }, + { + "name": "model.23.one2one_cv3.1.1.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ], + "elements": 80, + "nbytes": 320, + "storage": "weights", + "offset": 5363456, + "pack_index": 119 + }, + { + "name": "model.23.one2one_cv3.1.1.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 80, + 1, + 1 + ], + "elements": 6400, + "nbytes": 25600, + "storage": "weights", + "offset": 5363776, + "pack_index": 120 + }, + { + "name": "model.23.one2one_cv3.1.2.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ], + "elements": 80, + "nbytes": 320, + "storage": "weights", + "offset": 5389376, + "pack_index": 121 + }, + { + "name": "model.23.one2one_cv3.1.2.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 80, + 1, + 1 + ], + "elements": 6400, + "nbytes": 25600, + "storage": "weights", + "offset": 5389696, + "pack_index": 122 + }, + { + "name": "model.23.one2one_cv3.2.0.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "nbytes": 1024, + "storage": "weights", + "offset": 5415296, + "pack_index": 123 + }, + { + "name": "model.23.one2one_cv3.2.0.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 1, + 3, + 3 + ], + "elements": 2304, + "nbytes": 9216, + "storage": "weights", + "offset": 5416320, + "pack_index": 124 + }, + { + "name": "model.23.one2one_cv3.2.0.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ], + "elements": 80, + "nbytes": 320, + "storage": "weights", + "offset": 5425536, + "pack_index": 125 + }, + { + "name": "model.23.one2one_cv3.2.0.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 256, + 1, + 1 + ], + "elements": 20480, + "nbytes": 81920, + "storage": "weights", + "offset": 5425856, + "pack_index": 126 + }, + { + "name": "model.23.one2one_cv3.2.1.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ], + "elements": 80, + "nbytes": 320, + "storage": "weights", + "offset": 5507776, + "pack_index": 127 + }, + { + "name": "model.23.one2one_cv3.2.1.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 1, + 3, + 3 + ], + "elements": 720, + "nbytes": 2880, + "storage": "weights", + "offset": 5508096, + "pack_index": 128 + }, + { + "name": "model.23.one2one_cv3.2.1.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ], + "elements": 80, + "nbytes": 320, + "storage": "weights", + "offset": 5510976, + "pack_index": 129 + }, + { + "name": "model.23.one2one_cv3.2.1.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 80, + 1, + 1 + ], + "elements": 6400, + "nbytes": 25600, + "storage": "weights", + "offset": 5511296, + "pack_index": 130 + }, + { + "name": "model.23.one2one_cv3.2.2.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ], + "elements": 80, + "nbytes": 320, + "storage": "weights", + "offset": 5536896, + "pack_index": 131 + }, + { + "name": "model.23.one2one_cv3.2.2.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 80, + 1, + 1 + ], + "elements": 6400, + "nbytes": 25600, + "storage": "weights", + "offset": 5537216, + "pack_index": 132 + }, + { + "name": "model.3.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "nbytes": 256, + "storage": "weights", + "offset": 5562816, + "pack_index": 133 + }, + { + "name": "model.3.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 32, + 3, + 3 + ], + "elements": 18432, + "nbytes": 73728, + "storage": "weights", + "offset": 5563072, + "pack_index": 134 + }, + { + "name": "model.4.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "nbytes": 256, + "storage": "weights", + "offset": 5636800, + "pack_index": 135 + }, + { + "name": "model.4.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 1, + 1 + ], + "elements": 4096, + "nbytes": 16384, + "storage": "weights", + "offset": 5637056, + "pack_index": 136 + }, + { + "name": "model.4.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "nbytes": 256, + "storage": "weights", + "offset": 5653440, + "pack_index": 137 + }, + { + "name": "model.4.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 128, + 1, + 1 + ], + "elements": 8192, + "nbytes": 32768, + "storage": "weights", + "offset": 5653696, + "pack_index": 138 + }, + { + "name": "model.4.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ], + "elements": 32, + "nbytes": 128, + "storage": "weights", + "offset": 5686464, + "pack_index": 139 + }, + { + "name": "model.4.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 32, + 3, + 3 + ], + "elements": 9216, + "nbytes": 36864, + "storage": "weights", + "offset": 5686592, + "pack_index": 140 + }, + { + "name": "model.4.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ], + "elements": 32, + "nbytes": 128, + "storage": "weights", + "offset": 5723456, + "pack_index": 141 + }, + { + "name": "model.4.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 32, + 3, + 3 + ], + "elements": 9216, + "nbytes": 36864, + "storage": "weights", + "offset": 5723584, + "pack_index": 142 + }, + { + "name": "model.4.m.1.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ], + "elements": 32, + "nbytes": 128, + "storage": "weights", + "offset": 5760448, + "pack_index": 143 + }, + { + "name": "model.4.m.1.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 32, + 3, + 3 + ], + "elements": 9216, + "nbytes": 36864, + "storage": "weights", + "offset": 5760576, + "pack_index": 144 + }, + { + "name": "model.4.m.1.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ], + "elements": 32, + "nbytes": 128, + "storage": "weights", + "offset": 5797440, + "pack_index": 145 + }, + { + "name": "model.4.m.1.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 32, + 3, + 3 + ], + "elements": 9216, + "nbytes": 36864, + "storage": "weights", + "offset": 5797568, + "pack_index": 146 + }, + { + "name": "model.5.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "nbytes": 512, + "storage": "weights", + "offset": 5834432, + "pack_index": 147 + }, + { + "name": "model.5.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 64, + 1, + 1 + ], + "elements": 8192, + "nbytes": 32768, + "storage": "weights", + "offset": 5834944, + "pack_index": 148 + }, + { + "name": "model.5.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "nbytes": 512, + "storage": "weights", + "offset": 5867712, + "pack_index": 149 + }, + { + "name": "model.5.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 1, + 3, + 3 + ], + "elements": 1152, + "nbytes": 4608, + "storage": "weights", + "offset": 5868224, + "pack_index": 150 + }, + { + "name": "model.6.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "nbytes": 512, + "storage": "weights", + "offset": 5872832, + "pack_index": 151 + }, + { + "name": "model.6.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 128, + 1, + 1 + ], + "elements": 16384, + "nbytes": 65536, + "storage": "weights", + "offset": 5873344, + "pack_index": 152 + }, + { + "name": "model.6.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "nbytes": 512, + "storage": "weights", + "offset": 5938880, + "pack_index": 153 + }, + { + "name": "model.6.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 256, + 1, + 1 + ], + "elements": 32768, + "nbytes": 131072, + "storage": "weights", + "offset": 5939392, + "pack_index": 154 + }, + { + "name": "model.6.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "nbytes": 256, + "storage": "weights", + "offset": 6070464, + "pack_index": 155 + }, + { + "name": "model.6.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "nbytes": 147456, + "storage": "weights", + "offset": 6070720, + "pack_index": 156 + }, + { + "name": "model.6.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "nbytes": 256, + "storage": "weights", + "offset": 6218176, + "pack_index": 157 + }, + { + "name": "model.6.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "nbytes": 147456, + "storage": "weights", + "offset": 6218432, + "pack_index": 158 + }, + { + "name": "model.6.m.1.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "nbytes": 256, + "storage": "weights", + "offset": 6365888, + "pack_index": 159 + }, + { + "name": "model.6.m.1.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "nbytes": 147456, + "storage": "weights", + "offset": 6366144, + "pack_index": 160 + }, + { + "name": "model.6.m.1.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "nbytes": 256, + "storage": "weights", + "offset": 6513600, + "pack_index": 161 + }, + { + "name": "model.6.m.1.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "nbytes": 147456, + "storage": "weights", + "offset": 6513856, + "pack_index": 162 + }, + { + "name": "model.7.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "nbytes": 1024, + "storage": "weights", + "offset": 6661312, + "pack_index": 163 + }, + { + "name": "model.7.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 128, + 1, + 1 + ], + "elements": 32768, + "nbytes": 131072, + "storage": "weights", + "offset": 6662336, + "pack_index": 164 + }, + { + "name": "model.7.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "nbytes": 1024, + "storage": "weights", + "offset": 6793408, + "pack_index": 165 + }, + { + "name": "model.7.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 1, + 3, + 3 + ], + "elements": 2304, + "nbytes": 9216, + "storage": "weights", + "offset": 6794432, + "pack_index": 166 + }, + { + "name": "model.8.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "nbytes": 1024, + "storage": "weights", + "offset": 6803648, + "pack_index": 167 + }, + { + "name": "model.8.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 256, + 1, + 1 + ], + "elements": 65536, + "nbytes": 262144, + "storage": "weights", + "offset": 6804672, + "pack_index": 168 + }, + { + "name": "model.8.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "nbytes": 1024, + "storage": "weights", + "offset": 7066816, + "pack_index": 169 + }, + { + "name": "model.8.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 384, + 1, + 1 + ], + "elements": 98304, + "nbytes": 393216, + "storage": "weights", + "offset": 7067840, + "pack_index": 170 + }, + { + "name": "model.8.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "nbytes": 512, + "storage": "weights", + "offset": 7461056, + "pack_index": 171 + }, + { + "name": "model.8.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 128, + 3, + 3 + ], + "elements": 147456, + "nbytes": 589824, + "storage": "weights", + "offset": 7461568, + "pack_index": 172 + }, + { + "name": "model.8.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "nbytes": 512, + "storage": "weights", + "offset": 8051392, + "pack_index": 173 + }, + { + "name": "model.8.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 128, + 3, + 3 + ], + "elements": 147456, + "nbytes": 589824, + "storage": "weights", + "offset": 8051904, + "pack_index": 174 + }, + { + "name": "model.9.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "nbytes": 512, + "storage": "weights", + "offset": 8641728, + "pack_index": 175 + }, + { + "name": "model.9.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 256, + 1, + 1 + ], + "elements": 32768, + "nbytes": 131072, + "storage": "weights", + "offset": 8642240, + "pack_index": 176 + }, + { + "name": "model.9.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "nbytes": 1024, + "storage": "weights", + "offset": 8773312, + "pack_index": 177 + }, + { + "name": "model.9.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 512, + 1, + 1 + ], + "elements": 131072, + "nbytes": 524288, + "storage": "weights", + "offset": 8774336, + "pack_index": 178 + }, + { + "name": "onnx::Split_214", + "dtype": "INT64", + "shape": [ + 2 + ], + "elements": 2, + "nbytes": 16, + "storage": "weights", + "offset": 9298624, + "pack_index": 179 + }, + { + "name": "onnx::Split_225", + "dtype": "INT64", + "shape": [ + 2 + ], + "elements": 2, + "nbytes": 16, + "storage": "weights", + "offset": 9298688, + "pack_index": 180 + }, + { + "name": "onnx::Split_245", + "dtype": "INT64", + "shape": [ + 2 + ], + "elements": 2, + "nbytes": 16, + "storage": "weights", + "offset": 9298752, + "pack_index": 181 + }, + { + "name": "onnx::Split_273", + "dtype": "INT64", + "shape": [ + 2 + ], + "elements": 2, + "nbytes": 16, + "storage": "weights", + "offset": 9298816, + "pack_index": 182 + }, + { + "name": "onnx::Split_301", + "dtype": "INT64", + "shape": [ + 2 + ], + "elements": 2, + "nbytes": 16, + "storage": "weights", + "offset": 9298880, + "pack_index": 183 + }, + { + "name": "onnx::Split_347", + "dtype": "INT64", + "shape": [ + 3 + ], + "elements": 3, + "nbytes": 24, + "storage": "weights", + "offset": 9298944, + "pack_index": 184 + }, + { + "name": "onnx::Split_572", + "dtype": "INT64", + "shape": [ + 2 + ], + "elements": 2, + "nbytes": 16, + "storage": "weights", + "offset": 9299008, + "pack_index": 185 + }, + { + "name": "onnx::Split_612", + "dtype": "INT64", + "shape": [ + 2 + ], + "elements": 2, + "nbytes": 16, + "storage": "weights", + "offset": 9299072, + "pack_index": 186 + }, + { + "name": "/model.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 320, + 320 + ], + "elements": 1638400, + "nbytes": 6553600, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 6553600, + "producer": "N000", + "live_start": 0, + "live_end": 2, + "checkpoint": false + }, + { + "name": "/model.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 320, + 320 + ], + "elements": 1638400, + "nbytes": 6553600, + "storage": "workspace", + "offset": 6553600, + "allocated_nbytes": 6553600, + "producer": "N001", + "live_start": 1, + "live_end": 2, + "checkpoint": false + }, + { + "name": "/model.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 320, + 320 + ], + "elements": 1638400, + "nbytes": 6553600, + "storage": "workspace", + "offset": 13107200, + "allocated_nbytes": 6553600, + "producer": "N002", + "live_start": 2, + "live_end": 3, + "checkpoint": false + }, + { + "name": "/model.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ], + "elements": 819200, + "nbytes": 3276800, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 3276800, + "producer": "N003", + "live_start": 3, + "live_end": 5, + "checkpoint": false + }, + { + "name": "/model.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ], + "elements": 819200, + "nbytes": 3276800, + "storage": "workspace", + "offset": 3276800, + "allocated_nbytes": 3276800, + "producer": "N004", + "live_start": 4, + "live_end": 5, + "checkpoint": false + }, + { + "name": "/model.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ], + "elements": 819200, + "nbytes": 3276800, + "storage": "workspace", + "offset": 6553600, + "allocated_nbytes": 3276800, + "producer": "N005", + "live_start": 5, + "live_end": 308, + "checkpoint": true + }, + { + "name": "/model.2/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ], + "elements": 819200, + "nbytes": 3276800, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 3276800, + "producer": "N006", + "live_start": 6, + "live_end": 8, + "checkpoint": false + }, + { + "name": "/model.2/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ], + "elements": 819200, + "nbytes": 3276800, + "storage": "workspace", + "offset": 3276800, + "allocated_nbytes": 3276800, + "producer": "N007", + "live_start": 7, + "live_end": 8, + "checkpoint": false + }, + { + "name": "/model.2/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ], + "elements": 819200, + "nbytes": 3276800, + "storage": "workspace", + "offset": 9830400, + "allocated_nbytes": 3276800, + "producer": "N008", + "live_start": 8, + "live_end": 9, + "checkpoint": false + }, + { + "name": "/model.2/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 1638400, + "producer": "N009", + "live_start": 9, + "live_end": 17, + "checkpoint": false + }, + { + "name": "/model.2/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 1638400, + "allocated_nbytes": 1638400, + "producer": "N009", + "live_start": 9, + "live_end": 17, + "checkpoint": false + }, + { + "name": "/model.2/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 3276800, + "allocated_nbytes": 1638400, + "producer": "N010", + "live_start": 10, + "live_end": 12, + "checkpoint": false + }, + { + "name": "/model.2/m.0/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 1638400, + "producer": "N011", + "live_start": 11, + "live_end": 12, + "checkpoint": false + }, + { + "name": "/model.2/m.0/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 9830400, + "allocated_nbytes": 1638400, + "producer": "N012", + "live_start": 12, + "live_end": 13, + "checkpoint": false + }, + { + "name": "/model.2/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 3276800, + "allocated_nbytes": 1638400, + "producer": "N013", + "live_start": 13, + "live_end": 15, + "checkpoint": false + }, + { + "name": "/model.2/m.0/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 1638400, + "producer": "N014", + "live_start": 14, + "live_end": 15, + "checkpoint": false + }, + { + "name": "/model.2/m.0/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 9830400, + "allocated_nbytes": 1638400, + "producer": "N015", + "live_start": 15, + "live_end": 16, + "checkpoint": false + }, + { + "name": "/model.2/m.0/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 3276800, + "allocated_nbytes": 1638400, + "producer": "N016", + "live_start": 16, + "live_end": 17, + "checkpoint": false + }, + { + "name": "/model.2/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 48, + 160, + 160 + ], + "elements": 1228800, + "nbytes": 4915200, + "storage": "workspace", + "offset": 9830400, + "allocated_nbytes": 4915200, + "producer": "N017", + "live_start": 17, + "live_end": 18, + "checkpoint": false + }, + { + "name": "/model.2/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ], + "elements": 819200, + "nbytes": 3276800, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 3276800, + "producer": "N018", + "live_start": 18, + "live_end": 20, + "checkpoint": false + }, + { + "name": "/model.2/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ], + "elements": 819200, + "nbytes": 3276800, + "storage": "workspace", + "offset": 3276800, + "allocated_nbytes": 3276800, + "producer": "N019", + "live_start": 19, + "live_end": 20, + "checkpoint": false + }, + { + "name": "/model.2/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ], + "elements": 819200, + "nbytes": 3276800, + "storage": "workspace", + "offset": 9830400, + "allocated_nbytes": 3276800, + "producer": "N020", + "live_start": 20, + "live_end": 308, + "checkpoint": true + }, + { + "name": "/model.3/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 1638400, + "producer": "N021", + "live_start": 21, + "live_end": 23, + "checkpoint": false + }, + { + "name": "/model.3/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 1638400, + "allocated_nbytes": 1638400, + "producer": "N022", + "live_start": 22, + "live_end": 23, + "checkpoint": false + }, + { + "name": "/model.3/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 3276800, + "allocated_nbytes": 1638400, + "producer": "N023", + "live_start": 23, + "live_end": 24, + "checkpoint": false + }, + { + "name": "/model.4/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 1638400, + "producer": "N024", + "live_start": 24, + "live_end": 26, + "checkpoint": false + }, + { + "name": "/model.4/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 1638400, + "allocated_nbytes": 1638400, + "producer": "N025", + "live_start": 25, + "live_end": 26, + "checkpoint": false + }, + { + "name": "/model.4/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 3276800, + "allocated_nbytes": 1638400, + "producer": "N026", + "live_start": 26, + "live_end": 27, + "checkpoint": false + }, + { + "name": "/model.4/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 819200, + "producer": "N027", + "live_start": 27, + "live_end": 42, + "checkpoint": false + }, + { + "name": "/model.4/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 819200, + "allocated_nbytes": 819200, + "producer": "N027", + "live_start": 27, + "live_end": 42, + "checkpoint": false + }, + { + "name": "/model.4/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 1638400, + "allocated_nbytes": 819200, + "producer": "N028", + "live_start": 28, + "live_end": 30, + "checkpoint": false + }, + { + "name": "/model.4/m.0/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 819200, + "producer": "N029", + "live_start": 29, + "live_end": 30, + "checkpoint": false + }, + { + "name": "/model.4/m.0/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 3276800, + "allocated_nbytes": 819200, + "producer": "N030", + "live_start": 30, + "live_end": 31, + "checkpoint": false + }, + { + "name": "/model.4/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 1638400, + "allocated_nbytes": 819200, + "producer": "N031", + "live_start": 31, + "live_end": 33, + "checkpoint": false + }, + { + "name": "/model.4/m.0/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 819200, + "producer": "N032", + "live_start": 32, + "live_end": 33, + "checkpoint": false + }, + { + "name": "/model.4/m.0/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 3276800, + "allocated_nbytes": 819200, + "producer": "N033", + "live_start": 33, + "live_end": 34, + "checkpoint": false + }, + { + "name": "/model.4/m.0/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 1638400, + "allocated_nbytes": 819200, + "producer": "N034", + "live_start": 34, + "live_end": 42, + "checkpoint": false + }, + { + "name": "/model.4/m.1/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 819200, + "producer": "N035", + "live_start": 35, + "live_end": 37, + "checkpoint": false + }, + { + "name": "/model.4/m.1/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 3276800, + "allocated_nbytes": 819200, + "producer": "N036", + "live_start": 36, + "live_end": 37, + "checkpoint": false + }, + { + "name": "/model.4/m.1/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 4096000, + "allocated_nbytes": 819200, + "producer": "N037", + "live_start": 37, + "live_end": 38, + "checkpoint": false + }, + { + "name": "/model.4/m.1/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 819200, + "producer": "N038", + "live_start": 38, + "live_end": 40, + "checkpoint": false + }, + { + "name": "/model.4/m.1/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 3276800, + "allocated_nbytes": 819200, + "producer": "N039", + "live_start": 39, + "live_end": 40, + "checkpoint": false + }, + { + "name": "/model.4/m.1/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 4096000, + "allocated_nbytes": 819200, + "producer": "N040", + "live_start": 40, + "live_end": 41, + "checkpoint": false + }, + { + "name": "/model.4/m.1/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 819200, + "producer": "N041", + "live_start": 41, + "live_end": 42, + "checkpoint": false + }, + { + "name": "/model.4/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 80, + 80 + ], + "elements": 819200, + "nbytes": 3276800, + "storage": "workspace", + "offset": 3276800, + "allocated_nbytes": 3276800, + "producer": "N042", + "live_start": 42, + "live_end": 43, + "checkpoint": false + }, + { + "name": "/model.4/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 1638400, + "producer": "N043", + "live_start": 43, + "live_end": 45, + "checkpoint": false + }, + { + "name": "/model.4/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 1638400, + "allocated_nbytes": 1638400, + "producer": "N044", + "live_start": 44, + "live_end": 45, + "checkpoint": false + }, + { + "name": "/model.4/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 3276800, + "allocated_nbytes": 1638400, + "producer": "N045", + "live_start": 45, + "live_end": 308, + "checkpoint": true + }, + { + "name": "/model.5/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 80, + 80 + ], + "elements": 819200, + "nbytes": 3276800, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 3276800, + "producer": "N046", + "live_start": 46, + "live_end": 48, + "checkpoint": false + }, + { + "name": "/model.5/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 80, + 80 + ], + "elements": 819200, + "nbytes": 3276800, + "storage": "workspace", + "offset": 13107200, + "allocated_nbytes": 3276800, + "producer": "N047", + "live_start": 47, + "live_end": 48, + "checkpoint": false + }, + { + "name": "/model.5/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 80, + 80 + ], + "elements": 819200, + "nbytes": 3276800, + "storage": "workspace", + "offset": 16384000, + "allocated_nbytes": 3276800, + "producer": "N048", + "live_start": 48, + "live_end": 49, + "checkpoint": false + }, + { + "name": "/model.5/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 819200, + "producer": "N049", + "live_start": 49, + "live_end": 50, + "checkpoint": false + }, + { + "name": "/model.6/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 819200, + "allocated_nbytes": 819200, + "producer": "N050", + "live_start": 50, + "live_end": 52, + "checkpoint": false + }, + { + "name": "/model.6/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 819200, + "producer": "N051", + "live_start": 51, + "live_end": 52, + "checkpoint": false + }, + { + "name": "/model.6/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 1638400, + "allocated_nbytes": 819200, + "producer": "N052", + "live_start": 52, + "live_end": 53, + "checkpoint": false + }, + { + "name": "/model.6/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 409600, + "producer": "N053", + "live_start": 53, + "live_end": 68, + "checkpoint": false + }, + { + "name": "/model.6/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 409600, + "allocated_nbytes": 409600, + "producer": "N053", + "live_start": 53, + "live_end": 68, + "checkpoint": false + }, + { + "name": "/model.6/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 819200, + "allocated_nbytes": 409600, + "producer": "N054", + "live_start": 54, + "live_end": 56, + "checkpoint": false + }, + { + "name": "/model.6/m.0/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 1228800, + "allocated_nbytes": 409600, + "producer": "N055", + "live_start": 55, + "live_end": 56, + "checkpoint": false + }, + { + "name": "/model.6/m.0/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 1638400, + "allocated_nbytes": 409600, + "producer": "N056", + "live_start": 56, + "live_end": 57, + "checkpoint": false + }, + { + "name": "/model.6/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 819200, + "allocated_nbytes": 409600, + "producer": "N057", + "live_start": 57, + "live_end": 59, + "checkpoint": false + }, + { + "name": "/model.6/m.0/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 1228800, + "allocated_nbytes": 409600, + "producer": "N058", + "live_start": 58, + "live_end": 59, + "checkpoint": false + }, + { + "name": "/model.6/m.0/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 1638400, + "allocated_nbytes": 409600, + "producer": "N059", + "live_start": 59, + "live_end": 60, + "checkpoint": false + }, + { + "name": "/model.6/m.0/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 819200, + "allocated_nbytes": 409600, + "producer": "N060", + "live_start": 60, + "live_end": 68, + "checkpoint": false + }, + { + "name": "/model.6/m.1/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 1228800, + "allocated_nbytes": 409600, + "producer": "N061", + "live_start": 61, + "live_end": 63, + "checkpoint": false + }, + { + "name": "/model.6/m.1/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 1638400, + "allocated_nbytes": 409600, + "producer": "N062", + "live_start": 62, + "live_end": 63, + "checkpoint": false + }, + { + "name": "/model.6/m.1/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2048000, + "allocated_nbytes": 409600, + "producer": "N063", + "live_start": 63, + "live_end": 64, + "checkpoint": false + }, + { + "name": "/model.6/m.1/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 1228800, + "allocated_nbytes": 409600, + "producer": "N064", + "live_start": 64, + "live_end": 66, + "checkpoint": false + }, + { + "name": "/model.6/m.1/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 1638400, + "allocated_nbytes": 409600, + "producer": "N065", + "live_start": 65, + "live_end": 66, + "checkpoint": false + }, + { + "name": "/model.6/m.1/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2048000, + "allocated_nbytes": 409600, + "producer": "N066", + "live_start": 66, + "live_end": 67, + "checkpoint": false + }, + { + "name": "/model.6/m.1/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 1228800, + "allocated_nbytes": 409600, + "producer": "N067", + "live_start": 67, + "live_end": 68, + "checkpoint": false + }, + { + "name": "/model.6/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 40, + 40 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 1638400, + "allocated_nbytes": 1638400, + "producer": "N068", + "live_start": 68, + "live_end": 69, + "checkpoint": false + }, + { + "name": "/model.6/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 819200, + "producer": "N069", + "live_start": 69, + "live_end": 71, + "checkpoint": false + }, + { + "name": "/model.6/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 819200, + "allocated_nbytes": 819200, + "producer": "N070", + "live_start": 70, + "live_end": 71, + "checkpoint": false + }, + { + "name": "/model.6/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 1638400, + "allocated_nbytes": 819200, + "producer": "N071", + "live_start": 71, + "live_end": 308, + "checkpoint": true + }, + { + "name": "/model.7/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 40, + 40 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 1638400, + "producer": "N072", + "live_start": 72, + "live_end": 74, + "checkpoint": false + }, + { + "name": "/model.7/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 40, + 40 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 1638400, + "producer": "N073", + "live_start": 73, + "live_end": 74, + "checkpoint": false + }, + { + "name": "/model.7/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 40, + 40 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 13107200, + "allocated_nbytes": 1638400, + "producer": "N074", + "live_start": 74, + "live_end": 75, + "checkpoint": false + }, + { + "name": "/model.7/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 409600, + "producer": "N075", + "live_start": 75, + "live_end": 76, + "checkpoint": false + }, + { + "name": "/model.8/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 409600, + "allocated_nbytes": 409600, + "producer": "N076", + "live_start": 76, + "live_end": 78, + "checkpoint": false + }, + { + "name": "/model.8/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 409600, + "producer": "N077", + "live_start": 77, + "live_end": 78, + "checkpoint": false + }, + { + "name": "/model.8/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 819200, + "allocated_nbytes": 409600, + "producer": "N078", + "live_start": 78, + "live_end": 79, + "checkpoint": false + }, + { + "name": "/model.8/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 204800, + "producer": "N079", + "live_start": 79, + "live_end": 87, + "checkpoint": false + }, + { + "name": "/model.8/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 204800, + "allocated_nbytes": 204800, + "producer": "N079", + "live_start": 79, + "live_end": 87, + "checkpoint": false + }, + { + "name": "/model.8/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 409600, + "allocated_nbytes": 204800, + "producer": "N080", + "live_start": 80, + "live_end": 82, + "checkpoint": false + }, + { + "name": "/model.8/m.0/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 614400, + "allocated_nbytes": 204800, + "producer": "N081", + "live_start": 81, + "live_end": 82, + "checkpoint": false + }, + { + "name": "/model.8/m.0/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 819200, + "allocated_nbytes": 204800, + "producer": "N082", + "live_start": 82, + "live_end": 83, + "checkpoint": false + }, + { + "name": "/model.8/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 409600, + "allocated_nbytes": 204800, + "producer": "N083", + "live_start": 83, + "live_end": 85, + "checkpoint": false + }, + { + "name": "/model.8/m.0/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 614400, + "allocated_nbytes": 204800, + "producer": "N084", + "live_start": 84, + "live_end": 85, + "checkpoint": false + }, + { + "name": "/model.8/m.0/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 819200, + "allocated_nbytes": 204800, + "producer": "N085", + "live_start": 85, + "live_end": 86, + "checkpoint": false + }, + { + "name": "/model.8/m.0/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 409600, + "allocated_nbytes": 204800, + "producer": "N086", + "live_start": 86, + "live_end": 87, + "checkpoint": false + }, + { + "name": "/model.8/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 384, + 20, + 20 + ], + "elements": 153600, + "nbytes": 614400, + "storage": "workspace", + "offset": 614400, + "allocated_nbytes": 614400, + "producer": "N087", + "live_start": 87, + "live_end": 88, + "checkpoint": false + }, + { + "name": "/model.8/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 409600, + "producer": "N088", + "live_start": 88, + "live_end": 90, + "checkpoint": false + }, + { + "name": "/model.8/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 409600, + "allocated_nbytes": 409600, + "producer": "N089", + "live_start": 89, + "live_end": 90, + "checkpoint": false + }, + { + "name": "/model.8/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 819200, + "allocated_nbytes": 409600, + "producer": "N090", + "live_start": 90, + "live_end": 308, + "checkpoint": true + }, + { + "name": "/model.9/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 204800, + "producer": "N091", + "live_start": 91, + "live_end": 93, + "checkpoint": false + }, + { + "name": "/model.9/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 204800, + "allocated_nbytes": 204800, + "producer": "N092", + "live_start": 92, + "live_end": 93, + "checkpoint": false + }, + { + "name": "/model.9/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 409600, + "allocated_nbytes": 204800, + "producer": "N093", + "live_start": 93, + "live_end": 97, + "checkpoint": false + }, + { + "name": "/model.9/m/MaxPool_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 204800, + "producer": "N094", + "live_start": 94, + "live_end": 97, + "checkpoint": false + }, + { + "name": "/model.9/m_1/MaxPool_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 204800, + "allocated_nbytes": 204800, + "producer": "N095", + "live_start": 95, + "live_end": 97, + "checkpoint": false + }, + { + "name": "/model.9/m_2/MaxPool_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 614400, + "allocated_nbytes": 204800, + "producer": "N096", + "live_start": 96, + "live_end": 97, + "checkpoint": false + }, + { + "name": "/model.9/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 512, + 20, + 20 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 819200, + "producer": "N097", + "live_start": 97, + "live_end": 98, + "checkpoint": false + }, + { + "name": "/model.9/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 409600, + "producer": "N098", + "live_start": 98, + "live_end": 100, + "checkpoint": false + }, + { + "name": "/model.9/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 409600, + "allocated_nbytes": 409600, + "producer": "N099", + "live_start": 99, + "live_end": 100, + "checkpoint": false + }, + { + "name": "/model.9/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 1228800, + "allocated_nbytes": 409600, + "producer": "N100", + "live_start": 100, + "live_end": 308, + "checkpoint": true + }, + { + "name": "/model.10/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 409600, + "producer": "N101", + "live_start": 101, + "live_end": 103, + "checkpoint": false + }, + { + "name": "/model.10/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 409600, + "allocated_nbytes": 409600, + "producer": "N102", + "live_start": 102, + "live_end": 103, + "checkpoint": false + }, + { + "name": "/model.10/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 409600, + "producer": "N103", + "live_start": 103, + "live_end": 104, + "checkpoint": false + }, + { + "name": "/model.10/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 204800, + "producer": "N104", + "live_start": 104, + "live_end": 125, + "checkpoint": false + }, + { + "name": "/model.10/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 204800, + "allocated_nbytes": 204800, + "producer": "N104", + "live_start": 104, + "live_end": 119, + "checkpoint": false + }, + { + "name": "/model.10/attn/qkv/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 409600, + "allocated_nbytes": 409600, + "producer": "N105", + "live_start": 105, + "live_end": 106, + "checkpoint": false + }, + { + "name": "/model.10/attn/Reshape_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 128, + 400 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 409600, + "producer": "N106", + "live_start": 106, + "live_end": 107, + "checkpoint": false + }, + { + "name": "/model.10/attn/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 32, + 400 + ], + "elements": 25600, + "nbytes": 102400, + "storage": "workspace", + "offset": 409600, + "allocated_nbytes": 102400, + "producer": "N107", + "live_start": 107, + "live_end": 108, + "checkpoint": false + }, + { + "name": "/model.10/attn/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 32, + 400 + ], + "elements": 25600, + "nbytes": 102400, + "storage": "workspace", + "offset": 512000, + "allocated_nbytes": 102400, + "producer": "N107", + "live_start": 107, + "live_end": 109, + "checkpoint": false + }, + { + "name": "/model.10/attn/Split_output_2", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 64, + 400 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 614400, + "allocated_nbytes": 204800, + "producer": "N107", + "live_start": 107, + "live_end": 115, + "checkpoint": false + }, + { + "name": "/model.10/attn/Transpose_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 400, + 32 + ], + "elements": 25600, + "nbytes": 102400, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 102400, + "producer": "N108", + "live_start": 108, + "live_end": 109, + "checkpoint": false + }, + { + "name": "/model.10/attn/MatMul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 400, + 400 + ], + "elements": 320000, + "nbytes": 1280000, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 1280000, + "producer": "N109", + "live_start": 109, + "live_end": 110, + "checkpoint": false + }, + { + "name": "/model.10/attn/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 400, + 400 + ], + "elements": 320000, + "nbytes": 1280000, + "storage": "workspace", + "offset": 13107200, + "allocated_nbytes": 1280000, + "producer": "N110", + "live_start": 110, + "live_end": 111, + "checkpoint": false + }, + { + "name": "/model.10/attn/Softmax_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 400, + 400 + ], + "elements": 320000, + "nbytes": 1280000, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 1280000, + "producer": "N111", + "live_start": 111, + "live_end": 112, + "checkpoint": false + }, + { + "name": "/model.10/attn/Transpose_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 400, + 400 + ], + "elements": 320000, + "nbytes": 1280000, + "storage": "workspace", + "offset": 13107200, + "allocated_nbytes": 1280000, + "producer": "N112", + "live_start": 112, + "live_end": 113, + "checkpoint": false + }, + { + "name": "/model.10/attn/MatMul_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 64, + 400 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 409600, + "allocated_nbytes": 204800, + "producer": "N113", + "live_start": 113, + "live_end": 114, + "checkpoint": false + }, + { + "name": "/model.10/attn/Reshape_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 204800, + "producer": "N114", + "live_start": 114, + "live_end": 117, + "checkpoint": false + }, + { + "name": "/model.10/attn/Reshape_2_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 409600, + "allocated_nbytes": 204800, + "producer": "N115", + "live_start": 115, + "live_end": 116, + "checkpoint": false + }, + { + "name": "/model.10/attn/pe/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 614400, + "allocated_nbytes": 204800, + "producer": "N116", + "live_start": 116, + "live_end": 117, + "checkpoint": false + }, + { + "name": "/model.10/attn/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 409600, + "allocated_nbytes": 204800, + "producer": "N117", + "live_start": 117, + "live_end": 118, + "checkpoint": false + }, + { + "name": "/model.10/attn/proj/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 614400, + "allocated_nbytes": 204800, + "producer": "N118", + "live_start": 118, + "live_end": 119, + "checkpoint": false + }, + { + "name": "/model.10/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 409600, + "allocated_nbytes": 204800, + "producer": "N119", + "live_start": 119, + "live_end": 124, + "checkpoint": false + }, + { + "name": "/model.10/ffn/ffn.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 409600, + "producer": "N120", + "live_start": 120, + "live_end": 122, + "checkpoint": false + }, + { + "name": "/model.10/ffn/ffn.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2867200, + "allocated_nbytes": 409600, + "producer": "N121", + "live_start": 121, + "live_end": 122, + "checkpoint": false + }, + { + "name": "/model.10/ffn/ffn.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 409600, + "producer": "N122", + "live_start": 122, + "live_end": 123, + "checkpoint": false + }, + { + "name": "/model.10/ffn/ffn.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 204800, + "allocated_nbytes": 204800, + "producer": "N123", + "live_start": 123, + "live_end": 124, + "checkpoint": false + }, + { + "name": "/model.10/Add_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 614400, + "allocated_nbytes": 204800, + "producer": "N124", + "live_start": 124, + "live_end": 125, + "checkpoint": false + }, + { + "name": "/model.10/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 204800, + "allocated_nbytes": 409600, + "producer": "N125", + "live_start": 125, + "live_end": 126, + "checkpoint": false + }, + { + "name": "/model.10/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 409600, + "producer": "N126", + "live_start": 126, + "live_end": 128, + "checkpoint": false + }, + { + "name": "/model.10/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 409600, + "producer": "N127", + "live_start": 127, + "live_end": 128, + "checkpoint": false + }, + { + "name": "/model.10/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 409600, + "allocated_nbytes": 409600, + "producer": "N128", + "live_start": 128, + "live_end": 308, + "checkpoint": true + }, + { + "name": "/model.11/Resize_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 40, + 40 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 1638400, + "producer": "N129", + "live_start": 129, + "live_end": 130, + "checkpoint": false + }, + { + "name": "/model.12/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 384, + 40, + 40 + ], + "elements": 614400, + "nbytes": 2457600, + "storage": "workspace", + "offset": 13107200, + "allocated_nbytes": 2457600, + "producer": "N130", + "live_start": 130, + "live_end": 131, + "checkpoint": false + }, + { + "name": "/model.13/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 819200, + "producer": "N131", + "live_start": 131, + "live_end": 133, + "checkpoint": false + }, + { + "name": "/model.13/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 819200, + "producer": "N132", + "live_start": 132, + "live_end": 133, + "checkpoint": false + }, + { + "name": "/model.13/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 5734400, + "allocated_nbytes": 819200, + "producer": "N133", + "live_start": 133, + "live_end": 134, + "checkpoint": false + }, + { + "name": "/model.13/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 409600, + "producer": "N134", + "live_start": 134, + "live_end": 141, + "checkpoint": false + }, + { + "name": "/model.13/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 409600, + "producer": "N134", + "live_start": 134, + "live_end": 141, + "checkpoint": false + }, + { + "name": "/model.13/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2867200, + "allocated_nbytes": 409600, + "producer": "N135", + "live_start": 135, + "live_end": 137, + "checkpoint": false + }, + { + "name": "/model.13/m.0/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 409600, + "producer": "N136", + "live_start": 136, + "live_end": 137, + "checkpoint": false + }, + { + "name": "/model.13/m.0/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 5324800, + "allocated_nbytes": 409600, + "producer": "N137", + "live_start": 137, + "live_end": 138, + "checkpoint": false + }, + { + "name": "/model.13/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2867200, + "allocated_nbytes": 409600, + "producer": "N138", + "live_start": 138, + "live_end": 140, + "checkpoint": false + }, + { + "name": "/model.13/m.0/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 409600, + "producer": "N139", + "live_start": 139, + "live_end": 140, + "checkpoint": false + }, + { + "name": "/model.13/m.0/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 5324800, + "allocated_nbytes": 409600, + "producer": "N140", + "live_start": 140, + "live_end": 141, + "checkpoint": false + }, + { + "name": "/model.13/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 192, + 40, + 40 + ], + "elements": 307200, + "nbytes": 1228800, + "storage": "workspace", + "offset": 13107200, + "allocated_nbytes": 1228800, + "producer": "N141", + "live_start": 141, + "live_end": 142, + "checkpoint": false + }, + { + "name": "/model.13/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 819200, + "producer": "N142", + "live_start": 142, + "live_end": 144, + "checkpoint": false + }, + { + "name": "/model.13/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 819200, + "producer": "N143", + "live_start": 143, + "live_end": 144, + "checkpoint": false + }, + { + "name": "/model.13/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 5734400, + "allocated_nbytes": 819200, + "producer": "N144", + "live_start": 144, + "live_end": 308, + "checkpoint": true + }, + { + "name": "/model.14/Resize_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 80, + 80 + ], + "elements": 819200, + "nbytes": 3276800, + "storage": "workspace", + "offset": 13107200, + "allocated_nbytes": 3276800, + "producer": "N145", + "live_start": 145, + "live_end": 146, + "checkpoint": false + }, + { + "name": "/model.15/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 192, + 80, + 80 + ], + "elements": 1228800, + "nbytes": 4915200, + "storage": "workspace", + "offset": 19660800, + "allocated_nbytes": 4915200, + "producer": "N146", + "live_start": 146, + "live_end": 147, + "checkpoint": false + }, + { + "name": "/model.16/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 13107200, + "allocated_nbytes": 1638400, + "producer": "N147", + "live_start": 147, + "live_end": 149, + "checkpoint": false + }, + { + "name": "/model.16/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 14745600, + "allocated_nbytes": 1638400, + "producer": "N148", + "live_start": 148, + "live_end": 149, + "checkpoint": false + }, + { + "name": "/model.16/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 16384000, + "allocated_nbytes": 1638400, + "producer": "N149", + "live_start": 149, + "live_end": 150, + "checkpoint": false + }, + { + "name": "/model.16/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 819200, + "producer": "N150", + "live_start": 150, + "live_end": 157, + "checkpoint": false + }, + { + "name": "/model.16/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 819200, + "producer": "N150", + "live_start": 150, + "live_end": 157, + "checkpoint": false + }, + { + "name": "/model.16/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 13107200, + "allocated_nbytes": 819200, + "producer": "N151", + "live_start": 151, + "live_end": 153, + "checkpoint": false + }, + { + "name": "/model.16/m.0/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 13926400, + "allocated_nbytes": 819200, + "producer": "N152", + "live_start": 152, + "live_end": 153, + "checkpoint": false + }, + { + "name": "/model.16/m.0/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 14745600, + "allocated_nbytes": 819200, + "producer": "N153", + "live_start": 153, + "live_end": 154, + "checkpoint": false + }, + { + "name": "/model.16/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 13107200, + "allocated_nbytes": 819200, + "producer": "N154", + "live_start": 154, + "live_end": 156, + "checkpoint": false + }, + { + "name": "/model.16/m.0/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 13926400, + "allocated_nbytes": 819200, + "producer": "N155", + "live_start": 155, + "live_end": 156, + "checkpoint": false + }, + { + "name": "/model.16/m.0/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 14745600, + "allocated_nbytes": 819200, + "producer": "N156", + "live_start": 156, + "live_end": 157, + "checkpoint": false + }, + { + "name": "/model.16/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 96, + 80, + 80 + ], + "elements": 614400, + "nbytes": 2457600, + "storage": "workspace", + "offset": 15564800, + "allocated_nbytes": 2457600, + "producer": "N157", + "live_start": 157, + "live_end": 158, + "checkpoint": false + }, + { + "name": "/model.16/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 13107200, + "allocated_nbytes": 1638400, + "producer": "N158", + "live_start": 158, + "live_end": 160, + "checkpoint": false + }, + { + "name": "/model.16/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 14745600, + "allocated_nbytes": 1638400, + "producer": "N159", + "live_start": 159, + "live_end": 160, + "checkpoint": false + }, + { + "name": "/model.16/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 16384000, + "allocated_nbytes": 1638400, + "producer": "N160", + "live_start": 160, + "live_end": 308, + "checkpoint": true + }, + { + "name": "/model.17/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 409600, + "producer": "N161", + "live_start": 161, + "live_end": 163, + "checkpoint": false + }, + { + "name": "/model.17/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 409600, + "producer": "N162", + "live_start": 162, + "live_end": 163, + "checkpoint": false + }, + { + "name": "/model.17/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2867200, + "allocated_nbytes": 409600, + "producer": "N163", + "live_start": 163, + "live_end": 164, + "checkpoint": false + }, + { + "name": "/model.18/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 192, + 40, + 40 + ], + "elements": 307200, + "nbytes": 1228800, + "storage": "workspace", + "offset": 13107200, + "allocated_nbytes": 1228800, + "producer": "N164", + "live_start": 164, + "live_end": 165, + "checkpoint": false + }, + { + "name": "/model.19/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 819200, + "producer": "N165", + "live_start": 165, + "live_end": 167, + "checkpoint": false + }, + { + "name": "/model.19/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 819200, + "producer": "N166", + "live_start": 166, + "live_end": 167, + "checkpoint": false + }, + { + "name": "/model.19/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 13107200, + "allocated_nbytes": 819200, + "producer": "N167", + "live_start": 167, + "live_end": 168, + "checkpoint": false + }, + { + "name": "/model.19/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 409600, + "producer": "N168", + "live_start": 168, + "live_end": 175, + "checkpoint": false + }, + { + "name": "/model.19/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 409600, + "producer": "N168", + "live_start": 168, + "live_end": 175, + "checkpoint": false + }, + { + "name": "/model.19/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2867200, + "allocated_nbytes": 409600, + "producer": "N169", + "live_start": 169, + "live_end": 171, + "checkpoint": false + }, + { + "name": "/model.19/m.0/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 409600, + "producer": "N170", + "live_start": 170, + "live_end": 171, + "checkpoint": false + }, + { + "name": "/model.19/m.0/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 5324800, + "allocated_nbytes": 409600, + "producer": "N171", + "live_start": 171, + "live_end": 172, + "checkpoint": false + }, + { + "name": "/model.19/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2867200, + "allocated_nbytes": 409600, + "producer": "N172", + "live_start": 172, + "live_end": 174, + "checkpoint": false + }, + { + "name": "/model.19/m.0/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 409600, + "producer": "N173", + "live_start": 173, + "live_end": 174, + "checkpoint": false + }, + { + "name": "/model.19/m.0/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 5324800, + "allocated_nbytes": 409600, + "producer": "N174", + "live_start": 174, + "live_end": 175, + "checkpoint": false + }, + { + "name": "/model.19/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 192, + 40, + 40 + ], + "elements": 307200, + "nbytes": 1228800, + "storage": "workspace", + "offset": 13107200, + "allocated_nbytes": 1228800, + "producer": "N175", + "live_start": 175, + "live_end": 176, + "checkpoint": false + }, + { + "name": "/model.19/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 819200, + "producer": "N176", + "live_start": 176, + "live_end": 178, + "checkpoint": false + }, + { + "name": "/model.19/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 819200, + "producer": "N177", + "live_start": 177, + "live_end": 178, + "checkpoint": false + }, + { + "name": "/model.19/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 13107200, + "allocated_nbytes": 819200, + "producer": "N178", + "live_start": 178, + "live_end": 308, + "checkpoint": true + }, + { + "name": "/model.20/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 819200, + "producer": "N179", + "live_start": 179, + "live_end": 181, + "checkpoint": false + }, + { + "name": "/model.20/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 819200, + "producer": "N180", + "live_start": 180, + "live_end": 181, + "checkpoint": false + }, + { + "name": "/model.20/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 13926400, + "allocated_nbytes": 819200, + "producer": "N181", + "live_start": 181, + "live_end": 182, + "checkpoint": false + }, + { + "name": "/model.20/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 204800, + "producer": "N182", + "live_start": 182, + "live_end": 183, + "checkpoint": false + }, + { + "name": "/model.21/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 384, + 20, + 20 + ], + "elements": 153600, + "nbytes": 614400, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 614400, + "producer": "N183", + "live_start": 183, + "live_end": 184, + "checkpoint": false + }, + { + "name": "/model.22/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 409600, + "producer": "N184", + "live_start": 184, + "live_end": 186, + "checkpoint": false + }, + { + "name": "/model.22/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 409600, + "producer": "N185", + "live_start": 185, + "live_end": 186, + "checkpoint": false + }, + { + "name": "/model.22/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2867200, + "allocated_nbytes": 409600, + "producer": "N186", + "live_start": 186, + "live_end": 187, + "checkpoint": false + }, + { + "name": "/model.22/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 204800, + "producer": "N187", + "live_start": 187, + "live_end": 204, + "checkpoint": false + }, + { + "name": "/model.22/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 204800, + "allocated_nbytes": 204800, + "producer": "N187", + "live_start": 187, + "live_end": 204, + "checkpoint": false + }, + { + "name": "/model.22/m.0/cv1/cv1.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 204800, + "producer": "N188", + "live_start": 188, + "live_end": 190, + "checkpoint": false + }, + { + "name": "/model.22/m.0/cv1/cv1.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 2662400, + "allocated_nbytes": 204800, + "producer": "N189", + "live_start": 189, + "live_end": 190, + "checkpoint": false + }, + { + "name": "/model.22/m.0/cv1/cv1.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 2867200, + "allocated_nbytes": 204800, + "producer": "N190", + "live_start": 190, + "live_end": 191, + "checkpoint": false + }, + { + "name": "/model.22/m.0/cv1/cv1.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 409600, + "producer": "N191", + "live_start": 191, + "live_end": 193, + "checkpoint": false + }, + { + "name": "/model.22/m.0/cv1/cv1.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2867200, + "allocated_nbytes": 409600, + "producer": "N192", + "live_start": 192, + "live_end": 193, + "checkpoint": false + }, + { + "name": "/model.22/m.0/cv1/cv1.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 409600, + "producer": "N193", + "live_start": 193, + "live_end": 194, + "checkpoint": false + }, + { + "name": "/model.22/m.0/cv1/cv1.2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 409600, + "producer": "N194", + "live_start": 194, + "live_end": 196, + "checkpoint": false + }, + { + "name": "/model.22/m.0/cv1/cv1.2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2867200, + "allocated_nbytes": 409600, + "producer": "N195", + "live_start": 195, + "live_end": 196, + "checkpoint": false + }, + { + "name": "/model.22/m.0/cv1/cv1.2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 409600, + "producer": "N196", + "live_start": 196, + "live_end": 197, + "checkpoint": false + }, + { + "name": "/model.22/m.0/cv1/cv1.3/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 204800, + "producer": "N197", + "live_start": 197, + "live_end": 199, + "checkpoint": false + }, + { + "name": "/model.22/m.0/cv1/cv1.3/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 2662400, + "allocated_nbytes": 204800, + "producer": "N198", + "live_start": 198, + "live_end": 199, + "checkpoint": false + }, + { + "name": "/model.22/m.0/cv1/cv1.3/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 2867200, + "allocated_nbytes": 204800, + "producer": "N199", + "live_start": 199, + "live_end": 200, + "checkpoint": false + }, + { + "name": "/model.22/m.0/cv1/cv1.4/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 204800, + "producer": "N200", + "live_start": 200, + "live_end": 202, + "checkpoint": false + }, + { + "name": "/model.22/m.0/cv1/cv1.4/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 2662400, + "allocated_nbytes": 204800, + "producer": "N201", + "live_start": 201, + "live_end": 202, + "checkpoint": false + }, + { + "name": "/model.22/m.0/cv1/cv1.4/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 2867200, + "allocated_nbytes": 204800, + "producer": "N202", + "live_start": 202, + "live_end": 203, + "checkpoint": false + }, + { + "name": "/model.22/m.0/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ], + "elements": 51200, + "nbytes": 204800, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 204800, + "producer": "N203", + "live_start": 203, + "live_end": 204, + "checkpoint": false + }, + { + "name": "/model.22/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 384, + 20, + 20 + ], + "elements": 153600, + "nbytes": 614400, + "storage": "workspace", + "offset": 2662400, + "allocated_nbytes": 614400, + "producer": "N204", + "live_start": 204, + "live_end": 205, + "checkpoint": false + }, + { + "name": "/model.22/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 409600, + "producer": "N205", + "live_start": 205, + "live_end": 207, + "checkpoint": false + }, + { + "name": "/model.22/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 409600, + "producer": "N206", + "live_start": 206, + "live_end": 207, + "checkpoint": false + }, + { + "name": "/model.22/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2867200, + "allocated_nbytes": 409600, + "producer": "N207", + "live_start": 207, + "live_end": 308, + "checkpoint": true + }, + { + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 13926400, + "allocated_nbytes": 1638400, + "producer": "N208", + "live_start": 208, + "live_end": 210, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 18022400, + "allocated_nbytes": 1638400, + "producer": "N209", + "live_start": 209, + "live_end": 210, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 19660800, + "allocated_nbytes": 1638400, + "producer": "N210", + "live_start": 210, + "live_end": 211, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 13926400, + "allocated_nbytes": 1638400, + "producer": "N211", + "live_start": 211, + "live_end": 213, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 18022400, + "allocated_nbytes": 1638400, + "producer": "N212", + "live_start": 212, + "live_end": 213, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 19660800, + "allocated_nbytes": 1638400, + "producer": "N213", + "live_start": 213, + "live_end": 214, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.2/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 13926400, + "allocated_nbytes": 1638400, + "producer": "N214", + "live_start": 214, + "live_end": 228, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 18022400, + "allocated_nbytes": 1638400, + "producer": "N215", + "live_start": 215, + "live_end": 217, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 19660800, + "allocated_nbytes": 1638400, + "producer": "N216", + "live_start": 216, + "live_end": 217, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "storage": "workspace", + "offset": 21299200, + "allocated_nbytes": 1638400, + "producer": "N217", + "live_start": 217, + "live_end": 218, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ], + "elements": 512000, + "nbytes": 2048000, + "storage": "workspace", + "offset": 18022400, + "allocated_nbytes": 2048000, + "producer": "N218", + "live_start": 218, + "live_end": 220, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ], + "elements": 512000, + "nbytes": 2048000, + "storage": "workspace", + "offset": 20070400, + "allocated_nbytes": 2048000, + "producer": "N219", + "live_start": 219, + "live_end": 220, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ], + "elements": 512000, + "nbytes": 2048000, + "storage": "workspace", + "offset": 22118400, + "allocated_nbytes": 2048000, + "producer": "N220", + "live_start": 220, + "live_end": 221, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ], + "elements": 512000, + "nbytes": 2048000, + "storage": "workspace", + "offset": 18022400, + "allocated_nbytes": 2048000, + "producer": "N221", + "live_start": 221, + "live_end": 223, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ], + "elements": 512000, + "nbytes": 2048000, + "storage": "workspace", + "offset": 20070400, + "allocated_nbytes": 2048000, + "producer": "N222", + "live_start": 222, + "live_end": 223, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ], + "elements": 512000, + "nbytes": 2048000, + "storage": "workspace", + "offset": 22118400, + "allocated_nbytes": 2048000, + "producer": "N223", + "live_start": 223, + "live_end": 224, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ], + "elements": 512000, + "nbytes": 2048000, + "storage": "workspace", + "offset": 18022400, + "allocated_nbytes": 2048000, + "producer": "N224", + "live_start": 224, + "live_end": 226, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ], + "elements": 512000, + "nbytes": 2048000, + "storage": "workspace", + "offset": 20070400, + "allocated_nbytes": 2048000, + "producer": "N225", + "live_start": 225, + "live_end": 226, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ], + "elements": 512000, + "nbytes": 2048000, + "storage": "workspace", + "offset": 22118400, + "allocated_nbytes": 2048000, + "producer": "N226", + "live_start": 226, + "live_end": 227, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.2/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ], + "elements": 512000, + "nbytes": 2048000, + "storage": "workspace", + "offset": 18022400, + "allocated_nbytes": 2048000, + "producer": "N227", + "live_start": 227, + "live_end": 228, + "checkpoint": false + }, + { + "name": "/model.23/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 144, + 80, + 80 + ], + "elements": 921600, + "nbytes": 3686400, + "storage": "workspace", + "offset": 20070400, + "allocated_nbytes": 3686400, + "producer": "N228", + "live_start": 228, + "live_end": 308, + "checkpoint": true + }, + { + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 409600, + "producer": "N229", + "live_start": 229, + "live_end": 231, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 409600, + "producer": "N230", + "live_start": 230, + "live_end": 231, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 409600, + "producer": "N231", + "live_start": 231, + "live_end": 232, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 409600, + "producer": "N232", + "live_start": 232, + "live_end": 234, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 409600, + "producer": "N233", + "live_start": 233, + "live_end": 234, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 409600, + "producer": "N234", + "live_start": 234, + "live_end": 235, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.2/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 409600, + "producer": "N235", + "live_start": 235, + "live_end": 249, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 819200, + "producer": "N236", + "live_start": 236, + "live_end": 238, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 13926400, + "allocated_nbytes": 819200, + "producer": "N237", + "live_start": 237, + "live_end": 238, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "storage": "workspace", + "offset": 14745600, + "allocated_nbytes": 819200, + "producer": "N238", + "live_start": 238, + "live_end": 239, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ], + "elements": 128000, + "nbytes": 512000, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 512000, + "producer": "N239", + "live_start": 239, + "live_end": 241, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ], + "elements": 128000, + "nbytes": 512000, + "storage": "workspace", + "offset": 13926400, + "allocated_nbytes": 512000, + "producer": "N240", + "live_start": 240, + "live_end": 241, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ], + "elements": 128000, + "nbytes": 512000, + "storage": "workspace", + "offset": 14438400, + "allocated_nbytes": 512000, + "producer": "N241", + "live_start": 241, + "live_end": 242, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ], + "elements": 128000, + "nbytes": 512000, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 512000, + "producer": "N242", + "live_start": 242, + "live_end": 244, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ], + "elements": 128000, + "nbytes": 512000, + "storage": "workspace", + "offset": 13926400, + "allocated_nbytes": 512000, + "producer": "N243", + "live_start": 243, + "live_end": 244, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ], + "elements": 128000, + "nbytes": 512000, + "storage": "workspace", + "offset": 14438400, + "allocated_nbytes": 512000, + "producer": "N244", + "live_start": 244, + "live_end": 245, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ], + "elements": 128000, + "nbytes": 512000, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 512000, + "producer": "N245", + "live_start": 245, + "live_end": 247, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ], + "elements": 128000, + "nbytes": 512000, + "storage": "workspace", + "offset": 13926400, + "allocated_nbytes": 512000, + "producer": "N246", + "live_start": 246, + "live_end": 247, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ], + "elements": 128000, + "nbytes": 512000, + "storage": "workspace", + "offset": 14438400, + "allocated_nbytes": 512000, + "producer": "N247", + "live_start": 247, + "live_end": 248, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.2/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ], + "elements": 128000, + "nbytes": 512000, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 512000, + "producer": "N248", + "live_start": 248, + "live_end": 249, + "checkpoint": false + }, + { + "name": "/model.23/Concat_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 144, + 40, + 40 + ], + "elements": 230400, + "nbytes": 921600, + "storage": "workspace", + "offset": 13926400, + "allocated_nbytes": 921600, + "producer": "N249", + "live_start": 249, + "live_end": 308, + "checkpoint": true + }, + { + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 20, + 20 + ], + "elements": 25600, + "nbytes": 102400, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 102400, + "producer": "N250", + "live_start": 250, + "live_end": 252, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 20, + 20 + ], + "elements": 25600, + "nbytes": 102400, + "storage": "workspace", + "offset": 102400, + "allocated_nbytes": 102400, + "producer": "N251", + "live_start": 251, + "live_end": 252, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 20, + 20 + ], + "elements": 25600, + "nbytes": 102400, + "storage": "workspace", + "offset": 204800, + "allocated_nbytes": 102400, + "producer": "N252", + "live_start": 252, + "live_end": 253, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 20, + 20 + ], + "elements": 25600, + "nbytes": 102400, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 102400, + "producer": "N253", + "live_start": 253, + "live_end": 255, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 20, + 20 + ], + "elements": 25600, + "nbytes": 102400, + "storage": "workspace", + "offset": 102400, + "allocated_nbytes": 102400, + "producer": "N254", + "live_start": 254, + "live_end": 255, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 20, + 20 + ], + "elements": 25600, + "nbytes": 102400, + "storage": "workspace", + "offset": 204800, + "allocated_nbytes": 102400, + "producer": "N255", + "live_start": 255, + "live_end": 256, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.2/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 20, + 20 + ], + "elements": 25600, + "nbytes": 102400, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 102400, + "producer": "N256", + "live_start": 256, + "live_end": 270, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 409600, + "producer": "N257", + "live_start": 257, + "live_end": 259, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 4915200, + "allocated_nbytes": 409600, + "producer": "N258", + "live_start": 258, + "live_end": 259, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "storage": "workspace", + "offset": 5324800, + "allocated_nbytes": 409600, + "producer": "N259", + "live_start": 259, + "live_end": 260, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ], + "elements": 32000, + "nbytes": 128000, + "storage": "workspace", + "offset": 102400, + "allocated_nbytes": 128000, + "producer": "N260", + "live_start": 260, + "live_end": 262, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ], + "elements": 32000, + "nbytes": 128000, + "storage": "workspace", + "offset": 230400, + "allocated_nbytes": 128000, + "producer": "N261", + "live_start": 261, + "live_end": 262, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ], + "elements": 32000, + "nbytes": 128000, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 128000, + "producer": "N262", + "live_start": 262, + "live_end": 263, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ], + "elements": 32000, + "nbytes": 128000, + "storage": "workspace", + "offset": 102400, + "allocated_nbytes": 128000, + "producer": "N263", + "live_start": 263, + "live_end": 265, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ], + "elements": 32000, + "nbytes": 128000, + "storage": "workspace", + "offset": 230400, + "allocated_nbytes": 128000, + "producer": "N264", + "live_start": 264, + "live_end": 265, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ], + "elements": 32000, + "nbytes": 128000, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 128000, + "producer": "N265", + "live_start": 265, + "live_end": 266, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ], + "elements": 32000, + "nbytes": 128000, + "storage": "workspace", + "offset": 102400, + "allocated_nbytes": 128000, + "producer": "N266", + "live_start": 266, + "live_end": 268, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ], + "elements": 32000, + "nbytes": 128000, + "storage": "workspace", + "offset": 230400, + "allocated_nbytes": 128000, + "producer": "N267", + "live_start": 267, + "live_end": 268, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ], + "elements": 32000, + "nbytes": 128000, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 128000, + "producer": "N268", + "live_start": 268, + "live_end": 269, + "checkpoint": false + }, + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.2/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ], + "elements": 32000, + "nbytes": 128000, + "storage": "workspace", + "offset": 102400, + "allocated_nbytes": 128000, + "producer": "N269", + "live_start": 269, + "live_end": 270, + "checkpoint": false + }, + { + "name": "/model.23/Concat_2_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 144, + 20, + 20 + ], + "elements": 57600, + "nbytes": 230400, + "storage": "workspace", + "offset": 2457600, + "allocated_nbytes": 230400, + "producer": "N270", + "live_start": 270, + "live_end": 308, + "checkpoint": true + }, + { + "name": "/model.23/Reshape_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 144, + 6400 + ], + "elements": 921600, + "nbytes": 3686400, + "storage": "workspace", + "offset": 24576000, + "allocated_nbytes": 3686400, + "producer": "N271", + "live_start": 271, + "live_end": 274, + "checkpoint": false + }, + { + "name": "/model.23/Reshape_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 144, + 1600 + ], + "elements": 230400, + "nbytes": 921600, + "storage": "workspace", + "offset": 14848000, + "allocated_nbytes": 921600, + "producer": "N272", + "live_start": 272, + "live_end": 274, + "checkpoint": false + }, + { + "name": "/model.23/Reshape_2_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 144, + 400 + ], + "elements": 57600, + "nbytes": 230400, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 230400, + "producer": "N273", + "live_start": 273, + "live_end": 274, + "checkpoint": false + }, + { + "name": "/model.23/Concat_3_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 144, + 8400 + ], + "elements": 1209600, + "nbytes": 4838400, + "storage": "workspace", + "offset": 28262400, + "allocated_nbytes": 4838400, + "producer": "N274", + "live_start": 274, + "live_end": 275, + "checkpoint": false + }, + { + "name": "/model.23/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 8400 + ], + "elements": 537600, + "nbytes": 2150400, + "storage": "workspace", + "offset": 23756800, + "allocated_nbytes": 2150400, + "producer": "N275", + "live_start": 275, + "live_end": 276, + "checkpoint": false + }, + { + "name": "/model.23/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 8400 + ], + "elements": 672000, + "nbytes": 2688000, + "storage": "workspace", + "offset": 33100800, + "allocated_nbytes": 2688000, + "producer": "N275", + "live_start": 275, + "live_end": 286, + "checkpoint": false + }, + { + "name": "/model.23/dfl/Reshape_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 4, + 16, + 8400 + ], + "elements": 537600, + "nbytes": 2150400, + "storage": "workspace", + "offset": 25907200, + "allocated_nbytes": 2150400, + "producer": "N276", + "live_start": 276, + "live_end": 277, + "checkpoint": false + }, + { + "name": "/model.23/dfl/Transpose_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 4, + 8400 + ], + "elements": 537600, + "nbytes": 2150400, + "storage": "workspace", + "offset": 23756800, + "allocated_nbytes": 2150400, + "producer": "N277", + "live_start": 277, + "live_end": 278, + "checkpoint": false + }, + { + "name": "/model.23/dfl/Softmax_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 4, + 8400 + ], + "elements": 537600, + "nbytes": 2150400, + "storage": "workspace", + "offset": 25907200, + "allocated_nbytes": 2150400, + "producer": "N278", + "live_start": 278, + "live_end": 279, + "checkpoint": false + }, + { + "name": "/model.23/dfl/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 1, + 4, + 8400 + ], + "elements": 33600, + "nbytes": 134400, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 134400, + "producer": "N279", + "live_start": 279, + "live_end": 280, + "checkpoint": false + }, + { + "name": "/model.23/dfl/Reshape_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 4, + 8400 + ], + "elements": 33600, + "nbytes": 134400, + "storage": "workspace", + "offset": 134400, + "allocated_nbytes": 134400, + "producer": "N280", + "live_start": 280, + "live_end": 281, + "checkpoint": false + }, + { + "name": "/model.23/Split_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 8400 + ], + "elements": 16800, + "nbytes": 67200, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 67200, + "producer": "N281", + "live_start": 281, + "live_end": 282, + "checkpoint": false + }, + { + "name": "/model.23/Split_1_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 8400 + ], + "elements": 16800, + "nbytes": 67200, + "storage": "workspace", + "offset": 67200, + "allocated_nbytes": 67200, + "producer": "N281", + "live_start": 281, + "live_end": 283, + "checkpoint": false + }, + { + "name": "/model.23/Sub_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 8400 + ], + "elements": 16800, + "nbytes": 67200, + "storage": "workspace", + "offset": 134400, + "allocated_nbytes": 67200, + "producer": "N282", + "live_start": 282, + "live_end": 284, + "checkpoint": false + }, + { + "name": "/model.23/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 8400 + ], + "elements": 16800, + "nbytes": 67200, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 67200, + "producer": "N283", + "live_start": 283, + "live_end": 284, + "checkpoint": false + }, + { + "name": "/model.23/Concat_4_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 4, + 8400 + ], + "elements": 33600, + "nbytes": 134400, + "storage": "workspace", + "offset": 201600, + "allocated_nbytes": 134400, + "producer": "N284", + "live_start": 284, + "live_end": 285, + "checkpoint": false + }, + { + "name": "/model.23/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 4, + 8400 + ], + "elements": 33600, + "nbytes": 134400, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 134400, + "producer": "N285", + "live_start": 285, + "live_end": 287, + "checkpoint": false + }, + { + "name": "/model.23/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 8400 + ], + "elements": 672000, + "nbytes": 2688000, + "storage": "workspace", + "offset": 23756800, + "allocated_nbytes": 2688000, + "producer": "N286", + "live_start": 286, + "live_end": 287, + "checkpoint": false + }, + { + "name": "/model.23/Concat_5_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 84, + 8400 + ], + "elements": 705600, + "nbytes": 2822400, + "storage": "workspace", + "offset": 26444800, + "allocated_nbytes": 2822400, + "producer": "N287", + "live_start": 287, + "live_end": 288, + "checkpoint": false + }, + { + "name": "/model.23/Transpose_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 8400, + 84 + ], + "elements": 705600, + "nbytes": 2822400, + "storage": "workspace", + "offset": 29267200, + "allocated_nbytes": 2822400, + "producer": "N288", + "live_start": 288, + "live_end": 308, + "checkpoint": true + }, + { + "name": "/model.23/Split_2_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 8400, + 4 + ], + "elements": 33600, + "nbytes": 134400, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 134400, + "producer": "N289", + "live_start": 289, + "live_end": 294, + "checkpoint": false + }, + { + "name": "/model.23/Split_2_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 8400, + 80 + ], + "elements": 672000, + "nbytes": 2688000, + "storage": "workspace", + "offset": 23756800, + "allocated_nbytes": 2688000, + "producer": "N289", + "live_start": 289, + "live_end": 296, + "checkpoint": false + }, + { + "name": "/model.23/ReduceMax_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 8400 + ], + "elements": 8400, + "nbytes": 33600, + "storage": "workspace", + "offset": 134400, + "allocated_nbytes": 33600, + "producer": "N290", + "live_start": 290, + "live_end": 291, + "checkpoint": false + }, + { + "name": "/model.23/TopK_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 300 + ], + "elements": 300, + "nbytes": 1200, + "storage": "workspace", + "offset": 168000, + "allocated_nbytes": 1216, + "producer": "N291", + "live_start": 291, + "live_end": 291, + "checkpoint": false + }, + { + "name": "/model.23/TopK_output_1", + "dtype": "INT64", + "shape": [ + 1, + 300 + ], + "elements": 300, + "nbytes": 2400, + "storage": "workspace", + "offset": 169216, + "allocated_nbytes": 2432, + "producer": "N291", + "live_start": 291, + "live_end": 292, + "checkpoint": false + }, + { + "name": "/model.23/Unsqueeze_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300, + 1 + ], + "elements": 300, + "nbytes": 2400, + "storage": "workspace", + "offset": 134400, + "allocated_nbytes": 2432, + "producer": "N292", + "live_start": 292, + "live_end": 295, + "checkpoint": false + }, + { + "name": "/model.23/Tile_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300, + 4 + ], + "elements": 1200, + "nbytes": 9600, + "storage": "workspace", + "offset": 136832, + "allocated_nbytes": 9600, + "producer": "N293", + "live_start": 293, + "live_end": 294, + "checkpoint": false + }, + { + "name": "/model.23/GatherElements_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 300, + 4 + ], + "elements": 1200, + "nbytes": 4800, + "storage": "workspace", + "offset": 146432, + "allocated_nbytes": 4800, + "producer": "N294", + "live_start": 294, + "live_end": 303, + "checkpoint": false + }, + { + "name": "/model.23/Tile_1_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300, + 80 + ], + "elements": 24000, + "nbytes": 192000, + "storage": "workspace", + "offset": 151232, + "allocated_nbytes": 192000, + "producer": "N295", + "live_start": 295, + "live_end": 296, + "checkpoint": false + }, + { + "name": "/model.23/GatherElements_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 300, + 80 + ], + "elements": 24000, + "nbytes": 96000, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 96000, + "producer": "N296", + "live_start": 296, + "live_end": 297, + "checkpoint": false + }, + { + "name": "/model.23/Flatten_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 24000 + ], + "elements": 24000, + "nbytes": 96000, + "storage": "workspace", + "offset": 151232, + "allocated_nbytes": 96000, + "producer": "N297", + "live_start": 297, + "live_end": 298, + "checkpoint": false + }, + { + "name": "/model.23/TopK_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 300 + ], + "elements": 300, + "nbytes": 1200, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 1216, + "producer": "N298", + "live_start": 298, + "live_end": 304, + "checkpoint": false + }, + { + "name": "/model.23/TopK_1_output_1", + "dtype": "INT64", + "shape": [ + 1, + 300 + ], + "elements": 300, + "nbytes": 2400, + "storage": "workspace", + "offset": 1216, + "allocated_nbytes": 2432, + "producer": "N298", + "live_start": 298, + "live_end": 300, + "checkpoint": false + }, + { + "name": "/model.23/Mod_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300 + ], + "elements": 300, + "nbytes": 2400, + "storage": "workspace", + "offset": 3648, + "allocated_nbytes": 2432, + "producer": "N299", + "live_start": 299, + "live_end": 305, + "checkpoint": false + }, + { + "name": "/model.23/Div_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300 + ], + "elements": 300, + "nbytes": 2400, + "storage": "workspace", + "offset": 6080, + "allocated_nbytes": 2432, + "producer": "N300", + "live_start": 300, + "live_end": 301, + "checkpoint": false + }, + { + "name": "/model.23/Unsqueeze_1_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300, + 1 + ], + "elements": 300, + "nbytes": 2400, + "storage": "workspace", + "offset": 1216, + "allocated_nbytes": 2432, + "producer": "N301", + "live_start": 301, + "live_end": 302, + "checkpoint": false + }, + { + "name": "/model.23/Tile_2_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300, + 4 + ], + "elements": 1200, + "nbytes": 9600, + "storage": "workspace", + "offset": 6080, + "allocated_nbytes": 9600, + "producer": "N302", + "live_start": 302, + "live_end": 303, + "checkpoint": false + }, + { + "name": "/model.23/GatherElements_2_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 300, + 4 + ], + "elements": 1200, + "nbytes": 4800, + "storage": "workspace", + "offset": 15680, + "allocated_nbytes": 4800, + "producer": "N303", + "live_start": 303, + "live_end": 307, + "checkpoint": false + }, + { + "name": "/model.23/Unsqueeze_2_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 300, + 1 + ], + "elements": 300, + "nbytes": 1200, + "storage": "workspace", + "offset": 1216, + "allocated_nbytes": 1216, + "producer": "N304", + "live_start": 304, + "live_end": 307, + "checkpoint": false + }, + { + "name": "/model.23/Unsqueeze_3_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300, + 1 + ], + "elements": 300, + "nbytes": 2400, + "storage": "workspace", + "offset": 6080, + "allocated_nbytes": 2432, + "producer": "N305", + "live_start": 305, + "live_end": 306, + "checkpoint": false + }, + { + "name": "/model.23/Cast_2_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 300, + 1 + ], + "elements": 300, + "nbytes": 1200, + "storage": "workspace", + "offset": 0, + "allocated_nbytes": 1216, + "producer": "N306", + "live_start": 306, + "live_end": 307, + "checkpoint": false + }, + { + "name": "output0", + "dtype": "FLOAT", + "shape": [ + 1, + 300, + 6 + ], + "elements": 1800, + "nbytes": 7200, + "storage": "workspace", + "offset": 2432, + "allocated_nbytes": 7232, + "producer": "N307", + "live_start": 307, + "live_end": 308, + "checkpoint": true + } + ], + "checkpoints": [ + { + "node_id": "N005", + "tensor": "/model.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ], + "elements": 819200, + "nbytes": 3276800, + "workspace_offset": 6553600, + "golden_offset": 0, + "golden_sha256": "5cfa83748a98e30cc0e43159239de2f8ccd5fbacf122803932fa30092c790ac6" + }, + { + "node_id": "N020", + "tensor": "/model.2/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ], + "elements": 819200, + "nbytes": 3276800, + "workspace_offset": 9830400, + "golden_offset": 3276800, + "golden_sha256": "b385e2ab33c4242af2ca5139d7f665b715edb4d7f9ec35911f9b0da38aef0357" + }, + { + "node_id": "N045", + "tensor": "/model.4/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "workspace_offset": 3276800, + "golden_offset": 6553600, + "golden_sha256": "99bd27f353c02a74adf58898f5f2e7b7561c6c8a21bad044e565c95f702968d4" + }, + { + "node_id": "N071", + "tensor": "/model.6/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "workspace_offset": 1638400, + "golden_offset": 8192000, + "golden_sha256": "dc8d7b277f070aeb13d1e2506f31c4ef0bf1871d394ebb4db64f14c64c7701f7" + }, + { + "node_id": "N090", + "tensor": "/model.8/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "workspace_offset": 819200, + "golden_offset": 9011200, + "golden_sha256": "8212965bafed05174a33479fd0f356c396fc005fa8d224da612e6a1d895d8c88" + }, + { + "node_id": "N100", + "tensor": "/model.9/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "workspace_offset": 1228800, + "golden_offset": 9420800, + "golden_sha256": "de30c76d027e7501530aa586458153e55150c32ef2921bb9fb7cea82a899a771" + }, + { + "node_id": "N128", + "tensor": "/model.10/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "workspace_offset": 409600, + "golden_offset": 9830400, + "golden_sha256": "dfc80cf4553aaba3c290723867c274553b93b8ea91a68f0579340c6e2566ac97" + }, + { + "node_id": "N144", + "tensor": "/model.13/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "workspace_offset": 5734400, + "golden_offset": 10240000, + "golden_sha256": "bccb37057912d18f6d21f15806c9bf81d907c85bfd73e198c5967f330cd1c2a0" + }, + { + "node_id": "N160", + "tensor": "/model.16/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ], + "elements": 409600, + "nbytes": 1638400, + "workspace_offset": 16384000, + "golden_offset": 11059200, + "golden_sha256": "1a1be18e60d11c2bfd7947707a7e12826e1a8e58cc5649eee0a0837877799b6f" + }, + { + "node_id": "N178", + "tensor": "/model.19/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ], + "elements": 204800, + "nbytes": 819200, + "workspace_offset": 13107200, + "golden_offset": 12697600, + "golden_sha256": "d89dd9cd053e5a52d4419560b7006c0916f12843e992354de74dd671bffff1be" + }, + { + "node_id": "N207", + "tensor": "/model.22/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ], + "elements": 102400, + "nbytes": 409600, + "workspace_offset": 2867200, + "golden_offset": 13516800, + "golden_sha256": "d2bc9c41540d0351f262a4ba9e6364edce8fe96521e3d652b39d57f2af761183" + }, + { + "node_id": "N228", + "tensor": "/model.23/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 144, + 80, + 80 + ], + "elements": 921600, + "nbytes": 3686400, + "workspace_offset": 20070400, + "golden_offset": 13926400, + "golden_sha256": "4611bf990953140f5ab34e3275b50a5766b94008cba7c6907cba26bd867fcde3" + }, + { + "node_id": "N249", + "tensor": "/model.23/Concat_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 144, + 40, + 40 + ], + "elements": 230400, + "nbytes": 921600, + "workspace_offset": 13926400, + "golden_offset": 17612800, + "golden_sha256": "e7fd092a93d0c8301354982fad9f041419249daea021f3306eafe4c4ca82e913" + }, + { + "node_id": "N270", + "tensor": "/model.23/Concat_2_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 144, + 20, + 20 + ], + "elements": 57600, + "nbytes": 230400, + "workspace_offset": 2457600, + "golden_offset": 18534400, + "golden_sha256": "598d44bf91953508071d22aa841f7475e4ba81ae0b7a21e1927b47ec029574bf" + }, + { + "node_id": "N288", + "tensor": "/model.23/Transpose_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 8400, + 84 + ], + "elements": 705600, + "nbytes": 2822400, + "workspace_offset": 29267200, + "golden_offset": 18764800, + "golden_sha256": "7097f06d7e639084a012b19771d6bbda5d60d79de3a98aef4ba527a807c31508" + }, + { + "node_id": "N307", + "tensor": "output0", + "dtype": "FLOAT", + "shape": [ + 1, + 300, + 6 + ], + "elements": 1800, + "nbytes": 7200, + "workspace_offset": 2432, + "golden_offset": 21587200, + "golden_sha256": "35da5978e149ef3c9528fc50c7b542f6533bd95f38025f146a4568f145e953c0" + } + ], + "pmc_stages": [ + { + "name": "stem", + "first_node": "N000", + "last_node": "N005", + "pmc_device_offset": 35848192 + }, + { + "name": "backbone", + "first_node": "N006", + "last_node": "N090", + "pmc_device_offset": 35913728 + }, + { + "name": "sppf_psa", + "first_node": "N091", + "last_node": "N128", + "pmc_device_offset": 35979264 + }, + { + "name": "neck", + "first_node": "N129", + "last_node": "N207", + "pmc_device_offset": 36044800 + }, + { + "name": "three_scale_head", + "first_node": "N208", + "last_node": "N270", + "pmc_device_offset": 36110336 + }, + { + "name": "dfl_decode", + "first_node": "N271", + "last_node": "N288", + "pmc_device_offset": 36175872 + }, + { + "name": "topk_selection", + "first_node": "N289", + "last_node": "N307", + "pmc_device_offset": 36241408 + } + ], + "memory_plan": { + "algorithm": "deterministic first-fit, allocate outputs before releasing inputs whose last consumer is the current node", + "alignment_bytes": 64, + "pinned_checkpoint_count": 16, + "arena_bytes": 35788800, + "events": [ + { + "node_id": "N000", + "released": [], + "allocated": [ + { + "tensor": "/model.0/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 6553600, + "live_start": 0, + "live_end": 2 + } + ], + "arena_end": 6553600 + }, + { + "node_id": "N001", + "released": [], + "allocated": [ + { + "tensor": "/model.0/act/Sigmoid_output_0", + "offset": 6553600, + "allocated_nbytes": 6553600, + "live_start": 1, + "live_end": 2 + } + ], + "arena_end": 13107200 + }, + { + "node_id": "N002", + "released": [], + "allocated": [ + { + "tensor": "/model.0/act/Mul_output_0", + "offset": 13107200, + "allocated_nbytes": 6553600, + "live_start": 2, + "live_end": 3 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N003", + "released": [ + { + "tensor": "/model.0/conv/Conv_output_0", + "offset": 0, + "nbytes": 6553600 + }, + { + "tensor": "/model.0/act/Sigmoid_output_0", + "offset": 6553600, + "nbytes": 6553600 + } + ], + "allocated": [ + { + "tensor": "/model.1/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 3276800, + "live_start": 3, + "live_end": 5 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N004", + "released": [ + { + "tensor": "/model.0/act/Mul_output_0", + "offset": 13107200, + "nbytes": 6553600 + } + ], + "allocated": [ + { + "tensor": "/model.1/act/Sigmoid_output_0", + "offset": 3276800, + "allocated_nbytes": 3276800, + "live_start": 4, + "live_end": 5 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N005", + "released": [], + "allocated": [ + { + "tensor": "/model.1/act/Mul_output_0", + "offset": 6553600, + "allocated_nbytes": 3276800, + "live_start": 5, + "live_end": 308 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N006", + "released": [ + { + "tensor": "/model.1/conv/Conv_output_0", + "offset": 0, + "nbytes": 3276800 + }, + { + "tensor": "/model.1/act/Sigmoid_output_0", + "offset": 3276800, + "nbytes": 3276800 + } + ], + "allocated": [ + { + "tensor": "/model.2/cv1/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 3276800, + "live_start": 6, + "live_end": 8 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N007", + "released": [], + "allocated": [ + { + "tensor": "/model.2/cv1/act/Sigmoid_output_0", + "offset": 3276800, + "allocated_nbytes": 3276800, + "live_start": 7, + "live_end": 8 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N008", + "released": [], + "allocated": [ + { + "tensor": "/model.2/cv1/act/Mul_output_0", + "offset": 9830400, + "allocated_nbytes": 3276800, + "live_start": 8, + "live_end": 9 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N009", + "released": [ + { + "tensor": "/model.2/cv1/conv/Conv_output_0", + "offset": 0, + "nbytes": 3276800 + }, + { + "tensor": "/model.2/cv1/act/Sigmoid_output_0", + "offset": 3276800, + "nbytes": 3276800 + } + ], + "allocated": [ + { + "tensor": "/model.2/Split_output_0", + "offset": 0, + "allocated_nbytes": 1638400, + "live_start": 9, + "live_end": 17 + }, + { + "tensor": "/model.2/Split_output_1", + "offset": 1638400, + "allocated_nbytes": 1638400, + "live_start": 9, + "live_end": 17 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N010", + "released": [ + { + "tensor": "/model.2/cv1/act/Mul_output_0", + "offset": 9830400, + "nbytes": 3276800 + } + ], + "allocated": [ + { + "tensor": "/model.2/m.0/cv1/conv/Conv_output_0", + "offset": 3276800, + "allocated_nbytes": 1638400, + "live_start": 10, + "live_end": 12 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N011", + "released": [], + "allocated": [ + { + "tensor": "/model.2/m.0/cv1/act/Sigmoid_output_0", + "offset": 4915200, + "allocated_nbytes": 1638400, + "live_start": 11, + "live_end": 12 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N012", + "released": [], + "allocated": [ + { + "tensor": "/model.2/m.0/cv1/act/Mul_output_0", + "offset": 9830400, + "allocated_nbytes": 1638400, + "live_start": 12, + "live_end": 13 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N013", + "released": [ + { + "tensor": "/model.2/m.0/cv1/conv/Conv_output_0", + "offset": 3276800, + "nbytes": 1638400 + }, + { + "tensor": "/model.2/m.0/cv1/act/Sigmoid_output_0", + "offset": 4915200, + "nbytes": 1638400 + } + ], + "allocated": [ + { + "tensor": "/model.2/m.0/cv2/conv/Conv_output_0", + "offset": 3276800, + "allocated_nbytes": 1638400, + "live_start": 13, + "live_end": 15 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N014", + "released": [ + { + "tensor": "/model.2/m.0/cv1/act/Mul_output_0", + "offset": 9830400, + "nbytes": 1638400 + } + ], + "allocated": [ + { + "tensor": "/model.2/m.0/cv2/act/Sigmoid_output_0", + "offset": 4915200, + "allocated_nbytes": 1638400, + "live_start": 14, + "live_end": 15 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N015", + "released": [], + "allocated": [ + { + "tensor": "/model.2/m.0/cv2/act/Mul_output_0", + "offset": 9830400, + "allocated_nbytes": 1638400, + "live_start": 15, + "live_end": 16 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N016", + "released": [ + { + "tensor": "/model.2/m.0/cv2/conv/Conv_output_0", + "offset": 3276800, + "nbytes": 1638400 + }, + { + "tensor": "/model.2/m.0/cv2/act/Sigmoid_output_0", + "offset": 4915200, + "nbytes": 1638400 + } + ], + "allocated": [ + { + "tensor": "/model.2/m.0/Add_output_0", + "offset": 3276800, + "allocated_nbytes": 1638400, + "live_start": 16, + "live_end": 17 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N017", + "released": [ + { + "tensor": "/model.2/m.0/cv2/act/Mul_output_0", + "offset": 9830400, + "nbytes": 1638400 + } + ], + "allocated": [ + { + "tensor": "/model.2/Concat_output_0", + "offset": 9830400, + "allocated_nbytes": 4915200, + "live_start": 17, + "live_end": 18 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N018", + "released": [ + { + "tensor": "/model.2/Split_output_0", + "offset": 0, + "nbytes": 1638400 + }, + { + "tensor": "/model.2/Split_output_1", + "offset": 1638400, + "nbytes": 1638400 + }, + { + "tensor": "/model.2/m.0/Add_output_0", + "offset": 3276800, + "nbytes": 1638400 + } + ], + "allocated": [ + { + "tensor": "/model.2/cv2/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 3276800, + "live_start": 18, + "live_end": 20 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N019", + "released": [ + { + "tensor": "/model.2/Concat_output_0", + "offset": 9830400, + "nbytes": 4915200 + } + ], + "allocated": [ + { + "tensor": "/model.2/cv2/act/Sigmoid_output_0", + "offset": 3276800, + "allocated_nbytes": 3276800, + "live_start": 19, + "live_end": 20 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N020", + "released": [], + "allocated": [ + { + "tensor": "/model.2/cv2/act/Mul_output_0", + "offset": 9830400, + "allocated_nbytes": 3276800, + "live_start": 20, + "live_end": 308 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N021", + "released": [ + { + "tensor": "/model.2/cv2/conv/Conv_output_0", + "offset": 0, + "nbytes": 3276800 + }, + { + "tensor": "/model.2/cv2/act/Sigmoid_output_0", + "offset": 3276800, + "nbytes": 3276800 + } + ], + "allocated": [ + { + "tensor": "/model.3/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 1638400, + "live_start": 21, + "live_end": 23 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N022", + "released": [], + "allocated": [ + { + "tensor": "/model.3/act/Sigmoid_output_0", + "offset": 1638400, + "allocated_nbytes": 1638400, + "live_start": 22, + "live_end": 23 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N023", + "released": [], + "allocated": [ + { + "tensor": "/model.3/act/Mul_output_0", + "offset": 3276800, + "allocated_nbytes": 1638400, + "live_start": 23, + "live_end": 24 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N024", + "released": [ + { + "tensor": "/model.3/conv/Conv_output_0", + "offset": 0, + "nbytes": 1638400 + }, + { + "tensor": "/model.3/act/Sigmoid_output_0", + "offset": 1638400, + "nbytes": 1638400 + } + ], + "allocated": [ + { + "tensor": "/model.4/cv1/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 1638400, + "live_start": 24, + "live_end": 26 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N025", + "released": [ + { + "tensor": "/model.3/act/Mul_output_0", + "offset": 3276800, + "nbytes": 1638400 + } + ], + "allocated": [ + { + "tensor": "/model.4/cv1/act/Sigmoid_output_0", + "offset": 1638400, + "allocated_nbytes": 1638400, + "live_start": 25, + "live_end": 26 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N026", + "released": [], + "allocated": [ + { + "tensor": "/model.4/cv1/act/Mul_output_0", + "offset": 3276800, + "allocated_nbytes": 1638400, + "live_start": 26, + "live_end": 27 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N027", + "released": [ + { + "tensor": "/model.4/cv1/conv/Conv_output_0", + "offset": 0, + "nbytes": 1638400 + }, + { + "tensor": "/model.4/cv1/act/Sigmoid_output_0", + "offset": 1638400, + "nbytes": 1638400 + } + ], + "allocated": [ + { + "tensor": "/model.4/Split_output_0", + "offset": 0, + "allocated_nbytes": 819200, + "live_start": 27, + "live_end": 42 + }, + { + "tensor": "/model.4/Split_output_1", + "offset": 819200, + "allocated_nbytes": 819200, + "live_start": 27, + "live_end": 42 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N028", + "released": [ + { + "tensor": "/model.4/cv1/act/Mul_output_0", + "offset": 3276800, + "nbytes": 1638400 + } + ], + "allocated": [ + { + "tensor": "/model.4/m.0/cv1/conv/Conv_output_0", + "offset": 1638400, + "allocated_nbytes": 819200, + "live_start": 28, + "live_end": 30 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N029", + "released": [], + "allocated": [ + { + "tensor": "/model.4/m.0/cv1/act/Sigmoid_output_0", + "offset": 2457600, + "allocated_nbytes": 819200, + "live_start": 29, + "live_end": 30 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N030", + "released": [], + "allocated": [ + { + "tensor": "/model.4/m.0/cv1/act/Mul_output_0", + "offset": 3276800, + "allocated_nbytes": 819200, + "live_start": 30, + "live_end": 31 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N031", + "released": [ + { + "tensor": "/model.4/m.0/cv1/conv/Conv_output_0", + "offset": 1638400, + "nbytes": 819200 + }, + { + "tensor": "/model.4/m.0/cv1/act/Sigmoid_output_0", + "offset": 2457600, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.4/m.0/cv2/conv/Conv_output_0", + "offset": 1638400, + "allocated_nbytes": 819200, + "live_start": 31, + "live_end": 33 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N032", + "released": [ + { + "tensor": "/model.4/m.0/cv1/act/Mul_output_0", + "offset": 3276800, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.4/m.0/cv2/act/Sigmoid_output_0", + "offset": 2457600, + "allocated_nbytes": 819200, + "live_start": 32, + "live_end": 33 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N033", + "released": [], + "allocated": [ + { + "tensor": "/model.4/m.0/cv2/act/Mul_output_0", + "offset": 3276800, + "allocated_nbytes": 819200, + "live_start": 33, + "live_end": 34 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N034", + "released": [ + { + "tensor": "/model.4/m.0/cv2/conv/Conv_output_0", + "offset": 1638400, + "nbytes": 819200 + }, + { + "tensor": "/model.4/m.0/cv2/act/Sigmoid_output_0", + "offset": 2457600, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.4/m.0/Add_output_0", + "offset": 1638400, + "allocated_nbytes": 819200, + "live_start": 34, + "live_end": 42 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N035", + "released": [ + { + "tensor": "/model.4/m.0/cv2/act/Mul_output_0", + "offset": 3276800, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.4/m.1/cv1/conv/Conv_output_0", + "offset": 2457600, + "allocated_nbytes": 819200, + "live_start": 35, + "live_end": 37 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N036", + "released": [], + "allocated": [ + { + "tensor": "/model.4/m.1/cv1/act/Sigmoid_output_0", + "offset": 3276800, + "allocated_nbytes": 819200, + "live_start": 36, + "live_end": 37 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N037", + "released": [], + "allocated": [ + { + "tensor": "/model.4/m.1/cv1/act/Mul_output_0", + "offset": 4096000, + "allocated_nbytes": 819200, + "live_start": 37, + "live_end": 38 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N038", + "released": [ + { + "tensor": "/model.4/m.1/cv1/conv/Conv_output_0", + "offset": 2457600, + "nbytes": 819200 + }, + { + "tensor": "/model.4/m.1/cv1/act/Sigmoid_output_0", + "offset": 3276800, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.4/m.1/cv2/conv/Conv_output_0", + "offset": 2457600, + "allocated_nbytes": 819200, + "live_start": 38, + "live_end": 40 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N039", + "released": [ + { + "tensor": "/model.4/m.1/cv1/act/Mul_output_0", + "offset": 4096000, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.4/m.1/cv2/act/Sigmoid_output_0", + "offset": 3276800, + "allocated_nbytes": 819200, + "live_start": 39, + "live_end": 40 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N040", + "released": [], + "allocated": [ + { + "tensor": "/model.4/m.1/cv2/act/Mul_output_0", + "offset": 4096000, + "allocated_nbytes": 819200, + "live_start": 40, + "live_end": 41 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N041", + "released": [ + { + "tensor": "/model.4/m.1/cv2/conv/Conv_output_0", + "offset": 2457600, + "nbytes": 819200 + }, + { + "tensor": "/model.4/m.1/cv2/act/Sigmoid_output_0", + "offset": 3276800, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.4/m.1/Add_output_0", + "offset": 2457600, + "allocated_nbytes": 819200, + "live_start": 41, + "live_end": 42 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N042", + "released": [ + { + "tensor": "/model.4/m.1/cv2/act/Mul_output_0", + "offset": 4096000, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.4/Concat_output_0", + "offset": 3276800, + "allocated_nbytes": 3276800, + "live_start": 42, + "live_end": 43 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N043", + "released": [ + { + "tensor": "/model.4/Split_output_0", + "offset": 0, + "nbytes": 819200 + }, + { + "tensor": "/model.4/Split_output_1", + "offset": 819200, + "nbytes": 819200 + }, + { + "tensor": "/model.4/m.0/Add_output_0", + "offset": 1638400, + "nbytes": 819200 + }, + { + "tensor": "/model.4/m.1/Add_output_0", + "offset": 2457600, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.4/cv2/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 1638400, + "live_start": 43, + "live_end": 45 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N044", + "released": [ + { + "tensor": "/model.4/Concat_output_0", + "offset": 3276800, + "nbytes": 3276800 + } + ], + "allocated": [ + { + "tensor": "/model.4/cv2/act/Sigmoid_output_0", + "offset": 1638400, + "allocated_nbytes": 1638400, + "live_start": 44, + "live_end": 45 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N045", + "released": [], + "allocated": [ + { + "tensor": "/model.4/cv2/act/Mul_output_0", + "offset": 3276800, + "allocated_nbytes": 1638400, + "live_start": 45, + "live_end": 308 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N046", + "released": [ + { + "tensor": "/model.4/cv2/conv/Conv_output_0", + "offset": 0, + "nbytes": 1638400 + }, + { + "tensor": "/model.4/cv2/act/Sigmoid_output_0", + "offset": 1638400, + "nbytes": 1638400 + } + ], + "allocated": [ + { + "tensor": "/model.5/cv1/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 3276800, + "live_start": 46, + "live_end": 48 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N047", + "released": [], + "allocated": [ + { + "tensor": "/model.5/cv1/act/Sigmoid_output_0", + "offset": 13107200, + "allocated_nbytes": 3276800, + "live_start": 47, + "live_end": 48 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N048", + "released": [], + "allocated": [ + { + "tensor": "/model.5/cv1/act/Mul_output_0", + "offset": 16384000, + "allocated_nbytes": 3276800, + "live_start": 48, + "live_end": 49 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N049", + "released": [ + { + "tensor": "/model.5/cv1/conv/Conv_output_0", + "offset": 0, + "nbytes": 3276800 + }, + { + "tensor": "/model.5/cv1/act/Sigmoid_output_0", + "offset": 13107200, + "nbytes": 3276800 + } + ], + "allocated": [ + { + "tensor": "/model.5/cv2/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 819200, + "live_start": 49, + "live_end": 50 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N050", + "released": [ + { + "tensor": "/model.5/cv1/act/Mul_output_0", + "offset": 16384000, + "nbytes": 3276800 + } + ], + "allocated": [ + { + "tensor": "/model.6/cv1/conv/Conv_output_0", + "offset": 819200, + "allocated_nbytes": 819200, + "live_start": 50, + "live_end": 52 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N051", + "released": [ + { + "tensor": "/model.5/cv2/conv/Conv_output_0", + "offset": 0, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.6/cv1/act/Sigmoid_output_0", + "offset": 0, + "allocated_nbytes": 819200, + "live_start": 51, + "live_end": 52 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N052", + "released": [], + "allocated": [ + { + "tensor": "/model.6/cv1/act/Mul_output_0", + "offset": 1638400, + "allocated_nbytes": 819200, + "live_start": 52, + "live_end": 53 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N053", + "released": [ + { + "tensor": "/model.6/cv1/conv/Conv_output_0", + "offset": 819200, + "nbytes": 819200 + }, + { + "tensor": "/model.6/cv1/act/Sigmoid_output_0", + "offset": 0, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.6/Split_output_0", + "offset": 0, + "allocated_nbytes": 409600, + "live_start": 53, + "live_end": 68 + }, + { + "tensor": "/model.6/Split_output_1", + "offset": 409600, + "allocated_nbytes": 409600, + "live_start": 53, + "live_end": 68 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N054", + "released": [ + { + "tensor": "/model.6/cv1/act/Mul_output_0", + "offset": 1638400, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.6/m.0/cv1/conv/Conv_output_0", + "offset": 819200, + "allocated_nbytes": 409600, + "live_start": 54, + "live_end": 56 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N055", + "released": [], + "allocated": [ + { + "tensor": "/model.6/m.0/cv1/act/Sigmoid_output_0", + "offset": 1228800, + "allocated_nbytes": 409600, + "live_start": 55, + "live_end": 56 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N056", + "released": [], + "allocated": [ + { + "tensor": "/model.6/m.0/cv1/act/Mul_output_0", + "offset": 1638400, + "allocated_nbytes": 409600, + "live_start": 56, + "live_end": 57 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N057", + "released": [ + { + "tensor": "/model.6/m.0/cv1/conv/Conv_output_0", + "offset": 819200, + "nbytes": 409600 + }, + { + "tensor": "/model.6/m.0/cv1/act/Sigmoid_output_0", + "offset": 1228800, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.6/m.0/cv2/conv/Conv_output_0", + "offset": 819200, + "allocated_nbytes": 409600, + "live_start": 57, + "live_end": 59 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N058", + "released": [ + { + "tensor": "/model.6/m.0/cv1/act/Mul_output_0", + "offset": 1638400, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.6/m.0/cv2/act/Sigmoid_output_0", + "offset": 1228800, + "allocated_nbytes": 409600, + "live_start": 58, + "live_end": 59 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N059", + "released": [], + "allocated": [ + { + "tensor": "/model.6/m.0/cv2/act/Mul_output_0", + "offset": 1638400, + "allocated_nbytes": 409600, + "live_start": 59, + "live_end": 60 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N060", + "released": [ + { + "tensor": "/model.6/m.0/cv2/conv/Conv_output_0", + "offset": 819200, + "nbytes": 409600 + }, + { + "tensor": "/model.6/m.0/cv2/act/Sigmoid_output_0", + "offset": 1228800, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.6/m.0/Add_output_0", + "offset": 819200, + "allocated_nbytes": 409600, + "live_start": 60, + "live_end": 68 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N061", + "released": [ + { + "tensor": "/model.6/m.0/cv2/act/Mul_output_0", + "offset": 1638400, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.6/m.1/cv1/conv/Conv_output_0", + "offset": 1228800, + "allocated_nbytes": 409600, + "live_start": 61, + "live_end": 63 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N062", + "released": [], + "allocated": [ + { + "tensor": "/model.6/m.1/cv1/act/Sigmoid_output_0", + "offset": 1638400, + "allocated_nbytes": 409600, + "live_start": 62, + "live_end": 63 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N063", + "released": [], + "allocated": [ + { + "tensor": "/model.6/m.1/cv1/act/Mul_output_0", + "offset": 2048000, + "allocated_nbytes": 409600, + "live_start": 63, + "live_end": 64 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N064", + "released": [ + { + "tensor": "/model.6/m.1/cv1/conv/Conv_output_0", + "offset": 1228800, + "nbytes": 409600 + }, + { + "tensor": "/model.6/m.1/cv1/act/Sigmoid_output_0", + "offset": 1638400, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.6/m.1/cv2/conv/Conv_output_0", + "offset": 1228800, + "allocated_nbytes": 409600, + "live_start": 64, + "live_end": 66 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N065", + "released": [ + { + "tensor": "/model.6/m.1/cv1/act/Mul_output_0", + "offset": 2048000, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.6/m.1/cv2/act/Sigmoid_output_0", + "offset": 1638400, + "allocated_nbytes": 409600, + "live_start": 65, + "live_end": 66 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N066", + "released": [], + "allocated": [ + { + "tensor": "/model.6/m.1/cv2/act/Mul_output_0", + "offset": 2048000, + "allocated_nbytes": 409600, + "live_start": 66, + "live_end": 67 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N067", + "released": [ + { + "tensor": "/model.6/m.1/cv2/conv/Conv_output_0", + "offset": 1228800, + "nbytes": 409600 + }, + { + "tensor": "/model.6/m.1/cv2/act/Sigmoid_output_0", + "offset": 1638400, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.6/m.1/Add_output_0", + "offset": 1228800, + "allocated_nbytes": 409600, + "live_start": 67, + "live_end": 68 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N068", + "released": [ + { + "tensor": "/model.6/m.1/cv2/act/Mul_output_0", + "offset": 2048000, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.6/Concat_output_0", + "offset": 1638400, + "allocated_nbytes": 1638400, + "live_start": 68, + "live_end": 69 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N069", + "released": [ + { + "tensor": "/model.6/Split_output_0", + "offset": 0, + "nbytes": 409600 + }, + { + "tensor": "/model.6/Split_output_1", + "offset": 409600, + "nbytes": 409600 + }, + { + "tensor": "/model.6/m.0/Add_output_0", + "offset": 819200, + "nbytes": 409600 + }, + { + "tensor": "/model.6/m.1/Add_output_0", + "offset": 1228800, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.6/cv2/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 819200, + "live_start": 69, + "live_end": 71 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N070", + "released": [ + { + "tensor": "/model.6/Concat_output_0", + "offset": 1638400, + "nbytes": 1638400 + } + ], + "allocated": [ + { + "tensor": "/model.6/cv2/act/Sigmoid_output_0", + "offset": 819200, + "allocated_nbytes": 819200, + "live_start": 70, + "live_end": 71 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N071", + "released": [], + "allocated": [ + { + "tensor": "/model.6/cv2/act/Mul_output_0", + "offset": 1638400, + "allocated_nbytes": 819200, + "live_start": 71, + "live_end": 308 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N072", + "released": [ + { + "tensor": "/model.6/cv2/conv/Conv_output_0", + "offset": 0, + "nbytes": 819200 + }, + { + "tensor": "/model.6/cv2/act/Sigmoid_output_0", + "offset": 819200, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.7/cv1/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 1638400, + "live_start": 72, + "live_end": 74 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N073", + "released": [], + "allocated": [ + { + "tensor": "/model.7/cv1/act/Sigmoid_output_0", + "offset": 4915200, + "allocated_nbytes": 1638400, + "live_start": 73, + "live_end": 74 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N074", + "released": [], + "allocated": [ + { + "tensor": "/model.7/cv1/act/Mul_output_0", + "offset": 13107200, + "allocated_nbytes": 1638400, + "live_start": 74, + "live_end": 75 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N075", + "released": [ + { + "tensor": "/model.7/cv1/conv/Conv_output_0", + "offset": 0, + "nbytes": 1638400 + }, + { + "tensor": "/model.7/cv1/act/Sigmoid_output_0", + "offset": 4915200, + "nbytes": 1638400 + } + ], + "allocated": [ + { + "tensor": "/model.7/cv2/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 409600, + "live_start": 75, + "live_end": 76 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N076", + "released": [ + { + "tensor": "/model.7/cv1/act/Mul_output_0", + "offset": 13107200, + "nbytes": 1638400 + } + ], + "allocated": [ + { + "tensor": "/model.8/cv1/conv/Conv_output_0", + "offset": 409600, + "allocated_nbytes": 409600, + "live_start": 76, + "live_end": 78 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N077", + "released": [ + { + "tensor": "/model.7/cv2/conv/Conv_output_0", + "offset": 0, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.8/cv1/act/Sigmoid_output_0", + "offset": 0, + "allocated_nbytes": 409600, + "live_start": 77, + "live_end": 78 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N078", + "released": [], + "allocated": [ + { + "tensor": "/model.8/cv1/act/Mul_output_0", + "offset": 819200, + "allocated_nbytes": 409600, + "live_start": 78, + "live_end": 79 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N079", + "released": [ + { + "tensor": "/model.8/cv1/conv/Conv_output_0", + "offset": 409600, + "nbytes": 409600 + }, + { + "tensor": "/model.8/cv1/act/Sigmoid_output_0", + "offset": 0, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.8/Split_output_0", + "offset": 0, + "allocated_nbytes": 204800, + "live_start": 79, + "live_end": 87 + }, + { + "tensor": "/model.8/Split_output_1", + "offset": 204800, + "allocated_nbytes": 204800, + "live_start": 79, + "live_end": 87 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N080", + "released": [ + { + "tensor": "/model.8/cv1/act/Mul_output_0", + "offset": 819200, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.8/m.0/cv1/conv/Conv_output_0", + "offset": 409600, + "allocated_nbytes": 204800, + "live_start": 80, + "live_end": 82 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N081", + "released": [], + "allocated": [ + { + "tensor": "/model.8/m.0/cv1/act/Sigmoid_output_0", + "offset": 614400, + "allocated_nbytes": 204800, + "live_start": 81, + "live_end": 82 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N082", + "released": [], + "allocated": [ + { + "tensor": "/model.8/m.0/cv1/act/Mul_output_0", + "offset": 819200, + "allocated_nbytes": 204800, + "live_start": 82, + "live_end": 83 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N083", + "released": [ + { + "tensor": "/model.8/m.0/cv1/conv/Conv_output_0", + "offset": 409600, + "nbytes": 204800 + }, + { + "tensor": "/model.8/m.0/cv1/act/Sigmoid_output_0", + "offset": 614400, + "nbytes": 204800 + } + ], + "allocated": [ + { + "tensor": "/model.8/m.0/cv2/conv/Conv_output_0", + "offset": 409600, + "allocated_nbytes": 204800, + "live_start": 83, + "live_end": 85 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N084", + "released": [ + { + "tensor": "/model.8/m.0/cv1/act/Mul_output_0", + "offset": 819200, + "nbytes": 204800 + } + ], + "allocated": [ + { + "tensor": "/model.8/m.0/cv2/act/Sigmoid_output_0", + "offset": 614400, + "allocated_nbytes": 204800, + "live_start": 84, + "live_end": 85 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N085", + "released": [], + "allocated": [ + { + "tensor": "/model.8/m.0/cv2/act/Mul_output_0", + "offset": 819200, + "allocated_nbytes": 204800, + "live_start": 85, + "live_end": 86 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N086", + "released": [ + { + "tensor": "/model.8/m.0/cv2/conv/Conv_output_0", + "offset": 409600, + "nbytes": 204800 + }, + { + "tensor": "/model.8/m.0/cv2/act/Sigmoid_output_0", + "offset": 614400, + "nbytes": 204800 + } + ], + "allocated": [ + { + "tensor": "/model.8/m.0/Add_output_0", + "offset": 409600, + "allocated_nbytes": 204800, + "live_start": 86, + "live_end": 87 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N087", + "released": [ + { + "tensor": "/model.8/m.0/cv2/act/Mul_output_0", + "offset": 819200, + "nbytes": 204800 + } + ], + "allocated": [ + { + "tensor": "/model.8/Concat_output_0", + "offset": 614400, + "allocated_nbytes": 614400, + "live_start": 87, + "live_end": 88 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N088", + "released": [ + { + "tensor": "/model.8/Split_output_0", + "offset": 0, + "nbytes": 204800 + }, + { + "tensor": "/model.8/Split_output_1", + "offset": 204800, + "nbytes": 204800 + }, + { + "tensor": "/model.8/m.0/Add_output_0", + "offset": 409600, + "nbytes": 204800 + } + ], + "allocated": [ + { + "tensor": "/model.8/cv2/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 409600, + "live_start": 88, + "live_end": 90 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N089", + "released": [ + { + "tensor": "/model.8/Concat_output_0", + "offset": 614400, + "nbytes": 614400 + } + ], + "allocated": [ + { + "tensor": "/model.8/cv2/act/Sigmoid_output_0", + "offset": 409600, + "allocated_nbytes": 409600, + "live_start": 89, + "live_end": 90 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N090", + "released": [], + "allocated": [ + { + "tensor": "/model.8/cv2/act/Mul_output_0", + "offset": 819200, + "allocated_nbytes": 409600, + "live_start": 90, + "live_end": 308 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N091", + "released": [ + { + "tensor": "/model.8/cv2/conv/Conv_output_0", + "offset": 0, + "nbytes": 409600 + }, + { + "tensor": "/model.8/cv2/act/Sigmoid_output_0", + "offset": 409600, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.9/cv1/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 204800, + "live_start": 91, + "live_end": 93 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N092", + "released": [], + "allocated": [ + { + "tensor": "/model.9/cv1/act/Sigmoid_output_0", + "offset": 204800, + "allocated_nbytes": 204800, + "live_start": 92, + "live_end": 93 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N093", + "released": [], + "allocated": [ + { + "tensor": "/model.9/cv1/act/Mul_output_0", + "offset": 409600, + "allocated_nbytes": 204800, + "live_start": 93, + "live_end": 97 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N094", + "released": [ + { + "tensor": "/model.9/cv1/conv/Conv_output_0", + "offset": 0, + "nbytes": 204800 + }, + { + "tensor": "/model.9/cv1/act/Sigmoid_output_0", + "offset": 204800, + "nbytes": 204800 + } + ], + "allocated": [ + { + "tensor": "/model.9/m/MaxPool_output_0", + "offset": 0, + "allocated_nbytes": 204800, + "live_start": 94, + "live_end": 97 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N095", + "released": [], + "allocated": [ + { + "tensor": "/model.9/m_1/MaxPool_output_0", + "offset": 204800, + "allocated_nbytes": 204800, + "live_start": 95, + "live_end": 97 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N096", + "released": [], + "allocated": [ + { + "tensor": "/model.9/m_2/MaxPool_output_0", + "offset": 614400, + "allocated_nbytes": 204800, + "live_start": 96, + "live_end": 97 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N097", + "released": [], + "allocated": [ + { + "tensor": "/model.9/Concat_output_0", + "offset": 2457600, + "allocated_nbytes": 819200, + "live_start": 97, + "live_end": 98 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N098", + "released": [ + { + "tensor": "/model.9/cv1/act/Mul_output_0", + "offset": 409600, + "nbytes": 204800 + }, + { + "tensor": "/model.9/m/MaxPool_output_0", + "offset": 0, + "nbytes": 204800 + }, + { + "tensor": "/model.9/m_1/MaxPool_output_0", + "offset": 204800, + "nbytes": 204800 + }, + { + "tensor": "/model.9/m_2/MaxPool_output_0", + "offset": 614400, + "nbytes": 204800 + } + ], + "allocated": [ + { + "tensor": "/model.9/cv2/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 409600, + "live_start": 98, + "live_end": 100 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N099", + "released": [ + { + "tensor": "/model.9/Concat_output_0", + "offset": 2457600, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.9/cv2/act/Sigmoid_output_0", + "offset": 409600, + "allocated_nbytes": 409600, + "live_start": 99, + "live_end": 100 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N100", + "released": [], + "allocated": [ + { + "tensor": "/model.9/cv2/act/Mul_output_0", + "offset": 1228800, + "allocated_nbytes": 409600, + "live_start": 100, + "live_end": 308 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N101", + "released": [ + { + "tensor": "/model.9/cv2/conv/Conv_output_0", + "offset": 0, + "nbytes": 409600 + }, + { + "tensor": "/model.9/cv2/act/Sigmoid_output_0", + "offset": 409600, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.10/cv1/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 409600, + "live_start": 101, + "live_end": 103 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N102", + "released": [], + "allocated": [ + { + "tensor": "/model.10/cv1/act/Sigmoid_output_0", + "offset": 409600, + "allocated_nbytes": 409600, + "live_start": 102, + "live_end": 103 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N103", + "released": [], + "allocated": [ + { + "tensor": "/model.10/cv1/act/Mul_output_0", + "offset": 2457600, + "allocated_nbytes": 409600, + "live_start": 103, + "live_end": 104 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N104", + "released": [ + { + "tensor": "/model.10/cv1/conv/Conv_output_0", + "offset": 0, + "nbytes": 409600 + }, + { + "tensor": "/model.10/cv1/act/Sigmoid_output_0", + "offset": 409600, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.10/Split_output_0", + "offset": 0, + "allocated_nbytes": 204800, + "live_start": 104, + "live_end": 125 + }, + { + "tensor": "/model.10/Split_output_1", + "offset": 204800, + "allocated_nbytes": 204800, + "live_start": 104, + "live_end": 119 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N105", + "released": [ + { + "tensor": "/model.10/cv1/act/Mul_output_0", + "offset": 2457600, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.10/attn/qkv/conv/Conv_output_0", + "offset": 409600, + "allocated_nbytes": 409600, + "live_start": 105, + "live_end": 106 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N106", + "released": [], + "allocated": [ + { + "tensor": "/model.10/attn/Reshape_output_0", + "offset": 2457600, + "allocated_nbytes": 409600, + "live_start": 106, + "live_end": 107 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N107", + "released": [ + { + "tensor": "/model.10/attn/qkv/conv/Conv_output_0", + "offset": 409600, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.10/attn/Split_output_0", + "offset": 409600, + "allocated_nbytes": 102400, + "live_start": 107, + "live_end": 108 + }, + { + "tensor": "/model.10/attn/Split_output_1", + "offset": 512000, + "allocated_nbytes": 102400, + "live_start": 107, + "live_end": 109 + }, + { + "tensor": "/model.10/attn/Split_output_2", + "offset": 614400, + "allocated_nbytes": 204800, + "live_start": 107, + "live_end": 115 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N108", + "released": [ + { + "tensor": "/model.10/attn/Reshape_output_0", + "offset": 2457600, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.10/attn/Transpose_output_0", + "offset": 2457600, + "allocated_nbytes": 102400, + "live_start": 108, + "live_end": 109 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N109", + "released": [ + { + "tensor": "/model.10/attn/Split_output_0", + "offset": 409600, + "nbytes": 102400 + } + ], + "allocated": [ + { + "tensor": "/model.10/attn/MatMul_output_0", + "offset": 4915200, + "allocated_nbytes": 1280000, + "live_start": 109, + "live_end": 110 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N110", + "released": [ + { + "tensor": "/model.10/attn/Split_output_1", + "offset": 512000, + "nbytes": 102400 + }, + { + "tensor": "/model.10/attn/Transpose_output_0", + "offset": 2457600, + "nbytes": 102400 + } + ], + "allocated": [ + { + "tensor": "/model.10/attn/Mul_output_0", + "offset": 13107200, + "allocated_nbytes": 1280000, + "live_start": 110, + "live_end": 111 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N111", + "released": [ + { + "tensor": "/model.10/attn/MatMul_output_0", + "offset": 4915200, + "nbytes": 1280000 + } + ], + "allocated": [ + { + "tensor": "/model.10/attn/Softmax_output_0", + "offset": 4915200, + "allocated_nbytes": 1280000, + "live_start": 111, + "live_end": 112 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N112", + "released": [ + { + "tensor": "/model.10/attn/Mul_output_0", + "offset": 13107200, + "nbytes": 1280000 + } + ], + "allocated": [ + { + "tensor": "/model.10/attn/Transpose_1_output_0", + "offset": 13107200, + "allocated_nbytes": 1280000, + "live_start": 112, + "live_end": 113 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N113", + "released": [ + { + "tensor": "/model.10/attn/Softmax_output_0", + "offset": 4915200, + "nbytes": 1280000 + } + ], + "allocated": [ + { + "tensor": "/model.10/attn/MatMul_1_output_0", + "offset": 409600, + "allocated_nbytes": 204800, + "live_start": 113, + "live_end": 114 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N114", + "released": [ + { + "tensor": "/model.10/attn/Transpose_1_output_0", + "offset": 13107200, + "nbytes": 1280000 + } + ], + "allocated": [ + { + "tensor": "/model.10/attn/Reshape_1_output_0", + "offset": 2457600, + "allocated_nbytes": 204800, + "live_start": 114, + "live_end": 117 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N115", + "released": [ + { + "tensor": "/model.10/attn/MatMul_1_output_0", + "offset": 409600, + "nbytes": 204800 + } + ], + "allocated": [ + { + "tensor": "/model.10/attn/Reshape_2_output_0", + "offset": 409600, + "allocated_nbytes": 204800, + "live_start": 115, + "live_end": 116 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N116", + "released": [ + { + "tensor": "/model.10/attn/Split_output_2", + "offset": 614400, + "nbytes": 204800 + } + ], + "allocated": [ + { + "tensor": "/model.10/attn/pe/conv/Conv_output_0", + "offset": 614400, + "allocated_nbytes": 204800, + "live_start": 116, + "live_end": 117 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N117", + "released": [ + { + "tensor": "/model.10/attn/Reshape_2_output_0", + "offset": 409600, + "nbytes": 204800 + } + ], + "allocated": [ + { + "tensor": "/model.10/attn/Add_output_0", + "offset": 409600, + "allocated_nbytes": 204800, + "live_start": 117, + "live_end": 118 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N118", + "released": [ + { + "tensor": "/model.10/attn/Reshape_1_output_0", + "offset": 2457600, + "nbytes": 204800 + }, + { + "tensor": "/model.10/attn/pe/conv/Conv_output_0", + "offset": 614400, + "nbytes": 204800 + } + ], + "allocated": [ + { + "tensor": "/model.10/attn/proj/conv/Conv_output_0", + "offset": 614400, + "allocated_nbytes": 204800, + "live_start": 118, + "live_end": 119 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N119", + "released": [ + { + "tensor": "/model.10/attn/Add_output_0", + "offset": 409600, + "nbytes": 204800 + } + ], + "allocated": [ + { + "tensor": "/model.10/Add_output_0", + "offset": 409600, + "allocated_nbytes": 204800, + "live_start": 119, + "live_end": 124 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N120", + "released": [ + { + "tensor": "/model.10/Split_output_1", + "offset": 204800, + "nbytes": 204800 + }, + { + "tensor": "/model.10/attn/proj/conv/Conv_output_0", + "offset": 614400, + "nbytes": 204800 + } + ], + "allocated": [ + { + "tensor": "/model.10/ffn/ffn.0/conv/Conv_output_0", + "offset": 2457600, + "allocated_nbytes": 409600, + "live_start": 120, + "live_end": 122 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N121", + "released": [], + "allocated": [ + { + "tensor": "/model.10/ffn/ffn.0/act/Sigmoid_output_0", + "offset": 2867200, + "allocated_nbytes": 409600, + "live_start": 121, + "live_end": 122 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N122", + "released": [], + "allocated": [ + { + "tensor": "/model.10/ffn/ffn.0/act/Mul_output_0", + "offset": 4915200, + "allocated_nbytes": 409600, + "live_start": 122, + "live_end": 123 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N123", + "released": [ + { + "tensor": "/model.10/ffn/ffn.0/conv/Conv_output_0", + "offset": 2457600, + "nbytes": 409600 + }, + { + "tensor": "/model.10/ffn/ffn.0/act/Sigmoid_output_0", + "offset": 2867200, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.10/ffn/ffn.1/conv/Conv_output_0", + "offset": 204800, + "allocated_nbytes": 204800, + "live_start": 123, + "live_end": 124 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N124", + "released": [ + { + "tensor": "/model.10/ffn/ffn.0/act/Mul_output_0", + "offset": 4915200, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.10/Add_1_output_0", + "offset": 614400, + "allocated_nbytes": 204800, + "live_start": 124, + "live_end": 125 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N125", + "released": [ + { + "tensor": "/model.10/Add_output_0", + "offset": 409600, + "nbytes": 204800 + }, + { + "tensor": "/model.10/ffn/ffn.1/conv/Conv_output_0", + "offset": 204800, + "nbytes": 204800 + } + ], + "allocated": [ + { + "tensor": "/model.10/Concat_output_0", + "offset": 204800, + "allocated_nbytes": 409600, + "live_start": 125, + "live_end": 126 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N126", + "released": [ + { + "tensor": "/model.10/Split_output_0", + "offset": 0, + "nbytes": 204800 + }, + { + "tensor": "/model.10/Add_1_output_0", + "offset": 614400, + "nbytes": 204800 + } + ], + "allocated": [ + { + "tensor": "/model.10/cv2/conv/Conv_output_0", + "offset": 2457600, + "allocated_nbytes": 409600, + "live_start": 126, + "live_end": 128 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N127", + "released": [ + { + "tensor": "/model.10/Concat_output_0", + "offset": 204800, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.10/cv2/act/Sigmoid_output_0", + "offset": 0, + "allocated_nbytes": 409600, + "live_start": 127, + "live_end": 128 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N128", + "released": [], + "allocated": [ + { + "tensor": "/model.10/cv2/act/Mul_output_0", + "offset": 409600, + "allocated_nbytes": 409600, + "live_start": 128, + "live_end": 308 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N129", + "released": [ + { + "tensor": "/model.10/cv2/conv/Conv_output_0", + "offset": 2457600, + "nbytes": 409600 + }, + { + "tensor": "/model.10/cv2/act/Sigmoid_output_0", + "offset": 0, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.11/Resize_output_0", + "offset": 4915200, + "allocated_nbytes": 1638400, + "live_start": 129, + "live_end": 130 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N130", + "released": [], + "allocated": [ + { + "tensor": "/model.12/Concat_output_0", + "offset": 13107200, + "allocated_nbytes": 2457600, + "live_start": 130, + "live_end": 131 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N131", + "released": [ + { + "tensor": "/model.11/Resize_output_0", + "offset": 4915200, + "nbytes": 1638400 + } + ], + "allocated": [ + { + "tensor": "/model.13/cv1/conv/Conv_output_0", + "offset": 2457600, + "allocated_nbytes": 819200, + "live_start": 131, + "live_end": 133 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N132", + "released": [ + { + "tensor": "/model.12/Concat_output_0", + "offset": 13107200, + "nbytes": 2457600 + } + ], + "allocated": [ + { + "tensor": "/model.13/cv1/act/Sigmoid_output_0", + "offset": 4915200, + "allocated_nbytes": 819200, + "live_start": 132, + "live_end": 133 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N133", + "released": [], + "allocated": [ + { + "tensor": "/model.13/cv1/act/Mul_output_0", + "offset": 5734400, + "allocated_nbytes": 819200, + "live_start": 133, + "live_end": 134 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N134", + "released": [ + { + "tensor": "/model.13/cv1/conv/Conv_output_0", + "offset": 2457600, + "nbytes": 819200 + }, + { + "tensor": "/model.13/cv1/act/Sigmoid_output_0", + "offset": 4915200, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.13/Split_output_0", + "offset": 0, + "allocated_nbytes": 409600, + "live_start": 134, + "live_end": 141 + }, + { + "tensor": "/model.13/Split_output_1", + "offset": 2457600, + "allocated_nbytes": 409600, + "live_start": 134, + "live_end": 141 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N135", + "released": [ + { + "tensor": "/model.13/cv1/act/Mul_output_0", + "offset": 5734400, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.13/m.0/cv1/conv/Conv_output_0", + "offset": 2867200, + "allocated_nbytes": 409600, + "live_start": 135, + "live_end": 137 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N136", + "released": [], + "allocated": [ + { + "tensor": "/model.13/m.0/cv1/act/Sigmoid_output_0", + "offset": 4915200, + "allocated_nbytes": 409600, + "live_start": 136, + "live_end": 137 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N137", + "released": [], + "allocated": [ + { + "tensor": "/model.13/m.0/cv1/act/Mul_output_0", + "offset": 5324800, + "allocated_nbytes": 409600, + "live_start": 137, + "live_end": 138 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N138", + "released": [ + { + "tensor": "/model.13/m.0/cv1/conv/Conv_output_0", + "offset": 2867200, + "nbytes": 409600 + }, + { + "tensor": "/model.13/m.0/cv1/act/Sigmoid_output_0", + "offset": 4915200, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.13/m.0/cv2/conv/Conv_output_0", + "offset": 2867200, + "allocated_nbytes": 409600, + "live_start": 138, + "live_end": 140 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N139", + "released": [ + { + "tensor": "/model.13/m.0/cv1/act/Mul_output_0", + "offset": 5324800, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.13/m.0/cv2/act/Sigmoid_output_0", + "offset": 4915200, + "allocated_nbytes": 409600, + "live_start": 139, + "live_end": 140 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N140", + "released": [], + "allocated": [ + { + "tensor": "/model.13/m.0/cv2/act/Mul_output_0", + "offset": 5324800, + "allocated_nbytes": 409600, + "live_start": 140, + "live_end": 141 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N141", + "released": [ + { + "tensor": "/model.13/m.0/cv2/conv/Conv_output_0", + "offset": 2867200, + "nbytes": 409600 + }, + { + "tensor": "/model.13/m.0/cv2/act/Sigmoid_output_0", + "offset": 4915200, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.13/Concat_output_0", + "offset": 13107200, + "allocated_nbytes": 1228800, + "live_start": 141, + "live_end": 142 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N142", + "released": [ + { + "tensor": "/model.13/Split_output_0", + "offset": 0, + "nbytes": 409600 + }, + { + "tensor": "/model.13/Split_output_1", + "offset": 2457600, + "nbytes": 409600 + }, + { + "tensor": "/model.13/m.0/cv2/act/Mul_output_0", + "offset": 5324800, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.13/cv2/conv/Conv_output_0", + "offset": 2457600, + "allocated_nbytes": 819200, + "live_start": 142, + "live_end": 144 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N143", + "released": [ + { + "tensor": "/model.13/Concat_output_0", + "offset": 13107200, + "nbytes": 1228800 + } + ], + "allocated": [ + { + "tensor": "/model.13/cv2/act/Sigmoid_output_0", + "offset": 4915200, + "allocated_nbytes": 819200, + "live_start": 143, + "live_end": 144 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N144", + "released": [], + "allocated": [ + { + "tensor": "/model.13/cv2/act/Mul_output_0", + "offset": 5734400, + "allocated_nbytes": 819200, + "live_start": 144, + "live_end": 308 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N145", + "released": [ + { + "tensor": "/model.13/cv2/conv/Conv_output_0", + "offset": 2457600, + "nbytes": 819200 + }, + { + "tensor": "/model.13/cv2/act/Sigmoid_output_0", + "offset": 4915200, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.14/Resize_output_0", + "offset": 13107200, + "allocated_nbytes": 3276800, + "live_start": 145, + "live_end": 146 + } + ], + "arena_end": 19660800 + }, + { + "node_id": "N146", + "released": [], + "allocated": [ + { + "tensor": "/model.15/Concat_output_0", + "offset": 19660800, + "allocated_nbytes": 4915200, + "live_start": 146, + "live_end": 147 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N147", + "released": [ + { + "tensor": "/model.14/Resize_output_0", + "offset": 13107200, + "nbytes": 3276800 + } + ], + "allocated": [ + { + "tensor": "/model.16/cv1/conv/Conv_output_0", + "offset": 13107200, + "allocated_nbytes": 1638400, + "live_start": 147, + "live_end": 149 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N148", + "released": [ + { + "tensor": "/model.15/Concat_output_0", + "offset": 19660800, + "nbytes": 4915200 + } + ], + "allocated": [ + { + "tensor": "/model.16/cv1/act/Sigmoid_output_0", + "offset": 14745600, + "allocated_nbytes": 1638400, + "live_start": 148, + "live_end": 149 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N149", + "released": [], + "allocated": [ + { + "tensor": "/model.16/cv1/act/Mul_output_0", + "offset": 16384000, + "allocated_nbytes": 1638400, + "live_start": 149, + "live_end": 150 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N150", + "released": [ + { + "tensor": "/model.16/cv1/conv/Conv_output_0", + "offset": 13107200, + "nbytes": 1638400 + }, + { + "tensor": "/model.16/cv1/act/Sigmoid_output_0", + "offset": 14745600, + "nbytes": 1638400 + } + ], + "allocated": [ + { + "tensor": "/model.16/Split_output_0", + "offset": 2457600, + "allocated_nbytes": 819200, + "live_start": 150, + "live_end": 157 + }, + { + "tensor": "/model.16/Split_output_1", + "offset": 4915200, + "allocated_nbytes": 819200, + "live_start": 150, + "live_end": 157 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N151", + "released": [ + { + "tensor": "/model.16/cv1/act/Mul_output_0", + "offset": 16384000, + "nbytes": 1638400 + } + ], + "allocated": [ + { + "tensor": "/model.16/m.0/cv1/conv/Conv_output_0", + "offset": 13107200, + "allocated_nbytes": 819200, + "live_start": 151, + "live_end": 153 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N152", + "released": [], + "allocated": [ + { + "tensor": "/model.16/m.0/cv1/act/Sigmoid_output_0", + "offset": 13926400, + "allocated_nbytes": 819200, + "live_start": 152, + "live_end": 153 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N153", + "released": [], + "allocated": [ + { + "tensor": "/model.16/m.0/cv1/act/Mul_output_0", + "offset": 14745600, + "allocated_nbytes": 819200, + "live_start": 153, + "live_end": 154 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N154", + "released": [ + { + "tensor": "/model.16/m.0/cv1/conv/Conv_output_0", + "offset": 13107200, + "nbytes": 819200 + }, + { + "tensor": "/model.16/m.0/cv1/act/Sigmoid_output_0", + "offset": 13926400, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.16/m.0/cv2/conv/Conv_output_0", + "offset": 13107200, + "allocated_nbytes": 819200, + "live_start": 154, + "live_end": 156 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N155", + "released": [ + { + "tensor": "/model.16/m.0/cv1/act/Mul_output_0", + "offset": 14745600, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.16/m.0/cv2/act/Sigmoid_output_0", + "offset": 13926400, + "allocated_nbytes": 819200, + "live_start": 155, + "live_end": 156 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N156", + "released": [], + "allocated": [ + { + "tensor": "/model.16/m.0/cv2/act/Mul_output_0", + "offset": 14745600, + "allocated_nbytes": 819200, + "live_start": 156, + "live_end": 157 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N157", + "released": [ + { + "tensor": "/model.16/m.0/cv2/conv/Conv_output_0", + "offset": 13107200, + "nbytes": 819200 + }, + { + "tensor": "/model.16/m.0/cv2/act/Sigmoid_output_0", + "offset": 13926400, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.16/Concat_output_0", + "offset": 15564800, + "allocated_nbytes": 2457600, + "live_start": 157, + "live_end": 158 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N158", + "released": [ + { + "tensor": "/model.16/Split_output_0", + "offset": 2457600, + "nbytes": 819200 + }, + { + "tensor": "/model.16/Split_output_1", + "offset": 4915200, + "nbytes": 819200 + }, + { + "tensor": "/model.16/m.0/cv2/act/Mul_output_0", + "offset": 14745600, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.16/cv2/conv/Conv_output_0", + "offset": 13107200, + "allocated_nbytes": 1638400, + "live_start": 158, + "live_end": 160 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N159", + "released": [ + { + "tensor": "/model.16/Concat_output_0", + "offset": 15564800, + "nbytes": 2457600 + } + ], + "allocated": [ + { + "tensor": "/model.16/cv2/act/Sigmoid_output_0", + "offset": 14745600, + "allocated_nbytes": 1638400, + "live_start": 159, + "live_end": 160 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N160", + "released": [], + "allocated": [ + { + "tensor": "/model.16/cv2/act/Mul_output_0", + "offset": 16384000, + "allocated_nbytes": 1638400, + "live_start": 160, + "live_end": 308 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N161", + "released": [ + { + "tensor": "/model.16/cv2/conv/Conv_output_0", + "offset": 13107200, + "nbytes": 1638400 + }, + { + "tensor": "/model.16/cv2/act/Sigmoid_output_0", + "offset": 14745600, + "nbytes": 1638400 + } + ], + "allocated": [ + { + "tensor": "/model.17/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 409600, + "live_start": 161, + "live_end": 163 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N162", + "released": [], + "allocated": [ + { + "tensor": "/model.17/act/Sigmoid_output_0", + "offset": 2457600, + "allocated_nbytes": 409600, + "live_start": 162, + "live_end": 163 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N163", + "released": [], + "allocated": [ + { + "tensor": "/model.17/act/Mul_output_0", + "offset": 2867200, + "allocated_nbytes": 409600, + "live_start": 163, + "live_end": 164 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N164", + "released": [ + { + "tensor": "/model.17/conv/Conv_output_0", + "offset": 0, + "nbytes": 409600 + }, + { + "tensor": "/model.17/act/Sigmoid_output_0", + "offset": 2457600, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.18/Concat_output_0", + "offset": 13107200, + "allocated_nbytes": 1228800, + "live_start": 164, + "live_end": 165 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N165", + "released": [ + { + "tensor": "/model.17/act/Mul_output_0", + "offset": 2867200, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.19/cv1/conv/Conv_output_0", + "offset": 2457600, + "allocated_nbytes": 819200, + "live_start": 165, + "live_end": 167 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N166", + "released": [ + { + "tensor": "/model.18/Concat_output_0", + "offset": 13107200, + "nbytes": 1228800 + } + ], + "allocated": [ + { + "tensor": "/model.19/cv1/act/Sigmoid_output_0", + "offset": 4915200, + "allocated_nbytes": 819200, + "live_start": 166, + "live_end": 167 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N167", + "released": [], + "allocated": [ + { + "tensor": "/model.19/cv1/act/Mul_output_0", + "offset": 13107200, + "allocated_nbytes": 819200, + "live_start": 167, + "live_end": 168 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N168", + "released": [ + { + "tensor": "/model.19/cv1/conv/Conv_output_0", + "offset": 2457600, + "nbytes": 819200 + }, + { + "tensor": "/model.19/cv1/act/Sigmoid_output_0", + "offset": 4915200, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.19/Split_output_0", + "offset": 0, + "allocated_nbytes": 409600, + "live_start": 168, + "live_end": 175 + }, + { + "tensor": "/model.19/Split_output_1", + "offset": 2457600, + "allocated_nbytes": 409600, + "live_start": 168, + "live_end": 175 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N169", + "released": [ + { + "tensor": "/model.19/cv1/act/Mul_output_0", + "offset": 13107200, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.19/m.0/cv1/conv/Conv_output_0", + "offset": 2867200, + "allocated_nbytes": 409600, + "live_start": 169, + "live_end": 171 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N170", + "released": [], + "allocated": [ + { + "tensor": "/model.19/m.0/cv1/act/Sigmoid_output_0", + "offset": 4915200, + "allocated_nbytes": 409600, + "live_start": 170, + "live_end": 171 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N171", + "released": [], + "allocated": [ + { + "tensor": "/model.19/m.0/cv1/act/Mul_output_0", + "offset": 5324800, + "allocated_nbytes": 409600, + "live_start": 171, + "live_end": 172 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N172", + "released": [ + { + "tensor": "/model.19/m.0/cv1/conv/Conv_output_0", + "offset": 2867200, + "nbytes": 409600 + }, + { + "tensor": "/model.19/m.0/cv1/act/Sigmoid_output_0", + "offset": 4915200, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.19/m.0/cv2/conv/Conv_output_0", + "offset": 2867200, + "allocated_nbytes": 409600, + "live_start": 172, + "live_end": 174 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N173", + "released": [ + { + "tensor": "/model.19/m.0/cv1/act/Mul_output_0", + "offset": 5324800, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.19/m.0/cv2/act/Sigmoid_output_0", + "offset": 4915200, + "allocated_nbytes": 409600, + "live_start": 173, + "live_end": 174 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N174", + "released": [], + "allocated": [ + { + "tensor": "/model.19/m.0/cv2/act/Mul_output_0", + "offset": 5324800, + "allocated_nbytes": 409600, + "live_start": 174, + "live_end": 175 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N175", + "released": [ + { + "tensor": "/model.19/m.0/cv2/conv/Conv_output_0", + "offset": 2867200, + "nbytes": 409600 + }, + { + "tensor": "/model.19/m.0/cv2/act/Sigmoid_output_0", + "offset": 4915200, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.19/Concat_output_0", + "offset": 13107200, + "allocated_nbytes": 1228800, + "live_start": 175, + "live_end": 176 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N176", + "released": [ + { + "tensor": "/model.19/Split_output_0", + "offset": 0, + "nbytes": 409600 + }, + { + "tensor": "/model.19/Split_output_1", + "offset": 2457600, + "nbytes": 409600 + }, + { + "tensor": "/model.19/m.0/cv2/act/Mul_output_0", + "offset": 5324800, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.19/cv2/conv/Conv_output_0", + "offset": 2457600, + "allocated_nbytes": 819200, + "live_start": 176, + "live_end": 178 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N177", + "released": [ + { + "tensor": "/model.19/Concat_output_0", + "offset": 13107200, + "nbytes": 1228800 + } + ], + "allocated": [ + { + "tensor": "/model.19/cv2/act/Sigmoid_output_0", + "offset": 4915200, + "allocated_nbytes": 819200, + "live_start": 177, + "live_end": 178 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N178", + "released": [], + "allocated": [ + { + "tensor": "/model.19/cv2/act/Mul_output_0", + "offset": 13107200, + "allocated_nbytes": 819200, + "live_start": 178, + "live_end": 308 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N179", + "released": [ + { + "tensor": "/model.19/cv2/conv/Conv_output_0", + "offset": 2457600, + "nbytes": 819200 + }, + { + "tensor": "/model.19/cv2/act/Sigmoid_output_0", + "offset": 4915200, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.20/cv1/conv/Conv_output_0", + "offset": 2457600, + "allocated_nbytes": 819200, + "live_start": 179, + "live_end": 181 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N180", + "released": [], + "allocated": [ + { + "tensor": "/model.20/cv1/act/Sigmoid_output_0", + "offset": 4915200, + "allocated_nbytes": 819200, + "live_start": 180, + "live_end": 181 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N181", + "released": [], + "allocated": [ + { + "tensor": "/model.20/cv1/act/Mul_output_0", + "offset": 13926400, + "allocated_nbytes": 819200, + "live_start": 181, + "live_end": 182 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N182", + "released": [ + { + "tensor": "/model.20/cv1/conv/Conv_output_0", + "offset": 2457600, + "nbytes": 819200 + }, + { + "tensor": "/model.20/cv1/act/Sigmoid_output_0", + "offset": 4915200, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.20/cv2/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 204800, + "live_start": 182, + "live_end": 183 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N183", + "released": [ + { + "tensor": "/model.20/cv1/act/Mul_output_0", + "offset": 13926400, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.21/Concat_output_0", + "offset": 2457600, + "allocated_nbytes": 614400, + "live_start": 183, + "live_end": 184 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N184", + "released": [ + { + "tensor": "/model.20/cv2/conv/Conv_output_0", + "offset": 0, + "nbytes": 204800 + } + ], + "allocated": [ + { + "tensor": "/model.22/cv1/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 409600, + "live_start": 184, + "live_end": 186 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N185", + "released": [ + { + "tensor": "/model.21/Concat_output_0", + "offset": 2457600, + "nbytes": 614400 + } + ], + "allocated": [ + { + "tensor": "/model.22/cv1/act/Sigmoid_output_0", + "offset": 2457600, + "allocated_nbytes": 409600, + "live_start": 185, + "live_end": 186 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N186", + "released": [], + "allocated": [ + { + "tensor": "/model.22/cv1/act/Mul_output_0", + "offset": 2867200, + "allocated_nbytes": 409600, + "live_start": 186, + "live_end": 187 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N187", + "released": [ + { + "tensor": "/model.22/cv1/conv/Conv_output_0", + "offset": 0, + "nbytes": 409600 + }, + { + "tensor": "/model.22/cv1/act/Sigmoid_output_0", + "offset": 2457600, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.22/Split_output_0", + "offset": 0, + "allocated_nbytes": 204800, + "live_start": 187, + "live_end": 204 + }, + { + "tensor": "/model.22/Split_output_1", + "offset": 204800, + "allocated_nbytes": 204800, + "live_start": 187, + "live_end": 204 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N188", + "released": [ + { + "tensor": "/model.22/cv1/act/Mul_output_0", + "offset": 2867200, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.22/m.0/cv1/cv1.0/conv/Conv_output_0", + "offset": 2457600, + "allocated_nbytes": 204800, + "live_start": 188, + "live_end": 190 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N189", + "released": [], + "allocated": [ + { + "tensor": "/model.22/m.0/cv1/cv1.0/act/Sigmoid_output_0", + "offset": 2662400, + "allocated_nbytes": 204800, + "live_start": 189, + "live_end": 190 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N190", + "released": [], + "allocated": [ + { + "tensor": "/model.22/m.0/cv1/cv1.0/act/Mul_output_0", + "offset": 2867200, + "allocated_nbytes": 204800, + "live_start": 190, + "live_end": 191 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N191", + "released": [ + { + "tensor": "/model.22/m.0/cv1/cv1.0/conv/Conv_output_0", + "offset": 2457600, + "nbytes": 204800 + }, + { + "tensor": "/model.22/m.0/cv1/cv1.0/act/Sigmoid_output_0", + "offset": 2662400, + "nbytes": 204800 + } + ], + "allocated": [ + { + "tensor": "/model.22/m.0/cv1/cv1.1/conv/Conv_output_0", + "offset": 2457600, + "allocated_nbytes": 409600, + "live_start": 191, + "live_end": 193 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N192", + "released": [ + { + "tensor": "/model.22/m.0/cv1/cv1.0/act/Mul_output_0", + "offset": 2867200, + "nbytes": 204800 + } + ], + "allocated": [ + { + "tensor": "/model.22/m.0/cv1/cv1.1/act/Sigmoid_output_0", + "offset": 2867200, + "allocated_nbytes": 409600, + "live_start": 192, + "live_end": 193 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N193", + "released": [], + "allocated": [ + { + "tensor": "/model.22/m.0/cv1/cv1.1/act/Mul_output_0", + "offset": 4915200, + "allocated_nbytes": 409600, + "live_start": 193, + "live_end": 194 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N194", + "released": [ + { + "tensor": "/model.22/m.0/cv1/cv1.1/conv/Conv_output_0", + "offset": 2457600, + "nbytes": 409600 + }, + { + "tensor": "/model.22/m.0/cv1/cv1.1/act/Sigmoid_output_0", + "offset": 2867200, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.22/m.0/cv1/cv1.2/conv/Conv_output_0", + "offset": 2457600, + "allocated_nbytes": 409600, + "live_start": 194, + "live_end": 196 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N195", + "released": [ + { + "tensor": "/model.22/m.0/cv1/cv1.1/act/Mul_output_0", + "offset": 4915200, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.22/m.0/cv1/cv1.2/act/Sigmoid_output_0", + "offset": 2867200, + "allocated_nbytes": 409600, + "live_start": 195, + "live_end": 196 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N196", + "released": [], + "allocated": [ + { + "tensor": "/model.22/m.0/cv1/cv1.2/act/Mul_output_0", + "offset": 4915200, + "allocated_nbytes": 409600, + "live_start": 196, + "live_end": 197 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N197", + "released": [ + { + "tensor": "/model.22/m.0/cv1/cv1.2/conv/Conv_output_0", + "offset": 2457600, + "nbytes": 409600 + }, + { + "tensor": "/model.22/m.0/cv1/cv1.2/act/Sigmoid_output_0", + "offset": 2867200, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.22/m.0/cv1/cv1.3/conv/Conv_output_0", + "offset": 2457600, + "allocated_nbytes": 204800, + "live_start": 197, + "live_end": 199 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N198", + "released": [ + { + "tensor": "/model.22/m.0/cv1/cv1.2/act/Mul_output_0", + "offset": 4915200, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.22/m.0/cv1/cv1.3/act/Sigmoid_output_0", + "offset": 2662400, + "allocated_nbytes": 204800, + "live_start": 198, + "live_end": 199 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N199", + "released": [], + "allocated": [ + { + "tensor": "/model.22/m.0/cv1/cv1.3/act/Mul_output_0", + "offset": 2867200, + "allocated_nbytes": 204800, + "live_start": 199, + "live_end": 200 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N200", + "released": [ + { + "tensor": "/model.22/m.0/cv1/cv1.3/conv/Conv_output_0", + "offset": 2457600, + "nbytes": 204800 + }, + { + "tensor": "/model.22/m.0/cv1/cv1.3/act/Sigmoid_output_0", + "offset": 2662400, + "nbytes": 204800 + } + ], + "allocated": [ + { + "tensor": "/model.22/m.0/cv1/cv1.4/conv/Conv_output_0", + "offset": 2457600, + "allocated_nbytes": 204800, + "live_start": 200, + "live_end": 202 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N201", + "released": [ + { + "tensor": "/model.22/m.0/cv1/cv1.3/act/Mul_output_0", + "offset": 2867200, + "nbytes": 204800 + } + ], + "allocated": [ + { + "tensor": "/model.22/m.0/cv1/cv1.4/act/Sigmoid_output_0", + "offset": 2662400, + "allocated_nbytes": 204800, + "live_start": 201, + "live_end": 202 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N202", + "released": [], + "allocated": [ + { + "tensor": "/model.22/m.0/cv1/cv1.4/act/Mul_output_0", + "offset": 2867200, + "allocated_nbytes": 204800, + "live_start": 202, + "live_end": 203 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N203", + "released": [ + { + "tensor": "/model.22/m.0/cv1/cv1.4/conv/Conv_output_0", + "offset": 2457600, + "nbytes": 204800 + }, + { + "tensor": "/model.22/m.0/cv1/cv1.4/act/Sigmoid_output_0", + "offset": 2662400, + "nbytes": 204800 + } + ], + "allocated": [ + { + "tensor": "/model.22/m.0/Add_output_0", + "offset": 2457600, + "allocated_nbytes": 204800, + "live_start": 203, + "live_end": 204 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N204", + "released": [ + { + "tensor": "/model.22/m.0/cv1/cv1.4/act/Mul_output_0", + "offset": 2867200, + "nbytes": 204800 + } + ], + "allocated": [ + { + "tensor": "/model.22/Concat_output_0", + "offset": 2662400, + "allocated_nbytes": 614400, + "live_start": 204, + "live_end": 205 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N205", + "released": [ + { + "tensor": "/model.22/Split_output_0", + "offset": 0, + "nbytes": 204800 + }, + { + "tensor": "/model.22/Split_output_1", + "offset": 204800, + "nbytes": 204800 + }, + { + "tensor": "/model.22/m.0/Add_output_0", + "offset": 2457600, + "nbytes": 204800 + } + ], + "allocated": [ + { + "tensor": "/model.22/cv2/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 409600, + "live_start": 205, + "live_end": 207 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N206", + "released": [ + { + "tensor": "/model.22/Concat_output_0", + "offset": 2662400, + "nbytes": 614400 + } + ], + "allocated": [ + { + "tensor": "/model.22/cv2/act/Sigmoid_output_0", + "offset": 2457600, + "allocated_nbytes": 409600, + "live_start": 206, + "live_end": 207 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N207", + "released": [], + "allocated": [ + { + "tensor": "/model.22/cv2/act/Mul_output_0", + "offset": 2867200, + "allocated_nbytes": 409600, + "live_start": 207, + "live_end": 308 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N208", + "released": [ + { + "tensor": "/model.22/cv2/conv/Conv_output_0", + "offset": 0, + "nbytes": 409600 + }, + { + "tensor": "/model.22/cv2/act/Sigmoid_output_0", + "offset": 2457600, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv2.0/one2one_cv2.0.0/conv/Conv_output_0", + "offset": 13926400, + "allocated_nbytes": 1638400, + "live_start": 208, + "live_end": 210 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N209", + "released": [], + "allocated": [ + { + "tensor": "/model.23/one2one_cv2.0/one2one_cv2.0.0/act/Sigmoid_output_0", + "offset": 18022400, + "allocated_nbytes": 1638400, + "live_start": 209, + "live_end": 210 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N210", + "released": [], + "allocated": [ + { + "tensor": "/model.23/one2one_cv2.0/one2one_cv2.0.0/act/Mul_output_0", + "offset": 19660800, + "allocated_nbytes": 1638400, + "live_start": 210, + "live_end": 211 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N211", + "released": [ + { + "tensor": "/model.23/one2one_cv2.0/one2one_cv2.0.0/conv/Conv_output_0", + "offset": 13926400, + "nbytes": 1638400 + }, + { + "tensor": "/model.23/one2one_cv2.0/one2one_cv2.0.0/act/Sigmoid_output_0", + "offset": 18022400, + "nbytes": 1638400 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv2.0/one2one_cv2.0.1/conv/Conv_output_0", + "offset": 13926400, + "allocated_nbytes": 1638400, + "live_start": 211, + "live_end": 213 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N212", + "released": [ + { + "tensor": "/model.23/one2one_cv2.0/one2one_cv2.0.0/act/Mul_output_0", + "offset": 19660800, + "nbytes": 1638400 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv2.0/one2one_cv2.0.1/act/Sigmoid_output_0", + "offset": 18022400, + "allocated_nbytes": 1638400, + "live_start": 212, + "live_end": 213 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N213", + "released": [], + "allocated": [ + { + "tensor": "/model.23/one2one_cv2.0/one2one_cv2.0.1/act/Mul_output_0", + "offset": 19660800, + "allocated_nbytes": 1638400, + "live_start": 213, + "live_end": 214 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N214", + "released": [ + { + "tensor": "/model.23/one2one_cv2.0/one2one_cv2.0.1/conv/Conv_output_0", + "offset": 13926400, + "nbytes": 1638400 + }, + { + "tensor": "/model.23/one2one_cv2.0/one2one_cv2.0.1/act/Sigmoid_output_0", + "offset": 18022400, + "nbytes": 1638400 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv2.0/one2one_cv2.0.2/Conv_output_0", + "offset": 13926400, + "allocated_nbytes": 1638400, + "live_start": 214, + "live_end": 228 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N215", + "released": [ + { + "tensor": "/model.23/one2one_cv2.0/one2one_cv2.0.1/act/Mul_output_0", + "offset": 19660800, + "nbytes": 1638400 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/conv/Conv_output_0", + "offset": 18022400, + "allocated_nbytes": 1638400, + "live_start": 215, + "live_end": 217 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N216", + "released": [], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/act/Sigmoid_output_0", + "offset": 19660800, + "allocated_nbytes": 1638400, + "live_start": 216, + "live_end": 217 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N217", + "released": [], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/act/Mul_output_0", + "offset": 21299200, + "allocated_nbytes": 1638400, + "live_start": 217, + "live_end": 218 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N218", + "released": [ + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/conv/Conv_output_0", + "offset": 18022400, + "nbytes": 1638400 + }, + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/act/Sigmoid_output_0", + "offset": 19660800, + "nbytes": 1638400 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/conv/Conv_output_0", + "offset": 18022400, + "allocated_nbytes": 2048000, + "live_start": 218, + "live_end": 220 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N219", + "released": [ + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/act/Mul_output_0", + "offset": 21299200, + "nbytes": 1638400 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/act/Sigmoid_output_0", + "offset": 20070400, + "allocated_nbytes": 2048000, + "live_start": 219, + "live_end": 220 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N220", + "released": [], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/act/Mul_output_0", + "offset": 22118400, + "allocated_nbytes": 2048000, + "live_start": 220, + "live_end": 221 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N221", + "released": [ + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/conv/Conv_output_0", + "offset": 18022400, + "nbytes": 2048000 + }, + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/act/Sigmoid_output_0", + "offset": 20070400, + "nbytes": 2048000 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/conv/Conv_output_0", + "offset": 18022400, + "allocated_nbytes": 2048000, + "live_start": 221, + "live_end": 223 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N222", + "released": [ + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/act/Mul_output_0", + "offset": 22118400, + "nbytes": 2048000 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/act/Sigmoid_output_0", + "offset": 20070400, + "allocated_nbytes": 2048000, + "live_start": 222, + "live_end": 223 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N223", + "released": [], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/act/Mul_output_0", + "offset": 22118400, + "allocated_nbytes": 2048000, + "live_start": 223, + "live_end": 224 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N224", + "released": [ + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/conv/Conv_output_0", + "offset": 18022400, + "nbytes": 2048000 + }, + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/act/Sigmoid_output_0", + "offset": 20070400, + "nbytes": 2048000 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/conv/Conv_output_0", + "offset": 18022400, + "allocated_nbytes": 2048000, + "live_start": 224, + "live_end": 226 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N225", + "released": [ + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/act/Mul_output_0", + "offset": 22118400, + "nbytes": 2048000 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/act/Sigmoid_output_0", + "offset": 20070400, + "allocated_nbytes": 2048000, + "live_start": 225, + "live_end": 226 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N226", + "released": [], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/act/Mul_output_0", + "offset": 22118400, + "allocated_nbytes": 2048000, + "live_start": 226, + "live_end": 227 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N227", + "released": [ + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/conv/Conv_output_0", + "offset": 18022400, + "nbytes": 2048000 + }, + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/act/Sigmoid_output_0", + "offset": 20070400, + "nbytes": 2048000 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.2/Conv_output_0", + "offset": 18022400, + "allocated_nbytes": 2048000, + "live_start": 227, + "live_end": 228 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N228", + "released": [ + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/act/Mul_output_0", + "offset": 22118400, + "nbytes": 2048000 + } + ], + "allocated": [ + { + "tensor": "/model.23/Concat_output_0", + "offset": 20070400, + "allocated_nbytes": 3686400, + "live_start": 228, + "live_end": 308 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N229", + "released": [ + { + "tensor": "/model.23/one2one_cv2.0/one2one_cv2.0.2/Conv_output_0", + "offset": 13926400, + "nbytes": 1638400 + }, + { + "tensor": "/model.23/one2one_cv3.0/one2one_cv3.0.2/Conv_output_0", + "offset": 18022400, + "nbytes": 2048000 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv2.1/one2one_cv2.1.0/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 409600, + "live_start": 229, + "live_end": 231 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N230", + "released": [], + "allocated": [ + { + "tensor": "/model.23/one2one_cv2.1/one2one_cv2.1.0/act/Sigmoid_output_0", + "offset": 2457600, + "allocated_nbytes": 409600, + "live_start": 230, + "live_end": 231 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N231", + "released": [], + "allocated": [ + { + "tensor": "/model.23/one2one_cv2.1/one2one_cv2.1.0/act/Mul_output_0", + "offset": 4915200, + "allocated_nbytes": 409600, + "live_start": 231, + "live_end": 232 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N232", + "released": [ + { + "tensor": "/model.23/one2one_cv2.1/one2one_cv2.1.0/conv/Conv_output_0", + "offset": 0, + "nbytes": 409600 + }, + { + "tensor": "/model.23/one2one_cv2.1/one2one_cv2.1.0/act/Sigmoid_output_0", + "offset": 2457600, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv2.1/one2one_cv2.1.1/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 409600, + "live_start": 232, + "live_end": 234 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N233", + "released": [ + { + "tensor": "/model.23/one2one_cv2.1/one2one_cv2.1.0/act/Mul_output_0", + "offset": 4915200, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv2.1/one2one_cv2.1.1/act/Sigmoid_output_0", + "offset": 2457600, + "allocated_nbytes": 409600, + "live_start": 233, + "live_end": 234 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N234", + "released": [], + "allocated": [ + { + "tensor": "/model.23/one2one_cv2.1/one2one_cv2.1.1/act/Mul_output_0", + "offset": 4915200, + "allocated_nbytes": 409600, + "live_start": 234, + "live_end": 235 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N235", + "released": [ + { + "tensor": "/model.23/one2one_cv2.1/one2one_cv2.1.1/conv/Conv_output_0", + "offset": 0, + "nbytes": 409600 + }, + { + "tensor": "/model.23/one2one_cv2.1/one2one_cv2.1.1/act/Sigmoid_output_0", + "offset": 2457600, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv2.1/one2one_cv2.1.2/Conv_output_0", + "offset": 0, + "allocated_nbytes": 409600, + "live_start": 235, + "live_end": 249 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N236", + "released": [ + { + "tensor": "/model.23/one2one_cv2.1/one2one_cv2.1.1/act/Mul_output_0", + "offset": 4915200, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/conv/Conv_output_0", + "offset": 4915200, + "allocated_nbytes": 819200, + "live_start": 236, + "live_end": 238 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N237", + "released": [], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/act/Sigmoid_output_0", + "offset": 13926400, + "allocated_nbytes": 819200, + "live_start": 237, + "live_end": 238 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N238", + "released": [], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/act/Mul_output_0", + "offset": 14745600, + "allocated_nbytes": 819200, + "live_start": 238, + "live_end": 239 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N239", + "released": [ + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/conv/Conv_output_0", + "offset": 4915200, + "nbytes": 819200 + }, + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/act/Sigmoid_output_0", + "offset": 13926400, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/conv/Conv_output_0", + "offset": 4915200, + "allocated_nbytes": 512000, + "live_start": 239, + "live_end": 241 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N240", + "released": [ + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/act/Mul_output_0", + "offset": 14745600, + "nbytes": 819200 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/act/Sigmoid_output_0", + "offset": 13926400, + "allocated_nbytes": 512000, + "live_start": 240, + "live_end": 241 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N241", + "released": [], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/act/Mul_output_0", + "offset": 14438400, + "allocated_nbytes": 512000, + "live_start": 241, + "live_end": 242 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N242", + "released": [ + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/conv/Conv_output_0", + "offset": 4915200, + "nbytes": 512000 + }, + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/act/Sigmoid_output_0", + "offset": 13926400, + "nbytes": 512000 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/conv/Conv_output_0", + "offset": 4915200, + "allocated_nbytes": 512000, + "live_start": 242, + "live_end": 244 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N243", + "released": [ + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/act/Mul_output_0", + "offset": 14438400, + "nbytes": 512000 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/act/Sigmoid_output_0", + "offset": 13926400, + "allocated_nbytes": 512000, + "live_start": 243, + "live_end": 244 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N244", + "released": [], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/act/Mul_output_0", + "offset": 14438400, + "allocated_nbytes": 512000, + "live_start": 244, + "live_end": 245 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N245", + "released": [ + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/conv/Conv_output_0", + "offset": 4915200, + "nbytes": 512000 + }, + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/act/Sigmoid_output_0", + "offset": 13926400, + "nbytes": 512000 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/conv/Conv_output_0", + "offset": 4915200, + "allocated_nbytes": 512000, + "live_start": 245, + "live_end": 247 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N246", + "released": [ + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/act/Mul_output_0", + "offset": 14438400, + "nbytes": 512000 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/act/Sigmoid_output_0", + "offset": 13926400, + "allocated_nbytes": 512000, + "live_start": 246, + "live_end": 247 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N247", + "released": [], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/act/Mul_output_0", + "offset": 14438400, + "allocated_nbytes": 512000, + "live_start": 247, + "live_end": 248 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N248", + "released": [ + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/conv/Conv_output_0", + "offset": 4915200, + "nbytes": 512000 + }, + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/act/Sigmoid_output_0", + "offset": 13926400, + "nbytes": 512000 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.2/Conv_output_0", + "offset": 4915200, + "allocated_nbytes": 512000, + "live_start": 248, + "live_end": 249 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N249", + "released": [ + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/act/Mul_output_0", + "offset": 14438400, + "nbytes": 512000 + } + ], + "allocated": [ + { + "tensor": "/model.23/Concat_1_output_0", + "offset": 13926400, + "allocated_nbytes": 921600, + "live_start": 249, + "live_end": 308 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N250", + "released": [ + { + "tensor": "/model.23/one2one_cv2.1/one2one_cv2.1.2/Conv_output_0", + "offset": 0, + "nbytes": 409600 + }, + { + "tensor": "/model.23/one2one_cv3.1/one2one_cv3.1.2/Conv_output_0", + "offset": 4915200, + "nbytes": 512000 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv2.2/one2one_cv2.2.0/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 102400, + "live_start": 250, + "live_end": 252 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N251", + "released": [], + "allocated": [ + { + "tensor": "/model.23/one2one_cv2.2/one2one_cv2.2.0/act/Sigmoid_output_0", + "offset": 102400, + "allocated_nbytes": 102400, + "live_start": 251, + "live_end": 252 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N252", + "released": [], + "allocated": [ + { + "tensor": "/model.23/one2one_cv2.2/one2one_cv2.2.0/act/Mul_output_0", + "offset": 204800, + "allocated_nbytes": 102400, + "live_start": 252, + "live_end": 253 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N253", + "released": [ + { + "tensor": "/model.23/one2one_cv2.2/one2one_cv2.2.0/conv/Conv_output_0", + "offset": 0, + "nbytes": 102400 + }, + { + "tensor": "/model.23/one2one_cv2.2/one2one_cv2.2.0/act/Sigmoid_output_0", + "offset": 102400, + "nbytes": 102400 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv2.2/one2one_cv2.2.1/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 102400, + "live_start": 253, + "live_end": 255 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N254", + "released": [ + { + "tensor": "/model.23/one2one_cv2.2/one2one_cv2.2.0/act/Mul_output_0", + "offset": 204800, + "nbytes": 102400 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv2.2/one2one_cv2.2.1/act/Sigmoid_output_0", + "offset": 102400, + "allocated_nbytes": 102400, + "live_start": 254, + "live_end": 255 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N255", + "released": [], + "allocated": [ + { + "tensor": "/model.23/one2one_cv2.2/one2one_cv2.2.1/act/Mul_output_0", + "offset": 204800, + "allocated_nbytes": 102400, + "live_start": 255, + "live_end": 256 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N256", + "released": [ + { + "tensor": "/model.23/one2one_cv2.2/one2one_cv2.2.1/conv/Conv_output_0", + "offset": 0, + "nbytes": 102400 + }, + { + "tensor": "/model.23/one2one_cv2.2/one2one_cv2.2.1/act/Sigmoid_output_0", + "offset": 102400, + "nbytes": 102400 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv2.2/one2one_cv2.2.2/Conv_output_0", + "offset": 0, + "allocated_nbytes": 102400, + "live_start": 256, + "live_end": 270 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N257", + "released": [ + { + "tensor": "/model.23/one2one_cv2.2/one2one_cv2.2.1/act/Mul_output_0", + "offset": 204800, + "nbytes": 102400 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/conv/Conv_output_0", + "offset": 2457600, + "allocated_nbytes": 409600, + "live_start": 257, + "live_end": 259 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N258", + "released": [], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/act/Sigmoid_output_0", + "offset": 4915200, + "allocated_nbytes": 409600, + "live_start": 258, + "live_end": 259 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N259", + "released": [], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/act/Mul_output_0", + "offset": 5324800, + "allocated_nbytes": 409600, + "live_start": 259, + "live_end": 260 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N260", + "released": [ + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/conv/Conv_output_0", + "offset": 2457600, + "nbytes": 409600 + }, + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/act/Sigmoid_output_0", + "offset": 4915200, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/conv/Conv_output_0", + "offset": 102400, + "allocated_nbytes": 128000, + "live_start": 260, + "live_end": 262 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N261", + "released": [ + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/act/Mul_output_0", + "offset": 5324800, + "nbytes": 409600 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/act/Sigmoid_output_0", + "offset": 230400, + "allocated_nbytes": 128000, + "live_start": 261, + "live_end": 262 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N262", + "released": [], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/act/Mul_output_0", + "offset": 2457600, + "allocated_nbytes": 128000, + "live_start": 262, + "live_end": 263 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N263", + "released": [ + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/conv/Conv_output_0", + "offset": 102400, + "nbytes": 128000 + }, + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/act/Sigmoid_output_0", + "offset": 230400, + "nbytes": 128000 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/conv/Conv_output_0", + "offset": 102400, + "allocated_nbytes": 128000, + "live_start": 263, + "live_end": 265 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N264", + "released": [ + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/act/Mul_output_0", + "offset": 2457600, + "nbytes": 128000 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/act/Sigmoid_output_0", + "offset": 230400, + "allocated_nbytes": 128000, + "live_start": 264, + "live_end": 265 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N265", + "released": [], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/act/Mul_output_0", + "offset": 2457600, + "allocated_nbytes": 128000, + "live_start": 265, + "live_end": 266 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N266", + "released": [ + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/conv/Conv_output_0", + "offset": 102400, + "nbytes": 128000 + }, + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/act/Sigmoid_output_0", + "offset": 230400, + "nbytes": 128000 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/conv/Conv_output_0", + "offset": 102400, + "allocated_nbytes": 128000, + "live_start": 266, + "live_end": 268 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N267", + "released": [ + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/act/Mul_output_0", + "offset": 2457600, + "nbytes": 128000 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/act/Sigmoid_output_0", + "offset": 230400, + "allocated_nbytes": 128000, + "live_start": 267, + "live_end": 268 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N268", + "released": [], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/act/Mul_output_0", + "offset": 2457600, + "allocated_nbytes": 128000, + "live_start": 268, + "live_end": 269 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N269", + "released": [ + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/conv/Conv_output_0", + "offset": 102400, + "nbytes": 128000 + }, + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/act/Sigmoid_output_0", + "offset": 230400, + "nbytes": 128000 + } + ], + "allocated": [ + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.2/Conv_output_0", + "offset": 102400, + "allocated_nbytes": 128000, + "live_start": 269, + "live_end": 270 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N270", + "released": [ + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/act/Mul_output_0", + "offset": 2457600, + "nbytes": 128000 + } + ], + "allocated": [ + { + "tensor": "/model.23/Concat_2_output_0", + "offset": 2457600, + "allocated_nbytes": 230400, + "live_start": 270, + "live_end": 308 + } + ], + "arena_end": 24576000 + }, + { + "node_id": "N271", + "released": [ + { + "tensor": "/model.23/one2one_cv2.2/one2one_cv2.2.2/Conv_output_0", + "offset": 0, + "nbytes": 102400 + }, + { + "tensor": "/model.23/one2one_cv3.2/one2one_cv3.2.2/Conv_output_0", + "offset": 102400, + "nbytes": 128000 + } + ], + "allocated": [ + { + "tensor": "/model.23/Reshape_output_0", + "offset": 24576000, + "allocated_nbytes": 3686400, + "live_start": 271, + "live_end": 274 + } + ], + "arena_end": 28262400 + }, + { + "node_id": "N272", + "released": [], + "allocated": [ + { + "tensor": "/model.23/Reshape_1_output_0", + "offset": 14848000, + "allocated_nbytes": 921600, + "live_start": 272, + "live_end": 274 + } + ], + "arena_end": 28262400 + }, + { + "node_id": "N273", + "released": [], + "allocated": [ + { + "tensor": "/model.23/Reshape_2_output_0", + "offset": 0, + "allocated_nbytes": 230400, + "live_start": 273, + "live_end": 274 + } + ], + "arena_end": 28262400 + }, + { + "node_id": "N274", + "released": [], + "allocated": [ + { + "tensor": "/model.23/Concat_3_output_0", + "offset": 28262400, + "allocated_nbytes": 4838400, + "live_start": 274, + "live_end": 275 + } + ], + "arena_end": 33100800 + }, + { + "node_id": "N275", + "released": [ + { + "tensor": "/model.23/Reshape_output_0", + "offset": 24576000, + "nbytes": 3686400 + }, + { + "tensor": "/model.23/Reshape_1_output_0", + "offset": 14848000, + "nbytes": 921600 + }, + { + "tensor": "/model.23/Reshape_2_output_0", + "offset": 0, + "nbytes": 230400 + } + ], + "allocated": [ + { + "tensor": "/model.23/Split_output_0", + "offset": 23756800, + "allocated_nbytes": 2150400, + "live_start": 275, + "live_end": 276 + }, + { + "tensor": "/model.23/Split_output_1", + "offset": 33100800, + "allocated_nbytes": 2688000, + "live_start": 275, + "live_end": 286 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N276", + "released": [ + { + "tensor": "/model.23/Concat_3_output_0", + "offset": 28262400, + "nbytes": 4838400 + } + ], + "allocated": [ + { + "tensor": "/model.23/dfl/Reshape_output_0", + "offset": 25907200, + "allocated_nbytes": 2150400, + "live_start": 276, + "live_end": 277 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N277", + "released": [ + { + "tensor": "/model.23/Split_output_0", + "offset": 23756800, + "nbytes": 2150400 + } + ], + "allocated": [ + { + "tensor": "/model.23/dfl/Transpose_output_0", + "offset": 23756800, + "allocated_nbytes": 2150400, + "live_start": 277, + "live_end": 278 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N278", + "released": [ + { + "tensor": "/model.23/dfl/Reshape_output_0", + "offset": 25907200, + "nbytes": 2150400 + } + ], + "allocated": [ + { + "tensor": "/model.23/dfl/Softmax_output_0", + "offset": 25907200, + "allocated_nbytes": 2150400, + "live_start": 278, + "live_end": 279 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N279", + "released": [ + { + "tensor": "/model.23/dfl/Transpose_output_0", + "offset": 23756800, + "nbytes": 2150400 + } + ], + "allocated": [ + { + "tensor": "/model.23/dfl/conv/Conv_output_0", + "offset": 0, + "allocated_nbytes": 134400, + "live_start": 279, + "live_end": 280 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N280", + "released": [ + { + "tensor": "/model.23/dfl/Softmax_output_0", + "offset": 25907200, + "nbytes": 2150400 + } + ], + "allocated": [ + { + "tensor": "/model.23/dfl/Reshape_1_output_0", + "offset": 134400, + "allocated_nbytes": 134400, + "live_start": 280, + "live_end": 281 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N281", + "released": [ + { + "tensor": "/model.23/dfl/conv/Conv_output_0", + "offset": 0, + "nbytes": 134400 + } + ], + "allocated": [ + { + "tensor": "/model.23/Split_1_output_0", + "offset": 0, + "allocated_nbytes": 67200, + "live_start": 281, + "live_end": 282 + }, + { + "tensor": "/model.23/Split_1_output_1", + "offset": 67200, + "allocated_nbytes": 67200, + "live_start": 281, + "live_end": 283 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N282", + "released": [ + { + "tensor": "/model.23/dfl/Reshape_1_output_0", + "offset": 134400, + "nbytes": 134400 + } + ], + "allocated": [ + { + "tensor": "/model.23/Sub_output_0", + "offset": 134400, + "allocated_nbytes": 67200, + "live_start": 282, + "live_end": 284 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N283", + "released": [ + { + "tensor": "/model.23/Split_1_output_0", + "offset": 0, + "nbytes": 67200 + } + ], + "allocated": [ + { + "tensor": "/model.23/Add_output_0", + "offset": 0, + "allocated_nbytes": 67200, + "live_start": 283, + "live_end": 284 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N284", + "released": [ + { + "tensor": "/model.23/Split_1_output_1", + "offset": 67200, + "nbytes": 67200 + } + ], + "allocated": [ + { + "tensor": "/model.23/Concat_4_output_0", + "offset": 201600, + "allocated_nbytes": 134400, + "live_start": 284, + "live_end": 285 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N285", + "released": [ + { + "tensor": "/model.23/Sub_output_0", + "offset": 134400, + "nbytes": 67200 + }, + { + "tensor": "/model.23/Add_output_0", + "offset": 0, + "nbytes": 67200 + } + ], + "allocated": [ + { + "tensor": "/model.23/Mul_output_0", + "offset": 0, + "allocated_nbytes": 134400, + "live_start": 285, + "live_end": 287 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N286", + "released": [ + { + "tensor": "/model.23/Concat_4_output_0", + "offset": 201600, + "nbytes": 134400 + } + ], + "allocated": [ + { + "tensor": "/model.23/Sigmoid_output_0", + "offset": 23756800, + "allocated_nbytes": 2688000, + "live_start": 286, + "live_end": 287 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N287", + "released": [ + { + "tensor": "/model.23/Split_output_1", + "offset": 33100800, + "nbytes": 2688000 + } + ], + "allocated": [ + { + "tensor": "/model.23/Concat_5_output_0", + "offset": 26444800, + "allocated_nbytes": 2822400, + "live_start": 287, + "live_end": 288 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N288", + "released": [ + { + "tensor": "/model.23/Mul_output_0", + "offset": 0, + "nbytes": 134400 + }, + { + "tensor": "/model.23/Sigmoid_output_0", + "offset": 23756800, + "nbytes": 2688000 + } + ], + "allocated": [ + { + "tensor": "/model.23/Transpose_output_0", + "offset": 29267200, + "allocated_nbytes": 2822400, + "live_start": 288, + "live_end": 308 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N289", + "released": [ + { + "tensor": "/model.23/Concat_5_output_0", + "offset": 26444800, + "nbytes": 2822400 + } + ], + "allocated": [ + { + "tensor": "/model.23/Split_2_output_0", + "offset": 0, + "allocated_nbytes": 134400, + "live_start": 289, + "live_end": 294 + }, + { + "tensor": "/model.23/Split_2_output_1", + "offset": 23756800, + "allocated_nbytes": 2688000, + "live_start": 289, + "live_end": 296 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N290", + "released": [], + "allocated": [ + { + "tensor": "/model.23/ReduceMax_output_0", + "offset": 134400, + "allocated_nbytes": 33600, + "live_start": 290, + "live_end": 291 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N291", + "released": [], + "allocated": [ + { + "tensor": "/model.23/TopK_output_0", + "offset": 168000, + "allocated_nbytes": 1216, + "live_start": 291, + "live_end": 291 + }, + { + "tensor": "/model.23/TopK_output_1", + "offset": 169216, + "allocated_nbytes": 2432, + "live_start": 291, + "live_end": 292 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N292", + "released": [ + { + "tensor": "/model.23/ReduceMax_output_0", + "offset": 134400, + "nbytes": 33600 + }, + { + "tensor": "/model.23/TopK_output_0", + "offset": 168000, + "nbytes": 1216 + } + ], + "allocated": [ + { + "tensor": "/model.23/Unsqueeze_output_0", + "offset": 134400, + "allocated_nbytes": 2432, + "live_start": 292, + "live_end": 295 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N293", + "released": [ + { + "tensor": "/model.23/TopK_output_1", + "offset": 169216, + "nbytes": 2432 + } + ], + "allocated": [ + { + "tensor": "/model.23/Tile_output_0", + "offset": 136832, + "allocated_nbytes": 9600, + "live_start": 293, + "live_end": 294 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N294", + "released": [], + "allocated": [ + { + "tensor": "/model.23/GatherElements_output_0", + "offset": 146432, + "allocated_nbytes": 4800, + "live_start": 294, + "live_end": 303 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N295", + "released": [ + { + "tensor": "/model.23/Split_2_output_0", + "offset": 0, + "nbytes": 134400 + }, + { + "tensor": "/model.23/Tile_output_0", + "offset": 136832, + "nbytes": 9600 + } + ], + "allocated": [ + { + "tensor": "/model.23/Tile_1_output_0", + "offset": 151232, + "allocated_nbytes": 192000, + "live_start": 295, + "live_end": 296 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N296", + "released": [ + { + "tensor": "/model.23/Unsqueeze_output_0", + "offset": 134400, + "nbytes": 2432 + } + ], + "allocated": [ + { + "tensor": "/model.23/GatherElements_1_output_0", + "offset": 0, + "allocated_nbytes": 96000, + "live_start": 296, + "live_end": 297 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N297", + "released": [ + { + "tensor": "/model.23/Split_2_output_1", + "offset": 23756800, + "nbytes": 2688000 + }, + { + "tensor": "/model.23/Tile_1_output_0", + "offset": 151232, + "nbytes": 192000 + } + ], + "allocated": [ + { + "tensor": "/model.23/Flatten_output_0", + "offset": 151232, + "allocated_nbytes": 96000, + "live_start": 297, + "live_end": 298 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N298", + "released": [ + { + "tensor": "/model.23/GatherElements_1_output_0", + "offset": 0, + "nbytes": 96000 + } + ], + "allocated": [ + { + "tensor": "/model.23/TopK_1_output_0", + "offset": 0, + "allocated_nbytes": 1216, + "live_start": 298, + "live_end": 304 + }, + { + "tensor": "/model.23/TopK_1_output_1", + "offset": 1216, + "allocated_nbytes": 2432, + "live_start": 298, + "live_end": 300 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N299", + "released": [ + { + "tensor": "/model.23/Flatten_output_0", + "offset": 151232, + "nbytes": 96000 + } + ], + "allocated": [ + { + "tensor": "/model.23/Mod_output_0", + "offset": 3648, + "allocated_nbytes": 2432, + "live_start": 299, + "live_end": 305 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N300", + "released": [], + "allocated": [ + { + "tensor": "/model.23/Div_output_0", + "offset": 6080, + "allocated_nbytes": 2432, + "live_start": 300, + "live_end": 301 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N301", + "released": [ + { + "tensor": "/model.23/TopK_1_output_1", + "offset": 1216, + "nbytes": 2432 + } + ], + "allocated": [ + { + "tensor": "/model.23/Unsqueeze_1_output_0", + "offset": 1216, + "allocated_nbytes": 2432, + "live_start": 301, + "live_end": 302 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N302", + "released": [ + { + "tensor": "/model.23/Div_output_0", + "offset": 6080, + "nbytes": 2432 + } + ], + "allocated": [ + { + "tensor": "/model.23/Tile_2_output_0", + "offset": 6080, + "allocated_nbytes": 9600, + "live_start": 302, + "live_end": 303 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N303", + "released": [ + { + "tensor": "/model.23/Unsqueeze_1_output_0", + "offset": 1216, + "nbytes": 2432 + } + ], + "allocated": [ + { + "tensor": "/model.23/GatherElements_2_output_0", + "offset": 15680, + "allocated_nbytes": 4800, + "live_start": 303, + "live_end": 307 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N304", + "released": [ + { + "tensor": "/model.23/GatherElements_output_0", + "offset": 146432, + "nbytes": 4800 + }, + { + "tensor": "/model.23/Tile_2_output_0", + "offset": 6080, + "nbytes": 9600 + } + ], + "allocated": [ + { + "tensor": "/model.23/Unsqueeze_2_output_0", + "offset": 1216, + "allocated_nbytes": 1216, + "live_start": 304, + "live_end": 307 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N305", + "released": [ + { + "tensor": "/model.23/TopK_1_output_0", + "offset": 0, + "nbytes": 1216 + } + ], + "allocated": [ + { + "tensor": "/model.23/Unsqueeze_3_output_0", + "offset": 6080, + "allocated_nbytes": 2432, + "live_start": 305, + "live_end": 306 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N306", + "released": [ + { + "tensor": "/model.23/Mod_output_0", + "offset": 3648, + "nbytes": 2432 + } + ], + "allocated": [ + { + "tensor": "/model.23/Cast_2_output_0", + "offset": 0, + "allocated_nbytes": 1216, + "live_start": 306, + "live_end": 307 + } + ], + "arena_end": 35788800 + }, + { + "node_id": "N307", + "released": [ + { + "tensor": "/model.23/Unsqueeze_3_output_0", + "offset": 6080, + "nbytes": 2432 + } + ], + "allocated": [ + { + "tensor": "output0", + "offset": 2432, + "allocated_nbytes": 7232, + "live_start": 307, + "live_end": 308 + } + ], + "arena_end": 35788800 + } + ] + }, + "generated": { + "header": { + "path": "slice_manifest.h", + "nbytes": 92881, + "sha256": "79be5b751842df025a3612ebb690e283813ea9ac8e373fd1bc44b706ca7a2a7e" + } + }, + "blobs": { + "inputs": { + "path": "inputs.bin", + "nbytes": 4915200, + "sha256": "2694a921b32412538688a3828855dddd940b35e91d0dbbb2bbd1b0b32559b7a0" + }, + "weights": { + "path": "weights.bin", + "nbytes": 9299136, + "sha256": "b6d5aa13ef3238328c19ff0f646f72841bcf44dc1651383d089f0d57e37cf850" + }, + "goldens": { + "path": "goldens.bin", + "nbytes": 21594432, + "sha256": "ca671b4fbe39c37bc95091e00e3272babd994e9c319e502f954f7017bed90eff" + } + }, + "memory_map": { + "result_device_offset": 0, + "input_device_offset": 36306944, + "weight_device_offset": 41222144, + "pmc_device_offset": 35848192, + "pmc_stage_stride": 65536, + "pmc_stage_count": 7, + "workspace_bytes": 35788800, + "input_blob_bytes": 4915200, + "weight_blob_bytes": 9299136, + "dump_size": 36306944, + "mem_size": 50528256 + }, + "result": { + "magic": "YRF1", + "header_bytes": 4096, + "workspace_offset_within_dump": 4096, + "output_tensor": "output0", + "pmc_scope": "seven disjoint begin/end intervals around only ONNX nodes" + }, + "tolerances": { + "atol": 5e-05, + "rtol": 0.0001, + "comparison": "abs(actual-reference) <= atol + rtol*abs(reference)", + "checkpoint_overrides": { + "N288": { + "atol": 0.0002, + "rtol": 0.0001, + "rationale": "DFL decode accumulates scalar FP32 head and softmax differences; this covers measured near-zero coordinate error without loosening the score or final-output gate" + } + } + } +} diff --git a/ported_models/yolov10n_hf_reference/manifests/graph_inventory.json b/ported_models/yolov10n_hf_reference/manifests/graph_inventory.json new file mode 100644 index 00000000..32c1e935 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/manifests/graph_inventory.json @@ -0,0 +1,17737 @@ +{ + "schema_version": 1, + "source": { + "repo": "onnx-community/yolov10n", + "revision": "57657320425ee34056408a57ad9d29c4d4815bd8", + "filename": "onnx/model.onnx", + "sha256": "a77dd863933f184a19e84361c64b788228a7c7dacc2c78939239a96ad3efca3b", + "license": "AGPL-3.0" + }, + "model": { + "ir_version": 7, + "producer_name": "pytorch", + "producer_version": "2.3.0", + "domain": "", + "model_version": 0, + "opsets": { + "ai.onnx": 13 + }, + "inputs": [ + { + "name": "images", + "dtype": "FLOAT", + "shape": [ + 1, + 3, + 640, + 640 + ] + } + ], + "outputs": [ + { + "name": "output0", + "dtype": "FLOAT", + "shape": [ + 1, + 300, + 6 + ] + } + ], + "node_count": 308, + "initializer_count": 187, + "operator_counts": { + "Add": 11, + "Cast": 1, + "Concat": 21, + "Conv": 83, + "Div": 1, + "Flatten": 1, + "GatherElements": 3, + "MatMul": 2, + "MaxPool": 3, + "Mod": 1, + "Mul": 71, + "ReduceMax": 1, + "Reshape": 8, + "Resize": 2, + "Sigmoid": 70, + "Softmax": 2, + "Split": 13, + "Sub": 1, + "Tile": 3, + "TopK": 2, + "Transpose": 4, + "Unsqueeze": 4 + } + }, + "checks": [ + { + "name": "sha256", + "expected": "a77dd863933f184a19e84361c64b788228a7c7dacc2c78939239a96ad3efca3b", + "actual": "a77dd863933f184a19e84361c64b788228a7c7dacc2c78939239a96ad3efca3b", + "pass": true + }, + { + "name": "opset_ai_onnx", + "expected": 13, + "actual": 13, + "pass": true + }, + { + "name": "sole_opset_import", + "expected": { + "ai.onnx": 13 + }, + "actual": { + "ai.onnx": 13 + }, + "pass": true + }, + { + "name": "input", + "expected": [ + { + "name": "images", + "dtype": "FLOAT", + "shape": [ + 1, + 3, + 640, + 640 + ] + } + ], + "actual": [ + { + "name": "images", + "dtype": "FLOAT", + "shape": [ + 1, + 3, + 640, + 640 + ] + } + ], + "pass": true + }, + { + "name": "output", + "expected": [ + { + "name": "output0", + "dtype": "FLOAT", + "shape": [ + 1, + 300, + 6 + ] + } + ], + "actual": [ + { + "name": "output0", + "dtype": "FLOAT", + "shape": [ + 1, + 300, + 6 + ] + } + ], + "pass": true + }, + { + "name": "node_count", + "expected": 308, + "actual": 308, + "pass": true + }, + { + "name": "initializer_count", + "expected": 187, + "actual": 187, + "pass": true + }, + { + "name": "operator_histogram", + "expected": { + "Add": 11, + "Cast": 1, + "Concat": 21, + "Conv": 83, + "Div": 1, + "Flatten": 1, + "GatherElements": 3, + "MatMul": 2, + "MaxPool": 3, + "Mod": 1, + "Mul": 71, + "ReduceMax": 1, + "Reshape": 8, + "Resize": 2, + "Sigmoid": 70, + "Softmax": 2, + "Split": 13, + "Sub": 1, + "Tile": 3, + "TopK": 2, + "Transpose": 4, + "Unsqueeze": 4 + }, + "actual": { + "Add": 11, + "Cast": 1, + "Concat": 21, + "Conv": 83, + "Div": 1, + "Flatten": 1, + "GatherElements": 3, + "MatMul": 2, + "MaxPool": 3, + "Mod": 1, + "Mul": 71, + "ReduceMax": 1, + "Reshape": 8, + "Resize": 2, + "Sigmoid": 70, + "Softmax": 2, + "Split": 13, + "Sub": 1, + "Tile": 3, + "TopK": 2, + "Transpose": 4, + "Unsqueeze": 4 + }, + "pass": true + }, + { + "name": "terminal_topk", + "expected": "TopK in final 40 nodes", + "actual": [ + "Mul", + "Conv", + "Concat", + "Reshape", + "Reshape", + "Reshape", + "Concat", + "Split", + "Reshape", + "Transpose", + "Softmax", + "Conv", + "Reshape", + "Split", + "Sub", + "Add", + "Concat", + "Mul", + "Sigmoid", + "Concat", + "Transpose", + "Split", + "ReduceMax", + "TopK", + "Unsqueeze", + "Tile", + "GatherElements", + "Tile", + "GatherElements", + "Flatten", + "TopK", + "Mod", + "Div", + "Unsqueeze", + "Tile", + "GatherElements", + "Unsqueeze", + "Unsqueeze", + "Cast", + "Concat" + ], + "pass": true + }, + { + "name": "terminal_gather_elements", + "expected": "GatherElements in final 40 nodes", + "actual": [ + "Mul", + "Conv", + "Concat", + "Reshape", + "Reshape", + "Reshape", + "Concat", + "Split", + "Reshape", + "Transpose", + "Softmax", + "Conv", + "Reshape", + "Split", + "Sub", + "Add", + "Concat", + "Mul", + "Sigmoid", + "Concat", + "Transpose", + "Split", + "ReduceMax", + "TopK", + "Unsqueeze", + "Tile", + "GatherElements", + "Tile", + "GatherElements", + "Flatten", + "TopK", + "Mod", + "Div", + "Unsqueeze", + "Tile", + "GatherElements", + "Unsqueeze", + "Unsqueeze", + "Cast", + "Concat" + ], + "pass": true + }, + { + "name": "terminal_selection_path", + "expected": [ + [ + "N291", + "TopK" + ], + [ + "N294", + "GatherElements" + ], + [ + "N296", + "GatherElements" + ], + [ + "N298", + "TopK" + ], + [ + "N303", + "GatherElements" + ] + ], + "actual": [ + [ + "N291", + "TopK" + ], + [ + "N294", + "GatherElements" + ], + [ + "N296", + "GatherElements" + ], + [ + "N298", + "TopK" + ], + [ + "N303", + "GatherElements" + ] + ], + "pass": true + } + ], + "nodes": [ + { + "node_id": "N000", + "layer_id": "L000", + "op_id": "conv_000", + "index": 0, + "name": "/model.0/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "images", + "dtype": "FLOAT", + "shape": [ + 1, + 3, + 640, + 640 + ] + }, + { + "name": "model.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 16, + 3, + 3, + 3 + ] + }, + { + "name": "model.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 16 + ] + } + ], + "outputs": [ + { + "name": "/model.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 320, + 320 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 2, + 2 + ] + } + }, + { + "node_id": "N001", + "layer_id": "L001", + "op_id": "sigmoid_000", + "index": 1, + "name": "/model.0/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 320, + 320 + ] + } + ], + "outputs": [ + { + "name": "/model.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 320, + 320 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N002", + "layer_id": "L002", + "op_id": "mul_000", + "index": 2, + "name": "/model.0/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 320, + 320 + ] + }, + { + "name": "/model.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 320, + 320 + ] + } + ], + "outputs": [ + { + "name": "/model.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 320, + 320 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N003", + "layer_id": "L003", + "op_id": "conv_001", + "index": 3, + "name": "/model.1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 320, + 320 + ] + }, + { + "name": "model.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 16, + 3, + 3 + ] + }, + { + "name": "model.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ] + } + ], + "outputs": [ + { + "name": "/model.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 2, + 2 + ] + } + }, + { + "node_id": "N004", + "layer_id": "L004", + "op_id": "sigmoid_001", + "index": 4, + "name": "/model.1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ] + } + ], + "outputs": [ + { + "name": "/model.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N005", + "layer_id": "L005", + "op_id": "mul_001", + "index": 5, + "name": "/model.1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ] + }, + { + "name": "/model.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ] + } + ], + "outputs": [ + { + "name": "/model.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N006", + "layer_id": "L006", + "op_id": "conv_002", + "index": 6, + "name": "/model.2/cv1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ] + }, + { + "name": "model.2.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 32, + 1, + 1 + ] + }, + { + "name": "model.2.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ] + } + ], + "outputs": [ + { + "name": "/model.2/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N007", + "layer_id": "L007", + "op_id": "sigmoid_002", + "index": 7, + "name": "/model.2/cv1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.2/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ] + } + ], + "outputs": [ + { + "name": "/model.2/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N008", + "layer_id": "L008", + "op_id": "mul_002", + "index": 8, + "name": "/model.2/cv1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.2/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ] + }, + { + "name": "/model.2/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ] + } + ], + "outputs": [ + { + "name": "/model.2/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N009", + "layer_id": "L009", + "op_id": "split_000", + "index": 9, + "name": "/model.2/Split", + "domain": "ai.onnx", + "op_type": "Split", + "inputs": [ + { + "name": "/model.2/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ] + }, + { + "name": "onnx::Split_225", + "dtype": "INT64", + "shape": [ + 2 + ] + } + ], + "outputs": [ + { + "name": "/model.2/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ] + }, + { + "name": "/model.2/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N010", + "layer_id": "L010", + "op_id": "conv_003", + "index": 10, + "name": "/model.2/m.0/cv1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.2/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ] + }, + { + "name": "model.2.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 16, + 16, + 3, + 3 + ] + }, + { + "name": "model.2.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 16 + ] + } + ], + "outputs": [ + { + "name": "/model.2/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N011", + "layer_id": "L011", + "op_id": "sigmoid_003", + "index": 11, + "name": "/model.2/m.0/cv1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.2/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ] + } + ], + "outputs": [ + { + "name": "/model.2/m.0/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N012", + "layer_id": "L012", + "op_id": "mul_003", + "index": 12, + "name": "/model.2/m.0/cv1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.2/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ] + }, + { + "name": "/model.2/m.0/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ] + } + ], + "outputs": [ + { + "name": "/model.2/m.0/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N013", + "layer_id": "L013", + "op_id": "conv_004", + "index": 13, + "name": "/model.2/m.0/cv2/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.2/m.0/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ] + }, + { + "name": "model.2.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 16, + 16, + 3, + 3 + ] + }, + { + "name": "model.2.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 16 + ] + } + ], + "outputs": [ + { + "name": "/model.2/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N014", + "layer_id": "L014", + "op_id": "sigmoid_004", + "index": 14, + "name": "/model.2/m.0/cv2/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.2/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ] + } + ], + "outputs": [ + { + "name": "/model.2/m.0/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N015", + "layer_id": "L015", + "op_id": "mul_004", + "index": 15, + "name": "/model.2/m.0/cv2/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.2/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ] + }, + { + "name": "/model.2/m.0/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ] + } + ], + "outputs": [ + { + "name": "/model.2/m.0/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N016", + "layer_id": "L016", + "op_id": "add_000", + "index": 16, + "name": "/model.2/m.0/Add", + "domain": "ai.onnx", + "op_type": "Add", + "inputs": [ + { + "name": "/model.2/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ] + }, + { + "name": "/model.2/m.0/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ] + } + ], + "outputs": [ + { + "name": "/model.2/m.0/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N017", + "layer_id": "L017", + "op_id": "concat_000", + "index": 17, + "name": "/model.2/Concat", + "domain": "ai.onnx", + "op_type": "Concat", + "inputs": [ + { + "name": "/model.2/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ] + }, + { + "name": "/model.2/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ] + }, + { + "name": "/model.2/m.0/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 160, + 160 + ] + } + ], + "outputs": [ + { + "name": "/model.2/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 48, + 160, + 160 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N018", + "layer_id": "L018", + "op_id": "conv_005", + "index": 18, + "name": "/model.2/cv2/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.2/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 48, + 160, + 160 + ] + }, + { + "name": "model.2.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 48, + 1, + 1 + ] + }, + { + "name": "model.2.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ] + } + ], + "outputs": [ + { + "name": "/model.2/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N019", + "layer_id": "L019", + "op_id": "sigmoid_005", + "index": 19, + "name": "/model.2/cv2/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.2/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ] + } + ], + "outputs": [ + { + "name": "/model.2/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N020", + "layer_id": "L020", + "op_id": "mul_005", + "index": 20, + "name": "/model.2/cv2/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.2/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ] + }, + { + "name": "/model.2/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ] + } + ], + "outputs": [ + { + "name": "/model.2/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N021", + "layer_id": "L021", + "op_id": "conv_006", + "index": 21, + "name": "/model.3/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.2/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 160, + 160 + ] + }, + { + "name": "model.3.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 32, + 3, + 3 + ] + }, + { + "name": "model.3.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ] + } + ], + "outputs": [ + { + "name": "/model.3/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 2, + 2 + ] + } + }, + { + "node_id": "N022", + "layer_id": "L022", + "op_id": "sigmoid_006", + "index": 22, + "name": "/model.3/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.3/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.3/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N023", + "layer_id": "L023", + "op_id": "mul_006", + "index": 23, + "name": "/model.3/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.3/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + }, + { + "name": "/model.3/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.3/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N024", + "layer_id": "L024", + "op_id": "conv_007", + "index": 24, + "name": "/model.4/cv1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.3/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + }, + { + "name": "model.4.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 1, + 1 + ] + }, + { + "name": "model.4.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ] + } + ], + "outputs": [ + { + "name": "/model.4/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N025", + "layer_id": "L025", + "op_id": "sigmoid_007", + "index": 25, + "name": "/model.4/cv1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.4/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.4/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N026", + "layer_id": "L026", + "op_id": "mul_007", + "index": 26, + "name": "/model.4/cv1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.4/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + }, + { + "name": "/model.4/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.4/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N027", + "layer_id": "L027", + "op_id": "split_001", + "index": 27, + "name": "/model.4/Split", + "domain": "ai.onnx", + "op_type": "Split", + "inputs": [ + { + "name": "/model.4/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + }, + { + "name": "onnx::Split_245", + "dtype": "INT64", + "shape": [ + 2 + ] + } + ], + "outputs": [ + { + "name": "/model.4/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + }, + { + "name": "/model.4/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N028", + "layer_id": "L028", + "op_id": "conv_008", + "index": 28, + "name": "/model.4/m.0/cv1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.4/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + }, + { + "name": "model.4.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 32, + 3, + 3 + ] + }, + { + "name": "model.4.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ] + } + ], + "outputs": [ + { + "name": "/model.4/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N029", + "layer_id": "L029", + "op_id": "sigmoid_008", + "index": 29, + "name": "/model.4/m.0/cv1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.4/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.4/m.0/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N030", + "layer_id": "L030", + "op_id": "mul_008", + "index": 30, + "name": "/model.4/m.0/cv1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.4/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + }, + { + "name": "/model.4/m.0/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.4/m.0/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N031", + "layer_id": "L031", + "op_id": "conv_009", + "index": 31, + "name": "/model.4/m.0/cv2/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.4/m.0/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + }, + { + "name": "model.4.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 32, + 3, + 3 + ] + }, + { + "name": "model.4.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ] + } + ], + "outputs": [ + { + "name": "/model.4/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N032", + "layer_id": "L032", + "op_id": "sigmoid_009", + "index": 32, + "name": "/model.4/m.0/cv2/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.4/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.4/m.0/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N033", + "layer_id": "L033", + "op_id": "mul_009", + "index": 33, + "name": "/model.4/m.0/cv2/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.4/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + }, + { + "name": "/model.4/m.0/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.4/m.0/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N034", + "layer_id": "L034", + "op_id": "add_001", + "index": 34, + "name": "/model.4/m.0/Add", + "domain": "ai.onnx", + "op_type": "Add", + "inputs": [ + { + "name": "/model.4/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + }, + { + "name": "/model.4/m.0/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.4/m.0/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N035", + "layer_id": "L035", + "op_id": "conv_010", + "index": 35, + "name": "/model.4/m.1/cv1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.4/m.0/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + }, + { + "name": "model.4.m.1.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 32, + 3, + 3 + ] + }, + { + "name": "model.4.m.1.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ] + } + ], + "outputs": [ + { + "name": "/model.4/m.1/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N036", + "layer_id": "L036", + "op_id": "sigmoid_010", + "index": 36, + "name": "/model.4/m.1/cv1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.4/m.1/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.4/m.1/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N037", + "layer_id": "L037", + "op_id": "mul_010", + "index": 37, + "name": "/model.4/m.1/cv1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.4/m.1/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + }, + { + "name": "/model.4/m.1/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.4/m.1/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N038", + "layer_id": "L038", + "op_id": "conv_011", + "index": 38, + "name": "/model.4/m.1/cv2/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.4/m.1/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + }, + { + "name": "model.4.m.1.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 32, + 3, + 3 + ] + }, + { + "name": "model.4.m.1.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ] + } + ], + "outputs": [ + { + "name": "/model.4/m.1/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N039", + "layer_id": "L039", + "op_id": "sigmoid_011", + "index": 39, + "name": "/model.4/m.1/cv2/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.4/m.1/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.4/m.1/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N040", + "layer_id": "L040", + "op_id": "mul_011", + "index": 40, + "name": "/model.4/m.1/cv2/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.4/m.1/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + }, + { + "name": "/model.4/m.1/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.4/m.1/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N041", + "layer_id": "L041", + "op_id": "add_002", + "index": 41, + "name": "/model.4/m.1/Add", + "domain": "ai.onnx", + "op_type": "Add", + "inputs": [ + { + "name": "/model.4/m.0/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + }, + { + "name": "/model.4/m.1/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.4/m.1/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N042", + "layer_id": "L042", + "op_id": "concat_001", + "index": 42, + "name": "/model.4/Concat", + "domain": "ai.onnx", + "op_type": "Concat", + "inputs": [ + { + "name": "/model.4/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + }, + { + "name": "/model.4/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + }, + { + "name": "/model.4/m.0/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + }, + { + "name": "/model.4/m.1/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.4/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 80, + 80 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N043", + "layer_id": "L043", + "op_id": "conv_012", + "index": 43, + "name": "/model.4/cv2/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.4/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 80, + 80 + ] + }, + { + "name": "model.4.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 128, + 1, + 1 + ] + }, + { + "name": "model.4.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ] + } + ], + "outputs": [ + { + "name": "/model.4/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N044", + "layer_id": "L044", + "op_id": "sigmoid_012", + "index": 44, + "name": "/model.4/cv2/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.4/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.4/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N045", + "layer_id": "L045", + "op_id": "mul_012", + "index": 45, + "name": "/model.4/cv2/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.4/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + }, + { + "name": "/model.4/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.4/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N046", + "layer_id": "L046", + "op_id": "conv_013", + "index": 46, + "name": "/model.5/cv1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.4/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + }, + { + "name": "model.5.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 64, + 1, + 1 + ] + }, + { + "name": "model.5.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ] + } + ], + "outputs": [ + { + "name": "/model.5/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 80, + 80 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N047", + "layer_id": "L047", + "op_id": "sigmoid_013", + "index": 47, + "name": "/model.5/cv1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.5/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.5/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N048", + "layer_id": "L048", + "op_id": "mul_013", + "index": 48, + "name": "/model.5/cv1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.5/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 80, + 80 + ] + }, + { + "name": "/model.5/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.5/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N049", + "layer_id": "L049", + "op_id": "conv_014", + "index": 49, + "name": "/model.5/cv2/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.5/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 80, + 80 + ] + }, + { + "name": "model.5.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 1, + 3, + 3 + ] + }, + { + "name": "model.5.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ] + } + ], + "outputs": [ + { + "name": "/model.5/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 128, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 2, + 2 + ] + } + }, + { + "node_id": "N050", + "layer_id": "L050", + "op_id": "conv_015", + "index": 50, + "name": "/model.6/cv1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.5/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + }, + { + "name": "model.6.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 128, + 1, + 1 + ] + }, + { + "name": "model.6.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ] + } + ], + "outputs": [ + { + "name": "/model.6/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N051", + "layer_id": "L051", + "op_id": "sigmoid_014", + "index": 51, + "name": "/model.6/cv1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.6/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.6/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N052", + "layer_id": "L052", + "op_id": "mul_014", + "index": 52, + "name": "/model.6/cv1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.6/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + }, + { + "name": "/model.6/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.6/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N053", + "layer_id": "L053", + "op_id": "split_002", + "index": 53, + "name": "/model.6/Split", + "domain": "ai.onnx", + "op_type": "Split", + "inputs": [ + { + "name": "/model.6/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + }, + { + "name": "onnx::Split_273", + "dtype": "INT64", + "shape": [ + 2 + ] + } + ], + "outputs": [ + { + "name": "/model.6/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.6/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N054", + "layer_id": "L054", + "op_id": "conv_016", + "index": 54, + "name": "/model.6/m.0/cv1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.6/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "model.6.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ] + }, + { + "name": "model.6.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ] + } + ], + "outputs": [ + { + "name": "/model.6/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N055", + "layer_id": "L055", + "op_id": "sigmoid_015", + "index": 55, + "name": "/model.6/m.0/cv1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.6/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.6/m.0/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N056", + "layer_id": "L056", + "op_id": "mul_015", + "index": 56, + "name": "/model.6/m.0/cv1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.6/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.6/m.0/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.6/m.0/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N057", + "layer_id": "L057", + "op_id": "conv_017", + "index": 57, + "name": "/model.6/m.0/cv2/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.6/m.0/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "model.6.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ] + }, + { + "name": "model.6.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ] + } + ], + "outputs": [ + { + "name": "/model.6/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N058", + "layer_id": "L058", + "op_id": "sigmoid_016", + "index": 58, + "name": "/model.6/m.0/cv2/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.6/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.6/m.0/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N059", + "layer_id": "L059", + "op_id": "mul_016", + "index": 59, + "name": "/model.6/m.0/cv2/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.6/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.6/m.0/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.6/m.0/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N060", + "layer_id": "L060", + "op_id": "add_003", + "index": 60, + "name": "/model.6/m.0/Add", + "domain": "ai.onnx", + "op_type": "Add", + "inputs": [ + { + "name": "/model.6/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.6/m.0/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.6/m.0/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N061", + "layer_id": "L061", + "op_id": "conv_018", + "index": 61, + "name": "/model.6/m.1/cv1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.6/m.0/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "model.6.m.1.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ] + }, + { + "name": "model.6.m.1.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ] + } + ], + "outputs": [ + { + "name": "/model.6/m.1/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N062", + "layer_id": "L062", + "op_id": "sigmoid_017", + "index": 62, + "name": "/model.6/m.1/cv1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.6/m.1/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.6/m.1/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N063", + "layer_id": "L063", + "op_id": "mul_017", + "index": 63, + "name": "/model.6/m.1/cv1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.6/m.1/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.6/m.1/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.6/m.1/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N064", + "layer_id": "L064", + "op_id": "conv_019", + "index": 64, + "name": "/model.6/m.1/cv2/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.6/m.1/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "model.6.m.1.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ] + }, + { + "name": "model.6.m.1.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ] + } + ], + "outputs": [ + { + "name": "/model.6/m.1/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N065", + "layer_id": "L065", + "op_id": "sigmoid_018", + "index": 65, + "name": "/model.6/m.1/cv2/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.6/m.1/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.6/m.1/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N066", + "layer_id": "L066", + "op_id": "mul_018", + "index": 66, + "name": "/model.6/m.1/cv2/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.6/m.1/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.6/m.1/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.6/m.1/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N067", + "layer_id": "L067", + "op_id": "add_004", + "index": 67, + "name": "/model.6/m.1/Add", + "domain": "ai.onnx", + "op_type": "Add", + "inputs": [ + { + "name": "/model.6/m.0/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.6/m.1/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.6/m.1/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N068", + "layer_id": "L068", + "op_id": "concat_002", + "index": 68, + "name": "/model.6/Concat", + "domain": "ai.onnx", + "op_type": "Concat", + "inputs": [ + { + "name": "/model.6/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.6/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.6/m.0/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.6/m.1/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.6/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 40, + 40 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N069", + "layer_id": "L069", + "op_id": "conv_020", + "index": 69, + "name": "/model.6/cv2/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.6/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 40, + 40 + ] + }, + { + "name": "model.6.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 256, + 1, + 1 + ] + }, + { + "name": "model.6.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ] + } + ], + "outputs": [ + { + "name": "/model.6/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N070", + "layer_id": "L070", + "op_id": "sigmoid_019", + "index": 70, + "name": "/model.6/cv2/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.6/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.6/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N071", + "layer_id": "L071", + "op_id": "mul_019", + "index": 71, + "name": "/model.6/cv2/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.6/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + }, + { + "name": "/model.6/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.6/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N072", + "layer_id": "L072", + "op_id": "conv_021", + "index": 72, + "name": "/model.7/cv1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.6/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + }, + { + "name": "model.7.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 128, + 1, + 1 + ] + }, + { + "name": "model.7.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ] + } + ], + "outputs": [ + { + "name": "/model.7/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N073", + "layer_id": "L073", + "op_id": "sigmoid_020", + "index": 73, + "name": "/model.7/cv1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.7/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.7/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N074", + "layer_id": "L074", + "op_id": "mul_020", + "index": 74, + "name": "/model.7/cv1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.7/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 40, + 40 + ] + }, + { + "name": "/model.7/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.7/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N075", + "layer_id": "L075", + "op_id": "conv_022", + "index": 75, + "name": "/model.7/cv2/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.7/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 40, + 40 + ] + }, + { + "name": "model.7.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 1, + 3, + 3 + ] + }, + { + "name": "model.7.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ] + } + ], + "outputs": [ + { + "name": "/model.7/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 256, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 2, + 2 + ] + } + }, + { + "node_id": "N076", + "layer_id": "L076", + "op_id": "conv_023", + "index": 76, + "name": "/model.8/cv1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.7/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "model.8.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 256, + 1, + 1 + ] + }, + { + "name": "model.8.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ] + } + ], + "outputs": [ + { + "name": "/model.8/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N077", + "layer_id": "L077", + "op_id": "sigmoid_021", + "index": 77, + "name": "/model.8/cv1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.8/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.8/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N078", + "layer_id": "L078", + "op_id": "mul_021", + "index": 78, + "name": "/model.8/cv1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.8/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "/model.8/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.8/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N079", + "layer_id": "L079", + "op_id": "split_003", + "index": 79, + "name": "/model.8/Split", + "domain": "ai.onnx", + "op_type": "Split", + "inputs": [ + { + "name": "/model.8/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "onnx::Split_301", + "dtype": "INT64", + "shape": [ + 2 + ] + } + ], + "outputs": [ + { + "name": "/model.8/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "/model.8/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N080", + "layer_id": "L080", + "op_id": "conv_024", + "index": 80, + "name": "/model.8/m.0/cv1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.8/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "model.8.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 128, + 3, + 3 + ] + }, + { + "name": "model.8.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ] + } + ], + "outputs": [ + { + "name": "/model.8/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N081", + "layer_id": "L081", + "op_id": "sigmoid_022", + "index": 81, + "name": "/model.8/m.0/cv1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.8/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.8/m.0/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N082", + "layer_id": "L082", + "op_id": "mul_022", + "index": 82, + "name": "/model.8/m.0/cv1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.8/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "/model.8/m.0/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.8/m.0/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N083", + "layer_id": "L083", + "op_id": "conv_025", + "index": 83, + "name": "/model.8/m.0/cv2/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.8/m.0/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "model.8.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 128, + 3, + 3 + ] + }, + { + "name": "model.8.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ] + } + ], + "outputs": [ + { + "name": "/model.8/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N084", + "layer_id": "L084", + "op_id": "sigmoid_023", + "index": 84, + "name": "/model.8/m.0/cv2/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.8/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.8/m.0/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N085", + "layer_id": "L085", + "op_id": "mul_023", + "index": 85, + "name": "/model.8/m.0/cv2/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.8/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "/model.8/m.0/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.8/m.0/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N086", + "layer_id": "L086", + "op_id": "add_005", + "index": 86, + "name": "/model.8/m.0/Add", + "domain": "ai.onnx", + "op_type": "Add", + "inputs": [ + { + "name": "/model.8/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "/model.8/m.0/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.8/m.0/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N087", + "layer_id": "L087", + "op_id": "concat_003", + "index": 87, + "name": "/model.8/Concat", + "domain": "ai.onnx", + "op_type": "Concat", + "inputs": [ + { + "name": "/model.8/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "/model.8/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "/model.8/m.0/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.8/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 384, + 20, + 20 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N088", + "layer_id": "L088", + "op_id": "conv_026", + "index": 88, + "name": "/model.8/cv2/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.8/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 384, + 20, + 20 + ] + }, + { + "name": "model.8.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 384, + 1, + 1 + ] + }, + { + "name": "model.8.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ] + } + ], + "outputs": [ + { + "name": "/model.8/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N089", + "layer_id": "L089", + "op_id": "sigmoid_024", + "index": 89, + "name": "/model.8/cv2/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.8/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.8/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N090", + "layer_id": "L090", + "op_id": "mul_024", + "index": 90, + "name": "/model.8/cv2/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.8/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "/model.8/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.8/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N091", + "layer_id": "L091", + "op_id": "conv_027", + "index": 91, + "name": "/model.9/cv1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.8/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "model.9.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 256, + 1, + 1 + ] + }, + { + "name": "model.9.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ] + } + ], + "outputs": [ + { + "name": "/model.9/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N092", + "layer_id": "L092", + "op_id": "sigmoid_025", + "index": 92, + "name": "/model.9/cv1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.9/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.9/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N093", + "layer_id": "L093", + "op_id": "mul_025", + "index": 93, + "name": "/model.9/cv1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.9/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "/model.9/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.9/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N094", + "layer_id": "L094", + "op_id": "maxpool_000", + "index": 94, + "name": "/model.9/m/MaxPool", + "domain": "ai.onnx", + "op_type": "MaxPool", + "inputs": [ + { + "name": "/model.9/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.9/m/MaxPool_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": { + "ceil_mode": 0, + "dilations": [ + 1, + 1 + ], + "kernel_shape": [ + 5, + 5 + ], + "pads": [ + 2, + 2, + 2, + 2 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N095", + "layer_id": "L095", + "op_id": "maxpool_001", + "index": 95, + "name": "/model.9/m_1/MaxPool", + "domain": "ai.onnx", + "op_type": "MaxPool", + "inputs": [ + { + "name": "/model.9/m/MaxPool_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.9/m_1/MaxPool_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": { + "ceil_mode": 0, + "dilations": [ + 1, + 1 + ], + "kernel_shape": [ + 5, + 5 + ], + "pads": [ + 2, + 2, + 2, + 2 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N096", + "layer_id": "L096", + "op_id": "maxpool_002", + "index": 96, + "name": "/model.9/m_2/MaxPool", + "domain": "ai.onnx", + "op_type": "MaxPool", + "inputs": [ + { + "name": "/model.9/m_1/MaxPool_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.9/m_2/MaxPool_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": { + "ceil_mode": 0, + "dilations": [ + 1, + 1 + ], + "kernel_shape": [ + 5, + 5 + ], + "pads": [ + 2, + 2, + 2, + 2 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N097", + "layer_id": "L097", + "op_id": "concat_004", + "index": 97, + "name": "/model.9/Concat", + "domain": "ai.onnx", + "op_type": "Concat", + "inputs": [ + { + "name": "/model.9/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "/model.9/m/MaxPool_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "/model.9/m_1/MaxPool_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "/model.9/m_2/MaxPool_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.9/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 512, + 20, + 20 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N098", + "layer_id": "L098", + "op_id": "conv_028", + "index": 98, + "name": "/model.9/cv2/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.9/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 512, + 20, + 20 + ] + }, + { + "name": "model.9.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 512, + 1, + 1 + ] + }, + { + "name": "model.9.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ] + } + ], + "outputs": [ + { + "name": "/model.9/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N099", + "layer_id": "L099", + "op_id": "sigmoid_026", + "index": 99, + "name": "/model.9/cv2/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.9/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.9/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N100", + "layer_id": "L100", + "op_id": "mul_026", + "index": 100, + "name": "/model.9/cv2/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.9/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "/model.9/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.9/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N101", + "layer_id": "L101", + "op_id": "conv_029", + "index": 101, + "name": "/model.10/cv1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.9/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "model.10.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 256, + 1, + 1 + ] + }, + { + "name": "model.10.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ] + } + ], + "outputs": [ + { + "name": "/model.10/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N102", + "layer_id": "L102", + "op_id": "sigmoid_027", + "index": 102, + "name": "/model.10/cv1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.10/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.10/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N103", + "layer_id": "L103", + "op_id": "mul_027", + "index": 103, + "name": "/model.10/cv1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.10/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "/model.10/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.10/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N104", + "layer_id": "L104", + "op_id": "split_004", + "index": 104, + "name": "/model.10/Split", + "domain": "ai.onnx", + "op_type": "Split", + "inputs": [ + { + "name": "/model.10/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "onnx::Split_301", + "dtype": "INT64", + "shape": [ + 2 + ] + } + ], + "outputs": [ + { + "name": "/model.10/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "/model.10/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N105", + "layer_id": "L105", + "op_id": "conv_030", + "index": 105, + "name": "/model.10/attn/qkv/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.10/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "model.10.attn.qkv.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 128, + 1, + 1 + ] + }, + { + "name": "model.10.attn.qkv.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ] + } + ], + "outputs": [ + { + "name": "/model.10/attn/qkv/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N106", + "layer_id": "L106", + "op_id": "reshape_000", + "index": 106, + "name": "/model.10/attn/Reshape", + "domain": "ai.onnx", + "op_type": "Reshape", + "inputs": [ + { + "name": "/model.10/attn/qkv/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "/model.10/attn/Constant_output_0", + "dtype": "INT64", + "shape": [ + 4 + ] + } + ], + "outputs": [ + { + "name": "/model.10/attn/Reshape_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 128, + 400 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N107", + "layer_id": "L107", + "op_id": "split_005", + "index": 107, + "name": "/model.10/attn/Split", + "domain": "ai.onnx", + "op_type": "Split", + "inputs": [ + { + "name": "/model.10/attn/Reshape_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 128, + 400 + ] + }, + { + "name": "onnx::Split_347", + "dtype": "INT64", + "shape": [ + 3 + ] + } + ], + "outputs": [ + { + "name": "/model.10/attn/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 32, + 400 + ] + }, + { + "name": "/model.10/attn/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 32, + 400 + ] + }, + { + "name": "/model.10/attn/Split_output_2", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 64, + 400 + ] + } + ], + "attributes": { + "axis": 2 + } + }, + { + "node_id": "N108", + "layer_id": "L108", + "op_id": "transpose_000", + "index": 108, + "name": "/model.10/attn/Transpose", + "domain": "ai.onnx", + "op_type": "Transpose", + "inputs": [ + { + "name": "/model.10/attn/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 32, + 400 + ] + } + ], + "outputs": [ + { + "name": "/model.10/attn/Transpose_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 400, + 32 + ] + } + ], + "attributes": { + "perm": [ + 0, + 1, + 3, + 2 + ] + } + }, + { + "node_id": "N109", + "layer_id": "L109", + "op_id": "matmul_000", + "index": 109, + "name": "/model.10/attn/MatMul", + "domain": "ai.onnx", + "op_type": "MatMul", + "inputs": [ + { + "name": "/model.10/attn/Transpose_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 400, + 32 + ] + }, + { + "name": "/model.10/attn/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 32, + 400 + ] + } + ], + "outputs": [ + { + "name": "/model.10/attn/MatMul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 400, + 400 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N110", + "layer_id": "L110", + "op_id": "mul_028", + "index": 110, + "name": "/model.10/attn/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.10/attn/MatMul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 400, + 400 + ] + }, + { + "name": "/model.10/attn/Constant_1_output_0", + "dtype": "FLOAT", + "shape": [] + } + ], + "outputs": [ + { + "name": "/model.10/attn/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 400, + 400 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N111", + "layer_id": "L111", + "op_id": "softmax_000", + "index": 111, + "name": "/model.10/attn/Softmax", + "domain": "ai.onnx", + "op_type": "Softmax", + "inputs": [ + { + "name": "/model.10/attn/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 400, + 400 + ] + } + ], + "outputs": [ + { + "name": "/model.10/attn/Softmax_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 400, + 400 + ] + } + ], + "attributes": { + "axis": -1 + } + }, + { + "node_id": "N112", + "layer_id": "L112", + "op_id": "transpose_001", + "index": 112, + "name": "/model.10/attn/Transpose_1", + "domain": "ai.onnx", + "op_type": "Transpose", + "inputs": [ + { + "name": "/model.10/attn/Softmax_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 400, + 400 + ] + } + ], + "outputs": [ + { + "name": "/model.10/attn/Transpose_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 400, + 400 + ] + } + ], + "attributes": { + "perm": [ + 0, + 1, + 3, + 2 + ] + } + }, + { + "node_id": "N113", + "layer_id": "L113", + "op_id": "matmul_001", + "index": 113, + "name": "/model.10/attn/MatMul_1", + "domain": "ai.onnx", + "op_type": "MatMul", + "inputs": [ + { + "name": "/model.10/attn/Split_output_2", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 64, + 400 + ] + }, + { + "name": "/model.10/attn/Transpose_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 400, + 400 + ] + } + ], + "outputs": [ + { + "name": "/model.10/attn/MatMul_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 64, + 400 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N114", + "layer_id": "L114", + "op_id": "reshape_001", + "index": 114, + "name": "/model.10/attn/Reshape_1", + "domain": "ai.onnx", + "op_type": "Reshape", + "inputs": [ + { + "name": "/model.10/attn/MatMul_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 64, + 400 + ] + }, + { + "name": "/model.10/attn/Constant_2_output_0", + "dtype": "INT64", + "shape": [ + 4 + ] + } + ], + "outputs": [ + { + "name": "/model.10/attn/Reshape_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N115", + "layer_id": "L115", + "op_id": "reshape_002", + "index": 115, + "name": "/model.10/attn/Reshape_2", + "domain": "ai.onnx", + "op_type": "Reshape", + "inputs": [ + { + "name": "/model.10/attn/Split_output_2", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 64, + 400 + ] + }, + { + "name": "/model.10/attn/Constant_2_output_0", + "dtype": "INT64", + "shape": [ + 4 + ] + } + ], + "outputs": [ + { + "name": "/model.10/attn/Reshape_2_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N116", + "layer_id": "L116", + "op_id": "conv_031", + "index": 116, + "name": "/model.10/attn/pe/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.10/attn/Reshape_2_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "model.10.attn.pe.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 1, + 3, + 3 + ] + }, + { + "name": "model.10.attn.pe.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ] + } + ], + "outputs": [ + { + "name": "/model.10/attn/pe/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 128, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N117", + "layer_id": "L117", + "op_id": "add_006", + "index": 117, + "name": "/model.10/attn/Add", + "domain": "ai.onnx", + "op_type": "Add", + "inputs": [ + { + "name": "/model.10/attn/Reshape_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "/model.10/attn/pe/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.10/attn/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N118", + "layer_id": "L118", + "op_id": "conv_032", + "index": 118, + "name": "/model.10/attn/proj/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.10/attn/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "model.10.attn.proj.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 128, + 1, + 1 + ] + }, + { + "name": "model.10.attn.proj.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ] + } + ], + "outputs": [ + { + "name": "/model.10/attn/proj/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N119", + "layer_id": "L119", + "op_id": "add_007", + "index": 119, + "name": "/model.10/Add", + "domain": "ai.onnx", + "op_type": "Add", + "inputs": [ + { + "name": "/model.10/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "/model.10/attn/proj/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.10/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N120", + "layer_id": "L120", + "op_id": "conv_033", + "index": 120, + "name": "/model.10/ffn/ffn.0/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.10/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "model.10.ffn.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 128, + 1, + 1 + ] + }, + { + "name": "model.10.ffn.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ] + } + ], + "outputs": [ + { + "name": "/model.10/ffn/ffn.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N121", + "layer_id": "L121", + "op_id": "sigmoid_028", + "index": 121, + "name": "/model.10/ffn/ffn.0/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.10/ffn/ffn.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.10/ffn/ffn.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N122", + "layer_id": "L122", + "op_id": "mul_029", + "index": 122, + "name": "/model.10/ffn/ffn.0/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.10/ffn/ffn.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "/model.10/ffn/ffn.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.10/ffn/ffn.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N123", + "layer_id": "L123", + "op_id": "conv_034", + "index": 123, + "name": "/model.10/ffn/ffn.1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.10/ffn/ffn.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "model.10.ffn.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 256, + 1, + 1 + ] + }, + { + "name": "model.10.ffn.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ] + } + ], + "outputs": [ + { + "name": "/model.10/ffn/ffn.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N124", + "layer_id": "L124", + "op_id": "add_008", + "index": 124, + "name": "/model.10/Add_1", + "domain": "ai.onnx", + "op_type": "Add", + "inputs": [ + { + "name": "/model.10/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "/model.10/ffn/ffn.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.10/Add_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N125", + "layer_id": "L125", + "op_id": "concat_005", + "index": 125, + "name": "/model.10/Concat", + "domain": "ai.onnx", + "op_type": "Concat", + "inputs": [ + { + "name": "/model.10/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "/model.10/Add_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.10/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N126", + "layer_id": "L126", + "op_id": "conv_035", + "index": 126, + "name": "/model.10/cv2/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.10/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "model.10.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 256, + 1, + 1 + ] + }, + { + "name": "model.10.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ] + } + ], + "outputs": [ + { + "name": "/model.10/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N127", + "layer_id": "L127", + "op_id": "sigmoid_029", + "index": 127, + "name": "/model.10/cv2/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.10/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.10/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N128", + "layer_id": "L128", + "op_id": "mul_030", + "index": 128, + "name": "/model.10/cv2/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.10/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "/model.10/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.10/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N129", + "layer_id": "L129", + "op_id": "resize_000", + "index": 129, + "name": "/model.11/Resize", + "domain": "ai.onnx", + "op_type": "Resize", + "inputs": [ + { + "name": "/model.10/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "", + "dtype": null, + "shape": null + }, + { + "name": "/model.11/Constant_output_0", + "dtype": "FLOAT", + "shape": [ + 4 + ] + } + ], + "outputs": [ + { + "name": "/model.11/Resize_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 40, + 40 + ] + } + ], + "attributes": { + "coordinate_transformation_mode": "asymmetric", + "cubic_coeff_a": -0.75, + "mode": "nearest", + "nearest_mode": "floor" + } + }, + { + "node_id": "N130", + "layer_id": "L130", + "op_id": "concat_006", + "index": 130, + "name": "/model.12/Concat", + "domain": "ai.onnx", + "op_type": "Concat", + "inputs": [ + { + "name": "/model.11/Resize_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 40, + 40 + ] + }, + { + "name": "/model.6/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.12/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 384, + 40, + 40 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N131", + "layer_id": "L131", + "op_id": "conv_036", + "index": 131, + "name": "/model.13/cv1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.12/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 384, + 40, + 40 + ] + }, + { + "name": "model.13.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 384, + 1, + 1 + ] + }, + { + "name": "model.13.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ] + } + ], + "outputs": [ + { + "name": "/model.13/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N132", + "layer_id": "L132", + "op_id": "sigmoid_030", + "index": 132, + "name": "/model.13/cv1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.13/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.13/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N133", + "layer_id": "L133", + "op_id": "mul_031", + "index": 133, + "name": "/model.13/cv1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.13/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + }, + { + "name": "/model.13/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.13/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N134", + "layer_id": "L134", + "op_id": "split_006", + "index": 134, + "name": "/model.13/Split", + "domain": "ai.onnx", + "op_type": "Split", + "inputs": [ + { + "name": "/model.13/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + }, + { + "name": "onnx::Split_273", + "dtype": "INT64", + "shape": [ + 2 + ] + } + ], + "outputs": [ + { + "name": "/model.13/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.13/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N135", + "layer_id": "L135", + "op_id": "conv_037", + "index": 135, + "name": "/model.13/m.0/cv1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.13/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "model.13.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ] + }, + { + "name": "model.13.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ] + } + ], + "outputs": [ + { + "name": "/model.13/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N136", + "layer_id": "L136", + "op_id": "sigmoid_031", + "index": 136, + "name": "/model.13/m.0/cv1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.13/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.13/m.0/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N137", + "layer_id": "L137", + "op_id": "mul_032", + "index": 137, + "name": "/model.13/m.0/cv1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.13/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.13/m.0/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.13/m.0/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N138", + "layer_id": "L138", + "op_id": "conv_038", + "index": 138, + "name": "/model.13/m.0/cv2/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.13/m.0/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "model.13.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ] + }, + { + "name": "model.13.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ] + } + ], + "outputs": [ + { + "name": "/model.13/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N139", + "layer_id": "L139", + "op_id": "sigmoid_032", + "index": 139, + "name": "/model.13/m.0/cv2/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.13/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.13/m.0/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N140", + "layer_id": "L140", + "op_id": "mul_033", + "index": 140, + "name": "/model.13/m.0/cv2/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.13/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.13/m.0/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.13/m.0/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N141", + "layer_id": "L141", + "op_id": "concat_007", + "index": 141, + "name": "/model.13/Concat", + "domain": "ai.onnx", + "op_type": "Concat", + "inputs": [ + { + "name": "/model.13/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.13/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.13/m.0/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.13/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 192, + 40, + 40 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N142", + "layer_id": "L142", + "op_id": "conv_039", + "index": 142, + "name": "/model.13/cv2/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.13/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 192, + 40, + 40 + ] + }, + { + "name": "model.13.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 192, + 1, + 1 + ] + }, + { + "name": "model.13.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ] + } + ], + "outputs": [ + { + "name": "/model.13/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N143", + "layer_id": "L143", + "op_id": "sigmoid_033", + "index": 143, + "name": "/model.13/cv2/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.13/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.13/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N144", + "layer_id": "L144", + "op_id": "mul_034", + "index": 144, + "name": "/model.13/cv2/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.13/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + }, + { + "name": "/model.13/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.13/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N145", + "layer_id": "L145", + "op_id": "resize_001", + "index": 145, + "name": "/model.14/Resize", + "domain": "ai.onnx", + "op_type": "Resize", + "inputs": [ + { + "name": "/model.13/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + }, + { + "name": "", + "dtype": null, + "shape": null + }, + { + "name": "/model.11/Constant_output_0", + "dtype": "FLOAT", + "shape": [ + 4 + ] + } + ], + "outputs": [ + { + "name": "/model.14/Resize_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 80, + 80 + ] + } + ], + "attributes": { + "coordinate_transformation_mode": "asymmetric", + "cubic_coeff_a": -0.75, + "mode": "nearest", + "nearest_mode": "floor" + } + }, + { + "node_id": "N146", + "layer_id": "L146", + "op_id": "concat_008", + "index": 146, + "name": "/model.15/Concat", + "domain": "ai.onnx", + "op_type": "Concat", + "inputs": [ + { + "name": "/model.14/Resize_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 80, + 80 + ] + }, + { + "name": "/model.4/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.15/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 192, + 80, + 80 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N147", + "layer_id": "L147", + "op_id": "conv_040", + "index": 147, + "name": "/model.16/cv1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.15/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 192, + 80, + 80 + ] + }, + { + "name": "model.16.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 192, + 1, + 1 + ] + }, + { + "name": "model.16.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ] + } + ], + "outputs": [ + { + "name": "/model.16/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N148", + "layer_id": "L148", + "op_id": "sigmoid_034", + "index": 148, + "name": "/model.16/cv1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.16/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.16/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N149", + "layer_id": "L149", + "op_id": "mul_035", + "index": 149, + "name": "/model.16/cv1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.16/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + }, + { + "name": "/model.16/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.16/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N150", + "layer_id": "L150", + "op_id": "split_007", + "index": 150, + "name": "/model.16/Split", + "domain": "ai.onnx", + "op_type": "Split", + "inputs": [ + { + "name": "/model.16/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + }, + { + "name": "onnx::Split_245", + "dtype": "INT64", + "shape": [ + 2 + ] + } + ], + "outputs": [ + { + "name": "/model.16/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + }, + { + "name": "/model.16/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N151", + "layer_id": "L151", + "op_id": "conv_041", + "index": 151, + "name": "/model.16/m.0/cv1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.16/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + }, + { + "name": "model.16.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 32, + 3, + 3 + ] + }, + { + "name": "model.16.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ] + } + ], + "outputs": [ + { + "name": "/model.16/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N152", + "layer_id": "L152", + "op_id": "sigmoid_035", + "index": 152, + "name": "/model.16/m.0/cv1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.16/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.16/m.0/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N153", + "layer_id": "L153", + "op_id": "mul_036", + "index": 153, + "name": "/model.16/m.0/cv1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.16/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + }, + { + "name": "/model.16/m.0/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.16/m.0/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N154", + "layer_id": "L154", + "op_id": "conv_042", + "index": 154, + "name": "/model.16/m.0/cv2/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.16/m.0/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + }, + { + "name": "model.16.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 32, + 3, + 3 + ] + }, + { + "name": "model.16.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ] + } + ], + "outputs": [ + { + "name": "/model.16/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N155", + "layer_id": "L155", + "op_id": "sigmoid_036", + "index": 155, + "name": "/model.16/m.0/cv2/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.16/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.16/m.0/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N156", + "layer_id": "L156", + "op_id": "mul_037", + "index": 156, + "name": "/model.16/m.0/cv2/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.16/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + }, + { + "name": "/model.16/m.0/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.16/m.0/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N157", + "layer_id": "L157", + "op_id": "concat_009", + "index": 157, + "name": "/model.16/Concat", + "domain": "ai.onnx", + "op_type": "Concat", + "inputs": [ + { + "name": "/model.16/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + }, + { + "name": "/model.16/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + }, + { + "name": "/model.16/m.0/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 32, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.16/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 96, + 80, + 80 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N158", + "layer_id": "L158", + "op_id": "conv_043", + "index": 158, + "name": "/model.16/cv2/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.16/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 96, + 80, + 80 + ] + }, + { + "name": "model.16.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 96, + 1, + 1 + ] + }, + { + "name": "model.16.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ] + } + ], + "outputs": [ + { + "name": "/model.16/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N159", + "layer_id": "L159", + "op_id": "sigmoid_037", + "index": 159, + "name": "/model.16/cv2/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.16/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.16/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N160", + "layer_id": "L160", + "op_id": "mul_038", + "index": 160, + "name": "/model.16/cv2/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.16/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + }, + { + "name": "/model.16/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.16/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N161", + "layer_id": "L161", + "op_id": "conv_044", + "index": 161, + "name": "/model.17/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.16/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + }, + { + "name": "model.17.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ] + }, + { + "name": "model.17.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ] + } + ], + "outputs": [ + { + "name": "/model.17/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 2, + 2 + ] + } + }, + { + "node_id": "N162", + "layer_id": "L162", + "op_id": "sigmoid_038", + "index": 162, + "name": "/model.17/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.17/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.17/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N163", + "layer_id": "L163", + "op_id": "mul_039", + "index": 163, + "name": "/model.17/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.17/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.17/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.17/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N164", + "layer_id": "L164", + "op_id": "concat_010", + "index": 164, + "name": "/model.18/Concat", + "domain": "ai.onnx", + "op_type": "Concat", + "inputs": [ + { + "name": "/model.17/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.13/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.18/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 192, + 40, + 40 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N165", + "layer_id": "L165", + "op_id": "conv_045", + "index": 165, + "name": "/model.19/cv1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.18/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 192, + 40, + 40 + ] + }, + { + "name": "model.19.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 192, + 1, + 1 + ] + }, + { + "name": "model.19.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ] + } + ], + "outputs": [ + { + "name": "/model.19/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N166", + "layer_id": "L166", + "op_id": "sigmoid_039", + "index": 166, + "name": "/model.19/cv1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.19/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.19/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N167", + "layer_id": "L167", + "op_id": "mul_040", + "index": 167, + "name": "/model.19/cv1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.19/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + }, + { + "name": "/model.19/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.19/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N168", + "layer_id": "L168", + "op_id": "split_008", + "index": 168, + "name": "/model.19/Split", + "domain": "ai.onnx", + "op_type": "Split", + "inputs": [ + { + "name": "/model.19/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + }, + { + "name": "onnx::Split_273", + "dtype": "INT64", + "shape": [ + 2 + ] + } + ], + "outputs": [ + { + "name": "/model.19/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.19/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N169", + "layer_id": "L169", + "op_id": "conv_046", + "index": 169, + "name": "/model.19/m.0/cv1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.19/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "model.19.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ] + }, + { + "name": "model.19.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ] + } + ], + "outputs": [ + { + "name": "/model.19/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N170", + "layer_id": "L170", + "op_id": "sigmoid_040", + "index": 170, + "name": "/model.19/m.0/cv1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.19/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.19/m.0/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N171", + "layer_id": "L171", + "op_id": "mul_041", + "index": 171, + "name": "/model.19/m.0/cv1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.19/m.0/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.19/m.0/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.19/m.0/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N172", + "layer_id": "L172", + "op_id": "conv_047", + "index": 172, + "name": "/model.19/m.0/cv2/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.19/m.0/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "model.19.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ] + }, + { + "name": "model.19.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ] + } + ], + "outputs": [ + { + "name": "/model.19/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N173", + "layer_id": "L173", + "op_id": "sigmoid_041", + "index": 173, + "name": "/model.19/m.0/cv2/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.19/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.19/m.0/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N174", + "layer_id": "L174", + "op_id": "mul_042", + "index": 174, + "name": "/model.19/m.0/cv2/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.19/m.0/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.19/m.0/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.19/m.0/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N175", + "layer_id": "L175", + "op_id": "concat_011", + "index": 175, + "name": "/model.19/Concat", + "domain": "ai.onnx", + "op_type": "Concat", + "inputs": [ + { + "name": "/model.19/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.19/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.19/m.0/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.19/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 192, + 40, + 40 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N176", + "layer_id": "L176", + "op_id": "conv_048", + "index": 176, + "name": "/model.19/cv2/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.19/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 192, + 40, + 40 + ] + }, + { + "name": "model.19.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 192, + 1, + 1 + ] + }, + { + "name": "model.19.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ] + } + ], + "outputs": [ + { + "name": "/model.19/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N177", + "layer_id": "L177", + "op_id": "sigmoid_042", + "index": 177, + "name": "/model.19/cv2/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.19/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.19/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N178", + "layer_id": "L178", + "op_id": "mul_043", + "index": 178, + "name": "/model.19/cv2/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.19/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + }, + { + "name": "/model.19/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.19/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N179", + "layer_id": "L179", + "op_id": "conv_049", + "index": 179, + "name": "/model.20/cv1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.19/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + }, + { + "name": "model.20.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 128, + 1, + 1 + ] + }, + { + "name": "model.20.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ] + } + ], + "outputs": [ + { + "name": "/model.20/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N180", + "layer_id": "L180", + "op_id": "sigmoid_043", + "index": 180, + "name": "/model.20/cv1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.20/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.20/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N181", + "layer_id": "L181", + "op_id": "mul_044", + "index": 181, + "name": "/model.20/cv1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.20/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + }, + { + "name": "/model.20/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.20/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N182", + "layer_id": "L182", + "op_id": "conv_050", + "index": 182, + "name": "/model.20/cv2/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.20/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + }, + { + "name": "model.20.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 1, + 3, + 3 + ] + }, + { + "name": "model.20.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ] + } + ], + "outputs": [ + { + "name": "/model.20/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 128, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 2, + 2 + ] + } + }, + { + "node_id": "N183", + "layer_id": "L183", + "op_id": "concat_012", + "index": 183, + "name": "/model.21/Concat", + "domain": "ai.onnx", + "op_type": "Concat", + "inputs": [ + { + "name": "/model.20/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "/model.10/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.21/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 384, + 20, + 20 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N184", + "layer_id": "L184", + "op_id": "conv_051", + "index": 184, + "name": "/model.22/cv1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.21/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 384, + 20, + 20 + ] + }, + { + "name": "model.22.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 384, + 1, + 1 + ] + }, + { + "name": "model.22.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ] + } + ], + "outputs": [ + { + "name": "/model.22/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N185", + "layer_id": "L185", + "op_id": "sigmoid_044", + "index": 185, + "name": "/model.22/cv1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.22/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.22/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N186", + "layer_id": "L186", + "op_id": "mul_045", + "index": 186, + "name": "/model.22/cv1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.22/cv1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "/model.22/cv1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.22/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N187", + "layer_id": "L187", + "op_id": "split_009", + "index": 187, + "name": "/model.22/Split", + "domain": "ai.onnx", + "op_type": "Split", + "inputs": [ + { + "name": "/model.22/cv1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "onnx::Split_301", + "dtype": "INT64", + "shape": [ + 2 + ] + } + ], + "outputs": [ + { + "name": "/model.22/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "/model.22/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N188", + "layer_id": "L188", + "op_id": "conv_052", + "index": 188, + "name": "/model.22/m.0/cv1/cv1.0/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.22/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "model.22.m.0.cv1.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 1, + 3, + 3 + ] + }, + { + "name": "model.22.m.0.cv1.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ] + } + ], + "outputs": [ + { + "name": "/model.22/m.0/cv1/cv1.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 128, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N189", + "layer_id": "L189", + "op_id": "sigmoid_045", + "index": 189, + "name": "/model.22/m.0/cv1/cv1.0/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.22/m.0/cv1/cv1.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.22/m.0/cv1/cv1.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N190", + "layer_id": "L190", + "op_id": "mul_046", + "index": 190, + "name": "/model.22/m.0/cv1/cv1.0/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.22/m.0/cv1/cv1.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "/model.22/m.0/cv1/cv1.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.22/m.0/cv1/cv1.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N191", + "layer_id": "L191", + "op_id": "conv_053", + "index": 191, + "name": "/model.22/m.0/cv1/cv1.1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.22/m.0/cv1/cv1.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "model.22.m.0.cv1.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 128, + 1, + 1 + ] + }, + { + "name": "model.22.m.0.cv1.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ] + } + ], + "outputs": [ + { + "name": "/model.22/m.0/cv1/cv1.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N192", + "layer_id": "L192", + "op_id": "sigmoid_046", + "index": 192, + "name": "/model.22/m.0/cv1/cv1.1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.22/m.0/cv1/cv1.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.22/m.0/cv1/cv1.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N193", + "layer_id": "L193", + "op_id": "mul_047", + "index": 193, + "name": "/model.22/m.0/cv1/cv1.1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.22/m.0/cv1/cv1.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "/model.22/m.0/cv1/cv1.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.22/m.0/cv1/cv1.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N194", + "layer_id": "L194", + "op_id": "conv_054", + "index": 194, + "name": "/model.22/m.0/cv1/cv1.2/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.22/m.0/cv1/cv1.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "model.22.m.0.cv1.2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 1, + 7, + 7 + ] + }, + { + "name": "model.22.m.0.cv1.2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ] + } + ], + "outputs": [ + { + "name": "/model.22/m.0/cv1/cv1.2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 256, + "kernel_shape": [ + 7, + 7 + ], + "pads": [ + 3, + 3, + 3, + 3 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N195", + "layer_id": "L195", + "op_id": "sigmoid_047", + "index": 195, + "name": "/model.22/m.0/cv1/cv1.2/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.22/m.0/cv1/cv1.2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.22/m.0/cv1/cv1.2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N196", + "layer_id": "L196", + "op_id": "mul_048", + "index": 196, + "name": "/model.22/m.0/cv1/cv1.2/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.22/m.0/cv1/cv1.2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "/model.22/m.0/cv1/cv1.2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.22/m.0/cv1/cv1.2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N197", + "layer_id": "L197", + "op_id": "conv_055", + "index": 197, + "name": "/model.22/m.0/cv1/cv1.3/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.22/m.0/cv1/cv1.2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "model.22.m.0.cv1.3.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 256, + 1, + 1 + ] + }, + { + "name": "model.22.m.0.cv1.3.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ] + } + ], + "outputs": [ + { + "name": "/model.22/m.0/cv1/cv1.3/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N198", + "layer_id": "L198", + "op_id": "sigmoid_048", + "index": 198, + "name": "/model.22/m.0/cv1/cv1.3/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.22/m.0/cv1/cv1.3/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.22/m.0/cv1/cv1.3/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N199", + "layer_id": "L199", + "op_id": "mul_049", + "index": 199, + "name": "/model.22/m.0/cv1/cv1.3/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.22/m.0/cv1/cv1.3/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "/model.22/m.0/cv1/cv1.3/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.22/m.0/cv1/cv1.3/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N200", + "layer_id": "L200", + "op_id": "conv_056", + "index": 200, + "name": "/model.22/m.0/cv1/cv1.4/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.22/m.0/cv1/cv1.3/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "model.22.m.0.cv1.4.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 1, + 3, + 3 + ] + }, + { + "name": "model.22.m.0.cv1.4.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ] + } + ], + "outputs": [ + { + "name": "/model.22/m.0/cv1/cv1.4/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 128, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N201", + "layer_id": "L201", + "op_id": "sigmoid_049", + "index": 201, + "name": "/model.22/m.0/cv1/cv1.4/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.22/m.0/cv1/cv1.4/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.22/m.0/cv1/cv1.4/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N202", + "layer_id": "L202", + "op_id": "mul_050", + "index": 202, + "name": "/model.22/m.0/cv1/cv1.4/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.22/m.0/cv1/cv1.4/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "/model.22/m.0/cv1/cv1.4/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.22/m.0/cv1/cv1.4/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N203", + "layer_id": "L203", + "op_id": "add_009", + "index": 203, + "name": "/model.22/m.0/Add", + "domain": "ai.onnx", + "op_type": "Add", + "inputs": [ + { + "name": "/model.22/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "/model.22/m.0/cv1/cv1.4/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.22/m.0/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N204", + "layer_id": "L204", + "op_id": "concat_013", + "index": 204, + "name": "/model.22/Concat", + "domain": "ai.onnx", + "op_type": "Concat", + "inputs": [ + { + "name": "/model.22/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "/model.22/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + }, + { + "name": "/model.22/m.0/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.22/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 384, + 20, + 20 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N205", + "layer_id": "L205", + "op_id": "conv_057", + "index": 205, + "name": "/model.22/cv2/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.22/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 384, + 20, + 20 + ] + }, + { + "name": "model.22.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 384, + 1, + 1 + ] + }, + { + "name": "model.22.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ] + } + ], + "outputs": [ + { + "name": "/model.22/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N206", + "layer_id": "L206", + "op_id": "sigmoid_050", + "index": 206, + "name": "/model.22/cv2/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.22/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.22/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N207", + "layer_id": "L207", + "op_id": "mul_051", + "index": 207, + "name": "/model.22/cv2/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.22/cv2/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "/model.22/cv2/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.22/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N208", + "layer_id": "L208", + "op_id": "conv_058", + "index": 208, + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.0/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.16/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + }, + { + "name": "model.23.one2one_cv2.0.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ] + }, + { + "name": "model.23.one2one_cv2.0.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N209", + "layer_id": "L209", + "op_id": "sigmoid_051", + "index": 209, + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.0/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N210", + "layer_id": "L210", + "op_id": "mul_052", + "index": 210, + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.0/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + }, + { + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N211", + "layer_id": "L211", + "op_id": "conv_059", + "index": 211, + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + }, + { + "name": "model.23.one2one_cv2.0.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ] + }, + { + "name": "model.23.one2one_cv2.0.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N212", + "layer_id": "L212", + "op_id": "sigmoid_052", + "index": 212, + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N213", + "layer_id": "L213", + "op_id": "mul_053", + "index": 213, + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + }, + { + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N214", + "layer_id": "L214", + "op_id": "conv_060", + "index": 214, + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.2/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + }, + { + "name": "model.23.one2one_cv2.0.2.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 1, + 1 + ] + }, + { + "name": "model.23.one2one_cv2.0.2.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.2/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N215", + "layer_id": "L215", + "op_id": "conv_061", + "index": 215, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.16/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + }, + { + "name": "model.23.one2one_cv3.0.0.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 1, + 3, + 3 + ] + }, + { + "name": "model.23.one2one_cv3.0.0.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 64, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N216", + "layer_id": "L216", + "op_id": "sigmoid_053", + "index": 216, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N217", + "layer_id": "L217", + "op_id": "mul_054", + "index": 217, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + }, + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N218", + "layer_id": "L218", + "op_id": "conv_062", + "index": 218, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + }, + { + "name": "model.23.one2one_cv3.0.0.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 64, + 1, + 1 + ] + }, + { + "name": "model.23.one2one_cv3.0.0.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N219", + "layer_id": "L219", + "op_id": "sigmoid_054", + "index": 219, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N220", + "layer_id": "L220", + "op_id": "mul_055", + "index": 220, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ] + }, + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N221", + "layer_id": "L221", + "op_id": "conv_063", + "index": 221, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ] + }, + { + "name": "model.23.one2one_cv3.0.1.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 1, + 3, + 3 + ] + }, + { + "name": "model.23.one2one_cv3.0.1.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 80, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N222", + "layer_id": "L222", + "op_id": "sigmoid_055", + "index": 222, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N223", + "layer_id": "L223", + "op_id": "mul_056", + "index": 223, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ] + }, + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N224", + "layer_id": "L224", + "op_id": "conv_064", + "index": 224, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ] + }, + { + "name": "model.23.one2one_cv3.0.1.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 80, + 1, + 1 + ] + }, + { + "name": "model.23.one2one_cv3.0.1.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N225", + "layer_id": "L225", + "op_id": "sigmoid_056", + "index": 225, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N226", + "layer_id": "L226", + "op_id": "mul_057", + "index": 226, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ] + }, + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N227", + "layer_id": "L227", + "op_id": "conv_065", + "index": 227, + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.2/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ] + }, + { + "name": "model.23.one2one_cv3.0.2.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 80, + 1, + 1 + ] + }, + { + "name": "model.23.one2one_cv3.0.2.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.2/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N228", + "layer_id": "L228", + "op_id": "concat_014", + "index": 228, + "name": "/model.23/Concat", + "domain": "ai.onnx", + "op_type": "Concat", + "inputs": [ + { + "name": "/model.23/one2one_cv2.0/one2one_cv2.0.2/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 80, + 80 + ] + }, + { + "name": "/model.23/one2one_cv3.0/one2one_cv3.0.2/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 80, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 144, + 80, + 80 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N229", + "layer_id": "L229", + "op_id": "conv_066", + "index": 229, + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.0/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.19/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + }, + { + "name": "model.23.one2one_cv2.1.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 128, + 3, + 3 + ] + }, + { + "name": "model.23.one2one_cv2.1.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N230", + "layer_id": "L230", + "op_id": "sigmoid_057", + "index": 230, + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.0/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N231", + "layer_id": "L231", + "op_id": "mul_058", + "index": 231, + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.0/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N232", + "layer_id": "L232", + "op_id": "conv_067", + "index": 232, + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "model.23.one2one_cv2.1.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ] + }, + { + "name": "model.23.one2one_cv2.1.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N233", + "layer_id": "L233", + "op_id": "sigmoid_058", + "index": 233, + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N234", + "layer_id": "L234", + "op_id": "mul_059", + "index": 234, + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N235", + "layer_id": "L235", + "op_id": "conv_068", + "index": 235, + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.2/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "model.23.one2one_cv2.1.2.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 1, + 1 + ] + }, + { + "name": "model.23.one2one_cv2.1.2.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.2/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N236", + "layer_id": "L236", + "op_id": "conv_069", + "index": 236, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.19/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + }, + { + "name": "model.23.one2one_cv3.1.0.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 1, + 3, + 3 + ] + }, + { + "name": "model.23.one2one_cv3.1.0.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 128, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N237", + "layer_id": "L237", + "op_id": "sigmoid_059", + "index": 237, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N238", + "layer_id": "L238", + "op_id": "mul_060", + "index": 238, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + }, + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N239", + "layer_id": "L239", + "op_id": "conv_070", + "index": 239, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 128, + 40, + 40 + ] + }, + { + "name": "model.23.one2one_cv3.1.0.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 128, + 1, + 1 + ] + }, + { + "name": "model.23.one2one_cv3.1.0.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N240", + "layer_id": "L240", + "op_id": "sigmoid_060", + "index": 240, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N241", + "layer_id": "L241", + "op_id": "mul_061", + "index": 241, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ] + }, + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N242", + "layer_id": "L242", + "op_id": "conv_071", + "index": 242, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ] + }, + { + "name": "model.23.one2one_cv3.1.1.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 1, + 3, + 3 + ] + }, + { + "name": "model.23.one2one_cv3.1.1.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 80, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N243", + "layer_id": "L243", + "op_id": "sigmoid_061", + "index": 243, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N244", + "layer_id": "L244", + "op_id": "mul_062", + "index": 244, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ] + }, + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N245", + "layer_id": "L245", + "op_id": "conv_072", + "index": 245, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ] + }, + { + "name": "model.23.one2one_cv3.1.1.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 80, + 1, + 1 + ] + }, + { + "name": "model.23.one2one_cv3.1.1.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N246", + "layer_id": "L246", + "op_id": "sigmoid_062", + "index": 246, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N247", + "layer_id": "L247", + "op_id": "mul_063", + "index": 247, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ] + }, + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N248", + "layer_id": "L248", + "op_id": "conv_073", + "index": 248, + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.2/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ] + }, + { + "name": "model.23.one2one_cv3.1.2.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 80, + 1, + 1 + ] + }, + { + "name": "model.23.one2one_cv3.1.2.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.2/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N249", + "layer_id": "L249", + "op_id": "concat_015", + "index": 249, + "name": "/model.23/Concat_1", + "domain": "ai.onnx", + "op_type": "Concat", + "inputs": [ + { + "name": "/model.23/one2one_cv2.1/one2one_cv2.1.2/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 40, + 40 + ] + }, + { + "name": "/model.23/one2one_cv3.1/one2one_cv3.1.2/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 40, + 40 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Concat_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 144, + 40, + 40 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N250", + "layer_id": "L250", + "op_id": "conv_074", + "index": 250, + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.0/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.22/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "model.23.one2one_cv2.2.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 256, + 3, + 3 + ] + }, + { + "name": "model.23.one2one_cv2.2.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N251", + "layer_id": "L251", + "op_id": "sigmoid_063", + "index": 251, + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.0/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N252", + "layer_id": "L252", + "op_id": "mul_064", + "index": 252, + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.0/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 20, + 20 + ] + }, + { + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N253", + "layer_id": "L253", + "op_id": "conv_075", + "index": 253, + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 20, + 20 + ] + }, + { + "name": "model.23.one2one_cv2.2.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ] + }, + { + "name": "model.23.one2one_cv2.2.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N254", + "layer_id": "L254", + "op_id": "sigmoid_064", + "index": 254, + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N255", + "layer_id": "L255", + "op_id": "mul_065", + "index": 255, + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 20, + 20 + ] + }, + { + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N256", + "layer_id": "L256", + "op_id": "conv_076", + "index": 256, + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.2/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 20, + 20 + ] + }, + { + "name": "model.23.one2one_cv2.2.2.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 1, + 1 + ] + }, + { + "name": "model.23.one2one_cv2.2.2.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.2/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N257", + "layer_id": "L257", + "op_id": "conv_077", + "index": 257, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.22/cv2/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "model.23.one2one_cv3.2.0.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 1, + 3, + 3 + ] + }, + { + "name": "model.23.one2one_cv3.2.0.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 256, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N258", + "layer_id": "L258", + "op_id": "sigmoid_065", + "index": 258, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N259", + "layer_id": "L259", + "op_id": "mul_066", + "index": 259, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N260", + "layer_id": "L260", + "op_id": "conv_078", + "index": 260, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 256, + 20, + 20 + ] + }, + { + "name": "model.23.one2one_cv3.2.0.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 256, + 1, + 1 + ] + }, + { + "name": "model.23.one2one_cv3.2.0.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N261", + "layer_id": "L261", + "op_id": "sigmoid_066", + "index": 261, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N262", + "layer_id": "L262", + "op_id": "mul_067", + "index": 262, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ] + }, + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N263", + "layer_id": "L263", + "op_id": "conv_079", + "index": 263, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ] + }, + { + "name": "model.23.one2one_cv3.2.1.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 1, + 3, + 3 + ] + }, + { + "name": "model.23.one2one_cv3.2.1.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 80, + "kernel_shape": [ + 3, + 3 + ], + "pads": [ + 1, + 1, + 1, + 1 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N264", + "layer_id": "L264", + "op_id": "sigmoid_067", + "index": 264, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N265", + "layer_id": "L265", + "op_id": "mul_068", + "index": 265, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ] + }, + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N266", + "layer_id": "L266", + "op_id": "conv_080", + "index": 266, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ] + }, + { + "name": "model.23.one2one_cv3.2.1.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 80, + 1, + 1 + ] + }, + { + "name": "model.23.one2one_cv3.2.1.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N267", + "layer_id": "L267", + "op_id": "sigmoid_068", + "index": 267, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/act/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N268", + "layer_id": "L268", + "op_id": "mul_069", + "index": 268, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/act/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ] + }, + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/act/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N269", + "layer_id": "L269", + "op_id": "conv_081", + "index": 269, + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.2/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/act/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ] + }, + { + "name": "model.23.one2one_cv3.2.2.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 80, + 1, + 1 + ] + }, + { + "name": "model.23.one2one_cv3.2.2.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.2/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N270", + "layer_id": "L270", + "op_id": "concat_016", + "index": 270, + "name": "/model.23/Concat_2", + "domain": "ai.onnx", + "op_type": "Concat", + "inputs": [ + { + "name": "/model.23/one2one_cv2.2/one2one_cv2.2.2/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 20, + 20 + ] + }, + { + "name": "/model.23/one2one_cv3.2/one2one_cv3.2.2/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 20, + 20 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Concat_2_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 144, + 20, + 20 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N271", + "layer_id": "L271", + "op_id": "reshape_003", + "index": 271, + "name": "/model.23/Reshape", + "domain": "ai.onnx", + "op_type": "Reshape", + "inputs": [ + { + "name": "/model.23/Concat_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 144, + 80, + 80 + ] + }, + { + "name": "/model.23/Constant_output_0", + "dtype": "INT64", + "shape": [ + 3 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Reshape_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 144, + 6400 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N272", + "layer_id": "L272", + "op_id": "reshape_004", + "index": 272, + "name": "/model.23/Reshape_1", + "domain": "ai.onnx", + "op_type": "Reshape", + "inputs": [ + { + "name": "/model.23/Concat_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 144, + 40, + 40 + ] + }, + { + "name": "/model.23/Constant_output_0", + "dtype": "INT64", + "shape": [ + 3 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Reshape_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 144, + 1600 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N273", + "layer_id": "L273", + "op_id": "reshape_005", + "index": 273, + "name": "/model.23/Reshape_2", + "domain": "ai.onnx", + "op_type": "Reshape", + "inputs": [ + { + "name": "/model.23/Concat_2_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 144, + 20, + 20 + ] + }, + { + "name": "/model.23/Constant_output_0", + "dtype": "INT64", + "shape": [ + 3 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Reshape_2_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 144, + 400 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N274", + "layer_id": "L274", + "op_id": "concat_017", + "index": 274, + "name": "/model.23/Concat_3", + "domain": "ai.onnx", + "op_type": "Concat", + "inputs": [ + { + "name": "/model.23/Reshape_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 144, + 6400 + ] + }, + { + "name": "/model.23/Reshape_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 144, + 1600 + ] + }, + { + "name": "/model.23/Reshape_2_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 144, + 400 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Concat_3_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 144, + 8400 + ] + } + ], + "attributes": { + "axis": 2 + } + }, + { + "node_id": "N275", + "layer_id": "L275", + "op_id": "split_010", + "index": 275, + "name": "/model.23/Split", + "domain": "ai.onnx", + "op_type": "Split", + "inputs": [ + { + "name": "/model.23/Concat_3_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 144, + 8400 + ] + }, + { + "name": "onnx::Split_572", + "dtype": "INT64", + "shape": [ + 2 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 8400 + ] + }, + { + "name": "/model.23/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 8400 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N276", + "layer_id": "L276", + "op_id": "reshape_006", + "index": 276, + "name": "/model.23/dfl/Reshape", + "domain": "ai.onnx", + "op_type": "Reshape", + "inputs": [ + { + "name": "/model.23/Split_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 64, + 8400 + ] + }, + { + "name": "/model.23/dfl/Constant_output_0", + "dtype": "INT64", + "shape": [ + 4 + ] + } + ], + "outputs": [ + { + "name": "/model.23/dfl/Reshape_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 4, + 16, + 8400 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N277", + "layer_id": "L277", + "op_id": "transpose_002", + "index": 277, + "name": "/model.23/dfl/Transpose", + "domain": "ai.onnx", + "op_type": "Transpose", + "inputs": [ + { + "name": "/model.23/dfl/Reshape_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 4, + 16, + 8400 + ] + } + ], + "outputs": [ + { + "name": "/model.23/dfl/Transpose_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 4, + 8400 + ] + } + ], + "attributes": { + "perm": [ + 0, + 2, + 1, + 3 + ] + } + }, + { + "node_id": "N278", + "layer_id": "L278", + "op_id": "softmax_001", + "index": 278, + "name": "/model.23/dfl/Softmax", + "domain": "ai.onnx", + "op_type": "Softmax", + "inputs": [ + { + "name": "/model.23/dfl/Transpose_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 4, + 8400 + ] + } + ], + "outputs": [ + { + "name": "/model.23/dfl/Softmax_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 4, + 8400 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N279", + "layer_id": "L279", + "op_id": "conv_082", + "index": 279, + "name": "/model.23/dfl/conv/Conv", + "domain": "ai.onnx", + "op_type": "Conv", + "inputs": [ + { + "name": "/model.23/dfl/Softmax_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 4, + 8400 + ] + }, + { + "name": "model.23.dfl.conv.weight", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 1, + 1 + ] + } + ], + "outputs": [ + { + "name": "/model.23/dfl/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 1, + 4, + 8400 + ] + } + ], + "attributes": { + "dilations": [ + 1, + 1 + ], + "group": 1, + "kernel_shape": [ + 1, + 1 + ], + "pads": [ + 0, + 0, + 0, + 0 + ], + "strides": [ + 1, + 1 + ] + } + }, + { + "node_id": "N280", + "layer_id": "L280", + "op_id": "reshape_007", + "index": 280, + "name": "/model.23/dfl/Reshape_1", + "domain": "ai.onnx", + "op_type": "Reshape", + "inputs": [ + { + "name": "/model.23/dfl/conv/Conv_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 1, + 4, + 8400 + ] + }, + { + "name": "/model.23/dfl/Constant_1_output_0", + "dtype": "INT64", + "shape": [ + 3 + ] + } + ], + "outputs": [ + { + "name": "/model.23/dfl/Reshape_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 4, + 8400 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N281", + "layer_id": "L281", + "op_id": "split_011", + "index": 281, + "name": "/model.23/Split_1", + "domain": "ai.onnx", + "op_type": "Split", + "inputs": [ + { + "name": "/model.23/dfl/Reshape_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 4, + 8400 + ] + }, + { + "name": "onnx::Split_214", + "dtype": "INT64", + "shape": [ + 2 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Split_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 8400 + ] + }, + { + "name": "/model.23/Split_1_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 8400 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N282", + "layer_id": "L282", + "op_id": "sub_000", + "index": 282, + "name": "/model.23/Sub", + "domain": "ai.onnx", + "op_type": "Sub", + "inputs": [ + { + "name": "/model.23/Constant_3_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 8400 + ] + }, + { + "name": "/model.23/Split_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 8400 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Sub_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 8400 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N283", + "layer_id": "L283", + "op_id": "add_010", + "index": 283, + "name": "/model.23/Add", + "domain": "ai.onnx", + "op_type": "Add", + "inputs": [ + { + "name": "/model.23/Constant_3_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 8400 + ] + }, + { + "name": "/model.23/Split_1_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 8400 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 8400 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N284", + "layer_id": "L284", + "op_id": "concat_018", + "index": 284, + "name": "/model.23/Concat_4", + "domain": "ai.onnx", + "op_type": "Concat", + "inputs": [ + { + "name": "/model.23/Sub_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 8400 + ] + }, + { + "name": "/model.23/Add_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 8400 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Concat_4_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 4, + 8400 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N285", + "layer_id": "L285", + "op_id": "mul_070", + "index": 285, + "name": "/model.23/Mul", + "domain": "ai.onnx", + "op_type": "Mul", + "inputs": [ + { + "name": "/model.23/Concat_4_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 4, + 8400 + ] + }, + { + "name": "/model.23/Constant_5_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 8400 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 4, + 8400 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N286", + "layer_id": "L286", + "op_id": "sigmoid_069", + "index": 286, + "name": "/model.23/Sigmoid", + "domain": "ai.onnx", + "op_type": "Sigmoid", + "inputs": [ + { + "name": "/model.23/Split_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 8400 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 8400 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N287", + "layer_id": "L287", + "op_id": "concat_019", + "index": 287, + "name": "/model.23/Concat_5", + "domain": "ai.onnx", + "op_type": "Concat", + "inputs": [ + { + "name": "/model.23/Mul_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 4, + 8400 + ] + }, + { + "name": "/model.23/Sigmoid_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 80, + 8400 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Concat_5_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 84, + 8400 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N288", + "layer_id": "L288", + "op_id": "transpose_003", + "index": 288, + "name": "/model.23/Transpose", + "domain": "ai.onnx", + "op_type": "Transpose", + "inputs": [ + { + "name": "/model.23/Concat_5_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 84, + 8400 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Transpose_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 8400, + 84 + ] + } + ], + "attributes": { + "perm": [ + 0, + 2, + 1 + ] + } + }, + { + "node_id": "N289", + "layer_id": "L289", + "op_id": "split_012", + "index": 289, + "name": "/model.23/Split_2", + "domain": "ai.onnx", + "op_type": "Split", + "inputs": [ + { + "name": "/model.23/Transpose_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 8400, + 84 + ] + }, + { + "name": "onnx::Split_612", + "dtype": "INT64", + "shape": [ + 2 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Split_2_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 8400, + 4 + ] + }, + { + "name": "/model.23/Split_2_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 8400, + 80 + ] + } + ], + "attributes": { + "axis": -1 + } + }, + { + "node_id": "N290", + "layer_id": "L290", + "op_id": "reducemax_000", + "index": 290, + "name": "/model.23/ReduceMax", + "domain": "ai.onnx", + "op_type": "ReduceMax", + "inputs": [ + { + "name": "/model.23/Split_2_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 8400, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/ReduceMax_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 8400 + ] + } + ], + "attributes": { + "axes": [ + -1 + ], + "keepdims": 0 + } + }, + { + "node_id": "N291", + "layer_id": "L291", + "op_id": "topk_000", + "index": 291, + "name": "/model.23/TopK", + "domain": "ai.onnx", + "op_type": "TopK", + "inputs": [ + { + "name": "/model.23/ReduceMax_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 8400 + ] + }, + { + "name": "/model.23/Constant_6_output_0", + "dtype": "INT64", + "shape": [ + 1 + ] + } + ], + "outputs": [ + { + "name": "/model.23/TopK_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 300 + ] + }, + { + "name": "/model.23/TopK_output_1", + "dtype": "INT64", + "shape": [ + 1, + 300 + ] + } + ], + "attributes": { + "axis": -1, + "largest": 1, + "sorted": 1 + } + }, + { + "node_id": "N292", + "layer_id": "L292", + "op_id": "unsqueeze_000", + "index": 292, + "name": "/model.23/Unsqueeze", + "domain": "ai.onnx", + "op_type": "Unsqueeze", + "inputs": [ + { + "name": "/model.23/TopK_output_1", + "dtype": "INT64", + "shape": [ + 1, + 300 + ] + }, + { + "name": "/model.23/Constant_7_output_0", + "dtype": "INT64", + "shape": [ + 1 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Unsqueeze_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300, + 1 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N293", + "layer_id": "L293", + "op_id": "tile_000", + "index": 293, + "name": "/model.23/Tile", + "domain": "ai.onnx", + "op_type": "Tile", + "inputs": [ + { + "name": "/model.23/Unsqueeze_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300, + 1 + ] + }, + { + "name": "/model.23/Constant_8_output_0", + "dtype": "INT64", + "shape": [ + 3 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Tile_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300, + 4 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N294", + "layer_id": "L294", + "op_id": "gatherelements_000", + "index": 294, + "name": "/model.23/GatherElements", + "domain": "ai.onnx", + "op_type": "GatherElements", + "inputs": [ + { + "name": "/model.23/Split_2_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 8400, + 4 + ] + }, + { + "name": "/model.23/Tile_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300, + 4 + ] + } + ], + "outputs": [ + { + "name": "/model.23/GatherElements_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 300, + 4 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N295", + "layer_id": "L295", + "op_id": "tile_001", + "index": 295, + "name": "/model.23/Tile_1", + "domain": "ai.onnx", + "op_type": "Tile", + "inputs": [ + { + "name": "/model.23/Unsqueeze_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300, + 1 + ] + }, + { + "name": "/model.23/Constant_10_output_0", + "dtype": "INT64", + "shape": [ + 3 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Tile_1_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300, + 80 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N296", + "layer_id": "L296", + "op_id": "gatherelements_001", + "index": 296, + "name": "/model.23/GatherElements_1", + "domain": "ai.onnx", + "op_type": "GatherElements", + "inputs": [ + { + "name": "/model.23/Split_2_output_1", + "dtype": "FLOAT", + "shape": [ + 1, + 8400, + 80 + ] + }, + { + "name": "/model.23/Tile_1_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/GatherElements_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 300, + 80 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N297", + "layer_id": "L297", + "op_id": "flatten_000", + "index": 297, + "name": "/model.23/Flatten", + "domain": "ai.onnx", + "op_type": "Flatten", + "inputs": [ + { + "name": "/model.23/GatherElements_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 300, + 80 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Flatten_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 24000 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N298", + "layer_id": "L298", + "op_id": "topk_001", + "index": 298, + "name": "/model.23/TopK_1", + "domain": "ai.onnx", + "op_type": "TopK", + "inputs": [ + { + "name": "/model.23/Flatten_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 24000 + ] + }, + { + "name": "/model.23/Constant_6_output_0", + "dtype": "INT64", + "shape": [ + 1 + ] + } + ], + "outputs": [ + { + "name": "/model.23/TopK_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 300 + ] + }, + { + "name": "/model.23/TopK_1_output_1", + "dtype": "INT64", + "shape": [ + 1, + 300 + ] + } + ], + "attributes": { + "axis": -1, + "largest": 1, + "sorted": 1 + } + }, + { + "node_id": "N299", + "layer_id": "L299", + "op_id": "mod_000", + "index": 299, + "name": "/model.23/Mod", + "domain": "ai.onnx", + "op_type": "Mod", + "inputs": [ + { + "name": "/model.23/TopK_1_output_1", + "dtype": "INT64", + "shape": [ + 1, + 300 + ] + }, + { + "name": "/model.23/Constant_13_output_0", + "dtype": "INT64", + "shape": [] + } + ], + "outputs": [ + { + "name": "/model.23/Mod_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300 + ] + } + ], + "attributes": { + "fmod": 0 + } + }, + { + "node_id": "N300", + "layer_id": "L300", + "op_id": "div_000", + "index": 300, + "name": "/model.23/Div", + "domain": "ai.onnx", + "op_type": "Div", + "inputs": [ + { + "name": "/model.23/TopK_1_output_1", + "dtype": "INT64", + "shape": [ + 1, + 300 + ] + }, + { + "name": "/model.23/Constant_13_output_0", + "dtype": "INT64", + "shape": [] + } + ], + "outputs": [ + { + "name": "/model.23/Div_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N301", + "layer_id": "L301", + "op_id": "unsqueeze_001", + "index": 301, + "name": "/model.23/Unsqueeze_1", + "domain": "ai.onnx", + "op_type": "Unsqueeze", + "inputs": [ + { + "name": "/model.23/Div_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300 + ] + }, + { + "name": "/model.23/Constant_7_output_0", + "dtype": "INT64", + "shape": [ + 1 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Unsqueeze_1_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300, + 1 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N302", + "layer_id": "L302", + "op_id": "tile_002", + "index": 302, + "name": "/model.23/Tile_2", + "domain": "ai.onnx", + "op_type": "Tile", + "inputs": [ + { + "name": "/model.23/Unsqueeze_1_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300, + 1 + ] + }, + { + "name": "/model.23/Constant_8_output_0", + "dtype": "INT64", + "shape": [ + 3 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Tile_2_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300, + 4 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N303", + "layer_id": "L303", + "op_id": "gatherelements_002", + "index": 303, + "name": "/model.23/GatherElements_2", + "domain": "ai.onnx", + "op_type": "GatherElements", + "inputs": [ + { + "name": "/model.23/GatherElements_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 300, + 4 + ] + }, + { + "name": "/model.23/Tile_2_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300, + 4 + ] + } + ], + "outputs": [ + { + "name": "/model.23/GatherElements_2_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 300, + 4 + ] + } + ], + "attributes": { + "axis": 1 + } + }, + { + "node_id": "N304", + "layer_id": "L304", + "op_id": "unsqueeze_002", + "index": 304, + "name": "/model.23/Unsqueeze_2", + "domain": "ai.onnx", + "op_type": "Unsqueeze", + "inputs": [ + { + "name": "/model.23/TopK_1_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 300 + ] + }, + { + "name": "/model.23/Constant_7_output_0", + "dtype": "INT64", + "shape": [ + 1 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Unsqueeze_2_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 300, + 1 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N305", + "layer_id": "L305", + "op_id": "unsqueeze_003", + "index": 305, + "name": "/model.23/Unsqueeze_3", + "domain": "ai.onnx", + "op_type": "Unsqueeze", + "inputs": [ + { + "name": "/model.23/Mod_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300 + ] + }, + { + "name": "/model.23/Constant_7_output_0", + "dtype": "INT64", + "shape": [ + 1 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Unsqueeze_3_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300, + 1 + ] + } + ], + "attributes": {} + }, + { + "node_id": "N306", + "layer_id": "L306", + "op_id": "cast_000", + "index": 306, + "name": "/model.23/Cast_2", + "domain": "ai.onnx", + "op_type": "Cast", + "inputs": [ + { + "name": "/model.23/Unsqueeze_3_output_0", + "dtype": "INT64", + "shape": [ + 1, + 300, + 1 + ] + } + ], + "outputs": [ + { + "name": "/model.23/Cast_2_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 300, + 1 + ] + } + ], + "attributes": { + "to": 1 + } + }, + { + "node_id": "N307", + "layer_id": "L307", + "op_id": "concat_020", + "index": 307, + "name": "/model.23/Concat_6", + "domain": "ai.onnx", + "op_type": "Concat", + "inputs": [ + { + "name": "/model.23/GatherElements_2_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 300, + 4 + ] + }, + { + "name": "/model.23/Unsqueeze_2_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 300, + 1 + ] + }, + { + "name": "/model.23/Cast_2_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 300, + 1 + ] + } + ], + "outputs": [ + { + "name": "output0", + "dtype": "FLOAT", + "shape": [ + 1, + 300, + 6 + ] + } + ], + "attributes": { + "axis": -1 + } + } + ], + "initializers": [ + { + "name": "/model.10/attn/Constant_1_output_0", + "dtype": "FLOAT", + "shape": [], + "elements": 1, + "raw_bytes": 4, + "external_data": false + }, + { + "name": "/model.10/attn/Constant_2_output_0", + "dtype": "INT64", + "shape": [ + 4 + ], + "elements": 4, + "raw_bytes": 32, + "external_data": false + }, + { + "name": "/model.10/attn/Constant_output_0", + "dtype": "INT64", + "shape": [ + 4 + ], + "elements": 4, + "raw_bytes": 32, + "external_data": false + }, + { + "name": "/model.11/Constant_output_0", + "dtype": "FLOAT", + "shape": [ + 4 + ], + "elements": 4, + "raw_bytes": 16, + "external_data": false + }, + { + "name": "/model.23/Constant_10_output_0", + "dtype": "INT64", + "shape": [ + 3 + ], + "elements": 3, + "raw_bytes": 24, + "external_data": false + }, + { + "name": "/model.23/Constant_13_output_0", + "dtype": "INT64", + "shape": [], + "elements": 1, + "raw_bytes": 8, + "external_data": false + }, + { + "name": "/model.23/Constant_3_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 2, + 8400 + ], + "elements": 16800, + "raw_bytes": 67200, + "external_data": false + }, + { + "name": "/model.23/Constant_5_output_0", + "dtype": "FLOAT", + "shape": [ + 1, + 8400 + ], + "elements": 8400, + "raw_bytes": 33600, + "external_data": false + }, + { + "name": "/model.23/Constant_6_output_0", + "dtype": "INT64", + "shape": [ + 1 + ], + "elements": 1, + "raw_bytes": 8, + "external_data": false + }, + { + "name": "/model.23/Constant_7_output_0", + "dtype": "INT64", + "shape": [ + 1 + ], + "elements": 1, + "raw_bytes": 8, + "external_data": false + }, + { + "name": "/model.23/Constant_8_output_0", + "dtype": "INT64", + "shape": [ + 3 + ], + "elements": 3, + "raw_bytes": 24, + "external_data": false + }, + { + "name": "/model.23/Constant_output_0", + "dtype": "INT64", + "shape": [ + 3 + ], + "elements": 3, + "raw_bytes": 24, + "external_data": false + }, + { + "name": "/model.23/dfl/Constant_1_output_0", + "dtype": "INT64", + "shape": [ + 3 + ], + "elements": 3, + "raw_bytes": 24, + "external_data": false + }, + { + "name": "/model.23/dfl/Constant_output_0", + "dtype": "INT64", + "shape": [ + 4 + ], + "elements": 4, + "raw_bytes": 32, + "external_data": false + }, + { + "name": "model.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 16 + ], + "elements": 16, + "raw_bytes": 64, + "external_data": false + }, + { + "name": "model.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 16, + 3, + 3, + 3 + ], + "elements": 432, + "raw_bytes": 1728, + "external_data": false + }, + { + "name": "model.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ], + "elements": 32, + "raw_bytes": 128, + "external_data": false + }, + { + "name": "model.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 16, + 3, + 3 + ], + "elements": 4608, + "raw_bytes": 18432, + "external_data": false + }, + { + "name": "model.10.attn.pe.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "raw_bytes": 512, + "external_data": false + }, + { + "name": "model.10.attn.pe.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 1, + 3, + 3 + ], + "elements": 1152, + "raw_bytes": 4608, + "external_data": false + }, + { + "name": "model.10.attn.proj.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "raw_bytes": 512, + "external_data": false + }, + { + "name": "model.10.attn.proj.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 128, + 1, + 1 + ], + "elements": 16384, + "raw_bytes": 65536, + "external_data": false + }, + { + "name": "model.10.attn.qkv.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "raw_bytes": 1024, + "external_data": false + }, + { + "name": "model.10.attn.qkv.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 128, + 1, + 1 + ], + "elements": 32768, + "raw_bytes": 131072, + "external_data": false + }, + { + "name": "model.10.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "raw_bytes": 1024, + "external_data": false + }, + { + "name": "model.10.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 256, + 1, + 1 + ], + "elements": 65536, + "raw_bytes": 262144, + "external_data": false + }, + { + "name": "model.10.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "raw_bytes": 1024, + "external_data": false + }, + { + "name": "model.10.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 256, + 1, + 1 + ], + "elements": 65536, + "raw_bytes": 262144, + "external_data": false + }, + { + "name": "model.10.ffn.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "raw_bytes": 1024, + "external_data": false + }, + { + "name": "model.10.ffn.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 128, + 1, + 1 + ], + "elements": 32768, + "raw_bytes": 131072, + "external_data": false + }, + { + "name": "model.10.ffn.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "raw_bytes": 512, + "external_data": false + }, + { + "name": "model.10.ffn.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 256, + 1, + 1 + ], + "elements": 32768, + "raw_bytes": 131072, + "external_data": false + }, + { + "name": "model.13.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "raw_bytes": 512, + "external_data": false + }, + { + "name": "model.13.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 384, + 1, + 1 + ], + "elements": 49152, + "raw_bytes": 196608, + "external_data": false + }, + { + "name": "model.13.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "raw_bytes": 512, + "external_data": false + }, + { + "name": "model.13.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 192, + 1, + 1 + ], + "elements": 24576, + "raw_bytes": 98304, + "external_data": false + }, + { + "name": "model.13.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "raw_bytes": 256, + "external_data": false + }, + { + "name": "model.13.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "raw_bytes": 147456, + "external_data": false + }, + { + "name": "model.13.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "raw_bytes": 256, + "external_data": false + }, + { + "name": "model.13.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "raw_bytes": 147456, + "external_data": false + }, + { + "name": "model.16.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "raw_bytes": 256, + "external_data": false + }, + { + "name": "model.16.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 192, + 1, + 1 + ], + "elements": 12288, + "raw_bytes": 49152, + "external_data": false + }, + { + "name": "model.16.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "raw_bytes": 256, + "external_data": false + }, + { + "name": "model.16.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 96, + 1, + 1 + ], + "elements": 6144, + "raw_bytes": 24576, + "external_data": false + }, + { + "name": "model.16.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ], + "elements": 32, + "raw_bytes": 128, + "external_data": false + }, + { + "name": "model.16.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 32, + 3, + 3 + ], + "elements": 9216, + "raw_bytes": 36864, + "external_data": false + }, + { + "name": "model.16.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ], + "elements": 32, + "raw_bytes": 128, + "external_data": false + }, + { + "name": "model.16.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 32, + 3, + 3 + ], + "elements": 9216, + "raw_bytes": 36864, + "external_data": false + }, + { + "name": "model.17.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "raw_bytes": 256, + "external_data": false + }, + { + "name": "model.17.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "raw_bytes": 147456, + "external_data": false + }, + { + "name": "model.19.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "raw_bytes": 512, + "external_data": false + }, + { + "name": "model.19.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 192, + 1, + 1 + ], + "elements": 24576, + "raw_bytes": 98304, + "external_data": false + }, + { + "name": "model.19.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "raw_bytes": 512, + "external_data": false + }, + { + "name": "model.19.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 192, + 1, + 1 + ], + "elements": 24576, + "raw_bytes": 98304, + "external_data": false + }, + { + "name": "model.19.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "raw_bytes": 256, + "external_data": false + }, + { + "name": "model.19.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "raw_bytes": 147456, + "external_data": false + }, + { + "name": "model.19.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "raw_bytes": 256, + "external_data": false + }, + { + "name": "model.19.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "raw_bytes": 147456, + "external_data": false + }, + { + "name": "model.2.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ], + "elements": 32, + "raw_bytes": 128, + "external_data": false + }, + { + "name": "model.2.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 32, + 1, + 1 + ], + "elements": 1024, + "raw_bytes": 4096, + "external_data": false + }, + { + "name": "model.2.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ], + "elements": 32, + "raw_bytes": 128, + "external_data": false + }, + { + "name": "model.2.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 48, + 1, + 1 + ], + "elements": 1536, + "raw_bytes": 6144, + "external_data": false + }, + { + "name": "model.2.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 16 + ], + "elements": 16, + "raw_bytes": 64, + "external_data": false + }, + { + "name": "model.2.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 16, + 16, + 3, + 3 + ], + "elements": 2304, + "raw_bytes": 9216, + "external_data": false + }, + { + "name": "model.2.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 16 + ], + "elements": 16, + "raw_bytes": 64, + "external_data": false + }, + { + "name": "model.2.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 16, + 16, + 3, + 3 + ], + "elements": 2304, + "raw_bytes": 9216, + "external_data": false + }, + { + "name": "model.20.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "raw_bytes": 512, + "external_data": false + }, + { + "name": "model.20.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 128, + 1, + 1 + ], + "elements": 16384, + "raw_bytes": 65536, + "external_data": false + }, + { + "name": "model.20.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "raw_bytes": 512, + "external_data": false + }, + { + "name": "model.20.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 1, + 3, + 3 + ], + "elements": 1152, + "raw_bytes": 4608, + "external_data": false + }, + { + "name": "model.22.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "raw_bytes": 1024, + "external_data": false + }, + { + "name": "model.22.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 384, + 1, + 1 + ], + "elements": 98304, + "raw_bytes": 393216, + "external_data": false + }, + { + "name": "model.22.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "raw_bytes": 1024, + "external_data": false + }, + { + "name": "model.22.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 384, + 1, + 1 + ], + "elements": 98304, + "raw_bytes": 393216, + "external_data": false + }, + { + "name": "model.22.m.0.cv1.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "raw_bytes": 512, + "external_data": false + }, + { + "name": "model.22.m.0.cv1.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 1, + 3, + 3 + ], + "elements": 1152, + "raw_bytes": 4608, + "external_data": false + }, + { + "name": "model.22.m.0.cv1.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "raw_bytes": 1024, + "external_data": false + }, + { + "name": "model.22.m.0.cv1.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 128, + 1, + 1 + ], + "elements": 32768, + "raw_bytes": 131072, + "external_data": false + }, + { + "name": "model.22.m.0.cv1.2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "raw_bytes": 1024, + "external_data": false + }, + { + "name": "model.22.m.0.cv1.2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 1, + 7, + 7 + ], + "elements": 12544, + "raw_bytes": 50176, + "external_data": false + }, + { + "name": "model.22.m.0.cv1.3.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "raw_bytes": 512, + "external_data": false + }, + { + "name": "model.22.m.0.cv1.3.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 256, + 1, + 1 + ], + "elements": 32768, + "raw_bytes": 131072, + "external_data": false + }, + { + "name": "model.22.m.0.cv1.4.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "raw_bytes": 512, + "external_data": false + }, + { + "name": "model.22.m.0.cv1.4.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 1, + 3, + 3 + ], + "elements": 1152, + "raw_bytes": 4608, + "external_data": false + }, + { + "name": "model.23.dfl.conv.weight", + "dtype": "FLOAT", + "shape": [ + 1, + 16, + 1, + 1 + ], + "elements": 16, + "raw_bytes": 64, + "external_data": false + }, + { + "name": "model.23.one2one_cv2.0.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "raw_bytes": 256, + "external_data": false + }, + { + "name": "model.23.one2one_cv2.0.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "raw_bytes": 147456, + "external_data": false + }, + { + "name": "model.23.one2one_cv2.0.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "raw_bytes": 256, + "external_data": false + }, + { + "name": "model.23.one2one_cv2.0.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "raw_bytes": 147456, + "external_data": false + }, + { + "name": "model.23.one2one_cv2.0.2.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "raw_bytes": 256, + "external_data": false + }, + { + "name": "model.23.one2one_cv2.0.2.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 1, + 1 + ], + "elements": 4096, + "raw_bytes": 16384, + "external_data": false + }, + { + "name": "model.23.one2one_cv2.1.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "raw_bytes": 256, + "external_data": false + }, + { + "name": "model.23.one2one_cv2.1.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 128, + 3, + 3 + ], + "elements": 73728, + "raw_bytes": 294912, + "external_data": false + }, + { + "name": "model.23.one2one_cv2.1.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "raw_bytes": 256, + "external_data": false + }, + { + "name": "model.23.one2one_cv2.1.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "raw_bytes": 147456, + "external_data": false + }, + { + "name": "model.23.one2one_cv2.1.2.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "raw_bytes": 256, + "external_data": false + }, + { + "name": "model.23.one2one_cv2.1.2.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 1, + 1 + ], + "elements": 4096, + "raw_bytes": 16384, + "external_data": false + }, + { + "name": "model.23.one2one_cv2.2.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "raw_bytes": 256, + "external_data": false + }, + { + "name": "model.23.one2one_cv2.2.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 256, + 3, + 3 + ], + "elements": 147456, + "raw_bytes": 589824, + "external_data": false + }, + { + "name": "model.23.one2one_cv2.2.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "raw_bytes": 256, + "external_data": false + }, + { + "name": "model.23.one2one_cv2.2.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "raw_bytes": 147456, + "external_data": false + }, + { + "name": "model.23.one2one_cv2.2.2.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "raw_bytes": 256, + "external_data": false + }, + { + "name": "model.23.one2one_cv2.2.2.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 1, + 1 + ], + "elements": 4096, + "raw_bytes": 16384, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.0.0.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "raw_bytes": 256, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.0.0.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 1, + 3, + 3 + ], + "elements": 576, + "raw_bytes": 2304, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.0.0.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ], + "elements": 80, + "raw_bytes": 320, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.0.0.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 64, + 1, + 1 + ], + "elements": 5120, + "raw_bytes": 20480, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.0.1.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ], + "elements": 80, + "raw_bytes": 320, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.0.1.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 1, + 3, + 3 + ], + "elements": 720, + "raw_bytes": 2880, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.0.1.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ], + "elements": 80, + "raw_bytes": 320, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.0.1.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 80, + 1, + 1 + ], + "elements": 6400, + "raw_bytes": 25600, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.0.2.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ], + "elements": 80, + "raw_bytes": 320, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.0.2.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 80, + 1, + 1 + ], + "elements": 6400, + "raw_bytes": 25600, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.1.0.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "raw_bytes": 512, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.1.0.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 1, + 3, + 3 + ], + "elements": 1152, + "raw_bytes": 4608, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.1.0.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ], + "elements": 80, + "raw_bytes": 320, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.1.0.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 128, + 1, + 1 + ], + "elements": 10240, + "raw_bytes": 40960, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.1.1.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ], + "elements": 80, + "raw_bytes": 320, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.1.1.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 1, + 3, + 3 + ], + "elements": 720, + "raw_bytes": 2880, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.1.1.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ], + "elements": 80, + "raw_bytes": 320, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.1.1.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 80, + 1, + 1 + ], + "elements": 6400, + "raw_bytes": 25600, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.1.2.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ], + "elements": 80, + "raw_bytes": 320, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.1.2.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 80, + 1, + 1 + ], + "elements": 6400, + "raw_bytes": 25600, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.2.0.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "raw_bytes": 1024, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.2.0.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 1, + 3, + 3 + ], + "elements": 2304, + "raw_bytes": 9216, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.2.0.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ], + "elements": 80, + "raw_bytes": 320, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.2.0.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 256, + 1, + 1 + ], + "elements": 20480, + "raw_bytes": 81920, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.2.1.0.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ], + "elements": 80, + "raw_bytes": 320, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.2.1.0.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 1, + 3, + 3 + ], + "elements": 720, + "raw_bytes": 2880, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.2.1.1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ], + "elements": 80, + "raw_bytes": 320, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.2.1.1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 80, + 1, + 1 + ], + "elements": 6400, + "raw_bytes": 25600, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.2.2.bias", + "dtype": "FLOAT", + "shape": [ + 80 + ], + "elements": 80, + "raw_bytes": 320, + "external_data": false + }, + { + "name": "model.23.one2one_cv3.2.2.weight", + "dtype": "FLOAT", + "shape": [ + 80, + 80, + 1, + 1 + ], + "elements": 6400, + "raw_bytes": 25600, + "external_data": false + }, + { + "name": "model.3.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "raw_bytes": 256, + "external_data": false + }, + { + "name": "model.3.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 32, + 3, + 3 + ], + "elements": 18432, + "raw_bytes": 73728, + "external_data": false + }, + { + "name": "model.4.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "raw_bytes": 256, + "external_data": false + }, + { + "name": "model.4.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 1, + 1 + ], + "elements": 4096, + "raw_bytes": 16384, + "external_data": false + }, + { + "name": "model.4.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "raw_bytes": 256, + "external_data": false + }, + { + "name": "model.4.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 128, + 1, + 1 + ], + "elements": 8192, + "raw_bytes": 32768, + "external_data": false + }, + { + "name": "model.4.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ], + "elements": 32, + "raw_bytes": 128, + "external_data": false + }, + { + "name": "model.4.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 32, + 3, + 3 + ], + "elements": 9216, + "raw_bytes": 36864, + "external_data": false + }, + { + "name": "model.4.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ], + "elements": 32, + "raw_bytes": 128, + "external_data": false + }, + { + "name": "model.4.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 32, + 3, + 3 + ], + "elements": 9216, + "raw_bytes": 36864, + "external_data": false + }, + { + "name": "model.4.m.1.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ], + "elements": 32, + "raw_bytes": 128, + "external_data": false + }, + { + "name": "model.4.m.1.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 32, + 3, + 3 + ], + "elements": 9216, + "raw_bytes": 36864, + "external_data": false + }, + { + "name": "model.4.m.1.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 32 + ], + "elements": 32, + "raw_bytes": 128, + "external_data": false + }, + { + "name": "model.4.m.1.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 32, + 32, + 3, + 3 + ], + "elements": 9216, + "raw_bytes": 36864, + "external_data": false + }, + { + "name": "model.5.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "raw_bytes": 512, + "external_data": false + }, + { + "name": "model.5.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 64, + 1, + 1 + ], + "elements": 8192, + "raw_bytes": 32768, + "external_data": false + }, + { + "name": "model.5.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "raw_bytes": 512, + "external_data": false + }, + { + "name": "model.5.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 1, + 3, + 3 + ], + "elements": 1152, + "raw_bytes": 4608, + "external_data": false + }, + { + "name": "model.6.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "raw_bytes": 512, + "external_data": false + }, + { + "name": "model.6.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 128, + 1, + 1 + ], + "elements": 16384, + "raw_bytes": 65536, + "external_data": false + }, + { + "name": "model.6.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "raw_bytes": 512, + "external_data": false + }, + { + "name": "model.6.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 256, + 1, + 1 + ], + "elements": 32768, + "raw_bytes": 131072, + "external_data": false + }, + { + "name": "model.6.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "raw_bytes": 256, + "external_data": false + }, + { + "name": "model.6.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "raw_bytes": 147456, + "external_data": false + }, + { + "name": "model.6.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "raw_bytes": 256, + "external_data": false + }, + { + "name": "model.6.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "raw_bytes": 147456, + "external_data": false + }, + { + "name": "model.6.m.1.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "raw_bytes": 256, + "external_data": false + }, + { + "name": "model.6.m.1.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "raw_bytes": 147456, + "external_data": false + }, + { + "name": "model.6.m.1.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 64 + ], + "elements": 64, + "raw_bytes": 256, + "external_data": false + }, + { + "name": "model.6.m.1.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "raw_bytes": 147456, + "external_data": false + }, + { + "name": "model.7.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "raw_bytes": 1024, + "external_data": false + }, + { + "name": "model.7.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 128, + 1, + 1 + ], + "elements": 32768, + "raw_bytes": 131072, + "external_data": false + }, + { + "name": "model.7.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "raw_bytes": 1024, + "external_data": false + }, + { + "name": "model.7.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 1, + 3, + 3 + ], + "elements": 2304, + "raw_bytes": 9216, + "external_data": false + }, + { + "name": "model.8.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "raw_bytes": 1024, + "external_data": false + }, + { + "name": "model.8.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 256, + 1, + 1 + ], + "elements": 65536, + "raw_bytes": 262144, + "external_data": false + }, + { + "name": "model.8.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "raw_bytes": 1024, + "external_data": false + }, + { + "name": "model.8.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 384, + 1, + 1 + ], + "elements": 98304, + "raw_bytes": 393216, + "external_data": false + }, + { + "name": "model.8.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "raw_bytes": 512, + "external_data": false + }, + { + "name": "model.8.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 128, + 3, + 3 + ], + "elements": 147456, + "raw_bytes": 589824, + "external_data": false + }, + { + "name": "model.8.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "raw_bytes": 512, + "external_data": false + }, + { + "name": "model.8.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 128, + 3, + 3 + ], + "elements": 147456, + "raw_bytes": 589824, + "external_data": false + }, + { + "name": "model.9.cv1.conv.bias", + "dtype": "FLOAT", + "shape": [ + 128 + ], + "elements": 128, + "raw_bytes": 512, + "external_data": false + }, + { + "name": "model.9.cv1.conv.weight", + "dtype": "FLOAT", + "shape": [ + 128, + 256, + 1, + 1 + ], + "elements": 32768, + "raw_bytes": 131072, + "external_data": false + }, + { + "name": "model.9.cv2.conv.bias", + "dtype": "FLOAT", + "shape": [ + 256 + ], + "elements": 256, + "raw_bytes": 1024, + "external_data": false + }, + { + "name": "model.9.cv2.conv.weight", + "dtype": "FLOAT", + "shape": [ + 256, + 512, + 1, + 1 + ], + "elements": 131072, + "raw_bytes": 524288, + "external_data": false + }, + { + "name": "onnx::Split_214", + "dtype": "INT64", + "shape": [ + 2 + ], + "elements": 2, + "raw_bytes": 16, + "external_data": false + }, + { + "name": "onnx::Split_225", + "dtype": "INT64", + "shape": [ + 2 + ], + "elements": 2, + "raw_bytes": 16, + "external_data": false + }, + { + "name": "onnx::Split_245", + "dtype": "INT64", + "shape": [ + 2 + ], + "elements": 2, + "raw_bytes": 16, + "external_data": false + }, + { + "name": "onnx::Split_273", + "dtype": "INT64", + "shape": [ + 2 + ], + "elements": 2, + "raw_bytes": 16, + "external_data": false + }, + { + "name": "onnx::Split_301", + "dtype": "INT64", + "shape": [ + 2 + ], + "elements": 2, + "raw_bytes": 16, + "external_data": false + }, + { + "name": "onnx::Split_347", + "dtype": "INT64", + "shape": [ + 3 + ], + "elements": 3, + "raw_bytes": 24, + "external_data": false + }, + { + "name": "onnx::Split_572", + "dtype": "INT64", + "shape": [ + 2 + ], + "elements": 2, + "raw_bytes": 16, + "external_data": false + }, + { + "name": "onnx::Split_612", + "dtype": "INT64", + "shape": [ + 2 + ], + "elements": 2, + "raw_bytes": 16, + "external_data": false + } + ] +} diff --git a/ported_models/yolov10n_hf_reference/manifests/layers.tsv b/ported_models/yolov10n_hf_reference/manifests/layers.tsv new file mode 100644 index 00000000..1b093d12 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/manifests/layers.tsv @@ -0,0 +1,309 @@ +node_id layer_id op_id name op_type inputs outputs +N000 L000 conv_000 /model.0/conv/Conv Conv images:FLOAT:[1, 3, 640, 640] | model.0.conv.weight:FLOAT:[16, 3, 3, 3] | model.0.conv.bias:FLOAT:[16] /model.0/conv/Conv_output_0:FLOAT:[1, 16, 320, 320] +N001 L001 sigmoid_000 /model.0/act/Sigmoid Sigmoid /model.0/conv/Conv_output_0:FLOAT:[1, 16, 320, 320] /model.0/act/Sigmoid_output_0:FLOAT:[1, 16, 320, 320] +N002 L002 mul_000 /model.0/act/Mul Mul /model.0/conv/Conv_output_0:FLOAT:[1, 16, 320, 320] | /model.0/act/Sigmoid_output_0:FLOAT:[1, 16, 320, 320] /model.0/act/Mul_output_0:FLOAT:[1, 16, 320, 320] +N003 L003 conv_001 /model.1/conv/Conv Conv /model.0/act/Mul_output_0:FLOAT:[1, 16, 320, 320] | model.1.conv.weight:FLOAT:[32, 16, 3, 3] | model.1.conv.bias:FLOAT:[32] /model.1/conv/Conv_output_0:FLOAT:[1, 32, 160, 160] +N004 L004 sigmoid_001 /model.1/act/Sigmoid Sigmoid /model.1/conv/Conv_output_0:FLOAT:[1, 32, 160, 160] /model.1/act/Sigmoid_output_0:FLOAT:[1, 32, 160, 160] +N005 L005 mul_001 /model.1/act/Mul Mul /model.1/conv/Conv_output_0:FLOAT:[1, 32, 160, 160] | /model.1/act/Sigmoid_output_0:FLOAT:[1, 32, 160, 160] /model.1/act/Mul_output_0:FLOAT:[1, 32, 160, 160] +N006 L006 conv_002 /model.2/cv1/conv/Conv Conv /model.1/act/Mul_output_0:FLOAT:[1, 32, 160, 160] | model.2.cv1.conv.weight:FLOAT:[32, 32, 1, 1] | model.2.cv1.conv.bias:FLOAT:[32] /model.2/cv1/conv/Conv_output_0:FLOAT:[1, 32, 160, 160] +N007 L007 sigmoid_002 /model.2/cv1/act/Sigmoid Sigmoid /model.2/cv1/conv/Conv_output_0:FLOAT:[1, 32, 160, 160] /model.2/cv1/act/Sigmoid_output_0:FLOAT:[1, 32, 160, 160] +N008 L008 mul_002 /model.2/cv1/act/Mul Mul /model.2/cv1/conv/Conv_output_0:FLOAT:[1, 32, 160, 160] | /model.2/cv1/act/Sigmoid_output_0:FLOAT:[1, 32, 160, 160] /model.2/cv1/act/Mul_output_0:FLOAT:[1, 32, 160, 160] +N009 L009 split_000 /model.2/Split Split /model.2/cv1/act/Mul_output_0:FLOAT:[1, 32, 160, 160] | onnx::Split_225:INT64:[2] /model.2/Split_output_0:FLOAT:[1, 16, 160, 160] | /model.2/Split_output_1:FLOAT:[1, 16, 160, 160] +N010 L010 conv_003 /model.2/m.0/cv1/conv/Conv Conv /model.2/Split_output_1:FLOAT:[1, 16, 160, 160] | model.2.m.0.cv1.conv.weight:FLOAT:[16, 16, 3, 3] | model.2.m.0.cv1.conv.bias:FLOAT:[16] /model.2/m.0/cv1/conv/Conv_output_0:FLOAT:[1, 16, 160, 160] +N011 L011 sigmoid_003 /model.2/m.0/cv1/act/Sigmoid Sigmoid /model.2/m.0/cv1/conv/Conv_output_0:FLOAT:[1, 16, 160, 160] /model.2/m.0/cv1/act/Sigmoid_output_0:FLOAT:[1, 16, 160, 160] +N012 L012 mul_003 /model.2/m.0/cv1/act/Mul Mul /model.2/m.0/cv1/conv/Conv_output_0:FLOAT:[1, 16, 160, 160] | /model.2/m.0/cv1/act/Sigmoid_output_0:FLOAT:[1, 16, 160, 160] /model.2/m.0/cv1/act/Mul_output_0:FLOAT:[1, 16, 160, 160] +N013 L013 conv_004 /model.2/m.0/cv2/conv/Conv Conv /model.2/m.0/cv1/act/Mul_output_0:FLOAT:[1, 16, 160, 160] | model.2.m.0.cv2.conv.weight:FLOAT:[16, 16, 3, 3] | model.2.m.0.cv2.conv.bias:FLOAT:[16] /model.2/m.0/cv2/conv/Conv_output_0:FLOAT:[1, 16, 160, 160] +N014 L014 sigmoid_004 /model.2/m.0/cv2/act/Sigmoid Sigmoid /model.2/m.0/cv2/conv/Conv_output_0:FLOAT:[1, 16, 160, 160] /model.2/m.0/cv2/act/Sigmoid_output_0:FLOAT:[1, 16, 160, 160] +N015 L015 mul_004 /model.2/m.0/cv2/act/Mul Mul /model.2/m.0/cv2/conv/Conv_output_0:FLOAT:[1, 16, 160, 160] | /model.2/m.0/cv2/act/Sigmoid_output_0:FLOAT:[1, 16, 160, 160] /model.2/m.0/cv2/act/Mul_output_0:FLOAT:[1, 16, 160, 160] +N016 L016 add_000 /model.2/m.0/Add Add /model.2/Split_output_1:FLOAT:[1, 16, 160, 160] | /model.2/m.0/cv2/act/Mul_output_0:FLOAT:[1, 16, 160, 160] /model.2/m.0/Add_output_0:FLOAT:[1, 16, 160, 160] +N017 L017 concat_000 /model.2/Concat Concat /model.2/Split_output_0:FLOAT:[1, 16, 160, 160] | /model.2/Split_output_1:FLOAT:[1, 16, 160, 160] | /model.2/m.0/Add_output_0:FLOAT:[1, 16, 160, 160] /model.2/Concat_output_0:FLOAT:[1, 48, 160, 160] +N018 L018 conv_005 /model.2/cv2/conv/Conv Conv /model.2/Concat_output_0:FLOAT:[1, 48, 160, 160] | model.2.cv2.conv.weight:FLOAT:[32, 48, 1, 1] | model.2.cv2.conv.bias:FLOAT:[32] /model.2/cv2/conv/Conv_output_0:FLOAT:[1, 32, 160, 160] +N019 L019 sigmoid_005 /model.2/cv2/act/Sigmoid Sigmoid /model.2/cv2/conv/Conv_output_0:FLOAT:[1, 32, 160, 160] /model.2/cv2/act/Sigmoid_output_0:FLOAT:[1, 32, 160, 160] +N020 L020 mul_005 /model.2/cv2/act/Mul Mul /model.2/cv2/conv/Conv_output_0:FLOAT:[1, 32, 160, 160] | /model.2/cv2/act/Sigmoid_output_0:FLOAT:[1, 32, 160, 160] /model.2/cv2/act/Mul_output_0:FLOAT:[1, 32, 160, 160] +N021 L021 conv_006 /model.3/conv/Conv Conv /model.2/cv2/act/Mul_output_0:FLOAT:[1, 32, 160, 160] | model.3.conv.weight:FLOAT:[64, 32, 3, 3] | model.3.conv.bias:FLOAT:[64] /model.3/conv/Conv_output_0:FLOAT:[1, 64, 80, 80] +N022 L022 sigmoid_006 /model.3/act/Sigmoid Sigmoid /model.3/conv/Conv_output_0:FLOAT:[1, 64, 80, 80] /model.3/act/Sigmoid_output_0:FLOAT:[1, 64, 80, 80] +N023 L023 mul_006 /model.3/act/Mul Mul /model.3/conv/Conv_output_0:FLOAT:[1, 64, 80, 80] | /model.3/act/Sigmoid_output_0:FLOAT:[1, 64, 80, 80] /model.3/act/Mul_output_0:FLOAT:[1, 64, 80, 80] +N024 L024 conv_007 /model.4/cv1/conv/Conv Conv /model.3/act/Mul_output_0:FLOAT:[1, 64, 80, 80] | model.4.cv1.conv.weight:FLOAT:[64, 64, 1, 1] | model.4.cv1.conv.bias:FLOAT:[64] /model.4/cv1/conv/Conv_output_0:FLOAT:[1, 64, 80, 80] +N025 L025 sigmoid_007 /model.4/cv1/act/Sigmoid Sigmoid /model.4/cv1/conv/Conv_output_0:FLOAT:[1, 64, 80, 80] /model.4/cv1/act/Sigmoid_output_0:FLOAT:[1, 64, 80, 80] +N026 L026 mul_007 /model.4/cv1/act/Mul Mul /model.4/cv1/conv/Conv_output_0:FLOAT:[1, 64, 80, 80] | /model.4/cv1/act/Sigmoid_output_0:FLOAT:[1, 64, 80, 80] /model.4/cv1/act/Mul_output_0:FLOAT:[1, 64, 80, 80] +N027 L027 split_001 /model.4/Split Split /model.4/cv1/act/Mul_output_0:FLOAT:[1, 64, 80, 80] | onnx::Split_245:INT64:[2] /model.4/Split_output_0:FLOAT:[1, 32, 80, 80] | /model.4/Split_output_1:FLOAT:[1, 32, 80, 80] +N028 L028 conv_008 /model.4/m.0/cv1/conv/Conv Conv /model.4/Split_output_1:FLOAT:[1, 32, 80, 80] | model.4.m.0.cv1.conv.weight:FLOAT:[32, 32, 3, 3] | model.4.m.0.cv1.conv.bias:FLOAT:[32] /model.4/m.0/cv1/conv/Conv_output_0:FLOAT:[1, 32, 80, 80] +N029 L029 sigmoid_008 /model.4/m.0/cv1/act/Sigmoid Sigmoid /model.4/m.0/cv1/conv/Conv_output_0:FLOAT:[1, 32, 80, 80] /model.4/m.0/cv1/act/Sigmoid_output_0:FLOAT:[1, 32, 80, 80] +N030 L030 mul_008 /model.4/m.0/cv1/act/Mul Mul /model.4/m.0/cv1/conv/Conv_output_0:FLOAT:[1, 32, 80, 80] | /model.4/m.0/cv1/act/Sigmoid_output_0:FLOAT:[1, 32, 80, 80] /model.4/m.0/cv1/act/Mul_output_0:FLOAT:[1, 32, 80, 80] +N031 L031 conv_009 /model.4/m.0/cv2/conv/Conv Conv /model.4/m.0/cv1/act/Mul_output_0:FLOAT:[1, 32, 80, 80] | model.4.m.0.cv2.conv.weight:FLOAT:[32, 32, 3, 3] | model.4.m.0.cv2.conv.bias:FLOAT:[32] /model.4/m.0/cv2/conv/Conv_output_0:FLOAT:[1, 32, 80, 80] +N032 L032 sigmoid_009 /model.4/m.0/cv2/act/Sigmoid Sigmoid /model.4/m.0/cv2/conv/Conv_output_0:FLOAT:[1, 32, 80, 80] /model.4/m.0/cv2/act/Sigmoid_output_0:FLOAT:[1, 32, 80, 80] +N033 L033 mul_009 /model.4/m.0/cv2/act/Mul Mul /model.4/m.0/cv2/conv/Conv_output_0:FLOAT:[1, 32, 80, 80] | /model.4/m.0/cv2/act/Sigmoid_output_0:FLOAT:[1, 32, 80, 80] /model.4/m.0/cv2/act/Mul_output_0:FLOAT:[1, 32, 80, 80] +N034 L034 add_001 /model.4/m.0/Add Add /model.4/Split_output_1:FLOAT:[1, 32, 80, 80] | /model.4/m.0/cv2/act/Mul_output_0:FLOAT:[1, 32, 80, 80] /model.4/m.0/Add_output_0:FLOAT:[1, 32, 80, 80] +N035 L035 conv_010 /model.4/m.1/cv1/conv/Conv Conv /model.4/m.0/Add_output_0:FLOAT:[1, 32, 80, 80] | model.4.m.1.cv1.conv.weight:FLOAT:[32, 32, 3, 3] | model.4.m.1.cv1.conv.bias:FLOAT:[32] /model.4/m.1/cv1/conv/Conv_output_0:FLOAT:[1, 32, 80, 80] +N036 L036 sigmoid_010 /model.4/m.1/cv1/act/Sigmoid Sigmoid /model.4/m.1/cv1/conv/Conv_output_0:FLOAT:[1, 32, 80, 80] /model.4/m.1/cv1/act/Sigmoid_output_0:FLOAT:[1, 32, 80, 80] +N037 L037 mul_010 /model.4/m.1/cv1/act/Mul Mul /model.4/m.1/cv1/conv/Conv_output_0:FLOAT:[1, 32, 80, 80] | /model.4/m.1/cv1/act/Sigmoid_output_0:FLOAT:[1, 32, 80, 80] /model.4/m.1/cv1/act/Mul_output_0:FLOAT:[1, 32, 80, 80] +N038 L038 conv_011 /model.4/m.1/cv2/conv/Conv Conv /model.4/m.1/cv1/act/Mul_output_0:FLOAT:[1, 32, 80, 80] | model.4.m.1.cv2.conv.weight:FLOAT:[32, 32, 3, 3] | model.4.m.1.cv2.conv.bias:FLOAT:[32] /model.4/m.1/cv2/conv/Conv_output_0:FLOAT:[1, 32, 80, 80] +N039 L039 sigmoid_011 /model.4/m.1/cv2/act/Sigmoid Sigmoid /model.4/m.1/cv2/conv/Conv_output_0:FLOAT:[1, 32, 80, 80] /model.4/m.1/cv2/act/Sigmoid_output_0:FLOAT:[1, 32, 80, 80] +N040 L040 mul_011 /model.4/m.1/cv2/act/Mul Mul /model.4/m.1/cv2/conv/Conv_output_0:FLOAT:[1, 32, 80, 80] | /model.4/m.1/cv2/act/Sigmoid_output_0:FLOAT:[1, 32, 80, 80] /model.4/m.1/cv2/act/Mul_output_0:FLOAT:[1, 32, 80, 80] +N041 L041 add_002 /model.4/m.1/Add Add /model.4/m.0/Add_output_0:FLOAT:[1, 32, 80, 80] | /model.4/m.1/cv2/act/Mul_output_0:FLOAT:[1, 32, 80, 80] /model.4/m.1/Add_output_0:FLOAT:[1, 32, 80, 80] +N042 L042 concat_001 /model.4/Concat Concat /model.4/Split_output_0:FLOAT:[1, 32, 80, 80] | /model.4/Split_output_1:FLOAT:[1, 32, 80, 80] | /model.4/m.0/Add_output_0:FLOAT:[1, 32, 80, 80] | /model.4/m.1/Add_output_0:FLOAT:[1, 32, 80, 80] /model.4/Concat_output_0:FLOAT:[1, 128, 80, 80] +N043 L043 conv_012 /model.4/cv2/conv/Conv Conv /model.4/Concat_output_0:FLOAT:[1, 128, 80, 80] | model.4.cv2.conv.weight:FLOAT:[64, 128, 1, 1] | model.4.cv2.conv.bias:FLOAT:[64] /model.4/cv2/conv/Conv_output_0:FLOAT:[1, 64, 80, 80] +N044 L044 sigmoid_012 /model.4/cv2/act/Sigmoid Sigmoid /model.4/cv2/conv/Conv_output_0:FLOAT:[1, 64, 80, 80] /model.4/cv2/act/Sigmoid_output_0:FLOAT:[1, 64, 80, 80] +N045 L045 mul_012 /model.4/cv2/act/Mul Mul /model.4/cv2/conv/Conv_output_0:FLOAT:[1, 64, 80, 80] | /model.4/cv2/act/Sigmoid_output_0:FLOAT:[1, 64, 80, 80] /model.4/cv2/act/Mul_output_0:FLOAT:[1, 64, 80, 80] +N046 L046 conv_013 /model.5/cv1/conv/Conv Conv /model.4/cv2/act/Mul_output_0:FLOAT:[1, 64, 80, 80] | model.5.cv1.conv.weight:FLOAT:[128, 64, 1, 1] | model.5.cv1.conv.bias:FLOAT:[128] /model.5/cv1/conv/Conv_output_0:FLOAT:[1, 128, 80, 80] +N047 L047 sigmoid_013 /model.5/cv1/act/Sigmoid Sigmoid /model.5/cv1/conv/Conv_output_0:FLOAT:[1, 128, 80, 80] /model.5/cv1/act/Sigmoid_output_0:FLOAT:[1, 128, 80, 80] +N048 L048 mul_013 /model.5/cv1/act/Mul Mul /model.5/cv1/conv/Conv_output_0:FLOAT:[1, 128, 80, 80] | /model.5/cv1/act/Sigmoid_output_0:FLOAT:[1, 128, 80, 80] /model.5/cv1/act/Mul_output_0:FLOAT:[1, 128, 80, 80] +N049 L049 conv_014 /model.5/cv2/conv/Conv Conv /model.5/cv1/act/Mul_output_0:FLOAT:[1, 128, 80, 80] | model.5.cv2.conv.weight:FLOAT:[128, 1, 3, 3] | model.5.cv2.conv.bias:FLOAT:[128] /model.5/cv2/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] +N050 L050 conv_015 /model.6/cv1/conv/Conv Conv /model.5/cv2/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] | model.6.cv1.conv.weight:FLOAT:[128, 128, 1, 1] | model.6.cv1.conv.bias:FLOAT:[128] /model.6/cv1/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] +N051 L051 sigmoid_014 /model.6/cv1/act/Sigmoid Sigmoid /model.6/cv1/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] /model.6/cv1/act/Sigmoid_output_0:FLOAT:[1, 128, 40, 40] +N052 L052 mul_014 /model.6/cv1/act/Mul Mul /model.6/cv1/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] | /model.6/cv1/act/Sigmoid_output_0:FLOAT:[1, 128, 40, 40] /model.6/cv1/act/Mul_output_0:FLOAT:[1, 128, 40, 40] +N053 L053 split_002 /model.6/Split Split /model.6/cv1/act/Mul_output_0:FLOAT:[1, 128, 40, 40] | onnx::Split_273:INT64:[2] /model.6/Split_output_0:FLOAT:[1, 64, 40, 40] | /model.6/Split_output_1:FLOAT:[1, 64, 40, 40] +N054 L054 conv_016 /model.6/m.0/cv1/conv/Conv Conv /model.6/Split_output_1:FLOAT:[1, 64, 40, 40] | model.6.m.0.cv1.conv.weight:FLOAT:[64, 64, 3, 3] | model.6.m.0.cv1.conv.bias:FLOAT:[64] /model.6/m.0/cv1/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] +N055 L055 sigmoid_015 /model.6/m.0/cv1/act/Sigmoid Sigmoid /model.6/m.0/cv1/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] /model.6/m.0/cv1/act/Sigmoid_output_0:FLOAT:[1, 64, 40, 40] +N056 L056 mul_015 /model.6/m.0/cv1/act/Mul Mul /model.6/m.0/cv1/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] | /model.6/m.0/cv1/act/Sigmoid_output_0:FLOAT:[1, 64, 40, 40] /model.6/m.0/cv1/act/Mul_output_0:FLOAT:[1, 64, 40, 40] +N057 L057 conv_017 /model.6/m.0/cv2/conv/Conv Conv /model.6/m.0/cv1/act/Mul_output_0:FLOAT:[1, 64, 40, 40] | model.6.m.0.cv2.conv.weight:FLOAT:[64, 64, 3, 3] | model.6.m.0.cv2.conv.bias:FLOAT:[64] /model.6/m.0/cv2/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] +N058 L058 sigmoid_016 /model.6/m.0/cv2/act/Sigmoid Sigmoid /model.6/m.0/cv2/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] /model.6/m.0/cv2/act/Sigmoid_output_0:FLOAT:[1, 64, 40, 40] +N059 L059 mul_016 /model.6/m.0/cv2/act/Mul Mul /model.6/m.0/cv2/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] | /model.6/m.0/cv2/act/Sigmoid_output_0:FLOAT:[1, 64, 40, 40] /model.6/m.0/cv2/act/Mul_output_0:FLOAT:[1, 64, 40, 40] +N060 L060 add_003 /model.6/m.0/Add Add /model.6/Split_output_1:FLOAT:[1, 64, 40, 40] | /model.6/m.0/cv2/act/Mul_output_0:FLOAT:[1, 64, 40, 40] /model.6/m.0/Add_output_0:FLOAT:[1, 64, 40, 40] +N061 L061 conv_018 /model.6/m.1/cv1/conv/Conv Conv /model.6/m.0/Add_output_0:FLOAT:[1, 64, 40, 40] | model.6.m.1.cv1.conv.weight:FLOAT:[64, 64, 3, 3] | model.6.m.1.cv1.conv.bias:FLOAT:[64] /model.6/m.1/cv1/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] +N062 L062 sigmoid_017 /model.6/m.1/cv1/act/Sigmoid Sigmoid /model.6/m.1/cv1/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] /model.6/m.1/cv1/act/Sigmoid_output_0:FLOAT:[1, 64, 40, 40] +N063 L063 mul_017 /model.6/m.1/cv1/act/Mul Mul /model.6/m.1/cv1/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] | /model.6/m.1/cv1/act/Sigmoid_output_0:FLOAT:[1, 64, 40, 40] /model.6/m.1/cv1/act/Mul_output_0:FLOAT:[1, 64, 40, 40] +N064 L064 conv_019 /model.6/m.1/cv2/conv/Conv Conv /model.6/m.1/cv1/act/Mul_output_0:FLOAT:[1, 64, 40, 40] | model.6.m.1.cv2.conv.weight:FLOAT:[64, 64, 3, 3] | model.6.m.1.cv2.conv.bias:FLOAT:[64] /model.6/m.1/cv2/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] +N065 L065 sigmoid_018 /model.6/m.1/cv2/act/Sigmoid Sigmoid /model.6/m.1/cv2/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] /model.6/m.1/cv2/act/Sigmoid_output_0:FLOAT:[1, 64, 40, 40] +N066 L066 mul_018 /model.6/m.1/cv2/act/Mul Mul /model.6/m.1/cv2/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] | /model.6/m.1/cv2/act/Sigmoid_output_0:FLOAT:[1, 64, 40, 40] /model.6/m.1/cv2/act/Mul_output_0:FLOAT:[1, 64, 40, 40] +N067 L067 add_004 /model.6/m.1/Add Add /model.6/m.0/Add_output_0:FLOAT:[1, 64, 40, 40] | /model.6/m.1/cv2/act/Mul_output_0:FLOAT:[1, 64, 40, 40] /model.6/m.1/Add_output_0:FLOAT:[1, 64, 40, 40] +N068 L068 concat_002 /model.6/Concat Concat /model.6/Split_output_0:FLOAT:[1, 64, 40, 40] | /model.6/Split_output_1:FLOAT:[1, 64, 40, 40] | /model.6/m.0/Add_output_0:FLOAT:[1, 64, 40, 40] | /model.6/m.1/Add_output_0:FLOAT:[1, 64, 40, 40] /model.6/Concat_output_0:FLOAT:[1, 256, 40, 40] +N069 L069 conv_020 /model.6/cv2/conv/Conv Conv /model.6/Concat_output_0:FLOAT:[1, 256, 40, 40] | model.6.cv2.conv.weight:FLOAT:[128, 256, 1, 1] | model.6.cv2.conv.bias:FLOAT:[128] /model.6/cv2/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] +N070 L070 sigmoid_019 /model.6/cv2/act/Sigmoid Sigmoid /model.6/cv2/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] /model.6/cv2/act/Sigmoid_output_0:FLOAT:[1, 128, 40, 40] +N071 L071 mul_019 /model.6/cv2/act/Mul Mul /model.6/cv2/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] | /model.6/cv2/act/Sigmoid_output_0:FLOAT:[1, 128, 40, 40] /model.6/cv2/act/Mul_output_0:FLOAT:[1, 128, 40, 40] +N072 L072 conv_021 /model.7/cv1/conv/Conv Conv /model.6/cv2/act/Mul_output_0:FLOAT:[1, 128, 40, 40] | model.7.cv1.conv.weight:FLOAT:[256, 128, 1, 1] | model.7.cv1.conv.bias:FLOAT:[256] /model.7/cv1/conv/Conv_output_0:FLOAT:[1, 256, 40, 40] +N073 L073 sigmoid_020 /model.7/cv1/act/Sigmoid Sigmoid /model.7/cv1/conv/Conv_output_0:FLOAT:[1, 256, 40, 40] /model.7/cv1/act/Sigmoid_output_0:FLOAT:[1, 256, 40, 40] +N074 L074 mul_020 /model.7/cv1/act/Mul Mul /model.7/cv1/conv/Conv_output_0:FLOAT:[1, 256, 40, 40] | /model.7/cv1/act/Sigmoid_output_0:FLOAT:[1, 256, 40, 40] /model.7/cv1/act/Mul_output_0:FLOAT:[1, 256, 40, 40] +N075 L075 conv_022 /model.7/cv2/conv/Conv Conv /model.7/cv1/act/Mul_output_0:FLOAT:[1, 256, 40, 40] | model.7.cv2.conv.weight:FLOAT:[256, 1, 3, 3] | model.7.cv2.conv.bias:FLOAT:[256] /model.7/cv2/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] +N076 L076 conv_023 /model.8/cv1/conv/Conv Conv /model.7/cv2/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] | model.8.cv1.conv.weight:FLOAT:[256, 256, 1, 1] | model.8.cv1.conv.bias:FLOAT:[256] /model.8/cv1/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] +N077 L077 sigmoid_021 /model.8/cv1/act/Sigmoid Sigmoid /model.8/cv1/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] /model.8/cv1/act/Sigmoid_output_0:FLOAT:[1, 256, 20, 20] +N078 L078 mul_021 /model.8/cv1/act/Mul Mul /model.8/cv1/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] | /model.8/cv1/act/Sigmoid_output_0:FLOAT:[1, 256, 20, 20] /model.8/cv1/act/Mul_output_0:FLOAT:[1, 256, 20, 20] +N079 L079 split_003 /model.8/Split Split /model.8/cv1/act/Mul_output_0:FLOAT:[1, 256, 20, 20] | onnx::Split_301:INT64:[2] /model.8/Split_output_0:FLOAT:[1, 128, 20, 20] | /model.8/Split_output_1:FLOAT:[1, 128, 20, 20] +N080 L080 conv_024 /model.8/m.0/cv1/conv/Conv Conv /model.8/Split_output_1:FLOAT:[1, 128, 20, 20] | model.8.m.0.cv1.conv.weight:FLOAT:[128, 128, 3, 3] | model.8.m.0.cv1.conv.bias:FLOAT:[128] /model.8/m.0/cv1/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] +N081 L081 sigmoid_022 /model.8/m.0/cv1/act/Sigmoid Sigmoid /model.8/m.0/cv1/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] /model.8/m.0/cv1/act/Sigmoid_output_0:FLOAT:[1, 128, 20, 20] +N082 L082 mul_022 /model.8/m.0/cv1/act/Mul Mul /model.8/m.0/cv1/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] | /model.8/m.0/cv1/act/Sigmoid_output_0:FLOAT:[1, 128, 20, 20] /model.8/m.0/cv1/act/Mul_output_0:FLOAT:[1, 128, 20, 20] +N083 L083 conv_025 /model.8/m.0/cv2/conv/Conv Conv /model.8/m.0/cv1/act/Mul_output_0:FLOAT:[1, 128, 20, 20] | model.8.m.0.cv2.conv.weight:FLOAT:[128, 128, 3, 3] | model.8.m.0.cv2.conv.bias:FLOAT:[128] /model.8/m.0/cv2/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] +N084 L084 sigmoid_023 /model.8/m.0/cv2/act/Sigmoid Sigmoid /model.8/m.0/cv2/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] /model.8/m.0/cv2/act/Sigmoid_output_0:FLOAT:[1, 128, 20, 20] +N085 L085 mul_023 /model.8/m.0/cv2/act/Mul Mul /model.8/m.0/cv2/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] | /model.8/m.0/cv2/act/Sigmoid_output_0:FLOAT:[1, 128, 20, 20] /model.8/m.0/cv2/act/Mul_output_0:FLOAT:[1, 128, 20, 20] +N086 L086 add_005 /model.8/m.0/Add Add /model.8/Split_output_1:FLOAT:[1, 128, 20, 20] | /model.8/m.0/cv2/act/Mul_output_0:FLOAT:[1, 128, 20, 20] /model.8/m.0/Add_output_0:FLOAT:[1, 128, 20, 20] +N087 L087 concat_003 /model.8/Concat Concat /model.8/Split_output_0:FLOAT:[1, 128, 20, 20] | /model.8/Split_output_1:FLOAT:[1, 128, 20, 20] | /model.8/m.0/Add_output_0:FLOAT:[1, 128, 20, 20] /model.8/Concat_output_0:FLOAT:[1, 384, 20, 20] +N088 L088 conv_026 /model.8/cv2/conv/Conv Conv /model.8/Concat_output_0:FLOAT:[1, 384, 20, 20] | model.8.cv2.conv.weight:FLOAT:[256, 384, 1, 1] | model.8.cv2.conv.bias:FLOAT:[256] /model.8/cv2/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] +N089 L089 sigmoid_024 /model.8/cv2/act/Sigmoid Sigmoid /model.8/cv2/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] /model.8/cv2/act/Sigmoid_output_0:FLOAT:[1, 256, 20, 20] +N090 L090 mul_024 /model.8/cv2/act/Mul Mul /model.8/cv2/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] | /model.8/cv2/act/Sigmoid_output_0:FLOAT:[1, 256, 20, 20] /model.8/cv2/act/Mul_output_0:FLOAT:[1, 256, 20, 20] +N091 L091 conv_027 /model.9/cv1/conv/Conv Conv /model.8/cv2/act/Mul_output_0:FLOAT:[1, 256, 20, 20] | model.9.cv1.conv.weight:FLOAT:[128, 256, 1, 1] | model.9.cv1.conv.bias:FLOAT:[128] /model.9/cv1/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] +N092 L092 sigmoid_025 /model.9/cv1/act/Sigmoid Sigmoid /model.9/cv1/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] /model.9/cv1/act/Sigmoid_output_0:FLOAT:[1, 128, 20, 20] +N093 L093 mul_025 /model.9/cv1/act/Mul Mul /model.9/cv1/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] | /model.9/cv1/act/Sigmoid_output_0:FLOAT:[1, 128, 20, 20] /model.9/cv1/act/Mul_output_0:FLOAT:[1, 128, 20, 20] +N094 L094 maxpool_000 /model.9/m/MaxPool MaxPool /model.9/cv1/act/Mul_output_0:FLOAT:[1, 128, 20, 20] /model.9/m/MaxPool_output_0:FLOAT:[1, 128, 20, 20] +N095 L095 maxpool_001 /model.9/m_1/MaxPool MaxPool /model.9/m/MaxPool_output_0:FLOAT:[1, 128, 20, 20] /model.9/m_1/MaxPool_output_0:FLOAT:[1, 128, 20, 20] +N096 L096 maxpool_002 /model.9/m_2/MaxPool MaxPool /model.9/m_1/MaxPool_output_0:FLOAT:[1, 128, 20, 20] /model.9/m_2/MaxPool_output_0:FLOAT:[1, 128, 20, 20] +N097 L097 concat_004 /model.9/Concat Concat /model.9/cv1/act/Mul_output_0:FLOAT:[1, 128, 20, 20] | /model.9/m/MaxPool_output_0:FLOAT:[1, 128, 20, 20] | /model.9/m_1/MaxPool_output_0:FLOAT:[1, 128, 20, 20] | /model.9/m_2/MaxPool_output_0:FLOAT:[1, 128, 20, 20] /model.9/Concat_output_0:FLOAT:[1, 512, 20, 20] +N098 L098 conv_028 /model.9/cv2/conv/Conv Conv /model.9/Concat_output_0:FLOAT:[1, 512, 20, 20] | model.9.cv2.conv.weight:FLOAT:[256, 512, 1, 1] | model.9.cv2.conv.bias:FLOAT:[256] /model.9/cv2/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] +N099 L099 sigmoid_026 /model.9/cv2/act/Sigmoid Sigmoid /model.9/cv2/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] /model.9/cv2/act/Sigmoid_output_0:FLOAT:[1, 256, 20, 20] +N100 L100 mul_026 /model.9/cv2/act/Mul Mul /model.9/cv2/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] | /model.9/cv2/act/Sigmoid_output_0:FLOAT:[1, 256, 20, 20] /model.9/cv2/act/Mul_output_0:FLOAT:[1, 256, 20, 20] +N101 L101 conv_029 /model.10/cv1/conv/Conv Conv /model.9/cv2/act/Mul_output_0:FLOAT:[1, 256, 20, 20] | model.10.cv1.conv.weight:FLOAT:[256, 256, 1, 1] | model.10.cv1.conv.bias:FLOAT:[256] /model.10/cv1/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] +N102 L102 sigmoid_027 /model.10/cv1/act/Sigmoid Sigmoid /model.10/cv1/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] /model.10/cv1/act/Sigmoid_output_0:FLOAT:[1, 256, 20, 20] +N103 L103 mul_027 /model.10/cv1/act/Mul Mul /model.10/cv1/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] | /model.10/cv1/act/Sigmoid_output_0:FLOAT:[1, 256, 20, 20] /model.10/cv1/act/Mul_output_0:FLOAT:[1, 256, 20, 20] +N104 L104 split_004 /model.10/Split Split /model.10/cv1/act/Mul_output_0:FLOAT:[1, 256, 20, 20] | onnx::Split_301:INT64:[2] /model.10/Split_output_0:FLOAT:[1, 128, 20, 20] | /model.10/Split_output_1:FLOAT:[1, 128, 20, 20] +N105 L105 conv_030 /model.10/attn/qkv/conv/Conv Conv /model.10/Split_output_1:FLOAT:[1, 128, 20, 20] | model.10.attn.qkv.conv.weight:FLOAT:[256, 128, 1, 1] | model.10.attn.qkv.conv.bias:FLOAT:[256] /model.10/attn/qkv/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] +N106 L106 reshape_000 /model.10/attn/Reshape Reshape /model.10/attn/qkv/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] | /model.10/attn/Constant_output_0:INT64:[4] /model.10/attn/Reshape_output_0:FLOAT:[1, 2, 128, 400] +N107 L107 split_005 /model.10/attn/Split Split /model.10/attn/Reshape_output_0:FLOAT:[1, 2, 128, 400] | onnx::Split_347:INT64:[3] /model.10/attn/Split_output_0:FLOAT:[1, 2, 32, 400] | /model.10/attn/Split_output_1:FLOAT:[1, 2, 32, 400] | /model.10/attn/Split_output_2:FLOAT:[1, 2, 64, 400] +N108 L108 transpose_000 /model.10/attn/Transpose Transpose /model.10/attn/Split_output_0:FLOAT:[1, 2, 32, 400] /model.10/attn/Transpose_output_0:FLOAT:[1, 2, 400, 32] +N109 L109 matmul_000 /model.10/attn/MatMul MatMul /model.10/attn/Transpose_output_0:FLOAT:[1, 2, 400, 32] | /model.10/attn/Split_output_1:FLOAT:[1, 2, 32, 400] /model.10/attn/MatMul_output_0:FLOAT:[1, 2, 400, 400] +N110 L110 mul_028 /model.10/attn/Mul Mul /model.10/attn/MatMul_output_0:FLOAT:[1, 2, 400, 400] | /model.10/attn/Constant_1_output_0:FLOAT:[] /model.10/attn/Mul_output_0:FLOAT:[1, 2, 400, 400] +N111 L111 softmax_000 /model.10/attn/Softmax Softmax /model.10/attn/Mul_output_0:FLOAT:[1, 2, 400, 400] /model.10/attn/Softmax_output_0:FLOAT:[1, 2, 400, 400] +N112 L112 transpose_001 /model.10/attn/Transpose_1 Transpose /model.10/attn/Softmax_output_0:FLOAT:[1, 2, 400, 400] /model.10/attn/Transpose_1_output_0:FLOAT:[1, 2, 400, 400] +N113 L113 matmul_001 /model.10/attn/MatMul_1 MatMul /model.10/attn/Split_output_2:FLOAT:[1, 2, 64, 400] | /model.10/attn/Transpose_1_output_0:FLOAT:[1, 2, 400, 400] /model.10/attn/MatMul_1_output_0:FLOAT:[1, 2, 64, 400] +N114 L114 reshape_001 /model.10/attn/Reshape_1 Reshape /model.10/attn/MatMul_1_output_0:FLOAT:[1, 2, 64, 400] | /model.10/attn/Constant_2_output_0:INT64:[4] /model.10/attn/Reshape_1_output_0:FLOAT:[1, 128, 20, 20] +N115 L115 reshape_002 /model.10/attn/Reshape_2 Reshape /model.10/attn/Split_output_2:FLOAT:[1, 2, 64, 400] | /model.10/attn/Constant_2_output_0:INT64:[4] /model.10/attn/Reshape_2_output_0:FLOAT:[1, 128, 20, 20] +N116 L116 conv_031 /model.10/attn/pe/conv/Conv Conv /model.10/attn/Reshape_2_output_0:FLOAT:[1, 128, 20, 20] | model.10.attn.pe.conv.weight:FLOAT:[128, 1, 3, 3] | model.10.attn.pe.conv.bias:FLOAT:[128] /model.10/attn/pe/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] +N117 L117 add_006 /model.10/attn/Add Add /model.10/attn/Reshape_1_output_0:FLOAT:[1, 128, 20, 20] | /model.10/attn/pe/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] /model.10/attn/Add_output_0:FLOAT:[1, 128, 20, 20] +N118 L118 conv_032 /model.10/attn/proj/conv/Conv Conv /model.10/attn/Add_output_0:FLOAT:[1, 128, 20, 20] | model.10.attn.proj.conv.weight:FLOAT:[128, 128, 1, 1] | model.10.attn.proj.conv.bias:FLOAT:[128] /model.10/attn/proj/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] +N119 L119 add_007 /model.10/Add Add /model.10/Split_output_1:FLOAT:[1, 128, 20, 20] | /model.10/attn/proj/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] /model.10/Add_output_0:FLOAT:[1, 128, 20, 20] +N120 L120 conv_033 /model.10/ffn/ffn.0/conv/Conv Conv /model.10/Add_output_0:FLOAT:[1, 128, 20, 20] | model.10.ffn.0.conv.weight:FLOAT:[256, 128, 1, 1] | model.10.ffn.0.conv.bias:FLOAT:[256] /model.10/ffn/ffn.0/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] +N121 L121 sigmoid_028 /model.10/ffn/ffn.0/act/Sigmoid Sigmoid /model.10/ffn/ffn.0/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] /model.10/ffn/ffn.0/act/Sigmoid_output_0:FLOAT:[1, 256, 20, 20] +N122 L122 mul_029 /model.10/ffn/ffn.0/act/Mul Mul /model.10/ffn/ffn.0/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] | /model.10/ffn/ffn.0/act/Sigmoid_output_0:FLOAT:[1, 256, 20, 20] /model.10/ffn/ffn.0/act/Mul_output_0:FLOAT:[1, 256, 20, 20] +N123 L123 conv_034 /model.10/ffn/ffn.1/conv/Conv Conv /model.10/ffn/ffn.0/act/Mul_output_0:FLOAT:[1, 256, 20, 20] | model.10.ffn.1.conv.weight:FLOAT:[128, 256, 1, 1] | model.10.ffn.1.conv.bias:FLOAT:[128] /model.10/ffn/ffn.1/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] +N124 L124 add_008 /model.10/Add_1 Add /model.10/Add_output_0:FLOAT:[1, 128, 20, 20] | /model.10/ffn/ffn.1/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] /model.10/Add_1_output_0:FLOAT:[1, 128, 20, 20] +N125 L125 concat_005 /model.10/Concat Concat /model.10/Split_output_0:FLOAT:[1, 128, 20, 20] | /model.10/Add_1_output_0:FLOAT:[1, 128, 20, 20] /model.10/Concat_output_0:FLOAT:[1, 256, 20, 20] +N126 L126 conv_035 /model.10/cv2/conv/Conv Conv /model.10/Concat_output_0:FLOAT:[1, 256, 20, 20] | model.10.cv2.conv.weight:FLOAT:[256, 256, 1, 1] | model.10.cv2.conv.bias:FLOAT:[256] /model.10/cv2/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] +N127 L127 sigmoid_029 /model.10/cv2/act/Sigmoid Sigmoid /model.10/cv2/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] /model.10/cv2/act/Sigmoid_output_0:FLOAT:[1, 256, 20, 20] +N128 L128 mul_030 /model.10/cv2/act/Mul Mul /model.10/cv2/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] | /model.10/cv2/act/Sigmoid_output_0:FLOAT:[1, 256, 20, 20] /model.10/cv2/act/Mul_output_0:FLOAT:[1, 256, 20, 20] +N129 L129 resize_000 /model.11/Resize Resize /model.10/cv2/act/Mul_output_0:FLOAT:[1, 256, 20, 20] | :None:None | /model.11/Constant_output_0:FLOAT:[4] /model.11/Resize_output_0:FLOAT:[1, 256, 40, 40] +N130 L130 concat_006 /model.12/Concat Concat /model.11/Resize_output_0:FLOAT:[1, 256, 40, 40] | /model.6/cv2/act/Mul_output_0:FLOAT:[1, 128, 40, 40] /model.12/Concat_output_0:FLOAT:[1, 384, 40, 40] +N131 L131 conv_036 /model.13/cv1/conv/Conv Conv /model.12/Concat_output_0:FLOAT:[1, 384, 40, 40] | model.13.cv1.conv.weight:FLOAT:[128, 384, 1, 1] | model.13.cv1.conv.bias:FLOAT:[128] /model.13/cv1/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] +N132 L132 sigmoid_030 /model.13/cv1/act/Sigmoid Sigmoid /model.13/cv1/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] /model.13/cv1/act/Sigmoid_output_0:FLOAT:[1, 128, 40, 40] +N133 L133 mul_031 /model.13/cv1/act/Mul Mul /model.13/cv1/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] | /model.13/cv1/act/Sigmoid_output_0:FLOAT:[1, 128, 40, 40] /model.13/cv1/act/Mul_output_0:FLOAT:[1, 128, 40, 40] +N134 L134 split_006 /model.13/Split Split /model.13/cv1/act/Mul_output_0:FLOAT:[1, 128, 40, 40] | onnx::Split_273:INT64:[2] /model.13/Split_output_0:FLOAT:[1, 64, 40, 40] | /model.13/Split_output_1:FLOAT:[1, 64, 40, 40] +N135 L135 conv_037 /model.13/m.0/cv1/conv/Conv Conv /model.13/Split_output_1:FLOAT:[1, 64, 40, 40] | model.13.m.0.cv1.conv.weight:FLOAT:[64, 64, 3, 3] | model.13.m.0.cv1.conv.bias:FLOAT:[64] /model.13/m.0/cv1/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] +N136 L136 sigmoid_031 /model.13/m.0/cv1/act/Sigmoid Sigmoid /model.13/m.0/cv1/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] /model.13/m.0/cv1/act/Sigmoid_output_0:FLOAT:[1, 64, 40, 40] +N137 L137 mul_032 /model.13/m.0/cv1/act/Mul Mul /model.13/m.0/cv1/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] | /model.13/m.0/cv1/act/Sigmoid_output_0:FLOAT:[1, 64, 40, 40] /model.13/m.0/cv1/act/Mul_output_0:FLOAT:[1, 64, 40, 40] +N138 L138 conv_038 /model.13/m.0/cv2/conv/Conv Conv /model.13/m.0/cv1/act/Mul_output_0:FLOAT:[1, 64, 40, 40] | model.13.m.0.cv2.conv.weight:FLOAT:[64, 64, 3, 3] | model.13.m.0.cv2.conv.bias:FLOAT:[64] /model.13/m.0/cv2/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] +N139 L139 sigmoid_032 /model.13/m.0/cv2/act/Sigmoid Sigmoid /model.13/m.0/cv2/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] /model.13/m.0/cv2/act/Sigmoid_output_0:FLOAT:[1, 64, 40, 40] +N140 L140 mul_033 /model.13/m.0/cv2/act/Mul Mul /model.13/m.0/cv2/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] | /model.13/m.0/cv2/act/Sigmoid_output_0:FLOAT:[1, 64, 40, 40] /model.13/m.0/cv2/act/Mul_output_0:FLOAT:[1, 64, 40, 40] +N141 L141 concat_007 /model.13/Concat Concat /model.13/Split_output_0:FLOAT:[1, 64, 40, 40] | /model.13/Split_output_1:FLOAT:[1, 64, 40, 40] | /model.13/m.0/cv2/act/Mul_output_0:FLOAT:[1, 64, 40, 40] /model.13/Concat_output_0:FLOAT:[1, 192, 40, 40] +N142 L142 conv_039 /model.13/cv2/conv/Conv Conv /model.13/Concat_output_0:FLOAT:[1, 192, 40, 40] | model.13.cv2.conv.weight:FLOAT:[128, 192, 1, 1] | model.13.cv2.conv.bias:FLOAT:[128] /model.13/cv2/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] +N143 L143 sigmoid_033 /model.13/cv2/act/Sigmoid Sigmoid /model.13/cv2/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] /model.13/cv2/act/Sigmoid_output_0:FLOAT:[1, 128, 40, 40] +N144 L144 mul_034 /model.13/cv2/act/Mul Mul /model.13/cv2/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] | /model.13/cv2/act/Sigmoid_output_0:FLOAT:[1, 128, 40, 40] /model.13/cv2/act/Mul_output_0:FLOAT:[1, 128, 40, 40] +N145 L145 resize_001 /model.14/Resize Resize /model.13/cv2/act/Mul_output_0:FLOAT:[1, 128, 40, 40] | :None:None | /model.11/Constant_output_0:FLOAT:[4] /model.14/Resize_output_0:FLOAT:[1, 128, 80, 80] +N146 L146 concat_008 /model.15/Concat Concat /model.14/Resize_output_0:FLOAT:[1, 128, 80, 80] | /model.4/cv2/act/Mul_output_0:FLOAT:[1, 64, 80, 80] /model.15/Concat_output_0:FLOAT:[1, 192, 80, 80] +N147 L147 conv_040 /model.16/cv1/conv/Conv Conv /model.15/Concat_output_0:FLOAT:[1, 192, 80, 80] | model.16.cv1.conv.weight:FLOAT:[64, 192, 1, 1] | model.16.cv1.conv.bias:FLOAT:[64] /model.16/cv1/conv/Conv_output_0:FLOAT:[1, 64, 80, 80] +N148 L148 sigmoid_034 /model.16/cv1/act/Sigmoid Sigmoid /model.16/cv1/conv/Conv_output_0:FLOAT:[1, 64, 80, 80] /model.16/cv1/act/Sigmoid_output_0:FLOAT:[1, 64, 80, 80] +N149 L149 mul_035 /model.16/cv1/act/Mul Mul /model.16/cv1/conv/Conv_output_0:FLOAT:[1, 64, 80, 80] | /model.16/cv1/act/Sigmoid_output_0:FLOAT:[1, 64, 80, 80] /model.16/cv1/act/Mul_output_0:FLOAT:[1, 64, 80, 80] +N150 L150 split_007 /model.16/Split Split /model.16/cv1/act/Mul_output_0:FLOAT:[1, 64, 80, 80] | onnx::Split_245:INT64:[2] /model.16/Split_output_0:FLOAT:[1, 32, 80, 80] | /model.16/Split_output_1:FLOAT:[1, 32, 80, 80] +N151 L151 conv_041 /model.16/m.0/cv1/conv/Conv Conv /model.16/Split_output_1:FLOAT:[1, 32, 80, 80] | model.16.m.0.cv1.conv.weight:FLOAT:[32, 32, 3, 3] | model.16.m.0.cv1.conv.bias:FLOAT:[32] /model.16/m.0/cv1/conv/Conv_output_0:FLOAT:[1, 32, 80, 80] +N152 L152 sigmoid_035 /model.16/m.0/cv1/act/Sigmoid Sigmoid /model.16/m.0/cv1/conv/Conv_output_0:FLOAT:[1, 32, 80, 80] /model.16/m.0/cv1/act/Sigmoid_output_0:FLOAT:[1, 32, 80, 80] +N153 L153 mul_036 /model.16/m.0/cv1/act/Mul Mul /model.16/m.0/cv1/conv/Conv_output_0:FLOAT:[1, 32, 80, 80] | /model.16/m.0/cv1/act/Sigmoid_output_0:FLOAT:[1, 32, 80, 80] /model.16/m.0/cv1/act/Mul_output_0:FLOAT:[1, 32, 80, 80] +N154 L154 conv_042 /model.16/m.0/cv2/conv/Conv Conv /model.16/m.0/cv1/act/Mul_output_0:FLOAT:[1, 32, 80, 80] | model.16.m.0.cv2.conv.weight:FLOAT:[32, 32, 3, 3] | model.16.m.0.cv2.conv.bias:FLOAT:[32] /model.16/m.0/cv2/conv/Conv_output_0:FLOAT:[1, 32, 80, 80] +N155 L155 sigmoid_036 /model.16/m.0/cv2/act/Sigmoid Sigmoid /model.16/m.0/cv2/conv/Conv_output_0:FLOAT:[1, 32, 80, 80] /model.16/m.0/cv2/act/Sigmoid_output_0:FLOAT:[1, 32, 80, 80] +N156 L156 mul_037 /model.16/m.0/cv2/act/Mul Mul /model.16/m.0/cv2/conv/Conv_output_0:FLOAT:[1, 32, 80, 80] | /model.16/m.0/cv2/act/Sigmoid_output_0:FLOAT:[1, 32, 80, 80] /model.16/m.0/cv2/act/Mul_output_0:FLOAT:[1, 32, 80, 80] +N157 L157 concat_009 /model.16/Concat Concat /model.16/Split_output_0:FLOAT:[1, 32, 80, 80] | /model.16/Split_output_1:FLOAT:[1, 32, 80, 80] | /model.16/m.0/cv2/act/Mul_output_0:FLOAT:[1, 32, 80, 80] /model.16/Concat_output_0:FLOAT:[1, 96, 80, 80] +N158 L158 conv_043 /model.16/cv2/conv/Conv Conv /model.16/Concat_output_0:FLOAT:[1, 96, 80, 80] | model.16.cv2.conv.weight:FLOAT:[64, 96, 1, 1] | model.16.cv2.conv.bias:FLOAT:[64] /model.16/cv2/conv/Conv_output_0:FLOAT:[1, 64, 80, 80] +N159 L159 sigmoid_037 /model.16/cv2/act/Sigmoid Sigmoid /model.16/cv2/conv/Conv_output_0:FLOAT:[1, 64, 80, 80] /model.16/cv2/act/Sigmoid_output_0:FLOAT:[1, 64, 80, 80] +N160 L160 mul_038 /model.16/cv2/act/Mul Mul /model.16/cv2/conv/Conv_output_0:FLOAT:[1, 64, 80, 80] | /model.16/cv2/act/Sigmoid_output_0:FLOAT:[1, 64, 80, 80] /model.16/cv2/act/Mul_output_0:FLOAT:[1, 64, 80, 80] +N161 L161 conv_044 /model.17/conv/Conv Conv /model.16/cv2/act/Mul_output_0:FLOAT:[1, 64, 80, 80] | model.17.conv.weight:FLOAT:[64, 64, 3, 3] | model.17.conv.bias:FLOAT:[64] /model.17/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] +N162 L162 sigmoid_038 /model.17/act/Sigmoid Sigmoid /model.17/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] /model.17/act/Sigmoid_output_0:FLOAT:[1, 64, 40, 40] +N163 L163 mul_039 /model.17/act/Mul Mul /model.17/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] | /model.17/act/Sigmoid_output_0:FLOAT:[1, 64, 40, 40] /model.17/act/Mul_output_0:FLOAT:[1, 64, 40, 40] +N164 L164 concat_010 /model.18/Concat Concat /model.17/act/Mul_output_0:FLOAT:[1, 64, 40, 40] | /model.13/cv2/act/Mul_output_0:FLOAT:[1, 128, 40, 40] /model.18/Concat_output_0:FLOAT:[1, 192, 40, 40] +N165 L165 conv_045 /model.19/cv1/conv/Conv Conv /model.18/Concat_output_0:FLOAT:[1, 192, 40, 40] | model.19.cv1.conv.weight:FLOAT:[128, 192, 1, 1] | model.19.cv1.conv.bias:FLOAT:[128] /model.19/cv1/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] +N166 L166 sigmoid_039 /model.19/cv1/act/Sigmoid Sigmoid /model.19/cv1/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] /model.19/cv1/act/Sigmoid_output_0:FLOAT:[1, 128, 40, 40] +N167 L167 mul_040 /model.19/cv1/act/Mul Mul /model.19/cv1/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] | /model.19/cv1/act/Sigmoid_output_0:FLOAT:[1, 128, 40, 40] /model.19/cv1/act/Mul_output_0:FLOAT:[1, 128, 40, 40] +N168 L168 split_008 /model.19/Split Split /model.19/cv1/act/Mul_output_0:FLOAT:[1, 128, 40, 40] | onnx::Split_273:INT64:[2] /model.19/Split_output_0:FLOAT:[1, 64, 40, 40] | /model.19/Split_output_1:FLOAT:[1, 64, 40, 40] +N169 L169 conv_046 /model.19/m.0/cv1/conv/Conv Conv /model.19/Split_output_1:FLOAT:[1, 64, 40, 40] | model.19.m.0.cv1.conv.weight:FLOAT:[64, 64, 3, 3] | model.19.m.0.cv1.conv.bias:FLOAT:[64] /model.19/m.0/cv1/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] +N170 L170 sigmoid_040 /model.19/m.0/cv1/act/Sigmoid Sigmoid /model.19/m.0/cv1/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] /model.19/m.0/cv1/act/Sigmoid_output_0:FLOAT:[1, 64, 40, 40] +N171 L171 mul_041 /model.19/m.0/cv1/act/Mul Mul /model.19/m.0/cv1/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] | /model.19/m.0/cv1/act/Sigmoid_output_0:FLOAT:[1, 64, 40, 40] /model.19/m.0/cv1/act/Mul_output_0:FLOAT:[1, 64, 40, 40] +N172 L172 conv_047 /model.19/m.0/cv2/conv/Conv Conv /model.19/m.0/cv1/act/Mul_output_0:FLOAT:[1, 64, 40, 40] | model.19.m.0.cv2.conv.weight:FLOAT:[64, 64, 3, 3] | model.19.m.0.cv2.conv.bias:FLOAT:[64] /model.19/m.0/cv2/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] +N173 L173 sigmoid_041 /model.19/m.0/cv2/act/Sigmoid Sigmoid /model.19/m.0/cv2/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] /model.19/m.0/cv2/act/Sigmoid_output_0:FLOAT:[1, 64, 40, 40] +N174 L174 mul_042 /model.19/m.0/cv2/act/Mul Mul /model.19/m.0/cv2/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] | /model.19/m.0/cv2/act/Sigmoid_output_0:FLOAT:[1, 64, 40, 40] /model.19/m.0/cv2/act/Mul_output_0:FLOAT:[1, 64, 40, 40] +N175 L175 concat_011 /model.19/Concat Concat /model.19/Split_output_0:FLOAT:[1, 64, 40, 40] | /model.19/Split_output_1:FLOAT:[1, 64, 40, 40] | /model.19/m.0/cv2/act/Mul_output_0:FLOAT:[1, 64, 40, 40] /model.19/Concat_output_0:FLOAT:[1, 192, 40, 40] +N176 L176 conv_048 /model.19/cv2/conv/Conv Conv /model.19/Concat_output_0:FLOAT:[1, 192, 40, 40] | model.19.cv2.conv.weight:FLOAT:[128, 192, 1, 1] | model.19.cv2.conv.bias:FLOAT:[128] /model.19/cv2/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] +N177 L177 sigmoid_042 /model.19/cv2/act/Sigmoid Sigmoid /model.19/cv2/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] /model.19/cv2/act/Sigmoid_output_0:FLOAT:[1, 128, 40, 40] +N178 L178 mul_043 /model.19/cv2/act/Mul Mul /model.19/cv2/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] | /model.19/cv2/act/Sigmoid_output_0:FLOAT:[1, 128, 40, 40] /model.19/cv2/act/Mul_output_0:FLOAT:[1, 128, 40, 40] +N179 L179 conv_049 /model.20/cv1/conv/Conv Conv /model.19/cv2/act/Mul_output_0:FLOAT:[1, 128, 40, 40] | model.20.cv1.conv.weight:FLOAT:[128, 128, 1, 1] | model.20.cv1.conv.bias:FLOAT:[128] /model.20/cv1/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] +N180 L180 sigmoid_043 /model.20/cv1/act/Sigmoid Sigmoid /model.20/cv1/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] /model.20/cv1/act/Sigmoid_output_0:FLOAT:[1, 128, 40, 40] +N181 L181 mul_044 /model.20/cv1/act/Mul Mul /model.20/cv1/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] | /model.20/cv1/act/Sigmoid_output_0:FLOAT:[1, 128, 40, 40] /model.20/cv1/act/Mul_output_0:FLOAT:[1, 128, 40, 40] +N182 L182 conv_050 /model.20/cv2/conv/Conv Conv /model.20/cv1/act/Mul_output_0:FLOAT:[1, 128, 40, 40] | model.20.cv2.conv.weight:FLOAT:[128, 1, 3, 3] | model.20.cv2.conv.bias:FLOAT:[128] /model.20/cv2/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] +N183 L183 concat_012 /model.21/Concat Concat /model.20/cv2/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] | /model.10/cv2/act/Mul_output_0:FLOAT:[1, 256, 20, 20] /model.21/Concat_output_0:FLOAT:[1, 384, 20, 20] +N184 L184 conv_051 /model.22/cv1/conv/Conv Conv /model.21/Concat_output_0:FLOAT:[1, 384, 20, 20] | model.22.cv1.conv.weight:FLOAT:[256, 384, 1, 1] | model.22.cv1.conv.bias:FLOAT:[256] /model.22/cv1/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] +N185 L185 sigmoid_044 /model.22/cv1/act/Sigmoid Sigmoid /model.22/cv1/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] /model.22/cv1/act/Sigmoid_output_0:FLOAT:[1, 256, 20, 20] +N186 L186 mul_045 /model.22/cv1/act/Mul Mul /model.22/cv1/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] | /model.22/cv1/act/Sigmoid_output_0:FLOAT:[1, 256, 20, 20] /model.22/cv1/act/Mul_output_0:FLOAT:[1, 256, 20, 20] +N187 L187 split_009 /model.22/Split Split /model.22/cv1/act/Mul_output_0:FLOAT:[1, 256, 20, 20] | onnx::Split_301:INT64:[2] /model.22/Split_output_0:FLOAT:[1, 128, 20, 20] | /model.22/Split_output_1:FLOAT:[1, 128, 20, 20] +N188 L188 conv_052 /model.22/m.0/cv1/cv1.0/conv/Conv Conv /model.22/Split_output_1:FLOAT:[1, 128, 20, 20] | model.22.m.0.cv1.0.conv.weight:FLOAT:[128, 1, 3, 3] | model.22.m.0.cv1.0.conv.bias:FLOAT:[128] /model.22/m.0/cv1/cv1.0/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] +N189 L189 sigmoid_045 /model.22/m.0/cv1/cv1.0/act/Sigmoid Sigmoid /model.22/m.0/cv1/cv1.0/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] /model.22/m.0/cv1/cv1.0/act/Sigmoid_output_0:FLOAT:[1, 128, 20, 20] +N190 L190 mul_046 /model.22/m.0/cv1/cv1.0/act/Mul Mul /model.22/m.0/cv1/cv1.0/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] | /model.22/m.0/cv1/cv1.0/act/Sigmoid_output_0:FLOAT:[1, 128, 20, 20] /model.22/m.0/cv1/cv1.0/act/Mul_output_0:FLOAT:[1, 128, 20, 20] +N191 L191 conv_053 /model.22/m.0/cv1/cv1.1/conv/Conv Conv /model.22/m.0/cv1/cv1.0/act/Mul_output_0:FLOAT:[1, 128, 20, 20] | model.22.m.0.cv1.1.conv.weight:FLOAT:[256, 128, 1, 1] | model.22.m.0.cv1.1.conv.bias:FLOAT:[256] /model.22/m.0/cv1/cv1.1/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] +N192 L192 sigmoid_046 /model.22/m.0/cv1/cv1.1/act/Sigmoid Sigmoid /model.22/m.0/cv1/cv1.1/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] /model.22/m.0/cv1/cv1.1/act/Sigmoid_output_0:FLOAT:[1, 256, 20, 20] +N193 L193 mul_047 /model.22/m.0/cv1/cv1.1/act/Mul Mul /model.22/m.0/cv1/cv1.1/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] | /model.22/m.0/cv1/cv1.1/act/Sigmoid_output_0:FLOAT:[1, 256, 20, 20] /model.22/m.0/cv1/cv1.1/act/Mul_output_0:FLOAT:[1, 256, 20, 20] +N194 L194 conv_054 /model.22/m.0/cv1/cv1.2/conv/Conv Conv /model.22/m.0/cv1/cv1.1/act/Mul_output_0:FLOAT:[1, 256, 20, 20] | model.22.m.0.cv1.2.conv.weight:FLOAT:[256, 1, 7, 7] | model.22.m.0.cv1.2.conv.bias:FLOAT:[256] /model.22/m.0/cv1/cv1.2/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] +N195 L195 sigmoid_047 /model.22/m.0/cv1/cv1.2/act/Sigmoid Sigmoid /model.22/m.0/cv1/cv1.2/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] /model.22/m.0/cv1/cv1.2/act/Sigmoid_output_0:FLOAT:[1, 256, 20, 20] +N196 L196 mul_048 /model.22/m.0/cv1/cv1.2/act/Mul Mul /model.22/m.0/cv1/cv1.2/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] | /model.22/m.0/cv1/cv1.2/act/Sigmoid_output_0:FLOAT:[1, 256, 20, 20] /model.22/m.0/cv1/cv1.2/act/Mul_output_0:FLOAT:[1, 256, 20, 20] +N197 L197 conv_055 /model.22/m.0/cv1/cv1.3/conv/Conv Conv /model.22/m.0/cv1/cv1.2/act/Mul_output_0:FLOAT:[1, 256, 20, 20] | model.22.m.0.cv1.3.conv.weight:FLOAT:[128, 256, 1, 1] | model.22.m.0.cv1.3.conv.bias:FLOAT:[128] /model.22/m.0/cv1/cv1.3/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] +N198 L198 sigmoid_048 /model.22/m.0/cv1/cv1.3/act/Sigmoid Sigmoid /model.22/m.0/cv1/cv1.3/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] /model.22/m.0/cv1/cv1.3/act/Sigmoid_output_0:FLOAT:[1, 128, 20, 20] +N199 L199 mul_049 /model.22/m.0/cv1/cv1.3/act/Mul Mul /model.22/m.0/cv1/cv1.3/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] | /model.22/m.0/cv1/cv1.3/act/Sigmoid_output_0:FLOAT:[1, 128, 20, 20] /model.22/m.0/cv1/cv1.3/act/Mul_output_0:FLOAT:[1, 128, 20, 20] +N200 L200 conv_056 /model.22/m.0/cv1/cv1.4/conv/Conv Conv /model.22/m.0/cv1/cv1.3/act/Mul_output_0:FLOAT:[1, 128, 20, 20] | model.22.m.0.cv1.4.conv.weight:FLOAT:[128, 1, 3, 3] | model.22.m.0.cv1.4.conv.bias:FLOAT:[128] /model.22/m.0/cv1/cv1.4/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] +N201 L201 sigmoid_049 /model.22/m.0/cv1/cv1.4/act/Sigmoid Sigmoid /model.22/m.0/cv1/cv1.4/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] /model.22/m.0/cv1/cv1.4/act/Sigmoid_output_0:FLOAT:[1, 128, 20, 20] +N202 L202 mul_050 /model.22/m.0/cv1/cv1.4/act/Mul Mul /model.22/m.0/cv1/cv1.4/conv/Conv_output_0:FLOAT:[1, 128, 20, 20] | /model.22/m.0/cv1/cv1.4/act/Sigmoid_output_0:FLOAT:[1, 128, 20, 20] /model.22/m.0/cv1/cv1.4/act/Mul_output_0:FLOAT:[1, 128, 20, 20] +N203 L203 add_009 /model.22/m.0/Add Add /model.22/Split_output_1:FLOAT:[1, 128, 20, 20] | /model.22/m.0/cv1/cv1.4/act/Mul_output_0:FLOAT:[1, 128, 20, 20] /model.22/m.0/Add_output_0:FLOAT:[1, 128, 20, 20] +N204 L204 concat_013 /model.22/Concat Concat /model.22/Split_output_0:FLOAT:[1, 128, 20, 20] | /model.22/Split_output_1:FLOAT:[1, 128, 20, 20] | /model.22/m.0/Add_output_0:FLOAT:[1, 128, 20, 20] /model.22/Concat_output_0:FLOAT:[1, 384, 20, 20] +N205 L205 conv_057 /model.22/cv2/conv/Conv Conv /model.22/Concat_output_0:FLOAT:[1, 384, 20, 20] | model.22.cv2.conv.weight:FLOAT:[256, 384, 1, 1] | model.22.cv2.conv.bias:FLOAT:[256] /model.22/cv2/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] +N206 L206 sigmoid_050 /model.22/cv2/act/Sigmoid Sigmoid /model.22/cv2/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] /model.22/cv2/act/Sigmoid_output_0:FLOAT:[1, 256, 20, 20] +N207 L207 mul_051 /model.22/cv2/act/Mul Mul /model.22/cv2/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] | /model.22/cv2/act/Sigmoid_output_0:FLOAT:[1, 256, 20, 20] /model.22/cv2/act/Mul_output_0:FLOAT:[1, 256, 20, 20] +N208 L208 conv_058 /model.23/one2one_cv2.0/one2one_cv2.0.0/conv/Conv Conv /model.16/cv2/act/Mul_output_0:FLOAT:[1, 64, 80, 80] | model.23.one2one_cv2.0.0.conv.weight:FLOAT:[64, 64, 3, 3] | model.23.one2one_cv2.0.0.conv.bias:FLOAT:[64] /model.23/one2one_cv2.0/one2one_cv2.0.0/conv/Conv_output_0:FLOAT:[1, 64, 80, 80] +N209 L209 sigmoid_051 /model.23/one2one_cv2.0/one2one_cv2.0.0/act/Sigmoid Sigmoid /model.23/one2one_cv2.0/one2one_cv2.0.0/conv/Conv_output_0:FLOAT:[1, 64, 80, 80] /model.23/one2one_cv2.0/one2one_cv2.0.0/act/Sigmoid_output_0:FLOAT:[1, 64, 80, 80] +N210 L210 mul_052 /model.23/one2one_cv2.0/one2one_cv2.0.0/act/Mul Mul /model.23/one2one_cv2.0/one2one_cv2.0.0/conv/Conv_output_0:FLOAT:[1, 64, 80, 80] | /model.23/one2one_cv2.0/one2one_cv2.0.0/act/Sigmoid_output_0:FLOAT:[1, 64, 80, 80] /model.23/one2one_cv2.0/one2one_cv2.0.0/act/Mul_output_0:FLOAT:[1, 64, 80, 80] +N211 L211 conv_059 /model.23/one2one_cv2.0/one2one_cv2.0.1/conv/Conv Conv /model.23/one2one_cv2.0/one2one_cv2.0.0/act/Mul_output_0:FLOAT:[1, 64, 80, 80] | model.23.one2one_cv2.0.1.conv.weight:FLOAT:[64, 64, 3, 3] | model.23.one2one_cv2.0.1.conv.bias:FLOAT:[64] /model.23/one2one_cv2.0/one2one_cv2.0.1/conv/Conv_output_0:FLOAT:[1, 64, 80, 80] +N212 L212 sigmoid_052 /model.23/one2one_cv2.0/one2one_cv2.0.1/act/Sigmoid Sigmoid /model.23/one2one_cv2.0/one2one_cv2.0.1/conv/Conv_output_0:FLOAT:[1, 64, 80, 80] /model.23/one2one_cv2.0/one2one_cv2.0.1/act/Sigmoid_output_0:FLOAT:[1, 64, 80, 80] +N213 L213 mul_053 /model.23/one2one_cv2.0/one2one_cv2.0.1/act/Mul Mul /model.23/one2one_cv2.0/one2one_cv2.0.1/conv/Conv_output_0:FLOAT:[1, 64, 80, 80] | /model.23/one2one_cv2.0/one2one_cv2.0.1/act/Sigmoid_output_0:FLOAT:[1, 64, 80, 80] /model.23/one2one_cv2.0/one2one_cv2.0.1/act/Mul_output_0:FLOAT:[1, 64, 80, 80] +N214 L214 conv_060 /model.23/one2one_cv2.0/one2one_cv2.0.2/Conv Conv /model.23/one2one_cv2.0/one2one_cv2.0.1/act/Mul_output_0:FLOAT:[1, 64, 80, 80] | model.23.one2one_cv2.0.2.weight:FLOAT:[64, 64, 1, 1] | model.23.one2one_cv2.0.2.bias:FLOAT:[64] /model.23/one2one_cv2.0/one2one_cv2.0.2/Conv_output_0:FLOAT:[1, 64, 80, 80] +N215 L215 conv_061 /model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/conv/Conv Conv /model.16/cv2/act/Mul_output_0:FLOAT:[1, 64, 80, 80] | model.23.one2one_cv3.0.0.0.conv.weight:FLOAT:[64, 1, 3, 3] | model.23.one2one_cv3.0.0.0.conv.bias:FLOAT:[64] /model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/conv/Conv_output_0:FLOAT:[1, 64, 80, 80] +N216 L216 sigmoid_053 /model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/act/Sigmoid Sigmoid /model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/conv/Conv_output_0:FLOAT:[1, 64, 80, 80] /model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/act/Sigmoid_output_0:FLOAT:[1, 64, 80, 80] +N217 L217 mul_054 /model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/act/Mul Mul /model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/conv/Conv_output_0:FLOAT:[1, 64, 80, 80] | /model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/act/Sigmoid_output_0:FLOAT:[1, 64, 80, 80] /model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/act/Mul_output_0:FLOAT:[1, 64, 80, 80] +N218 L218 conv_062 /model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/conv/Conv Conv /model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.0/act/Mul_output_0:FLOAT:[1, 64, 80, 80] | model.23.one2one_cv3.0.0.1.conv.weight:FLOAT:[80, 64, 1, 1] | model.23.one2one_cv3.0.0.1.conv.bias:FLOAT:[80] /model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/conv/Conv_output_0:FLOAT:[1, 80, 80, 80] +N219 L219 sigmoid_054 /model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/act/Sigmoid Sigmoid /model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/conv/Conv_output_0:FLOAT:[1, 80, 80, 80] /model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/act/Sigmoid_output_0:FLOAT:[1, 80, 80, 80] +N220 L220 mul_055 /model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/act/Mul Mul /model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/conv/Conv_output_0:FLOAT:[1, 80, 80, 80] | /model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/act/Sigmoid_output_0:FLOAT:[1, 80, 80, 80] /model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/act/Mul_output_0:FLOAT:[1, 80, 80, 80] +N221 L221 conv_063 /model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/conv/Conv Conv /model.23/one2one_cv3.0/one2one_cv3.0.0/one2one_cv3.0.0.1/act/Mul_output_0:FLOAT:[1, 80, 80, 80] | model.23.one2one_cv3.0.1.0.conv.weight:FLOAT:[80, 1, 3, 3] | model.23.one2one_cv3.0.1.0.conv.bias:FLOAT:[80] /model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/conv/Conv_output_0:FLOAT:[1, 80, 80, 80] +N222 L222 sigmoid_055 /model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/act/Sigmoid Sigmoid /model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/conv/Conv_output_0:FLOAT:[1, 80, 80, 80] /model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/act/Sigmoid_output_0:FLOAT:[1, 80, 80, 80] +N223 L223 mul_056 /model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/act/Mul Mul /model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/conv/Conv_output_0:FLOAT:[1, 80, 80, 80] | /model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/act/Sigmoid_output_0:FLOAT:[1, 80, 80, 80] /model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/act/Mul_output_0:FLOAT:[1, 80, 80, 80] +N224 L224 conv_064 /model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/conv/Conv Conv /model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.0/act/Mul_output_0:FLOAT:[1, 80, 80, 80] | model.23.one2one_cv3.0.1.1.conv.weight:FLOAT:[80, 80, 1, 1] | model.23.one2one_cv3.0.1.1.conv.bias:FLOAT:[80] /model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/conv/Conv_output_0:FLOAT:[1, 80, 80, 80] +N225 L225 sigmoid_056 /model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/act/Sigmoid Sigmoid /model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/conv/Conv_output_0:FLOAT:[1, 80, 80, 80] /model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/act/Sigmoid_output_0:FLOAT:[1, 80, 80, 80] +N226 L226 mul_057 /model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/act/Mul Mul /model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/conv/Conv_output_0:FLOAT:[1, 80, 80, 80] | /model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/act/Sigmoid_output_0:FLOAT:[1, 80, 80, 80] /model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/act/Mul_output_0:FLOAT:[1, 80, 80, 80] +N227 L227 conv_065 /model.23/one2one_cv3.0/one2one_cv3.0.2/Conv Conv /model.23/one2one_cv3.0/one2one_cv3.0.1/one2one_cv3.0.1.1/act/Mul_output_0:FLOAT:[1, 80, 80, 80] | model.23.one2one_cv3.0.2.weight:FLOAT:[80, 80, 1, 1] | model.23.one2one_cv3.0.2.bias:FLOAT:[80] /model.23/one2one_cv3.0/one2one_cv3.0.2/Conv_output_0:FLOAT:[1, 80, 80, 80] +N228 L228 concat_014 /model.23/Concat Concat /model.23/one2one_cv2.0/one2one_cv2.0.2/Conv_output_0:FLOAT:[1, 64, 80, 80] | /model.23/one2one_cv3.0/one2one_cv3.0.2/Conv_output_0:FLOAT:[1, 80, 80, 80] /model.23/Concat_output_0:FLOAT:[1, 144, 80, 80] +N229 L229 conv_066 /model.23/one2one_cv2.1/one2one_cv2.1.0/conv/Conv Conv /model.19/cv2/act/Mul_output_0:FLOAT:[1, 128, 40, 40] | model.23.one2one_cv2.1.0.conv.weight:FLOAT:[64, 128, 3, 3] | model.23.one2one_cv2.1.0.conv.bias:FLOAT:[64] /model.23/one2one_cv2.1/one2one_cv2.1.0/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] +N230 L230 sigmoid_057 /model.23/one2one_cv2.1/one2one_cv2.1.0/act/Sigmoid Sigmoid /model.23/one2one_cv2.1/one2one_cv2.1.0/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] /model.23/one2one_cv2.1/one2one_cv2.1.0/act/Sigmoid_output_0:FLOAT:[1, 64, 40, 40] +N231 L231 mul_058 /model.23/one2one_cv2.1/one2one_cv2.1.0/act/Mul Mul /model.23/one2one_cv2.1/one2one_cv2.1.0/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] | /model.23/one2one_cv2.1/one2one_cv2.1.0/act/Sigmoid_output_0:FLOAT:[1, 64, 40, 40] /model.23/one2one_cv2.1/one2one_cv2.1.0/act/Mul_output_0:FLOAT:[1, 64, 40, 40] +N232 L232 conv_067 /model.23/one2one_cv2.1/one2one_cv2.1.1/conv/Conv Conv /model.23/one2one_cv2.1/one2one_cv2.1.0/act/Mul_output_0:FLOAT:[1, 64, 40, 40] | model.23.one2one_cv2.1.1.conv.weight:FLOAT:[64, 64, 3, 3] | model.23.one2one_cv2.1.1.conv.bias:FLOAT:[64] /model.23/one2one_cv2.1/one2one_cv2.1.1/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] +N233 L233 sigmoid_058 /model.23/one2one_cv2.1/one2one_cv2.1.1/act/Sigmoid Sigmoid /model.23/one2one_cv2.1/one2one_cv2.1.1/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] /model.23/one2one_cv2.1/one2one_cv2.1.1/act/Sigmoid_output_0:FLOAT:[1, 64, 40, 40] +N234 L234 mul_059 /model.23/one2one_cv2.1/one2one_cv2.1.1/act/Mul Mul /model.23/one2one_cv2.1/one2one_cv2.1.1/conv/Conv_output_0:FLOAT:[1, 64, 40, 40] | /model.23/one2one_cv2.1/one2one_cv2.1.1/act/Sigmoid_output_0:FLOAT:[1, 64, 40, 40] /model.23/one2one_cv2.1/one2one_cv2.1.1/act/Mul_output_0:FLOAT:[1, 64, 40, 40] +N235 L235 conv_068 /model.23/one2one_cv2.1/one2one_cv2.1.2/Conv Conv /model.23/one2one_cv2.1/one2one_cv2.1.1/act/Mul_output_0:FLOAT:[1, 64, 40, 40] | model.23.one2one_cv2.1.2.weight:FLOAT:[64, 64, 1, 1] | model.23.one2one_cv2.1.2.bias:FLOAT:[64] /model.23/one2one_cv2.1/one2one_cv2.1.2/Conv_output_0:FLOAT:[1, 64, 40, 40] +N236 L236 conv_069 /model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/conv/Conv Conv /model.19/cv2/act/Mul_output_0:FLOAT:[1, 128, 40, 40] | model.23.one2one_cv3.1.0.0.conv.weight:FLOAT:[128, 1, 3, 3] | model.23.one2one_cv3.1.0.0.conv.bias:FLOAT:[128] /model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] +N237 L237 sigmoid_059 /model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/act/Sigmoid Sigmoid /model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] /model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/act/Sigmoid_output_0:FLOAT:[1, 128, 40, 40] +N238 L238 mul_060 /model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/act/Mul Mul /model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/conv/Conv_output_0:FLOAT:[1, 128, 40, 40] | /model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/act/Sigmoid_output_0:FLOAT:[1, 128, 40, 40] /model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/act/Mul_output_0:FLOAT:[1, 128, 40, 40] +N239 L239 conv_070 /model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/conv/Conv Conv /model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.0/act/Mul_output_0:FLOAT:[1, 128, 40, 40] | model.23.one2one_cv3.1.0.1.conv.weight:FLOAT:[80, 128, 1, 1] | model.23.one2one_cv3.1.0.1.conv.bias:FLOAT:[80] /model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/conv/Conv_output_0:FLOAT:[1, 80, 40, 40] +N240 L240 sigmoid_060 /model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/act/Sigmoid Sigmoid /model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/conv/Conv_output_0:FLOAT:[1, 80, 40, 40] /model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/act/Sigmoid_output_0:FLOAT:[1, 80, 40, 40] +N241 L241 mul_061 /model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/act/Mul Mul /model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/conv/Conv_output_0:FLOAT:[1, 80, 40, 40] | /model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/act/Sigmoid_output_0:FLOAT:[1, 80, 40, 40] /model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/act/Mul_output_0:FLOAT:[1, 80, 40, 40] +N242 L242 conv_071 /model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/conv/Conv Conv /model.23/one2one_cv3.1/one2one_cv3.1.0/one2one_cv3.1.0.1/act/Mul_output_0:FLOAT:[1, 80, 40, 40] | model.23.one2one_cv3.1.1.0.conv.weight:FLOAT:[80, 1, 3, 3] | model.23.one2one_cv3.1.1.0.conv.bias:FLOAT:[80] /model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/conv/Conv_output_0:FLOAT:[1, 80, 40, 40] +N243 L243 sigmoid_061 /model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/act/Sigmoid Sigmoid /model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/conv/Conv_output_0:FLOAT:[1, 80, 40, 40] /model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/act/Sigmoid_output_0:FLOAT:[1, 80, 40, 40] +N244 L244 mul_062 /model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/act/Mul Mul /model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/conv/Conv_output_0:FLOAT:[1, 80, 40, 40] | /model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/act/Sigmoid_output_0:FLOAT:[1, 80, 40, 40] /model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/act/Mul_output_0:FLOAT:[1, 80, 40, 40] +N245 L245 conv_072 /model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/conv/Conv Conv /model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.0/act/Mul_output_0:FLOAT:[1, 80, 40, 40] | model.23.one2one_cv3.1.1.1.conv.weight:FLOAT:[80, 80, 1, 1] | model.23.one2one_cv3.1.1.1.conv.bias:FLOAT:[80] /model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/conv/Conv_output_0:FLOAT:[1, 80, 40, 40] +N246 L246 sigmoid_062 /model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/act/Sigmoid Sigmoid /model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/conv/Conv_output_0:FLOAT:[1, 80, 40, 40] /model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/act/Sigmoid_output_0:FLOAT:[1, 80, 40, 40] +N247 L247 mul_063 /model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/act/Mul Mul /model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/conv/Conv_output_0:FLOAT:[1, 80, 40, 40] | /model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/act/Sigmoid_output_0:FLOAT:[1, 80, 40, 40] /model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/act/Mul_output_0:FLOAT:[1, 80, 40, 40] +N248 L248 conv_073 /model.23/one2one_cv3.1/one2one_cv3.1.2/Conv Conv /model.23/one2one_cv3.1/one2one_cv3.1.1/one2one_cv3.1.1.1/act/Mul_output_0:FLOAT:[1, 80, 40, 40] | model.23.one2one_cv3.1.2.weight:FLOAT:[80, 80, 1, 1] | model.23.one2one_cv3.1.2.bias:FLOAT:[80] /model.23/one2one_cv3.1/one2one_cv3.1.2/Conv_output_0:FLOAT:[1, 80, 40, 40] +N249 L249 concat_015 /model.23/Concat_1 Concat /model.23/one2one_cv2.1/one2one_cv2.1.2/Conv_output_0:FLOAT:[1, 64, 40, 40] | /model.23/one2one_cv3.1/one2one_cv3.1.2/Conv_output_0:FLOAT:[1, 80, 40, 40] /model.23/Concat_1_output_0:FLOAT:[1, 144, 40, 40] +N250 L250 conv_074 /model.23/one2one_cv2.2/one2one_cv2.2.0/conv/Conv Conv /model.22/cv2/act/Mul_output_0:FLOAT:[1, 256, 20, 20] | model.23.one2one_cv2.2.0.conv.weight:FLOAT:[64, 256, 3, 3] | model.23.one2one_cv2.2.0.conv.bias:FLOAT:[64] /model.23/one2one_cv2.2/one2one_cv2.2.0/conv/Conv_output_0:FLOAT:[1, 64, 20, 20] +N251 L251 sigmoid_063 /model.23/one2one_cv2.2/one2one_cv2.2.0/act/Sigmoid Sigmoid /model.23/one2one_cv2.2/one2one_cv2.2.0/conv/Conv_output_0:FLOAT:[1, 64, 20, 20] /model.23/one2one_cv2.2/one2one_cv2.2.0/act/Sigmoid_output_0:FLOAT:[1, 64, 20, 20] +N252 L252 mul_064 /model.23/one2one_cv2.2/one2one_cv2.2.0/act/Mul Mul /model.23/one2one_cv2.2/one2one_cv2.2.0/conv/Conv_output_0:FLOAT:[1, 64, 20, 20] | /model.23/one2one_cv2.2/one2one_cv2.2.0/act/Sigmoid_output_0:FLOAT:[1, 64, 20, 20] /model.23/one2one_cv2.2/one2one_cv2.2.0/act/Mul_output_0:FLOAT:[1, 64, 20, 20] +N253 L253 conv_075 /model.23/one2one_cv2.2/one2one_cv2.2.1/conv/Conv Conv /model.23/one2one_cv2.2/one2one_cv2.2.0/act/Mul_output_0:FLOAT:[1, 64, 20, 20] | model.23.one2one_cv2.2.1.conv.weight:FLOAT:[64, 64, 3, 3] | model.23.one2one_cv2.2.1.conv.bias:FLOAT:[64] /model.23/one2one_cv2.2/one2one_cv2.2.1/conv/Conv_output_0:FLOAT:[1, 64, 20, 20] +N254 L254 sigmoid_064 /model.23/one2one_cv2.2/one2one_cv2.2.1/act/Sigmoid Sigmoid /model.23/one2one_cv2.2/one2one_cv2.2.1/conv/Conv_output_0:FLOAT:[1, 64, 20, 20] /model.23/one2one_cv2.2/one2one_cv2.2.1/act/Sigmoid_output_0:FLOAT:[1, 64, 20, 20] +N255 L255 mul_065 /model.23/one2one_cv2.2/one2one_cv2.2.1/act/Mul Mul /model.23/one2one_cv2.2/one2one_cv2.2.1/conv/Conv_output_0:FLOAT:[1, 64, 20, 20] | /model.23/one2one_cv2.2/one2one_cv2.2.1/act/Sigmoid_output_0:FLOAT:[1, 64, 20, 20] /model.23/one2one_cv2.2/one2one_cv2.2.1/act/Mul_output_0:FLOAT:[1, 64, 20, 20] +N256 L256 conv_076 /model.23/one2one_cv2.2/one2one_cv2.2.2/Conv Conv /model.23/one2one_cv2.2/one2one_cv2.2.1/act/Mul_output_0:FLOAT:[1, 64, 20, 20] | model.23.one2one_cv2.2.2.weight:FLOAT:[64, 64, 1, 1] | model.23.one2one_cv2.2.2.bias:FLOAT:[64] /model.23/one2one_cv2.2/one2one_cv2.2.2/Conv_output_0:FLOAT:[1, 64, 20, 20] +N257 L257 conv_077 /model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/conv/Conv Conv /model.22/cv2/act/Mul_output_0:FLOAT:[1, 256, 20, 20] | model.23.one2one_cv3.2.0.0.conv.weight:FLOAT:[256, 1, 3, 3] | model.23.one2one_cv3.2.0.0.conv.bias:FLOAT:[256] /model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] +N258 L258 sigmoid_065 /model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/act/Sigmoid Sigmoid /model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] /model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/act/Sigmoid_output_0:FLOAT:[1, 256, 20, 20] +N259 L259 mul_066 /model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/act/Mul Mul /model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/conv/Conv_output_0:FLOAT:[1, 256, 20, 20] | /model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/act/Sigmoid_output_0:FLOAT:[1, 256, 20, 20] /model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/act/Mul_output_0:FLOAT:[1, 256, 20, 20] +N260 L260 conv_078 /model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/conv/Conv Conv /model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.0/act/Mul_output_0:FLOAT:[1, 256, 20, 20] | model.23.one2one_cv3.2.0.1.conv.weight:FLOAT:[80, 256, 1, 1] | model.23.one2one_cv3.2.0.1.conv.bias:FLOAT:[80] /model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/conv/Conv_output_0:FLOAT:[1, 80, 20, 20] +N261 L261 sigmoid_066 /model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/act/Sigmoid Sigmoid /model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/conv/Conv_output_0:FLOAT:[1, 80, 20, 20] /model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/act/Sigmoid_output_0:FLOAT:[1, 80, 20, 20] +N262 L262 mul_067 /model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/act/Mul Mul /model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/conv/Conv_output_0:FLOAT:[1, 80, 20, 20] | /model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/act/Sigmoid_output_0:FLOAT:[1, 80, 20, 20] /model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/act/Mul_output_0:FLOAT:[1, 80, 20, 20] +N263 L263 conv_079 /model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/conv/Conv Conv /model.23/one2one_cv3.2/one2one_cv3.2.0/one2one_cv3.2.0.1/act/Mul_output_0:FLOAT:[1, 80, 20, 20] | model.23.one2one_cv3.2.1.0.conv.weight:FLOAT:[80, 1, 3, 3] | model.23.one2one_cv3.2.1.0.conv.bias:FLOAT:[80] /model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/conv/Conv_output_0:FLOAT:[1, 80, 20, 20] +N264 L264 sigmoid_067 /model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/act/Sigmoid Sigmoid /model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/conv/Conv_output_0:FLOAT:[1, 80, 20, 20] /model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/act/Sigmoid_output_0:FLOAT:[1, 80, 20, 20] +N265 L265 mul_068 /model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/act/Mul Mul /model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/conv/Conv_output_0:FLOAT:[1, 80, 20, 20] | /model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/act/Sigmoid_output_0:FLOAT:[1, 80, 20, 20] /model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/act/Mul_output_0:FLOAT:[1, 80, 20, 20] +N266 L266 conv_080 /model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/conv/Conv Conv /model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.0/act/Mul_output_0:FLOAT:[1, 80, 20, 20] | model.23.one2one_cv3.2.1.1.conv.weight:FLOAT:[80, 80, 1, 1] | model.23.one2one_cv3.2.1.1.conv.bias:FLOAT:[80] /model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/conv/Conv_output_0:FLOAT:[1, 80, 20, 20] +N267 L267 sigmoid_068 /model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/act/Sigmoid Sigmoid /model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/conv/Conv_output_0:FLOAT:[1, 80, 20, 20] /model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/act/Sigmoid_output_0:FLOAT:[1, 80, 20, 20] +N268 L268 mul_069 /model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/act/Mul Mul /model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/conv/Conv_output_0:FLOAT:[1, 80, 20, 20] | /model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/act/Sigmoid_output_0:FLOAT:[1, 80, 20, 20] /model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/act/Mul_output_0:FLOAT:[1, 80, 20, 20] +N269 L269 conv_081 /model.23/one2one_cv3.2/one2one_cv3.2.2/Conv Conv /model.23/one2one_cv3.2/one2one_cv3.2.1/one2one_cv3.2.1.1/act/Mul_output_0:FLOAT:[1, 80, 20, 20] | model.23.one2one_cv3.2.2.weight:FLOAT:[80, 80, 1, 1] | model.23.one2one_cv3.2.2.bias:FLOAT:[80] /model.23/one2one_cv3.2/one2one_cv3.2.2/Conv_output_0:FLOAT:[1, 80, 20, 20] +N270 L270 concat_016 /model.23/Concat_2 Concat /model.23/one2one_cv2.2/one2one_cv2.2.2/Conv_output_0:FLOAT:[1, 64, 20, 20] | /model.23/one2one_cv3.2/one2one_cv3.2.2/Conv_output_0:FLOAT:[1, 80, 20, 20] /model.23/Concat_2_output_0:FLOAT:[1, 144, 20, 20] +N271 L271 reshape_003 /model.23/Reshape Reshape /model.23/Concat_output_0:FLOAT:[1, 144, 80, 80] | /model.23/Constant_output_0:INT64:[3] /model.23/Reshape_output_0:FLOAT:[1, 144, 6400] +N272 L272 reshape_004 /model.23/Reshape_1 Reshape /model.23/Concat_1_output_0:FLOAT:[1, 144, 40, 40] | /model.23/Constant_output_0:INT64:[3] /model.23/Reshape_1_output_0:FLOAT:[1, 144, 1600] +N273 L273 reshape_005 /model.23/Reshape_2 Reshape /model.23/Concat_2_output_0:FLOAT:[1, 144, 20, 20] | /model.23/Constant_output_0:INT64:[3] /model.23/Reshape_2_output_0:FLOAT:[1, 144, 400] +N274 L274 concat_017 /model.23/Concat_3 Concat /model.23/Reshape_output_0:FLOAT:[1, 144, 6400] | /model.23/Reshape_1_output_0:FLOAT:[1, 144, 1600] | /model.23/Reshape_2_output_0:FLOAT:[1, 144, 400] /model.23/Concat_3_output_0:FLOAT:[1, 144, 8400] +N275 L275 split_010 /model.23/Split Split /model.23/Concat_3_output_0:FLOAT:[1, 144, 8400] | onnx::Split_572:INT64:[2] /model.23/Split_output_0:FLOAT:[1, 64, 8400] | /model.23/Split_output_1:FLOAT:[1, 80, 8400] +N276 L276 reshape_006 /model.23/dfl/Reshape Reshape /model.23/Split_output_0:FLOAT:[1, 64, 8400] | /model.23/dfl/Constant_output_0:INT64:[4] /model.23/dfl/Reshape_output_0:FLOAT:[1, 4, 16, 8400] +N277 L277 transpose_002 /model.23/dfl/Transpose Transpose /model.23/dfl/Reshape_output_0:FLOAT:[1, 4, 16, 8400] /model.23/dfl/Transpose_output_0:FLOAT:[1, 16, 4, 8400] +N278 L278 softmax_001 /model.23/dfl/Softmax Softmax /model.23/dfl/Transpose_output_0:FLOAT:[1, 16, 4, 8400] /model.23/dfl/Softmax_output_0:FLOAT:[1, 16, 4, 8400] +N279 L279 conv_082 /model.23/dfl/conv/Conv Conv /model.23/dfl/Softmax_output_0:FLOAT:[1, 16, 4, 8400] | model.23.dfl.conv.weight:FLOAT:[1, 16, 1, 1] /model.23/dfl/conv/Conv_output_0:FLOAT:[1, 1, 4, 8400] +N280 L280 reshape_007 /model.23/dfl/Reshape_1 Reshape /model.23/dfl/conv/Conv_output_0:FLOAT:[1, 1, 4, 8400] | /model.23/dfl/Constant_1_output_0:INT64:[3] /model.23/dfl/Reshape_1_output_0:FLOAT:[1, 4, 8400] +N281 L281 split_011 /model.23/Split_1 Split /model.23/dfl/Reshape_1_output_0:FLOAT:[1, 4, 8400] | onnx::Split_214:INT64:[2] /model.23/Split_1_output_0:FLOAT:[1, 2, 8400] | /model.23/Split_1_output_1:FLOAT:[1, 2, 8400] +N282 L282 sub_000 /model.23/Sub Sub /model.23/Constant_3_output_0:FLOAT:[1, 2, 8400] | /model.23/Split_1_output_0:FLOAT:[1, 2, 8400] /model.23/Sub_output_0:FLOAT:[1, 2, 8400] +N283 L283 add_010 /model.23/Add Add /model.23/Constant_3_output_0:FLOAT:[1, 2, 8400] | /model.23/Split_1_output_1:FLOAT:[1, 2, 8400] /model.23/Add_output_0:FLOAT:[1, 2, 8400] +N284 L284 concat_018 /model.23/Concat_4 Concat /model.23/Sub_output_0:FLOAT:[1, 2, 8400] | /model.23/Add_output_0:FLOAT:[1, 2, 8400] /model.23/Concat_4_output_0:FLOAT:[1, 4, 8400] +N285 L285 mul_070 /model.23/Mul Mul /model.23/Concat_4_output_0:FLOAT:[1, 4, 8400] | /model.23/Constant_5_output_0:FLOAT:[1, 8400] /model.23/Mul_output_0:FLOAT:[1, 4, 8400] +N286 L286 sigmoid_069 /model.23/Sigmoid Sigmoid /model.23/Split_output_1:FLOAT:[1, 80, 8400] /model.23/Sigmoid_output_0:FLOAT:[1, 80, 8400] +N287 L287 concat_019 /model.23/Concat_5 Concat /model.23/Mul_output_0:FLOAT:[1, 4, 8400] | /model.23/Sigmoid_output_0:FLOAT:[1, 80, 8400] /model.23/Concat_5_output_0:FLOAT:[1, 84, 8400] +N288 L288 transpose_003 /model.23/Transpose Transpose /model.23/Concat_5_output_0:FLOAT:[1, 84, 8400] /model.23/Transpose_output_0:FLOAT:[1, 8400, 84] +N289 L289 split_012 /model.23/Split_2 Split /model.23/Transpose_output_0:FLOAT:[1, 8400, 84] | onnx::Split_612:INT64:[2] /model.23/Split_2_output_0:FLOAT:[1, 8400, 4] | /model.23/Split_2_output_1:FLOAT:[1, 8400, 80] +N290 L290 reducemax_000 /model.23/ReduceMax ReduceMax /model.23/Split_2_output_1:FLOAT:[1, 8400, 80] /model.23/ReduceMax_output_0:FLOAT:[1, 8400] +N291 L291 topk_000 /model.23/TopK TopK /model.23/ReduceMax_output_0:FLOAT:[1, 8400] | /model.23/Constant_6_output_0:INT64:[1] /model.23/TopK_output_0:FLOAT:[1, 300] | /model.23/TopK_output_1:INT64:[1, 300] +N292 L292 unsqueeze_000 /model.23/Unsqueeze Unsqueeze /model.23/TopK_output_1:INT64:[1, 300] | /model.23/Constant_7_output_0:INT64:[1] /model.23/Unsqueeze_output_0:INT64:[1, 300, 1] +N293 L293 tile_000 /model.23/Tile Tile /model.23/Unsqueeze_output_0:INT64:[1, 300, 1] | /model.23/Constant_8_output_0:INT64:[3] /model.23/Tile_output_0:INT64:[1, 300, 4] +N294 L294 gatherelements_000 /model.23/GatherElements GatherElements /model.23/Split_2_output_0:FLOAT:[1, 8400, 4] | /model.23/Tile_output_0:INT64:[1, 300, 4] /model.23/GatherElements_output_0:FLOAT:[1, 300, 4] +N295 L295 tile_001 /model.23/Tile_1 Tile /model.23/Unsqueeze_output_0:INT64:[1, 300, 1] | /model.23/Constant_10_output_0:INT64:[3] /model.23/Tile_1_output_0:INT64:[1, 300, 80] +N296 L296 gatherelements_001 /model.23/GatherElements_1 GatherElements /model.23/Split_2_output_1:FLOAT:[1, 8400, 80] | /model.23/Tile_1_output_0:INT64:[1, 300, 80] /model.23/GatherElements_1_output_0:FLOAT:[1, 300, 80] +N297 L297 flatten_000 /model.23/Flatten Flatten /model.23/GatherElements_1_output_0:FLOAT:[1, 300, 80] /model.23/Flatten_output_0:FLOAT:[1, 24000] +N298 L298 topk_001 /model.23/TopK_1 TopK /model.23/Flatten_output_0:FLOAT:[1, 24000] | /model.23/Constant_6_output_0:INT64:[1] /model.23/TopK_1_output_0:FLOAT:[1, 300] | /model.23/TopK_1_output_1:INT64:[1, 300] +N299 L299 mod_000 /model.23/Mod Mod /model.23/TopK_1_output_1:INT64:[1, 300] | /model.23/Constant_13_output_0:INT64:[] /model.23/Mod_output_0:INT64:[1, 300] +N300 L300 div_000 /model.23/Div Div /model.23/TopK_1_output_1:INT64:[1, 300] | /model.23/Constant_13_output_0:INT64:[] /model.23/Div_output_0:INT64:[1, 300] +N301 L301 unsqueeze_001 /model.23/Unsqueeze_1 Unsqueeze /model.23/Div_output_0:INT64:[1, 300] | /model.23/Constant_7_output_0:INT64:[1] /model.23/Unsqueeze_1_output_0:INT64:[1, 300, 1] +N302 L302 tile_002 /model.23/Tile_2 Tile /model.23/Unsqueeze_1_output_0:INT64:[1, 300, 1] | /model.23/Constant_8_output_0:INT64:[3] /model.23/Tile_2_output_0:INT64:[1, 300, 4] +N303 L303 gatherelements_002 /model.23/GatherElements_2 GatherElements /model.23/GatherElements_output_0:FLOAT:[1, 300, 4] | /model.23/Tile_2_output_0:INT64:[1, 300, 4] /model.23/GatherElements_2_output_0:FLOAT:[1, 300, 4] +N304 L304 unsqueeze_002 /model.23/Unsqueeze_2 Unsqueeze /model.23/TopK_1_output_0:FLOAT:[1, 300] | /model.23/Constant_7_output_0:INT64:[1] /model.23/Unsqueeze_2_output_0:FLOAT:[1, 300, 1] +N305 L305 unsqueeze_003 /model.23/Unsqueeze_3 Unsqueeze /model.23/Mod_output_0:INT64:[1, 300] | /model.23/Constant_7_output_0:INT64:[1] /model.23/Unsqueeze_3_output_0:INT64:[1, 300, 1] +N306 L306 cast_000 /model.23/Cast_2 Cast /model.23/Unsqueeze_3_output_0:INT64:[1, 300, 1] /model.23/Cast_2_output_0:FLOAT:[1, 300, 1] +N307 L307 concat_020 /model.23/Concat_6 Concat /model.23/GatherElements_2_output_0:FLOAT:[1, 300, 4] | /model.23/Unsqueeze_2_output_0:FLOAT:[1, 300, 1] | /model.23/Cast_2_output_0:FLOAT:[1, 300, 1] output0:FLOAT:[1, 300, 6] diff --git a/ported_models/yolov10n_hf_reference/manifests/weights_manifest.json b/ported_models/yolov10n_hf_reference/manifests/weights_manifest.json new file mode 100644 index 00000000..6901b971 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/manifests/weights_manifest.json @@ -0,0 +1,3479 @@ +{ + "schema_version": 1, + "source": { + "type": "huggingface", + "repo": "onnx-community/yolov10n", + "revision": "57657320425ee34056408a57ad9d29c4d4815bd8", + "filename": "onnx/model.onnx", + "url": "https://huggingface.co/onnx-community/yolov10n/resolve/57657320425ee34056408a57ad9d29c4d4815bd8/onnx/model.onnx?download=true", + "sha256": "a77dd863933f184a19e84361c64b788228a7c7dacc2c78939239a96ad3efca3b", + "license": "AGPL-3.0", + "artifact_manifest": "ported_models/yolov10n_hf_reference/artifacts.json", + "local_model": "local-artifacts/yolov10n_hf_reference/model.onnx", + "model_bytes": 9386116 + }, + "validation": { + "model_checksum": "PASS", + "onnx_checker_original": "PASS", + "onnx_shape_inference": "PASS", + "onnx_checker_inferred": "PASS", + "onnx_ir_version": 7, + "opsets": { + "ai.onnx": 13 + }, + "graph_nodes": 308, + "graph_initializers": 187, + "graph_sparse_initializers": 0, + "value_info_before_inference": 323, + "value_info_after_inference": 323 + }, + "package": { + "path": "local-artifacts/yolov10n_hf_reference/package/weights.bin", + "format": "headerless_concatenated_tensor_bytes", + "byte_order": "little", + "alignment_bytes": 64, + "initializer_order": "name_ascending", + "padding_value": 0, + "initializer_count": 187, + "dtype_counts": { + "FLOAT": 169, + "INT64": 18 + }, + "float_initializer_count": 169, + "integer_initializer_count": 18, + "data_bytes": 9298228, + "padding_bytes": 908, + "trailing_padding": 48, + "total_bytes": 9299136, + "sha256": "b6d5aa13ef3238328c19ff0f646f72841bcf44dc1651383d089f0d57e37cf850" + }, + "initializers": [ + { + "pack_index": 0, + "graph_index": 172, + "name": "/model.10/attn/Constant_1_output_0", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [], + "elements": 1, + "offset": 0, + "nbytes": 4, + "end_offset": 4, + "padding_before": 0, + "sha256": "69c199f6174d4ebf6b546cdfff3d4b9d319ae927a353047e91723e023a69acab", + "source_storage": "raw_data" + }, + { + "pack_index": 1, + "graph_index": 173, + "name": "/model.10/attn/Constant_2_output_0", + "dtype": "INT64", + "dtype_code": 7, + "shape": [ + 4 + ], + "elements": 4, + "offset": 64, + "nbytes": 32, + "end_offset": 96, + "padding_before": 60, + "sha256": "86802e5b5ae46f80c627f6af84f3b47e65b5458ac00fc5dd929ad2154e1d4c22", + "source_storage": "raw_data" + }, + { + "pack_index": 2, + "graph_index": 170, + "name": "/model.10/attn/Constant_output_0", + "dtype": "INT64", + "dtype_code": 7, + "shape": [ + 4 + ], + "elements": 4, + "offset": 128, + "nbytes": 32, + "end_offset": 160, + "padding_before": 32, + "sha256": "4f81f98d9731a45624ed0c2d07c1d1b159f93fb2d677716744a65081efbc0c96", + "source_storage": "raw_data" + }, + { + "pack_index": 3, + "graph_index": 174, + "name": "/model.11/Constant_output_0", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 4 + ], + "elements": 4, + "offset": 192, + "nbytes": 16, + "end_offset": 208, + "padding_before": 32, + "sha256": "aa5b3e0ef3e85eb14fa5e9eea359ae9b4f94dec784834d64c0b29ec5a8c83844", + "source_storage": "raw_data" + }, + { + "pack_index": 4, + "graph_index": 185, + "name": "/model.23/Constant_10_output_0", + "dtype": "INT64", + "dtype_code": 7, + "shape": [ + 3 + ], + "elements": 3, + "offset": 256, + "nbytes": 24, + "end_offset": 280, + "padding_before": 48, + "sha256": "e77912b76d9f855562d2acb382c7f090aab4c3688ebaa7d10275fa9797edf47b", + "source_storage": "raw_data" + }, + { + "pack_index": 5, + "graph_index": 186, + "name": "/model.23/Constant_13_output_0", + "dtype": "INT64", + "dtype_code": 7, + "shape": [], + "elements": 1, + "offset": 320, + "nbytes": 8, + "end_offset": 328, + "padding_before": 40, + "sha256": "3478af7d895d85fb71e1c84813ac8dce11a4fcd1be230cf3cba471ea702c8bd3", + "source_storage": "raw_data" + }, + { + "pack_index": 6, + "graph_index": 179, + "name": "/model.23/Constant_3_output_0", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 1, + 2, + 8400 + ], + "elements": 16800, + "offset": 384, + "nbytes": 67200, + "end_offset": 67584, + "padding_before": 56, + "sha256": "e69fd7f31beb3c8e7690f75c4749da403440074c11f86f54fd7764633b586be8", + "source_storage": "raw_data" + }, + { + "pack_index": 7, + "graph_index": 180, + "name": "/model.23/Constant_5_output_0", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 1, + 8400 + ], + "elements": 8400, + "offset": 67584, + "nbytes": 33600, + "end_offset": 101184, + "padding_before": 0, + "sha256": "ae76db0286c343bc0bf45396d0b553180e6edc6c4d41ade11fc1700699b552e8", + "source_storage": "raw_data" + }, + { + "pack_index": 8, + "graph_index": 182, + "name": "/model.23/Constant_6_output_0", + "dtype": "INT64", + "dtype_code": 7, + "shape": [ + 1 + ], + "elements": 1, + "offset": 101184, + "nbytes": 8, + "end_offset": 101192, + "padding_before": 0, + "sha256": "5fbbc50a5e0bc4e1bb5ea4bbacda5ae6709eff8e286fb002fee73a4913820fe9", + "source_storage": "raw_data" + }, + { + "pack_index": 9, + "graph_index": 183, + "name": "/model.23/Constant_7_output_0", + "dtype": "INT64", + "dtype_code": 7, + "shape": [ + 1 + ], + "elements": 1, + "offset": 101248, + "nbytes": 8, + "end_offset": 101256, + "padding_before": 56, + "sha256": "12a3ae445661ce5dee78d0650d33362dec29c4f82af05e7e57fb595bbbacf0ca", + "source_storage": "raw_data" + }, + { + "pack_index": 10, + "graph_index": 184, + "name": "/model.23/Constant_8_output_0", + "dtype": "INT64", + "dtype_code": 7, + "shape": [ + 3 + ], + "elements": 3, + "offset": 101312, + "nbytes": 24, + "end_offset": 101336, + "padding_before": 56, + "sha256": "0eb23a8b18c1f68e35ed11094da2c705cbd7b7c9f8f7241f028edaf103c37452", + "source_storage": "raw_data" + }, + { + "pack_index": 11, + "graph_index": 175, + "name": "/model.23/Constant_output_0", + "dtype": "INT64", + "dtype_code": 7, + "shape": [ + 3 + ], + "elements": 3, + "offset": 101376, + "nbytes": 24, + "end_offset": 101400, + "padding_before": 40, + "sha256": "e6fe3ca35e2428494fd6d6a4ec382ab84ba7675b2a0055e0d4a571a25e3e1b1d", + "source_storage": "raw_data" + }, + { + "pack_index": 12, + "graph_index": 178, + "name": "/model.23/dfl/Constant_1_output_0", + "dtype": "INT64", + "dtype_code": 7, + "shape": [ + 3 + ], + "elements": 3, + "offset": 101440, + "nbytes": 24, + "end_offset": 101464, + "padding_before": 40, + "sha256": "63d950d2c941430a02cb725bab3ece29d26cadcba29e520f21b05743337c04d4", + "source_storage": "raw_data" + }, + { + "pack_index": 13, + "graph_index": 177, + "name": "/model.23/dfl/Constant_output_0", + "dtype": "INT64", + "dtype_code": 7, + "shape": [ + 4 + ], + "elements": 4, + "offset": 101504, + "nbytes": 32, + "end_offset": 101536, + "padding_before": 40, + "sha256": "1bc2f2eb443a5f99eb3e891468f672e25bbca9b52b7264be803c52f27e74ad96", + "source_storage": "raw_data" + }, + { + "pack_index": 14, + "graph_index": 1, + "name": "model.0.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 16 + ], + "elements": 16, + "offset": 101568, + "nbytes": 64, + "end_offset": 101632, + "padding_before": 32, + "sha256": "5e4f66cab5d3710e29360c07760df4b7058b3a52319a59cbacfe817a1625eeac", + "source_storage": "raw_data" + }, + { + "pack_index": 15, + "graph_index": 0, + "name": "model.0.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 16, + 3, + 3, + 3 + ], + "elements": 432, + "offset": 101632, + "nbytes": 1728, + "end_offset": 103360, + "padding_before": 0, + "sha256": "9112e78b4b1279399b9dbbc2267c382fac270c527416f9c9427a4193ebe4a56f", + "source_storage": "raw_data" + }, + { + "pack_index": 16, + "graph_index": 3, + "name": "model.1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 32 + ], + "elements": 32, + "offset": 103360, + "nbytes": 128, + "end_offset": 103488, + "padding_before": 0, + "sha256": "a70939b61559e86a7edab046199f71495bd2ea4edfc366a84352fdb75426c0ef", + "source_storage": "raw_data" + }, + { + "pack_index": 17, + "graph_index": 2, + "name": "model.1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 32, + 16, + 3, + 3 + ], + "elements": 4608, + "offset": 103488, + "nbytes": 18432, + "end_offset": 121920, + "padding_before": 0, + "sha256": "e9e461db1a0ddc433488bbc8a2af45ee095ed5e25a68658ed74e84341e7ceae3", + "source_storage": "raw_data" + }, + { + "pack_index": 18, + "graph_index": 67, + "name": "model.10.attn.pe.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128 + ], + "elements": 128, + "offset": 121920, + "nbytes": 512, + "end_offset": 122432, + "padding_before": 0, + "sha256": "4aff85fd4e88399a40f74628346dc4012598b317a80d10349e0e2bd7a9d957bc", + "source_storage": "raw_data" + }, + { + "pack_index": 19, + "graph_index": 66, + "name": "model.10.attn.pe.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128, + 1, + 3, + 3 + ], + "elements": 1152, + "offset": 122432, + "nbytes": 4608, + "end_offset": 127040, + "padding_before": 0, + "sha256": "26e661cfad21f055c4fbc919106a56520bd6af236201a8e7779454ccb40cdbf5", + "source_storage": "raw_data" + }, + { + "pack_index": 20, + "graph_index": 65, + "name": "model.10.attn.proj.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128 + ], + "elements": 128, + "offset": 127040, + "nbytes": 512, + "end_offset": 127552, + "padding_before": 0, + "sha256": "243c67f12aeb93339a57550562af880b8a92de01b25ce149ad23e34ed175ea96", + "source_storage": "raw_data" + }, + { + "pack_index": 21, + "graph_index": 64, + "name": "model.10.attn.proj.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128, + 128, + 1, + 1 + ], + "elements": 16384, + "offset": 127552, + "nbytes": 65536, + "end_offset": 193088, + "padding_before": 0, + "sha256": "b0806f331df500e9fa779e46bc003a5e7aaf8d11c04b9da407c7fa520f80c479", + "source_storage": "raw_data" + }, + { + "pack_index": 22, + "graph_index": 63, + "name": "model.10.attn.qkv.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256 + ], + "elements": 256, + "offset": 193088, + "nbytes": 1024, + "end_offset": 194112, + "padding_before": 0, + "sha256": "dad3bdcf51ab59298075e0685b839c91a75322b83f2e23837b72ec50c5c81400", + "source_storage": "raw_data" + }, + { + "pack_index": 23, + "graph_index": 62, + "name": "model.10.attn.qkv.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256, + 128, + 1, + 1 + ], + "elements": 32768, + "offset": 194112, + "nbytes": 131072, + "end_offset": 325184, + "padding_before": 0, + "sha256": "72cdfbb954339f56f40ab7fcf55a1b0d7b043f9ab6dea4d91c461d0c1cc319dd", + "source_storage": "raw_data" + }, + { + "pack_index": 24, + "graph_index": 59, + "name": "model.10.cv1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256 + ], + "elements": 256, + "offset": 325184, + "nbytes": 1024, + "end_offset": 326208, + "padding_before": 0, + "sha256": "8bd0cf2dfe40508b88171cd6df70e9541840c5230dc74ded8093c22f7dfaa2af", + "source_storage": "raw_data" + }, + { + "pack_index": 25, + "graph_index": 58, + "name": "model.10.cv1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256, + 256, + 1, + 1 + ], + "elements": 65536, + "offset": 326208, + "nbytes": 262144, + "end_offset": 588352, + "padding_before": 0, + "sha256": "901c2a79d1c872f1228af270b82796bec06f40baf5b092ff12b38d8dfa2e2126", + "source_storage": "raw_data" + }, + { + "pack_index": 26, + "graph_index": 61, + "name": "model.10.cv2.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256 + ], + "elements": 256, + "offset": 588352, + "nbytes": 1024, + "end_offset": 589376, + "padding_before": 0, + "sha256": "98b07f6756d798789ca572413c4b75fc28f6d3e3f28adc56af3a6efcca6654a1", + "source_storage": "raw_data" + }, + { + "pack_index": 27, + "graph_index": 60, + "name": "model.10.cv2.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256, + 256, + 1, + 1 + ], + "elements": 65536, + "offset": 589376, + "nbytes": 262144, + "end_offset": 851520, + "padding_before": 0, + "sha256": "a686ee0c61346e67e1cdd6ed9501da1bad2d4142f3953a4dc3b3cb8d3a1f65c8", + "source_storage": "raw_data" + }, + { + "pack_index": 28, + "graph_index": 69, + "name": "model.10.ffn.0.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256 + ], + "elements": 256, + "offset": 851520, + "nbytes": 1024, + "end_offset": 852544, + "padding_before": 0, + "sha256": "ab3c4fcb8612e4b18a0584afceb45dbd6da5575cee2982d9fdbf2ad5ebcf56e4", + "source_storage": "raw_data" + }, + { + "pack_index": 29, + "graph_index": 68, + "name": "model.10.ffn.0.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256, + 128, + 1, + 1 + ], + "elements": 32768, + "offset": 852544, + "nbytes": 131072, + "end_offset": 983616, + "padding_before": 0, + "sha256": "8385d09cdeb591a3b87b103cae2763585ed1337285c1204e6ab1c559fa770775", + "source_storage": "raw_data" + }, + { + "pack_index": 30, + "graph_index": 71, + "name": "model.10.ffn.1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128 + ], + "elements": 128, + "offset": 983616, + "nbytes": 512, + "end_offset": 984128, + "padding_before": 0, + "sha256": "7e885d8406d50ac4ef85f9f7c0e7bae91e0752cbc9a1fc894db5e36ba82ce54f", + "source_storage": "raw_data" + }, + { + "pack_index": 31, + "graph_index": 70, + "name": "model.10.ffn.1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128, + 256, + 1, + 1 + ], + "elements": 32768, + "offset": 984128, + "nbytes": 131072, + "end_offset": 1115200, + "padding_before": 0, + "sha256": "800326c97bdbf170637293dfe47cc72afc71ec26348dd2b44d371fbc8e956a65", + "source_storage": "raw_data" + }, + { + "pack_index": 32, + "graph_index": 73, + "name": "model.13.cv1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128 + ], + "elements": 128, + "offset": 1115200, + "nbytes": 512, + "end_offset": 1115712, + "padding_before": 0, + "sha256": "be72e1c03eadb9403e1d7fbd5eeae9e1d25ab4e326030cad2d968080da9d4581", + "source_storage": "raw_data" + }, + { + "pack_index": 33, + "graph_index": 72, + "name": "model.13.cv1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128, + 384, + 1, + 1 + ], + "elements": 49152, + "offset": 1115712, + "nbytes": 196608, + "end_offset": 1312320, + "padding_before": 0, + "sha256": "dd86101e34defdbed16c8736c46d96956c20418a03c8d9a17e7768360c0b2273", + "source_storage": "raw_data" + }, + { + "pack_index": 34, + "graph_index": 75, + "name": "model.13.cv2.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128 + ], + "elements": 128, + "offset": 1312320, + "nbytes": 512, + "end_offset": 1312832, + "padding_before": 0, + "sha256": "f4e7b22811d387e83f286839603ac1e1d968a1df2793a9e2700a1fbfb09b9a9c", + "source_storage": "raw_data" + }, + { + "pack_index": 35, + "graph_index": 74, + "name": "model.13.cv2.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128, + 192, + 1, + 1 + ], + "elements": 24576, + "offset": 1312832, + "nbytes": 98304, + "end_offset": 1411136, + "padding_before": 0, + "sha256": "2f37ef545d85012f946ad87912388c15f45f571ba34a0597178b7f4864c7e62d", + "source_storage": "raw_data" + }, + { + "pack_index": 36, + "graph_index": 77, + "name": "model.13.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64 + ], + "elements": 64, + "offset": 1411136, + "nbytes": 256, + "end_offset": 1411392, + "padding_before": 0, + "sha256": "8af5509e0d355d2aecd7d2eeeb75e384f9aa1856b7870cce2e8a929a1dd2682a", + "source_storage": "raw_data" + }, + { + "pack_index": 37, + "graph_index": 76, + "name": "model.13.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "offset": 1411392, + "nbytes": 147456, + "end_offset": 1558848, + "padding_before": 0, + "sha256": "fbb99f9c01364dececaa59ed8cfa6c1b0ddad26a7b14168ecee5bb445d6b25bd", + "source_storage": "raw_data" + }, + { + "pack_index": 38, + "graph_index": 79, + "name": "model.13.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64 + ], + "elements": 64, + "offset": 1558848, + "nbytes": 256, + "end_offset": 1559104, + "padding_before": 0, + "sha256": "f5812b1926f165dd7684e1f16ed288cbdb28ffb7c8647435604840957f5c8f12", + "source_storage": "raw_data" + }, + { + "pack_index": 39, + "graph_index": 78, + "name": "model.13.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "offset": 1559104, + "nbytes": 147456, + "end_offset": 1706560, + "padding_before": 0, + "sha256": "d4c9157bd520e124291d7638b841705e0b06cbba1fef6c5c4d75972158686958", + "source_storage": "raw_data" + }, + { + "pack_index": 40, + "graph_index": 81, + "name": "model.16.cv1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64 + ], + "elements": 64, + "offset": 1706560, + "nbytes": 256, + "end_offset": 1706816, + "padding_before": 0, + "sha256": "8020e4f228806df794690dff34e0ddbccfc93ceb6891bb00c41ae73ff9129e60", + "source_storage": "raw_data" + }, + { + "pack_index": 41, + "graph_index": 80, + "name": "model.16.cv1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64, + 192, + 1, + 1 + ], + "elements": 12288, + "offset": 1706816, + "nbytes": 49152, + "end_offset": 1755968, + "padding_before": 0, + "sha256": "6cec934f4490cb803026a0e4ab0038757e629d7b3b1371ec8152eec001902a86", + "source_storage": "raw_data" + }, + { + "pack_index": 42, + "graph_index": 83, + "name": "model.16.cv2.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64 + ], + "elements": 64, + "offset": 1755968, + "nbytes": 256, + "end_offset": 1756224, + "padding_before": 0, + "sha256": "1315a9b96b81a4567bc74116f069d6ff5538a4c2ef1045c838715feb405a5a7a", + "source_storage": "raw_data" + }, + { + "pack_index": 43, + "graph_index": 82, + "name": "model.16.cv2.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64, + 96, + 1, + 1 + ], + "elements": 6144, + "offset": 1756224, + "nbytes": 24576, + "end_offset": 1780800, + "padding_before": 0, + "sha256": "0c52d071e57be08e4ddd379d773f08ef80e73cc5093c045d421efaaea8603c2e", + "source_storage": "raw_data" + }, + { + "pack_index": 44, + "graph_index": 85, + "name": "model.16.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 32 + ], + "elements": 32, + "offset": 1780800, + "nbytes": 128, + "end_offset": 1780928, + "padding_before": 0, + "sha256": "f25fd6e329a2d9edccd88a09a63a608f7b4c07fad73a47e754583923aa305925", + "source_storage": "raw_data" + }, + { + "pack_index": 45, + "graph_index": 84, + "name": "model.16.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 32, + 32, + 3, + 3 + ], + "elements": 9216, + "offset": 1780928, + "nbytes": 36864, + "end_offset": 1817792, + "padding_before": 0, + "sha256": "9139001dd281a9059aeff980605545043995a67ea8e71322af1e22325da1b9e1", + "source_storage": "raw_data" + }, + { + "pack_index": 46, + "graph_index": 87, + "name": "model.16.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 32 + ], + "elements": 32, + "offset": 1817792, + "nbytes": 128, + "end_offset": 1817920, + "padding_before": 0, + "sha256": "3f95aa00ca131e5130ffb7c07ea8914bbd03d35f92bd2598636fb8a63bb51bdd", + "source_storage": "raw_data" + }, + { + "pack_index": 47, + "graph_index": 86, + "name": "model.16.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 32, + 32, + 3, + 3 + ], + "elements": 9216, + "offset": 1817920, + "nbytes": 36864, + "end_offset": 1854784, + "padding_before": 0, + "sha256": "11e20f97ebdfabe04b2aebc52e809c4c0d81786a80ad0e86f4db747ac18bc9ca", + "source_storage": "raw_data" + }, + { + "pack_index": 48, + "graph_index": 89, + "name": "model.17.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64 + ], + "elements": 64, + "offset": 1854784, + "nbytes": 256, + "end_offset": 1855040, + "padding_before": 0, + "sha256": "aeba72ce8511be2e487601f561d81b0ca3bc7bf0d99bab6ef30e8e40c9d1dbee", + "source_storage": "raw_data" + }, + { + "pack_index": 49, + "graph_index": 88, + "name": "model.17.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "offset": 1855040, + "nbytes": 147456, + "end_offset": 2002496, + "padding_before": 0, + "sha256": "26cea3fcd5ed1f804232ab7eb84c0851f12889e73b3d462b78f3f6ee9e68a786", + "source_storage": "raw_data" + }, + { + "pack_index": 50, + "graph_index": 91, + "name": "model.19.cv1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128 + ], + "elements": 128, + "offset": 2002496, + "nbytes": 512, + "end_offset": 2003008, + "padding_before": 0, + "sha256": "b6419c47c1aa127dc8bdcbd649b95e83fc7f3cf498ba8e06e45af93a48be2f5b", + "source_storage": "raw_data" + }, + { + "pack_index": 51, + "graph_index": 90, + "name": "model.19.cv1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128, + 192, + 1, + 1 + ], + "elements": 24576, + "offset": 2003008, + "nbytes": 98304, + "end_offset": 2101312, + "padding_before": 0, + "sha256": "1c71da2066ca57ca58dd3e1868d313ca9b7d4e36b7d32f49243ab5c80a2aa961", + "source_storage": "raw_data" + }, + { + "pack_index": 52, + "graph_index": 93, + "name": "model.19.cv2.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128 + ], + "elements": 128, + "offset": 2101312, + "nbytes": 512, + "end_offset": 2101824, + "padding_before": 0, + "sha256": "def4ab13d9dc878f230049d59249b15f6ba4636fda519285c188cdb272fb2b3c", + "source_storage": "raw_data" + }, + { + "pack_index": 53, + "graph_index": 92, + "name": "model.19.cv2.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128, + 192, + 1, + 1 + ], + "elements": 24576, + "offset": 2101824, + "nbytes": 98304, + "end_offset": 2200128, + "padding_before": 0, + "sha256": "ca5d32b90a87734ba5cec6bac2acd3e6528dd7652eaa3c827ce33ec99b93e75f", + "source_storage": "raw_data" + }, + { + "pack_index": 54, + "graph_index": 95, + "name": "model.19.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64 + ], + "elements": 64, + "offset": 2200128, + "nbytes": 256, + "end_offset": 2200384, + "padding_before": 0, + "sha256": "24b8463c77d58ac794a0fc1a603763807c04031bbac5f2490bf3d178aab13377", + "source_storage": "raw_data" + }, + { + "pack_index": 55, + "graph_index": 94, + "name": "model.19.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "offset": 2200384, + "nbytes": 147456, + "end_offset": 2347840, + "padding_before": 0, + "sha256": "f4e8dbc8a15e6963eb63a6d61815e1faefa8bf9fbd7ff7eb8f0099c1626488a3", + "source_storage": "raw_data" + }, + { + "pack_index": 56, + "graph_index": 97, + "name": "model.19.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64 + ], + "elements": 64, + "offset": 2347840, + "nbytes": 256, + "end_offset": 2348096, + "padding_before": 0, + "sha256": "1f488483195893715ef7bcdcbb449434b60a0cbb7650e61f7845cd5cdbcec89a", + "source_storage": "raw_data" + }, + { + "pack_index": 57, + "graph_index": 96, + "name": "model.19.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "offset": 2348096, + "nbytes": 147456, + "end_offset": 2495552, + "padding_before": 0, + "sha256": "5428909427bf2f9ddbb8b0da4486f110564a9945da77285df0ac3297945c0a95", + "source_storage": "raw_data" + }, + { + "pack_index": 58, + "graph_index": 5, + "name": "model.2.cv1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 32 + ], + "elements": 32, + "offset": 2495552, + "nbytes": 128, + "end_offset": 2495680, + "padding_before": 0, + "sha256": "eeacab9cdba3079f17539bda7d204dd140c129c38643fe8e0cefee9619ba0fe2", + "source_storage": "raw_data" + }, + { + "pack_index": 59, + "graph_index": 4, + "name": "model.2.cv1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 32, + 32, + 1, + 1 + ], + "elements": 1024, + "offset": 2495680, + "nbytes": 4096, + "end_offset": 2499776, + "padding_before": 0, + "sha256": "f6e954b6acf9813c42a8aa2903785ae6226e695c52a8ebc36c1a3c8b3c99b7d5", + "source_storage": "raw_data" + }, + { + "pack_index": 60, + "graph_index": 7, + "name": "model.2.cv2.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 32 + ], + "elements": 32, + "offset": 2499776, + "nbytes": 128, + "end_offset": 2499904, + "padding_before": 0, + "sha256": "5406c0c4355bc76cd5d32cadb340d804d4b7b505bf439b35950bc07bc5623192", + "source_storage": "raw_data" + }, + { + "pack_index": 61, + "graph_index": 6, + "name": "model.2.cv2.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 32, + 48, + 1, + 1 + ], + "elements": 1536, + "offset": 2499904, + "nbytes": 6144, + "end_offset": 2506048, + "padding_before": 0, + "sha256": "93d29127e1715efdb42bde9a093d4e88fbf08bb2be4d80e6295e5a740dcded72", + "source_storage": "raw_data" + }, + { + "pack_index": 62, + "graph_index": 9, + "name": "model.2.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 16 + ], + "elements": 16, + "offset": 2506048, + "nbytes": 64, + "end_offset": 2506112, + "padding_before": 0, + "sha256": "b135f6cfdbbd29392a58068eb5f5427a312b6e7cefae697f9932f1ab46fd0eb9", + "source_storage": "raw_data" + }, + { + "pack_index": 63, + "graph_index": 8, + "name": "model.2.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 16, + 16, + 3, + 3 + ], + "elements": 2304, + "offset": 2506112, + "nbytes": 9216, + "end_offset": 2515328, + "padding_before": 0, + "sha256": "1016fad80107c11cc8ecaab254798dab9d16e27eb0ecdc48291b9adc2da4f93c", + "source_storage": "raw_data" + }, + { + "pack_index": 64, + "graph_index": 11, + "name": "model.2.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 16 + ], + "elements": 16, + "offset": 2515328, + "nbytes": 64, + "end_offset": 2515392, + "padding_before": 0, + "sha256": "4082888c1588b3fc1e256834d517e981bc37440333e9105e732d46f743dba147", + "source_storage": "raw_data" + }, + { + "pack_index": 65, + "graph_index": 10, + "name": "model.2.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 16, + 16, + 3, + 3 + ], + "elements": 2304, + "offset": 2515392, + "nbytes": 9216, + "end_offset": 2524608, + "padding_before": 0, + "sha256": "3ba769408202999345441b84761c3d55ed0fd9c49e7f85a1c902d810dcfcf826", + "source_storage": "raw_data" + }, + { + "pack_index": 66, + "graph_index": 99, + "name": "model.20.cv1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128 + ], + "elements": 128, + "offset": 2524608, + "nbytes": 512, + "end_offset": 2525120, + "padding_before": 0, + "sha256": "9b8f229298f8211910c96437a9c51198f60c5b6676edcdf369d719445c5d4675", + "source_storage": "raw_data" + }, + { + "pack_index": 67, + "graph_index": 98, + "name": "model.20.cv1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128, + 128, + 1, + 1 + ], + "elements": 16384, + "offset": 2525120, + "nbytes": 65536, + "end_offset": 2590656, + "padding_before": 0, + "sha256": "62cefab489397e53502378569f5e2cf55502392613153b76f6b3fe1f6529fc73", + "source_storage": "raw_data" + }, + { + "pack_index": 68, + "graph_index": 101, + "name": "model.20.cv2.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128 + ], + "elements": 128, + "offset": 2590656, + "nbytes": 512, + "end_offset": 2591168, + "padding_before": 0, + "sha256": "60028fc80d513d43f779e163989dd629485fe078e5600ceb1edb884ac0687f51", + "source_storage": "raw_data" + }, + { + "pack_index": 69, + "graph_index": 100, + "name": "model.20.cv2.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128, + 1, + 3, + 3 + ], + "elements": 1152, + "offset": 2591168, + "nbytes": 4608, + "end_offset": 2595776, + "padding_before": 0, + "sha256": "67384a7e6ac0458775dce6ba90ea743927e3a070d46f9c4cce34f647be2514c3", + "source_storage": "raw_data" + }, + { + "pack_index": 70, + "graph_index": 103, + "name": "model.22.cv1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256 + ], + "elements": 256, + "offset": 2595776, + "nbytes": 1024, + "end_offset": 2596800, + "padding_before": 0, + "sha256": "a1df48c2c9b2b4d66530c9698711f8c2e255cc37a6abf19487f5744d67435e8a", + "source_storage": "raw_data" + }, + { + "pack_index": 71, + "graph_index": 102, + "name": "model.22.cv1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256, + 384, + 1, + 1 + ], + "elements": 98304, + "offset": 2596800, + "nbytes": 393216, + "end_offset": 2990016, + "padding_before": 0, + "sha256": "d6c6b24c6367f4c1565c2bcbb3ff51f0c0a006e9f16d727ad9176d8e40d3901f", + "source_storage": "raw_data" + }, + { + "pack_index": 72, + "graph_index": 105, + "name": "model.22.cv2.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256 + ], + "elements": 256, + "offset": 2990016, + "nbytes": 1024, + "end_offset": 2991040, + "padding_before": 0, + "sha256": "6d3abd8840df6a30a1d44679fe618645776984e28290da0e4cc6442d73a33e54", + "source_storage": "raw_data" + }, + { + "pack_index": 73, + "graph_index": 104, + "name": "model.22.cv2.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256, + 384, + 1, + 1 + ], + "elements": 98304, + "offset": 2991040, + "nbytes": 393216, + "end_offset": 3384256, + "padding_before": 0, + "sha256": "a830b260082983f26c6052d65e71b5fbe2972a71ef4c7e2dfe9208ad0ac2f2ce", + "source_storage": "raw_data" + }, + { + "pack_index": 74, + "graph_index": 107, + "name": "model.22.m.0.cv1.0.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128 + ], + "elements": 128, + "offset": 3384256, + "nbytes": 512, + "end_offset": 3384768, + "padding_before": 0, + "sha256": "d70ea70bfaf0259f17a28ce3fda7a948b9401d99629d506f6384d5102f86fb1b", + "source_storage": "raw_data" + }, + { + "pack_index": 75, + "graph_index": 106, + "name": "model.22.m.0.cv1.0.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128, + 1, + 3, + 3 + ], + "elements": 1152, + "offset": 3384768, + "nbytes": 4608, + "end_offset": 3389376, + "padding_before": 0, + "sha256": "c864cf8224655a590a88b8036375d24426a1c01c709a8f2cf807f962946426cf", + "source_storage": "raw_data" + }, + { + "pack_index": 76, + "graph_index": 109, + "name": "model.22.m.0.cv1.1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256 + ], + "elements": 256, + "offset": 3389376, + "nbytes": 1024, + "end_offset": 3390400, + "padding_before": 0, + "sha256": "69acaeb7614d663869235be19e41940e465b11e4be0e5b7b58c5f82428f095cf", + "source_storage": "raw_data" + }, + { + "pack_index": 77, + "graph_index": 108, + "name": "model.22.m.0.cv1.1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256, + 128, + 1, + 1 + ], + "elements": 32768, + "offset": 3390400, + "nbytes": 131072, + "end_offset": 3521472, + "padding_before": 0, + "sha256": "cddf18a54d815ee7d7f84fd97d24f01922b0069cd5a4fe02b6e9211eabe8a4fd", + "source_storage": "raw_data" + }, + { + "pack_index": 78, + "graph_index": 111, + "name": "model.22.m.0.cv1.2.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256 + ], + "elements": 256, + "offset": 3521472, + "nbytes": 1024, + "end_offset": 3522496, + "padding_before": 0, + "sha256": "53dbfca84d945afbe20dfa9471ec847a203edd31ee9c1462e186bc85bce1c219", + "source_storage": "raw_data" + }, + { + "pack_index": 79, + "graph_index": 110, + "name": "model.22.m.0.cv1.2.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256, + 1, + 7, + 7 + ], + "elements": 12544, + "offset": 3522496, + "nbytes": 50176, + "end_offset": 3572672, + "padding_before": 0, + "sha256": "8276c9ff40d0379f96a3bdd1d1369d20499ed978ea1b74f85cee9dc58bad8c92", + "source_storage": "raw_data" + }, + { + "pack_index": 80, + "graph_index": 113, + "name": "model.22.m.0.cv1.3.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128 + ], + "elements": 128, + "offset": 3572672, + "nbytes": 512, + "end_offset": 3573184, + "padding_before": 0, + "sha256": "693466074c78b297c0fd407fe487b6ce6c6527a26454fa959a49fb8874552004", + "source_storage": "raw_data" + }, + { + "pack_index": 81, + "graph_index": 112, + "name": "model.22.m.0.cv1.3.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128, + 256, + 1, + 1 + ], + "elements": 32768, + "offset": 3573184, + "nbytes": 131072, + "end_offset": 3704256, + "padding_before": 0, + "sha256": "96721cd1177c94008e1e8476b68d0993980d1cc68beb75603020410a0e3b9bd1", + "source_storage": "raw_data" + }, + { + "pack_index": 82, + "graph_index": 115, + "name": "model.22.m.0.cv1.4.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128 + ], + "elements": 128, + "offset": 3704256, + "nbytes": 512, + "end_offset": 3704768, + "padding_before": 0, + "sha256": "b1be5ce361d83e3e5645fd4c7e5f2dc89496066c31235b2dc21d8f282d9de28f", + "source_storage": "raw_data" + }, + { + "pack_index": 83, + "graph_index": 114, + "name": "model.22.m.0.cv1.4.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128, + 1, + 3, + 3 + ], + "elements": 1152, + "offset": 3704768, + "nbytes": 4608, + "end_offset": 3709376, + "padding_before": 0, + "sha256": "7c5e3e31fda2ee3ccd03e83dacc58343ff172c1d33c0aa049ebd023d396951e8", + "source_storage": "raw_data" + }, + { + "pack_index": 84, + "graph_index": 116, + "name": "model.23.dfl.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 1, + 16, + 1, + 1 + ], + "elements": 16, + "offset": 3709376, + "nbytes": 64, + "end_offset": 3709440, + "padding_before": 0, + "sha256": "58dda328598e2f7fe472621bfc54935aaa354d1a6ebcaf9562cd743fd575eb19", + "source_storage": "raw_data" + }, + { + "pack_index": 85, + "graph_index": 118, + "name": "model.23.one2one_cv2.0.0.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64 + ], + "elements": 64, + "offset": 3709440, + "nbytes": 256, + "end_offset": 3709696, + "padding_before": 0, + "sha256": "66170f907b723bf7256a2f6167a8a2512c56f9050645adf71d6025647406ea17", + "source_storage": "raw_data" + }, + { + "pack_index": 86, + "graph_index": 117, + "name": "model.23.one2one_cv2.0.0.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "offset": 3709696, + "nbytes": 147456, + "end_offset": 3857152, + "padding_before": 0, + "sha256": "34df72ab324cc1f103df0421fb6561794bdce94513de91aedbffff1cac6888c0", + "source_storage": "raw_data" + }, + { + "pack_index": 87, + "graph_index": 120, + "name": "model.23.one2one_cv2.0.1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64 + ], + "elements": 64, + "offset": 3857152, + "nbytes": 256, + "end_offset": 3857408, + "padding_before": 0, + "sha256": "da35450e13893d678804d39efbf99882292bde8f674f8f0d106f98752b455112", + "source_storage": "raw_data" + }, + { + "pack_index": 88, + "graph_index": 119, + "name": "model.23.one2one_cv2.0.1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "offset": 3857408, + "nbytes": 147456, + "end_offset": 4004864, + "padding_before": 0, + "sha256": "5ceb24a90bc0076d45c2b53e317e9e88f713b697ab44cd237c4e3d3c20f8625b", + "source_storage": "raw_data" + }, + { + "pack_index": 89, + "graph_index": 122, + "name": "model.23.one2one_cv2.0.2.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64 + ], + "elements": 64, + "offset": 4004864, + "nbytes": 256, + "end_offset": 4005120, + "padding_before": 0, + "sha256": "30606f1771bbffebf42ffd215236c396a42ac8be60d97e21c00055ed21eef2e2", + "source_storage": "raw_data" + }, + { + "pack_index": 90, + "graph_index": 121, + "name": "model.23.one2one_cv2.0.2.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64, + 64, + 1, + 1 + ], + "elements": 4096, + "offset": 4005120, + "nbytes": 16384, + "end_offset": 4021504, + "padding_before": 0, + "sha256": "d508083b6cf337c5afbfab49e06b9feb7617eb02d83dcab22f52652f5b75a96f", + "source_storage": "raw_data" + }, + { + "pack_index": 91, + "graph_index": 124, + "name": "model.23.one2one_cv2.1.0.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64 + ], + "elements": 64, + "offset": 4021504, + "nbytes": 256, + "end_offset": 4021760, + "padding_before": 0, + "sha256": "cc80d57e0409387c82f62db10f3e4e632090ad5dd3432f0c9b1ea3e184a6e735", + "source_storage": "raw_data" + }, + { + "pack_index": 92, + "graph_index": 123, + "name": "model.23.one2one_cv2.1.0.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64, + 128, + 3, + 3 + ], + "elements": 73728, + "offset": 4021760, + "nbytes": 294912, + "end_offset": 4316672, + "padding_before": 0, + "sha256": "f0a9f0c24be9ff41a6eb3e63bc6e9fa8259eb09eef66c4c87f042ad26a487fb2", + "source_storage": "raw_data" + }, + { + "pack_index": 93, + "graph_index": 126, + "name": "model.23.one2one_cv2.1.1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64 + ], + "elements": 64, + "offset": 4316672, + "nbytes": 256, + "end_offset": 4316928, + "padding_before": 0, + "sha256": "106a032d4339dce044522076262a4354f55a0feb09c8d4e2a026c42104d5d924", + "source_storage": "raw_data" + }, + { + "pack_index": 94, + "graph_index": 125, + "name": "model.23.one2one_cv2.1.1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "offset": 4316928, + "nbytes": 147456, + "end_offset": 4464384, + "padding_before": 0, + "sha256": "7cf470535c301da999c1a3239ea8fcf66b1ab06c8e1361c7a812b953de06d8ab", + "source_storage": "raw_data" + }, + { + "pack_index": 95, + "graph_index": 128, + "name": "model.23.one2one_cv2.1.2.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64 + ], + "elements": 64, + "offset": 4464384, + "nbytes": 256, + "end_offset": 4464640, + "padding_before": 0, + "sha256": "4760d0e940ac6eceabf0231e09afc607e5da4e58c581eaf5732c495686e85fa3", + "source_storage": "raw_data" + }, + { + "pack_index": 96, + "graph_index": 127, + "name": "model.23.one2one_cv2.1.2.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64, + 64, + 1, + 1 + ], + "elements": 4096, + "offset": 4464640, + "nbytes": 16384, + "end_offset": 4481024, + "padding_before": 0, + "sha256": "b1f77e4e7356ec05b2e9c573f454aa661e6659cf880b828c539923282c6282d3", + "source_storage": "raw_data" + }, + { + "pack_index": 97, + "graph_index": 130, + "name": "model.23.one2one_cv2.2.0.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64 + ], + "elements": 64, + "offset": 4481024, + "nbytes": 256, + "end_offset": 4481280, + "padding_before": 0, + "sha256": "bf69ec9b9ce595a1ea7fb39f403b9f2bde8229f3112f2f61d16e70a87cbb969e", + "source_storage": "raw_data" + }, + { + "pack_index": 98, + "graph_index": 129, + "name": "model.23.one2one_cv2.2.0.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64, + 256, + 3, + 3 + ], + "elements": 147456, + "offset": 4481280, + "nbytes": 589824, + "end_offset": 5071104, + "padding_before": 0, + "sha256": "5f5a4573e973f8adfb11c7b335af579372ace7376ab28f7b93e5da0bd857710f", + "source_storage": "raw_data" + }, + { + "pack_index": 99, + "graph_index": 132, + "name": "model.23.one2one_cv2.2.1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64 + ], + "elements": 64, + "offset": 5071104, + "nbytes": 256, + "end_offset": 5071360, + "padding_before": 0, + "sha256": "e7ad74974567976e0794eada15b2bf3d3947183de706a03d65a41428fbfcc2b9", + "source_storage": "raw_data" + }, + { + "pack_index": 100, + "graph_index": 131, + "name": "model.23.one2one_cv2.2.1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "offset": 5071360, + "nbytes": 147456, + "end_offset": 5218816, + "padding_before": 0, + "sha256": "5390dd304d6af4acc2ecc351146cd48de870cac1f0cfea4f00e0964051200111", + "source_storage": "raw_data" + }, + { + "pack_index": 101, + "graph_index": 134, + "name": "model.23.one2one_cv2.2.2.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64 + ], + "elements": 64, + "offset": 5218816, + "nbytes": 256, + "end_offset": 5219072, + "padding_before": 0, + "sha256": "83b74e5b00a6c0f8d26c79ea5556edb00d3690231b26b35791e67340bd42d696", + "source_storage": "raw_data" + }, + { + "pack_index": 102, + "graph_index": 133, + "name": "model.23.one2one_cv2.2.2.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64, + 64, + 1, + 1 + ], + "elements": 4096, + "offset": 5219072, + "nbytes": 16384, + "end_offset": 5235456, + "padding_before": 0, + "sha256": "551da68615a6cde515f2c139cd1c506678dd7ddccf90887dc0beefb25cc0b6f2", + "source_storage": "raw_data" + }, + { + "pack_index": 103, + "graph_index": 136, + "name": "model.23.one2one_cv3.0.0.0.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64 + ], + "elements": 64, + "offset": 5235456, + "nbytes": 256, + "end_offset": 5235712, + "padding_before": 0, + "sha256": "fc9cbc0672d3f33acaa351602578f26c60058e06c6757f0d1a23677977201794", + "source_storage": "raw_data" + }, + { + "pack_index": 104, + "graph_index": 135, + "name": "model.23.one2one_cv3.0.0.0.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64, + 1, + 3, + 3 + ], + "elements": 576, + "offset": 5235712, + "nbytes": 2304, + "end_offset": 5238016, + "padding_before": 0, + "sha256": "eaff7bd4a9be038ea36238845655a609123d9e87c8ef79788c01b523959d6ebe", + "source_storage": "raw_data" + }, + { + "pack_index": 105, + "graph_index": 138, + "name": "model.23.one2one_cv3.0.0.1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 80 + ], + "elements": 80, + "offset": 5238016, + "nbytes": 320, + "end_offset": 5238336, + "padding_before": 0, + "sha256": "a827adf5b6daf370c9ecd8480570ab26b91ef3c74265c4ec271b838dfce272b8", + "source_storage": "raw_data" + }, + { + "pack_index": 106, + "graph_index": 137, + "name": "model.23.one2one_cv3.0.0.1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 80, + 64, + 1, + 1 + ], + "elements": 5120, + "offset": 5238336, + "nbytes": 20480, + "end_offset": 5258816, + "padding_before": 0, + "sha256": "a96fca5643a33cc16db19740b88a3f5206d256523d663df238745406d4807108", + "source_storage": "raw_data" + }, + { + "pack_index": 107, + "graph_index": 140, + "name": "model.23.one2one_cv3.0.1.0.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 80 + ], + "elements": 80, + "offset": 5258816, + "nbytes": 320, + "end_offset": 5259136, + "padding_before": 0, + "sha256": "4dd6b8bc920d4b0148ab3db3e561d8cfe8d0b1e33d52739da3e20ed31b091920", + "source_storage": "raw_data" + }, + { + "pack_index": 108, + "graph_index": 139, + "name": "model.23.one2one_cv3.0.1.0.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 80, + 1, + 3, + 3 + ], + "elements": 720, + "offset": 5259136, + "nbytes": 2880, + "end_offset": 5262016, + "padding_before": 0, + "sha256": "9cc4491f672ae8c017e697d877ec170cce5b03ec32c391a007650e683bbba7c6", + "source_storage": "raw_data" + }, + { + "pack_index": 109, + "graph_index": 142, + "name": "model.23.one2one_cv3.0.1.1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 80 + ], + "elements": 80, + "offset": 5262016, + "nbytes": 320, + "end_offset": 5262336, + "padding_before": 0, + "sha256": "e069433feaa7716ebd63c400cb13e1d5b0bb75e795a36f17e7e032c85c078253", + "source_storage": "raw_data" + }, + { + "pack_index": 110, + "graph_index": 141, + "name": "model.23.one2one_cv3.0.1.1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 80, + 80, + 1, + 1 + ], + "elements": 6400, + "offset": 5262336, + "nbytes": 25600, + "end_offset": 5287936, + "padding_before": 0, + "sha256": "ff82fcc9b0cca95b5674e49374cdb788e2a863c259cb48d1e986613de46a8ed7", + "source_storage": "raw_data" + }, + { + "pack_index": 111, + "graph_index": 144, + "name": "model.23.one2one_cv3.0.2.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 80 + ], + "elements": 80, + "offset": 5287936, + "nbytes": 320, + "end_offset": 5288256, + "padding_before": 0, + "sha256": "e051f78f3a6755ff38cf01401bcac391fa941c93f0397b779d4b18baa05b7a91", + "source_storage": "raw_data" + }, + { + "pack_index": 112, + "graph_index": 143, + "name": "model.23.one2one_cv3.0.2.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 80, + 80, + 1, + 1 + ], + "elements": 6400, + "offset": 5288256, + "nbytes": 25600, + "end_offset": 5313856, + "padding_before": 0, + "sha256": "bb04b22bf9bc6e87d061205afce0096e1006caaccaf1c6f1b057b529b5a925b0", + "source_storage": "raw_data" + }, + { + "pack_index": 113, + "graph_index": 146, + "name": "model.23.one2one_cv3.1.0.0.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128 + ], + "elements": 128, + "offset": 5313856, + "nbytes": 512, + "end_offset": 5314368, + "padding_before": 0, + "sha256": "0bafb212274dec3b1561ed0d66ab87e86b214964469883750b4bfa0e1e485fd0", + "source_storage": "raw_data" + }, + { + "pack_index": 114, + "graph_index": 145, + "name": "model.23.one2one_cv3.1.0.0.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128, + 1, + 3, + 3 + ], + "elements": 1152, + "offset": 5314368, + "nbytes": 4608, + "end_offset": 5318976, + "padding_before": 0, + "sha256": "9065662fcf2308bf95ea2695d791abc1a55981a6dc87f1c20b3159a1882a88f8", + "source_storage": "raw_data" + }, + { + "pack_index": 115, + "graph_index": 148, + "name": "model.23.one2one_cv3.1.0.1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 80 + ], + "elements": 80, + "offset": 5318976, + "nbytes": 320, + "end_offset": 5319296, + "padding_before": 0, + "sha256": "4c9830ff1a5e3ff764ffaa2751b83f8675dcb459cba882822dd8b13394a7c5df", + "source_storage": "raw_data" + }, + { + "pack_index": 116, + "graph_index": 147, + "name": "model.23.one2one_cv3.1.0.1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 80, + 128, + 1, + 1 + ], + "elements": 10240, + "offset": 5319296, + "nbytes": 40960, + "end_offset": 5360256, + "padding_before": 0, + "sha256": "21ed36fc0f44c91c78529c3bad7cef8fcc685af78e3405ba70942fc13ece6c4d", + "source_storage": "raw_data" + }, + { + "pack_index": 117, + "graph_index": 150, + "name": "model.23.one2one_cv3.1.1.0.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 80 + ], + "elements": 80, + "offset": 5360256, + "nbytes": 320, + "end_offset": 5360576, + "padding_before": 0, + "sha256": "d6d5f099b97fbdad13a386923c03b855133578a6137d14f9c5f7c5616c0fd7cf", + "source_storage": "raw_data" + }, + { + "pack_index": 118, + "graph_index": 149, + "name": "model.23.one2one_cv3.1.1.0.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 80, + 1, + 3, + 3 + ], + "elements": 720, + "offset": 5360576, + "nbytes": 2880, + "end_offset": 5363456, + "padding_before": 0, + "sha256": "0d19e359a994f8b289b7672aeacccd86198e1d2bcb97aadb0eb626e00ee79cb9", + "source_storage": "raw_data" + }, + { + "pack_index": 119, + "graph_index": 152, + "name": "model.23.one2one_cv3.1.1.1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 80 + ], + "elements": 80, + "offset": 5363456, + "nbytes": 320, + "end_offset": 5363776, + "padding_before": 0, + "sha256": "dd88579876f651ebf06188c0f68badcbda828f8c343471267a8fcdd93986f6d6", + "source_storage": "raw_data" + }, + { + "pack_index": 120, + "graph_index": 151, + "name": "model.23.one2one_cv3.1.1.1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 80, + 80, + 1, + 1 + ], + "elements": 6400, + "offset": 5363776, + "nbytes": 25600, + "end_offset": 5389376, + "padding_before": 0, + "sha256": "0367c59e22c7d24afd65cb4c865d17b68eb24bbdfa5a9807f76374acdfe5e5ba", + "source_storage": "raw_data" + }, + { + "pack_index": 121, + "graph_index": 154, + "name": "model.23.one2one_cv3.1.2.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 80 + ], + "elements": 80, + "offset": 5389376, + "nbytes": 320, + "end_offset": 5389696, + "padding_before": 0, + "sha256": "b7cbc148fc88928130c974209acc074120407aca02ed14e8d5e90be67dd61b74", + "source_storage": "raw_data" + }, + { + "pack_index": 122, + "graph_index": 153, + "name": "model.23.one2one_cv3.1.2.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 80, + 80, + 1, + 1 + ], + "elements": 6400, + "offset": 5389696, + "nbytes": 25600, + "end_offset": 5415296, + "padding_before": 0, + "sha256": "bf99d2ad5bb933710b9f252262d469ed46654b085e0824c294a2a4ee95f890f9", + "source_storage": "raw_data" + }, + { + "pack_index": 123, + "graph_index": 156, + "name": "model.23.one2one_cv3.2.0.0.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256 + ], + "elements": 256, + "offset": 5415296, + "nbytes": 1024, + "end_offset": 5416320, + "padding_before": 0, + "sha256": "2d0cb7bfb840018b3683bab2a6600d2d45b1bf5b05d80caa233e704c50da6b4f", + "source_storage": "raw_data" + }, + { + "pack_index": 124, + "graph_index": 155, + "name": "model.23.one2one_cv3.2.0.0.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256, + 1, + 3, + 3 + ], + "elements": 2304, + "offset": 5416320, + "nbytes": 9216, + "end_offset": 5425536, + "padding_before": 0, + "sha256": "8798aeb926f21ebf69c960a5e9cefded7b2e5527aae3934bb9350575a3ab66b0", + "source_storage": "raw_data" + }, + { + "pack_index": 125, + "graph_index": 158, + "name": "model.23.one2one_cv3.2.0.1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 80 + ], + "elements": 80, + "offset": 5425536, + "nbytes": 320, + "end_offset": 5425856, + "padding_before": 0, + "sha256": "6d77e15b62d57a9c0c1d51b9a151f70f7f48e175b1ba1b04c4871e134f728968", + "source_storage": "raw_data" + }, + { + "pack_index": 126, + "graph_index": 157, + "name": "model.23.one2one_cv3.2.0.1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 80, + 256, + 1, + 1 + ], + "elements": 20480, + "offset": 5425856, + "nbytes": 81920, + "end_offset": 5507776, + "padding_before": 0, + "sha256": "368d443c881da1e9a9740ca6282f510396dab1e95fd48fa0f30a7ba514f73352", + "source_storage": "raw_data" + }, + { + "pack_index": 127, + "graph_index": 160, + "name": "model.23.one2one_cv3.2.1.0.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 80 + ], + "elements": 80, + "offset": 5507776, + "nbytes": 320, + "end_offset": 5508096, + "padding_before": 0, + "sha256": "2078218d9f4e57571fd8bc170467c6a557d80928db0c6c2afe458ad6eb1f34ae", + "source_storage": "raw_data" + }, + { + "pack_index": 128, + "graph_index": 159, + "name": "model.23.one2one_cv3.2.1.0.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 80, + 1, + 3, + 3 + ], + "elements": 720, + "offset": 5508096, + "nbytes": 2880, + "end_offset": 5510976, + "padding_before": 0, + "sha256": "bf081f85a96936f713126ca1d7a3013dd994654ad5125a69e6ac0cbd7588aa73", + "source_storage": "raw_data" + }, + { + "pack_index": 129, + "graph_index": 162, + "name": "model.23.one2one_cv3.2.1.1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 80 + ], + "elements": 80, + "offset": 5510976, + "nbytes": 320, + "end_offset": 5511296, + "padding_before": 0, + "sha256": "7de642ea15b8ced3d6a51cc610b78dd1851bbbd7bc8fb4fdd3dd8d09b46503fa", + "source_storage": "raw_data" + }, + { + "pack_index": 130, + "graph_index": 161, + "name": "model.23.one2one_cv3.2.1.1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 80, + 80, + 1, + 1 + ], + "elements": 6400, + "offset": 5511296, + "nbytes": 25600, + "end_offset": 5536896, + "padding_before": 0, + "sha256": "91b6eb2d26b07ebf99e56aaa92a45f183ee60db37cdcfea5951da186cc283aae", + "source_storage": "raw_data" + }, + { + "pack_index": 131, + "graph_index": 164, + "name": "model.23.one2one_cv3.2.2.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 80 + ], + "elements": 80, + "offset": 5536896, + "nbytes": 320, + "end_offset": 5537216, + "padding_before": 0, + "sha256": "91da0f303a9001641af16b75b2800e32099406d2ad1126a2378d693cc31257dc", + "source_storage": "raw_data" + }, + { + "pack_index": 132, + "graph_index": 163, + "name": "model.23.one2one_cv3.2.2.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 80, + 80, + 1, + 1 + ], + "elements": 6400, + "offset": 5537216, + "nbytes": 25600, + "end_offset": 5562816, + "padding_before": 0, + "sha256": "048b1864442825873c5406d592df5e743da3c16988366f7e8205de8412b8f34e", + "source_storage": "raw_data" + }, + { + "pack_index": 133, + "graph_index": 13, + "name": "model.3.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64 + ], + "elements": 64, + "offset": 5562816, + "nbytes": 256, + "end_offset": 5563072, + "padding_before": 0, + "sha256": "6ad4ad18d8d6845421d16767e43c27d0bf61b91cc9c0e93ed902b9c60cb081e8", + "source_storage": "raw_data" + }, + { + "pack_index": 134, + "graph_index": 12, + "name": "model.3.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64, + 32, + 3, + 3 + ], + "elements": 18432, + "offset": 5563072, + "nbytes": 73728, + "end_offset": 5636800, + "padding_before": 0, + "sha256": "3103690e69a341faa78b0f7adae40decb546a957f0a8473c9aeead490eb9a88d", + "source_storage": "raw_data" + }, + { + "pack_index": 135, + "graph_index": 15, + "name": "model.4.cv1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64 + ], + "elements": 64, + "offset": 5636800, + "nbytes": 256, + "end_offset": 5637056, + "padding_before": 0, + "sha256": "715b701cb76b794b09eb89e07aab4857005861a3679622d1cf6622d8c5e8d340", + "source_storage": "raw_data" + }, + { + "pack_index": 136, + "graph_index": 14, + "name": "model.4.cv1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64, + 64, + 1, + 1 + ], + "elements": 4096, + "offset": 5637056, + "nbytes": 16384, + "end_offset": 5653440, + "padding_before": 0, + "sha256": "8edc6758ec03d053b3a05fe782fc0d1acf19175dacfd13790503dfe801df4ae3", + "source_storage": "raw_data" + }, + { + "pack_index": 137, + "graph_index": 17, + "name": "model.4.cv2.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64 + ], + "elements": 64, + "offset": 5653440, + "nbytes": 256, + "end_offset": 5653696, + "padding_before": 0, + "sha256": "4c118dcdf07a31ff1cf69f339f130ee18f2a86651a831b365f01839df042de57", + "source_storage": "raw_data" + }, + { + "pack_index": 138, + "graph_index": 16, + "name": "model.4.cv2.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64, + 128, + 1, + 1 + ], + "elements": 8192, + "offset": 5653696, + "nbytes": 32768, + "end_offset": 5686464, + "padding_before": 0, + "sha256": "5a3e25329c6ebb8d4011580c13175e93ea7bfa69e7ee785ac68fcbd4e8329ef8", + "source_storage": "raw_data" + }, + { + "pack_index": 139, + "graph_index": 19, + "name": "model.4.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 32 + ], + "elements": 32, + "offset": 5686464, + "nbytes": 128, + "end_offset": 5686592, + "padding_before": 0, + "sha256": "1fff3a2d2c24a08742d6e53221352cfb91fe35c6fae0c9ebf3fe83ed3ed98760", + "source_storage": "raw_data" + }, + { + "pack_index": 140, + "graph_index": 18, + "name": "model.4.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 32, + 32, + 3, + 3 + ], + "elements": 9216, + "offset": 5686592, + "nbytes": 36864, + "end_offset": 5723456, + "padding_before": 0, + "sha256": "4e75d53c8162895f8ea19fd6b59a623c1141323679089137b28dae43fea7baf1", + "source_storage": "raw_data" + }, + { + "pack_index": 141, + "graph_index": 21, + "name": "model.4.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 32 + ], + "elements": 32, + "offset": 5723456, + "nbytes": 128, + "end_offset": 5723584, + "padding_before": 0, + "sha256": "c8ff755a28e4dcc9e87517a451f85c6378dd51dcb9a5807f77c22fdbe2ba3294", + "source_storage": "raw_data" + }, + { + "pack_index": 142, + "graph_index": 20, + "name": "model.4.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 32, + 32, + 3, + 3 + ], + "elements": 9216, + "offset": 5723584, + "nbytes": 36864, + "end_offset": 5760448, + "padding_before": 0, + "sha256": "ef277fc1a27eff04c4b28a7fb7e5ce9e66e9abac879a236d122fae47b9ef70ea", + "source_storage": "raw_data" + }, + { + "pack_index": 143, + "graph_index": 23, + "name": "model.4.m.1.cv1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 32 + ], + "elements": 32, + "offset": 5760448, + "nbytes": 128, + "end_offset": 5760576, + "padding_before": 0, + "sha256": "68f9690cc98cbb9889491580228e035b6f41f58eaa93ccb27a0513417e34dc6f", + "source_storage": "raw_data" + }, + { + "pack_index": 144, + "graph_index": 22, + "name": "model.4.m.1.cv1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 32, + 32, + 3, + 3 + ], + "elements": 9216, + "offset": 5760576, + "nbytes": 36864, + "end_offset": 5797440, + "padding_before": 0, + "sha256": "eb98599d5ea5a97e15683863b0376212003ef21dd8dba87321a63a86ce43ec70", + "source_storage": "raw_data" + }, + { + "pack_index": 145, + "graph_index": 25, + "name": "model.4.m.1.cv2.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 32 + ], + "elements": 32, + "offset": 5797440, + "nbytes": 128, + "end_offset": 5797568, + "padding_before": 0, + "sha256": "85ce2fac51786e90676b81f1c3aa9ebf524271827712af5741a4f7c9a3be4fe9", + "source_storage": "raw_data" + }, + { + "pack_index": 146, + "graph_index": 24, + "name": "model.4.m.1.cv2.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 32, + 32, + 3, + 3 + ], + "elements": 9216, + "offset": 5797568, + "nbytes": 36864, + "end_offset": 5834432, + "padding_before": 0, + "sha256": "ab02ca4dfaf7aae094ada34ddb71e14fd551e9ac2a06422545f5dd55f75d8b3a", + "source_storage": "raw_data" + }, + { + "pack_index": 147, + "graph_index": 27, + "name": "model.5.cv1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128 + ], + "elements": 128, + "offset": 5834432, + "nbytes": 512, + "end_offset": 5834944, + "padding_before": 0, + "sha256": "be106b8051668e494c95ecd37b7c1ef3c2f03456c3a07f1df51a51cda508ca09", + "source_storage": "raw_data" + }, + { + "pack_index": 148, + "graph_index": 26, + "name": "model.5.cv1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128, + 64, + 1, + 1 + ], + "elements": 8192, + "offset": 5834944, + "nbytes": 32768, + "end_offset": 5867712, + "padding_before": 0, + "sha256": "ab8fcfcddd55e43840fa3cf61f73c92c6d7de00df786d312b65034e7bed4ebcd", + "source_storage": "raw_data" + }, + { + "pack_index": 149, + "graph_index": 29, + "name": "model.5.cv2.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128 + ], + "elements": 128, + "offset": 5867712, + "nbytes": 512, + "end_offset": 5868224, + "padding_before": 0, + "sha256": "6b589ef9daae12ea32119bd40c93d3751bf1ff243d75a3fc74abb15c73f214f6", + "source_storage": "raw_data" + }, + { + "pack_index": 150, + "graph_index": 28, + "name": "model.5.cv2.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128, + 1, + 3, + 3 + ], + "elements": 1152, + "offset": 5868224, + "nbytes": 4608, + "end_offset": 5872832, + "padding_before": 0, + "sha256": "a3594966bbbcb7c1a4768ce3f71ba1a2ba35f1b7de8c16895844b1be6c3e156d", + "source_storage": "raw_data" + }, + { + "pack_index": 151, + "graph_index": 31, + "name": "model.6.cv1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128 + ], + "elements": 128, + "offset": 5872832, + "nbytes": 512, + "end_offset": 5873344, + "padding_before": 0, + "sha256": "9da5a35cba86ce0fc26d9d7ff86057d3e77f1c72a0e4bf1f487c1c25615aa64b", + "source_storage": "raw_data" + }, + { + "pack_index": 152, + "graph_index": 30, + "name": "model.6.cv1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128, + 128, + 1, + 1 + ], + "elements": 16384, + "offset": 5873344, + "nbytes": 65536, + "end_offset": 5938880, + "padding_before": 0, + "sha256": "b3a854bd1820ef0eb018ccdecfc219a9e073e7739da28ba1fbb3771d7f4338e3", + "source_storage": "raw_data" + }, + { + "pack_index": 153, + "graph_index": 33, + "name": "model.6.cv2.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128 + ], + "elements": 128, + "offset": 5938880, + "nbytes": 512, + "end_offset": 5939392, + "padding_before": 0, + "sha256": "f627ae3b785ba0adcb31c7bb9d0f016c71041ed628e7a2c637adb0c31039bbc8", + "source_storage": "raw_data" + }, + { + "pack_index": 154, + "graph_index": 32, + "name": "model.6.cv2.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128, + 256, + 1, + 1 + ], + "elements": 32768, + "offset": 5939392, + "nbytes": 131072, + "end_offset": 6070464, + "padding_before": 0, + "sha256": "4ff184c5c6a10f51b5f3ac230f6a845a993453271112ab33b6884a7f3c294400", + "source_storage": "raw_data" + }, + { + "pack_index": 155, + "graph_index": 35, + "name": "model.6.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64 + ], + "elements": 64, + "offset": 6070464, + "nbytes": 256, + "end_offset": 6070720, + "padding_before": 0, + "sha256": "f14502f1ae6daaa491ac8624a5fcced0e841a788aa583c1d2126117aca4aff18", + "source_storage": "raw_data" + }, + { + "pack_index": 156, + "graph_index": 34, + "name": "model.6.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "offset": 6070720, + "nbytes": 147456, + "end_offset": 6218176, + "padding_before": 0, + "sha256": "a3f6ef10f6fde74b2000c50092ac358edee121454f7461a238daad1d52f588b7", + "source_storage": "raw_data" + }, + { + "pack_index": 157, + "graph_index": 37, + "name": "model.6.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64 + ], + "elements": 64, + "offset": 6218176, + "nbytes": 256, + "end_offset": 6218432, + "padding_before": 0, + "sha256": "ad4648774a4e1fb41400b60de4c2e7ffd2fb8b21df95c088e107d95a32f9e944", + "source_storage": "raw_data" + }, + { + "pack_index": 158, + "graph_index": 36, + "name": "model.6.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "offset": 6218432, + "nbytes": 147456, + "end_offset": 6365888, + "padding_before": 0, + "sha256": "93059b6a039d0d26add35675f4735fac8a720dee666af61eda406e1ef75e9915", + "source_storage": "raw_data" + }, + { + "pack_index": 159, + "graph_index": 39, + "name": "model.6.m.1.cv1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64 + ], + "elements": 64, + "offset": 6365888, + "nbytes": 256, + "end_offset": 6366144, + "padding_before": 0, + "sha256": "f98bd177d7c9f25d7b6c06296ec7293a707ac59f7e01c4e9bb15fb264c2fbf7e", + "source_storage": "raw_data" + }, + { + "pack_index": 160, + "graph_index": 38, + "name": "model.6.m.1.cv1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "offset": 6366144, + "nbytes": 147456, + "end_offset": 6513600, + "padding_before": 0, + "sha256": "2a4883a0dda6abaef5594743d2e555609469a0b47381f702f69ddf61e15864f5", + "source_storage": "raw_data" + }, + { + "pack_index": 161, + "graph_index": 41, + "name": "model.6.m.1.cv2.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64 + ], + "elements": 64, + "offset": 6513600, + "nbytes": 256, + "end_offset": 6513856, + "padding_before": 0, + "sha256": "69f876571a13f0e3fb3086429d39c6ce4ad5d6420d67e1a60b41d1d1d73b7547", + "source_storage": "raw_data" + }, + { + "pack_index": 162, + "graph_index": 40, + "name": "model.6.m.1.cv2.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 64, + 64, + 3, + 3 + ], + "elements": 36864, + "offset": 6513856, + "nbytes": 147456, + "end_offset": 6661312, + "padding_before": 0, + "sha256": "799a8573d6deae3e9e688aa091f1880d9c10b42a8326af96c21929f50567f6e4", + "source_storage": "raw_data" + }, + { + "pack_index": 163, + "graph_index": 43, + "name": "model.7.cv1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256 + ], + "elements": 256, + "offset": 6661312, + "nbytes": 1024, + "end_offset": 6662336, + "padding_before": 0, + "sha256": "c74cae6eb6e7b67ad1a84956bba85885dca6431fd2561a39c6b71011534e6d75", + "source_storage": "raw_data" + }, + { + "pack_index": 164, + "graph_index": 42, + "name": "model.7.cv1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256, + 128, + 1, + 1 + ], + "elements": 32768, + "offset": 6662336, + "nbytes": 131072, + "end_offset": 6793408, + "padding_before": 0, + "sha256": "964f4d959d5d81ceba359ff7f229034534fbb16fca47244e9cdb1149eb81fa9a", + "source_storage": "raw_data" + }, + { + "pack_index": 165, + "graph_index": 45, + "name": "model.7.cv2.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256 + ], + "elements": 256, + "offset": 6793408, + "nbytes": 1024, + "end_offset": 6794432, + "padding_before": 0, + "sha256": "d8121a67812f11f270f1e21ab2273e49c2450e6d4913069d29df58284231f807", + "source_storage": "raw_data" + }, + { + "pack_index": 166, + "graph_index": 44, + "name": "model.7.cv2.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256, + 1, + 3, + 3 + ], + "elements": 2304, + "offset": 6794432, + "nbytes": 9216, + "end_offset": 6803648, + "padding_before": 0, + "sha256": "f426908b89ab80ff87bbcc3c07cbb406ec8f4cc1a9bdb85801c80b8df7dbcdb4", + "source_storage": "raw_data" + }, + { + "pack_index": 167, + "graph_index": 47, + "name": "model.8.cv1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256 + ], + "elements": 256, + "offset": 6803648, + "nbytes": 1024, + "end_offset": 6804672, + "padding_before": 0, + "sha256": "3c709a38a6d022f55bfef110a1414207a6525b187416aa73d3dca4c6cc11aed8", + "source_storage": "raw_data" + }, + { + "pack_index": 168, + "graph_index": 46, + "name": "model.8.cv1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256, + 256, + 1, + 1 + ], + "elements": 65536, + "offset": 6804672, + "nbytes": 262144, + "end_offset": 7066816, + "padding_before": 0, + "sha256": "ad418b7f58fba911f50edc7f5548764455fb0e7180de478fdf8bbe04ee08a576", + "source_storage": "raw_data" + }, + { + "pack_index": 169, + "graph_index": 49, + "name": "model.8.cv2.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256 + ], + "elements": 256, + "offset": 7066816, + "nbytes": 1024, + "end_offset": 7067840, + "padding_before": 0, + "sha256": "03a6cbd6428291c3809b410e527181854bda53c925921ec2007533fe9e52c8c8", + "source_storage": "raw_data" + }, + { + "pack_index": 170, + "graph_index": 48, + "name": "model.8.cv2.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256, + 384, + 1, + 1 + ], + "elements": 98304, + "offset": 7067840, + "nbytes": 393216, + "end_offset": 7461056, + "padding_before": 0, + "sha256": "3ae86daad0ff5a9388ac70bc324642273ffe9645b84b3ab7c5acf69e85e86916", + "source_storage": "raw_data" + }, + { + "pack_index": 171, + "graph_index": 51, + "name": "model.8.m.0.cv1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128 + ], + "elements": 128, + "offset": 7461056, + "nbytes": 512, + "end_offset": 7461568, + "padding_before": 0, + "sha256": "8b6cb6dcc1e160528cbf640ae3b14e377d39e3d951e2b9cdf092f82f0bab8b9d", + "source_storage": "raw_data" + }, + { + "pack_index": 172, + "graph_index": 50, + "name": "model.8.m.0.cv1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128, + 128, + 3, + 3 + ], + "elements": 147456, + "offset": 7461568, + "nbytes": 589824, + "end_offset": 8051392, + "padding_before": 0, + "sha256": "e7e0277ea596dcf9da2675ec24f5e6294376b348f3d88dd524086148c03c5adc", + "source_storage": "raw_data" + }, + { + "pack_index": 173, + "graph_index": 53, + "name": "model.8.m.0.cv2.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128 + ], + "elements": 128, + "offset": 8051392, + "nbytes": 512, + "end_offset": 8051904, + "padding_before": 0, + "sha256": "db364cdf892daddfb029e1bedf1199dbcfdfff631f8b3c23d73850a90a20afb1", + "source_storage": "raw_data" + }, + { + "pack_index": 174, + "graph_index": 52, + "name": "model.8.m.0.cv2.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128, + 128, + 3, + 3 + ], + "elements": 147456, + "offset": 8051904, + "nbytes": 589824, + "end_offset": 8641728, + "padding_before": 0, + "sha256": "548286fbc54e40b337ae7fb777e04a8d40e9a91b1198dfa329c26636be754a8e", + "source_storage": "raw_data" + }, + { + "pack_index": 175, + "graph_index": 55, + "name": "model.9.cv1.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128 + ], + "elements": 128, + "offset": 8641728, + "nbytes": 512, + "end_offset": 8642240, + "padding_before": 0, + "sha256": "c8d2424cf76827a03dbae68a63290ab5188c12802885da0e2a8a16a595b279ef", + "source_storage": "raw_data" + }, + { + "pack_index": 176, + "graph_index": 54, + "name": "model.9.cv1.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 128, + 256, + 1, + 1 + ], + "elements": 32768, + "offset": 8642240, + "nbytes": 131072, + "end_offset": 8773312, + "padding_before": 0, + "sha256": "ec83000ba7d9e4f4fe3e9b1a7ac3f9fa33e036dfdb5ab7da2d4137449c1e1d29", + "source_storage": "raw_data" + }, + { + "pack_index": 177, + "graph_index": 57, + "name": "model.9.cv2.conv.bias", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256 + ], + "elements": 256, + "offset": 8773312, + "nbytes": 1024, + "end_offset": 8774336, + "padding_before": 0, + "sha256": "1670617932d6d9d44ca9b9ebf9b8c67003ace546843c58fba05f5437734bb6cb", + "source_storage": "raw_data" + }, + { + "pack_index": 178, + "graph_index": 56, + "name": "model.9.cv2.conv.weight", + "dtype": "FLOAT", + "dtype_code": 1, + "shape": [ + 256, + 512, + 1, + 1 + ], + "elements": 131072, + "offset": 8774336, + "nbytes": 524288, + "end_offset": 9298624, + "padding_before": 0, + "sha256": "b56104c78134e2f3acdfaca9d6b9340d722b504e6c9ca8651939f36c4be1a965", + "source_storage": "raw_data" + }, + { + "pack_index": 179, + "graph_index": 165, + "name": "onnx::Split_214", + "dtype": "INT64", + "dtype_code": 7, + "shape": [ + 2 + ], + "elements": 2, + "offset": 9298624, + "nbytes": 16, + "end_offset": 9298640, + "padding_before": 0, + "sha256": "fa7c63f601691b958793c6d5ebe2ec4456e1a35b2b448b4f3e55cd1f86787673", + "source_storage": "raw_data" + }, + { + "pack_index": 180, + "graph_index": 166, + "name": "onnx::Split_225", + "dtype": "INT64", + "dtype_code": 7, + "shape": [ + 2 + ], + "elements": 2, + "offset": 9298688, + "nbytes": 16, + "end_offset": 9298704, + "padding_before": 48, + "sha256": "19299b98c755705823a6a898c0aea16e8ab9c37f67d3cac814715df3649b2fd8", + "source_storage": "raw_data" + }, + { + "pack_index": 181, + "graph_index": 167, + "name": "onnx::Split_245", + "dtype": "INT64", + "dtype_code": 7, + "shape": [ + 2 + ], + "elements": 2, + "offset": 9298752, + "nbytes": 16, + "end_offset": 9298768, + "padding_before": 48, + "sha256": "061f4bc896b729341440e848734d33256766da8165c9b9ac144471b231626d5b", + "source_storage": "raw_data" + }, + { + "pack_index": 182, + "graph_index": 168, + "name": "onnx::Split_273", + "dtype": "INT64", + "dtype_code": 7, + "shape": [ + 2 + ], + "elements": 2, + "offset": 9298816, + "nbytes": 16, + "end_offset": 9298832, + "padding_before": 48, + "sha256": "e82537abbbfcc0bcbb95705bc5bd014c85c94470b66f72e035cdeec832f18178", + "source_storage": "raw_data" + }, + { + "pack_index": 183, + "graph_index": 169, + "name": "onnx::Split_301", + "dtype": "INT64", + "dtype_code": 7, + "shape": [ + 2 + ], + "elements": 2, + "offset": 9298880, + "nbytes": 16, + "end_offset": 9298896, + "padding_before": 48, + "sha256": "fa9ad8e381ae4fc97686921369c821ca3444d5deebd56c82faf9df71bb39ba79", + "source_storage": "raw_data" + }, + { + "pack_index": 184, + "graph_index": 171, + "name": "onnx::Split_347", + "dtype": "INT64", + "dtype_code": 7, + "shape": [ + 3 + ], + "elements": 3, + "offset": 9298944, + "nbytes": 24, + "end_offset": 9298968, + "padding_before": 48, + "sha256": "661f12e6d2e789ee731a34eb9eb1dcb0da6375c12ebfced2bf9b8fcf7bab9a22", + "source_storage": "raw_data" + }, + { + "pack_index": 185, + "graph_index": 176, + "name": "onnx::Split_572", + "dtype": "INT64", + "dtype_code": 7, + "shape": [ + 2 + ], + "elements": 2, + "offset": 9299008, + "nbytes": 16, + "end_offset": 9299024, + "padding_before": 40, + "sha256": "bcf0a5b1b6a2c091144d91ec3601175a0c54d37787d94abe9aa8992b6f10fe70", + "source_storage": "raw_data" + }, + { + "pack_index": 186, + "graph_index": 181, + "name": "onnx::Split_612", + "dtype": "INT64", + "dtype_code": 7, + "shape": [ + 2 + ], + "elements": 2, + "offset": 9299072, + "nbytes": 16, + "end_offset": 9299088, + "padding_before": 48, + "sha256": "d731970c65ad4374fd01093913f5986f330ce5e5481747b4054969954a826854", + "source_storage": "raw_data" + } + ] +} diff --git a/ported_models/yolov10n_hf_reference/manifests/yolov10n_variants.txt b/ported_models/yolov10n_hf_reference/manifests/yolov10n_variants.txt new file mode 100644 index 00000000..d551feed --- /dev/null +++ b/ported_models/yolov10n_hf_reference/manifests/yolov10n_variants.txt @@ -0,0 +1 @@ +yolov10n_hf_full diff --git a/ported_models/yolov10n_hf_reference/requirements-host.txt b/ported_models/yolov10n_hf_reference/requirements-host.txt new file mode 100644 index 00000000..8e0cde2c --- /dev/null +++ b/ported_models/yolov10n_hf_reference/requirements-host.txt @@ -0,0 +1,6 @@ +# Pinned versions used to inspect the source graph and generate ORT goldens. +# Python 3.8 is tested on the repository's current board host. Use a Python +# version supported by all three pinned wheels (normally 3.8 through 3.11). +numpy==1.24.4 +onnx==1.16.2 +onnxruntime==1.16.3 diff --git a/ported_models/yolov10n_hf_reference/scripts/board_reset_and_run.sh b/ported_models/yolov10n_hf_reference/scripts/board_reset_and_run.sh new file mode 100755 index 00000000..59a3802e --- /dev/null +++ b/ported_models/yolov10n_hf_reference/scripts/board_reset_and_run.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +# Reset ET-SoC1 using the same sysfs control as soc3-benchmark.sh, then exec. +set -euo pipefail + +[[ $# -gt 0 ]] || { + echo "error: board_reset_and_run.sh requires a launcher command" >&2 + exit 2 +} + +reset_path="" +shopt -s nullglob +for candidate in \ + /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/soc_reset/reinitiate \ + /sys/bus/pci/devices/*/soc_reset/reinitiate; do + if [[ -w "$candidate" ]]; then + reset_path="$candidate" + break + fi +done +shopt -u nullglob + +[[ -n "$reset_path" ]] || { + echo "error: no writable ET-SoC1 reset control was found" >&2 + exit 2 +} +echo "Resetting ET-SoC1 via $reset_path" +printf '1\n' > "$reset_path" +sleep 2 +exec "$@" diff --git a/ported_models/yolov10n_hf_reference/scripts/build_et_full.sh b/ported_models/yolov10n_hf_reference/scripts/build_et_full.sh new file mode 100755 index 00000000..14f38170 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/scripts/build_et_full.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +# Compile only a checksum-checked schema-v2 N000:N307 package. +set -euo pipefail + +port_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +repo_root="$(cd "$port_root/../.." && pwd)" +full_dir="${1:-$repo_root/local-artifacts/yolov10n_hf_reference/full_graph/deterministic}" +output="${2:-$full_dir/yolov10n_hf_full.elf}" + +"$port_root/scripts/verify_full_package.sh" "$full_dir" +"$port_root/scripts/build_et_slice.sh" "$full_dir" "$output" + +echo "ET_FULL_BUILD PASS selector=N000:N307 output=$output record=$output.build.json" diff --git a/ported_models/yolov10n_hf_reference/scripts/build_et_slice.sh b/ported_models/yolov10n_hf_reference/scripts/build_et_slice.sh new file mode 100755 index 00000000..9d253353 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/scripts/build_et_slice.sh @@ -0,0 +1,167 @@ +#!/usr/bin/env bash +set -euo pipefail + +port_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +repo_root="$(cd "$port_root/../.." && pwd)" +slice_dir="${1:?usage: build_et_slice.sh SLICE_DIR [OUTPUT]}" +output="${2:-$slice_dir/yolov10n_hf_slice.elf}" +et_install="${ET_INSTALL:-${ET_PLATFORM:-/opt/et}}" +gcc="${ET_GCC:-$et_install/bin/riscv64-unknown-elf-gcc}" + +test -f "$slice_dir/slice_manifest.h" || { + echo "error: generate the full graph or run tools/capture_range.py first; missing $slice_dir/slice_manifest.h" >&2 + exit 2 +} +test -x "$gcc" || { + echo "error: supported ET compiler not executable: $gcc" >&2 + exit 2 +} +if ! "$gcc" --version >/dev/null 2>&1; then + echo "error: configured ET compiler cannot run on this host: $gcc" >&2 + echo "Use the repository's Ubuntu 24.04 Docker toolchain workflow; no fallback compiler is selected." >&2 + exit 2 +fi + +# shellcheck disable=SC1090 +source "$repo_root/.github/ci/scripts/resolve_et_platform_paths.sh" +resolve_et_platform_paths +read -r -a include_flags <<<"${ERBIUM_GCC_INCLUDE_FLAGS}" +read -r -a extra_cflags <<<"${YR_ET_EXTRA_CFLAGS:-}" +mkdir -p "$(dirname "$output")" + +# Default stays the 16-hart configuration already validated tonight. Override +# YR_ET_NUM_HARTS (and pass -DYR_NHART=... via YR_ET_EXTRA_CFLAGS) to build a +# single-hart image, e.g. for the tensor-unit fast path in +# yr_conv_tensor_et.c, which only ever runs with yr_hart_count() == 1. +et_num_harts="${YR_ET_NUM_HARTS:-16}" +# The linker script defaults to 1024 bytes of stack per hart, which the -O2 +# frames overrun. yr_conv alone takes 496 bytes and yr_run_node_span another +# 416 once they stop being folded together, and a hart that runs off the end +# writes into its neighbour's stack, which shows up as a kernel runtime +# failure late in the graph rather than as a crash at the overrun. Measured +# with -fstack-usage. 4096 keeps NUM_HARTS * STACK_SIZE a multiple of 4 KiB, +# which the linker script asserts on. +et_stack_size="${YR_ET_STACK_SIZE:-4096}" +link_flags=( + "-Wl,--gc-sections" "-Wl,--no-warn-rwx-segments" "-Wl,--emit-relocs" + "-Wl,--defsym=NUM_HARTS=${et_num_harts}" "-Wl,--defsym=region0_size=0x00400000" + "-Wl,--defsym=STACK_SIZE=${et_stack_size}" + -T"$ERBIUM_LD" +) + +# -O2 measured 22 percent faster than -O1 on the board for the full graph and +# leaves the dump bit-identical to the host, because none of the flags below +# let the compiler reassociate floating point. The three companions are not +# optional at -O2. -fno-tree-loop-distribute-patterns stops the zeroing loops +# turning into calls to memset, which does not exist in a -nostdlib build. +# -fno-strict-aliasing is required because the runtime reaches tensors through +# byte pointers cast to float pointers, which the aliasing rules do not allow. +# -funroll-loops was worth a further 2 seconds on top of plain -O2. -O3 was +# tried and came out slower than -O2, so it is deliberately not used. +compile_flags=( + "-std=gnu11" -O2 -funroll-loops -fno-tree-loop-distribute-patterns + -fno-strict-aliasing + -fno-fast-math "-ffp-contract=off" -fno-tree-vectorize + "-march=rv64imfc" "-mabi=lp64f" "-mcmodel=medany" -nostdlib + -fno-zero-initialized-in-bss -ffunction-sections -fdata-sections +) +define_flags=( + "-DNUM_HARTS=${et_num_harts}" -DYR_PMC +) +sources=( + "$port_root/src/ref_runtime.c" + "$port_root/src/yr_conv_tensor_et.c" + "$port_root/src/et_slice_runner.c" + "$repo_root/.github/ci/support/hart_report_crt.S" + "$ERBIUM_LAYOUT" +) +command=( + "$gcc" + "${compile_flags[@]}" + "${include_flags[@]}" + -I"$port_root/src" -I"$slice_dir" + "${define_flags[@]}" + "${extra_cflags[@]}" + "${link_flags[@]}" + "${sources[@]}" + -o "$output" +) +"${command[@]}" + +compiler_output="$("$gcc" --version)" +compiler_version="${compiler_output%%$'\n'*}" +docker_image="${ET_DOCKER_IMAGE:-}" +if [[ -z "$docker_image" && "$(basename "$gcc")" == "et_gcc_docker_wrapper.sh" ]]; then + docker_image="et-gcc:24.04" +fi +docker_image_id="" +if [[ -n "$docker_image" ]] && command -v docker >/dev/null; then + docker_image_id="$(docker image inspect --format '{{.Id}}' "$docker_image" 2>/dev/null || true)" +fi +record="${YR_BUILD_RECORD:-$output.build.json}" +python3 - \ + "$record" "$output" "$gcc" "$compiler_version" "$docker_image" \ + "$docker_image_id" "$slice_dir/slice_manifest.h" "$ERBIUM_LD" \ + "$ERBIUM_LAYOUT" "$repo_root/.github/ci/support/hart_report_crt.S" \ + "$port_root/src/ref_runtime.c" "$port_root/src/ref_runtime.h" \ + "$port_root/src/ref_pmc.h" "$port_root/src/et_slice_runner.c" \ + "$port_root/src/yr_conv_tensor_et.c" \ + "${command[@]}" <<'PY' +import datetime +import hashlib +import json +from pathlib import Path +import sys + +( + record, elf, compiler, compiler_version, docker_image, docker_image_id, + manifest, linker, layout, crt, runtime_c, runtime_h, pmc_h, runner_c, + conv_tensor_c, + *command, +) = sys.argv[1:] + +def identity(path): + path = Path(path) + digest = hashlib.sha256() + with path.open("rb") as src: + for block in iter(lambda: src.read(1024 * 1024), b""): + digest.update(block) + return { + "path": str(path), + "bytes": path.stat().st_size, + "sha256": digest.hexdigest(), + } + +payload = { + "schema_version": 1, + "timestamp_utc": datetime.datetime.now(datetime.timezone.utc).isoformat(), + "compiler": { + "path": compiler, + "version": compiler_version, + "docker_image": docker_image or None, + "docker_image_id": docker_image_id or None, + }, + "command": command, + "inputs": { + name: identity(path) + for name, path in { + "slice_manifest_header": manifest, + "linker_script": linker, + "layout": layout, + "crt": crt, + "runtime_c": runtime_c, + "runtime_h": runtime_h, + "pmc_h": pmc_h, + "et_runner_c": runner_c, + "conv_tensor_c": conv_tensor_c, + }.items() + }, + "elf": identity(elf), +} +Path(record).write_text( + json.dumps(payload, indent=2, allow_nan=False) + "\n", + encoding="utf-8", +) +PY + +echo "ET_BUILD PASS compiler=$gcc output=$output record=$record" diff --git a/ported_models/yolov10n_hf_reference/scripts/build_host_full.sh b/ported_models/yolov10n_hf_reference/scripts/build_host_full.sh new file mode 100755 index 00000000..fa1f913e --- /dev/null +++ b/ported_models/yolov10n_hf_reference/scripts/build_host_full.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +set -euo pipefail + +port_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +repo_root="$(cd "$port_root/../.." && pwd)" +full_dir="${1:-$repo_root/local-artifacts/yolov10n_hf_reference/full_graph/deterministic}" +output="${2:-$full_dir/host_full_runner}" +cc="${CC:-cc}" + +test -f "$full_dir/slice_manifest.h" || { + echo "error: run tools/generate_full_graph.py first; missing $full_dir/slice_manifest.h" >&2 + exit 2 +} +test -f "$full_dir/slice_manifest.json" || { + echo "error: run tools/generate_full_graph.py first; missing $full_dir/slice_manifest.json" >&2 + exit 2 +} + +"$cc" \ + -std=c11 -O1 -fno-fast-math -ffp-contract=off \ + -Wall -Wextra -Werror \ + -I"$port_root/src" -I"$full_dir" \ + "$port_root/src/ref_runtime.c" \ + "$port_root/src/host_full_runner.c" \ + -o "$output" + +echo "HOST_FULL_BUILD PASS output=$output" diff --git a/ported_models/yolov10n_hf_reference/scripts/build_host_range.sh b/ported_models/yolov10n_hf_reference/scripts/build_host_range.sh new file mode 100755 index 00000000..11349c84 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/scripts/build_host_range.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +set -euo pipefail + +port_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +range_dir="${1:?usage: build_host_range.sh RANGE_DIR [OUTPUT]}" +output="${2:-$range_dir/host_range_runner}" +cc="${CC:-cc}" + +test -f "$range_dir/slice_manifest.h" || { + echo "error: run tools/capture_range.py first; missing $range_dir/slice_manifest.h" >&2 + exit 2 +} +test -f "$range_dir/slice_manifest.json" || { + echo "error: run tools/capture_range.py first; missing $range_dir/slice_manifest.json" >&2 + exit 2 +} + +"$cc" \ + -std=c11 -O1 -fno-fast-math -ffp-contract=off \ + -Wall -Wextra -Werror \ + -I"$port_root/src" -I"$range_dir" \ + "$port_root/src/ref_runtime.c" \ + "$port_root/src/host_range_runner.c" \ + -o "$output" + +echo "HOST_RANGE_BUILD PASS output=$output" diff --git a/ported_models/yolov10n_hf_reference/scripts/et_gcc_docker_wrapper.sh b/ported_models/yolov10n_hf_reference/scripts/et_gcc_docker_wrapper.sh new file mode 100755 index 00000000..37453762 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/scripts/et_gcc_docker_wrapper.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash +# Run the repository's real ET compiler in its supported Ubuntu 24.04 image. +# +# This mirrors .github/workflows/benchmark-board.yml. It is intentionally not +# a generic RISC-V compiler fallback: the executable inside the container must +# be the ET toolchain and the platform tree is mounted read-only. +set -euo pipefail + +port_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +repo_root="$(cd "$port_root/../.." && pwd)" +workspace="${ET_DOCKER_WORKSPACE:-$repo_root}" +real_et_root="${ET_DOCKER_REAL_ET_ROOT:-/opt/et}" +platform_src="${ET_DOCKER_PLATFORM_SRC:-${ET_PLATFORM_SRC:-}}" +image="${ET_DOCKER_IMAGE:-et-gcc:24.04}" +compiler="$real_et_root/bin/riscv64-unknown-elf-gcc" + +[[ -d "$workspace" + && ( "$PWD" == "$workspace" || "$PWD" == "$workspace/"* ) ]] || { + echo "error: current directory must be inside ET_DOCKER_WORKSPACE=$workspace" >&2 + exit 2 +} +[[ -x "$compiler" ]] || { + echo "error: real ET compiler is not executable: $compiler" >&2 + exit 2 +} +[[ -n "$platform_src" && -d "$platform_src" ]] || { + echo "error: ET platform source tree not found: $platform_src" >&2 + exit 2 +} +command -v docker >/dev/null || { + echo "error: Docker is required for the supported Ubuntu 24.04 ET compiler path" >&2 + exit 2 +} + +exec docker run --rm \ + -v "$workspace:$workspace" \ + -v "$real_et_root:$real_et_root:ro" \ + -v "$platform_src:$platform_src:ro" \ + -w "$PWD" \ + "$image" \ + "$compiler" "$@" diff --git a/ported_models/yolov10n_hf_reference/scripts/run_et_full.sh b/ported_models/yolov10n_hf_reference/scripts/run_et_full.sh new file mode 100755 index 00000000..1e7cfb54 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/scripts/run_et_full.sh @@ -0,0 +1,102 @@ +#!/usr/bin/env bash +# Launch the complete scalar reference graph without leaderboard registration. +set -euo pipefail + +port_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +repo_root="$(cd "$port_root/../.." && pwd)" + +device="sys_emu" +full_dir="$repo_root/local-artifacts/yolov10n_hf_reference/full_graph/deterministic" +elf="" +launcher="${LAUNCHER:-}" +output_dir="" +outer_timeout="" +launcher_timeout="" +lock_timeout=600 +shire=0 + +usage() { + cat <<'EOF' +Usage: run_et_full.sh --elf FILE --launcher FILE --output-dir DIR [options] + +Options: + --full-dir DIR Schema-v2 full package. Default: deterministic. + --device NAME sys_emu or soc1sim (real PCIe). Default: sys_emu. + --outer-timeout SEC Bounded outer timeout. Defaults: 43200/2400. + --launcher-timeout SEC Bounded launcher timeout. Defaults: 43140/2340. + --lock-timeout SEC Board-lock wait for soc1sim. Default: 600. + --shire INDEX Shire index. Default: 0. + +This is a correctness-evidence runner. It never invokes the model leaderboard. +EOF +} + +need_value() { + [[ -n "${2:-}" ]] || { + echo "error: $1 requires a value" >&2 + exit 2 + } +} + +while [[ $# -gt 0 ]]; do + case "$1" in + --device) need_value "$1" "${2:-}"; device="$2"; shift 2 ;; + --full-dir) need_value "$1" "${2:-}"; full_dir="$2"; shift 2 ;; + --elf) need_value "$1" "${2:-}"; elf="$2"; shift 2 ;; + --launcher) need_value "$1" "${2:-}"; launcher="$2"; shift 2 ;; + --output-dir) need_value "$1" "${2:-}"; output_dir="$2"; shift 2 ;; + --outer-timeout) need_value "$1" "${2:-}"; outer_timeout="$2"; shift 2 ;; + --launcher-timeout) need_value "$1" "${2:-}"; launcher_timeout="$2"; shift 2 ;; + --lock-timeout) need_value "$1" "${2:-}"; lock_timeout="$2"; shift 2 ;; + --shire) need_value "$1" "${2:-}"; shire="$2"; shift 2 ;; + -h|--help) usage; exit 0 ;; + *) echo "error: unknown argument: $1" >&2; usage >&2; exit 2 ;; + esac +done + +[[ "$device" == "sys_emu" || "$device" == "soc1sim" ]] || { + echo "error: --device must be sys_emu or soc1sim" >&2 + exit 2 +} +if [[ -z "$outer_timeout" ]]; then + [[ "$device" == "sys_emu" ]] && outer_timeout=43200 || outer_timeout=2400 +fi +if [[ -z "$launcher_timeout" ]]; then + [[ "$device" == "sys_emu" ]] && launcher_timeout=43140 || launcher_timeout=2340 +fi +for value in "$outer_timeout" "$launcher_timeout" "$lock_timeout" "$shire"; do + case "$value" in + ''|*[!0-9]*) + echo "error: timeout/shire values must be integers" >&2 + exit 2 + ;; + esac +done +[[ "$outer_timeout" -gt 0 && "$launcher_timeout" -gt 0 \ + && "$lock_timeout" -gt 0 ]] || { + echo "error: timeout values must be greater than zero" >&2 + exit 2 +} +[[ "$launcher_timeout" -lt "$outer_timeout" ]] || { + echo "error: launcher timeout must be less than outer timeout" >&2 + exit 2 +} +[[ -n "$elf" && -n "$launcher" && -n "$output_dir" ]] || { + usage >&2 + exit 2 +} + +"$port_root/scripts/verify_full_package.sh" "$full_dir" +"$port_root/scripts/verify_full_elf.sh" "$full_dir" "$elf" +"$port_root/scripts/run_et_slice.sh" \ + --device "$device" \ + --slice-dir "$full_dir" \ + --elf "$elf" \ + --launcher "$launcher" \ + --output-dir "$output_dir" \ + --outer-timeout "$outer_timeout" \ + --launcher-timeout "$launcher_timeout" \ + --lock-timeout "$lock_timeout" \ + --shire "$shire" + +echo "ET_FULL_LAUNCH PASS selector=N000:N307 device=$device output=$output_dir correctness=unvalidated next=validate_et_full.sh leaderboard=not_registered" diff --git a/ported_models/yolov10n_hf_reference/scripts/run_et_slice.sh b/ported_models/yolov10n_hf_reference/scripts/run_et_slice.sh new file mode 100755 index 00000000..939582aa --- /dev/null +++ b/ported_models/yolov10n_hf_reference/scripts/run_et_slice.sh @@ -0,0 +1,339 @@ +#!/usr/bin/env bash +set -euo pipefail + +port_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +repo_root="$(cd "$port_root/../.." && pwd)" + +device="sys_emu" +slice_dir="" +elf="" +launcher="${LAUNCHER:-}" +output_dir="" +outer_timeout=300 +launcher_timeout=240 +lock_timeout=600 +shire=0 + +usage() { + cat <<'EOF' +Usage: run_et_slice.sh --slice-dir DIR --elf FILE --launcher FILE [options] + +Options: + --device NAME sys_emu or soc1sim (real PCIe). Default: sys_emu. + --output-dir DIR Required result-artifact directory. + --outer-timeout SECONDS Bounded process timeout. Default: 300. + --launcher-timeout SEC Timeout passed to launcher. Default: 240. + --lock-timeout SECONDS Board lock wait for soc1sim. Default: 600. + --shire INDEX Shire index. Default: 0. +EOF +} + +need_value() { + [[ -n "${2:-}" ]] || { + echo "error: $1 requires a value" >&2 + exit 2 + } +} + +while [[ $# -gt 0 ]]; do + case "$1" in + --device) need_value "$1" "${2:-}"; device="$2"; shift 2 ;; + --slice-dir) need_value "$1" "${2:-}"; slice_dir="$2"; shift 2 ;; + --elf) need_value "$1" "${2:-}"; elf="$2"; shift 2 ;; + --launcher) need_value "$1" "${2:-}"; launcher="$2"; shift 2 ;; + --output-dir) need_value "$1" "${2:-}"; output_dir="$2"; shift 2 ;; + --outer-timeout) need_value "$1" "${2:-}"; outer_timeout="$2"; shift 2 ;; + --launcher-timeout) need_value "$1" "${2:-}"; launcher_timeout="$2"; shift 2 ;; + --lock-timeout) need_value "$1" "${2:-}"; lock_timeout="$2"; shift 2 ;; + --shire) need_value "$1" "${2:-}"; shire="$2"; shift 2 ;; + -h|--help) usage; exit 0 ;; + *) echo "error: unknown argument: $1" >&2; usage >&2; exit 2 ;; + esac +done + +[[ "$device" == "sys_emu" || "$device" == "soc1sim" ]] || { + echo "error: --device must be sys_emu or soc1sim" >&2 + exit 2 +} +for value in "$outer_timeout" "$launcher_timeout" "$lock_timeout" "$shire"; do + case "$value" in ''|*[!0-9]*) echo "error: timeout/shire values must be integers" >&2; exit 2 ;; esac +done +[[ "$device" != "soc1sim" || "$shire" -eq 0 ]] || { + echo "error: the repository board lock currently supports only soc1sim shire 0" >&2 + exit 2 +} +for value in "$outer_timeout" "$launcher_timeout" "$lock_timeout"; do + [[ "$value" -gt 0 ]] || { + echo "error: timeout values must be greater than zero" >&2 + exit 2 + } +done +[[ -n "$slice_dir" && -n "$elf" && -n "$launcher" && -n "$output_dir" ]] || { + usage >&2 + exit 2 +} + +slice_dir="$(cd "$slice_dir" && pwd)" +elf="$(readlink -f "$elf")" +launcher="$(readlink -f "$launcher")" +mkdir -p "$output_dir" +output_dir="$(cd "$output_dir" && pwd)" +manifest="$slice_dir/slice_manifest.json" +inputs="$slice_dir/inputs.bin" +weights="$slice_dir/weights.bin" +dump="$output_dir/dump.bin" +log="$output_dir/run.log" +build_record="$elf.build.json" + +for artifact in \ + "$dump" "$log" "$output_dir/run_result.json" \ + "$output_dir/command.txt" "$output_dir/wrapper_command.txt" \ + "$output_dir/slice.elf" "$output_dir/build_record.json"; do + [[ ! -e "$artifact" ]] || { + echo "error: refusing to reuse result artifact: $artifact" >&2 + exit 2 + } +done + +[[ -f "$manifest" && -f "$inputs" && -f "$weights" ]] || { + echo "error: slice directory lacks manifest/input/weight blobs: $slice_dir" >&2 + exit 2 +} +[[ -f "$elf" && -x "$launcher" ]] || { + echo "error: missing ELF or executable launcher" >&2 + exit 2 +} +[[ -f "$build_record" ]] || { + echo "error: missing ET build provenance record: $build_record" >&2 + exit 2 +} +cp "$elf" "$output_dir/slice.elf" +cp "$build_record" "$output_dir/build_record.json" +saved_elf="$output_dir/slice.elf" +saved_build_record="$output_dir/build_record.json" + +read -r input_offset weight_offset mem_size dump_size first_node last_node < <( + python3 - "$manifest" <<'PY' +import json +import sys + +manifest = json.load(open(sys.argv[1])) +memory = manifest["memory_map"] +selection = manifest["selection"] +print( + memory["input_device_offset"], + memory["weight_device_offset"], + memory["mem_size"], + memory["dump_size"], + selection["first_node"], + selection["last_node"], +) +PY +) + +python3 - "$manifest" "$inputs" "$weights" <<'PY' +import hashlib +import json +from pathlib import Path +import sys + +manifest = json.load(open(sys.argv[1])) +for name, path_arg in (("inputs", sys.argv[2]), ("weights", sys.argv[3])): + record = manifest["blobs"][name] + path = Path(path_arg) + data = path.read_bytes() + actual = hashlib.sha256(data).hexdigest() + if len(data) != int(record["nbytes"]) or actual != record["sha256"]: + raise SystemExit( + "error: {} blob identity mismatch: bytes={}/{} sha256={}/{}".format( + name, len(data), record["nbytes"], actual, record["sha256"] + ) + ) + print("BLOB_CHECK PASS name={} bytes={} sha256={}".format( + name, len(data), actual + )) +PY + +{ + echo "timestamp_utc=$(date -u +%Y-%m-%dT%H:%M:%SZ)" + echo "hostname=$(hostname)" + echo "kernel=$(uname -srmo)" + echo "device=$device" + echo "slice=$first_node:$last_node" + echo "launcher=$launcher" + echo "elf=$elf" + echo "ET_PLATFORM=${ET_PLATFORM:-}" + echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH:-}" +} > "$output_dir/environment.txt" + +if [[ "$device" == "soc1sim" ]]; then + { + echo "backend=soc1sim" + echo "meaning=real PCIe ET-SoC1 hardware" + stat -c 'device=%n type=%F major_minor=%t:%T permissions=%A owner=%U:%G' \ + /dev/et0_mgmt /dev/et0_ops + lspci -nn | grep -Ei '1e0a:eb01|esperanto|processing accelerators' + } > "$output_dir/device_evidence.txt" + [[ -c /dev/et0_mgmt && -c /dev/et0_ops ]] || { + echo "error: soc1sim requested but ET-SoC1 device nodes are not character devices" >&2 + exit 2 + } +else + { + echo "backend=sys_emu" + echo "meaning=software system emulator" + echo "ET_PLATFORM=${ET_PLATFORM:-}" + if [[ -n "${ET_PLATFORM:-}" ]]; then + stat "${ET_PLATFORM}/bin/sys_emu" || true + fi + } > "$output_dir/device_evidence.txt" +fi + +command=( + "$launcher" + --device "$device" + --elf-load "$elf" + --shire "$shire" +) +if [[ -s "$inputs" ]]; then + command+=(--file_load "$(printf '0x%x,%s' "$input_offset" "$inputs")") +fi +if [[ -s "$weights" ]]; then + command+=(--file_load "$(printf '0x%x,%s' "$weight_offset" "$weights")") +fi +command+=( + --dump_after "$dump" + --timeout "$launcher_timeout" + --mem_size "$mem_size" + --dump_size "$dump_size" +) +printf '%q ' "${command[@]}" > "$output_dir/command.txt" +echo >> "$output_dir/command.txt" + +cd "$output_dir" +start_epoch="$(date +%s)" +set +e +if [[ "$device" == "soc1sim" ]]; then + bash "$repo_root/.github/ci/scripts/prepare_board_lock.sh" \ + "${BOARD_LOCK:-/var/lock/etsoc-shire0.lock}" > "$output_dir/board_lock.log" 2>&1 + prepare_rc=$? + if [[ "$prepare_rc" -eq 0 ]]; then + printf '%q ' \ + python3 "$repo_root/.github/ci/scripts/board_lock.py" \ + --lock "${BOARD_LOCK:-/var/lock/etsoc-shire0.lock}" \ + --timeout "$lock_timeout" -- \ + timeout --kill-after=10s "$outer_timeout" \ + "$port_root/scripts/board_reset_and_run.sh" "${command[@]}" \ + > "$output_dir/wrapper_command.txt" + echo >> "$output_dir/wrapper_command.txt" + python3 "$repo_root/.github/ci/scripts/board_lock.py" \ + --lock "${BOARD_LOCK:-/var/lock/etsoc-shire0.lock}" \ + --timeout "$lock_timeout" \ + -- \ + timeout --kill-after=10s "$outer_timeout" \ + "$port_root/scripts/board_reset_and_run.sh" "${command[@]}" \ + > "$log" 2>&1 + rc=$? + else + rc="$prepare_rc" + echo "board lock preparation failed with rc=$prepare_rc" > "$log" + fi +else + printf '%q ' timeout --kill-after=10s "$outer_timeout" "${command[@]}" \ + > "$output_dir/wrapper_command.txt" + echo >> "$output_dir/wrapper_command.txt" + timeout --kill-after=10s "$outer_timeout" "${command[@]}" > "$log" 2>&1 + rc=$? +fi +set -e +end_epoch="$(date +%s)" + +identity_ok=0 +grep -Fx "erbium_soc1sim: elf=$elf device=$device shire=$shire" \ + "$log" >/dev/null 2>&1 && identity_ok=1 +completion_ok=0 +grep -Fx "Kernel completed successfully" "$log" >/dev/null 2>&1 \ + && completion_ok=1 +dump_log_ok=0 +grep -Fx "Dumped $dump_size bytes to $dump" "$log" >/dev/null 2>&1 \ + && dump_log_ok=1 +reset_ok=1 +if [[ "$device" == "soc1sim" ]]; then + reset_ok=0 + grep -F "Resetting ET-SoC1 via " "$log" >/dev/null 2>&1 \ + && reset_ok=1 +fi +dump_ok=0 +[[ -f "$dump" && "$(stat -c %s "$dump")" -eq "$dump_size" ]] && dump_ok=1 +status="fail" +[[ "$rc" -eq 0 && "$identity_ok" -eq 1 && "$completion_ok" -eq 1 \ + && "$dump_log_ok" -eq 1 && "$reset_ok" -eq 1 \ + && "$dump_ok" -eq 1 ]] && status="pass" + +python3 - \ + "$output_dir" "$manifest" "$device" "$status" "$rc" \ + "$identity_ok" "$completion_ok" "$dump_log_ok" "$reset_ok" "$dump_ok" \ + "$start_epoch" "$end_epoch" \ + "$launcher" "$saved_elf" "$saved_build_record" "$manifest" "$inputs" "$weights" \ + "$dump" "$log" <<'PY' +import hashlib +import json +from pathlib import Path +import sys + +( + out, manifest_path, device, status, rc, identity_ok, completion_ok, + dump_log_ok, reset_ok, dump_ok, start, end, launcher, elf, build_record, + manifest_file, inputs, weights, dump, log, +) = sys.argv[1:] + +def digest(path): + path = Path(path) + if not path.is_file(): + return None + h = hashlib.sha256() + with path.open("rb") as src: + for block in iter(lambda: src.read(1024 * 1024), b""): + h.update(block) + return {"path": str(path), "bytes": path.stat().st_size, "sha256": h.hexdigest()} + +manifest = json.load(open(manifest_path)) +payload = { + "schema_version": 1, + "status": status, + "device": device, + "hardware": device == "soc1sim", + "launcher_identity_match": bool(int(identity_ok)), + "completion_log_match": bool(int(completion_ok)), + "dump_log_match": bool(int(dump_log_ok)), + "board_reset_match": bool(int(reset_ok)), + "dump_size_match": bool(int(dump_ok)), + "return_code": int(rc), + "elapsed_seconds": int(end) - int(start), + "source_sha256": manifest["source"]["sha256"], + "selection": manifest["selection"], + "artifacts": { + name: digest(path) + for name, path in { + "launcher": launcher, + "elf": elf, + "build_record": build_record, + "slice_manifest": manifest_file, + "inputs": inputs, + "weights": weights, + "dump": dump, + "log": log, + "command": str(Path(out) / "command.txt"), + "wrapper_command": str(Path(out) / "wrapper_command.txt"), + "environment": str(Path(out) / "environment.txt"), + "device_evidence": str(Path(out) / "device_evidence.txt"), + "board_lock": str(Path(out) / "board_lock.log"), + }.items() + }, +} +Path(out, "run_result.json").write_text(json.dumps(payload, indent=2) + "\n") +PY + +cat "$log" +echo "DEVICE_RUN ${status^^} device=$device rc=$rc identity_ok=$identity_ok completion_ok=$completion_ok dump_log_ok=$dump_log_ok reset_ok=$reset_ok dump_ok=$dump_ok output=$output_dir" +[[ "$status" == "pass" ]] diff --git a/ported_models/yolov10n_hf_reference/scripts/run_host_full.sh b/ported_models/yolov10n_hf_reference/scripts/run_host_full.sh new file mode 100755 index 00000000..271106b9 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/scripts/run_host_full.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +set -euo pipefail + +port_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +repo_root="$(cd "$port_root/../.." && pwd)" +full_dir="${1:-$repo_root/local-artifacts/yolov10n_hf_reference/full_graph/deterministic}" +python="${YOLOV10N_HOST_PYTHON:-$repo_root/local-artifacts/yolov10n_hf_reference/venv/bin/python}" +model="${YOLOV10N_MODEL:-$repo_root/local-artifacts/yolov10n_hf_reference/model.onnx}" +dump="$full_dir/host_full_dump.bin" +report="$full_dir/host_full_compare.json" + +"$port_root/scripts/build_host_full.sh" "$full_dir" +runner_status=0 +"$full_dir/host_full_runner" \ + "$full_dir/inputs.bin" \ + "$full_dir/weights.bin" \ + "$dump" || runner_status=$? +compare_status=0 +"$python" "$port_root/tools/compare_full.py" \ + "$full_dir" "$dump" \ + --model "$model" \ + --json "$report" || compare_status=$? + +if (( runner_status != 0 )); then + echo "HOST_FULL_RUN FAIL runner_status=$runner_status report=$report" >&2 + exit "$runner_status" +fi +if (( compare_status != 0 )); then + echo "HOST_FULL_RUN FAIL compare_status=$compare_status report=$report" >&2 + exit "$compare_status" +fi +echo "HOST_FULL_RUN PASS report=$report" diff --git a/ported_models/yolov10n_hf_reference/scripts/run_host_range.sh b/ported_models/yolov10n_hf_reference/scripts/run_host_range.sh new file mode 100755 index 00000000..30342feb --- /dev/null +++ b/ported_models/yolov10n_hf_reference/scripts/run_host_range.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +set -euo pipefail + +port_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +repo_root="$(cd "$port_root/../.." && pwd)" +range_dir="${1:?usage: run_host_range.sh RANGE_DIR [DUMP] [REPORT]}" +python="${YOLOV10N_HOST_PYTHON:-$repo_root/local-artifacts/yolov10n_hf_reference/venv/bin/python}" +model="${YOLOV10N_MODEL:-$repo_root/local-artifacts/yolov10n_hf_reference/model.onnx}" +dump="${2:-$range_dir/host_range_dump.bin}" +report="${3:-$range_dir/host_range_compare.json}" + +"$port_root/scripts/build_host_range.sh" "$range_dir" +runner_status=0 +"$range_dir/host_range_runner" \ + "$range_dir/inputs.bin" \ + "$range_dir/weights.bin" \ + "$dump" || runner_status=$? +compare_status=0 +"$python" "$port_root/tools/compare_range.py" \ + "$range_dir" "$dump" \ + --model "$model" \ + --json "$report" || compare_status=$? + +if (( runner_status != 0 )); then + echo "HOST_RANGE_RUN FAIL runner_status=$runner_status report=$report" >&2 + exit "$runner_status" +fi +if (( compare_status != 0 )); then + echo "HOST_RANGE_RUN FAIL compare_status=$compare_status report=$report" >&2 + exit "$compare_status" +fi +echo "HOST_RANGE_RUN PASS report=$report" diff --git a/ported_models/yolov10n_hf_reference/scripts/validate_device_run.sh b/ported_models/yolov10n_hf_reference/scripts/validate_device_run.sh new file mode 100755 index 00000000..afc85521 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/scripts/validate_device_run.sh @@ -0,0 +1,166 @@ +#!/usr/bin/env bash +set -euo pipefail + +port_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +repo_root="$(cd "$port_root/../.." && pwd)" +slice_dir="${1:?usage: validate_device_run.sh SLICE_DIR RUN_DIR}" +run_dir="${2:?usage: validate_device_run.sh SLICE_DIR RUN_DIR}" +expected_device="${3:?usage: validate_device_run.sh SLICE_DIR RUN_DIR EXPECTED_DEVICE}" +python="${YOLOV10N_HOST_PYTHON:-$repo_root/local-artifacts/yolov10n_hf_reference/venv/bin/python}" + +[[ "$expected_device" == "sys_emu" || "$expected_device" == "soc1sim" ]] || { + echo "error: EXPECTED_DEVICE must be sys_emu or soc1sim" >&2 + exit 2 +} + +manifest="$slice_dir/slice_manifest.json" +read -r schema_version manifest_kind pmc_offset < <( + python3 - "$manifest" <<'PY' +import json, sys +manifest = json.load(open(sys.argv[1])) +print( + manifest["schema_version"], + manifest["manifest_kind"], + manifest["memory_map"]["pmc_device_offset"], +) +PY +) + +"$python" - \ + "$manifest" "$slice_dir" "$run_dir" "$expected_device" <<'PY' +import hashlib +import json +from pathlib import Path +import sys + +manifest_path = Path(sys.argv[1]) +slice_dir = Path(sys.argv[2]) +run_dir = Path(sys.argv[3]) +expected_device = sys.argv[4] +result = json.loads((run_dir / "run_result.json").read_text()) +manifest = json.loads(manifest_path.read_text()) + +def identity(path): + path = Path(path) + digest = hashlib.sha256() + with path.open("rb") as src: + for block in iter(lambda: src.read(1024 * 1024), b""): + digest.update(block) + return {"bytes": path.stat().st_size, "sha256": digest.hexdigest()} + +def require(condition, message): + if not condition: + raise SystemExit("error: execution evidence check failed: " + message) + +require(result["status"] == "pass", "run status is not pass") +require(result["device"] == expected_device, "device does not match expectation") +require( + result["hardware"] is (expected_device == "soc1sim"), + "hardware flag does not match device", +) +require(result["return_code"] == 0, "launcher return code is nonzero") +for field in ( + "launcher_identity_match", + "completion_log_match", + "dump_log_match", + "dump_size_match", +): + require(result[field] is True, field + " is not true") +if expected_device == "soc1sim": + require( + result.get("board_reset_match") is True, + "board_reset_match is not true", + ) +require( + result["source_sha256"] == manifest["source"]["sha256"], + "source checksum differs from slice manifest", +) +require( + result["selection"]["first_node"] == manifest["selection"]["first_node"] + and result["selection"]["last_node"] == manifest["selection"]["last_node"], + "selected node range differs from slice manifest", +) + +local_artifacts = { + "elf": run_dir / "slice.elf", + "build_record": run_dir / "build_record.json", + "slice_manifest": manifest_path, + "inputs": slice_dir / manifest["blobs"]["inputs"]["path"], + "weights": slice_dir / manifest["blobs"]["weights"]["path"], + "dump": run_dir / "dump.bin", + "log": run_dir / "run.log", + "command": run_dir / "command.txt", + "wrapper_command": run_dir / "wrapper_command.txt", + "environment": run_dir / "environment.txt", + "device_evidence": run_dir / "device_evidence.txt", +} +if expected_device == "soc1sim": + local_artifacts["board_lock"] = run_dir / "board_lock.log" + +for name, path in local_artifacts.items(): + require(path.is_file(), "{} is missing".format(path)) + stored = result["artifacts"].get(name) + require(stored is not None, "run result lacks " + name) + actual = identity(path) + require( + actual["bytes"] == stored["bytes"] + and actual["sha256"] == stored["sha256"], + name + " digest differs from run result", + ) + +for name in ("inputs", "weights"): + actual = identity(local_artifacts[name]) + record = manifest["blobs"][name] + require( + actual["bytes"] == int(record["nbytes"]) + and actual["sha256"] == record["sha256"], + name + " digest differs from slice manifest", + ) + +build = json.loads((run_dir / "build_record.json").read_text()) +require( + build["elf"]["sha256"] == identity(run_dir / "slice.elf")["sha256"], + "saved ELF differs from build record", +) +evidence = (run_dir / "device_evidence.txt").read_text() +require( + "backend=" + expected_device in evidence, + "device evidence has the wrong backend", +) +if expected_device == "soc1sim": + require( + "/dev/et0_mgmt" in evidence + and "/dev/et0_ops" in evidence + and evidence.count("type=character special file") >= 2, + "hardware character-device evidence is incomplete", + ) + require( + "1e0a:eb01" in evidence.lower() or "esperanto" in evidence.lower(), + "PCIe device evidence is incomplete", + ) + +print( + "EXECUTION_EVIDENCE PASS device={} hardware={} " + "nodes={}:{}".format( + expected_device, + expected_device == "soc1sim", + manifest["selection"]["first_node"], + manifest["selection"]["last_node"], + ) +) +PY + +if [[ "$schema_version" != "2" \ + || "$manifest_kind" != "contiguous_node_range" ]]; then + echo "error: unsupported device-validation manifest schema=$schema_version kind=$manifest_kind" >&2 + exit 2 +fi +"$python" "$port_root/tools/compare_range.py" \ + "$slice_dir" "$run_dir/dump.bin" \ + --json "$run_dir/tensor_compare.json" +"$python" "$port_root/tools/decode_pmc.py" \ + "$run_dir/dump.bin" --offset "$pmc_offset" --format json \ + > "$run_dir/pmc.json" +grep -E '"status": "PASS"' "$run_dir/pmc.json" >/dev/null + +echo "DEVICE_VALIDATION PASS device=$expected_device run=$run_dir compare=$run_dir/tensor_compare.json pmc=$run_dir/pmc.json" diff --git a/ported_models/yolov10n_hf_reference/scripts/validate_et_full.sh b/ported_models/yolov10n_hf_reference/scripts/validate_et_full.sh new file mode 100755 index 00000000..0ab8a4dd --- /dev/null +++ b/ported_models/yolov10n_hf_reference/scripts/validate_et_full.sh @@ -0,0 +1,265 @@ +#!/usr/bin/env bash +# Validate full-graph execution evidence, all checkpoints, output0, and PMCs. +set -euo pipefail + +port_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +repo_root="$(cd "$port_root/../.." && pwd)" +full_dir="${1:?usage: validate_et_full.sh FULL_DIR RUN_DIR EXPECTED_DEVICE [MODEL] [REQUIRE_DIRECT_OUTPUT]}" +run_dir="${2:?usage: validate_et_full.sh FULL_DIR RUN_DIR EXPECTED_DEVICE [MODEL] [REQUIRE_DIRECT_OUTPUT]}" +expected_device="${3:?usage: validate_et_full.sh FULL_DIR RUN_DIR EXPECTED_DEVICE [MODEL] [REQUIRE_DIRECT_OUTPUT]}" +model="${4:-${YOLOV10N_MODEL:-$repo_root/local-artifacts/yolov10n_hf_reference/model.onnx}}" +require_direct_output="${5:-${YR_REQUIRE_DIRECT_OUTPUT:-0}}" +python="${YOLOV10N_HOST_PYTHON:-$repo_root/local-artifacts/yolov10n_hf_reference/venv/bin/python}" + +[[ "$expected_device" == "sys_emu" || "$expected_device" == "soc1sim" ]] || { + echo "error: EXPECTED_DEVICE must be sys_emu or soc1sim" >&2 + exit 2 +} +[[ "$require_direct_output" == "0" || "$require_direct_output" == "1" ]] || { + echo "error: REQUIRE_DIRECT_OUTPUT must be 0 or 1" >&2 + exit 2 +} +[[ -x "$python" ]] || { + echo "error: host reference Python is not executable: $python" >&2 + exit 2 +} + +"$port_root/scripts/verify_full_package.sh" "$full_dir" "$model" +"$port_root/scripts/verify_full_elf.sh" \ + "$full_dir" "$run_dir/slice.elf" "$run_dir/build_record.json" + +for output in \ + "$run_dir/full_compare.json" \ + "$run_dir/pmc_stages.json"; do + [[ ! -e "$output" ]] || { + echo "error: refusing to overwrite validation evidence: $output" >&2 + exit 2 + } +done + +"$python" - \ + "$full_dir/slice_manifest.json" "$full_dir" "$run_dir" \ + "$expected_device" <<'PY' +import hashlib +import json +from pathlib import Path +import sys + +manifest_path = Path(sys.argv[1]).resolve() +full_dir = Path(sys.argv[2]).resolve() +run_dir = Path(sys.argv[3]).resolve() +expected_device = sys.argv[4] +manifest = json.loads(manifest_path.read_text(encoding="utf-8")) +result = json.loads((run_dir / "run_result.json").read_text(encoding="utf-8")) + + +def require(condition, message): + if not condition: + raise SystemExit("error: full execution evidence failed: " + message) + + +def identity(path): + path = Path(path) + digest = hashlib.sha256() + with path.open("rb") as source: + for block in iter(lambda: source.read(1024 * 1024), b""): + digest.update(block) + return {"bytes": path.stat().st_size, "sha256": digest.hexdigest()} + + +require(result.get("status") == "pass", "run status is not pass") +require(result.get("device") == expected_device, "device differs") +require( + result.get("hardware") is (expected_device == "soc1sim"), + "hardware flag differs", +) +require(result.get("return_code") == 0, "launcher returned nonzero") +for field in ( + "launcher_identity_match", + "completion_log_match", + "dump_log_match", + "dump_size_match", +): + require(result.get(field) is True, field + " is not true") +if expected_device == "soc1sim": + require(result.get("board_reset_match") is True, "board reset is unproven") +require( + result.get("source_sha256") == manifest["source"]["sha256"], + "pinned source checksum differs", +) +selection = result.get("selection", {}) +require( + selection.get("selector") == "N000:N307" + and selection.get("first_node") == "N000" + and selection.get("last_node") == "N307" + and selection.get("inclusive") is True, + "run selection is not inclusive N000:N307", +) + +local_artifacts = { + "elf": run_dir / "slice.elf", + "build_record": run_dir / "build_record.json", + "slice_manifest": manifest_path, + "inputs": full_dir / manifest["blobs"]["inputs"]["path"], + "weights": full_dir / manifest["blobs"]["weights"]["path"], + "dump": run_dir / "dump.bin", + "log": run_dir / "run.log", + "command": run_dir / "command.txt", + "wrapper_command": run_dir / "wrapper_command.txt", + "environment": run_dir / "environment.txt", + "device_evidence": run_dir / "device_evidence.txt", +} +if expected_device == "soc1sim": + local_artifacts["board_lock"] = run_dir / "board_lock.log" +for name, path in local_artifacts.items(): + require(path.is_file(), "{} is missing".format(path)) + stored = result.get("artifacts", {}).get(name) + require(stored is not None, "run result lacks " + name) + actual = identity(path) + require( + actual["bytes"] == stored.get("bytes") + and actual["sha256"] == stored.get("sha256"), + name + " identity differs from run result", + ) + +for name in ("inputs", "weights"): + actual = identity(local_artifacts[name]) + expected = manifest["blobs"][name] + require( + actual["bytes"] == expected["nbytes"] + and actual["sha256"] == expected["sha256"], + name + " identity differs from full manifest", + ) +build = json.loads((run_dir / "build_record.json").read_text(encoding="utf-8")) +require( + build.get("elf", {}).get("sha256") + == identity(run_dir / "slice.elf")["sha256"], + "saved ELF differs from build record", +) +evidence = (run_dir / "device_evidence.txt").read_text(encoding="utf-8") +require( + "backend=" + expected_device in evidence, + "device evidence names another backend", +) +if expected_device == "soc1sim": + require( + "meaning=real PCIe ET-SoC1 hardware" in evidence, + "hardware meaning is absent", + ) + require( + "/dev/et0_mgmt" in evidence + and "/dev/et0_ops" in evidence + and evidence.count("type=character special file") >= 2, + "hardware character-device evidence is incomplete", + ) + require( + "1e0a:eb01" in evidence.lower() or "esperanto" in evidence.lower(), + "hardware PCIe identity is incomplete", + ) +else: + require( + "meaning=software system emulator" in evidence, + "system-emulator meaning is absent", + ) + require( + "meaning=real PCIe ET-SoC1 hardware" not in evidence, + "system-emulator evidence claims hardware", + ) + +require( + identity(run_dir / "dump.bin")["bytes"] + == manifest["memory_map"]["dump_size"], + "dump byte count differs from full manifest", +) +print( + "FULL_EXECUTION_EVIDENCE PASS device={} hardware={} " + "selector=N000:N307".format( + expected_device, expected_device == "soc1sim" + ) +) +PY + +compare_args=( + "$python" "$port_root/tools/compare_full.py" + "$full_dir" "$run_dir/dump.bin" + --model "$model" + --json "$run_dir/full_compare.json" +) +if [[ "$require_direct_output" == "1" ]]; then + compare_args+=(--require-direct-output) +fi +"${compare_args[@]}" + +mapfile -t pmc_rows < <( + "$python" - "$full_dir/slice_manifest.json" <<'PY' +import json +import sys + +manifest = json.load(open(sys.argv[1])) +for index, stage in enumerate(manifest["pmc_stages"]): + print("{}\t{}\t{}\t{}\t{}".format( + index, + stage["name"], + stage["first_node"], + stage["last_node"], + stage["pmc_device_offset"], + )) +PY +) + +pmc_files=() +for row in "${pmc_rows[@]}"; do + IFS=$'\t' read -r index name first_node last_node offset <<<"$row" + output="$run_dir/pmc_${index}_${name}.json" + [[ ! -e "$output" ]] || { + echo "error: refusing to overwrite validation evidence: $output" >&2 + exit 2 + } + "$python" "$port_root/tools/decode_pmc.py" \ + "$run_dir/dump.bin" --offset "$offset" --format json > "$output" + grep -E '"status": "PASS"' "$output" >/dev/null + pmc_files+=("$output") + echo "PMC_STAGE PASS name=$name nodes=$first_node:$last_node report=$output" +done + +"$python" - \ + "$full_dir/slice_manifest.json" "$run_dir/pmc_stages.json" \ + "${pmc_files[@]}" <<'PY' +import json +from pathlib import Path +import sys + +manifest = json.load(open(sys.argv[1])) +output = Path(sys.argv[2]) +paths = [Path(value) for value in sys.argv[3:]] +if len(paths) != len(manifest["pmc_stages"]): + raise SystemExit("error: PMC report count differs from manifest") +records = [] +for stage, path in zip(manifest["pmc_stages"], paths): + decoded = json.loads(path.read_text(encoding="utf-8")) + if decoded.get("status") != "PASS": + raise SystemExit("error: PMC stage {} failed".format(stage["name"])) + records.append( + { + "name": stage["name"], + "first_node": stage["first_node"], + "last_node": stage["last_node"], + "pmc_device_offset": stage["pmc_device_offset"], + "report": path.name, + "decoded": decoded, + } + ) +payload = { + "schema_version": 1, + "status": "PASS", + "scope": "seven disjoint intervals around ONNX nodes only", + "selector": "N000:N307", + "stages": records, +} +output.write_text( + json.dumps(payload, indent=2, allow_nan=False) + "\n", + encoding="utf-8", +) +PY + +echo "ET_FULL_VALIDATION PASS device=$expected_device selector=N000:N307 require_direct_output=$require_direct_output compare=$run_dir/full_compare.json pmc=$run_dir/pmc_stages.json" diff --git a/ported_models/yolov10n_hf_reference/scripts/verify_full_elf.sh b/ported_models/yolov10n_hf_reference/scripts/verify_full_elf.sh new file mode 100755 index 00000000..c01a8854 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/scripts/verify_full_elf.sh @@ -0,0 +1,119 @@ +#!/usr/bin/env bash +# Bind an ET ELF to the exact full manifest and scalar runner source hashes. +set -euo pipefail + +port_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +full_dir="${1:?usage: verify_full_elf.sh FULL_DIR ELF [BUILD_RECORD]}" +elf="${2:?usage: verify_full_elf.sh FULL_DIR ELF [BUILD_RECORD]}" +record="${3:-$elf.build.json}" + +python3 - \ + "$full_dir" "$elf" "$record" "$port_root" <<'PY' +import hashlib +import json +from pathlib import Path +import struct +import sys + +full_dir = Path(sys.argv[1]).resolve() +elf = Path(sys.argv[2]).resolve() +record_path = Path(sys.argv[3]).resolve() +port_root = Path(sys.argv[4]).resolve() + + +def fail(message): + raise SystemExit("error: full-ELF contract failed: " + message) + + +def require(condition, message): + if not condition: + fail(message) + + +def digest(path): + value = hashlib.sha256() + with path.open("rb") as source: + for block in iter(lambda: source.read(1024 * 1024), b""): + value.update(block) + return value.hexdigest() + + +require(elf.is_file(), "ELF is missing") +require(record_path.is_file(), "ELF build record is missing") +record = json.loads(record_path.read_text(encoding="utf-8")) +require(record.get("schema_version") == 1, "unknown build-record schema") +elf_record = record.get("elf") +require(isinstance(elf_record, dict), "build record lacks ELF identity") +require( + elf.stat().st_size == elf_record.get("bytes") + and digest(elf) == elf_record.get("sha256"), + "ELF identity differs from build record", +) +prefix = elf.read_bytes()[:20] +require( + len(prefix) == 20 + and prefix[:4] == b"\x7fELF" + and prefix[4] == 2 + and prefix[5] == 1 + and struct.unpack_from("= 4816, "PMC stride cannot hold one versioned record") +for index, (actual, expected) in enumerate(zip(stages, EXPECTED_STAGES)): + name, first_node, last_node = expected + require(actual.get("name") == name, "PMC stage {} name differs".format(index)) + require( + actual.get("first_node") == first_node + and actual.get("last_node") == last_node, + "PMC stage {} range differs".format(index), + ) + require( + integer(actual.get("pmc_device_offset"), "stage offset") + == pmc_base + index * pmc_stride, + "PMC stage {} offset differs".format(index), + ) +require( + integer(memory.get("pmc_stage_count"), "pmc_stage_count") == len(stages), + "memory-map PMC count differs", +) + +for name in ("inputs", "weights", "goldens"): + record = blobs.get(name) + require(isinstance(record, dict), "missing {} blob record".format(name)) + path = package_path(record.get("path"), "blobs.{}.path".format(name)) + require(path.is_file(), "{} blob is missing".format(name)) + expected_bytes = integer(record.get("nbytes"), name + " nbytes") + expected_sha = record.get("sha256") + require( + path.stat().st_size == expected_bytes, + "{} blob byte count differs".format(name), + ) + require(digest(path) == expected_sha, "{} blob SHA-256 differs".format(name)) + +result_offset = integer(memory.get("result_device_offset"), "result offset") +workspace_bytes = integer(memory.get("workspace_bytes"), "workspace bytes") +dump_size = integer(memory.get("dump_size"), "dump size") +input_offset = integer(memory.get("input_device_offset"), "input offset") +weight_offset = integer(memory.get("weight_device_offset"), "weight offset") +mem_size = integer(memory.get("mem_size"), "mem size") +input_bytes = integer(memory.get("input_blob_bytes"), "input blob bytes") +weight_bytes = integer(memory.get("weight_blob_bytes"), "weight blob bytes") +require(result_offset == 0, "result offset is not zero") +require(128 + workspace_bytes <= pmc_base, "workspace overlaps PMC pages") +require( + dump_size == pmc_base + len(stages) * pmc_stride, + "dump does not end after the seven PMC pages", +) +require(input_offset >= dump_size, "input blob overlaps the dump") +require(weight_offset >= input_offset + input_bytes, "weight overlaps input") +require(mem_size >= weight_offset + weight_bytes, "mem_size truncates weights") +require( + input_bytes == integer(blobs["inputs"]["nbytes"], "inputs nbytes") + and weight_bytes == integer(blobs["weights"]["nbytes"], "weights nbytes"), + "memory-map blob sizes differ", +) + +tolerances = manifest.get("tolerances") +require(isinstance(tolerances, dict), "tolerances is not an object") +require( + tolerances.get("atol") == 0.00005 + and tolerances.get("rtol") == 0.0001, + "global tolerances differ from the validated contract", +) +overrides = tolerances.get("checkpoint_overrides") +require( + isinstance(overrides, dict) and set(overrides) == {"N288"}, + "checkpoint tolerance overrides differ from the validated contract", +) +n288_tolerance = overrides["N288"] +require( + isinstance(n288_tolerance, dict) + and n288_tolerance.get("atol") == 0.0002 + and n288_tolerance.get("rtol") == 0.0001, + "N288 tolerance differs from the validated contract", +) + +generated = manifest.get("generated") +require(isinstance(generated, dict), "generated is not an object") +header_record = generated.get("header") +require(isinstance(header_record, dict), "generated.header is not an object") +generated_header_path = package_path( + header_record.get("path"), "generated.header.path" +) +require( + generated_header_path == header_path, + "generated.header.path is not slice_manifest.h", +) +require(generated_header_path.is_file(), "generated header is missing") +require( + generated_header_path.stat().st_size + == integer(header_record.get("nbytes"), "generated.header.nbytes"), + "generated header byte count differs", +) +require( + integer(header_record.get("nbytes"), "generated.header.nbytes") + == EXPECTED_HEADER_BYTES, + "generated header byte count differs from the pinned topology", +) +header_sha256 = header_record.get("sha256") +require( + isinstance(header_sha256, str) + and len(header_sha256) == 64 + and all(character in "0123456789abcdef" for character in header_sha256), + "generated.header.sha256 is invalid", +) +require( + digest(generated_header_path) == header_sha256, + "generated header SHA-256 differs", +) +require( + header_sha256 == EXPECTED_HEADER_SHA256, + "generated header SHA-256 differs from the pinned topology", +) + +header = header_path.read_text(encoding="utf-8") +macros = { + match.group(1): int(match.group(2), 0) + for match in re.finditer( + r"^#define[ \t]+(YR_[A-Z0-9_]+)[ \t]+(0x[0-9a-fA-F]+|[0-9]+)u?[ \t]*$", + header, + flags=re.MULTILINE, + ) +} +expected_macros = { + "YR_MANIFEST_VERSION": 2, + "YR_FIRST_NODE": 0, + "YR_LAST_NODE": 307, + "YR_NODE_COUNT": 308, + "YR_RESULT_DEVICE_OFFSET": result_offset, + "YR_INPUT_DEVICE_OFFSET": input_offset, + "YR_WEIGHT_DEVICE_OFFSET": weight_offset, + "YR_PMC_DEVICE_OFFSET": pmc_base, + "YR_PMC_STAGE_COUNT": len(stages), + "YR_PMC_STAGE_STRIDE": pmc_stride, + "YR_INPUT_BLOB_BYTES": input_bytes, + "YR_WEIGHT_BLOB_BYTES": weight_bytes, + "YR_WORKSPACE_BYTES": workspace_bytes, + "YR_DUMP_SIZE": dump_size, + "YR_MEM_SIZE": mem_size, +} +for name, expected in expected_macros.items(): + require( + macros.get(name) == expected, + "{} header/JSON value differs".format(name), + ) + +if model_arg: + model = Path(model_arg).resolve() + require(model.is_file(), "pinned ONNX model is missing") + require( + digest(model) == EXPECTED_SOURCE["sha256"], + "pinned ONNX SHA-256 differs", + ) + +print( + "FULL_PACKAGE PASS selector=N000:N307 nodes=308 stages=7 " + "workspace={} dump={} mem={} model_checked={}".format( + workspace_bytes, dump_size, mem_size, bool(model_arg) + ) +) +PY diff --git a/ported_models/yolov10n_hf_reference/src/et_slice_runner.c b/ported_models/yolov10n_hf_reference/src/et_slice_runner.c new file mode 100644 index 00000000..e53b60c5 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/src/et_slice_runner.c @@ -0,0 +1,292 @@ +#include + +#include "erbium/isa/atomic.h" +#include "erbium/isa/cacheops-umode.h" +#include "erbium/isa/hart.h" +#include "erbium/isa/utils.h" + +#include "ref_pmc.h" +#include "ref_runtime.h" +/* See the matching note in ref_runtime.c for why this include is guarded. */ +#ifndef YR_SLICE_MANIFEST_PREINCLUDED +#include "slice_manifest.h" +#endif + +#ifndef YR_MANIFEST_VERSION +#define YR_MANIFEST_VERSION 1u +#endif + +/* + * Hart count used by yr_hart_id()/yr_hart_count(), the barrier width, and + * the PMC active-hart field below. yr_conv() uses it to split output + * channels. Override with -DYR_NHART=8 to test thread-0-only occupancy. + */ +#ifndef YR_NHART +#define YR_NHART 16u +#endif + +/* + * Backoff bounds, in nops, for a hart waiting at the barrier. The wait starts + * at the low value and doubles up to the high one, so a barrier every hart + * reaches at nearly the same time is left almost immediately, while a long + * wait for a node only hart 0 runs settles into polling rarely. Tunable at + * build time so the values can be measured on the board rather than guessed. + */ +#ifndef YR_BARRIER_BACKOFF_MIN +#define YR_BARRIER_BACKOFF_MIN 32u +#endif +#ifndef YR_BARRIER_BACKOFF_MAX +#define YR_BARRIER_BACKOFF_MAX 4096u +#endif + + +uint32_t yr_hart_id(void) +{ + return get_hart_id() & 0x3fu; +} + + +uint32_t yr_hart_count(void) +{ + return YR_NHART; +} + + +void yr_publish(const void *address, uint32_t bytes) +{ + evict(address, (uint64_t)bytes); + WAIT_CACHEOPS; +} + + +/* + * Software barrier state. Lives in the ELF image, not in the device buffer, + * because the launcher allocates that buffer without zeroing it and a + * counting barrier that starts from garbage never releases. The build uses + * -fno-zero-initialized-in-bss so these zeros are loaded from the image. + * Padded to a full cache line so no other variable shares it, which matters + * because L1 is minion local and not coherent. + */ +struct yr_barrier_state { + volatile uint32_t count; + volatile uint32_t epoch; + uint32_t padding[14]; +}; + +static struct yr_barrier_state g_yr_barrier __attribute__((aligned(64))) = { + 0u, 0u, { 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, 0u } +}; + + +void yr_hart_barrier(void) +{ + uint32_t epoch; + uint32_t prior; + + FENCE; + WAIT_CACHEOPS; + if (YR_NHART <= 1u) { + return; + } + epoch = atomic_load_local_32(&g_yr_barrier.epoch); + prior = atomic_add_local_32(&g_yr_barrier.count, 1u); + if (prior + 1u == YR_NHART) { + atomic_store_local_32(&g_yr_barrier.count, 0u); + FENCE; + (void)atomic_add_local_32(&g_yr_barrier.epoch, 1u); + } else { + /* + * Back off between polls instead of spinning as tightly as possible. + * Two harts share a minion and compete for issue slots and load/store + * resources, and every node that only hart 0 runs leaves its partner + * hart sitting in this loop; a poll loop whose body is a memory fence + * is about the most disruptive thing to put next to a hart that is + * trying to work. Backing off cost nothing measurable at the barriers + * where every hart arrives together and was worth a fifth of total + * runtime at the ones where it does not. + */ + uint32_t backoff = YR_BARRIER_BACKOFF_MIN; + while (atomic_load_local_32(&g_yr_barrier.epoch) == epoch) { + uint32_t spin; + for (spin = 0u; spin < backoff; ++spin) { + NOP; + } + if (backoff < YR_BARRIER_BACKOFF_MAX) { + backoff += backoff; + } + FENCE; + } + } + FENCE; +} + + +static uintptr_t yr_buffer_base_from_args(uintptr_t argument_area) +{ + uintptr_t pointer; + if (argument_area == 0u || argument_area == ~(uintptr_t)0u) { + return 0u; + } + pointer = *(volatile uintptr_t *)argument_area; + if (pointer == 0u || pointer == ~(uintptr_t)0u) { + return 0u; + } + return pointer; +} + + +#if YR_MANIFEST_VERSION >= 2 +/* + * Keep this check outside every PMC interval. The schema-v2 stage table must + * be an exact, gap-free partition of the generated node list, with local and + * pinned-ONNX ordinals agreeing. A malformed measurement table must never + * silently skip or execute a graph node. + */ +static uint32_t yr_pmc_stage_manifest_valid(void) +{ + uint32_t stage_index; + uint32_t next_local_node = 0u; + uint32_t next_onnx_node = YR_FIRST_NODE; + + if (YR_PMC_STAGE_COUNT == 0u || YR_PMC_STAGE_STRIDE < YR_PMC_REGION_BYTES) { + return 0u; + } + for (stage_index = 0u; stage_index < YR_PMC_STAGE_COUNT; ++stage_index) { + const struct yr_pmc_stage_desc *stage = &yr_pmc_stages[stage_index]; + if (stage->first_local_node != next_local_node + || stage->last_local_node < stage->first_local_node + || stage->last_local_node >= YR_NODE_COUNT + || stage->first_onnx_node != next_onnx_node + || stage->last_onnx_node < stage->first_onnx_node + || stage->last_onnx_node - stage->first_onnx_node + != stage->last_local_node - stage->first_local_node) { + return 0u; + } + next_local_node = stage->last_local_node + 1u; + next_onnx_node = stage->last_onnx_node + 1u; + } + return next_local_node == YR_NODE_COUNT + && next_onnx_node == YR_LAST_NODE + 1u; +} +#endif + + +int main(uintptr_t argument_area) +{ + uint8_t *base; + struct yr_result_header *result; + uint32_t status; + const uint32_t hart_id = get_hart_id() & 0x3fu; + + /* + * NUM_HARTS (the CRT gate deciding which physical harts even reach this + * point) stays 16 in every configuration, including single-logical-hart + * builds, because only NUM_HARTS=16 has been proven to boot on this + * sys_emu. When YR_NHART is compiled down to 1 for a barrier-free + * validation run, every hart still calls main(); only hart 0 may + * proceed, since yr_hart_range() assumes yr_hart_id() < yr_hart_count() + * and would compute out-of-range splits for any other physical hart. + */ + if (YR_NHART <= 1u && hart_id != 0u) { + return 0; + } + + /* + * Every hart sets up its own tensor-unit mode here, before the first + * barrier and before any node runs, so nothing about that setup is + * shared between harts or repeated per node. Skipped entirely unless the + * tensor path is enabled, because the mode switch alone slows every + * scalar operator down. + */ + if (YR_CONV_TENSOR_ENABLED) { + yr_conv_tensor_init(); + } + + base = (uint8_t *)yr_buffer_base_from_args(argument_area); + if (base == (uint8_t *)0) { + return YR_STATUS_BAD_MANIFEST; + } + result = (struct yr_result_header *)(base + YR_RESULT_DEVICE_OFFSET); + + /* + * yr_prepare_result() zeroes the whole workspace, so every hart must wait + * for it to finish before any hart writes a Conv slice into that memory. + * Only hart 0 owns the result header; the rest read result->status after + * the barrier to decide whether to proceed. + */ + FENCE; + if (hart_id == 0u) { + yr_prepare_result(base, result); + yr_publish(result, YR_RESULT_HEADER_BYTES + YR_WORKSPACE_BYTES); + } + yr_hart_barrier(); + status = result->status; + if (status != YR_STATUS_OK) { + return status; + } +#if YR_MANIFEST_VERSION >= 2 + if (hart_id == 0u) { + if (!yr_pmc_stage_manifest_valid()) { + result->status = YR_STATUS_BAD_MANIFEST; + } + yr_publish(result, YR_RESULT_HEADER_BYTES); + } + yr_hart_barrier(); + status = result->status; + if (status != YR_STATUS_OK) { + return status; + } + for (uint32_t stage_index = 0u; + stage_index < YR_PMC_STAGE_COUNT; + ++stage_index) { + const struct yr_pmc_stage_desc *stage = &yr_pmc_stages[stage_index]; + uint8_t *pmc_base = base + YR_PMC_DEVICE_OFFSET + + stage_index * YR_PMC_STAGE_STRIDE; + yr_pmc_begin(pmc_base, hart_id, YR_NHART); + status = yr_run_node_span( + base, result, stage->first_local_node, stage->last_local_node); + yr_pmc_end(pmc_base, hart_id); + if (status != YR_STATUS_OK) { + break; + } + } +#else + yr_pmc_begin(base + YR_PMC_DEVICE_OFFSET, hart_id, YR_NHART); + status = yr_run_selected(base, result); + yr_pmc_end(base + YR_PMC_DEVICE_OFFSET, hart_id); +#endif + + /* + * yr_finalize_result() hashes the whole workspace and only hart 0 calls + * it, so every Conv slice from every hart must already be published by + * the per-node barrier inside yr_run_node_span() before this point. + */ + if (hart_id == 0u) { + yr_finalize_result(base, result); + } + yr_hart_barrier(); + + if (hart_id == 0u) { + __asm__ __volatile__("" ::: "memory"); + FENCE; + + evict((const void *)(base + YR_RESULT_DEVICE_OFFSET), + YR_RESULT_HEADER_BYTES + YR_WORKSPACE_BYTES); +#if YR_MANIFEST_VERSION >= 2 + for (uint32_t stage_index = 0u; + stage_index < YR_PMC_STAGE_COUNT; + ++stage_index) { + evict( + (const void *)(base + YR_PMC_DEVICE_OFFSET + + stage_index * YR_PMC_STAGE_STRIDE), + YR_PMC_REGION_BYTES); + } +#else + evict((const void *)(base + YR_PMC_DEVICE_OFFSET), YR_PMC_REGION_BYTES); +#endif + WAIT_CACHEOPS; + __asm__ __volatile__("" ::: "memory"); + FENCE; + } + return status; +} diff --git a/ported_models/yolov10n_hf_reference/src/host_full_runner.c b/ported_models/yolov10n_hf_reference/src/host_full_runner.c new file mode 100644 index 00000000..8a5257f8 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/src/host_full_runner.c @@ -0,0 +1,113 @@ +#include +#include +#include +#include + +#include "ref_runtime.h" +#include "slice_manifest.h" + + +uint32_t yr_hart_id(void) +{ + return 0u; +} + + +uint32_t yr_hart_count(void) +{ + return 1u; +} + + +void yr_publish(const void *address, uint32_t bytes) +{ + (void)address; + (void)bytes; +} + + +void yr_hart_barrier(void) +{ +} + + +static int read_exact(const char *path, uint8_t *destination, size_t expected) +{ + FILE *file = fopen(path, "rb"); + size_t got; + int extra; + if (file == NULL) { + fprintf(stderr, "error: cannot open %s: errno=%d\n", path, errno); + return 0; + } + got = fread(destination, 1, expected, file); + extra = fgetc(file); + if (fclose(file) != 0 || got != expected || extra != EOF) { + fprintf(stderr, "error: %s size mismatch; expected %zu bytes\n", + path, expected); + return 0; + } + return 1; +} + + +static int write_exact(const char *path, const uint8_t *source, size_t bytes) +{ + FILE *file = fopen(path, "wb"); + size_t wrote; + if (file == NULL) { + fprintf(stderr, "error: cannot create %s: errno=%d\n", path, errno); + return 0; + } + wrote = fwrite(source, 1, bytes, file); + if (fclose(file) != 0 || wrote != bytes) { + fprintf(stderr, "error: short write to %s\n", path); + return 0; + } + return 1; +} + + +int main(int argc, char **argv) +{ + uint8_t *memory; + struct yr_result_header *result; + uint32_t status; + if (argc != 4) { + fprintf(stderr, "usage: %s INPUTS.BIN WEIGHTS.BIN DUMP.BIN\n", argv[0]); + return 2; + } + memory = (uint8_t *)calloc(1, YR_MEM_SIZE); + if (memory == NULL) { + fprintf(stderr, "error: allocation of %u bytes failed\n", YR_MEM_SIZE); + return 2; + } + if (!read_exact(argv[1], memory + YR_INPUT_DEVICE_OFFSET, + YR_INPUT_BLOB_BYTES) + || !read_exact(argv[2], memory + YR_WEIGHT_DEVICE_OFFSET, + YR_WEIGHT_BLOB_BYTES)) { + free(memory); + return 2; + } + result = (struct yr_result_header *)(memory + YR_RESULT_DEVICE_OFFSET); + status = yr_prepare_result(memory, result); + if (status != YR_STATUS_OK) { + fprintf(stderr, "error: generated full manifest is invalid\n"); + free(memory); + return 1; + } + status = yr_run_selected(memory, result); + yr_finalize_result(memory, result); + if (!write_exact(argv[3], memory, YR_DUMP_SIZE)) { + free(memory); + return 2; + } + printf( + "HOST_FULL %s nodes=N%03u:N%03u status=%u " + "workspace_fnv1a=%016llx dump=%s\n", + status == YR_STATUS_OK ? "PASS" : "FAIL", + YR_FIRST_NODE, YR_LAST_NODE, status, + (unsigned long long)result->workspace_fnv1a, argv[3]); + free(memory); + return status == YR_STATUS_OK ? 0 : 1; +} diff --git a/ported_models/yolov10n_hf_reference/src/host_range_runner.c b/ported_models/yolov10n_hf_reference/src/host_range_runner.c new file mode 100644 index 00000000..88d4602c --- /dev/null +++ b/ported_models/yolov10n_hf_reference/src/host_range_runner.c @@ -0,0 +1,114 @@ +#include +#include +#include +#include + +#include "ref_runtime.h" +#include "slice_manifest.h" + + +uint32_t yr_hart_id(void) +{ + return 0u; +} + + +uint32_t yr_hart_count(void) +{ + return 1u; +} + + +void yr_publish(const void *address, uint32_t bytes) +{ + (void)address; + (void)bytes; +} + + +void yr_hart_barrier(void) +{ +} + + +static int read_exact(const char *path, uint8_t *destination, size_t expected) +{ + FILE *file = fopen(path, "rb"); + size_t got; + int extra; + if (file == NULL) { + fprintf(stderr, "error: cannot open %s: errno=%d\n", path, errno); + return 0; + } + got = fread(destination, 1, expected, file); + extra = fgetc(file); + if (fclose(file) != 0 || got != expected || extra != EOF) { + fprintf(stderr, "error: %s size mismatch; expected %zu bytes\n", + path, expected); + return 0; + } + return 1; +} + + +static int write_exact(const char *path, const uint8_t *source, size_t bytes) +{ + FILE *file = fopen(path, "wb"); + size_t wrote; + if (file == NULL) { + fprintf(stderr, "error: cannot create %s: errno=%d\n", path, errno); + return 0; + } + wrote = fwrite(source, 1, bytes, file); + if (fclose(file) != 0 || wrote != bytes) { + fprintf(stderr, "error: short write to %s\n", path); + return 0; + } + return 1; +} + + +int main(int argc, char **argv) +{ + uint8_t *memory; + struct yr_result_header *result; + uint32_t status; + if (argc != 4) { + fprintf(stderr, "usage: %s INPUTS.BIN WEIGHTS.BIN DUMP.BIN\n", + argv[0]); + return 2; + } + memory = (uint8_t *)calloc(1, YR_MEM_SIZE); + if (memory == NULL) { + fprintf(stderr, "error: allocation of %u bytes failed\n", YR_MEM_SIZE); + return 2; + } + if (!read_exact(argv[1], memory + YR_INPUT_DEVICE_OFFSET, + YR_INPUT_BLOB_BYTES) + || !read_exact(argv[2], memory + YR_WEIGHT_DEVICE_OFFSET, + YR_WEIGHT_BLOB_BYTES)) { + free(memory); + return 2; + } + result = (struct yr_result_header *)(memory + YR_RESULT_DEVICE_OFFSET); + status = yr_prepare_result(memory, result); + if (status != YR_STATUS_OK) { + fprintf(stderr, "error: generated range is invalid\n"); + free(memory); + return 1; + } + status = yr_run_selected(memory, result); + yr_finalize_result(memory, result); + if (!write_exact(argv[3], memory, YR_DUMP_SIZE)) { + free(memory); + return 2; + } + printf( + "HOST_RANGE %s nodes=N%03u:N%03u status=%u " + "workspace_fnv1a=%016llx dump=%s\n", + status == YR_STATUS_OK ? "PASS" : "FAIL", + YR_FIRST_NODE, YR_LAST_NODE, status, + (unsigned long long)result->workspace_fnv1a, argv[3]); + free(memory); + return status == YR_STATUS_OK ? 0 : 1; +} diff --git a/ported_models/yolov10n_hf_reference/src/leaderboard_full.c b/ported_models/yolov10n_hf_reference/src/leaderboard_full.c new file mode 100644 index 00000000..da3e0672 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/src/leaderboard_full.c @@ -0,0 +1,26 @@ +/* + * Single translation unit for the board CI leaderboard build, which compiles + * one source file per configured model. The scripts in scripts/ compile these + * units separately with the generated manifest on the include path; this file + * pins the committed full-graph manifest by relative path instead, so the CI + * build does not depend on the working directory it runs from. It builds the + * same three units the script build does, which keeps the benchmarked binary + * identical to the one validated by tools/compare_full.py. + * + * YR_SLICE_MANIFEST_PREINCLUDED tells the units the manifest is already in + * scope. YR_CONV_TENSOR_STRONG_PRESENT drops the weak yr_conv_tensor() stubs in + * ref_runtime.c, because the strong definitions in yr_conv_tensor_et.c cannot + * share a translation unit with the weak ones they replace; the separate + * compilation used by the scripts still resolves that override at link time. + * The tensor path stays inert either way while YR_CONV_TENSOR_ENABLED is 0. + * + * The three included units share no static names, so combining them changes no + * linkage. + */ +#include "../generated/full_graph/slice_manifest.h" +#define YR_SLICE_MANIFEST_PREINCLUDED 1 +#define YR_CONV_TENSOR_STRONG_PRESENT 1 + +#include "ref_runtime.c" +#include "yr_conv_tensor_et.c" +#include "et_slice_runner.c" diff --git a/ported_models/yolov10n_hf_reference/src/ref_pmc.h b/ported_models/yolov10n_hf_reference/src/ref_pmc.h new file mode 100644 index 00000000..980e46d3 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/src/ref_pmc.h @@ -0,0 +1,363 @@ +/* + * ref_pmc.h - isolated ET-SoC1 performance-counter support for the + * correctness-first YOLOv10n Hugging Face ONNX reference port. + * + * Define YR_PMC to enable target-side sampling. Calls remain valid no-ops + * when YR_PMC is not defined, so a selected slice can be bracketed directly: + * + * yr_pmc_begin(base + YR_PMC_DEVICE_OFFSET, hart_id, active_harts); + * run_selected_slice(...); + * yr_pmc_end(base + YR_PMC_DEVICE_OFFSET, hart_id); + * + * The calls directly bracket the selected slice: hart 0 takes the optional + * shared shire-cache (SC) and memshire (MS) snapshots before reading the HPM + * starts and after reading the HPM ends. Thus shared syscalls are outside the + * per-hart interval; as with any sequential snapshot, the small CSR-read + * boundary cost remains. Define either of these as 0 to omit its syscalls: + * + * YR_PMC_SAMPLE_SC (default 1) + * YR_PMC_SAMPLE_MS (default 1) + * + * The fixed, little-endian binary format is decoded by tools/decode_pmc.py. + * Its magic, version, sizes, offsets, and endian marker are deliberately part + * of the public format below rather than inferred from a compiler dump. + * + * Firmware default event map (see docs/perf_counters.md): + * hpmcounter3 = minion cycles + * hpmcounter4 = retired instructions, thread 0 + * hpmcounter5 = retired instructions, thread 1 + * hpmcounter6 = L2 miss requests + * hpmcounter7 = minion icache requests + * hpmcounter8 = icache etlink requests + */ + +#ifndef YR_REF_PMC_H +#define YR_REF_PMC_H + +#include +#include + +#define YR_PMC_REGION_MAGIC 0x4d505259u /* little-endian bytes "YRPM" */ +#define YR_PMC_HART_MAGIC 0x48505259u /* little-endian bytes "YRPH" */ +#define YR_PMC_AGGREGATE_MAGIC 0x41505259u /* little-endian bytes "YRPA" */ +#define YR_PMC_FORMAT_VERSION 1u +#define YR_PMC_ENDIAN_MARKER 0x01020304u + +#define YR_PMC_HPM_COUNT 6u /* hpmcounter3..hpmcounter8 */ +#define YR_PMC_SC_BANKS 4u +#define YR_PMC_MS_COUNT 8u +#define YR_PMC_COUNTERS_PER_BLOCK 3u /* {cycles, event0, event1} */ +#define YR_PMC_MAX_HARTS 32u + +#define YR_PMC_HEADER_BYTES 128u +#define YR_PMC_HART_RECORD_BYTES 128u +#define YR_PMC_AGGREGATE_OFFSET 4224u +#define YR_PMC_REGION_BYTES 4816u + +#define YR_PMC_FLAG_SC_REQUESTED (1u << 0) +#define YR_PMC_FLAG_MS_REQUESTED (1u << 1) +#define YR_PMC_KNOWN_FLAGS \ + (YR_PMC_FLAG_SC_REQUESTED | YR_PMC_FLAG_MS_REQUESTED) + +#define YR_PMC_ERROR_VALUE ((uint64_t)~0ull) + +#ifndef YR_PMC_SAMPLE_SC +#define YR_PMC_SAMPLE_SC 1 +#endif + +#ifndef YR_PMC_SAMPLE_MS +#define YR_PMC_SAMPLE_MS 1 +#endif + +/* + * Each hart owns two cache lines. This avoids false sharing when a future + * multi-hart reference slice uses the same format; active_harts=1 is the + * normal correctness-first configuration. + */ +struct yr_pmc_hart_record { + uint32_t magic; + uint32_t hart_id; + uint32_t minion_id; + uint32_t thread_id; + uint64_t hpm_start[YR_PMC_HPM_COUNT]; + uint64_t hpm_end[YR_PMC_HPM_COUNT]; + uint64_t reserved[2]; +}; + +/* + * sc_supported_mask and ms_supported_mask have one bit per flattened + * {bank/shire, counter} entry. A set bit means both the start and end syscall + * returned a value other than YR_PMC_ERROR_VALUE. The header flags say which + * families were requested at compile time. + */ +struct yr_pmc_aggregate_record { + uint32_t magic; + uint32_t shire_id; + uint32_t sc_supported_mask; + uint32_t ms_supported_mask; + uint64_t sc_start[YR_PMC_SC_BANKS][YR_PMC_COUNTERS_PER_BLOCK]; + uint64_t sc_end[YR_PMC_SC_BANKS][YR_PMC_COUNTERS_PER_BLOCK]; + uint64_t ms_start[YR_PMC_MS_COUNT][YR_PMC_COUNTERS_PER_BLOCK]; + uint64_t ms_end[YR_PMC_MS_COUNT][YR_PMC_COUNTERS_PER_BLOCK]; +}; + +/* + * The first 128 bytes are a versioned header. Keep the reserved bytes zero + * only as a future-format convention; the v1 decoder does not require them. + */ +struct yr_pmc_region { + uint32_t magic; + uint32_t version; + uint32_t region_bytes; + uint32_t active_harts; + uint32_t hpm_count; + uint32_t max_harts; + uint32_t flags; + uint32_t endian_marker; + uint64_t reserved[12]; + struct yr_pmc_hart_record harts[YR_PMC_MAX_HARTS]; + struct yr_pmc_aggregate_record aggregate; +}; + +_Static_assert(sizeof(struct yr_pmc_hart_record) == YR_PMC_HART_RECORD_BYTES, + "yr_pmc_hart_record binary size changed"); +_Static_assert(offsetof(struct yr_pmc_region, harts) == YR_PMC_HEADER_BYTES, + "yr_pmc_region header binary size changed"); +_Static_assert(offsetof(struct yr_pmc_region, aggregate) == + YR_PMC_AGGREGATE_OFFSET, + "yr_pmc_region aggregate offset changed"); +_Static_assert(sizeof(struct yr_pmc_region) == YR_PMC_REGION_BYTES, + "yr_pmc_region binary size changed"); + +#ifdef YR_PMC + +#include "erbium/isa/cacheops-umode.h" +#include "erbium/isa/hart.h" + +#if YR_PMC_SAMPLE_SC || YR_PMC_SAMPLE_MS +#include "erbium-soc1sim/isa/syscall.h" +#endif + +/* + * RTLMIN-6496 workaround: four back-to-back reads within one half-cacheline + * prevent the two minion threads from sampling a counter during its update. + */ +#define YR_PMC_SAFE_HPM_READ(counter, value) \ + do { \ + __asm__ __volatile__(".p2align 4\n" \ + "csrr %0," counter "\n" \ + "csrr %0," counter "\n" \ + "csrr %0," counter "\n" \ + "csrr %0," counter "\n" \ + : "=r"(value)); \ + } while (0) + +static inline uint64_t yr_pmc_read_hpm(uint32_t index) +{ + uint64_t value = 0; + + switch (index) { + case 0: YR_PMC_SAFE_HPM_READ("hpmcounter3", value); break; + case 1: YR_PMC_SAFE_HPM_READ("hpmcounter4", value); break; + case 2: YR_PMC_SAFE_HPM_READ("hpmcounter5", value); break; + case 3: YR_PMC_SAFE_HPM_READ("hpmcounter6", value); break; + case 4: YR_PMC_SAFE_HPM_READ("hpmcounter7", value); break; + case 5: YR_PMC_SAFE_HPM_READ("hpmcounter8", value); break; + default: break; + } + return value; +} + +#if YR_PMC_SAMPLE_SC +static inline uint32_t yr_pmc_sample_sc( + uint64_t (*destination)[YR_PMC_COUNTERS_PER_BLOCK]) +{ + const uint64_t shire_id = get_shire_id(); + uint32_t supported_mask = 0; + + for (uint32_t bank = 0; bank < YR_PMC_SC_BANKS; ++bank) { + for (uint32_t counter = 0; + counter < YR_PMC_COUNTERS_PER_BLOCK; ++counter) { + const uint32_t bit = + bank * YR_PMC_COUNTERS_PER_BLOCK + counter; + const uint64_t value = (uint64_t)syscall( + SYSCALL_PMC_SC_SAMPLE, shire_id, bank, counter); + destination[bank][counter] = value; + if (value != YR_PMC_ERROR_VALUE) + supported_mask |= 1u << bit; + } + } + return supported_mask; +} +#endif + +#if YR_PMC_SAMPLE_MS +static inline uint32_t yr_pmc_sample_ms( + uint64_t (*destination)[YR_PMC_COUNTERS_PER_BLOCK]) +{ + uint32_t supported_mask = 0; + + for (uint32_t memory_shire = 0; + memory_shire < YR_PMC_MS_COUNT; ++memory_shire) { + for (uint32_t counter = 0; + counter < YR_PMC_COUNTERS_PER_BLOCK; ++counter) { + const uint32_t bit = + memory_shire * YR_PMC_COUNTERS_PER_BLOCK + counter; + const uint64_t value = (uint64_t)syscall( + SYSCALL_PMC_MS_SAMPLE, memory_shire, counter, 0); + destination[memory_shire][counter] = value; + if (value != YR_PMC_ERROR_VALUE) + supported_mask |= 1u << bit; + } + } + return supported_mask; +} +#endif + +/* + * Take the start snapshot immediately before the selected slice. Shared + * counter syscalls happen before the HPM reads, so they are outside the + * per-hart HPM interval. + */ +static inline void yr_pmc_begin(void *region_base, uint32_t hart_id, + uint32_t active_harts) +{ + struct yr_pmc_region *const region = + (struct yr_pmc_region *)region_base; + struct yr_pmc_hart_record *hart; + + if (hart_id >= YR_PMC_MAX_HARTS) + return; + + hart = ®ion->harts[hart_id]; + hart->magic = YR_PMC_HART_MAGIC; + hart->hart_id = hart_id; + hart->minion_id = get_minion_id(); + hart->thread_id = get_thread_id(); + hart->reserved[0] = 0; + hart->reserved[1] = 0; + + if (hart_id == 0u) { + uint32_t flags = 0; + +#if YR_PMC_SAMPLE_SC + flags |= YR_PMC_FLAG_SC_REQUESTED; +#endif +#if YR_PMC_SAMPLE_MS + flags |= YR_PMC_FLAG_MS_REQUESTED; +#endif + region->magic = YR_PMC_REGION_MAGIC; + region->version = YR_PMC_FORMAT_VERSION; + region->region_bytes = (uint32_t)sizeof(*region); + region->active_harts = active_harts; + region->hpm_count = YR_PMC_HPM_COUNT; + region->max_harts = YR_PMC_MAX_HARTS; + region->flags = flags; + region->endian_marker = YR_PMC_ENDIAN_MARKER; + for (uint32_t index = 0; index < 12u; ++index) + region->reserved[index] = 0; + region->aggregate.magic = YR_PMC_AGGREGATE_MAGIC; + region->aggregate.shire_id = (uint32_t)get_shire_id(); + region->aggregate.sc_supported_mask = 0; + region->aggregate.ms_supported_mask = 0; + +#if YR_PMC_SAMPLE_SC + region->aggregate.sc_supported_mask = + yr_pmc_sample_sc(region->aggregate.sc_start); +#else + for (uint32_t bank = 0; bank < YR_PMC_SC_BANKS; ++bank) { + for (uint32_t counter = 0; + counter < YR_PMC_COUNTERS_PER_BLOCK; ++counter) { + region->aggregate.sc_start[bank][counter] = + YR_PMC_ERROR_VALUE; + region->aggregate.sc_end[bank][counter] = + YR_PMC_ERROR_VALUE; + } + } +#endif +#if YR_PMC_SAMPLE_MS + region->aggregate.ms_supported_mask = + yr_pmc_sample_ms(region->aggregate.ms_start); +#else + for (uint32_t memory_shire = 0; + memory_shire < YR_PMC_MS_COUNT; ++memory_shire) { + for (uint32_t counter = 0; + counter < YR_PMC_COUNTERS_PER_BLOCK; ++counter) { + region->aggregate.ms_start[memory_shire][counter] = + YR_PMC_ERROR_VALUE; + region->aggregate.ms_end[memory_shire][counter] = + YR_PMC_ERROR_VALUE; + } + } +#endif + } + + for (uint32_t index = 0; index < YR_PMC_HPM_COUNT; ++index) + hart->hpm_start[index] = yr_pmc_read_hpm(index); + + /* Do not let selected-slice memory operations move before the snapshot. */ + __asm__ __volatile__("" ::: "memory"); +} + +/* + * Take the end snapshot immediately after the selected slice. The compiler + * barrier keeps selected-slice memory operations before the HPM reads. Shared + * samples follow those reads and therefore do not inflate the HPM deltas. + */ +static inline void yr_pmc_end(void *region_base, uint32_t hart_id) +{ + struct yr_pmc_region *const region = + (struct yr_pmc_region *)region_base; + struct yr_pmc_hart_record *hart; + + if (hart_id >= YR_PMC_MAX_HARTS) + return; + + hart = ®ion->harts[hart_id]; + __asm__ __volatile__("" ::: "memory"); + for (uint32_t index = 0; index < YR_PMC_HPM_COUNT; ++index) + hart->hpm_end[index] = yr_pmc_read_hpm(index); + + if (hart_id == 0u) { +#if YR_PMC_SAMPLE_SC + region->aggregate.sc_supported_mask &= + yr_pmc_sample_sc(region->aggregate.sc_end); +#endif +#if YR_PMC_SAMPLE_MS + region->aggregate.ms_supported_mask &= + yr_pmc_sample_ms(region->aggregate.ms_end); +#endif + } + + /* Publish all counter stores before issuing cache maintenance. */ + __asm__ __volatile__("" ::: "memory"); + FENCE; + evict((const void *)hart, sizeof(*hart)); + if (hart_id == 0u) { + evict((const void *)region, YR_PMC_HEADER_BYTES); + evict((const void *)®ion->aggregate, + sizeof(region->aggregate)); + } + WAIT_CACHEOPS; + __asm__ __volatile__("" ::: "memory"); +} + +#else /* YR_PMC */ + +static inline void yr_pmc_begin(void *region_base, uint32_t hart_id, + uint32_t active_harts) +{ + (void)region_base; + (void)hart_id; + (void)active_harts; +} + +static inline void yr_pmc_end(void *region_base, uint32_t hart_id) +{ + (void)region_base; + (void)hart_id; +} + +#endif /* YR_PMC */ + +#endif /* YR_REF_PMC_H */ diff --git a/ported_models/yolov10n_hf_reference/src/ref_runtime.c b/ported_models/yolov10n_hf_reference/src/ref_runtime.c new file mode 100644 index 00000000..b586fe4d --- /dev/null +++ b/ported_models/yolov10n_hf_reference/src/ref_runtime.c @@ -0,0 +1,4417 @@ +/* + * Portable scalar FP32 ONNX slice runtime. + * + * This file intentionally contains no VPU/TFMA paths, fusions, tiling, + * threading, allocation, or libc calls. Each ONNX node remains a separately + * materialized tensor so intermediate comparisons stay visible. + */ + +#include + +#include "ref_runtime.h" +/* + * The script builds put the generated manifest on the include path with -I, one + * directory per slice. The single-translation-unit CI build cannot rely on the + * working directory, so it includes the pinned full-graph manifest by relative + * path first and defines this macro; the header it picks is the same file. + */ +#ifndef YR_SLICE_MANIFEST_PREINCLUDED +#include "slice_manifest.h" +#endif + +#ifndef YR_MANIFEST_VERSION +#define YR_MANIFEST_VERSION 1u +#endif + +/* + * Build switch for the dedicated 1x1 stride-1 Conv path in yr_conv, on by + * default. Set to 0 to route 1x1 convolutions through the general path + * instead, which is how its board speedup is isolated from other changes. + * The two paths produce bit-identical output, so this only affects speed. + */ +#ifndef YR_CONV_1X1_FAST +#define YR_CONV_1X1_FAST 1 +#endif + +/* + * Packed vector version of the 1x1 path, ET target only. Runs the same + * per-pixel matrix-vector product eight flat positions at a time on the vector + * unit instead of one at a time in scalar, across all sixteen harts. The fused + * multiply-add rounds differently from the scalar mul then add, so a build with + * this validates by tolerance rather than the workspace hash. + */ +#ifndef YR_CONV_1X1_VPU +#define YR_CONV_1X1_VPU 1 +#endif + +static uint8_t *yr_tensor_raw( + uint8_t *base, const struct yr_tensor_desc *tensor) +{ + uintptr_t address; + if (tensor->storage == YR_STORAGE_INPUT) { + address = (uintptr_t)base + YR_INPUT_DEVICE_OFFSET + tensor->offset; + } else if (tensor->storage == YR_STORAGE_WEIGHTS) { + address = (uintptr_t)base + YR_WEIGHT_DEVICE_OFFSET + tensor->offset; + } else if (tensor->storage == YR_STORAGE_WORKSPACE) { + address = (uintptr_t)base + YR_RESULT_DEVICE_OFFSET + + YR_RESULT_HEADER_BYTES + tensor->offset; + } else { + return (uint8_t *)0; + } + return (uint8_t *)address; +} + + +static float *yr_tensor_ptr(uint8_t *base, const struct yr_tensor_desc *tensor) +{ + return (float *)yr_tensor_raw(base, tensor); +} + + +static uint32_t yr_tensor_dtype( + const struct yr_tensor_desc *tensor) +{ +#if YR_MANIFEST_VERSION >= 2 + return tensor->dtype; +#else + (void)tensor; + return 1u; /* YR_DTYPE_FLOAT in manifest v2. */ +#endif +} + + +static uint32_t yr_dtype_bytes(uint32_t dtype) +{ + if (dtype == 1u) { + return 4u; + } +#if YR_MANIFEST_VERSION >= 2 + if (dtype == YR_DTYPE_INT64) { + return 8u; + } +#endif + return 0u; +} + + +static uint32_t yr_range_valid( + uint64_t offset, uint64_t bytes, uint64_t limit) +{ + return bytes <= limit && offset <= limit - bytes; +} + + +static uint32_t yr_memory_map_valid(void) +{ + return YR_RESULT_HEADER_BYTES >= sizeof(struct yr_result_header) + && yr_range_valid( + YR_RESULT_DEVICE_OFFSET, + (uint64_t)YR_RESULT_HEADER_BYTES + + (uint64_t)YR_WORKSPACE_BYTES, + YR_MEM_SIZE) + && yr_range_valid( + YR_INPUT_DEVICE_OFFSET, YR_INPUT_BLOB_BYTES, YR_MEM_SIZE) + && yr_range_valid( + YR_WEIGHT_DEVICE_OFFSET, YR_WEIGHT_BLOB_BYTES, YR_MEM_SIZE); +} + + +static uint32_t yr_manifest_valid(void) +{ + uint32_t tensor_index; + if (!yr_memory_map_valid()) { + return 0u; + } + for (tensor_index = 0u; tensor_index < YR_TENSOR_COUNT; ++tensor_index) { + const struct yr_tensor_desc *tensor = &yr_tensors[tensor_index]; + uint64_t elements = 1u; + uint32_t dimension; + uint32_t limit; + const uint32_t element_bytes = + yr_dtype_bytes(yr_tensor_dtype(tensor)); + if (tensor->rank > 6u + || element_bytes == 0u + || tensor->elements > UINT32_MAX / element_bytes + || tensor->nbytes != tensor->elements * element_bytes + || tensor->offset % element_bytes != 0u) { + return 0u; + } + for (dimension = 0u; dimension < tensor->rank; ++dimension) { + elements *= tensor->dims[dimension]; + if (elements > UINT32_MAX) { + return 0u; + } + } + if (elements != tensor->elements) { + return 0u; + } + if (tensor->storage == YR_STORAGE_INPUT) { + limit = YR_INPUT_BLOB_BYTES; + } else if (tensor->storage == YR_STORAGE_WEIGHTS) { + limit = YR_WEIGHT_BLOB_BYTES; + } else if (tensor->storage == YR_STORAGE_WORKSPACE) { + limit = YR_WORKSPACE_BYTES; + } else { + return 0u; + } + if (!yr_range_valid(tensor->offset, tensor->nbytes, limit)) { + return 0u; + } + } + return 1u; +} + + +static uint32_t yr_same_shape( + const struct yr_tensor_desc *left, + const struct yr_tensor_desc *right) +{ + uint32_t dimension; + if (left->rank != right->rank) { + return 0u; + } + for (dimension = 0u; dimension < left->rank; ++dimension) { + if (left->dims[dimension] != right->dims[dimension]) { + return 0u; + } + } + return 1u; +} + + +#if YR_MANIFEST_VERSION >= 2 +static int32_t yr_normalize_axis(int32_t axis, uint32_t rank) +{ + if (axis < 0) { + axis += (int32_t)rank; + } + if (axis < 0 || axis >= (int32_t)rank) { + return -1; + } + return axis; +} + + +static uint32_t yr_shape_product( + const struct yr_tensor_desc *tensor, + uint32_t first, + uint32_t last, + uint32_t *product) +{ + uint64_t value = 1u; + uint32_t dimension; + if (first > last || last > tensor->rank) { + return 0u; + } + for (dimension = first; dimension < last; ++dimension) { + value *= tensor->dims[dimension]; + if (value > UINT32_MAX) { + return 0u; + } + } + *product = (uint32_t)value; + return 1u; +} + + +static uint32_t yr_broadcast_index( + const struct yr_tensor_desc *input, + const struct yr_tensor_desc *output, + uint32_t output_index, + uint32_t *input_index) +{ + uint32_t coordinate[6] = {0u, 0u, 0u, 0u, 0u, 0u}; + uint32_t dimension; + uint32_t remaining = output_index; + uint32_t result = 0u; + uint32_t stride = 1u; + + if (input->rank > output->rank) { + return 0u; + } + for (dimension = output->rank; dimension > 0u; --dimension) { + const uint32_t dim = output->dims[dimension - 1u]; + if (dim == 0u) { + return 0u; + } + coordinate[dimension - 1u] = remaining % dim; + remaining /= dim; + } + for (dimension = input->rank; dimension > 0u; --dimension) { + const uint32_t input_dim = input->dims[dimension - 1u]; + const uint32_t output_dimension = + output->rank - input->rank + dimension - 1u; + const uint32_t output_dim = output->dims[output_dimension]; + uint32_t selected; + if (input_dim != 1u && input_dim != output_dim) { + return 0u; + } + selected = input_dim == 1u ? 0u : coordinate[output_dimension]; + result += selected * stride; + stride *= input_dim; + } + *input_index = result; + return 1u; +} +#endif + + +static float yr_recip_positive(float value) +{ + /* + * Positive-normal reciprocal seed followed by four Newton steps. This + * avoids the ET U-mode fdiv hardware erratum while converging to FP32 + * precision for the sigmoid denominator (which is always in [1, 2]). + */ + union { + float f; + uint32_t u; + } seed; + float result; + seed.f = value; + seed.u = 0x7ef311c3u - seed.u; + result = seed.f; + result = result * (2.0f - value * result); + result = result * (2.0f - value * result); + result = result * (2.0f - value * result); + result = result * (2.0f - value * result); + return result; +} + + +static float yr_expf(float value) +{ + /* + * Range reduce to r in approximately [-ln(2)/2, ln(2)/2], evaluate an + * eighth-order Taylor polynomial there, then form 2^k exactly. Sigmoid + * calls this only with a non-positive argument, so overflow is impossible. + */ + const float ln2 = 0.69314718055994530942f; + const float inv_ln2 = 1.4426950408889634074f; + int32_t exponent; + float reduced; + float polynomial; + union { + uint32_t u; + float f; + } scale; + + if (value <= -87.0f) { + return 0.0f; + } + if (value >= 0.0f) { + /* This path is included for direct testing; sigmoid passes <= 0. */ + if (value >= 88.0f) { + value = 88.0f; + } + } + exponent = (int32_t)(value * inv_ln2 + + (value >= 0.0f ? 0.5f : -0.5f)); + reduced = value - (float)exponent * ln2; + + polynomial = 1.0f / 40320.0f; + polynomial = polynomial * reduced + 1.0f / 5040.0f; + polynomial = polynomial * reduced + 1.0f / 720.0f; + polynomial = polynomial * reduced + 1.0f / 120.0f; + polynomial = polynomial * reduced + 1.0f / 24.0f; + polynomial = polynomial * reduced + 1.0f / 6.0f; + polynomial = polynomial * reduced + 0.5f; + polynomial = polynomial * reduced + 1.0f; + polynomial = polynomial * reduced + 1.0f; + + if (exponent < -126) { + return 0.0f; + } + if (exponent > 127) { + scale.u = 0x7f7fffffu; + return scale.f; + } + scale.u = (uint32_t)(exponent + 127) << 23; + return polynomial * scale.f; +} + + +static float yr_sigmoid_scalar(float value) +{ + float exponential; + if (value != value) { + return value; + } + if (value >= 0.0f) { + exponential = yr_expf(-value); + return yr_recip_positive(1.0f + exponential); + } + exponential = yr_expf(value); + return exponential * yr_recip_positive(1.0f + exponential); +} + + +/* + * Integer division helpers with the rounding direction stated explicitly. + * C truncates toward zero, which is the wrong direction for the negative + * numerators produced by padded convolution windows. + */ +static int64_t yr_ceil_div(int64_t numerator, int64_t denominator) +{ + if (numerator >= 0) { + return (numerator + denominator - 1) / denominator; + } + return -((-numerator) / denominator); +} + + +static int64_t yr_floor_div(int64_t numerator, int64_t denominator) +{ + if (numerator >= 0) { + return numerator / denominator; + } + return -(((-numerator) + denominator - 1) / denominator); +} + + +/* + * Clamp a kernel axis to the taps whose input coordinate lands inside the + * tensor, where the coordinate is base plus tap times dilation. Returns the + * number of valid taps and writes the first one to *first_tap. Because + * dilation is positive the valid set is contiguous, so the bounds test leaves + * the accumulation loop entirely. + */ +static uint32_t yr_tap_range( + int64_t base, int64_t dilation, int64_t extent, int64_t taps, + uint32_t *first_tap) +{ + int64_t lo = yr_ceil_div(-base, dilation); + int64_t hi = yr_floor_div(extent - 1 - base, dilation); + if (lo < 0) { + lo = 0; + } + if (hi > taps - 1) { + hi = taps - 1; + } + if (hi < lo) { + *first_tap = 0u; + return 0u; + } + *first_tap = (uint32_t)lo; + return (uint32_t)(hi - lo + 1); +} + + +/* + * Split [0, count) into yr_hart_count() near-equal pieces, remainder going to + * the lowest-indexed harts, and return the piece owned by yr_hart_id(). With + * a single hart this is [0, count), so single-hart callers are unaffected. + */ +static void yr_hart_range(uint32_t count, uint32_t *lo, uint32_t *hi) +{ + const uint32_t harts = yr_hart_count(); + const uint32_t id = yr_hart_id(); + *lo = (count * id) / harts; + *hi = (count * (id + 1u)) / harts; +} + + +/* + * Same split as yr_hart_range but over a flat element count, with every + * boundary snapped to a 64-byte cache line (16 floats). Elementwise ops use + * this so each hart writes and evicts a range that shares no cache line with + * any other hart's range; L1 is minion local and not coherent, so two harts + * touching one line is exactly the corruption this avoids. The final range + * clamps to count so a tail shorter than a line is written by one hart only. + */ +#define YR_CACHE_LINE_FLOATS 16u +static void yr_hart_elem_range(uint32_t count, uint32_t *lo, uint32_t *hi) +{ + const uint32_t harts = yr_hart_count(); + const uint32_t id = yr_hart_id(); + const uint32_t lines = + (count + YR_CACHE_LINE_FLOATS - 1u) / YR_CACHE_LINE_FLOATS; + uint32_t lo_line = (lines * id) / harts; + uint32_t hi_line = (lines * (id + 1u)) / harts; + *lo = lo_line * YR_CACHE_LINE_FLOATS; + *hi = hi_line * YR_CACHE_LINE_FLOATS; + if (*lo > count) { + *lo = count; + } + if (*hi > count) { + *hi = count; + } +} + + +/* + * Build switch for the dedicated 3x3 stride-1 same-padding Conv path, off by + * default. On the board this path measured about 1.5s slower than the general + * path over the full graph, so it stays off; set to 1 to route those + * convolutions through it. The two produce bit-identical output, so this only + * affects speed. + */ +#ifndef YR_CONV_3X3_FAST +#define YR_CONV_3X3_FAST 0 +#endif + +/* + * Packed vector version of the 3x3 stride-1 same-pad path, ET target only. The + * interior columns, whose whole 3x3 neighbourhood is in bounds, run eight + * output positions at a time on the vector unit across all sixteen harts; the + * border columns and rows stay on the scalar per-pixel helper. Fused + * multiply-add rounds differently from the scalar path, so a build with this + * validates by tolerance. + */ +#ifndef YR_CONV_3X3_VPU +#define YR_CONV_3X3_VPU 0 +#endif + + +/* + * Packed vector version of the 3x3 stride-1 same-pad DEPTHWISE path (group == + * channels, one input channel per output channel), ET target only. Depthwise is + * the only conv class the graph never specialised, the general grouped path + * cannot pair two output channels because outputs_per_group is 1, so every + * depthwise channel runs pure scalar single-oc. These convs are only 0.7 percent + * of the graph's multiply-accumulates but about 11 percent of its conv memory + * traffic, and this graph is memory bound. Each channel is independent with no + * input-channel reduction, so the interior eight-wide vector loop is the same as + * yr_conv3x3_vpu with the icg loop removed and the input plane indexed by the + * output channel. Fused multiply-add rounds differently from the scalar path, so + * a build with this validates by tolerance. + */ +#ifndef YR_CONV_DW3X3_VPU +#define YR_CONV_DW3X3_VPU 1 +#endif + + +/* + * One output pixel of a 3x3 stride-1 pad-1 dilation-1 ungrouped Conv, for a + * single output channel whose 3x3-per-input-channel weights start at w_oc. + * Used only for the border pixels of yr_conv3x3_s1, where some taps fall + * outside the input. It resolves the valid tap window with the same + * yr_tap_range the general path uses and accumulates in the same + * (input channel, ky, kx) order starting from the bias, so its result is + * bit-identical to what the general Conv loop would produce for that pixel. + */ +static float yr_conv3x3_pixel( + const float *input, const float *w_oc, float bias_value, + uint32_t input_channels, uint32_t input_h, uint32_t input_w, + int32_t oh, int32_t ow) +{ + const uint32_t channel_stride = input_h * input_w; + const int64_t base_h = (int64_t)oh - 1; + const int64_t base_w = (int64_t)ow - 1; + uint32_t first_ky, first_kx; + const uint32_t ky_count = + yr_tap_range(base_h, 1, (int64_t)input_h, 3, &first_ky); + const uint32_t kx_count = + yr_tap_range(base_w, 1, (int64_t)input_w, 3, &first_kx); + float accumulator = bias_value; + uint32_t icg, ky, kx; + if (ky_count == 0u || kx_count == 0u) { + return accumulator; + } + for (icg = 0; icg < input_channels; ++icg) { + const float *row = input + (uint64_t)icg * channel_stride + + (uint64_t)(base_h + (int64_t)first_ky) * input_w + + (base_w + (int64_t)first_kx); + const float *coefficient_row = + w_oc + (uint64_t)icg * 9u + (uint64_t)first_ky * 3u + first_kx; + for (ky = 0; ky < ky_count; ++ky) { + const float *value = row; + const float *coefficient = coefficient_row; + for (kx = 0; kx < kx_count; ++kx) { + accumulator += *value * *coefficient; + value += 1; + coefficient += 1; + } + row += input_w; + coefficient_row += 3u; + } + } + return accumulator; +} + + +/* + * Dedicated 3x3 stride-1 same-padding ungrouped Conv, 53.3 percent of this + * graph's multiply-accumulates and its single largest arithmetic cost. The + * general path handles it correctly but pays for a runtime-count kernel loop + * on every output pixel; here the kernel is fixed at 3x3 so the nine taps + * unroll to straight-line code the compiler can pipeline. Interior pixels + * (every tap in bounds, the overwhelming majority) take the unrolled path, + * two output channels and four output columns at a time to match the general + * path's register use and reuse each input load. The one-pixel border strip + * defers to yr_conv3x3_pixel. Every accumulator sums over input channel then + * ky then kx starting from the bias, the exact order the general loop uses, + * so the output is bit-identical. + */ +static uint32_t yr_conv3x3_s1( + uint32_t batches, uint32_t input_channels, uint32_t output_channels, + uint32_t input_h, uint32_t input_w, + const float *input, const float *weight, const float *bias, float *output) +{ + const uint32_t hw = input_h * input_w; + const uint32_t weight_oc_stride = input_channels * 9u; + uint32_t oc_lo, oc_hi, n, oc, icg; + int32_t oh, ow; + yr_hart_range(output_channels, &oc_lo, &oc_hi); + for (n = 0; n < batches; ++n) { + const float *const batch_input = + input + (uint64_t)n * input_channels * hw; + float *const batch_output = + output + (uint64_t)n * output_channels * hw; + oc = oc_lo; + while (oc + 1u < oc_hi) { + const float *const weight_a = weight + (uint64_t)oc * weight_oc_stride; + const float *const weight_b = weight_a + weight_oc_stride; + const float bias_a = bias == (const float *)0 ? 0.0f : bias[oc]; + const float bias_b = + bias == (const float *)0 ? 0.0f : bias[oc + 1u]; + float *const out_a = batch_output + (uint64_t)oc * hw; + float *const out_b = out_a + hw; + for (oh = 0; oh < (int32_t)input_h; ++oh) { + if (oh >= 1 && oh <= (int32_t)input_h - 2) { + float *const row_a = out_a + (uint64_t)oh * input_w; + float *const row_b = out_b + (uint64_t)oh * input_w; + row_a[0] = yr_conv3x3_pixel( + batch_input, weight_a, bias_a, input_channels, + input_h, input_w, oh, 0); + row_b[0] = yr_conv3x3_pixel( + batch_input, weight_b, bias_b, input_channels, + input_h, input_w, oh, 0); + ow = 1; + while (ow + 3 <= (int32_t)input_w - 2) { + float a0 = bias_a, a1 = bias_a, a2 = bias_a, a3 = bias_a; + float b0 = bias_b, b1 = bias_b, b2 = bias_b, b3 = bias_b; + for (icg = 0; icg < input_channels; ++icg) { + const float *const wa = weight_a + (uint64_t)icg * 9u; + const float *const wb = weight_b + (uint64_t)icg * 9u; + const float *top_left = batch_input + + (uint64_t)icg * hw + + (uint64_t)(oh - 1) * input_w + (ow - 1); + uint32_t ky, kx; + for (ky = 0u; ky < 3u; ++ky) { + const float *const pr = top_left + + (uint64_t)ky * input_w; + for (kx = 0u; kx < 3u; ++kx) { + const float wav = wa[ky * 3u + kx]; + const float wbv = wb[ky * 3u + kx]; + const float v0 = pr[kx]; + const float v1 = pr[kx + 1u]; + const float v2 = pr[kx + 2u]; + const float v3 = pr[kx + 3u]; + a0 += wav * v0; a1 += wav * v1; + a2 += wav * v2; a3 += wav * v3; + b0 += wbv * v0; b1 += wbv * v1; + b2 += wbv * v2; b3 += wbv * v3; + } + } + } + row_a[ow] = a0; row_a[ow + 1] = a1; + row_a[ow + 2] = a2; row_a[ow + 3] = a3; + row_b[ow] = b0; row_b[ow + 1] = b1; + row_b[ow + 2] = b2; row_b[ow + 3] = b3; + ow += 4; + } + for (; ow <= (int32_t)input_w - 2; ++ow) { + row_a[ow] = yr_conv3x3_pixel( + batch_input, weight_a, bias_a, input_channels, + input_h, input_w, oh, ow); + row_b[ow] = yr_conv3x3_pixel( + batch_input, weight_b, bias_b, input_channels, + input_h, input_w, oh, ow); + } + row_a[input_w - 1u] = yr_conv3x3_pixel( + batch_input, weight_a, bias_a, input_channels, + input_h, input_w, oh, (int32_t)input_w - 1); + row_b[input_w - 1u] = yr_conv3x3_pixel( + batch_input, weight_b, bias_b, input_channels, + input_h, input_w, oh, (int32_t)input_w - 1); + } else { + for (ow = 0; ow < (int32_t)input_w; ++ow) { + out_a[(uint64_t)oh * input_w + ow] = yr_conv3x3_pixel( + batch_input, weight_a, bias_a, input_channels, + input_h, input_w, oh, ow); + out_b[(uint64_t)oh * input_w + ow] = yr_conv3x3_pixel( + batch_input, weight_b, bias_b, input_channels, + input_h, input_w, oh, ow); + } + } + } + oc += 2u; + } + for (; oc < oc_hi; ++oc) { + const float *const weight_oc = + weight + (uint64_t)oc * weight_oc_stride; + const float bias_value = bias == (const float *)0 ? 0.0f : bias[oc]; + float *const out_oc = batch_output + (uint64_t)oc * hw; + for (oh = 0; oh < (int32_t)input_h; ++oh) { + for (ow = 0; ow < (int32_t)input_w; ++ow) { + out_oc[(uint64_t)oh * input_w + ow] = yr_conv3x3_pixel( + batch_input, weight_oc, bias_value, input_channels, + input_h, input_w, oh, ow); + } + } + } + } + return YR_STATUS_OK; +} + + +#if YR_CONV_3X3_VPU && defined(__riscv) +/* + * Packed eight-wide 3x3 stride-1 same-pad conv. One output channel at a time so + * every channel count maps cleanly across harts, the interior columns whose + * whole neighbourhood is in bounds run eight positions at a time on the vector + * unit, and the first and last column of each interior row plus the top and + * bottom rows fall back to the scalar per-pixel helper. Accumulates over input + * channel then ky then kx from the bias, the same order the scalar path uses. + */ +static uint32_t yr_conv3x3_vpu( + uint32_t batches, uint32_t input_channels, uint32_t output_channels, + uint32_t input_h, uint32_t input_w, + const float *input, const float *weight, const float *bias, float *output) +{ + const uint32_t hw = input_h * input_w; + const uint32_t weight_oc_stride = input_channels * 9u; + uint32_t oc_lo, oc_hi, n, oc, icg; + int32_t oh, ow; + yr_hart_range(output_channels, &oc_lo, &oc_hi); + for (n = 0; n < batches; ++n) { + const float *const batch_input = + input + (uint64_t)n * input_channels * hw; + float *const batch_output = + output + (uint64_t)n * output_channels * hw; + for (oc = oc_lo; oc < oc_hi; ++oc) { + const float *const weight_oc = + weight + (uint64_t)oc * weight_oc_stride; + const float bias_value = bias == (const float *)0 ? 0.0f : bias[oc]; + union { float f; uint32_t u; } bo = { bias_value }; + float *const out_oc = batch_output + (uint64_t)oc * hw; + for (oh = 0; oh < (int32_t)input_h; ++oh) { + if (oh >= 1 && oh <= (int32_t)input_h - 2) { + float *const row = out_oc + (uint64_t)oh * input_w; + row[0] = yr_conv3x3_pixel(batch_input, weight_oc, bias_value, + input_channels, input_h, input_w, oh, 0); + ow = 1; + while (ow + 8 <= (int32_t)input_w - 1) { + float acc; + __asm__ volatile("fbcx.ps %0, %1\n" : "=f"(acc) + : "r"((uint64_t)bo.u)); + for (icg = 0; icg < input_channels; ++icg) { + const float *const wc = weight_oc + (uint64_t)icg * 9u; + const float *const top_left = batch_input + + (uint64_t)icg * hw + + (uint64_t)(oh - 1) * input_w + (ow - 1); + uint32_t ky, kx; + for (ky = 0u; ky < 3u; ++ky) { + const float *const pr = top_left + + (uint64_t)ky * input_w; + for (kx = 0u; kx < 3u; ++kx) { + union { float f; uint32_t u; } cw = + { wc[ky * 3u + kx] }; + float iv, wv; + __asm__ volatile("flq2 %0, 0(%1)\n" + : "=f"(iv) : "r"(pr + kx)); + __asm__ volatile("fbcx.ps %0, %1\n" + : "=f"(wv) : "r"((uint64_t)cw.u)); + __asm__ volatile("fmadd.ps %0, %1, %2, %0\n" + : "+f"(acc) : "f"(iv), "f"(wv)); + } + } + } + __asm__ volatile("fsq2 %1, 0(%0)\n" :: "r"(row + ow), + "f"(acc) : "memory"); + ow += 8; + } + for (; ow <= (int32_t)input_w - 2; ++ow) { + row[ow] = yr_conv3x3_pixel(batch_input, weight_oc, + bias_value, input_channels, input_h, input_w, oh, ow); + } + row[input_w - 1u] = yr_conv3x3_pixel(batch_input, weight_oc, + bias_value, input_channels, input_h, input_w, oh, + (int32_t)input_w - 1); + } else { + for (ow = 0; ow < (int32_t)input_w; ++ow) { + out_oc[(uint64_t)oh * input_w + ow] = yr_conv3x3_pixel( + batch_input, weight_oc, bias_value, input_channels, + input_h, input_w, oh, ow); + } + } + } + } + } + return YR_STATUS_OK; +} +#endif + + +#if YR_CONV_DW3X3_VPU && defined(__riscv) +/* + * One output pixel of a 3x3 stride-1 pad-1 dilation-1 depthwise Conv, for a + * single channel whose nine weights start at w9 and whose input plane starts at + * chan. Used only for the border pixels of yr_conv_dw3x3_s1_vpu, where some taps + * fall outside the input. Skips out-of-range taps and accumulates in (ky, kx) + * order from the bias, matching the general depthwise loop for that pixel. + */ +static float yr_dw3x3_pixel( + const float *chan, const float *w9, float bias_value, + uint32_t input_h, uint32_t input_w, int32_t oh, int32_t ow) +{ + float acc = bias_value; + int32_t ky; + for (ky = 0; ky < 3; ++ky) { + const int32_t ih = oh + ky - 1; + int32_t kx; + if (ih < 0 || ih >= (int32_t)input_h) { + continue; + } + for (kx = 0; kx < 3; ++kx) { + const int32_t iw = ow + kx - 1; + if (iw < 0 || iw >= (int32_t)input_w) { + continue; + } + acc += w9[ky * 3 + kx] + * chan[(uint64_t)ih * input_w + iw]; + } + } + return acc; +} + +/* + * Packed eight-wide 3x3 stride-1 same-pad depthwise conv. One channel at a time + * so the channel count maps cleanly across harts; the interior columns whose + * whole 3x3 neighbourhood is in bounds run eight positions at a time on the + * vector unit, and the first and last column of each interior row plus the top + * and bottom rows fall back to the scalar per-pixel helper. Each channel reads + * only its own input plane (no input-channel reduction) and accumulates over ky + * then kx from the bias, the same order the scalar path uses. + */ +static uint32_t yr_conv_dw3x3_s1_vpu( + uint32_t batches, uint32_t channels, uint32_t input_h, uint32_t input_w, + const float *input, const float *weight, const float *bias, float *output) +{ + const uint32_t hw = input_h * input_w; + uint32_t c_lo, c_hi, n, c; + int32_t oh, ow; + yr_hart_range(channels, &c_lo, &c_hi); + for (n = 0; n < batches; ++n) { + const float *const batch_input = + input + (uint64_t)n * channels * hw; + float *const batch_output = + output + (uint64_t)n * channels * hw; + for (c = c_lo; c < c_hi; ++c) { + const float *const chan = batch_input + (uint64_t)c * hw; + const float *const w9 = weight + (uint64_t)c * 9u; + const float bias_value = bias == (const float *)0 ? 0.0f : bias[c]; + union { float f; uint32_t u; } bo = { bias_value }; + float *const out_c = batch_output + (uint64_t)c * hw; + for (oh = 0; oh < (int32_t)input_h; ++oh) { + if (oh >= 1 && oh <= (int32_t)input_h - 2) { + float *const row = out_c + (uint64_t)oh * input_w; + row[0] = yr_dw3x3_pixel(chan, w9, bias_value, + input_h, input_w, oh, 0); + ow = 1; + while (ow + 8 <= (int32_t)input_w - 1) { + float acc; + const float *const top_left = chan + + (uint64_t)(oh - 1) * input_w + (ow - 1); + uint32_t ky, kx; + __asm__ volatile("fbcx.ps %0, %1\n" : "=f"(acc) + : "r"((uint64_t)bo.u)); + for (ky = 0u; ky < 3u; ++ky) { + const float *const pr = top_left + + (uint64_t)ky * input_w; + for (kx = 0u; kx < 3u; ++kx) { + union { float f; uint32_t u; } cw = + { w9[ky * 3u + kx] }; + float iv, wv; + __asm__ volatile("flq2 %0, 0(%1)\n" + : "=f"(iv) : "r"(pr + kx)); + __asm__ volatile("fbcx.ps %0, %1\n" + : "=f"(wv) : "r"((uint64_t)cw.u)); + __asm__ volatile("fmadd.ps %0, %1, %2, %0\n" + : "+f"(acc) : "f"(iv), "f"(wv)); + } + } + __asm__ volatile("fsq2 %1, 0(%0)\n" :: "r"(row + ow), + "f"(acc) : "memory"); + ow += 8; + } + for (; ow <= (int32_t)input_w - 2; ++ow) { + row[ow] = yr_dw3x3_pixel(chan, w9, bias_value, + input_h, input_w, oh, ow); + } + row[input_w - 1u] = yr_dw3x3_pixel(chan, w9, bias_value, + input_h, input_w, oh, (int32_t)input_w - 1); + } else { + for (ow = 0; ow < (int32_t)input_w; ++ow) { + out_c[(uint64_t)oh * input_w + ow] = yr_dw3x3_pixel( + chan, w9, bias_value, input_h, input_w, oh, ow); + } + } + } + } + } + return YR_STATUS_OK; +} +#endif + + +/* + * Build switch for the dedicated 3x3 stride-2 Conv path, off by default. On the + * board this path measured slightly slower than the general path over the full + * graph (about 0.8s), so it stays off; set to 1 to route those convolutions + * through it. The two produce bit-identical output, so this only affects speed. + */ +#ifndef YR_CONV_3X3_S2_FAST +#define YR_CONV_3X3_S2_FAST 0 +#endif + + +/* + * One output pixel of a 3x3 stride-s pad dilation-1 ungrouped Conv, for a + * single output channel whose 3x3-per-input-channel weights start at w_oc. + * Used only for the border columns of yr_conv3x3_s2, where some taps fall + * outside the input. It resolves the valid tap window with the same + * yr_tap_range the general path uses and accumulates in the same + * (input channel, ky, kx) order starting from the bias, so its result is + * bit-identical to what the general Conv loop would produce for that pixel. + */ +static float yr_conv3x3_s2_pixel( + const float *input, const float *w_oc, float bias_value, + uint32_t input_channels, uint32_t input_h, uint32_t input_w, + int32_t oh, int32_t ow, uint32_t stride, + uint32_t pad_top, uint32_t pad_left) +{ + const uint32_t channel_stride = input_h * input_w; + const int64_t base_h = (int64_t)oh * (int64_t)stride - (int64_t)pad_top; + const int64_t base_w = (int64_t)ow * (int64_t)stride - (int64_t)pad_left; + uint32_t first_ky, first_kx; + const uint32_t ky_count = + yr_tap_range(base_h, 1, (int64_t)input_h, 3, &first_ky); + const uint32_t kx_count = + yr_tap_range(base_w, 1, (int64_t)input_w, 3, &first_kx); + float accumulator = bias_value; + uint32_t icg, ky, kx; + if (ky_count == 0u || kx_count == 0u) { + return accumulator; + } + for (icg = 0; icg < input_channels; ++icg) { + const float *row = input + (uint64_t)icg * channel_stride + + (uint64_t)(base_h + (int64_t)first_ky) * input_w + + (base_w + (int64_t)first_kx); + const float *coefficient_row = + w_oc + (uint64_t)icg * 9u + (uint64_t)first_ky * 3u + first_kx; + for (ky = 0; ky < ky_count; ++ky) { + const float *value = row; + const float *coefficient = coefficient_row; + for (kx = 0; kx < kx_count; ++kx) { + accumulator += *value * *coefficient; + value += 1; + coefficient += 1; + } + row += input_w; + coefficient_row += 3u; + } + } + return accumulator; +} + + +/* + * Dedicated 3x3 stride-2 dilation-1 ungrouped Conv, 10.1 percent of this + * graph's multiply-accumulates (the downsampling convolutions). The general + * path already blocks this shape four output columns and two output channels + * at a time; this path keeps that blocking but fixes the kernel at 3x3 with + * unit dilation, so the tap loops fold to constants the compiler can pipeline + * instead of the general path's runtime kernel width and dilation. Column + * borders defer to yr_conv3x3_s2_pixel; top and bottom border rows fall out of + * yr_tap_range's row count inline, exactly as the general path does. Every + * accumulator sums over input channel then ky then kx starting from the bias, + * the same order the general loop uses, so the output is bit-identical. + */ +static uint32_t yr_conv3x3_s2( + uint32_t batches, uint32_t input_channels, uint32_t output_channels, + uint32_t input_h, uint32_t input_w, uint32_t output_h, uint32_t output_w, + uint32_t pad_top, uint32_t pad_left, + uint32_t interior_first, uint32_t interior_end, + const float *input, const float *weight, const float *bias, float *output) +{ + const uint32_t stride = 2u; + const uint32_t channel_stride = input_h * input_w; + const uint32_t plane_stride = output_h * output_w; + const uint32_t weight_oc_stride = input_channels * 9u; + const int32_t column_step = (int32_t)stride; + const int32_t column_step2 = column_step * 2; + const int32_t column_step3 = column_step * 3; + uint32_t oc_lo, oc_hi, n, oc, icg, ky; + int32_t oh, ow; + yr_hart_range(output_channels, &oc_lo, &oc_hi); + for (n = 0; n < batches; ++n) { + const float *const batch_input = + input + (uint64_t)n * input_channels * channel_stride; + float *const batch_output = + output + (uint64_t)n * output_channels * plane_stride; + oc = oc_lo; + while (oc + 1u < oc_hi) { + const float *const weight_a = + weight + (uint64_t)oc * weight_oc_stride; + const float *const weight_b = weight_a + weight_oc_stride; + const float bias_a = bias == (const float *)0 ? 0.0f : bias[oc]; + const float bias_b = + bias == (const float *)0 ? 0.0f : bias[oc + 1u]; + float *const out_a = batch_output + (uint64_t)oc * plane_stride; + float *const out_b = out_a + plane_stride; + for (oh = 0; oh < (int32_t)output_h; ++oh) { + const int64_t base_h = + (int64_t)oh * (int64_t)stride - (int64_t)pad_top; + uint32_t first_ky; + const uint32_t ky_count = + yr_tap_range(base_h, 1, (int64_t)input_h, 3, &first_ky); + float *const row_a = out_a + (uint64_t)oh * output_w; + float *const row_b = out_b + (uint64_t)oh * output_w; + const float *row_origin; + const float *wrow_a; + const float *wrow_b; + if (ky_count == 0u) { + for (ow = 0; ow < (int32_t)output_w; ++ow) { + row_a[ow] = bias_a; + row_b[ow] = bias_b; + } + continue; + } + row_origin = batch_input + + (uint64_t)(base_h + (int64_t)first_ky) * input_w; + wrow_a = weight_a + (uint64_t)first_ky * 3u; + wrow_b = weight_b + (uint64_t)first_ky * 3u; + ow = 0; + while (ow < (int32_t)output_w) { + const int64_t base_w = + (int64_t)ow * (int64_t)stride - (int64_t)pad_left; + if ((uint32_t)ow >= interior_first + && (uint32_t)ow + 4u <= interior_end) { + const float *channel = row_origin + base_w; + const float *tap_a = wrow_a; + const float *tap_b = wrow_b; + float a0 = bias_a, a1 = bias_a, a2 = bias_a, a3 = bias_a; + float b0 = bias_b, b1 = bias_b, b2 = bias_b, b3 = bias_b; + for (icg = 0; icg < input_channels; ++icg) { + const float *row = channel; + const float *ca = tap_a; + const float *cb = tap_b; + for (ky = 0; ky < ky_count; ++ky) { + const float *value = row; + uint32_t kxi; + for (kxi = 0; kxi < 3u; ++kxi) { + const float sa = ca[kxi]; + const float sb = cb[kxi]; + const float v0 = value[0]; + const float v1 = value[column_step]; + const float v2 = value[column_step2]; + const float v3 = value[column_step3]; + a0 += v0 * sa; a1 += v1 * sa; + a2 += v2 * sa; a3 += v3 * sa; + b0 += v0 * sb; b1 += v1 * sb; + b2 += v2 * sb; b3 += v3 * sb; + value += 1; + } + row += input_w; + ca += 3u; + cb += 3u; + } + channel += channel_stride; + tap_a += 9u; + tap_b += 9u; + } + row_a[ow] = a0; row_a[ow + 1] = a1; + row_a[ow + 2] = a2; row_a[ow + 3] = a3; + row_b[ow] = b0; row_b[ow + 1] = b1; + row_b[ow + 2] = b2; row_b[ow + 3] = b3; + ow += 4; + } else { + row_a[ow] = yr_conv3x3_s2_pixel( + batch_input, weight_a, bias_a, input_channels, + input_h, input_w, oh, ow, stride, + pad_top, pad_left); + row_b[ow] = yr_conv3x3_s2_pixel( + batch_input, weight_b, bias_b, input_channels, + input_h, input_w, oh, ow, stride, + pad_top, pad_left); + ow += 1; + } + } + } + oc += 2u; + } + for (; oc < oc_hi; ++oc) { + const float *const weight_oc = + weight + (uint64_t)oc * weight_oc_stride; + const float bias_value = + bias == (const float *)0 ? 0.0f : bias[oc]; + float *const out_oc = batch_output + (uint64_t)oc * plane_stride; + for (oh = 0; oh < (int32_t)output_h; ++oh) { + const int64_t base_h = + (int64_t)oh * (int64_t)stride - (int64_t)pad_top; + uint32_t first_ky; + const uint32_t ky_count = + yr_tap_range(base_h, 1, (int64_t)input_h, 3, &first_ky); + float *const row = out_oc + (uint64_t)oh * output_w; + const float *row_origin; + const float *wrow; + if (ky_count == 0u) { + for (ow = 0; ow < (int32_t)output_w; ++ow) { + row[ow] = bias_value; + } + continue; + } + row_origin = batch_input + + (uint64_t)(base_h + (int64_t)first_ky) * input_w; + wrow = weight_oc + (uint64_t)first_ky * 3u; + ow = 0; + while (ow < (int32_t)output_w) { + const int64_t base_w = + (int64_t)ow * (int64_t)stride - (int64_t)pad_left; + if ((uint32_t)ow >= interior_first + && (uint32_t)ow + 4u <= interior_end) { + const float *channel = row_origin + base_w; + const float *tap = wrow; + float a0 = bias_value, a1 = bias_value; + float a2 = bias_value, a3 = bias_value; + for (icg = 0; icg < input_channels; ++icg) { + const float *rp = channel; + const float *cc = tap; + for (ky = 0; ky < ky_count; ++ky) { + const float *value = rp; + uint32_t kxi; + for (kxi = 0; kxi < 3u; ++kxi) { + const float s = cc[kxi]; + a0 += value[0] * s; + a1 += value[column_step] * s; + a2 += value[column_step2] * s; + a3 += value[column_step3] * s; + value += 1; + } + rp += input_w; + cc += 3u; + } + channel += channel_stride; + tap += 9u; + } + row[ow] = a0; row[ow + 1] = a1; + row[ow + 2] = a2; row[ow + 3] = a3; + ow += 4; + } else { + row[ow] = yr_conv3x3_s2_pixel( + batch_input, weight_oc, bias_value, input_channels, + input_h, input_w, oh, ow, stride, + pad_top, pad_left); + ow += 1; + } + } + } + } + } + return YR_STATUS_OK; +} + + +#if YR_CONV_1X1_VPU && defined(__riscv) +/* + * Packed eight-wide 1x1 stride-1 conv, out = bias + sum over ic of + * w[oc][ic] * in[ic][hw]. Same per-pixel matrix-vector product as the scalar + * fast path but the accumulate runs eight flat positions at a time on the + * vector unit, two output channels sharing each activation load. Every hart + * owns an output-channel range. hw is a multiple of eight for every 1x1 node + * in this graph; a scalar tail covers any remainder. + */ +static void yr_conv_1x1_vpu( + const float *input, const float *weight, const float *bias, float *output, + uint32_t batches, uint32_t input_channels, uint32_t output_channels, + uint32_t hw, uint32_t oc_lo, uint32_t oc_hi) +{ + uint32_t n, oc, ic, p; + for (n = 0u; n < batches; ++n) { + const float *batch_input = input + (uint64_t)n * input_channels * hw; + float *batch_output = output + (uint64_t)n * output_channels * hw; + oc = oc_lo; + for (; oc + 1u < oc_hi; oc += 2u) { + const float *wa = weight + (uint64_t)oc * input_channels; + const float *wb = wa + input_channels; + float *out_a = batch_output + (uint64_t)oc * hw; + float *out_b = out_a + hw; + union { float f; uint32_t u; } ba = { bias ? bias[oc] : 0.0f }; + union { float f; uint32_t u; } bb = { bias ? bias[oc + 1u] : 0.0f }; + for (p = 0u; p + 8u <= hw; p += 8u) { + const float *in_plane = batch_input + p; + float va, vb; + __asm__ volatile("fbcx.ps %0, %1\n" : "=f"(va) + : "r"((uint64_t)ba.u)); + __asm__ volatile("fbcx.ps %0, %1\n" : "=f"(vb) + : "r"((uint64_t)bb.u)); + for (ic = 0u; ic < input_channels; ++ic) { + union { float f; uint32_t u; } cwa = { wa[ic] }; + union { float f; uint32_t u; } cwb = { wb[ic] }; + float iv, wav, wbv; + __asm__ volatile("flq2 %0, 0(%1)\n" : "=f"(iv) + : "r"(in_plane)); + __asm__ volatile("fbcx.ps %0, %1\n" : "=f"(wav) + : "r"((uint64_t)cwa.u)); + __asm__ volatile("fbcx.ps %0, %1\n" : "=f"(wbv) + : "r"((uint64_t)cwb.u)); + __asm__ volatile("fmadd.ps %0, %1, %2, %0\n" : "+f"(va) + : "f"(iv), "f"(wav)); + __asm__ volatile("fmadd.ps %0, %1, %2, %0\n" : "+f"(vb) + : "f"(iv), "f"(wbv)); + in_plane += hw; + } + __asm__ volatile("fsq2 %1, 0(%0)\n" :: "r"(out_a + p), "f"(va) + : "memory"); + __asm__ volatile("fsq2 %1, 0(%0)\n" :: "r"(out_b + p), "f"(vb) + : "memory"); + } + for (; p < hw; ++p) { + float a = ba.f, b = bb.f; + const float *in_plane = batch_input + p; + for (ic = 0u; ic < input_channels; ++ic) { + const float iv = *in_plane; + a += wa[ic] * iv; + b += wb[ic] * iv; + in_plane += hw; + } + out_a[p] = a; + out_b[p] = b; + } + } + for (; oc < oc_hi; ++oc) { + const float *wr = weight + (uint64_t)oc * input_channels; + float *out_row = batch_output + (uint64_t)oc * hw; + union { float f; uint32_t u; } bo = { bias ? bias[oc] : 0.0f }; + for (p = 0u; p + 8u <= hw; p += 8u) { + const float *in_plane = batch_input + p; + float va; + __asm__ volatile("fbcx.ps %0, %1\n" : "=f"(va) + : "r"((uint64_t)bo.u)); + for (ic = 0u; ic < input_channels; ++ic) { + union { float f; uint32_t u; } cw = { wr[ic] }; + float iv, wv; + __asm__ volatile("flq2 %0, 0(%1)\n" : "=f"(iv) + : "r"(in_plane)); + __asm__ volatile("fbcx.ps %0, %1\n" : "=f"(wv) + : "r"((uint64_t)cw.u)); + __asm__ volatile("fmadd.ps %0, %1, %2, %0\n" : "+f"(va) + : "f"(iv), "f"(wv)); + in_plane += hw; + } + __asm__ volatile("fsq2 %1, 0(%0)\n" :: "r"(out_row + p), "f"(va) + : "memory"); + } + for (; p < hw; ++p) { + float a = bo.f; + const float *in_plane = batch_input + p; + for (ic = 0u; ic < input_channels; ++ic) { + a += wr[ic] * *in_plane; + in_plane += hw; + } + out_row[p] = a; + } + } + } +} +#endif + + +static uint32_t yr_conv( + const struct yr_node_desc *node, + const struct yr_tensor_desc *input_desc, + const struct yr_tensor_desc *weight_desc, + const struct yr_tensor_desc *bias_desc, + const struct yr_tensor_desc *output_desc, + const float *input, + const float *weight, + const float *bias, + float *output) +{ + uint32_t batches, input_channels, input_h, input_w; + uint32_t output_channels, output_h, output_w; + uint32_t channels_per_group, outputs_per_group; + uint32_t channel_stride, kernel_stride, dilated_row_stride, plane_stride; + uint32_t interior_first, interior_end; + int32_t column_step, column_step2, column_step3; + int64_t interior_lo, interior_hi; + uint32_t n, oc, oh, ow, icg, ky, kx; + uint32_t oc_lo, oc_hi; + int64_t effective_h, effective_w, padded_h, padded_w; + int64_t expected_h, expected_w; + + if (yr_tensor_dtype(input_desc) != 1u + || yr_tensor_dtype(weight_desc) != 1u + || yr_tensor_dtype(output_desc) != 1u + || (bias_desc != (const struct yr_tensor_desc *)0 + && yr_tensor_dtype(bias_desc) != 1u) + || input_desc->rank != 4u || weight_desc->rank != 4u + || output_desc->rank != 4u || node->group <= 0 + || node->kernel_h <= 0 || node->kernel_w <= 0 + || node->stride_h <= 0 || node->stride_w <= 0 + || node->dilation_h <= 0 || node->dilation_w <= 0 + || node->pad_top < 0 || node->pad_left < 0 + || node->pad_bottom < 0 || node->pad_right < 0) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + batches = input_desc->dims[0]; + input_channels = input_desc->dims[1]; + input_h = input_desc->dims[2]; + input_w = input_desc->dims[3]; + output_channels = output_desc->dims[1]; + output_h = output_desc->dims[2]; + output_w = output_desc->dims[3]; + effective_h = + (int64_t)node->dilation_h * (node->kernel_h - 1) + 1; + effective_w = + (int64_t)node->dilation_w * (node->kernel_w - 1) + 1; + padded_h = + (int64_t)input_h + node->pad_top + node->pad_bottom; + padded_w = + (int64_t)input_w + node->pad_left + node->pad_right; + if (padded_h < effective_h || padded_w < effective_w) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + expected_h = (padded_h - effective_h) / node->stride_h + 1; + expected_w = (padded_w - effective_w) / node->stride_w + 1; + if (output_desc->dims[0] != batches + || expected_h != (int64_t)output_h + || expected_w != (int64_t)output_w + || input_channels % (uint32_t)node->group != 0u + || output_channels % (uint32_t)node->group != 0u + || weight_desc->dims[0] != output_channels + || weight_desc->dims[1] != input_channels / (uint32_t)node->group + || weight_desc->dims[2] != (uint32_t)node->kernel_h + || weight_desc->dims[3] != (uint32_t)node->kernel_w) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + if (bias != (const float *)0 + && (bias_desc == (const struct yr_tensor_desc *)0 + || bias_desc->rank != 1u + || bias_desc->elements != output_channels)) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + + channels_per_group = input_channels / (uint32_t)node->group; + outputs_per_group = output_channels / (uint32_t)node->group; + channel_stride = input_h * input_w; + kernel_stride = (uint32_t)node->kernel_h * (uint32_t)node->kernel_w; + dilated_row_stride = (uint32_t)node->dilation_h * input_w; + plane_stride = output_h * output_w; + column_step = node->stride_w; + column_step2 = column_step * 2; + column_step3 = column_step * 3; + + /* + * Dedicated 1x1 stride-1 ungrouped path, 35.9 percent of this graph's + * multiply-accumulates. Such a Conv is a per-pixel [OC x IC] by [IC] + * matrix-vector product with no neighbourhood, so the spatial dimension + * collapses to a flat length-HW vector and none of the general path's + * tap-range, kernel, or padding machinery applies. Dropping all of it lets + * the inner loop be a plain accumulate the compiler can pipeline. Two + * output channels share each input read (the same pairing the general path + * uses), four flat positions run in parallel, and each accumulator sums + * over input channels in ascending order starting from the bias, exactly + * the order the general loop below uses, so the result is bit-identical. + */ +#if YR_CONV_1X1_VPU && defined(__riscv) + if (node->kernel_h == 1 && node->kernel_w == 1 + && node->stride_h == 1 && node->stride_w == 1 + && node->dilation_h == 1 && node->dilation_w == 1 + && node->group == 1 + && (node->pad_top | node->pad_left | node->pad_bottom + | node->pad_right) == 0) { + yr_hart_range(output_channels, &oc_lo, &oc_hi); + yr_conv_1x1_vpu(input, weight, bias, output, batches, input_channels, + output_channels, channel_stride, oc_lo, oc_hi); + return YR_STATUS_OK; + } +#endif + if (YR_CONV_1X1_FAST + && node->kernel_h == 1 && node->kernel_w == 1 + && node->stride_h == 1 && node->stride_w == 1 + && node->dilation_h == 1 && node->dilation_w == 1 + && node->group == 1 + && (node->pad_top | node->pad_left | node->pad_bottom + | node->pad_right) == 0) { + const uint32_t hw = channel_stride; + yr_hart_range(output_channels, &oc_lo, &oc_hi); + for (n = 0; n < batches; ++n) { + const float *const batch_input = + input + (uint64_t)n * input_channels * hw; + float *const batch_output = + output + (uint64_t)n * output_channels * hw; + oc = oc_lo; + while (oc + 1u < oc_hi) { + const float *const weight_a = weight + (uint64_t)oc * input_channels; + const float *const weight_b = weight_a + input_channels; + const float initial_a = + bias == (const float *)0 ? 0.0f : bias[oc]; + const float initial_b = + bias == (const float *)0 ? 0.0f : bias[oc + 1u]; + float *const out_a = batch_output + (uint64_t)oc * hw; + float *const out_b = out_a + hw; + uint32_t p = 0u; + while (p + 4u <= hw) { + float a0 = initial_a, a1 = initial_a; + float a2 = initial_a, a3 = initial_a; + float b0 = initial_b, b1 = initial_b; + float b2 = initial_b, b3 = initial_b; + const float *in_plane = batch_input + p; + for (icg = 0; icg < input_channels; ++icg) { + const float wa = weight_a[icg]; + const float wb = weight_b[icg]; + const float i0 = in_plane[0]; + const float i1 = in_plane[1]; + const float i2 = in_plane[2]; + const float i3 = in_plane[3]; + a0 += wa * i0; a1 += wa * i1; + a2 += wa * i2; a3 += wa * i3; + b0 += wb * i0; b1 += wb * i1; + b2 += wb * i2; b3 += wb * i3; + in_plane += hw; + } + out_a[p] = a0; out_a[p + 1u] = a1; + out_a[p + 2u] = a2; out_a[p + 3u] = a3; + out_b[p] = b0; out_b[p + 1u] = b1; + out_b[p + 2u] = b2; out_b[p + 3u] = b3; + p += 4u; + } + for (; p < hw; ++p) { + float a = initial_a; + float b = initial_b; + const float *in_plane = batch_input + p; + for (icg = 0; icg < input_channels; ++icg) { + const float iv = *in_plane; + a += weight_a[icg] * iv; + b += weight_b[icg] * iv; + in_plane += hw; + } + out_a[p] = a; + out_b[p] = b; + } + oc += 2u; + } + for (; oc < oc_hi; ++oc) { + const float *const weight_row = + weight + (uint64_t)oc * input_channels; + const float initial = + bias == (const float *)0 ? 0.0f : bias[oc]; + float *const out_row = batch_output + (uint64_t)oc * hw; + uint32_t p = 0u; + while (p + 4u <= hw) { + float a0 = initial, a1 = initial; + float a2 = initial, a3 = initial; + const float *in_plane = batch_input + p; + for (icg = 0; icg < input_channels; ++icg) { + const float w = weight_row[icg]; + a0 += w * in_plane[0]; + a1 += w * in_plane[1]; + a2 += w * in_plane[2]; + a3 += w * in_plane[3]; + in_plane += hw; + } + out_row[p] = a0; out_row[p + 1u] = a1; + out_row[p + 2u] = a2; out_row[p + 3u] = a3; + p += 4u; + } + for (; p < hw; ++p) { + float a = initial; + const float *in_plane = batch_input + p; + for (icg = 0; icg < input_channels; ++icg) { + a += weight_row[icg] * *in_plane; + in_plane += hw; + } + out_row[p] = a; + } + } + } + return YR_STATUS_OK; + } + + /* + * Dedicated 3x3 stride-1 same-padding ungrouped path, the graph's largest + * arithmetic cost. Same-padding here means one pixel on every side, which + * with a 3x3 kernel keeps output spatial dims equal to input. + */ +#if YR_CONV_3X3_VPU && defined(__riscv) + if (node->kernel_h == 3 && node->kernel_w == 3 + && node->stride_h == 1 && node->stride_w == 1 + && node->dilation_h == 1 && node->dilation_w == 1 + && node->group == 1 + && node->pad_top == 1 && node->pad_left == 1 + && node->pad_bottom == 1 && node->pad_right == 1) { + return yr_conv3x3_vpu( + batches, input_channels, output_channels, input_h, input_w, + input, weight, bias, output); + } +#endif + if (YR_CONV_3X3_FAST + && node->kernel_h == 3 && node->kernel_w == 3 + && node->stride_h == 1 && node->stride_w == 1 + && node->dilation_h == 1 && node->dilation_w == 1 + && node->group == 1 + && node->pad_top == 1 && node->pad_left == 1 + && node->pad_bottom == 1 && node->pad_right == 1) { + return yr_conv3x3_s1( + batches, input_channels, output_channels, input_h, input_w, + input, weight, bias, output); + } + + /* + * Output columns whose whole kernel width lands inside the input need no + * per-column bounds work, so four of them can share one weight load. + * Columns outside this span keep the general single-output path. + */ + interior_lo = yr_ceil_div(node->pad_left, node->stride_w); + interior_hi = yr_floor_div( + (int64_t)input_w - 1 + - (int64_t)(node->kernel_w - 1) * node->dilation_w + + node->pad_left, + node->stride_w); + if (interior_hi > (int64_t)output_w - 1) { + interior_hi = (int64_t)output_w - 1; + } + if (interior_hi < interior_lo) { + interior_first = output_w; + interior_end = output_w; + } else { + interior_first = (uint32_t)interior_lo; + interior_end = (uint32_t)interior_hi + 1u; + } + + /* + * Dedicated 3x3 stride-2 dilation-1 ungrouped path, the downsampling + * convolutions. Reuses the interior column span computed just above. + */ + if (YR_CONV_3X3_S2_FAST + && node->kernel_h == 3 && node->kernel_w == 3 + && node->stride_h == 2 && node->stride_w == 2 + && node->dilation_h == 1 && node->dilation_w == 1 + && node->group == 1) { + return yr_conv3x3_s2( + batches, input_channels, output_channels, + input_h, input_w, output_h, output_w, + (uint32_t)node->pad_top, (uint32_t)node->pad_left, + interior_first, interior_end, + input, weight, bias, output); + } + + /* + * Dedicated 3x3 stride-1 same-pad depthwise path (group == channels, one + * input channel per output channel), the only conv class with no vector or + * paired path in the general loop below. Guarded on the exact depthwise + * shape so any other grouped conv still falls through to the general path. + */ +#if YR_CONV_DW3X3_VPU && defined(__riscv) + if ((uint32_t)node->group == input_channels + && output_channels == input_channels + && channels_per_group == 1u + && node->kernel_h == 3 && node->kernel_w == 3 + && node->stride_h == 1 && node->stride_w == 1 + && node->dilation_h == 1 && node->dilation_w == 1 + && node->pad_top == 1 && node->pad_left == 1 + && node->pad_bottom == 1 && node->pad_right == 1 + && output_h == input_h && output_w == input_w) { + return yr_conv_dw3x3_s1_vpu( + batches, input_channels, input_h, input_w, + input, weight, bias, output); + } +#endif + + /* + * The tap loops below walk running pointers instead of recomputing the + * flat input and weight indices per multiply-accumulate, and the padding + * bounds are resolved once per output position by yr_tap_range(). Skipped + * taps contributed nothing before, so the accumulation order over + * (icg, ky, kx) is unchanged and results stay bit-identical. + */ + yr_hart_range(output_channels, &oc_lo, &oc_hi); + for (n = 0; n < batches; ++n) { + const float *const batch_input = + input + n * input_channels * channel_stride; + float *const batch_output = + output + n * output_channels * plane_stride; + oc = oc_lo; + /* + * Two output channels at a time wherever the pair exists and shares a + * group. Both read the same input values, so pairing halves the input + * loads per multiply-accumulate. On the unrolled interior path that + * takes one pass from four loads plus one weight for four products to + * four loads plus two weights for eight, and it doubles the number of + * independent accumulator chains. Each accumulator still sums over + * (icg, ky, kx) in the original order, so results stay bit-identical. + */ + while (oc + 1u < oc_hi + && (oc + 1u) / outputs_per_group == oc / outputs_per_group) { + const uint32_t group = oc / outputs_per_group; + const float *const group_input = batch_input + + group * channels_per_group * channel_stride; + const float *const filter_a = + weight + oc * channels_per_group * kernel_stride; + const float *const filter_b = + filter_a + channels_per_group * kernel_stride; + const float initial_a = bias == (const float *)0 ? 0.0f : bias[oc]; + const float initial_b = + bias == (const float *)0 ? 0.0f : bias[oc + 1u]; + float *out_a = batch_output + oc * plane_stride; + float *out_b = out_a + plane_stride; + for (oh = 0; oh < output_h; ++oh) { + const int64_t base_h = + (int64_t)oh * node->stride_h - node->pad_top; + uint32_t first_ky; + const uint32_t ky_count = yr_tap_range( + base_h, node->dilation_h, input_h, node->kernel_h, + &first_ky); + const float *row_origin; + const float *row_filter_a; + const float *row_filter_b; + if (ky_count == 0u) { + for (ow = 0; ow < output_w; ++ow) { + *out_a++ = initial_a; + *out_b++ = initial_b; + } + continue; + } + row_origin = group_input + + (base_h + (int64_t)first_ky * node->dilation_h) + * (int64_t)input_w; + row_filter_a = filter_a + first_ky * (uint32_t)node->kernel_w; + row_filter_b = filter_b + first_ky * (uint32_t)node->kernel_w; + ow = 0u; + while (ow < output_w) { + const int64_t base_w = + (int64_t)ow * node->stride_w - node->pad_left; + if (ow >= interior_first && ow + 4u <= interior_end) { + const float *channel = row_origin + base_w; + const float *tap_weight_a = row_filter_a; + const float *tap_weight_b = row_filter_b; + float first_a = initial_a; + float second_a = initial_a; + float third_a = initial_a; + float fourth_a = initial_a; + float first_b = initial_b; + float second_b = initial_b; + float third_b = initial_b; + float fourth_b = initial_b; + for (icg = 0; icg < channels_per_group; ++icg) { + const float *row = channel; + const float *row_weight_a = tap_weight_a; + const float *row_weight_b = tap_weight_b; + for (ky = 0; ky < ky_count; ++ky) { + const float *value = row; + const float *coefficient_a = row_weight_a; + const float *coefficient_b = row_weight_b; + for (kx = 0; kx < (uint32_t)node->kernel_w; + ++kx) { + const float scale_a = *coefficient_a++; + const float scale_b = *coefficient_b++; + const float value0 = value[0]; + const float value1 = value[column_step]; + const float value2 = value[column_step2]; + const float value3 = value[column_step3]; + first_a += value0 * scale_a; + second_a += value1 * scale_a; + third_a += value2 * scale_a; + fourth_a += value3 * scale_a; + first_b += value0 * scale_b; + second_b += value1 * scale_b; + third_b += value2 * scale_b; + fourth_b += value3 * scale_b; + value += node->dilation_w; + } + row += dilated_row_stride; + row_weight_a += (uint32_t)node->kernel_w; + row_weight_b += (uint32_t)node->kernel_w; + } + channel += channel_stride; + tap_weight_a += kernel_stride; + tap_weight_b += kernel_stride; + } + out_a[0] = first_a; + out_a[1] = second_a; + out_a[2] = third_a; + out_a[3] = fourth_a; + out_b[0] = first_b; + out_b[1] = second_b; + out_b[2] = third_b; + out_b[3] = fourth_b; + out_a += 4; + out_b += 4; + ow += 4u; + } else { + uint32_t first_kx; + const uint32_t kx_count = yr_tap_range( + base_w, node->dilation_w, input_w, node->kernel_w, + &first_kx); + float accumulator_a = initial_a; + float accumulator_b = initial_b; + if (kx_count != 0u) { + const float *channel = row_origin + base_w + + (int64_t)first_kx * node->dilation_w; + const float *tap_weight_a = row_filter_a + first_kx; + const float *tap_weight_b = row_filter_b + first_kx; + for (icg = 0; icg < channels_per_group; ++icg) { + const float *row = channel; + const float *row_weight_a = tap_weight_a; + const float *row_weight_b = tap_weight_b; + for (ky = 0; ky < ky_count; ++ky) { + const float *value = row; + const float *coefficient_a = row_weight_a; + const float *coefficient_b = row_weight_b; + for (kx = 0; kx < kx_count; ++kx) { + const float sample = *value; + accumulator_a += sample + * *coefficient_a++; + accumulator_b += sample + * *coefficient_b++; + value += node->dilation_w; + } + row += dilated_row_stride; + row_weight_a += (uint32_t)node->kernel_w; + row_weight_b += (uint32_t)node->kernel_w; + } + channel += channel_stride; + tap_weight_a += kernel_stride; + tap_weight_b += kernel_stride; + } + } + *out_a++ = accumulator_a; + *out_b++ = accumulator_b; + ow += 1u; + } + } + } + oc += 2u; + } + for (; oc < oc_hi; ++oc) { + const uint32_t group = oc / outputs_per_group; + const float *const group_input = batch_input + + group * channels_per_group * channel_stride; + const float *const filter = + weight + oc * channels_per_group * kernel_stride; + const float initial = bias == (const float *)0 ? 0.0f : bias[oc]; + float *out = batch_output + oc * plane_stride; + for (oh = 0; oh < output_h; ++oh) { + const int64_t base_h = + (int64_t)oh * node->stride_h - node->pad_top; + uint32_t first_ky; + const uint32_t ky_count = yr_tap_range( + base_h, node->dilation_h, input_h, node->kernel_h, + &first_ky); + const float *row_origin; + const float *row_filter; + if (ky_count == 0u) { + for (ow = 0; ow < output_w; ++ow) { + *out++ = initial; + } + continue; + } + row_origin = group_input + + (base_h + (int64_t)first_ky * node->dilation_h) + * (int64_t)input_w; + row_filter = filter + first_ky * (uint32_t)node->kernel_w; + ow = 0u; + while (ow < output_w) { + const int64_t base_w = + (int64_t)ow * node->stride_w - node->pad_left; + if (ow >= interior_first && ow + 4u <= interior_end) { + /* + * Four neighbouring output columns, each keeping its + * own accumulator and its own tap order, so the four + * dependency chains interleave and the weight is + * fetched once for the group. + */ + const float *channel = row_origin + base_w; + const float *tap_weight = row_filter; + float first = initial; + float second = initial; + float third = initial; + float fourth = initial; + for (icg = 0; icg < channels_per_group; ++icg) { + const float *row = channel; + const float *row_weight = tap_weight; + for (ky = 0; ky < ky_count; ++ky) { + const float *value = row; + const float *coefficient = row_weight; + for (kx = 0; kx < (uint32_t)node->kernel_w; + ++kx) { + const float scale = *coefficient++; + first += value[0] * scale; + second += value[column_step] * scale; + third += value[column_step2] * scale; + fourth += value[column_step3] * scale; + value += node->dilation_w; + } + row += dilated_row_stride; + row_weight += (uint32_t)node->kernel_w; + } + channel += channel_stride; + tap_weight += kernel_stride; + } + out[0] = first; + out[1] = second; + out[2] = third; + out[3] = fourth; + out += 4; + ow += 4u; + } else { + uint32_t first_kx; + const uint32_t kx_count = yr_tap_range( + base_w, node->dilation_w, input_w, node->kernel_w, + &first_kx); + float accumulator = initial; + if (kx_count != 0u) { + const float *channel = row_origin + base_w + + (int64_t)first_kx * node->dilation_w; + const float *tap_weight = row_filter + first_kx; + for (icg = 0; icg < channels_per_group; ++icg) { + const float *row = channel; + const float *row_weight = tap_weight; + for (ky = 0; ky < ky_count; ++ky) { + const float *value = row; + const float *coefficient = row_weight; + for (kx = 0; kx < kx_count; ++kx) { + accumulator += *value * *coefficient; + value += node->dilation_w; + ++coefficient; + } + row += dilated_row_stride; + row_weight += (uint32_t)node->kernel_w; + } + channel += channel_stride; + tap_weight += kernel_stride; + } + } + *out++ = accumulator; + ow += 1u; + } + } + } + } + } + return YR_STATUS_OK; +} + + +static uint32_t yr_sigmoid( + const struct yr_tensor_desc *input_desc, + const struct yr_tensor_desc *output_desc, + const float *input, + float *output, + uint32_t elem_lo, + uint32_t elem_hi) +{ + uint32_t index; + if (yr_tensor_dtype(input_desc) != 1u + || yr_tensor_dtype(output_desc) != 1u + || !yr_same_shape(input_desc, output_desc)) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + for (index = elem_lo; index < elem_hi; ++index) { + output[index] = yr_sigmoid_scalar(input[index]); + } + return YR_STATUS_OK; +} + + +#ifndef YR_SILU_VPU +#define YR_SILU_VPU 1 +#endif + +#if YR_SILU_VPU && defined(__riscv) +/* + * Packed eight-wide SiLU on the vector unit, out = x * sigmoid(x). Builds the + * sigmoid straight from the hardware exponential and reciprocal instead of the + * scalar polynomial, eight lanes at a time. sigmoid(x) is 1 / (1 + e^-x), and + * e^-x is exp2(-x * log2(e)) since the hardware exponential is base two. Runs + * only on the ET target where these packed ops exist, and never on the host + * reference, so it sits behind its own build flag. The exponential differs in + * the last bits from the scalar path, so a build using this validates by + * tolerance, not by the workspace hash. The parallel elementwise slices are + * cache-line aligned, so the length is a multiple of sixteen and the eight-wide + * loop needs no scalar tail. + */ +static void yr_silu_vpu_slice( + const float *input, float *output, uint32_t elem_lo, uint32_t elem_hi) +{ + union { float f; uint32_t u; } z = { 0.0f }; + union { float f; uint32_t u; } o = { 1.0f }; + union { float f; uint32_t u; } l = { 1.4426950408889634f }; + float vz, vo, vl2e; + uint32_t i; + __asm__ volatile("fbcx.ps %0, %1\n" : "=f"(vz) : "r"((uint64_t)z.u)); + __asm__ volatile("fbcx.ps %0, %1\n" : "=f"(vo) : "r"((uint64_t)o.u)); + __asm__ volatile("fbcx.ps %0, %1\n" : "=f"(vl2e) : "r"((uint64_t)l.u)); + for (i = elem_lo; i + 8u <= elem_hi; i += 8u) { + float x, t; + __asm__ volatile("flq2 %0, 0(%1)\n" : "=f"(x) : "r"(input + i)); + __asm__ volatile( + "fsub.ps %[t], %[z], %[x]\n" + "fmul.ps %[t], %[t], %[l2e]\n" + "fexp.ps %[t], %[t]\n" + "fadd.ps %[t], %[t], %[o]\n" + "frcp.ps %[t], %[t]\n" + "fmul.ps %[t], %[t], %[x]\n" + : [t] "=&f"(t) + : [x] "f"(x), [z] "f"(vz), [o] "f"(vo), [l2e] "f"(vl2e)); + __asm__ volatile("fsq2 %1, 0(%0)\n" :: "r"(output + i), "f"(t) + : "memory"); + } +} +#endif + + +/* + * Fused SiLU over one elementwise slice, out = x * sigmoid(x). Folds a + * Sigmoid node and the Mul node that follows it into a single pass, so the + * intermediate sigmoid tensor is never written or read back. The scalar op is + * the same yr_sigmoid_scalar and a multiply the standalone Sigmoid then Mul + * would run, in the same order, so the fused output is bit identical to the + * two-node path and validates against the same workspace hash. With the packed + * vector build the same slice runs through yr_silu_vpu_slice instead, faster + * but only tolerance close to the scalar hash. + */ +static uint32_t yr_silu( + const struct yr_tensor_desc *input_desc, + const struct yr_tensor_desc *output_desc, + const float *input, + float *output, + uint32_t elem_lo, + uint32_t elem_hi) +{ + uint32_t index; + if (yr_tensor_dtype(input_desc) != 1u + || yr_tensor_dtype(output_desc) != 1u + || !yr_same_shape(input_desc, output_desc)) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } +#if YR_SILU_VPU && defined(__riscv) + yr_silu_vpu_slice(input, output, elem_lo, elem_hi); + return YR_STATUS_OK; +#else + for (index = elem_lo; index < elem_hi; ++index) { + const float x = input[index]; + output[index] = x * yr_sigmoid_scalar(x); + } + return YR_STATUS_OK; +#endif +} + + +static uint32_t yr_mul( + const struct yr_tensor_desc *left_desc, + const struct yr_tensor_desc *right_desc, + const struct yr_tensor_desc *output_desc, + const float *left, + const float *right, + float *output, + uint32_t elem_lo, + uint32_t elem_hi) +{ + uint32_t index; + if (yr_tensor_dtype(left_desc) != 1u + || yr_tensor_dtype(right_desc) != 1u + || yr_tensor_dtype(output_desc) != 1u) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + if (yr_same_shape(left_desc, output_desc) + && yr_same_shape(right_desc, output_desc)) { + for (index = elem_lo; index < elem_hi; ++index) { + output[index] = left[index] * right[index]; + } + return YR_STATUS_OK; + } + if (yr_same_shape(left_desc, output_desc) + && right_desc->elements == 1u + && right_desc->rank <= output_desc->rank) { + for (index = elem_lo; index < elem_hi; ++index) { + output[index] = left[index] * right[0]; + } + return YR_STATUS_OK; + } + if (yr_same_shape(right_desc, output_desc) + && left_desc->elements == 1u + && left_desc->rank <= output_desc->rank) { + for (index = elem_lo; index < elem_hi; ++index) { + output[index] = left[0] * right[index]; + } + return YR_STATUS_OK; + } +#if YR_MANIFEST_VERSION >= 2 + /* + * General static multidirectional broadcasting. The pinned graph uses + * this for N285: [1,4,8400] * [1,8400]. + */ + for (index = elem_lo; index < elem_hi; ++index) { + uint32_t left_index; + uint32_t right_index; + if (!yr_broadcast_index( + left_desc, output_desc, index, &left_index) + || !yr_broadcast_index( + right_desc, output_desc, index, &right_index)) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + output[index] = left[left_index] * right[right_index]; + } + return YR_STATUS_OK; +#else + return YR_STATUS_UNSUPPORTED_SHAPE; +#endif +} + + +static uint32_t yr_concat( + const struct yr_node_desc *node, + const struct yr_tensor_desc *const *input_descs, + const struct yr_tensor_desc *output_desc, + const float *const *inputs, + float *output, + uint32_t out_lo, + uint32_t out_hi) +{ + int32_t axis = node->axis; + uint32_t rank = output_desc->rank; + uint32_t inner = 1u; + uint32_t expected_axis = 0u; + uint32_t input_index; + uint32_t dimension; + uint32_t output_block; + uint32_t axis_offsets[4] = {0u, 0u, 0u, 0u}; + uint32_t flat_index; + + if (rank == 0u || rank > 6u || node->input_count == 0u + || node->input_count > 4u + || yr_tensor_dtype(output_desc) != 1u) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + if (axis < 0) { + axis += (int32_t)rank; + } + if (axis < 0 || axis >= (int32_t)rank) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + for (dimension = (uint32_t)axis + 1u; dimension < rank; ++dimension) { + inner *= output_desc->dims[dimension]; + } + for (input_index = 0u; input_index < node->input_count; ++input_index) { + const struct yr_tensor_desc *input_desc = input_descs[input_index]; + if (input_desc == (const struct yr_tensor_desc *)0 + || inputs[input_index] == (const float *)0 + || yr_tensor_dtype(input_desc) != 1u + || input_desc->rank != rank) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + for (dimension = 0u; dimension < rank; ++dimension) { + if (dimension != (uint32_t)axis + && input_desc->dims[dimension] != output_desc->dims[dimension]) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + } + expected_axis += input_desc->dims[axis]; + } + if (expected_axis != output_desc->dims[axis]) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + + output_block = output_desc->dims[axis] * inner; + { + uint32_t cumulative = 0u; + for (input_index = 0u; input_index < node->input_count; + ++input_index) { + axis_offsets[input_index] = cumulative; + cumulative += input_descs[input_index]->dims[axis]; + } + } + if (out_hi > output_desc->elements) { + out_hi = output_desc->elements; + } + for (flat_index = out_lo; flat_index < out_hi; ++flat_index) { + const uint32_t outer_index = flat_index / output_block; + const uint32_t rem = flat_index % output_block; + const uint32_t axis_pos = rem / inner; + const uint32_t inner_index = rem % inner; + uint32_t which = 0u; + while (which + 1u < node->input_count + && axis_pos >= axis_offsets[which + 1u]) { + ++which; + } + { + const uint32_t local_axis = axis_pos - axis_offsets[which]; + const uint32_t input_block = + input_descs[which]->dims[axis] * inner; + output[flat_index] = + inputs[which][outer_index * input_block + + local_axis * inner + inner_index]; + } + } + return YR_STATUS_OK; +} + + +#if YR_MANIFEST_VERSION >= 2 + +static void yr_copy_bytes( + uint8_t *destination, const uint8_t *source, uint32_t bytes) +{ + uint32_t index; + for (index = 0u; index < bytes; ++index) { + destination[index] = source[index]; + } +} + + +static uint32_t yr_copy_tensor( + const struct yr_tensor_desc *input_desc, + const struct yr_tensor_desc *output_desc, + const uint8_t *input, + uint8_t *output) +{ + if (yr_tensor_dtype(input_desc) != yr_tensor_dtype(output_desc) + || input_desc->elements != output_desc->elements + || input_desc->nbytes != output_desc->nbytes) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + yr_copy_bytes(output, input, output_desc->nbytes); + return YR_STATUS_OK; +} + + +static uint32_t yr_reshape( + const struct yr_tensor_desc *input_desc, + const struct yr_tensor_desc *shape_desc, + const struct yr_tensor_desc *output_desc, + const int64_t *shape, + const uint8_t *input, + uint8_t *output) +{ + uint64_t known_elements = 1u; + int32_t inferred_axis = -1; + uint32_t dimension; + + /* + * ONNX Reshape-13 with allowzero=0. The package generator rejects any + * other allowzero contract, while this check independently validates the + * actual INT64 shape initializer and inferred static output descriptor. + */ + if (yr_tensor_dtype(shape_desc) != YR_DTYPE_INT64 + || shape_desc->rank != 1u + || shape_desc->elements != output_desc->rank + || output_desc->rank > 6u + || yr_tensor_dtype(input_desc) != yr_tensor_dtype(output_desc) + || input_desc->elements != output_desc->elements) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + for (dimension = 0u; dimension < output_desc->rank; ++dimension) { + const int64_t requested = shape[dimension]; + uint32_t expected; + if (requested == 0) { + if (dimension >= input_desc->rank) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + expected = input_desc->dims[dimension]; + } else if (requested == -1) { + if (inferred_axis >= 0) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + inferred_axis = (int32_t)dimension; + continue; + } else if (requested > 0 + && requested <= (int64_t)UINT32_MAX) { + expected = (uint32_t)requested; + } else { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + if (output_desc->dims[dimension] != expected) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + known_elements *= expected; + if (known_elements > UINT32_MAX) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + } + if (inferred_axis >= 0) { + if (known_elements == 0u + || input_desc->elements % (uint32_t)known_elements != 0u + || output_desc->dims[(uint32_t)inferred_axis] + != input_desc->elements / (uint32_t)known_elements) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + } else if (known_elements != input_desc->elements) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + return yr_copy_tensor(input_desc, output_desc, input, output); +} + + +static uint32_t yr_flatten( + const struct yr_node_desc *node, + const struct yr_tensor_desc *input_desc, + const struct yr_tensor_desc *output_desc, + const uint8_t *input, + uint8_t *output) +{ + int32_t axis = node->axis; + uint32_t outer; + uint32_t inner; + if (axis < 0) { + axis += (int32_t)input_desc->rank; + } + if (axis < 0 || axis > (int32_t)input_desc->rank + || output_desc->rank != 2u + || !yr_shape_product(input_desc, 0u, (uint32_t)axis, &outer) + || !yr_shape_product( + input_desc, (uint32_t)axis, input_desc->rank, &inner) + || output_desc->dims[0] != outer + || output_desc->dims[1] != inner) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + return yr_copy_tensor(input_desc, output_desc, input, output); +} + + +static uint32_t yr_add_sub( + const struct yr_tensor_desc *left_desc, + const struct yr_tensor_desc *right_desc, + const struct yr_tensor_desc *output_desc, + const float *left, + const float *right, + float *output, + uint32_t subtract, + uint32_t elem_lo, + uint32_t elem_hi) +{ + uint32_t index; + if (yr_tensor_dtype(left_desc) != YR_DTYPE_FLOAT + || yr_tensor_dtype(right_desc) != YR_DTYPE_FLOAT + || yr_tensor_dtype(output_desc) != YR_DTYPE_FLOAT + || !yr_same_shape(left_desc, right_desc) + || !yr_same_shape(left_desc, output_desc)) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + for (index = elem_lo; index < elem_hi; ++index) { + output[index] = + subtract ? left[index] - right[index] : left[index] + right[index]; + } + return YR_STATUS_OK; +} + + +static uint32_t yr_split( + const struct yr_node_desc *node, + const struct yr_tensor_desc *input_desc, + const struct yr_tensor_desc *sizes_desc, + const struct yr_tensor_desc *const *output_descs, + const uint8_t *input, + const int64_t *sizes, + uint8_t *const *outputs) +{ + int32_t axis = yr_normalize_axis(node->axis, input_desc->rank); + uint32_t outer; + uint32_t inner; + uint32_t element_bytes = yr_dtype_bytes(yr_tensor_dtype(input_desc)); + uint32_t output_index; + uint32_t source_axis_offset = 0u; + uint64_t axis_sum = 0u; + + if (axis < 0 || node->input_count != 2u + || node->output_count == 0u || node->output_count > 3u + || yr_tensor_dtype(sizes_desc) != YR_DTYPE_INT64 + || sizes_desc->elements != node->output_count + || element_bytes == 0u + || !yr_shape_product(input_desc, 0u, (uint32_t)axis, &outer) + || !yr_shape_product( + input_desc, (uint32_t)axis + 1u, input_desc->rank, &inner)) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + for (output_index = 0u; output_index < node->output_count; ++output_index) { + const struct yr_tensor_desc *output_desc = output_descs[output_index]; + uint32_t dimension; + if (sizes[output_index] < 0 + || output_desc == (const struct yr_tensor_desc *)0 + || outputs[output_index] == (uint8_t *)0 + || yr_tensor_dtype(output_desc) != yr_tensor_dtype(input_desc) + || output_desc->rank != input_desc->rank + || output_desc->dims[axis] != (uint32_t)sizes[output_index]) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + for (dimension = 0u; dimension < input_desc->rank; ++dimension) { + if (dimension != (uint32_t)axis + && output_desc->dims[dimension] + != input_desc->dims[dimension]) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + } + axis_sum += (uint64_t)sizes[output_index]; + } + if (axis_sum != input_desc->dims[axis]) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + for (output_index = 0u; output_index < node->output_count; ++output_index) { + const uint32_t output_axis = + output_descs[output_index]->dims[axis]; + const uint32_t copy_elements = output_axis * inner; + const uint32_t source_block = input_desc->dims[axis] * inner; + uint32_t outer_index; + for (outer_index = 0u; outer_index < outer; ++outer_index) { + const uint32_t source_element = + outer_index * source_block + source_axis_offset * inner; + const uint32_t destination_element = + outer_index * copy_elements; + yr_copy_bytes( + outputs[output_index] + + destination_element * element_bytes, + input + source_element * element_bytes, + copy_elements * element_bytes); + } + source_axis_offset += output_axis; + } + return YR_STATUS_OK; +} + + +/* + * Split across harts, on by default. Split materialises each output as a real + * copy (yr_split calls yr_copy_bytes) and otherwise runs on hart 0 alone while + * the other fifteen harts idle; it is about 6 percent of the graph's output + * traffic and this graph is memory bound. For the outer==1 shape (the C2f + * channel splits, where the dims before the split axis multiply to one) each + * output is a single contiguous block, so every hart copies a disjoint + * cache-line-aligned sub-range of each output and publishes what it wrote. Any + * other shape falls back to the serial yr_split, so output stays bit-identical. + */ +#ifndef YR_SPLIT_MH +#define YR_SPLIT_MH 1 +#endif + +#if YR_SPLIT_MH +/* + * Multi-hart Split for the outer==1 shape, the dims before the split axis + * multiply to one, so each output is a single contiguous block of copy_elements + * floats taken from a disjoint slice of the input. Every hart copies a + * cache-line-aligned sub-range of each output (yr_hart_elem_range) and publishes + * exactly that slice, so the sixteen harts share the copy that yr_split ran + * alone. Repeats yr_split's shape validation and returns UNSUPPORTED_SHAPE for + * anything it cannot split this way; the caller only routes here after the + * dispatch guard confirmed the shape, and every hart sees the same static + * manifest so they agree on the outcome. Accumulation-free copy, so the result + * is bit-identical to the serial path. + */ +static uint32_t yr_split_mh( + const struct yr_node_desc *node, + const struct yr_tensor_desc *input_desc, + const struct yr_tensor_desc *sizes_desc, + const struct yr_tensor_desc *const *output_descs, + const uint8_t *input, + const int64_t *sizes, + uint8_t *const *outputs) +{ + int32_t axis = yr_normalize_axis(node->axis, input_desc->rank); + uint32_t outer; + uint32_t inner; + uint32_t element_bytes = yr_dtype_bytes(yr_tensor_dtype(input_desc)); + uint32_t output_index; + uint32_t source_axis_offset = 0u; + uint64_t axis_sum = 0u; + + if (axis < 0 || node->input_count != 2u + || node->output_count == 0u || node->output_count > 3u + || yr_tensor_dtype(sizes_desc) != YR_DTYPE_INT64 + || sizes_desc->elements != node->output_count + || element_bytes != (uint32_t)sizeof(float) + || !yr_shape_product(input_desc, 0u, (uint32_t)axis, &outer) + || !yr_shape_product( + input_desc, (uint32_t)axis + 1u, input_desc->rank, &inner) + || outer != 1u) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + for (output_index = 0u; output_index < node->output_count; ++output_index) { + const struct yr_tensor_desc *output_desc = output_descs[output_index]; + uint32_t dimension; + if (sizes[output_index] < 0 + || output_desc == (const struct yr_tensor_desc *)0 + || outputs[output_index] == (uint8_t *)0 + || yr_tensor_dtype(output_desc) != yr_tensor_dtype(input_desc) + || output_desc->rank != input_desc->rank + || output_desc->dims[axis] != (uint32_t)sizes[output_index]) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + for (dimension = 0u; dimension < input_desc->rank; ++dimension) { + if (dimension != (uint32_t)axis + && output_desc->dims[dimension] + != input_desc->dims[dimension]) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + } + axis_sum += (uint64_t)sizes[output_index]; + } + if (axis_sum != input_desc->dims[axis]) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + /* + * outer == 1, so output j's destination is the contiguous block + * [0, copy_elements) and its source starts at source_axis_offset * inner. + * Each hart owns a disjoint line-aligned [lo, hi) of that block. + */ + for (output_index = 0u; output_index < node->output_count; ++output_index) { + const uint32_t output_axis = output_descs[output_index]->dims[axis]; + const uint32_t copy_elements = output_axis * inner; + uint32_t lo, hi; + yr_hart_elem_range(copy_elements, &lo, &hi); + if (hi > lo) { + yr_copy_bytes( + outputs[output_index] + (uint64_t)lo * element_bytes, + input + ((uint64_t)source_axis_offset * inner + lo) + * element_bytes, + (hi - lo) * element_bytes); + yr_publish( + (const void *)(outputs[output_index] + + (uint64_t)lo * element_bytes), + (hi - lo) * element_bytes); + } + source_axis_offset += output_axis; + } + return YR_STATUS_OK; +} +#endif + + +/* + * channel_lo/channel_hi restrict the sweep to a sub-range of channels, the + * same per-hart split Conv already uses, so multiple harts can share one + * node's channels instead of every hart redundantly computing every + * channel. Safe at the channel granularity used by the caller because + * this graph's every NCHW plane (output_h * output_w * 4 bytes) is a + * multiple of the 64-byte cache line, the same invariant the Conv publish + * split already relies on. + */ +static uint32_t yr_maxpool( + const struct yr_node_desc *node, + const struct yr_tensor_desc *input_desc, + const struct yr_tensor_desc *output_desc, + const float *input, + float *output, + uint32_t channel_lo, + uint32_t channel_hi) +{ + uint32_t n, channel, oh, ow, ky, kx; + const uint32_t batches = input_desc->dims[0]; + const uint32_t channels = input_desc->dims[1]; + const uint32_t input_h = input_desc->dims[2]; + const uint32_t input_w = input_desc->dims[3]; + const uint32_t output_h = output_desc->dims[2]; + const uint32_t output_w = output_desc->dims[3]; + + if (yr_tensor_dtype(input_desc) != YR_DTYPE_FLOAT + || yr_tensor_dtype(output_desc) != YR_DTYPE_FLOAT + || input_desc->rank != 4u || output_desc->rank != 4u + || output_desc->dims[0] != batches + || output_desc->dims[1] != channels + || node->kernel_h <= 0 || node->kernel_w <= 0 + || node->stride_h <= 0 || node->stride_w <= 0 + || node->dilation_h <= 0 || node->dilation_w <= 0 + || node->pad_top < 0 || node->pad_left < 0 + || node->pad_bottom < 0 || node->pad_right < 0 + || node->ceil_mode != 0 + || (uint64_t)output_h + != ((uint64_t)input_h + (uint32_t)node->pad_top + + (uint32_t)node->pad_bottom + - ((uint64_t)(uint32_t)node->dilation_h + * ((uint32_t)node->kernel_h - 1u) + 1u)) + / (uint32_t)node->stride_h + 1u + || (uint64_t)output_w + != ((uint64_t)input_w + (uint32_t)node->pad_left + + (uint32_t)node->pad_right + - ((uint64_t)(uint32_t)node->dilation_w + * ((uint32_t)node->kernel_w - 1u) + 1u)) + / (uint32_t)node->stride_w + 1u) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + for (n = 0u; n < batches; ++n) { + for (channel = channel_lo; channel < channel_hi; ++channel) { + for (oh = 0u; oh < output_h; ++oh) { + for (ow = 0u; ow < output_w; ++ow) { + float best = 0.0f; + uint32_t have_value = 0u; + for (ky = 0u; ky < (uint32_t)node->kernel_h; ++ky) { + const int32_t ih = + (int32_t)(oh * (uint32_t)node->stride_h) + - node->pad_top + + (int32_t)(ky * (uint32_t)node->dilation_h); + if (ih < 0 || ih >= (int32_t)input_h) { + continue; + } + for (kx = 0u; kx < (uint32_t)node->kernel_w; ++kx) { + const int32_t iw = + (int32_t)(ow * (uint32_t)node->stride_w) + - node->pad_left + + (int32_t)(kx * (uint32_t)node->dilation_w); + float value; + if (iw < 0 || iw >= (int32_t)input_w) { + continue; + } + value = input[ + ((n * channels + channel) * input_h + + (uint32_t)ih) * input_w + (uint32_t)iw]; + if (!have_value || value > best) { + best = value; + have_value = 1u; + } + } + } + if (!have_value) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + output[ + ((n * channels + channel) * output_h + oh) + * output_w + ow] = best; + } + } + } + } + return YR_STATUS_OK; +} + + +/* + * channel_lo/channel_hi split channels across harts the same way yr_maxpool() + * now does, resting on the same NCHW-plane-is-a-multiple-of-64-bytes + * invariant. + */ +static uint32_t yr_resize( + const struct yr_node_desc *node, + const struct yr_tensor_desc *input_desc, + const struct yr_tensor_desc *scales_desc, + const struct yr_tensor_desc *output_desc, + const float *input, + const float *scales, + float *output, + uint32_t channel_lo, + uint32_t channel_hi) +{ + uint32_t n, channel, oh, ow; + const uint32_t input_h = input_desc->dims[2]; + const uint32_t input_w = input_desc->dims[3]; + const uint32_t output_h = output_desc->dims[2]; + const uint32_t output_w = output_desc->dims[3]; + if (node->input_count != 3u + || node->resize_nearest_asymmetric_floor != 1 + || yr_tensor_dtype(input_desc) != YR_DTYPE_FLOAT + || yr_tensor_dtype(scales_desc) != YR_DTYPE_FLOAT + || yr_tensor_dtype(output_desc) != YR_DTYPE_FLOAT + || input_desc->rank != 4u || output_desc->rank != 4u + || scales_desc->elements != 4u + || scales[0] != 1.0f || scales[1] != 1.0f + || scales[2] != 2.0f || scales[3] != 2.0f + || output_desc->dims[0] != input_desc->dims[0] + || output_desc->dims[1] != input_desc->dims[1] + || output_h != input_h * 2u || output_w != input_w * 2u) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + for (n = 0u; n < input_desc->dims[0]; ++n) { + for (channel = channel_lo; channel < channel_hi; ++channel) { + for (oh = 0u; oh < output_h; ++oh) { + const uint32_t ih = oh / 2u; + for (ow = 0u; ow < output_w; ++ow) { + const uint32_t iw = ow / 2u; + output[ + ((n * output_desc->dims[1] + channel) * output_h + oh) + * output_w + ow] = + input[ + ((n * input_desc->dims[1] + channel) * input_h + ih) + * input_w + iw]; + } + } + } + } + return YR_STATUS_OK; +} + + +static uint32_t yr_matmul( + const struct yr_tensor_desc *left_desc, + const struct yr_tensor_desc *right_desc, + const struct yr_tensor_desc *output_desc, + const float *left, + const float *right, + float *output, + uint32_t flat_row_lo, + uint32_t flat_row_hi) +{ + uint32_t batch_count; + uint32_t row; + uint32_t column; + uint32_t reduction; + uint32_t dimension; + uint32_t m, k, n; + uint32_t flat_row; + if (yr_tensor_dtype(left_desc) != YR_DTYPE_FLOAT + || yr_tensor_dtype(right_desc) != YR_DTYPE_FLOAT + || yr_tensor_dtype(output_desc) != YR_DTYPE_FLOAT + || left_desc->rank < 2u || left_desc->rank > 6u + || right_desc->rank != left_desc->rank + || output_desc->rank != left_desc->rank) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + for (dimension = 0u; dimension + 2u < left_desc->rank; ++dimension) { + if (left_desc->dims[dimension] != right_desc->dims[dimension] + || left_desc->dims[dimension] != output_desc->dims[dimension]) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + } + m = left_desc->dims[left_desc->rank - 2u]; + k = left_desc->dims[left_desc->rank - 1u]; + if (right_desc->dims[right_desc->rank - 2u] != k) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + n = right_desc->dims[right_desc->rank - 1u]; + if (output_desc->dims[output_desc->rank - 2u] != m + || output_desc->dims[output_desc->rank - 1u] != n + || !yr_shape_product( + left_desc, 0u, left_desc->rank - 2u, &batch_count)) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + (void)batch_count; + for (flat_row = flat_row_lo; flat_row < flat_row_hi; ++flat_row) { + const uint32_t batch = flat_row / m; + const uint32_t left_base = batch * m * k; + const uint32_t right_base = batch * k * n; + row = flat_row - batch * m; + for (column = 0u; column < n; ++column) { + float accumulator = 0.0f; + for (reduction = 0u; reduction < k; ++reduction) { + accumulator += + left[left_base + row * k + reduction] + * right[right_base + reduction * n + column]; + } + output[(uint64_t)flat_row * n + column] = accumulator; + } + } + return YR_STATUS_OK; +} + + +static uint32_t yr_softmax( + const struct yr_node_desc *node, + const struct yr_tensor_desc *input_desc, + const struct yr_tensor_desc *output_desc, + const float *input, + float *output, + uint32_t outer_lo, + uint32_t outer_hi, + uint32_t inner_lo, + uint32_t inner_hi) +{ + const int32_t axis = yr_normalize_axis(node->axis, input_desc->rank); + uint32_t outer; + uint32_t inner; + uint32_t outer_index; + uint32_t inner_index; + uint32_t axis_index; + uint32_t axis_size; + if (axis < 0 + || yr_tensor_dtype(input_desc) != YR_DTYPE_FLOAT + || yr_tensor_dtype(output_desc) != YR_DTYPE_FLOAT + || !yr_same_shape(input_desc, output_desc) + || !yr_shape_product(input_desc, 0u, (uint32_t)axis, &outer) + || !yr_shape_product( + input_desc, (uint32_t)axis + 1u, input_desc->rank, &inner)) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + axis_size = input_desc->dims[axis]; + if (outer_hi > outer) { + outer_hi = outer; + } + if (inner_hi > inner) { + inner_hi = inner; + } + for (outer_index = outer_lo; outer_index < outer_hi; ++outer_index) { + for (inner_index = inner_lo; inner_index < inner_hi; ++inner_index) { + const uint32_t base = + outer_index * axis_size * inner + inner_index; + float maximum = input[base]; + float sum = 0.0f; + float reciprocal; + for (axis_index = 1u; axis_index < axis_size; ++axis_index) { + const float value = input[base + axis_index * inner]; + if (value > maximum) { + maximum = value; + } + } + for (axis_index = 0u; axis_index < axis_size; ++axis_index) { + const uint32_t offset = base + axis_index * inner; + const float value = yr_expf(input[offset] - maximum); + output[offset] = value; + sum += value; + } + if (!(sum > 0.0f)) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + reciprocal = yr_recip_positive(sum); + for (axis_index = 0u; axis_index < axis_size; ++axis_index) { + const uint32_t offset = base + axis_index * inner; + output[offset] *= reciprocal; + } + } + } + return YR_STATUS_OK; +} + + +static uint32_t yr_transpose( + const struct yr_node_desc *node, + const struct yr_tensor_desc *input_desc, + const struct yr_tensor_desc *output_desc, + const uint8_t *input, + uint8_t *output, + uint32_t output_lo, + uint32_t output_hi) +{ + uint32_t input_strides[6] = {0u, 0u, 0u, 0u, 0u, 0u}; + uint32_t coordinates[6] = {0u, 0u, 0u, 0u, 0u, 0u}; + uint32_t seen = 0u; + uint32_t element_bytes = yr_dtype_bytes(yr_tensor_dtype(input_desc)); + uint32_t dimension; + uint32_t output_index; + if (input_desc->rank == 0u || input_desc->rank > 6u + || output_desc->rank != input_desc->rank + || node->perm_count != input_desc->rank + || yr_tensor_dtype(output_desc) != yr_tensor_dtype(input_desc) + || output_desc->elements != input_desc->elements + || element_bytes == 0u) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + input_strides[input_desc->rank - 1u] = 1u; + for (dimension = input_desc->rank - 1u; dimension > 0u; --dimension) { + input_strides[dimension - 1u] = + input_strides[dimension] * input_desc->dims[dimension]; + } + for (dimension = 0u; dimension < input_desc->rank; ++dimension) { + const int32_t source_dimension = node->perm[dimension]; + if (source_dimension < 0 + || source_dimension >= (int32_t)input_desc->rank + || (seen & (1u << (uint32_t)source_dimension)) != 0u + || output_desc->dims[dimension] + != input_desc->dims[source_dimension]) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + seen |= 1u << (uint32_t)source_dimension; + } + for (output_index = output_lo; output_index < output_hi; + ++output_index) { + uint32_t remaining = output_index; + uint32_t input_index = 0u; + for (dimension = output_desc->rank; dimension > 0u; --dimension) { + const uint32_t dim = output_desc->dims[dimension - 1u]; + coordinates[dimension - 1u] = remaining % dim; + remaining /= dim; + } + for (dimension = 0u; dimension < output_desc->rank; ++dimension) { + input_index += coordinates[dimension] + * input_strides[(uint32_t)node->perm[dimension]]; + } + yr_copy_bytes( + output + output_index * element_bytes, + input + input_index * element_bytes, + element_bytes); + } + return YR_STATUS_OK; +} + + +static uint32_t yr_reduce_max( + const struct yr_node_desc *node, + const struct yr_tensor_desc *input_desc, + const struct yr_tensor_desc *output_desc, + const float *input, + float *output, + uint32_t out_lo, + uint32_t out_hi) +{ + int32_t axis; + uint32_t outer; + uint32_t inner; + uint32_t axis_size; + uint32_t flat; + uint32_t axis_index; + if (node->axes_count != 1u + || yr_tensor_dtype(input_desc) != YR_DTYPE_FLOAT + || yr_tensor_dtype(output_desc) != YR_DTYPE_FLOAT) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + axis = yr_normalize_axis(node->axes[0], input_desc->rank); + if (axis < 0 + || !yr_shape_product(input_desc, 0u, (uint32_t)axis, &outer) + || !yr_shape_product( + input_desc, (uint32_t)axis + 1u, input_desc->rank, &inner) + || output_desc->elements != outer * inner + || (node->keepdims == 0 + && output_desc->rank + 1u != input_desc->rank) + || (node->keepdims != 0 + && output_desc->rank != input_desc->rank)) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + { + uint32_t input_dimension; + uint32_t output_dimension = 0u; + for (input_dimension = 0u; input_dimension < input_desc->rank; + ++input_dimension) { + if (input_dimension == (uint32_t)axis) { + if (node->keepdims != 0 + && output_desc->dims[output_dimension++] != 1u) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + } else if (output_desc->dims[output_dimension++] + != input_desc->dims[input_dimension]) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + } + } + axis_size = input_desc->dims[axis]; + /* + * Flat output index flat = outer_index * inner + inner_index, so a caller + * range [out_lo, out_hi) selects a contiguous slice of the output that a + * single hart owns. out_hi == 0 is treated as the whole output for the + * single-hart callers. + */ + if (out_hi == 0u) { + out_hi = outer * inner; + } + for (flat = out_lo; flat < out_hi; ++flat) { + const uint32_t outer_index = inner == 0u ? 0u : flat / inner; + const uint32_t inner_index = inner == 0u ? 0u : flat % inner; + const uint32_t base = outer_index * axis_size * inner + inner_index; + float maximum = input[base]; + for (axis_index = 1u; axis_index < axis_size; ++axis_index) { + const float value = input[base + axis_index * inner]; + if (value > maximum) { + maximum = value; + } + } + output[flat] = maximum; + } + return YR_STATUS_OK; +} + + +static uint32_t yr_topk( + const struct yr_node_desc *node, + const struct yr_tensor_desc *input_desc, + const struct yr_tensor_desc *k_desc, + const struct yr_tensor_desc *values_desc, + const struct yr_tensor_desc *indices_desc, + const float *input, + const int64_t *k_data, + float *values, + int64_t *indices) +{ + const int32_t axis = yr_normalize_axis(node->axis, input_desc->rank); + uint32_t outer; + uint32_t inner; + uint32_t axis_size; + uint32_t k; + uint32_t outer_index; + uint32_t inner_index; + if (axis < 0 || node->largest != 1 || node->sorted != 1 + || yr_tensor_dtype(input_desc) != YR_DTYPE_FLOAT + || yr_tensor_dtype(k_desc) != YR_DTYPE_INT64 + || yr_tensor_dtype(values_desc) != YR_DTYPE_FLOAT + || yr_tensor_dtype(indices_desc) != YR_DTYPE_INT64 + || k_desc->elements != 1u || k_data[0] <= 0 + || k_data[0] > (int64_t)UINT32_MAX + || values_desc->rank != input_desc->rank + || indices_desc->rank != input_desc->rank + || !yr_same_shape(values_desc, indices_desc) + || !yr_shape_product(input_desc, 0u, (uint32_t)axis, &outer) + || !yr_shape_product( + input_desc, (uint32_t)axis + 1u, input_desc->rank, &inner)) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + k = (uint32_t)k_data[0]; + axis_size = input_desc->dims[axis]; + if (k > axis_size || values_desc->dims[axis] != k) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + for (outer_index = 0u; outer_index < outer; ++outer_index) { + for (inner_index = 0u; inner_index < inner; ++inner_index) { + uint32_t populated = 0u; + uint32_t candidate_index; + for (candidate_index = 0u; candidate_index < axis_size; + ++candidate_index) { + const uint32_t input_offset = + (outer_index * axis_size + candidate_index) * inner + + inner_index; + const float candidate = input[input_offset]; + uint32_t position = 0u; +#if YR_TOPK_FAST + if (populated == k) { + const uint32_t last_offset = + (outer_index * k + (k - 1u)) * inner + inner_index; + const float last_value = values[last_offset]; + const int64_t last_index = indices[last_offset]; + if (!(candidate > last_value + || (candidate == last_value + && candidate_index < (uint32_t)last_index))) { + continue; + } + } +#endif + while (position < populated) { + const uint32_t output_offset = + (outer_index * k + position) * inner + inner_index; + const float existing = values[output_offset]; + const int64_t existing_index = indices[output_offset]; + if (candidate > existing + || (candidate == existing + && candidate_index < (uint32_t)existing_index)) { + break; + } + ++position; + } + if (position >= k) { + continue; + } + { + uint32_t shift = + populated < k ? populated : k - 1u; + while (shift > position) { + const uint32_t destination = + (outer_index * k + shift) * inner + inner_index; + const uint32_t source = + (outer_index * k + shift - 1u) * inner + + inner_index; + values[destination] = values[source]; + indices[destination] = indices[source]; + --shift; + } + } + values[(outer_index * k + position) * inner + inner_index] = + candidate; + indices[(outer_index * k + position) * inner + inner_index] = + (int64_t)candidate_index; + if (populated < k) { + ++populated; + } + } + if (populated != k) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + } + } + return YR_STATUS_OK; +} + + +static uint32_t yr_unsqueeze( + const struct yr_tensor_desc *input_desc, + const struct yr_tensor_desc *axes_desc, + const struct yr_tensor_desc *output_desc, + const int64_t *axes, + const uint8_t *input, + uint8_t *output) +{ + uint32_t seen = 0u; + uint32_t axis_index; + if (yr_tensor_dtype(axes_desc) != YR_DTYPE_INT64 + || output_desc->rank != input_desc->rank + axes_desc->elements + || output_desc->rank > 6u) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + for (axis_index = 0u; axis_index < axes_desc->elements; ++axis_index) { + int64_t axis = axes[axis_index]; + if (axis < 0) { + axis += (int64_t)output_desc->rank; + } + if (axis < 0 || axis >= (int64_t)output_desc->rank + || (seen & (1u << (uint32_t)axis)) != 0u + || output_desc->dims[axis] != 1u) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + seen |= 1u << (uint32_t)axis; + } + { + uint32_t input_dimension = 0u; + uint32_t output_dimension; + for (output_dimension = 0u; + output_dimension < output_desc->rank; + ++output_dimension) { + if ((seen & (1u << output_dimension)) == 0u) { + if (input_dimension >= input_desc->rank + || output_desc->dims[output_dimension] + != input_desc->dims[input_dimension++]) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + } + } + if (input_dimension != input_desc->rank) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + } + return yr_copy_tensor(input_desc, output_desc, input, output); +} + + +static uint32_t yr_tile( + const struct yr_tensor_desc *input_desc, + const struct yr_tensor_desc *repeats_desc, + const struct yr_tensor_desc *output_desc, + const int64_t *repeats, + const uint8_t *input, + uint8_t *output) +{ + uint32_t input_strides[6] = {0u, 0u, 0u, 0u, 0u, 0u}; + uint32_t coordinates[6] = {0u, 0u, 0u, 0u, 0u, 0u}; + uint32_t element_bytes = yr_dtype_bytes(yr_tensor_dtype(input_desc)); + uint32_t dimension; + uint32_t output_index; + if (yr_tensor_dtype(repeats_desc) != YR_DTYPE_INT64 + || repeats_desc->elements != input_desc->rank + || output_desc->rank != input_desc->rank + || yr_tensor_dtype(output_desc) != yr_tensor_dtype(input_desc) + || input_desc->rank == 0u || input_desc->rank > 6u + || element_bytes == 0u) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + input_strides[input_desc->rank - 1u] = 1u; + for (dimension = input_desc->rank - 1u; dimension > 0u; --dimension) { + input_strides[dimension - 1u] = + input_strides[dimension] * input_desc->dims[dimension]; + } + for (dimension = 0u; dimension < input_desc->rank; ++dimension) { + if (repeats[dimension] <= 0 + || repeats[dimension] > (int64_t)UINT32_MAX + || output_desc->dims[dimension] + != input_desc->dims[dimension] + * (uint32_t)repeats[dimension]) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + } + for (output_index = 0u; output_index < output_desc->elements; + ++output_index) { + uint32_t remaining = output_index; + uint32_t input_index = 0u; + for (dimension = output_desc->rank; dimension > 0u; --dimension) { + const uint32_t dim = output_desc->dims[dimension - 1u]; + coordinates[dimension - 1u] = remaining % dim; + remaining /= dim; + } + for (dimension = 0u; dimension < input_desc->rank; ++dimension) { + input_index += + (coordinates[dimension] % input_desc->dims[dimension]) + * input_strides[dimension]; + } + yr_copy_bytes( + output + output_index * element_bytes, + input + input_index * element_bytes, + element_bytes); + } + return YR_STATUS_OK; +} + + +static uint32_t yr_gather_elements( + const struct yr_node_desc *node, + const struct yr_tensor_desc *data_desc, + const struct yr_tensor_desc *indices_desc, + const struct yr_tensor_desc *output_desc, + const uint8_t *data, + const int64_t *indices, + uint8_t *output) +{ + const int32_t axis = yr_normalize_axis(node->axis, data_desc->rank); + uint32_t data_strides[6] = {0u, 0u, 0u, 0u, 0u, 0u}; + uint32_t coordinates[6] = {0u, 0u, 0u, 0u, 0u, 0u}; + uint32_t element_bytes = yr_dtype_bytes(yr_tensor_dtype(data_desc)); + uint32_t dimension; + uint32_t output_index; + if (axis < 0 || data_desc->rank == 0u || data_desc->rank > 6u + || indices_desc->rank != data_desc->rank + || output_desc->rank != data_desc->rank + || !yr_same_shape(indices_desc, output_desc) + || yr_tensor_dtype(indices_desc) != YR_DTYPE_INT64 + || yr_tensor_dtype(output_desc) != yr_tensor_dtype(data_desc) + || element_bytes == 0u) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + data_strides[data_desc->rank - 1u] = 1u; + for (dimension = data_desc->rank - 1u; dimension > 0u; --dimension) { + data_strides[dimension - 1u] = + data_strides[dimension] * data_desc->dims[dimension]; + } + for (output_index = 0u; output_index < output_desc->elements; + ++output_index) { + uint32_t remaining = output_index; + uint32_t data_index = 0u; + int64_t selected = indices[output_index]; + if (selected < 0) { + selected += data_desc->dims[axis]; + } + if (selected < 0 || selected >= (int64_t)data_desc->dims[axis]) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + for (dimension = output_desc->rank; dimension > 0u; --dimension) { + const uint32_t dim = output_desc->dims[dimension - 1u]; + coordinates[dimension - 1u] = remaining % dim; + remaining /= dim; + } + for (dimension = 0u; dimension < data_desc->rank; ++dimension) { + const uint32_t coordinate = + dimension == (uint32_t)axis + ? (uint32_t)selected : coordinates[dimension]; + if (coordinate >= data_desc->dims[dimension]) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + data_index += coordinate * data_strides[dimension]; + } + yr_copy_bytes( + output + output_index * element_bytes, + data + data_index * element_bytes, + element_bytes); + } + return YR_STATUS_OK; +} + + +static uint32_t yr_integer_binary( + const struct yr_node_desc *node, + const struct yr_tensor_desc *left_desc, + const struct yr_tensor_desc *right_desc, + const struct yr_tensor_desc *output_desc, + const int64_t *left, + const int64_t *right, + int64_t *output, + uint32_t modulo, + uint32_t elem_lo, + uint32_t elem_hi) +{ + uint32_t index; + if (yr_tensor_dtype(left_desc) != YR_DTYPE_INT64 + || yr_tensor_dtype(right_desc) != YR_DTYPE_INT64 + || yr_tensor_dtype(output_desc) != YR_DTYPE_INT64 + || !yr_same_shape(left_desc, output_desc) + || right_desc->elements != 1u + || right[0] == 0 + || (modulo && node->fmod != 0)) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + for (index = elem_lo; index < elem_hi; ++index) { + output[index] = + modulo ? left[index] % right[0] : left[index] / right[0]; + } + return YR_STATUS_OK; +} + + +static uint32_t yr_cast( + const struct yr_node_desc *node, + const struct yr_tensor_desc *input_desc, + const struct yr_tensor_desc *output_desc, + const int64_t *input, + float *output, + uint32_t elem_lo, + uint32_t elem_hi) +{ + uint32_t index; + if (node->to != 1 /* ONNX TensorProto.FLOAT */ + || yr_tensor_dtype(input_desc) != YR_DTYPE_INT64 + || yr_tensor_dtype(output_desc) != YR_DTYPE_FLOAT + || !yr_same_shape(input_desc, output_desc)) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + for (index = elem_lo; index < elem_hi; ++index) { + /* + * The pinned Cast consumes class indices produced by Mod 80, hence + * every value is exactly representable as signed INT32 and FP32. + * Narrow only after checking the value. This deliberately makes the + * ET compiler emit the supported fcvt.s.w instruction instead of + * fcvt.s.l, which traps in the repository system emulator. + */ + if (input[index] < INT32_MIN || input[index] > INT32_MAX) { + return YR_STATUS_UNSUPPORTED_SHAPE; + } + output[index] = (float)(int32_t)input[index]; + } + return YR_STATUS_OK; +} + +#endif /* YR_MANIFEST_VERSION >= 2 */ + + +static uint64_t yr_fnv1a(const uint8_t *data, uint32_t bytes) +{ + uint64_t hash = 14695981039346656037ull; + uint32_t index; + for (index = 0; index < bytes; ++index) { + hash ^= data[index]; + hash *= 1099511628211ull; + } + return hash; +} + + +uint32_t yr_prepare_result( + uint8_t *device_base, struct yr_result_header *result) +{ + uint32_t reserved_index; + uint32_t workspace_index; + uint8_t *workspace; + + if (device_base == (uint8_t *)0 + || result != (struct yr_result_header *)( + device_base + YR_RESULT_DEVICE_OFFSET) + || !yr_memory_map_valid()) { + return YR_STATUS_BAD_MANIFEST; + } + + result->magic = YR_RESULT_MAGIC; + result->version = YR_RESULT_VERSION; + result->status = YR_STATUS_OK; + result->failed_node = 0xffffffffu; + result->failed_op = 0u; + result->first_node = YR_FIRST_NODE; + result->last_node = YR_LAST_NODE; + result->node_count = YR_NODE_COUNT; + result->tensor_count = YR_TENSOR_COUNT; + result->workspace_bytes = YR_WORKSPACE_BYTES; + result->input_blob_bytes = YR_INPUT_BLOB_BYTES; + result->weight_blob_bytes = YR_WEIGHT_BLOB_BYTES; + result->math_version = YR_MATH_VERSION; + for (reserved_index = 0u; reserved_index < 3u; ++reserved_index) { + result->reserved32[reserved_index] = 0u; + } + result->workspace_fnv1a = 0u; + for (reserved_index = 0u; reserved_index < 7u; ++reserved_index) { + result->reserved64[reserved_index] = 0u; + } + if (!yr_manifest_valid()) { + result->status = YR_STATUS_BAD_MANIFEST; + return YR_STATUS_BAD_MANIFEST; + } + workspace = + device_base + YR_RESULT_DEVICE_OFFSET + YR_RESULT_HEADER_BYTES; + for (workspace_index = 0u; workspace_index < YR_WORKSPACE_BYTES; + ++workspace_index) { + workspace[workspace_index] = 0u; + } + return YR_STATUS_OK; +} + + +#ifndef YR_SILU_FUSE +#define YR_SILU_FUSE 1 +#endif + +#ifndef YR_SILU_CONV_FUSE +#define YR_SILU_CONV_FUSE 0 +#endif + +/* + * Split MatMul across harts by whole output rows. Each hart owns a contiguous + * row range, and since a row is the last dimension of the output (a multiple of + * sixteen for this graph's MatMuls) each hart's slice is cache-line aligned and + * disjoint, the same safe pattern the parallel elementwise ops use. Reuses the + * is_parallel_ew publish path with a row-aligned element range. + */ +#ifndef YR_MATMUL_MH +#define YR_MATMUL_MH 1 +#endif + +/* + * Split MaxPool across harts by output channel. Each hart pools a contiguous + * channel range whose output plane is a multiple of sixteen, so its slice is + * cache-line aligned and disjoint. Shares the generic struct_stride path that + * carries the per-unit output size so the is_parallel_ew publish covers exactly + * the channels this hart wrote. + */ +#ifndef YR_MAXPOOL_MH +#define YR_MAXPOOL_MH 1 +#endif + +/* + * Split Transpose across harts by output element. Each output element is an + * independent scatter read followed by a contiguous write, so a hart owning a + * cache-line-aligned output range writes a disjoint slice, the plain parallel + * elementwise pattern. Float output only, so the is_parallel_ew publish stride + * of one float per element is right. + */ +#ifndef YR_TRANSPOSE_MH +#define YR_TRANSPOSE_MH 1 +#endif + +/* + * Split Concat across harts by output element. Each output element copies from + * exactly one input at a position fixed by its own flat index, so a hart owning + * a cache-line-aligned output range writes a disjoint slice, the plain parallel + * elementwise pattern. Float output only, so the is_parallel_ew publish stride + * of one float per element is right. + */ +#ifndef YR_CONCAT_MH +#define YR_CONCAT_MH 1 +#endif + +/* + * Split Softmax across harts by outer group. Each outer group is an independent + * softmax over the axis (with inner stride) whose output occupies a contiguous + * block of axis_size*inner floats, so a hart owning a whole number of those + * blocks writes a disjoint, cache-line-aligned slice. Shares the struct_stride + * path with that block as the unit. A softmax with a single outer group (outer + * == 1) stays on hart 0, correct but not split. + */ +#ifndef YR_SOFTMAX_MH +#define YR_SOFTMAX_MH 1 +#endif + + +/* + * Reshape across harts, off by default. Reshape materialises its output as a + * flat one-to-one copy of the input (yr_reshape ends in yr_copy_tensor) and + * otherwise runs on hart 0 alone; it is about 3 percent of the graph's output + * traffic. Because it is a single output whose element i equals input element i, + * each hart can copy its published cache-line-aligned element range straight + * through the generic is_parallel_ew publish, no bespoke path needed. Enabled + * only when input and output hold the same float element count in aligned + * workspace; any other shape falls back to the serial yr_reshape, keeping the + * output bit-identical. + */ +#ifndef YR_RESHAPE_MH +#define YR_RESHAPE_MH 1 +#endif + +/* + * ReduceMax across harts, off by default. The head reduces [1,8400,80] to + * [1,8400] (max over the class axis) on hart 0 alone, reading 2.7 MB in the + * serial topk_selection tail. Each output element is an independent reduction, + * so harts split the flat output range in cache-line-aligned slices through the + * generic is_parallel_ew publish. Same max in the same order, bit-identical. + */ +#ifndef YR_REDUCEMAX_MH +#define YR_REDUCEMAX_MH 1 +#endif + +/* + * TopK O(1) early reject. The selection keeps a sorted top-k list; a candidate + * that cannot beat the current k-th (smallest kept) element can never enter, so + * once the list is full reject such a candidate in one compare instead of + * scanning all k positions. Bit-identical to the plain insertion (same kept + * set, same order, same tie-break), it only skips the doomed full scan, which + * is the whole cost when most candidates are rejected. Stays on hart 0. + */ +#ifndef YR_TOPK_FAST +#define YR_TOPK_FAST 1 +#endif + + +#if YR_SILU_FUSE || YR_SILU_CONV_FUSE +/* + * A SiLU is a Sigmoid whose output feeds a Mul that also takes the Sigmoid's + * own input, giving out = x * sigmoid(x). When node sig_index is that Sigmoid + * and the very next node is that Mul, the pair folds into a single yr_silu + * pass written into the Mul output, with the Sigmoid writing nothing. This + * checks the pattern on the static node list so every hart decides the same + * way, and only when both nodes sit in one span (sig_index + 1 <= last_node) + * so a stage boundary never splits a pair into a half-fused state. Each hart + * still reaches the per-node barrier once for each of the two nodes, so the + * fold changes no barrier count. + */ +static int yr_silu_pair(uint32_t sig_index, uint32_t last_node) +{ + const struct yr_node_desc *sig; + const struct yr_node_desc *mul; + uint32_t x_tensor, s_tensor; + if (sig_index >= last_node) { + return 0; + } + sig = &yr_nodes[sig_index]; + mul = &yr_nodes[sig_index + 1u]; + if (sig->op != YR_OP_SIGMOID || mul->op != YR_OP_MUL + || sig->input_count != 1u || sig->output_count != 1u + || mul->input_count != 2u || mul->output_count != 1u) { + return 0; + } + x_tensor = sig->inputs[0]; + s_tensor = sig->outputs[0]; + return (mul->inputs[0] == x_tensor && mul->inputs[1] == s_tensor) + || (mul->inputs[0] == s_tensor && mul->inputs[1] == x_tensor); +} +#endif + +#if YR_SILU_CONV_FUSE +/* + * True when this Conv is immediately followed by its own SiLU, that is node + * conv_index + 1 is the Sigmoid and conv_index + 2 the Mul of a fuseable SiLU + * pair whose x input is this Conv's output. All three sit in one span. Lets the + * Conv apply the SiLU to its just-written output slice while it is still warm + * in this hart's L1, publishing the Mul output so the Conv result never has to + * go out to DRAM and come back through two separate elementwise nodes. + */ +static int yr_silu_conv_at(uint32_t conv_index, uint32_t last_node) +{ + const struct yr_node_desc *conv; + if (conv_index + 2u > last_node) { + return 0; + } + conv = &yr_nodes[conv_index]; + if (conv->op != YR_OP_CONV || conv->output_count < 1u) { + return 0; + } + if (!yr_silu_pair(conv_index + 1u, last_node)) { + return 0; + } + return yr_nodes[conv_index + 1u].inputs[0] == conv->outputs[0]; +} +#endif + + +uint32_t yr_run_node_span( + uint8_t *device_base, + struct yr_result_header *result, + uint32_t first_local_node, + uint32_t last_local_node) +{ + uint32_t node_index; + uint32_t status = YR_STATUS_OK; +#if YR_SILU_CONV_FUSE + uint32_t silu_conv_done = 0xFFFFFFFFu; +#endif + + if (device_base == (uint8_t *)0 + || result == (struct yr_result_header *)0 + || first_local_node > last_local_node + || last_local_node >= YR_NODE_COUNT) { + if (result != (struct yr_result_header *)0) { + result->status = YR_STATUS_BAD_MANIFEST; + } + return YR_STATUS_BAD_MANIFEST; + } + for (node_index = first_local_node; + node_index <= last_local_node; + ++node_index) { + const struct yr_node_desc *node = &yr_nodes[node_index]; + const struct yr_tensor_desc *in0; + const struct yr_tensor_desc *out0; + uint8_t *in0_raw; + uint8_t *out0_raw; + uint32_t output_index; + uint32_t ew_lo = 0u; + uint32_t ew_hi = 0u; + int silu_skip_publish = 0; +#if YR_MATMUL_MH + int is_matmul_mh = 0; +#endif +#if YR_SOFTMAX_MH + int sm_inner_mh = 0; +#endif +#if YR_SPLIT_MH + int is_split_mh = 0; +#endif + uint32_t struct_stride = 0u; + /* + * Nodes fall into three execution classes. + * + * Conv is split across all 16 harts by output channel; each hart + * computes and publishes only its own channels, so there is no + * redundant work and no shared output line to race on. + * + * Plain elementwise ops (SiLU's Sigmoid and Mul, plus Add/Sub) are + * also split across all 16 harts, here by a cache-line-aligned slice + * of the flat output (see yr_hart_elem_range and the is_parallel_ew + * set below). Output element i depends only on input element i, so a + * disjoint slice per hart is the same provably-safe pattern Conv uses. + * This matters because a Sigmoid/Mul pair trails almost every Conv, + * and running that pair on one hart while the other 15 wait was a + * serial tail out of all proportion to its arithmetic. + * + * Everything else (Concat, Split, Transpose, Reshape, TopK, and the + * rest) still runs on hart 0 alone. An earlier build ran these + * redundantly on all 16 harts and each published only a cache-line + * slice; that corrupted data partway through the graph, because L1 + * is minion local and not coherent and the unpublished lines evicted + * later over live tensors. Partitioning those structural ops safely + * is harder than for pure elementwise, so they stay single-hart until + * measured to be worth it. + * + * Whichever class it is, every hart calls the per-node barrier exactly + * once, so a hart that skips a node still waits for the hart(s) that + * ran it before reading the next node's input. + */ + int is_parallel_ew = 0; + if ((node->op == YR_OP_SIGMOID || node->op == YR_OP_MUL +#if YR_MANIFEST_VERSION >= 2 + || node->op == YR_OP_ADD || node->op == YR_OP_SUB +#endif + ) + && node->output_count == 1u + && node->outputs[0] < YR_TENSOR_COUNT) { + const struct yr_tensor_desc *ew_out = + &yr_tensors[node->outputs[0]]; + /* + * Only split the node across harts when its output sits on whole, + * aligned cache lines: a base that is a multiple of 64 bytes and a + * size that is a multiple of 64. Then each hart's 16-float-aligned + * slice covers complete lines that no other hart or neighbouring + * tensor shares, so the disjoint evicts never race on a line, which + * is the failure that made an earlier redundant version corrupt + * data. Every parallel-elementwise output in the pinned graph + * already satisfies this; the check keeps a future manifest that + * did not from silently corrupting by leaving that node on the + * single-hart path. Static manifest data, so every hart decides + * identically. + */ + if (ew_out->storage == YR_STORAGE_WORKSPACE + && (ew_out->offset % 64u) == 0u + && (ew_out->nbytes % 64u) == 0u) { + is_parallel_ew = 1; + } + } +#if YR_MATMUL_MH + if (node->op == YR_OP_MATMUL && node->output_count == 1u + && node->outputs[0] < YR_TENSOR_COUNT) { + const struct yr_tensor_desc *mm_out = + &yr_tensors[node->outputs[0]]; + const uint32_t mm_last = mm_out->dims[mm_out->rank - 1u]; + if (mm_out->storage == YR_STORAGE_WORKSPACE + && (mm_out->offset % 64u) == 0u + && (mm_out->nbytes % 64u) == 0u + && mm_last != 0u && (mm_last % 16u) == 0u) { + is_parallel_ew = 1; + is_matmul_mh = 1; + } + } +#endif +#if YR_MAXPOOL_MH + if (node->op == YR_OP_MAXPOOL && node->output_count == 1u + && node->outputs[0] < YR_TENSOR_COUNT) { + const struct yr_tensor_desc *mp_out = + &yr_tensors[node->outputs[0]]; + if (mp_out->rank == 4u && mp_out->dims[0] == 1u + && mp_out->storage == YR_STORAGE_WORKSPACE + && (mp_out->offset % 64u) == 0u + && (mp_out->nbytes % 64u) == 0u + && mp_out->dims[1] != 0u + && ((mp_out->dims[2] * mp_out->dims[3]) % 16u) == 0u) { + is_parallel_ew = 1; + struct_stride = mp_out->dims[2] * mp_out->dims[3]; + } + } +#endif +#if YR_TRANSPOSE_MH + if (node->op == YR_OP_TRANSPOSE && node->output_count == 1u + && node->outputs[0] < YR_TENSOR_COUNT) { + const struct yr_tensor_desc *tp_out = + &yr_tensors[node->outputs[0]]; + if (tp_out->storage == YR_STORAGE_WORKSPACE + && yr_tensor_dtype(tp_out) == YR_DTYPE_FLOAT + && (tp_out->offset % 64u) == 0u + && (tp_out->nbytes % 64u) == 0u) { + is_parallel_ew = 1; + } + } +#endif +#if YR_CONCAT_MH + if (node->op == YR_OP_CONCAT && node->output_count == 1u + && node->outputs[0] < YR_TENSOR_COUNT) { + const struct yr_tensor_desc *cc_out = + &yr_tensors[node->outputs[0]]; + if (cc_out->storage == YR_STORAGE_WORKSPACE + && yr_tensor_dtype(cc_out) == YR_DTYPE_FLOAT + && (cc_out->offset % 64u) == 0u + && (cc_out->nbytes % 64u) == 0u) { + is_parallel_ew = 1; + } + } +#endif +#if YR_SPLIT_MH + /* + * Split of the outer==1 shape (dims before the axis multiply to one). + * every output is a whole number of cache lines in workspace, so each + * hart can copy and publish a disjoint line-aligned slice of each + * output. is_parallel_ew keeps all harts on the node and takes the + * shared publish barrier; is_split_mh routes the dispatch to the + * multi-output copy. Any other shape leaves both clear and stays serial. + */ + if (node->op == YR_OP_SPLIT && node->output_count >= 1u + && node->output_count <= 3u + && node->input_count == 2u + && node->inputs[0] < YR_TENSOR_COUNT) { + const struct yr_tensor_desc *sp_in = &yr_tensors[node->inputs[0]]; + const int32_t sp_axis = + yr_normalize_axis(node->axis, sp_in->rank); + int sp_ok = sp_axis >= 0 + && yr_tensor_dtype(sp_in) == YR_DTYPE_FLOAT; + uint32_t sp_dim, sp_outer = 1u, sp_oi; + for (sp_dim = 0u; sp_ok && sp_dim < (uint32_t)sp_axis; ++sp_dim) { + sp_outer *= sp_in->dims[sp_dim]; + } + if (sp_outer != 1u) { + sp_ok = 0; + } + for (sp_oi = 0u; sp_ok && sp_oi < node->output_count; ++sp_oi) { + if (node->outputs[sp_oi] >= YR_TENSOR_COUNT) { + sp_ok = 0; + break; + } + { + const struct yr_tensor_desc *sp_out = + &yr_tensors[node->outputs[sp_oi]]; + if (sp_out->storage != YR_STORAGE_WORKSPACE + || yr_tensor_dtype(sp_out) != YR_DTYPE_FLOAT + || (sp_out->offset % 64u) != 0u + || (sp_out->nbytes % 64u) != 0u) { + sp_ok = 0; + } + } + } + if (sp_ok) { + is_parallel_ew = 1; + is_split_mh = 1; + } + } +#endif +#if YR_RESHAPE_MH + /* + * Reshape is a flat one-to-one copy, so element i of the output equals + * element i of the input. When the output is aligned float workspace and + * element counts match, each hart copies its published range through the + * generic is_parallel_ew path (the reshape dispatch does the ranged copy + * in place of yr_reshape's full copy). + */ + if (node->op == YR_OP_RESHAPE && node->output_count == 1u + && node->input_count == 2u + && node->inputs[0] < YR_TENSOR_COUNT + && node->outputs[0] < YR_TENSOR_COUNT) { + const struct yr_tensor_desc *rs_in = &yr_tensors[node->inputs[0]]; + const struct yr_tensor_desc *rs_out = &yr_tensors[node->outputs[0]]; + if (rs_out->storage == YR_STORAGE_WORKSPACE + && yr_tensor_dtype(rs_out) == YR_DTYPE_FLOAT + && yr_tensor_dtype(rs_in) == YR_DTYPE_FLOAT + && rs_in->elements == rs_out->elements + && (rs_out->offset % 64u) == 0u + && (rs_out->nbytes % 64u) == 0u) { + is_parallel_ew = 1; + } + } +#endif +#if YR_REDUCEMAX_MH + /* + * ReduceMax output is one element per (outer, inner) reduction, all + * independent, so harts split the flat output through the generic + * is_parallel_ew publish (the dispatch passes the hart's ew range). + */ + if (node->op == YR_OP_REDUCEMAX && node->output_count == 1u + && node->outputs[0] < YR_TENSOR_COUNT) { + const struct yr_tensor_desc *rm_out = &yr_tensors[node->outputs[0]]; + if (rm_out->storage == YR_STORAGE_WORKSPACE + && yr_tensor_dtype(rm_out) == YR_DTYPE_FLOAT + && (rm_out->offset % 64u) == 0u + && (rm_out->nbytes % 64u) == 0u) { + is_parallel_ew = 1; + } + } +#endif +#if YR_SOFTMAX_MH + if (node->op == YR_OP_SOFTMAX && node->output_count == 1u + && node->outputs[0] < YR_TENSOR_COUNT) { + const struct yr_tensor_desc *sm_out = + &yr_tensors[node->outputs[0]]; + const int32_t sm_axis = + yr_normalize_axis(node->axis, sm_out->rank); + if (sm_axis >= 0 + && sm_out->storage == YR_STORAGE_WORKSPACE + && yr_tensor_dtype(sm_out) == YR_DTYPE_FLOAT + && (sm_out->offset % 64u) == 0u + && (sm_out->nbytes % 64u) == 0u) { + uint32_t sm_inner = 1u; + uint32_t sm_outer = 1u; + uint32_t sm_dim; + uint32_t sm_block; + for (sm_dim = (uint32_t)sm_axis + 1u; + sm_dim < sm_out->rank; ++sm_dim) { + sm_inner *= sm_out->dims[sm_dim]; + } + for (sm_dim = 0u; sm_dim < (uint32_t)sm_axis; ++sm_dim) { + sm_outer *= sm_out->dims[sm_dim]; + } + sm_block = sm_out->dims[sm_axis] * sm_inner; + if (sm_outer > 1u && sm_block != 0u + && (sm_block % 16u) == 0u) { + /* Many outer groups: split by outer, each a contiguous + * cache-line-aligned block, published by the generic + * is_parallel_ew path. */ + is_parallel_ew = 1; + struct_stride = sm_block; + } else if (sm_outer == 1u && sm_inner >= 32u + && (sm_inner % 16u) == 0u) { + /* Single outer group with a wide inner: split by inner + * columns in whole cache lines. Each hart's output is + * axis_size disjoint line-aligned strips, published by the + * softmax dispatch below (silu_skip_publish suppresses the + * generic single-range publish). */ + is_parallel_ew = 1; + sm_inner_mh = 1; + } + } + } +#endif + if (node->op != YR_OP_CONV && !is_parallel_ew && yr_hart_id() != 0u) { + yr_hart_barrier(); + continue; + } + if (node->input_count == 0u || node->output_count == 0u + || node->inputs[0] >= YR_TENSOR_COUNT + || node->outputs[0] >= YR_TENSOR_COUNT) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + for (output_index = 0u; + output_index < node->output_count; + ++output_index) { + if (output_index >= 3u + || node->outputs[output_index] >= YR_TENSOR_COUNT + || yr_tensors[node->outputs[output_index]].storage + != YR_STORAGE_WORKSPACE) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + } + in0 = &yr_tensors[node->inputs[0]]; + out0 = &yr_tensors[node->outputs[0]]; + in0_raw = yr_tensor_raw(device_base, in0); + out0_raw = yr_tensor_raw(device_base, out0); + if (in0_raw == (uint8_t *)0 || out0_raw == (uint8_t *)0) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + if (is_parallel_ew) { +#if YR_MATMUL_MH + if (is_matmul_mh) { + const uint32_t mm_last = out0->dims[out0->rank - 1u]; + uint32_t mm_r_lo, mm_r_hi; + yr_hart_range(out0->elements / mm_last, &mm_r_lo, &mm_r_hi); + ew_lo = mm_r_lo * mm_last; + ew_hi = mm_r_hi * mm_last; + } else +#endif + if (struct_stride != 0u) { + uint32_t s_lo, s_hi; + yr_hart_range(out0->elements / struct_stride, &s_lo, &s_hi); + ew_lo = s_lo * struct_stride; + ew_hi = s_hi * struct_stride; + } else { + yr_hart_elem_range(out0->elements, &ew_lo, &ew_hi); + } + } + + if (node->op == YR_OP_CONV) { + const struct yr_tensor_desc *weights; + const struct yr_tensor_desc *bias_desc = 0; + const float *bias_data = 0; + uint32_t tensor_oc_lo = 0u, tensor_oc_hi = 0u; + if ((node->input_count != 2u && node->input_count != 3u) + || node->inputs[1] >= YR_TENSOR_COUNT) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + weights = &yr_tensors[node->inputs[1]]; + if (weights->storage != YR_STORAGE_WEIGHTS + || yr_tensor_ptr(device_base, weights) == (float *)0) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + if (node->input_count == 3u) { + if (node->inputs[2] >= YR_TENSOR_COUNT) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + bias_desc = &yr_tensors[node->inputs[2]]; + bias_data = yr_tensor_ptr(device_base, bias_desc); + if (bias_desc->storage != YR_STORAGE_WEIGHTS + || bias_data == (float *)0) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + } +#if YR_SILU_CONV_FUSE + int silu_conv_here = 0; + if (yr_silu_conv_at(node_index, last_local_node)) { + const struct yr_tensor_desc *m_desc = + &yr_tensors[yr_nodes[node_index + 2u].outputs[0]]; + uint8_t *m_raw = yr_tensor_raw(device_base, m_desc); + if (m_raw != (uint8_t *)0 && yr_same_shape(out0, m_desc)) { + /* + * Point the conv output at the Mul tensor so it writes M + * straight away. C is never materialized, which avoids + * leaving unpublished dirty C lines in this minion's L1 + * that could later evict over a tensor reusing C's region. + */ + out0_raw = m_raw; + silu_conv_here = 1; + } + } +#endif + /* + * yr_conv_tensor() partitions its own work per hart, computing + * only its tile-aligned slice of output channels and reporting + * that slice back through tensor_oc_lo/tensor_oc_hi so the + * publish below covers exactly what this hart wrote. Harts that + * own no tile for this node get an empty range and publish + * nothing, which is why the range comes back from the callee + * instead of being assumed here. + * + * The mode switch this path depends on now happens once per hart + * in yr_conv_tensor_init() at runner entry, so nothing about it + * is per-node or shared between harts any more. + */ + if (YR_CONV_TENSOR_ENABLED + && yr_conv_tensor( + node, in0, weights, bias_desc, out0, (float *)in0_raw, + yr_tensor_ptr(device_base, weights), bias_data, + (float *)out0_raw, &tensor_oc_lo, &tensor_oc_hi) != 0u) { + status = YR_STATUS_OK; + } else { + status = yr_conv( + node, in0, weights, bias_desc, out0, (float *)in0_raw, + yr_tensor_ptr(device_base, weights), bias_data, + (float *)out0_raw); + yr_hart_range(out0->dims[1], &tensor_oc_lo, &tensor_oc_hi); + } + if (status == YR_STATUS_OK) { + const uint32_t oc_lo = tensor_oc_lo; + const uint32_t oc_hi = tensor_oc_hi; + if (oc_hi > oc_lo) { + const uint32_t plane = out0->dims[2] * out0->dims[3]; + const uint32_t plane_bytes = plane * 4u; + const uint32_t batch_bytes = out0->dims[1] * plane_bytes; + uint32_t batch_index; +#if YR_SILU_CONV_FUSE + if (silu_conv_here) { + /* + * The conv wrote the Mul output tensor directly, so C + * was never materialized. Apply the SiLU in place on + * that slice, still warm in this hart's L1, then let + * the publish below evict M. The Sigmoid and Mul that + * follow skip their work and keep their barrier. + */ + for (batch_index = 0u; + batch_index < out0->dims[0]; ++batch_index) { + const uint32_t base_i = + batch_index * out0->dims[1] * plane; + (void)yr_silu( + out0, out0, (const float *)out0_raw, + (float *)out0_raw, base_i + oc_lo * plane, + base_i + oc_hi * plane); + } + silu_conv_done = node_index + 2u; + } +#endif + for (batch_index = 0u; batch_index < out0->dims[0]; + ++batch_index) { + yr_publish( + out0_raw + (uint64_t)batch_index * batch_bytes + + (uint64_t)oc_lo * plane_bytes, + (oc_hi - oc_lo) * plane_bytes); + } + } + } + yr_hart_barrier(); + } else if (node->op == YR_OP_SIGMOID) { + if (node->input_count != 1u) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } +#if YR_SILU_CONV_FUSE + if (silu_conv_done == node_index + 1u) { + /* + * This Sigmoid's SiLU was already applied by the Conv two + * nodes back, which wrote the Mul output directly. Skip the + * work and the publish, keep the barrier so every hart stays + * in step. + */ + status = YR_STATUS_OK; + silu_skip_publish = 1; + } else +#endif +#if YR_SILU_FUSE + if (yr_silu_pair(node_index, last_local_node)) { + /* + * The next node is this Sigmoid's Mul, and yr_silu there does + * x * sigmoid(x) in one pass, so the sigmoid output is neither + * written nor published here. The barrier still runs below so + * every hart stays in step. + */ + status = YR_STATUS_OK; + silu_skip_publish = 1; + } else +#endif + { + status = yr_sigmoid( + in0, out0, (float *)in0_raw, (float *)out0_raw, + ew_lo, ew_hi); + } + } else if (node->op == YR_OP_MUL) { + const struct yr_tensor_desc *in1; + uint8_t *in1_raw; + if (node->input_count != 2u + || node->inputs[1] >= YR_TENSOR_COUNT) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + in1 = &yr_tensors[node->inputs[1]]; + in1_raw = yr_tensor_raw(device_base, in1); + if (in1_raw == (uint8_t *)0) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } +#if YR_SILU_CONV_FUSE + if (silu_conv_done == node_index) { + /* + * The Conv three nodes back already wrote this Mul output as + * silu of its result. Skip work and publish, keep the barrier. + */ + status = YR_STATUS_OK; + silu_skip_publish = 1; + } else +#endif +#if YR_SILU_FUSE + if (node_index > first_local_node + && yr_silu_pair(node_index - 1u, last_local_node)) { + /* + * Second half of a SiLU whose Sigmoid was folded away above. + * x is the Mul input that is the Sigmoid's own input; the + * other input is the sigmoid output, never written, so only x + * is read and yr_silu recomputes sigmoid(x) inline. + */ + const uint32_t x_tensor = yr_nodes[node_index - 1u].inputs[0]; + if (node->inputs[0] == x_tensor) { + status = yr_silu(in0, out0, (const float *)in0_raw, + (float *)out0_raw, ew_lo, ew_hi); + } else { + status = yr_silu(in1, out0, (const float *)in1_raw, + (float *)out0_raw, ew_lo, ew_hi); + } + } else +#endif + { + status = yr_mul( + in0, in1, out0, (float *)in0_raw, + (float *)in1_raw, (float *)out0_raw, ew_lo, ew_hi); + } + } else if (node->op == YR_OP_CONCAT) { + const struct yr_tensor_desc *input_descs[4] = {0, 0, 0, 0}; + const float *input_data[4] = {0, 0, 0, 0}; + uint32_t input_index; + if (node->input_count == 0u || node->input_count > 4u) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + for (input_index = 0u; input_index < node->input_count; + ++input_index) { + if (node->inputs[input_index] >= YR_TENSOR_COUNT) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + input_descs[input_index] = + &yr_tensors[node->inputs[input_index]]; + input_data[input_index] = + yr_tensor_ptr(device_base, input_descs[input_index]); + } + { + uint32_t cc_lo = 0u; + uint32_t cc_hi = out0->elements; + if (is_parallel_ew) { + cc_lo = ew_lo; + cc_hi = ew_hi; + } + status = yr_concat( + node, input_descs, out0, input_data, (float *)out0_raw, + cc_lo, cc_hi); + } +#if YR_MANIFEST_VERSION >= 2 + } else if (node->op == YR_OP_ADD || node->op == YR_OP_SUB) { + const struct yr_tensor_desc *in1; + uint8_t *in1_raw; + if (node->input_count != 2u + || node->output_count != 1u + || node->inputs[1] >= YR_TENSOR_COUNT) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + in1 = &yr_tensors[node->inputs[1]]; + in1_raw = yr_tensor_raw(device_base, in1); + if (in1_raw == (uint8_t *)0) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + status = yr_add_sub( + in0, in1, out0, (float *)in0_raw, (float *)in1_raw, + (float *)out0_raw, node->op == YR_OP_SUB, ew_lo, ew_hi); + } else if (node->op == YR_OP_SPLIT) { + const struct yr_tensor_desc *sizes_desc; + const struct yr_tensor_desc *output_descs[3] = {0, 0, 0}; + uint8_t *output_data[3] = {0, 0, 0}; + uint8_t *sizes_raw; + if (node->input_count != 2u + || node->inputs[1] >= YR_TENSOR_COUNT + || node->output_count > 3u) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + sizes_desc = &yr_tensors[node->inputs[1]]; + sizes_raw = yr_tensor_raw(device_base, sizes_desc); + for (output_index = 0u; + output_index < node->output_count; + ++output_index) { + output_descs[output_index] = + &yr_tensors[node->outputs[output_index]]; + output_data[output_index] = + yr_tensor_raw(device_base, output_descs[output_index]); + } + if (sizes_raw == (uint8_t *)0) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } +#if YR_SPLIT_MH + if (is_split_mh) { + /* Every hart copies and publishes its own slice of each output, + * so suppress the generic single-output publish below. */ + silu_skip_publish = 1; + status = yr_split_mh( + node, in0, sizes_desc, output_descs, in0_raw, + (const int64_t *)sizes_raw, output_data); + } else +#endif + status = yr_split( + node, in0, sizes_desc, output_descs, in0_raw, + (const int64_t *)sizes_raw, output_data); + } else if (node->op == YR_OP_MAXPOOL) { + if (node->input_count != 1u || node->output_count != 1u) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + { + uint32_t mp_lo = 0u; + uint32_t mp_hi = out0->dims[1]; + if (struct_stride != 0u) { + mp_lo = ew_lo / struct_stride; + mp_hi = ew_hi / struct_stride; + } + status = yr_maxpool( + node, in0, out0, (float *)in0_raw, (float *)out0_raw, + mp_lo, mp_hi); + } + } else if (node->op == YR_OP_RESIZE) { + const struct yr_tensor_desc *scales_desc; + uint8_t *scales_raw; + if (node->input_count != 3u || node->output_count != 1u + || node->inputs[1] != UINT32_MAX + || node->inputs[2] >= YR_TENSOR_COUNT) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + scales_desc = &yr_tensors[node->inputs[2]]; + scales_raw = yr_tensor_raw(device_base, scales_desc); + if (scales_raw == (uint8_t *)0) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + status = yr_resize( + node, in0, scales_desc, out0, (float *)in0_raw, + (const float *)scales_raw, (float *)out0_raw, + 0u, out0->dims[1]); + } else if (node->op == YR_OP_MATMUL) { + const struct yr_tensor_desc *in1; + uint8_t *in1_raw; + if (node->input_count != 2u || node->output_count != 1u + || node->inputs[1] >= YR_TENSOR_COUNT) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + in1 = &yr_tensors[node->inputs[1]]; + in1_raw = yr_tensor_raw(device_base, in1); + if (in1_raw == (uint8_t *)0) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + { + const uint32_t mm_last = out0->dims[out0->rank - 1u]; + uint32_t mm_lo = 0u; + uint32_t mm_hi = mm_last != 0u ? out0->elements / mm_last : 0u; +#if YR_MATMUL_MH + if (is_matmul_mh) { + mm_lo = ew_lo / mm_last; + mm_hi = ew_hi / mm_last; + } +#endif + status = yr_matmul( + in0, in1, out0, (float *)in0_raw, (float *)in1_raw, + (float *)out0_raw, mm_lo, mm_hi); + } + } else if (node->op == YR_OP_SOFTMAX) { + uint32_t sm_o_lo = 0u; + uint32_t sm_o_hi = 0xffffffffu; + uint32_t sm_i_lo = 0u; + uint32_t sm_i_hi = 0xffffffffu; + if (node->input_count != 1u || node->output_count != 1u) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } +#if YR_SOFTMAX_MH + if (is_parallel_ew && struct_stride != 0u) { + sm_o_lo = ew_lo / struct_stride; + sm_o_hi = ew_hi / struct_stride; + } else if (sm_inner_mh) { + const int32_t sm_ax = + yr_normalize_axis(node->axis, out0->rank); + uint32_t sm_inner = 1u; + uint32_t sm_dim; + uint32_t sm_units; + uint32_t r_lo; + uint32_t r_hi; + for (sm_dim = (uint32_t)sm_ax + 1u; + sm_dim < out0->rank; ++sm_dim) { + sm_inner *= out0->dims[sm_dim]; + } + sm_units = sm_inner / 16u; + yr_hart_range(sm_units, &r_lo, &r_hi); + sm_i_lo = r_lo * 16u; + sm_i_hi = r_hi * 16u; + silu_skip_publish = 1; + } +#endif + status = yr_softmax( + node, in0, out0, (float *)in0_raw, (float *)out0_raw, + sm_o_lo, sm_o_hi, sm_i_lo, sm_i_hi); +#if YR_SOFTMAX_MH + if (sm_inner_mh && status == YR_STATUS_OK && sm_i_hi > sm_i_lo) { + const int32_t sm_ax = + yr_normalize_axis(node->axis, out0->rank); + uint32_t sm_inner = 1u; + uint32_t sm_outer = 1u; + uint32_t sm_dim; + uint32_t oo; + uint32_t kk; + uint32_t axsz = out0->dims[sm_ax]; + for (sm_dim = (uint32_t)sm_ax + 1u; + sm_dim < out0->rank; ++sm_dim) { + sm_inner *= out0->dims[sm_dim]; + } + for (sm_dim = 0u; sm_dim < (uint32_t)sm_ax; ++sm_dim) { + sm_outer *= out0->dims[sm_dim]; + } + for (oo = 0u; oo < sm_outer; ++oo) { + for (kk = 0u; kk < axsz; ++kk) { + const uint32_t sbase = + (oo * axsz + kk) * sm_inner + sm_i_lo; + yr_publish( + (const void *)(out0_raw + + (uint64_t)sbase * sizeof(float)), + (sm_i_hi - sm_i_lo) * (uint32_t)sizeof(float)); + } + } + } +#endif + } else if (node->op == YR_OP_RESHAPE) { + const struct yr_tensor_desc *shape_desc; + uint8_t *shape_raw; + if (node->input_count != 2u || node->output_count != 1u + || node->inputs[1] >= YR_TENSOR_COUNT) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + shape_desc = &yr_tensors[node->inputs[1]]; + shape_raw = yr_tensor_raw(device_base, shape_desc); + if (shape_raw == (uint8_t *)0) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } +#if YR_RESHAPE_MH + if (is_parallel_ew) { + /* Flat 1:1 copy: this hart copies its published element range. + * The generic is_parallel_ew publish below evicts exactly it. */ + if (ew_hi > ew_lo) { + yr_copy_bytes( + out0_raw + (uint64_t)ew_lo * sizeof(float), + in0_raw + (uint64_t)ew_lo * sizeof(float), + (ew_hi - ew_lo) * (uint32_t)sizeof(float)); + } + status = YR_STATUS_OK; + } else +#endif + status = yr_reshape( + in0, shape_desc, out0, (const int64_t *)shape_raw, + in0_raw, out0_raw); + } else if (node->op == YR_OP_FLATTEN) { + if (node->input_count != 1u || node->output_count != 1u) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + status = yr_flatten(node, in0, out0, in0_raw, out0_raw); + } else if (node->op == YR_OP_TRANSPOSE) { + if (node->input_count != 1u || node->output_count != 1u) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + { + uint32_t tp_lo = 0u; + uint32_t tp_hi = out0->elements; + if (is_parallel_ew) { + tp_lo = ew_lo; + tp_hi = ew_hi; + } + status = yr_transpose( + node, in0, out0, in0_raw, out0_raw, tp_lo, tp_hi); + } + } else if (node->op == YR_OP_REDUCEMAX) { + uint32_t rm_lo = 0u, rm_hi = 0u; + if (node->input_count != 1u || node->output_count != 1u) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + if (is_parallel_ew) { + rm_lo = ew_lo; + rm_hi = ew_hi; + } + status = yr_reduce_max( + node, in0, out0, (float *)in0_raw, (float *)out0_raw, + rm_lo, rm_hi); + } else if (node->op == YR_OP_TOPK) { + const struct yr_tensor_desc *k_desc; + const struct yr_tensor_desc *indices_desc; + uint8_t *k_raw; + uint8_t *indices_raw; + if (node->input_count != 2u || node->output_count != 2u + || node->inputs[1] >= YR_TENSOR_COUNT) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + k_desc = &yr_tensors[node->inputs[1]]; + indices_desc = &yr_tensors[node->outputs[1]]; + k_raw = yr_tensor_raw(device_base, k_desc); + indices_raw = yr_tensor_raw(device_base, indices_desc); + if (k_raw == (uint8_t *)0 + || indices_raw == (uint8_t *)0) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + status = yr_topk( + node, in0, k_desc, out0, indices_desc, + (float *)in0_raw, (const int64_t *)k_raw, + (float *)out0_raw, (int64_t *)indices_raw); + } else if (node->op == YR_OP_UNSQUEEZE) { + const struct yr_tensor_desc *axes_desc; + uint8_t *axes_raw; + if (node->input_count != 2u || node->output_count != 1u + || node->inputs[1] >= YR_TENSOR_COUNT) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + axes_desc = &yr_tensors[node->inputs[1]]; + axes_raw = yr_tensor_raw(device_base, axes_desc); + if (axes_raw == (uint8_t *)0) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + status = yr_unsqueeze( + in0, axes_desc, out0, (const int64_t *)axes_raw, + in0_raw, out0_raw); + } else if (node->op == YR_OP_TILE) { + const struct yr_tensor_desc *repeats_desc; + uint8_t *repeats_raw; + if (node->input_count != 2u || node->output_count != 1u + || node->inputs[1] >= YR_TENSOR_COUNT) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + repeats_desc = &yr_tensors[node->inputs[1]]; + repeats_raw = yr_tensor_raw(device_base, repeats_desc); + if (repeats_raw == (uint8_t *)0) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + status = yr_tile( + in0, repeats_desc, out0, (const int64_t *)repeats_raw, + in0_raw, out0_raw); + } else if (node->op == YR_OP_GATHERELEMENTS) { + const struct yr_tensor_desc *indices_desc; + uint8_t *indices_raw; + if (node->input_count != 2u || node->output_count != 1u + || node->inputs[1] >= YR_TENSOR_COUNT) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + indices_desc = &yr_tensors[node->inputs[1]]; + indices_raw = yr_tensor_raw(device_base, indices_desc); + if (indices_raw == (uint8_t *)0) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + status = yr_gather_elements( + node, in0, indices_desc, out0, in0_raw, + (const int64_t *)indices_raw, out0_raw); + } else if (node->op == YR_OP_MOD || node->op == YR_OP_DIV) { + const struct yr_tensor_desc *in1; + uint8_t *in1_raw; + uint32_t elem_lo, elem_hi; + if (node->input_count != 2u || node->output_count != 1u + || node->inputs[1] >= YR_TENSOR_COUNT) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + in1 = &yr_tensors[node->inputs[1]]; + in1_raw = yr_tensor_raw(device_base, in1); + if (in1_raw == (uint8_t *)0) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + elem_lo = 0u; elem_hi = out0->elements; + status = yr_integer_binary( + node, in0, in1, out0, (const int64_t *)in0_raw, + (const int64_t *)in1_raw, (int64_t *)out0_raw, + node->op == YR_OP_MOD, elem_lo, elem_hi); + } else if (node->op == YR_OP_CAST) { + uint32_t elem_lo, elem_hi; + if (node->input_count != 1u || node->output_count != 1u) { + status = YR_STATUS_BAD_MANIFEST; + goto fail; + } + elem_lo = 0u; elem_hi = out0->elements; + status = yr_cast( + node, in0, out0, (const int64_t *)in0_raw, + (float *)out0_raw, elem_lo, elem_hi); +#endif + } else { + status = YR_STATUS_UNSUPPORTED_OP; + } + + /* + * A parallel elementwise op wrote only its own cache-line-aligned + * slice of the single output, so each hart evicts exactly that slice; + * the slices are disjoint and line-aligned, so no two harts evict a + * shared line. Every other non-Conv op ran on hart 0 alone, so hart 0 + * evicts each output's full range and no other hart has a slice to + * publish. Either way the barrier must run on every hart whether or + * not the status is OK, to match the unconditional barrier the + * skipped harts already called; dropping it on failure would strand + * them waiting for a call that never comes. + */ + if (is_parallel_ew) { + if (status == YR_STATUS_OK && ew_hi > ew_lo && !silu_skip_publish) { + yr_publish(out0_raw + (uint64_t)ew_lo * sizeof(float), + (ew_hi - ew_lo) * (uint32_t)sizeof(float)); + } + yr_hart_barrier(); + } else if (node->op != YR_OP_CONV) { + if (status == YR_STATUS_OK && !silu_skip_publish) { + uint32_t output_publish_index; + for (output_publish_index = 0u; + output_publish_index < node->output_count; + ++output_publish_index) { + const struct yr_tensor_desc *published_desc = + &yr_tensors[node->outputs[output_publish_index]]; + uint8_t *published_raw = + yr_tensor_raw(device_base, published_desc); + if (published_raw != (uint8_t *)0 + && published_desc->nbytes > 0u) { + yr_publish(published_raw, published_desc->nbytes); + } + } + } + yr_hart_barrier(); + } + if (status != YR_STATUS_OK) { + goto fail; + } + } + /* + * Non-Conv nodes above no longer have a per-node barrier (only hart 0 + * ever runs them, so there is nothing to synchronize per node); this + * one barrier re-syncs every hart before the caller starts the next + * stage, whether or not this span's last node happened to be Conv. + */ + yr_hart_barrier(); + + return YR_STATUS_OK; + +fail: + result->status = status; + result->failed_node = yr_nodes[node_index].onnx_index; + result->failed_op = yr_nodes[node_index].op; + return status; +} + + +uint32_t yr_run_selected(uint8_t *device_base, struct yr_result_header *result) +{ + return yr_run_node_span( + device_base, result, 0u, YR_NODE_COUNT - 1u); +} + + +void yr_finalize_result(uint8_t *device_base, struct yr_result_header *result) +{ + const uint8_t *workspace; + if (device_base == (uint8_t *)0 + || result != (struct yr_result_header *)( + device_base + YR_RESULT_DEVICE_OFFSET) + || !yr_manifest_valid()) { + return; + } + workspace = + device_base + YR_RESULT_DEVICE_OFFSET + YR_RESULT_HEADER_BYTES; + result->workspace_fnv1a = yr_fnv1a(workspace, YR_WORKSPACE_BYTES); +} + + +/* + * Default tensor-mode setup, does nothing. Overridden by the same ET-only + * source that overrides yr_conv_tensor() below. A single-translation-unit build + * that compiles that source alongside this one defines + * YR_CONV_TENSOR_STRONG_PRESENT, because a strong definition cannot share a + * translation unit with the weak one it replaces; the separate-compilation + * builds leave the macro unset and keep resolving the override at link time. + */ +#ifndef YR_CONV_TENSOR_STRONG_PRESENT +__attribute__((weak)) +void yr_conv_tensor_init(void) +{ +} +#endif + + +/* + * Default fast path, always declines. An ET-only source that defines this + * symbol without the weak attribute overrides it at link time; the host + * build and any ET build that does not list that source keep this stub, so + * behavior stays exactly the portable scalar path. Guarded for the + * single-translation-unit build for the same reason as yr_conv_tensor_init(). + */ +#ifndef YR_CONV_TENSOR_STRONG_PRESENT +__attribute__((weak)) +uint32_t yr_conv_tensor( + const struct yr_node_desc *node, + const struct yr_tensor_desc *input_desc, + const struct yr_tensor_desc *weight_desc, + const struct yr_tensor_desc *bias_desc, + const struct yr_tensor_desc *output_desc, + const float *input, + const float *weight, + const float *bias, + float *output, + uint32_t *hart_oc_lo, + uint32_t *hart_oc_hi) +{ + (void)node; + (void)input_desc; + (void)weight_desc; + (void)bias_desc; + (void)output_desc; + (void)input; + (void)weight; + (void)bias; + (void)output; + *hart_oc_lo = 0u; + *hart_oc_hi = 0u; + return 0u; +} +#endif diff --git a/ported_models/yolov10n_hf_reference/src/ref_runtime.h b/ported_models/yolov10n_hf_reference/src/ref_runtime.h new file mode 100644 index 00000000..a9418116 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/src/ref_runtime.h @@ -0,0 +1,153 @@ +#ifndef YOLOV10N_HF_REF_RUNTIME_H +#define YOLOV10N_HF_REF_RUNTIME_H + +#include + +#define YR_RESULT_MAGIC 0x31465259u /* "YRF1", little endian */ +#define YR_RESULT_VERSION 1u +#define YR_MATH_VERSION 1u + +enum yr_status { + YR_STATUS_OK = 0, + YR_STATUS_BAD_MANIFEST = 1, + YR_STATUS_UNSUPPORTED_OP = 2, + YR_STATUS_UNSUPPORTED_SHAPE = 3 +}; + +/* + * Fixed 128-byte result header at offset zero of the launcher dump. The + * selected tensors follow at YR_RESULT_HEADER_BYTES using offsets from the + * generated slice manifest. PMC data has its own versioned region. + */ +struct yr_result_header { + uint32_t magic; + uint32_t version; + uint32_t status; + uint32_t failed_node; + uint32_t failed_op; + uint32_t first_node; + uint32_t last_node; + uint32_t node_count; + uint32_t tensor_count; + uint32_t workspace_bytes; + uint32_t input_blob_bytes; + uint32_t weight_blob_bytes; + uint32_t math_version; + uint32_t reserved32[3]; + uint64_t workspace_fnv1a; + uint64_t reserved64[7]; +}; + +_Static_assert(sizeof(struct yr_result_header) == 128u, + "yr_result_header must remain 128 bytes"); + +/* Initialize and validate result/manifest bookkeeping outside PMC scope. */ +uint32_t yr_prepare_result( + uint8_t *device_base, struct yr_result_header *result); + +/* + * Execute only the generated inclusive ONNX node range. Call prepare first; + * the caller owns PMC bracketing and cache publication. + */ +uint32_t yr_run_selected(uint8_t *device_base, struct yr_result_header *result); + +/* + * Execute an inclusive span of manifest-local node ordinals. Full-graph ET + * runners use this to put separate PMC begin/end pairs around measured + * architecture stages. Legacy slice callers continue to use + * yr_run_selected(), which covers the entire generated manifest. + */ +uint32_t yr_run_node_span( + uint8_t *device_base, + struct yr_result_header *result, + uint32_t first_local_node, + uint32_t last_local_node); + +/* + * Compute the result integrity hash after the measured operator interval. + * Keeping this O(workspace) bookkeeping separate ensures PMC covers only the + * selected ONNX nodes. + */ +void yr_finalize_result(uint8_t *device_base, struct yr_result_header *result); + +/* + * Hart topology and cross-hart synchronization hooks. Each runner supplies + * its own definitions so ref_runtime.c stays free of platform headers and + * behaves identically on host and device once yr_hart_count() returns 1. + */ +uint32_t yr_hart_id(void); +uint32_t yr_hart_count(void); +void yr_publish(const void *address, uint32_t bytes); +void yr_hart_barrier(void); + +/* + * Optional fast path for a single Conv node, tried before the portable + * scalar yr_conv(). Returns 1 if it computed the node and wrote output, + * 0 if it declined (caller falls back to the scalar path unchanged). + * ref_runtime.c supplies a weak stub that always declines, so the host + * build and any ET build without a tensor-path source stay exactly as + * they are today. An ET-only source file can override this symbol with + * a real tensor-unit implementation without ref_runtime.c ever + * including a platform or tensor header. + * + * On multi-hart builds each hart calls this independently and, when it + * returns 1, may have only computed its own slice of output channels + * (tile-aligned to the tensor unit's native width, not the raw per-hart + * channel split yr_conv() itself uses). hart_oc_lo and hart_oc_hi report + * that slice in output-channel units so the caller publishes exactly what + * this hart wrote instead of assuming a different split. Both are set to + * 0 before anything else runs, so a decline (return 0) or a hart that owns + * no tiles this call always leaves them as an empty [0,0) range. + */ +/* + * Build switch for the tensor-unit Conv fast path, off by default. + * + * It is off because enabling it is not free even when the tensor path helps. + * The tensor unit needs the L1 data cache put into scratchpad mode, which + * takes the whole cache away from ordinary loads and stores, and every + * operator other than the tensorized Conv shape runs as plain scalar code + * that depends on that cache. Measured on the board with the full graph and + * all 16 harts, turning it on made the run several times slower rather than + * faster, so the scalar path wins overall until far more of the graph is + * tensorized. See yr_conv_tensor_init(). + * + * Only meaningful on ET builds that link a real yr_conv_tensor(); on host the + * weak stub declines either way. It is a compile-time constant so a disabled + * build compiles the call, and the mode switch, away entirely. + */ +#ifndef YR_CONV_TENSOR_ENABLED +#define YR_CONV_TENSOR_ENABLED 0 +#endif + +/* + * Put this hart into whatever mode yr_conv_tensor() needs before any node + * runs. Every hart must call it once, from the runner's entry point, before + * the first barrier and before any Conv is dispatched. + * + * Doing it here rather than lazily on the first Conv is deliberate. The mode + * switch is a firmware syscall, and guarding it with a shared "already done" + * flag is not safe across harts, because L1 is minion-local and not coherent, + * so harts disagree about whether the flag is set. Calling it unconditionally + * once per hart, up front, removes the shared state entirely; the port in + * ported_models/yolo does the same thing and runs it on all harts on real + * hardware. ref_runtime.c supplies a weak stub that does nothing, so host + * builds and ET builds without a tensor source are unaffected. + */ +void yr_conv_tensor_init(void); + +struct yr_node_desc; +struct yr_tensor_desc; +uint32_t yr_conv_tensor( + const struct yr_node_desc *node, + const struct yr_tensor_desc *input_desc, + const struct yr_tensor_desc *weight_desc, + const struct yr_tensor_desc *bias_desc, + const struct yr_tensor_desc *output_desc, + const float *input, + const float *weight, + const float *bias, + float *output, + uint32_t *hart_oc_lo, + uint32_t *hart_oc_hi); + +#endif diff --git a/ported_models/yolov10n_hf_reference/src/yr_conv_tensor_et.c b/ported_models/yolov10n_hf_reference/src/yr_conv_tensor_et.c new file mode 100644 index 00000000..0a7e95a7 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/src/yr_conv_tensor_et.c @@ -0,0 +1,548 @@ +/* + * ET-only tensor-unit fast path for 1x1 stride-1 Conv nodes. + * + * Linked only into the ET build (see build_et_slice.sh). Overrides the weak + * yr_conv_tensor() stub in ref_runtime.c, which always declines and keeps + * the portable scalar path in effect on host. The 1x1 path splits one node's + * output-channel tiles across harts and reports its own slice back to the + * caller; no hart touches another hart's tiles, so this file needs no + * barrier of its own and relies on the per-node barrier in ref_runtime.c. + * + * A 1x1 stride-1 Conv over NCHW tensors is just a per-pixel [OC x IC] times + * [IC] matrix-vector product, batched over every spatial position, so it + * maps directly onto the tensor unit's 16x16 multiply-accumulate array: + * one weight tile of OC16 rows by IC16 columns, one activation tile of + * IC16 rows by HW16 columns, tensor_fma-ed together and accumulated across + * the IC16 tiles that make up the real input-channel count. Bias is added + * afterwards in plain scalar code; no activation is fused here, because in + * this graph SiLU is separate Sigmoid/Mul ONNX nodes dispatched elsewhere. + * + * Tile walk keeps a running pointer per loop level instead of recomputing + * oc0*input_channels + ic0 style offsets on every iteration, the same + * approach yr_conv() in ref_runtime.c uses for its own tap loops. + */ + +#include + +#if __has_include("erbium/isa/syscall.h") +#include "erbium/isa/syscall.h" +#else +#include "erbium-soc1sim/isa/syscall.h" +#endif +#include "erbium/isa/cacheops-umode.h" +#include "erbium/isa/tensors.h" +#include "erbium/isa/utils.h" + +#include "ref_runtime.h" +/* See the matching note in ref_runtime.c for why this include is guarded. */ +#ifndef YR_SLICE_MANIFEST_PREINCLUDED +#include "slice_manifest.h" +#endif + +#define YR_TENSOR_TILE 16u + +/* + * Switch this hart's L1 data cache into scratchpad mode, which the tensor + * unit needs. Called once per hart from the runner entry point. + * + * There is deliberately no "already initialized" flag. An earlier version + * cached the answer in a file-static, which is one address shared by every + * hart in a cache that is minion-local and not coherent, so harts raced on + * it and a 16-hart build hung on the first Conv. get_l1d_mode() reads a + * per-hart CSR, so asking the hardware costs almost nothing and cannot go + * stale or disagree between harts. + */ +void yr_conv_tensor_init(void) +{ + if (get_l1d_mode() == l1d_scp) { + return; + } + if (syscall(SYSCALL_CACHE_CONTROL, 1u, 1u, 0u) == 0) { + ucache_control(1u, 0u, 0u); + } +} + +static int yr_tensor_scp_ready(void) +{ + return get_l1d_mode() == l1d_scp; +} + +static void yr_tensor_clobber_fregs(void) +{ + __asm__ volatile("" :: + : "memory", "f0", "f1", "f2", "f3", "f4", "f5", "f6", + "f7", "f8", "f9", "f10", "f11", "f12", "f13", "f14", + "f15", "f16", "f17", "f18", "f19", "f20", "f21", + "f22", "f23", "f24", "f25", "f26", "f27", "f28", + "f29", "f30", "f31"); +} + +/* + * Add bias to a computed OC16 x HW16 tile and write it out. No activation. + * + * Plain scalar loop, not the packed fbcx.ps/flq2/fadd.ps/fsq2 sequence the + * epilogue used before: that packed form only ever updated 2 of every 16 + * elements (lanes 0 and 8), leaving the rest with the pre-bias FMA result. + * The bias add here is a tiny fraction of the node's cost next to the + * OC16/IC16/HW16 matmul above it, so there is nothing to gain from packing + * it and real correctness risk in redoing that asm without being able to + * verify the lane width on real hardware first. + */ +static void yr_tensor_bias_epilogue( + float *output, const float *bias, uint32_t oc0, uint32_t HW, uint32_t hw0) +{ + uint32_t r, j; + if (bias == (const float *)0) { + return; + } + for (r = 0u; r < YR_TENSOR_TILE; ++r) { + const float b = bias[oc0 + r]; + float *dst = output + (uint64_t)(oc0 + r) * HW + hw0; + for (j = 0u; j < YR_TENSOR_TILE; ++j) { + dst[j] += b; + } + } +} + +/* True when the node is a plain, unpadded, unit-stride, ungrouped 1x1 Conv + * whose channel and flattened-spatial extents all tile evenly into 16. */ +static int yr_conv_tensor_1x1_applies( + const struct yr_node_desc *node, + const struct yr_tensor_desc *input_desc, + const struct yr_tensor_desc *weight_desc, + const struct yr_tensor_desc *output_desc) +{ + const int64_t unit_kernel = 1; + uint32_t input_channels, output_channels, flat_pixels; + + if (input_desc->rank != 4u || weight_desc->rank != 4u + || output_desc->rank != 4u) { + return 0; + } + if ((int64_t)node->group != 1 || node->kernel_h != unit_kernel + || node->kernel_w != unit_kernel || node->stride_h != unit_kernel + || node->stride_w != unit_kernel || node->dilation_h != unit_kernel + || node->dilation_w != unit_kernel + || (node->pad_top | node->pad_left | node->pad_bottom + | node->pad_right) != 0) { + return 0; + } + if (input_desc->dims[0] != output_desc->dims[0] + || input_desc->dims[2] != output_desc->dims[2] + || input_desc->dims[3] != output_desc->dims[3]) { + return 0; + } + input_channels = input_desc->dims[1]; + output_channels = output_desc->dims[1]; + flat_pixels = input_desc->dims[2] * input_desc->dims[3]; + if (input_channels == 0u || output_channels == 0u || flat_pixels == 0u) { + return 0; + } + return input_channels % YR_TENSOR_TILE == 0u + && output_channels % YR_TENSOR_TILE == 0u + && flat_pixels % YR_TENSOR_TILE == 0u; +} + +/* + * Splits [0, count) into yr_hart_count() near-equal pieces, remainder going + * to the lowest-indexed harts, and returns the piece owned by yr_hart_id(). + * Same partition formula as the static yr_hart_range() in ref_runtime.c, + * duplicated here rather than exposed across translation units because it + * is three lines and this file already keeps itself free of ref_runtime.c + * internals. With a single hart this is [0, count), so the single-hart + * tensor build partitions to its full range unchanged. + */ +static void yr_conv_tensor_hart_range(uint32_t count, uint32_t *lo, uint32_t *hi) +{ + const uint32_t harts = yr_hart_count(); + const uint32_t id = yr_hart_id(); + *lo = (count * id) / harts; + *hi = (count * (id + 1u)) / harts; +} + +/* + * Walks OC16 x IC16 x HW16 tiles with a running pointer per level (weight, + * activation, output all advance by their own tile stride each iteration) + * instead of rederiving oc0/ic0/hw0 offsets on every pass, mirroring how + * yr_conv()'s tap loops avoid recomputed indices in ref_runtime.c. Eviction + * brackets the whole OC16 output slab once before and once after its HW16 + * sweep so every tensor_store into that slab lands before the slab is + * published, matching the single evict pass yr_publish() expects upstream. + * + * oc_tile_lo/oc_tile_hi restrict the sweep to a sub-range of OC16 tiles so + * multiple harts can split one node's output channels between them; the + * caller (yr_conv_tensor()) works out that range per hart and reports it + * back so ref_runtime.c publishes the matching slice. + */ +static void yr_conv_tensor_1x1_run( + const float *input, const float *weight, const float *bias, + float *output, uint32_t batches, uint32_t input_channels, + uint32_t output_channels, uint32_t HW, + uint32_t oc_tile_lo, uint32_t oc_tile_hi) +{ + const uint32_t ic_tiles = input_channels / YR_TENSOR_TILE; + const uint32_t hw_tiles = HW / YR_TENSOR_TILE; + const uint64_t weight_row_stride = (uint64_t)input_channels * sizeof(float); + const uint64_t activation_row_stride = (uint64_t)HW * sizeof(float); + const uint64_t oc_slab_stride = (uint64_t)YR_TENSOR_TILE * HW; + uint32_t n; + + for (n = 0u; n < batches; ++n) { + const float *batch_input = input + (uint64_t)n * input_channels * HW; + float *batch_output = output + (uint64_t)n * output_channels * HW; + const float *oc_weight_row = + weight + (uint64_t)oc_tile_lo * YR_TENSOR_TILE * input_channels; + float *oc_output_slab = + batch_output + (uint64_t)oc_tile_lo * oc_slab_stride; + uint32_t t_oc; + + for (t_oc = oc_tile_lo; t_oc < oc_tile_hi; ++t_oc) { + const uint32_t oc0 = t_oc * YR_TENSOR_TILE; + const float *hw_activation_col = batch_input; + float *hw_output_col = oc_output_slab; + uint32_t t_hw; + + evict((const void *)oc_output_slab, + oc_slab_stride * sizeof(float)); + WAIT_CACHEOPS; + FENCE; + + for (t_hw = 0u; t_hw < hw_tiles; ++t_hw) { + const float *ic_weight_tile = oc_weight_row; + const float *ic_activation_tile = hw_activation_col; + uint32_t t_ic; + + for (t_ic = 0u; t_ic < ic_tiles; ++t_ic) { + tensor_load(0u, 0u, 0u, 0u, 0u, (uint64_t)ic_weight_tile, + 0u, 15u, weight_row_stride, 0u); + tensor_wait(TENSOR_LOAD_WAIT_0); + tensor_load(0u, 0u, 0u, 0u, 1u, + (uint64_t)ic_activation_tile, 0u, 15u, + activation_row_stride, 1u); + tensor_wait(TENSOR_LOAD_WAIT_0); + tensor_fma(0u, 3u, 15u, 15u, 0u, 0u, 0u, 0u, 1u, 0u, 0u, + 0u, t_ic == 0u); + tensor_wait(TENSOR_FMA_WAIT); + + ic_weight_tile += YR_TENSOR_TILE; + ic_activation_tile += (uint64_t)YR_TENSOR_TILE * HW; + } + + tensor_store(0u, 0u, 3u, 15u, (uint64_t)hw_output_col, 0u, + activation_row_stride); + tensor_wait(TENSOR_STORE_WAIT); + yr_tensor_clobber_fregs(); + yr_tensor_bias_epilogue( + batch_output, bias, oc0, HW, t_hw * YR_TENSOR_TILE); + + hw_activation_col += YR_TENSOR_TILE; + hw_output_col += YR_TENSOR_TILE; + } + + evict((const void *)oc_output_slab, + oc_slab_stride * sizeof(float)); + WAIT_CACHEOPS; + FENCE; + + oc_weight_row += (uint64_t)YR_TENSOR_TILE * input_channels; + oc_output_slab += oc_slab_stride; + } + } +} + +/* + * ET-only tensor-unit path for 3x3 stride-1 "same" padding Conv nodes. + * + * A 3x3 tap only lines up with the tensor unit's 16x16 array when every one + * of its 16 activation lanes needs the exact same (ic,row) source, which is + * only true for the middle column (kx=1): shifting the input row by ky-1 + * turns that single column into the same [OC x IC] times [IC x HW16] + * product the 1x1 path already runs. The kx={0,2} columns shift every lane + * by one pixel relative to its neighbour, so they cannot share one tensor + * load; those six of nine taps, plus the bias, are folded in afterwards + * with a plain scalar accumulation on top of the tensor-computed partial + * sum. Weights for the middle column are gathered once per node into + * g_yr_conv3x3_center_weight so each tensor_load still reads a contiguous + * IC16 row instead of the kernel's native ic-then-3x3 stride. + */ + +#define YR_TENSOR_3X3_MAX_CHANNELS 128u + +static float g_yr_conv3x3_center_weight + [3][YR_TENSOR_3X3_MAX_CHANNELS * YR_TENSOR_3X3_MAX_CHANNELS] + __attribute__((aligned(64))); + +static int yr_conv_tensor_3x3_applies( + const struct yr_node_desc *node, + const struct yr_tensor_desc *input_desc, + const struct yr_tensor_desc *weight_desc, + const struct yr_tensor_desc *output_desc) +{ + const int64_t same_pad = 1; + uint32_t input_channels, output_channels, row_width; + + if (input_desc->rank != 4u || weight_desc->rank != 4u + || output_desc->rank != 4u) { + return 0; + } + if ((int64_t)node->group != 1 || node->kernel_h != 3 + || node->kernel_w != 3 || node->stride_h != 1 || node->stride_w != 1 + || node->dilation_h != 1 || node->dilation_w != 1 + || node->pad_top != same_pad || node->pad_left != same_pad + || node->pad_bottom != same_pad || node->pad_right != same_pad) { + return 0; + } + if (input_desc->dims[0] != output_desc->dims[0] + || input_desc->dims[2] != output_desc->dims[2] + || input_desc->dims[3] != output_desc->dims[3]) { + return 0; + } + input_channels = input_desc->dims[1]; + output_channels = output_desc->dims[1]; + row_width = input_desc->dims[3]; + if (input_channels == 0u || output_channels == 0u || row_width == 0u + || input_desc->dims[2] == 0u) { + return 0; + } + return input_channels % YR_TENSOR_TILE == 0u + && output_channels % YR_TENSOR_TILE == 0u + && row_width % YR_TENSOR_TILE == 0u + && input_channels <= YR_TENSOR_3X3_MAX_CHANNELS + && output_channels <= YR_TENSOR_3X3_MAX_CHANNELS; +} + +/* + * Gather the kx=1 column of every (oc,ic) pair into three contiguous + * [OC x IC] planes, one per ky, so the tensor unit can read an IC16 row + * without striding through the other eight taps of each 3x3 filter. + * + * The three planes are written with plain stores from this hart, unlike + * the node's own weight buffer, which the launcher DMAs straight into + * device DRAM before the kernel ever starts. tensor_load reads below this + * level, so each plane needs an explicit evict once it is fully written, + * or the tensor unit sees whatever this address held before the repack + * rather than the values just stored here. + */ +static void yr_conv_tensor_repack_3x3_center( + const float *weight, uint32_t output_channels, uint32_t input_channels) +{ + const uint64_t plane_bytes = (uint64_t)output_channels * input_channels + * sizeof(float); + uint32_t ky; + for (ky = 0u; ky < 3u; ++ky) { + float *plane = g_yr_conv3x3_center_weight[ky]; + const float *tap_base = weight + ky * 3u + 1u; + uint32_t oc; + for (oc = 0u; oc < output_channels; ++oc) { + float *dst_row = plane + (uint64_t)oc * input_channels; + const float *src_row = tap_base + (uint64_t)oc * input_channels * 9u; + uint32_t ic; + for (ic = 0u; ic < input_channels; ++ic) { + dst_row[ic] = src_row[ic * 9u]; + } + } + evict((const void *)plane, plane_bytes); + } + WAIT_CACHEOPS; + FENCE; +} + +/* + * Adds bias plus the kx={0,2} taps (all three ky rows, boundary-checked) + * on top of whatever the tensor unit already stored for the kx=1 column, + * for one OC16 x 16-wide row segment. Plain nested loops, no packed asm. + */ +static void yr_conv_tensor_3x3_sides_and_bias( + const float *channel_input, const float *weight, const float *bias, + float *channel_output, uint32_t input_channels, uint32_t H, + uint32_t row_width, uint32_t oc0, uint32_t oh, uint32_t ow0) +{ + const uint32_t plane = H * row_width; + uint32_t lane; + + for (lane = 0u; lane < YR_TENSOR_TILE; ++lane) { + const uint32_t oc = oc0 + lane; + const float bias_value = + (bias != (const float *)0) ? bias[oc] : 0.0f; + float *out_row = channel_output + (uint64_t)oc * plane + oh * row_width; + uint32_t col; + + for (col = 0u; col < YR_TENSOR_TILE; ++col) { + const uint32_t ow = ow0 + col; + float accumulator = bias_value; + int32_t ky; + + for (ky = 0; ky < 3; ++ky) { + const int32_t ih = (int32_t)oh + ky - 1; + uint32_t side; + if (ih < 0 || ih >= (int32_t)H) { + continue; + } + for (side = 0u; side < 2u; ++side) { + const int32_t kx = (int32_t)(side * 2u); + const int32_t iw = (int32_t)ow + kx - 1; + const float *taps; + uint32_t ic; + if (iw < 0 || iw >= (int32_t)row_width) { + continue; + } + taps = weight + (uint64_t)oc * input_channels * 9u + + (uint32_t)ky * 3u + (uint32_t)kx; + for (ic = 0u; ic < input_channels; ++ic) { + accumulator += taps[ic * 9u] + * channel_input[(uint64_t)ic * plane + + (uint32_t)ih * row_width + + (uint32_t)iw]; + } + } + } + out_row[ow] += accumulator; + } + } +} + +static void yr_conv_tensor_3x3_run( + const float *input, const float *weight, const float *bias, + float *output, uint32_t batches, uint32_t input_channels, + uint32_t output_channels, uint32_t H, uint32_t row_width) +{ + const uint32_t oc_tiles = output_channels / YR_TENSOR_TILE; + const uint32_t ic_tiles = input_channels / YR_TENSOR_TILE; + const uint32_t ow_tiles = row_width / YR_TENSOR_TILE; + const uint64_t weight_row_stride = (uint64_t)input_channels * sizeof(float); + const uint64_t channel_plane_stride = + (uint64_t)H * row_width * sizeof(float); + const uint32_t plane = H * row_width; + uint32_t n; + + yr_conv_tensor_repack_3x3_center(weight, output_channels, input_channels); + + for (n = 0u; n < batches; ++n) { + const float *batch_input = input + (uint64_t)n * input_channels * plane; + float *batch_output = output + (uint64_t)n * output_channels * plane; + uint32_t t_oc; + + for (t_oc = 0u; t_oc < oc_tiles; ++t_oc) { + const uint32_t oc0 = t_oc * YR_TENSOR_TILE; + float *oc_output_slab = batch_output + (uint64_t)oc0 * plane; + uint32_t oh; + + evict((const void *)oc_output_slab, channel_plane_stride * YR_TENSOR_TILE); + WAIT_CACHEOPS; + FENCE; + + for (oh = 0u; oh < H; ++oh) { + uint32_t t_ow; + + for (t_ow = 0u; t_ow < ow_tiles; ++t_ow) { + const uint32_t ow0 = t_ow * YR_TENSOR_TILE; + float *ctile = oc_output_slab + oh * row_width + ow0; + int center_first = 1; + int32_t ky; + + for (ky = 0; ky < 3; ++ky) { + const int32_t ih = (int32_t)oh + ky - 1; + const float *ky_weight_row; + uint32_t t_ic; + if (ih < 0 || ih >= (int32_t)H) { + continue; + } + ky_weight_row = g_yr_conv3x3_center_weight[ky] + + (uint64_t)oc0 * input_channels; + + for (t_ic = 0u; t_ic < ic_tiles; ++t_ic) { + const uint32_t ic0 = t_ic * YR_TENSOR_TILE; + const float *wtile = ky_weight_row + ic0; + const float *atile = batch_input + + (uint64_t)ic0 * plane + + (uint32_t)ih * row_width + ow0; + + tensor_load(0u, 0u, 0u, 0u, 0u, (uint64_t)wtile, + 0u, 15u, weight_row_stride, 0u); + tensor_wait(TENSOR_LOAD_WAIT_0); + tensor_load(0u, 0u, 0u, 0u, 1u, (uint64_t)atile, + 0u, 15u, channel_plane_stride, 1u); + tensor_wait(TENSOR_LOAD_WAIT_0); + tensor_fma(0u, 3u, 15u, 15u, 0u, 0u, 0u, 0u, 1u, + 0u, 0u, 0u, center_first); + tensor_wait(TENSOR_FMA_WAIT); + center_first = 0; + } + } + + tensor_store(0u, 0u, 3u, 15u, (uint64_t)ctile, 0u, + channel_plane_stride); + tensor_wait(TENSOR_STORE_WAIT); + yr_tensor_clobber_fregs(); + + yr_conv_tensor_3x3_sides_and_bias( + batch_input, weight, bias, batch_output, + input_channels, H, row_width, oc0, oh, ow0); + } + } + + evict((const void *)oc_output_slab, channel_plane_stride * YR_TENSOR_TILE); + WAIT_CACHEOPS; + FENCE; + } + } +} + +uint32_t yr_conv_tensor( + const struct yr_node_desc *node, + const struct yr_tensor_desc *input_desc, + const struct yr_tensor_desc *weight_desc, + const struct yr_tensor_desc *bias_desc, + const struct yr_tensor_desc *output_desc, + const float *input, + const float *weight, + const float *bias, + float *output, + uint32_t *hart_oc_lo, + uint32_t *hart_oc_hi) +{ + (void)bias_desc; + *hart_oc_lo = 0u; + *hart_oc_hi = 0u; + if (!yr_tensor_scp_ready()) { + return 0u; + } + if (yr_conv_tensor_1x1_applies(node, input_desc, weight_desc, output_desc)) { + const uint32_t output_channels = output_desc->dims[1]; + const uint32_t oc_tiles = output_channels / YR_TENSOR_TILE; + uint32_t tile_lo, tile_hi; + yr_conv_tensor_hart_range(oc_tiles, &tile_lo, &tile_hi); + if (tile_hi > tile_lo) { + yr_conv_tensor_1x1_run( + input, weight, bias, output, input_desc->dims[0], + input_desc->dims[1], output_channels, + input_desc->dims[2] * input_desc->dims[3], + tile_lo, tile_hi); + *hart_oc_lo = tile_lo * YR_TENSOR_TILE; + *hart_oc_hi = tile_hi * YR_TENSOR_TILE; + } + return 1u; + } + /* + * The 3x3 path runs its whole node on one hart with no partitioning of + * its own (see yr_conv_tensor_3x3_run), and measured 19x slower there + * than the plain scalar yr_conv() fallback across 16 harts for the same + * node, because its per-tap scalar "sides" accumulation has poor memory + * locality. Splitting its output channels the way the 1x1 path now does + * would still leave that slow scalar core in place, so on any build + * with more than one hart this declines and lets the faster scalar path + * handle it instead. + */ + if (yr_hart_count() == 1u + && yr_conv_tensor_3x3_applies( + node, input_desc, weight_desc, output_desc)) { + yr_conv_tensor_3x3_run( + input, weight, bias, output, input_desc->dims[0], + input_desc->dims[1], output_desc->dims[1], input_desc->dims[2], + input_desc->dims[3]); + *hart_oc_lo = 0u; + *hart_oc_hi = output_desc->dims[1]; + return 1u; + } + return 0u; +} diff --git a/ported_models/yolov10n_hf_reference/tools/capture_range.py b/ported_models/yolov10n_hf_reference/tools/capture_range.py new file mode 100755 index 00000000..ce3c55dc --- /dev/null +++ b/ported_models/yolov10n_hf_reference/tools/capture_range.py @@ -0,0 +1,806 @@ +#!/usr/bin/env python3 +"""Capture any contiguous pinned-ONNX node range for scalar C execution. + +This tool accepts every operator in the full scalar runtime. It preserves +every selected node output at a distinct workspace offset, including all +outputs of multi-output nodes. +Inputs whose producers are outside the range are captured from ONNX Runtime; +initializers are copied directly from the checksum-verified ONNX artifact. +""" + +from __future__ import annotations + +import argparse +import copy +import hashlib +import json +from pathlib import Path +import re +import sys +from typing import Any, Dict, Iterable, List, Optional, Sequence, Tuple + +import numpy as np +import onnx +from onnx import TensorProto, numpy_helper, shape_inference +import onnxruntime as ort + +from generate_full_graph import ( + ALIGNMENT, + DTYPE_CODES, + EXPECTED_SHA256, + PAGE_ALIGNMENT, + PMC_STAGE_STRIDE, + RESULT_DEVICE_OFFSET, + RESULT_HEADER_BYTES, + STORAGE_CODES, + align, + canonical_bytes, + c_array, + deterministic_input, + file_sha256, + node_attributes, + node_c_record, + tensor_metadata, + validate_graph, + write_aligned_blob, +) + + +PORT_ROOT = Path(__file__).resolve().parents[1] +REPO_ROOT = PORT_ROOT.parents[1] +DEFAULT_MODEL = REPO_ROOT / "local-artifacts/yolov10n_hf_reference/model.onnx" +DEFAULT_OUTPUT_ROOT = ( + REPO_ROOT / "local-artifacts/yolov10n_hf_reference/ranges" +) +EXPECTED_REPO = "onnx-community/yolov10n" +EXPECTED_REVISION = "57657320425ee34056408a57ad9d29c4d4815bd8" +EXPECTED_FILENAME = "onnx/model.onnx" +EXPECTED_LICENSE = "AGPL-3.0" +MIN_MEMORY_BYTES = 0x00400000 +PMC_REGION_BYTES = 0x00010000 + + +class CaptureError(RuntimeError): + """A pinned-artifact or selected-range contract was not satisfied.""" + + +def parse_node(value: str, count: int) -> int: + match = re.fullmatch(r"[Nn]?([0-9]+)", value.strip()) + if match is None: + raise CaptureError( + "invalid node id {!r}; expected N000 or 0".format(value) + ) + index = int(match.group(1)) + if index < 0 or index >= count: + raise CaptureError( + "node index {} is outside 0..{}".format(index, count - 1) + ) + return index + + +def parse_range(value: str, count: int) -> Tuple[int, int]: + parts = value.split(":") + if len(parts) == 1: + first = last = parse_node(parts[0], count) + elif len(parts) == 2: + first = parse_node(parts[0], count) + last = parse_node(parts[1], count) + else: + raise CaptureError("invalid node range {!r}".format(value)) + if first > last: + raise CaptureError( + "node range must be ascending, got N{:03d}:N{:03d}".format( + first, last + ) + ) + return first, last + + +def bytes_sha256(data: bytes) -> str: + return hashlib.sha256(data).hexdigest() + + +def ordered_unique(values: Iterable[str]) -> List[str]: + result: List[str] = [] + seen = set() + for value in values: + if value not in seen: + seen.add(value) + result.append(value) + return result + + +def load_full_input( + input_path: Optional[Path], shape: Sequence[int] +) -> Tuple[np.ndarray, Dict[str, Any]]: + expected_bytes = int(np.prod(shape, dtype=np.int64)) * 4 + if input_path is None: + array = deterministic_input(shape) + description = { + "kind": "deterministic_lcg", + "formula": ( + "(index * 1664525 + 1013904223) & 0x00ffffff, " + "divided by 16777215" + ), + "sha256": bytes_sha256(canonical_bytes(array)), + } + return array, description + resolved = input_path.resolve() + data = resolved.read_bytes() + if len(data) != expected_bytes: + raise CaptureError( + "full input {} has {} bytes, expected {}".format( + resolved, len(data), expected_bytes + ) + ) + array = np.frombuffer(data, dtype=" Tuple[Dict[str, np.ndarray], ort.InferenceSession]: + instrumented = copy.deepcopy(model) + existing = {item.name for item in instrumented.graph.output} + for name in capture_names: + if name not in metadata_values: + raise CaptureError( + "captured runtime tensor {!r} lacks inferred ValueInfo".format( + name + ) + ) + if name not in existing: + instrumented.graph.output.append( + copy.deepcopy(metadata_values[name]) + ) + existing.add(name) + onnx.checker.check_model(instrumented) + onnx.save(instrumented, str(output_path)) + + options = ort.SessionOptions() + options.graph_optimization_level = ort.GraphOptimizationLevel.ORT_DISABLE_ALL + options.intra_op_num_threads = 1 + options.inter_op_num_threads = 1 + session = ort.InferenceSession( + str(output_path), + sess_options=options, + providers=["CPUExecutionProvider"], + ) + arrays = session.run(list(capture_names), {"images": input_array}) + captures = dict(zip(capture_names, arrays)) + for name in capture_names: + expected = metadata_values[name] + expected_dtype = TensorProto.DataType.Name( + expected.type.tensor_type.elem_type + ) + expected_shape = [ + int(dimension.dim_value) + for dimension in expected.type.tensor_type.shape.dim + ] + actual_dtype = ( + "FLOAT" if captures[name].dtype == np.float32 + else "INT64" if captures[name].dtype == np.int64 + else str(captures[name].dtype) + ) + if actual_dtype != expected_dtype: + raise CaptureError( + "ORT dtype mismatch for {!r}: inferred={} captured={}".format( + name, expected_dtype, actual_dtype + ) + ) + if list(captures[name].shape) != expected_shape: + raise CaptureError( + "ORT shape mismatch for {!r}: inferred={} captured={}".format( + name, expected_shape, list(captures[name].shape) + ) + ) + return captures, session + + +def tensor_record( + metadata: Dict[str, Dict[str, Any]], + name: str, + storage: str, + offset: int, +) -> Dict[str, Any]: + record = dict(metadata[name]) + record.update({"storage": storage, "offset": offset}) + return record + + +def c_tensor_record(tensor: Dict[str, Any]) -> str: + return ( + " {{ {}u, {}u, {}u, {}u, {}u, {}u, {} }},".format( + STORAGE_CODES[tensor["storage"]], + tensor["offset"], + tensor["nbytes"], + tensor["elements"], + len(tensor["shape"]), + DTYPE_CODES[tensor["dtype"]], + c_array(tensor["shape"], 6), + ) + ) + + +def write_header( + path: Path, + tensor_records: Sequence[Dict[str, Any]], + selected_nodes: Sequence[Tuple[int, onnx.NodeProto]], + memory_map: Dict[str, int], +) -> None: + first = selected_nodes[0][0] + last = selected_nodes[-1][0] + tensor_ids = { + tensor["name"]: index for index, tensor in enumerate(tensor_records) + } + lines = [ + ( + "/* Generated directly from the pinned ONNX by " + "tools/capture_range.py. */" + ), + "#ifndef YOLOV10N_HF_SLICE_MANIFEST_H", + "#define YOLOV10N_HF_SLICE_MANIFEST_H", + "", + "#include ", + "", + "#define YR_MANIFEST_VERSION 2u", + "#define YR_FIRST_NODE {}u".format(first), + "#define YR_LAST_NODE {}u".format(last), + "#define YR_NODE_COUNT {}u".format(len(selected_nodes)), + "#define YR_TENSOR_COUNT {}u".format(len(tensor_records)), + "#define YR_RESULT_HEADER_BYTES {}u".format(RESULT_HEADER_BYTES), + "#define YR_RESULT_DEVICE_OFFSET 0x{:08x}u".format( + memory_map["result_device_offset"] + ), + "#define YR_INPUT_DEVICE_OFFSET 0x{:08x}u".format( + memory_map["input_device_offset"] + ), + "#define YR_WEIGHT_DEVICE_OFFSET 0x{:08x}u".format( + memory_map["weight_device_offset"] + ), + "#define YR_PMC_DEVICE_OFFSET 0x{:08x}u".format( + memory_map["pmc_device_offset"] + ), + "#define YR_PMC_STAGE_COUNT 1u", + "#define YR_PMC_STAGE_STRIDE 0x{:08x}u".format(PMC_STAGE_STRIDE), + "#define YR_INPUT_BLOB_BYTES {}u".format( + memory_map["input_blob_bytes"] + ), + "#define YR_WEIGHT_BLOB_BYTES {}u".format( + memory_map["weight_blob_bytes"] + ), + "#define YR_WORKSPACE_BYTES {}u".format( + memory_map["workspace_bytes"] + ), + "#define YR_DUMP_SIZE 0x{:08x}u".format(memory_map["dump_size"]), + "#define YR_MEM_SIZE 0x{:08x}u".format(memory_map["mem_size"]), + "", + ( + "enum yr_storage { YR_STORAGE_INPUT = 1, " + "YR_STORAGE_WEIGHTS = 2, YR_STORAGE_WORKSPACE = 3 };" + ), + "enum yr_dtype { YR_DTYPE_FLOAT = 1, YR_DTYPE_INT64 = 2 };", + ( + "enum yr_op { YR_OP_CONV = 1, YR_OP_SIGMOID = 2, " + "YR_OP_MUL = 3, YR_OP_CONCAT = 4, YR_OP_ADD = 5, " + "YR_OP_SPLIT = 6, YR_OP_MAXPOOL = 7, YR_OP_RESIZE = 8, " + "YR_OP_MATMUL = 9, YR_OP_SOFTMAX = 10, " + "YR_OP_RESHAPE = 11, YR_OP_TRANSPOSE = 12, " + "YR_OP_SUB = 13, YR_OP_REDUCEMAX = 14, " + "YR_OP_TOPK = 15, YR_OP_UNSQUEEZE = 16, " + "YR_OP_TILE = 17, YR_OP_GATHERELEMENTS = 18, " + "YR_OP_FLATTEN = 19, YR_OP_MOD = 20, " + "YR_OP_DIV = 21, YR_OP_CAST = 22 };" + ), + "", + "struct yr_tensor_desc {", + " uint32_t storage, offset, nbytes, elements, rank, dtype;", + " uint32_t dims[6];", + "};", + "", + "struct yr_node_desc {", + " uint32_t onnx_index, op, input_count, output_count;", + " uint32_t inputs[4], outputs[3];", + " int32_t group, kernel_h, kernel_w, stride_h, stride_w;", + " int32_t pad_top, pad_left, pad_bottom, pad_right;", + " int32_t dilation_h, dilation_w, axis;", + " uint32_t axes_count;", + " int32_t axes[6];", + " uint32_t perm_count;", + " int32_t perm[6];", + " int32_t ceil_mode, keepdims, largest, sorted, fmod, to;", + " int32_t resize_nearest_asymmetric_floor;", + "};", + "", + "struct yr_pmc_stage_desc {", + " uint32_t first_local_node, last_local_node;", + " uint32_t first_onnx_node, last_onnx_node;", + "};", + "", + "static const struct yr_tensor_desc yr_tensors[YR_TENSOR_COUNT] = {", + ] + lines.extend(c_tensor_record(tensor) for tensor in tensor_records) + lines.extend( + [ + "};", + "", + "static const struct yr_node_desc yr_nodes[YR_NODE_COUNT] = {", + ] + ) + lines.extend( + node_c_record(global_index, node, tensor_ids) + for global_index, node in selected_nodes + ) + lines.extend( + [ + "};", + "", + ( + "static const struct yr_pmc_stage_desc " + "yr_pmc_stages[YR_PMC_STAGE_COUNT] = {" + ), + " {{ 0u, {}u, {}u, {}u }},".format( + len(selected_nodes) - 1, first, last + ), + "};", + "", + "#endif", + "", + ] + ) + path.write_text("\n".join(lines), encoding="utf-8") + + +def blob_record(path: Path) -> Dict[str, Any]: + return { + "path": path.name, + "nbytes": path.stat().st_size, + "sha256": file_sha256(path), + } + + +def generate(args: argparse.Namespace) -> Dict[str, Any]: + model_path = args.model.resolve() + output_dir = args.output_root.resolve() / args.name + output_dir.mkdir(parents=True, exist_ok=True) + + actual_sha = file_sha256(model_path) + if actual_sha != EXPECTED_SHA256: + raise CaptureError( + "model SHA mismatch: expected={} actual={}".format( + EXPECTED_SHA256, actual_sha + ) + ) + original = onnx.load(str(model_path), load_external_data=False) + onnx.checker.check_model(original) + inferred = shape_inference.infer_shapes( + original, check_type=True, strict_mode=True, data_prop=True + ) + onnx.checker.check_model(inferred) + metadata, values, initializers = tensor_metadata(inferred) + validate_graph(inferred, metadata) + + first, last = parse_range(args.range, len(inferred.graph.node)) + selected_nodes = [ + (index, inferred.graph.node[index]) + for index in range(first, last + 1) + ] + selected_outputs = ordered_unique( + output + for _, node in selected_nodes + for output in node.output + if output + ) + selected_output_set = set(selected_outputs) + boundary_inputs = ordered_unique( + name + for _, node in selected_nodes + for name in node.input + if name + and name not in initializers + and name not in selected_output_set + ) + required_initializers = ordered_unique( + name + for _, node in selected_nodes + for name in node.input + if name and name in initializers + ) + if not boundary_inputs: + raise CaptureError("selected range has no external runtime input") + for name in boundary_inputs + required_initializers + selected_outputs: + if name not in metadata: + raise CaptureError( + "selected tensor {!r} has no static metadata".format(name) + ) + if metadata[name]["dtype"] not in DTYPE_CODES: + raise CaptureError( + "selected tensor {!r} has unsupported dtype {}".format( + name, metadata[name]["dtype"] + ) + ) + if len(metadata[name]["shape"]) > 6: + raise CaptureError( + "selected tensor {!r} exceeds rank six".format(name) + ) + + full_input, full_input_description = load_full_input( + args.input_bin, metadata["images"]["shape"] + ) + capture_names = boundary_inputs + selected_outputs + instrumented_path = output_dir / "instrumented_range.onnx" + captures, session = instrument_and_capture( + inferred, capture_names, values, full_input, instrumented_path + ) + + input_path = output_dir / "inputs.bin" + input_size, input_layout = write_aligned_blob( + input_path, + ( + (name, canonical_bytes(captures[name])) + for name in boundary_inputs + ), + ) + weights_path = output_dir / "weights.bin" + weight_arrays = { + name: numpy_helper.to_array(initializers[name]) + for name in required_initializers + } + weight_size, weight_layout = write_aligned_blob( + weights_path, + ( + (name, canonical_bytes(weight_arrays[name])) + for name in required_initializers + ), + ) + goldens_path = output_dir / "goldens.bin" + golden_size, golden_layout = write_aligned_blob( + goldens_path, + ( + (name, canonical_bytes(captures[name])) + for name in selected_outputs + ), + ) + + allocations: Dict[str, Dict[str, int]] = {} + workspace_cursor = 0 + for name in selected_outputs: + offset = align(workspace_cursor) + allocations[name] = { + "offset": offset, + "allocated_nbytes": align(metadata[name]["nbytes"]), + } + workspace_cursor = offset + align(metadata[name]["nbytes"]) + workspace_bytes = align(workspace_cursor) + + pmc_device_offset = align( + RESULT_HEADER_BYTES + workspace_bytes, PAGE_ALIGNMENT + ) + dump_size = pmc_device_offset + PMC_STAGE_STRIDE + input_device_offset = align(dump_size, PAGE_ALIGNMENT) + weight_device_offset = align( + input_device_offset + input_size, PAGE_ALIGNMENT + ) + mem_size = max( + MIN_MEMORY_BYTES, + align(weight_device_offset + weight_size, PAGE_ALIGNMENT), + ) + memory_map = { + "result_device_offset": RESULT_DEVICE_OFFSET, + "input_device_offset": input_device_offset, + "weight_device_offset": weight_device_offset, + "pmc_device_offset": pmc_device_offset, + "pmc_stage_stride": PMC_STAGE_STRIDE, + "pmc_stage_count": 1, + "workspace_bytes": workspace_bytes, + "input_blob_bytes": input_size, + "weight_blob_bytes": weight_size, + "dump_size": dump_size, + "mem_size": mem_size, + } + + producer = { + output: index + for index, node in enumerate(inferred.graph.node) + for output in node.output + if output + } + tensor_records: List[Dict[str, Any]] = [] + boundary_records = [] + for name in boundary_inputs: + record = tensor_record( + metadata, name, "input", input_layout[name]["offset"] + ) + record.update( + { + "role": "boundary_input", + "source": ( + "graph_input" + if name == "images" + else "N{:03d}".format(producer[name]) + ), + "segment_sha256": input_layout[name]["sha256"], + } + ) + tensor_records.append(record) + boundary_records.append( + { + "tensor": name, + "dtype": record["dtype"], + "shape": record["shape"], + "nbytes": record["nbytes"], + "source": record["source"], + "blob_offset": record["offset"], + "sha256": record["segment_sha256"], + } + ) + initializer_records = [] + for name in required_initializers: + record = tensor_record( + metadata, name, "weights", weight_layout[name]["offset"] + ) + raw = canonical_bytes(weight_arrays[name]) + record.update( + { + "role": "initializer", + "segment_sha256": weight_layout[name]["sha256"], + } + ) + tensor_records.append(record) + initializer_records.append( + { + "tensor": name, + "dtype": record["dtype"], + "shape": record["shape"], + "nbytes": record["nbytes"], + "blob_offset": record["offset"], + "sha256": bytes_sha256(raw), + } + ) + selected_output_records = [] + output_index_by_name = { + name: (global_index, output_index) + for global_index, node in selected_nodes + for output_index, name in enumerate(node.output) + } + for name in selected_outputs: + global_index, output_index = output_index_by_name[name] + record = tensor_record( + metadata, name, "workspace", allocations[name]["offset"] + ) + record.update( + { + "role": "node_output_checkpoint", + "producer": "N{:03d}".format(global_index), + "output_index": output_index, + "allocated_nbytes": allocations[name]["allocated_nbytes"], + "checkpoint": True, + } + ) + tensor_records.append(record) + selected_output_records.append( + { + "output_id": "N{:03d}:O{}".format( + global_index, output_index + ), + "node_id": "N{:03d}".format(global_index), + "output_index": output_index, + "tensor": name, + "dtype": record["dtype"], + "shape": record["shape"], + "elements": record["elements"], + "nbytes": record["nbytes"], + "workspace_offset": record["offset"], + "golden_offset": golden_layout[name]["offset"], + "golden_sha256": golden_layout[name]["sha256"], + } + ) + + header_path = output_dir / "slice_manifest.h" + write_header(header_path, tensor_records, selected_nodes, memory_map) + + node_records = [ + { + "node_id": "N{:03d}".format(global_index), + "local_index": local_index, + "index": global_index, + "name": node.name, + "op_type": node.op_type, + "inputs": list(node.input), + "outputs": list(node.output), + "attributes": node_attributes(node), + } + for local_index, (global_index, node) in enumerate(selected_nodes) + ] + manifest = { + "schema_version": 2, + "manifest_kind": "contiguous_node_range", + "source": { + "repo": EXPECTED_REPO, + "revision": EXPECTED_REVISION, + "filename": EXPECTED_FILENAME, + "sha256": actual_sha, + "license": EXPECTED_LICENSE, + "instrumentation": ( + "shape inference plus boundary and selected-output graph " + "outputs only" + ), + "instrumented_path": instrumented_path.name, + "instrumented_sha256": file_sha256(instrumented_path), + }, + "reference": { + "runtime": "onnxruntime", + "runtime_version": ort.__version__, + "providers": session.get_providers(), + "graph_optimization": "ORT_DISABLE_ALL", + "intra_op_threads": 1, + "inter_op_threads": 1, + "full_model_input": full_input_description, + }, + "selection": { + "selector": "N{:03d}:N{:03d}".format(first, last), + "first_node": "N{:03d}".format(first), + "last_node": "N{:03d}".format(last), + "inclusive": True, + "node_count": len(selected_nodes), + "operator_types": ordered_unique( + node.op_type for _, node in selected_nodes + ), + }, + "boundary_inputs": boundary_records, + "initializers": initializer_records, + "nodes": node_records, + "tensors": tensor_records, + "outputs": selected_output_records, + "pmc_stages": [ + { + "name": "selected_range", + "first_local_node": 0, + "last_local_node": len(selected_nodes) - 1, + "first_node": "N{:03d}".format(first), + "last_node": "N{:03d}".format(last), + "pmc_device_offset": pmc_device_offset, + "scope": "only selected ONNX nodes", + } + ], + "memory_plan": { + "algorithm": ( + "monotonic 64-byte-aligned allocation; every selected " + "node output remains materialized through final comparison" + ), + "alignment_bytes": ALIGNMENT, + "workspace_bytes": workspace_bytes, + "checkpoint_count": len(selected_output_records), + "no_output_aliasing": True, + }, + "generated": { + "header": blob_record(header_path), + }, + "blobs": { + "inputs": { + **blob_record(input_path), + "segments": boundary_records, + }, + "weights": { + **blob_record(weights_path), + "segments": initializer_records, + }, + "goldens": { + **blob_record(goldens_path), + "segments": selected_output_records, + }, + }, + "memory_map": memory_map, + "result": { + "magic": "YRF1", + "version": 1, + "math_version": 1, + "header_bytes": RESULT_HEADER_BYTES, + "workspace_offset_within_dump": RESULT_HEADER_BYTES, + "pmc_region_bytes": PMC_REGION_BYTES, + }, + "tolerances": { + "atol": args.atol, + "rtol": args.rtol, + "float_comparison": ( + "abs(actual-reference) <= atol + rtol*abs(reference)" + ), + "int64_comparison": "exact", + }, + } + manifest_path = output_dir / "slice_manifest.json" + manifest_path.write_text( + json.dumps(manifest, indent=2, allow_nan=False) + "\n", + encoding="utf-8", + ) + + print( + "RANGE_CAPTURE PASS selector={} nodes={} outputs={} " + "boundary={} initializers={}".format( + manifest["selection"]["selector"], + len(selected_nodes), + len(selected_output_records), + len(boundary_records), + len(initializer_records), + ) + ) + for record in boundary_records: + print( + "BOUNDARY tensor={} dtype={} shape={} source={} sha256={}".format( + record["tensor"], + record["dtype"], + record["shape"], + record["source"], + record["sha256"], + ) + ) + print( + "RANGE_MEMORY PASS workspace={} dump=0x{:x} " + "input=0x{:x} weights=0x{:x} total=0x{:x}".format( + workspace_bytes, + dump_size, + input_device_offset, + weight_device_offset, + mem_size, + ) + ) + print( + "RANGE_BLOBS PASS inputs={} weights={} goldens={} out={}".format( + input_size, weight_size, golden_size, output_dir + ) + ) + return manifest + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser() + parser.add_argument( + "--range", + required=True, + help="inclusive ONNX node selector, for example N289:N307", + ) + parser.add_argument( + "--name", + required=True, + help="artifact directory name below --output-root", + ) + parser.add_argument("--model", type=Path, default=DEFAULT_MODEL) + parser.add_argument("--output-root", type=Path, default=DEFAULT_OUTPUT_ROOT) + parser.add_argument( + "--input-bin", + type=Path, + help="optional full-model FP32 [1,3,640,640] input", + ) + parser.add_argument("--atol", type=float, default=0.00005) + parser.add_argument("--rtol", type=float, default=0.0001) + return parser.parse_args() + + +def main() -> int: + try: + generate(parse_args()) + except ( + CaptureError, + OSError, + ValueError, + KeyError, + onnx.checker.ValidationError, + ) as exc: + print("RANGE_CAPTURE FAIL {}".format(exc), file=sys.stderr) + return 2 + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/ported_models/yolov10n_hf_reference/tools/collect_board_summary.py b/ported_models/yolov10n_hf_reference/tools/collect_board_summary.py new file mode 100644 index 00000000..6a4cd3a7 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/tools/collect_board_summary.py @@ -0,0 +1,435 @@ +#!/usr/bin/env python3 +"""Create a compact, fail-closed summary of a validated full board run.""" + +from __future__ import annotations + +import argparse +import hashlib +import json +from pathlib import Path +import re +import sys +from typing import Any, Dict, List + + +PORT_ROOT = Path(__file__).resolve().parents[1] +REPO_ROOT = PORT_ROOT.parents[1] +EXPECTED_SOURCE = { + "repo": "onnx-community/yolov10n", + "revision": "57657320425ee34056408a57ad9d29c4d4815bd8", + "filename": "onnx/model.onnx", + "sha256": "a77dd863933f184a19e84361c64b788228a7c7dacc2c78939239a96ad3efca3b", + "license": "AGPL-3.0", +} +EXPECTED_HEADER_SHA256 = ( + "79be5b751842df025a3612ebb690e283813ea9ac8e373fd1bc44b706ca7a2a7e" +) +EXPECTED_STAGES = ( + ("stem", "N000", "N005"), + ("backbone", "N006", "N090"), + ("sppf_psa", "N091", "N128"), + ("neck", "N129", "N207"), + ("three_scale_head", "N208", "N270"), + ("dfl_decode", "N271", "N288"), + ("topk_selection", "N289", "N307"), +) + + +class SummaryError(RuntimeError): + """The run does not constitute strict full-board evidence.""" + + +def require(condition: bool, message: str) -> None: + if not condition: + raise SummaryError(message) + + +def digest(path: Path) -> Dict[str, Any]: + require(path.is_file(), "missing {}".format(path)) + value = hashlib.sha256() + with path.open("rb") as source: + for block in iter(lambda: source.read(1024 * 1024), b""): + value.update(block) + return { + "path": display_path(path), + "nbytes": path.stat().st_size, + "sha256": value.hexdigest(), + } + + +def display_path(path: Path) -> str: + path = path.resolve() + try: + return str(path.relative_to(REPO_ROOT)) + except ValueError: + return str(path) + + +def read_json(path: Path, label: str) -> Dict[str, Any]: + require(path.is_file(), "missing {} {}".format(label, path)) + value = json.loads(path.read_text(encoding="utf-8")) + require(isinstance(value, dict), "{} is not an object".format(label)) + return value + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser() + parser.add_argument("full_dir", type=Path) + parser.add_argument("run_dir", type=Path) + parser.add_argument("output", type=Path) + return parser.parse_args() + + +def main() -> int: + args = parse_args() + full_dir = args.full_dir.resolve() + run_dir = args.run_dir.resolve() + output = args.output.resolve() + require(not output.exists(), "refusing to overwrite {}".format(output)) + + manifest_path = full_dir / "slice_manifest.json" + manifest = read_json(manifest_path, "full manifest") + require( + manifest.get("schema_version") == 2 + and manifest.get("manifest_kind") == "full_graph_liveness", + "package is not schema-v2 full graph", + ) + require( + all( + manifest.get("source", {}).get(key) == value + for key, value in EXPECTED_SOURCE.items() + ), + "package source provenance differs from the pinned artifact", + ) + require( + manifest.get("selection", {}).get("selector") == "N000:N307" + and len(manifest.get("nodes", [])) == 308, + "package does not cover all 308 nodes", + ) + header_record = manifest.get("generated", {}).get("header", {}) + require( + header_record.get("nbytes") == 92881 + and header_record.get("sha256") == EXPECTED_HEADER_SHA256, + "generated header identity is not pinned", + ) + header_identity = digest(full_dir / "slice_manifest.h") + require( + header_identity["nbytes"] == header_record["nbytes"] + and header_identity["sha256"] == header_record["sha256"], + "generated header differs from manifest", + ) + + package_blobs: Dict[str, Any] = {} + for name in ("inputs", "weights", "goldens"): + record = manifest.get("blobs", {}).get(name, {}) + identity = digest(full_dir / str(record.get("path", ""))) + require( + identity["nbytes"] == record.get("nbytes") + and identity["sha256"] == record.get("sha256"), + "{} blob differs from full manifest".format(name), + ) + package_blobs[name] = identity + instrumented_identity = digest(full_dir / "instrumented_full.onnx") + require( + instrumented_identity["sha256"] + == manifest.get("source", {}).get("instrumented_sha256"), + "instrumented ONNX identity differs from full manifest", + ) + + run_result_path = run_dir / "run_result.json" + run_result = read_json(run_result_path, "run result") + require( + run_result.get("status") == "pass" + and run_result.get("device") == "soc1sim" + and run_result.get("hardware") is True + and run_result.get("return_code") == 0, + "run result is not a successful hardware launch", + ) + for field in ( + "launcher_identity_match", + "completion_log_match", + "dump_log_match", + "board_reset_match", + "dump_size_match", + ): + require(run_result.get(field) is True, "{} is not true".format(field)) + require( + run_result.get("source_sha256") == EXPECTED_SOURCE["sha256"], + "run source checksum differs", + ) + selection = run_result.get("selection", {}) + require( + selection.get("selector") == "N000:N307" + and selection.get("first_node") == "N000" + and selection.get("last_node") == "N307", + "run selection is not N000:N307", + ) + run_artifact_paths = { + "launcher": Path( + str(run_result.get("artifacts", {}).get("launcher", {}).get("path", "")) + ), + "elf": run_dir / "slice.elf", + "build_record": run_dir / "build_record.json", + "slice_manifest": manifest_path, + "inputs": full_dir / "inputs.bin", + "weights": full_dir / "weights.bin", + "dump": run_dir / "dump.bin", + "log": run_dir / "run.log", + "command": run_dir / "command.txt", + "wrapper_command": run_dir / "wrapper_command.txt", + "environment": run_dir / "environment.txt", + "device_evidence": run_dir / "device_evidence.txt", + "board_lock": run_dir / "board_lock.log", + } + for name, path in run_artifact_paths.items(): + stored = run_result.get("artifacts", {}).get(name) + require(isinstance(stored, dict), "run result lacks {}".format(name)) + current = digest(path) + require( + current["nbytes"] == stored.get("bytes") + and current["sha256"] == stored.get("sha256"), + "run artifact {} differs from run result".format(name), + ) + + evidence_path = run_dir / "device_evidence.txt" + evidence = evidence_path.read_text(encoding="utf-8") + require( + "backend=soc1sim" in evidence + and "meaning=real PCIe ET-SoC1 hardware" in evidence + and "type=character special file" in evidence + and ("1e0a:eb01" in evidence.lower() or "esperanto" in evidence.lower()), + "device evidence does not prove real ET-SoC1 hardware", + ) + log_path = run_dir / "run.log" + log = log_path.read_text(encoding="utf-8") + require( + "Resetting ET-SoC1 via " in log + and "DevicePcie" in log + and "PCIe target: /dev/et0_ops" in log + and "Architecture revision: ETSOC1" in log + and "Kernel completed successfully" in log, + "runtime log lacks hardware/reset/completion proof", + ) + wait_matches = re.findall( + r"^Kernel wait seconds: ([0-9]+(?:\.[0-9]+)?)$", + log, + flags=re.MULTILINE, + ) + require(len(wait_matches) == 1, "runtime log has no unique kernel wait") + kernel_wait_seconds = float(wait_matches[0]) + + build_path = run_dir / "build_record.json" + build = read_json(build_path, "build record") + elf_identity = digest(run_dir / "slice.elf") + require( + build.get("elf", {}).get("bytes") == elf_identity["nbytes"] + and build.get("elf", {}).get("sha256") == elf_identity["sha256"], + "saved ELF differs from build record", + ) + compiler = build.get("compiler", {}) + require( + compiler.get("version") == "riscv64-unknown-elf-gcc (g5115c7e44) 15.2.0" + and compiler.get("docker_image") == "et-gcc:24.04" + and compiler.get("docker_image_id") + == "sha256:6a811b9dcb63231c903d837fd969fbcee64aa2a6e8d685b8e0af3f9d92cfaa67", + "build does not use the recorded supported ET Docker compiler", + ) + for label, record in build.get("inputs", {}).items(): + require(isinstance(record, dict), "invalid build input {}".format(label)) + current = digest(Path(str(record.get("path", "")))) + require( + current["nbytes"] == record.get("bytes") + and current["sha256"] == record.get("sha256"), + "build input {} changed after compilation".format(label), + ) + + comparison_path = run_dir / "full_compare.json" + comparison = read_json(comparison_path, "full comparison") + require( + comparison.get("pass") is True + and comparison.get("source", {}).get("pass") is True + and comparison.get("blob_pass") is True + and comparison.get("generated_header", {}).get("pass") is True + and comparison.get("header_pass") is True + and comparison.get("direct_output_required") is True + and comparison.get("checkpoint_pass") is True, + "full comparison is not strict PASS", + ) + checkpoints = comparison.get("checkpoints") + require( + isinstance(checkpoints, list) + and len(checkpoints) == 16 + and all(item.get("pass") is True for item in checkpoints), + "not all 16 checkpoints pass", + ) + final = comparison.get("final_output", {}) + selection_validation = final.get("selection_validation", {}) + require( + final.get("pass") is True + and final.get("tensor") == "output0" + and final.get("shape") == [1, 300, 6] + and final.get("direct_ort_pass") is True + and final.get("direct_ort_mismatch_count") == 0 + and final.get("unexplained_mismatch_count") == 0 + and selection_validation.get("selected_anchor_overlap") == 300 + and selection_validation.get("final_anchor_class_overlap") == 300, + "output0 is not a direct zero-mismatch ORT pass", + ) + + pmc_path = run_dir / "pmc_stages.json" + pmc = read_json(pmc_path, "PMC stages") + require( + pmc.get("status") == "PASS" and pmc.get("selector") == "N000:N307", + "PMC aggregate is not PASS", + ) + stages = pmc.get("stages") + require( + isinstance(stages, list) and len(stages) == len(EXPECTED_STAGES), + "PMC stage count differs", + ) + compact_stages: List[Dict[str, Any]] = [] + for item, expected in zip(stages, EXPECTED_STAGES): + name, first, last = expected + require( + item.get("name") == name + and item.get("first_node") == first + and item.get("last_node") == last, + "PMC stage boundary differs for {}".format(name), + ) + decoded = item.get("decoded", {}) + require( + decoded.get("status") == "PASS" + and decoded.get("header", {}).get("status") == "PASS" + and decoded.get("header", {}).get("active_harts") == 1, + "PMC stage {} did not decode cleanly".format(name), + ) + harts = decoded.get("harts") + require( + isinstance(harts, list) + and len(harts) == 1 + and harts[0].get("status") == "PASS", + "PMC hart record differs for {}".format(name), + ) + counters = { + counter["event"]: counter["delta"] + for counter in harts[0].get("counters", []) + if counter.get("status") == "PASS" + } + required_counters = ( + "minion_cycles", + "retired_instructions_thread_0", + "l2_miss_requests", + "minion_icache_requests", + ) + require( + all(key in counters for key in required_counters), + "PMC stage {} lacks required counters".format(name), + ) + compact_stages.append( + { + "name": name, + "first_node": first, + "last_node": last, + "minion_cycles": counters["minion_cycles"], + "retired_instructions_thread_0": counters[ + "retired_instructions_thread_0" + ], + "l2_miss_requests": counters["l2_miss_requests"], + "minion_icache_requests": counters["minion_icache_requests"], + } + ) + + detections_path = run_dir / "detections.json" + detections = read_json(detections_path, "detection explanation") + require( + detections.get("pass") is True + and detections.get("records_at_or_above_threshold") == 10 + and len(detections.get("displayed", [])) == 10, + "real-image detection explanation is not PASS", + ) + + artifact_paths = { + "full_manifest": manifest_path, + "generated_header": full_dir / "slice_manifest.h", + "elf": run_dir / "slice.elf", + "build_record": build_path, + "dump": run_dir / "dump.bin", + "run_log": log_path, + "run_result": run_result_path, + "device_evidence": evidence_path, + "full_compare": comparison_path, + "pmc_stages": pmc_path, + "detections": detections_path, + } + summary = { + "schema_version": 1, + "status": "PASS", + "kind": "strict_full_graph_real_etsoc1_evidence", + "source": EXPECTED_SOURCE, + "selection": { + "selector": "N000:N307", + "node_count": 308, + "output": {"name": "output0", "shape": [1, 300, 6]}, + }, + "device": { + "launcher_device": "soc1sim", + "hardware": True, + "runtime_backend": "DevicePcie", + "architecture": "ETSOC1", + "pcie_id": "1e0a:eb01", + "kernel_wait_seconds": kernel_wait_seconds, + "launcher_elapsed_seconds": run_result.get("elapsed_seconds"), + }, + "compiler": compiler, + "comparison": { + "checkpoint_count": 16, + "checkpoint_pass_count": 16, + "direct_output_required": True, + "output_mismatch_count": 0, + "output_unexplained_mismatch_count": 0, + "output_max_abs": final.get("max_abs"), + "output_max_rel": final.get("max_rel"), + "selected_anchor_overlap": 300, + "final_anchor_class_overlap": 300, + "actual_output_sha256": final.get("actual_sha256"), + "reference_output_sha256": final.get("reference_sha256"), + }, + "real_image": { + "fixture": "coco_room_000139", + "input_sha256": package_blobs["inputs"]["sha256"], + "display_threshold": detections.get("threshold"), + "records_at_or_above_threshold": 10, + "top_record": detections["displayed"][0], + "class_labels": ( + "numeric IDs only; the pinned ONNX does not provide human class names" + ), + "postprocessing": ("two-stage in-graph TopK/GatherElements; no NMS node"), + }, + "pmc": { + "status": "PASS", + "scope": pmc.get("scope"), + "stages": compact_stages, + }, + "package_blobs": package_blobs, + "artifacts": {name: digest(path) for name, path in artifact_paths.items()}, + } + summary["artifacts"]["instrumented_onnx"] = instrumented_identity + summary["artifacts"]["launcher"] = digest(run_artifact_paths["launcher"]) + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text( + json.dumps(summary, indent=2, allow_nan=False) + "\n", + encoding="utf-8", + ) + print( + "BOARD_SUMMARY PASS selector=N000:N307 output_mismatches=0 " + "pmc_stages=7 out={}".format(output) + ) + return 0 + + +if __name__ == "__main__": + try: + sys.exit(main()) + except (SummaryError, OSError, ValueError, KeyError) as error: + print("BOARD_SUMMARY FAIL {}".format(error), file=sys.stderr) + sys.exit(2) diff --git a/ported_models/yolov10n_hf_reference/tools/compare_full.py b/ported_models/yolov10n_hf_reference/tools/compare_full.py new file mode 100755 index 00000000..dc40423f --- /dev/null +++ b/ported_models/yolov10n_hf_reference/tools/compare_full.py @@ -0,0 +1,1268 @@ +#!/usr/bin/env python3 +"""Strictly compare a full-graph C dump with pinned-artifact ORT checkpoints. + +The schema-v2 full package uses a liveness arena, so most intermediate +locations are deliberately reused. Only tensors declared in ``checkpoints`` +are pinned until the end of execution and are therefore meaningful in the +final dump. This comparator never interprets other workspace bytes as +goldens; it does, however, verify the YRF1 FNV-1a over the entire arena. +""" + +from __future__ import annotations + +import argparse +import hashlib +import json +import math +from pathlib import Path +import struct +import sys +from typing import Any, Dict, List, Optional, Sequence, Tuple + +import numpy as np + + +PORT_ROOT = Path(__file__).resolve().parents[1] +REPO_ROOT = PORT_ROOT.parents[1] +DEFAULT_MODEL = ( + REPO_ROOT / "local-artifacts/yolov10n_hf_reference/model.onnx" +) + +EXPECTED_REPO = "onnx-community/yolov10n" +EXPECTED_REVISION = "57657320425ee34056408a57ad9d29c4d4815bd8" +EXPECTED_FILENAME = "onnx/model.onnx" +EXPECTED_SOURCE_SHA256 = ( + "a77dd863933f184a19e84361c64b788228a7c7dacc2c78939239a96ad3efca3b" +) +EXPECTED_LICENSE = "AGPL-3.0" +EXPECTED_HEADER_BYTES = 92881 +EXPECTED_HEADER_SHA256 = ( + "79be5b751842df025a3612ebb690e283813ea9ac8e373fd1bc44b706ca7a2a7e" +) +EXPECTED_SELECTOR = "N000:N307" +EXPECTED_NODE_COUNT = 308 + +RESULT_MAGIC = 0x31465259 +RESULT_VERSION = 1 +MATH_VERSION = 1 +RESULT_STRUCT_BYTES = 128 +HEADER_U32 = struct.Struct("<16I") +HEADER_U64 = struct.Struct("<8Q") +STATUS_NAMES = { + 0: "ok", + 1: "bad_manifest", + 2: "unsupported_op", + 3: "unsupported_shape", +} +DTYPE_INFO = { + "FLOAT": (" str: + digest = hashlib.sha256() + with path.open("rb") as source: + for block in iter(lambda: source.read(1024 * 1024), b""): + digest.update(block) + return digest.hexdigest() + + +def bytes_sha256(data: bytes) -> str: + return hashlib.sha256(data).hexdigest() + + +def fnv1a(data: bytes) -> int: + value = 14695981039346656037 + for byte in data: + value ^= byte + value = (value * 1099511628211) & 0xFFFFFFFFFFFFFFFF + return value + + +def require(condition: bool, message: str) -> None: + if not condition: + raise CompareError(message) + + +def integer(value: Any, field: str) -> int: + require( + isinstance(value, int) and not isinstance(value, bool), + "{} must be an integer".format(field), + ) + return int(value) + + +def shape_elements(shape: Sequence[Any], field: str) -> int: + require(isinstance(shape, list), "{} must be a list".format(field)) + elements = 1 + for index, dimension_value in enumerate(shape): + dimension = integer( + dimension_value, "{}[{}]".format(field, index) + ) + require(dimension >= 0, "{} has a negative dimension".format(field)) + elements *= dimension + return elements + + +def safe_package_path(full_dir: Path, relative: Any, field: str) -> Path: + require( + isinstance(relative, str) and relative != "", + "{} must be a non-empty relative path".format(field), + ) + path = (full_dir / relative).resolve() + try: + path.relative_to(full_dir) + except ValueError: + raise CompareError("{} escapes the full package".format(field)) + return path + + +def parse_node_id(value: Any, field: str) -> int: + require( + isinstance(value, str) + and len(value) == 4 + and value[0] == "N" + and value[1:].isdigit(), + "{} must have the form N000".format(field), + ) + return int(value[1:]) + + +def result_header(data: bytes) -> Dict[str, Any]: + require( + len(data) >= RESULT_STRUCT_BYTES, + "dump is shorter than the 128-byte YRF1 result structure", + ) + words = HEADER_U32.unpack_from(data, 0) + longs = HEADER_U64.unpack_from(data, 64) + return { + "magic": words[0], + "version": words[1], + "status": words[2], + "status_name": STATUS_NAMES.get(words[2], "unknown"), + "failed_node": words[3], + "failed_op": words[4], + "first_node": words[5], + "last_node": words[6], + "node_count": words[7], + "tensor_count": words[8], + "workspace_bytes": words[9], + "input_blob_bytes": words[10], + "weight_blob_bytes": words[11], + "math_version": words[12], + "reserved32": list(words[13:16]), + "workspace_fnv1a": longs[0], + "reserved64": list(longs[1:8]), + } + + +def compare_float( + actual: np.ndarray, + reference: np.ndarray, + atol: float, + rtol: float, +) -> Dict[str, Any]: + actual64 = actual.astype(np.float64) + reference64 = reference.astype(np.float64) + finite = np.isfinite(actual64) & np.isfinite(reference64) + absolute = np.zeros(actual64.shape, dtype=np.float64) + absolute[finite] = np.abs(actual64[finite] - reference64[finite]) + allowed = atol + rtol * np.abs(reference64) + relative = np.zeros(actual64.shape, dtype=np.float64) + relative[finite] = absolute[finite] / np.maximum( + np.abs(reference64[finite]), np.finfo(np.float32).tiny + ) + mismatch = ~finite + mismatch[finite] |= absolute[finite] > allowed[finite] + nonfinite_indices = np.flatnonzero(~finite) + if nonfinite_indices.size: + worst = int(nonfinite_indices[0]) + else: + worst = int(np.argmax(absolute)) if absolute.size else 0 + finite_absolute = absolute[finite] + finite_relative = relative[finite] + return { + "comparison": "tolerance", + "pass": bool(not np.any(mismatch)), + "elements": int(actual.size), + "mismatch_count": int(np.count_nonzero(mismatch)), + "nonfinite_actual_count": int( + np.count_nonzero(~np.isfinite(actual64)) + ), + "nonfinite_reference_count": int( + np.count_nonzero(~np.isfinite(reference64)) + ), + "max_abs": ( + float(np.max(finite_absolute)) if finite_absolute.size else 0.0 + ), + "mean_abs": ( + float(np.mean(finite_absolute)) if finite_absolute.size else 0.0 + ), + "max_rel": ( + float(np.max(finite_relative)) if finite_relative.size else 0.0 + ), + "worst_flat_index": worst, + "worst_actual": ( + float(actual.flat[worst]) + if actual.size and np.isfinite(actual.flat[worst]) + else None + ), + "worst_reference": ( + float(reference.flat[worst]) + if reference.size and np.isfinite(reference.flat[worst]) + else None + ), + "atol": atol, + "rtol": rtol, + } + + +def compare_int64( + actual: np.ndarray, reference: np.ndarray +) -> Dict[str, Any]: + mismatch = actual != reference + # longdouble avoids signed-int64 subtraction overflow. Equality itself is + # evaluated in INT64 and remains the exact pass/fail criterion. + absolute = np.abs( + actual.astype(np.longdouble) - reference.astype(np.longdouble) + ) + denominator = np.maximum( + np.abs(reference.astype(np.longdouble)), np.longdouble(1.0) + ) + relative = absolute / denominator + worst = int(np.argmax(absolute)) if absolute.size else 0 + return { + "comparison": "exact", + "pass": bool(not np.any(mismatch)), + "elements": int(actual.size), + "mismatch_count": int(np.count_nonzero(mismatch)), + "nonfinite_actual_count": 0, + "nonfinite_reference_count": 0, + "max_abs": float(np.max(absolute)) if absolute.size else 0.0, + "mean_abs": float(np.mean(absolute)) if absolute.size else 0.0, + "max_rel": float(np.max(relative)) if relative.size else 0.0, + "worst_flat_index": worst, + "worst_actual": int(actual.flat[worst]) if actual.size else None, + "worst_reference": ( + int(reference.flat[worst]) if reference.size else None + ), + "atol": 0, + "rtol": 0, + } + + +def json_float_records(array: np.ndarray) -> List[List[Optional[float]]]: + records: List[List[Optional[float]]] = [] + for row in array: + records.append( + [ + float(value) if np.isfinite(value) else None + for value in row + ] + ) + return records + + +def stable_topk(values: np.ndarray, k: int) -> Tuple[np.ndarray, np.ndarray]: + """Replay ONNX Runtime's observed value-desc/index-asc TopK contract.""" + require(values.ndim == 1, "TopK replay input must be rank one") + require( + bool(np.all(np.isfinite(values))), + "TopK replay input contains a non-finite value", + ) + require(0 < k <= values.size, "TopK replay K is out of range") + source_indices = np.arange(values.size, dtype=np.int64) + order = np.lexsort((source_indices, -values.astype(np.float64))) + selected = order[:k].astype(np.int64, copy=False) + return values[selected], selected + + +def topk_boundary(values: np.ndarray, k: int) -> Dict[str, Any]: + sorted_values, indices = stable_topk(values, values.size) + cutoff = sorted_values[k - 1] + next_value = sorted_values[k] if k < values.size else cutoff + return { + "k": k, + "cutoff": float(cutoff), + "next": float(next_value), + "margin": float(cutoff - next_value), + "tie_count_at_cutoff": int(np.count_nonzero(values == cutoff)), + "strictly_above_cutoff": int(np.count_nonzero(values > cutoff)), + "selected_indices": indices[:k], + } + + +def replay_selection_tail(candidate: np.ndarray) -> Dict[str, Any]: + """Independently replay the exact pinned N289:N307 tensor program.""" + require( + candidate.shape == (1, 8400, 84), + "selection replay requires N288 shape [1,8400,84]", + ) + boxes = candidate[0, :, :4] + class_scores = candidate[0, :, 4:] + anchor_scores = np.max(class_scores, axis=1) + first_values, first_indices = stable_topk(anchor_scores, 300) + del first_values + gathered_boxes = boxes[first_indices, :] + gathered_scores = class_scores[first_indices, :] + flattened = gathered_scores.reshape(-1) + final_scores, flattened_indices = stable_topk(flattened, 300) + selected_slots = flattened_indices // 80 + selected_classes = flattened_indices % 80 + output = np.concatenate( + ( + gathered_boxes[selected_slots, :], + final_scores[:, np.newaxis], + selected_classes.astype(np.float32)[:, np.newaxis], + ), + axis=1, + )[np.newaxis, ...].astype(np.float32, copy=False) + anchor_class = np.stack( + ( + first_indices[selected_slots], + selected_classes, + ), + axis=1, + ) + return { + "output": output, + "first_indices": first_indices, + "anchor_class": anchor_class, + "first_boundary": topk_boundary(anchor_scores, 300), + "second_boundary": topk_boundary(flattened, 300), + } + + +def validate_selection_tail( + candidate_actual: np.ndarray, + candidate_reference: np.ndarray, + output_actual: np.ndarray, + output_reference: np.ndarray, + candidate_pass: bool, + direct_output_pass: bool, +) -> Dict[str, Any]: + actual_replay = replay_selection_tail(candidate_actual) + reference_replay = replay_selection_tail(candidate_reference) + actual_exact = ( + actual_replay["output"].tobytes(order="C") + == output_actual.tobytes(order="C") + ) + reference_exact = ( + reference_replay["output"].tobytes(order="C") + == output_reference.tobytes(order="C") + ) + first_reference = reference_replay["first_boundary"] + second_reference = reference_replay["second_boundary"] + discontinuous = ( + first_reference["margin"] == 0.0 + or second_reference["margin"] == 0.0 + ) + actual_pairs = { + (int(item[0]), int(item[1])) + for item in actual_replay["anchor_class"] + } + reference_pairs = { + (int(item[0]), int(item[1])) + for item in reference_replay["anchor_class"] + } + actual_anchors = { + int(item) for item in actual_replay["first_indices"] + } + reference_anchors = { + int(item) for item in reference_replay["first_indices"] + } + tie_aware_pass = bool( + direct_output_pass + or ( + candidate_pass + and discontinuous + and actual_exact + and reference_exact + ) + ) + return { + "pass": tie_aware_pass, + "mode": ( + "direct_ort_tolerance" + if direct_output_pass + else "proven_topk_tie_discontinuity" + ), + "direct_ort_pass": direct_output_pass, + "candidate_checkpoint_pass": candidate_pass, + "reference_has_exact_cutoff_tie": discontinuous, + "actual_replay_matches_c_output_bitwise": actual_exact, + "reference_replay_matches_ort_output_bitwise": reference_exact, + "first_topk": { + key: value + for key, value in first_reference.items() + if key != "selected_indices" + }, + "second_topk": { + key: value + for key, value in second_reference.items() + if key != "selected_indices" + }, + "selected_anchor_overlap": len(actual_anchors & reference_anchors), + "selected_anchor_count": 300, + "final_anchor_class_overlap": len(actual_pairs & reference_pairs), + "final_anchor_class_count": 300, + } + + +def verify_source( + manifest: Dict[str, Any], model_path: Path +) -> Dict[str, Any]: + source = manifest.get("source") + require(isinstance(source, dict), "manifest source must be an object") + expected_fields = { + "repo": EXPECTED_REPO, + "revision": EXPECTED_REVISION, + "filename": EXPECTED_FILENAME, + "sha256": EXPECTED_SOURCE_SHA256, + "license": EXPECTED_LICENSE, + } + fields = { + key: source.get(key) == expected + for key, expected in expected_fields.items() + } + exists = model_path.is_file() + actual_bytes = model_path.stat().st_size if exists else None + actual_sha256 = file_sha256(model_path) if exists else None + passed = ( + all(fields.values()) + and exists + and actual_sha256 == EXPECTED_SOURCE_SHA256 + ) + return { + "pass": passed, + "path": str(model_path), + "exists": exists, + "bytes": actual_bytes, + "expected_sha256": EXPECTED_SOURCE_SHA256, + "actual_sha256": actual_sha256, + "manifest_fields": fields, + } + + +def verify_blobs( + manifest: Dict[str, Any], full_dir: Path +) -> Tuple[bool, Dict[str, Dict[str, Any]]]: + blobs = manifest.get("blobs") + require(isinstance(blobs, dict), "manifest blobs must be an object") + require( + {"inputs", "weights", "goldens"}.issubset(blobs), + "manifest must declare inputs, weights, and goldens blobs", + ) + checks: Dict[str, Dict[str, Any]] = {} + for name in sorted(blobs): + record = blobs[name] + require( + isinstance(record, dict), + "blobs.{} must be an object".format(name), + ) + path = safe_package_path( + full_dir, record.get("path"), "blobs.{}.path".format(name) + ) + expected_bytes = integer( + record.get("nbytes"), "blobs.{}.nbytes".format(name) + ) + expected_sha256 = record.get("sha256") + require( + isinstance(expected_sha256, str) + and len(expected_sha256) == 64, + "blobs.{}.sha256 is invalid".format(name), + ) + exists = path.is_file() + actual_bytes = path.stat().st_size if exists else None + actual_sha256 = file_sha256(path) if exists else None + passed = ( + exists + and actual_bytes == expected_bytes + and actual_sha256 == expected_sha256 + ) + checks[name] = { + "pass": passed, + "path": record["path"], + "expected_bytes": expected_bytes, + "actual_bytes": actual_bytes, + "expected_sha256": expected_sha256, + "actual_sha256": actual_sha256, + } + print( + "BLOB {} name={} bytes={} sha256={}".format( + "PASS" if passed else "FAIL", + name, + actual_bytes, + actual_sha256, + ) + ) + return bool(checks) and all(item["pass"] for item in checks.values()), checks + + +def verify_generated_header( + manifest: Dict[str, Any], full_dir: Path +) -> Dict[str, Any]: + generated = manifest.get("generated") + require(isinstance(generated, dict), "manifest generated must be an object") + record = generated.get("header") + require( + isinstance(record, dict), + "manifest generated.header must be an object", + ) + path = safe_package_path( + full_dir, record.get("path"), "generated.header.path" + ) + require( + path == (full_dir / "slice_manifest.h").resolve(), + "generated.header.path must name slice_manifest.h", + ) + expected_bytes = integer( + record.get("nbytes"), "generated.header.nbytes" + ) + expected_sha256 = record.get("sha256") + require( + isinstance(expected_sha256, str) + and len(expected_sha256) == 64 + and all(character in "0123456789abcdef" for character in expected_sha256), + "generated.header.sha256 is invalid", + ) + exists = path.is_file() + actual_bytes = path.stat().st_size if exists else None + actual_sha256 = file_sha256(path) if exists else None + return { + "pass": bool( + exists + and actual_bytes == expected_bytes + and actual_sha256 == expected_sha256 + and expected_bytes == EXPECTED_HEADER_BYTES + and expected_sha256 == EXPECTED_HEADER_SHA256 + ), + "path": str(path), + "expected_bytes": expected_bytes, + "actual_bytes": actual_bytes, + "expected_sha256": expected_sha256, + "actual_sha256": actual_sha256, + "pinned_bytes": EXPECTED_HEADER_BYTES, + "pinned_sha256": EXPECTED_HEADER_SHA256, + } + + +def validate_manifest( + manifest: Dict[str, Any], +) -> Tuple[Dict[str, Dict[str, Any]], Dict[str, Dict[str, Any]]]: + require( + manifest.get("schema_version") == 2, + "full manifest schema_version must be 2", + ) + require( + manifest.get("manifest_kind") == "full_graph_liveness", + "manifest_kind must be full_graph_liveness", + ) + selection = manifest.get("selection") + require(isinstance(selection, dict), "selection must be an object") + require( + selection.get("selector") == EXPECTED_SELECTOR + and selection.get("first_node") == "N000" + and selection.get("last_node") == "N307" + and selection.get("inclusive") is True, + "selection is not the inclusive full N000:N307 graph", + ) + + nodes = manifest.get("nodes") + tensors = manifest.get("tensors") + checkpoints = manifest.get("checkpoints") + require( + isinstance(nodes, list) and len(nodes) == EXPECTED_NODE_COUNT, + "full manifest must contain exactly 308 nodes", + ) + require( + isinstance(tensors, list) and bool(tensors), + "full manifest tensors must be a non-empty list", + ) + require( + isinstance(checkpoints, list) and bool(checkpoints), + "full manifest checkpoints must be a non-empty list", + ) + tolerances = manifest.get("tolerances") + require(isinstance(tolerances, dict), "tolerances must be an object") + require( + tolerances.get("atol") == 0.00005 + and tolerances.get("rtol") == 0.0001, + "global tolerances differ from the validated contract", + ) + overrides = tolerances.get("checkpoint_overrides") + require( + isinstance(overrides, dict) and set(overrides) == {"N288"}, + "checkpoint tolerance overrides differ from the validated contract", + ) + n288_tolerance = overrides["N288"] + require( + isinstance(n288_tolerance, dict) + and n288_tolerance.get("atol") == 0.0002 + and n288_tolerance.get("rtol") == 0.0001, + "N288 tolerance differs from the validated contract", + ) + + nodes_by_id: Dict[str, Dict[str, Any]] = {} + output_to_node: Dict[str, str] = {} + for expected_index, node in enumerate(nodes): + require(isinstance(node, dict), "node record must be an object") + node_id = node.get("node_id") + require( + parse_node_id(node_id, "nodes.node_id") == expected_index + and integer(node.get("index"), "{}.index".format(node_id)) + == expected_index, + "nodes are not in exact N000:N307 order", + ) + require(node_id not in nodes_by_id, "duplicate node {}".format(node_id)) + outputs = node.get("outputs") + require( + isinstance(outputs, list) and bool(outputs), + "{} has no outputs".format(node_id), + ) + for output in outputs: + require( + isinstance(output, str) and output not in output_to_node, + "invalid or duplicate graph output {!r}".format(output), + ) + output_to_node[output] = node_id + nodes_by_id[node_id] = node + + tensors_by_name: Dict[str, Dict[str, Any]] = {} + for tensor in tensors: + require(isinstance(tensor, dict), "tensor record must be an object") + name = tensor.get("name") + require( + isinstance(name, str) and name != "", + "tensor name must be a non-empty string", + ) + require( + name not in tensors_by_name, + "duplicate tensor {!r}".format(name), + ) + dtype = tensor.get("dtype") + require( + dtype in DTYPE_INFO, + "tensor {!r} has unsupported dtype {!r}".format(name, dtype), + ) + elements = integer(tensor.get("elements"), "{}.elements".format(name)) + require( + shape_elements(tensor.get("shape"), "{}.shape".format(name)) + == elements, + "tensor {!r} shape/elements disagree".format(name), + ) + require( + integer(tensor.get("nbytes"), "{}.nbytes".format(name)) + == elements * DTYPE_INFO[dtype][1], + "tensor {!r} nbytes disagree with dtype/shape".format(name), + ) + tensors_by_name[name] = tensor + + require( + set(output_to_node).issubset(tensors_by_name), + "one or more node outputs have no tensor descriptor", + ) + return nodes_by_id, tensors_by_name + + +def compare_checkpoints( + manifest: Dict[str, Any], + dump: bytes, + golden: bytes, + atol: float, + rtol: float, + nodes_by_id: Dict[str, Dict[str, Any]], + tensors_by_name: Dict[str, Dict[str, Any]], +) -> Tuple[List[Dict[str, Any]], Optional[Dict[str, Any]]]: + result = manifest["result"] + memory_map = manifest["memory_map"] + output_base = integer( + result.get("workspace_offset_within_dump"), + "result.workspace_offset_within_dump", + ) + workspace_bytes = integer( + memory_map.get("workspace_bytes"), "memory_map.workspace_bytes" + ) + golden_bytes = integer( + manifest["blobs"]["goldens"].get("nbytes"), + "blobs.goldens.nbytes", + ) + output_tensor = result.get("output_tensor") + require( + isinstance(output_tensor, str) and output_tensor != "", + "result.output_tensor must be a tensor name", + ) + + seen_nodes = set() + seen_tensors = set() + workspace_ranges: List[Tuple[int, int, str]] = [] + golden_ranges: List[Tuple[int, int, str]] = [] + tolerance_overrides = manifest["tolerances"].get( + "checkpoint_overrides", {} + ) + require( + isinstance(tolerance_overrides, dict), + "tolerances.checkpoint_overrides must be an object", + ) + reports: List[Dict[str, Any]] = [] + final_report: Optional[Dict[str, Any]] = None + final_checkpoint_report: Optional[Dict[str, Any]] = None + candidate_report: Optional[Dict[str, Any]] = None + candidate_actual: Optional[np.ndarray] = None + candidate_reference: Optional[np.ndarray] = None + output_actual: Optional[np.ndarray] = None + output_reference: Optional[np.ndarray] = None + for checkpoint_index, checkpoint in enumerate(manifest["checkpoints"]): + field = "checkpoints[{}]".format(checkpoint_index) + require(isinstance(checkpoint, dict), "{} must be an object".format(field)) + node_id = checkpoint.get("node_id") + tensor_name = checkpoint.get("tensor") + require(node_id in nodes_by_id, "{} names an unknown node".format(field)) + require( + isinstance(tensor_name, str) and tensor_name in tensors_by_name, + "{} names an unknown tensor".format(field), + ) + require( + node_id not in seen_nodes, + "duplicate checkpoint node {}".format(node_id), + ) + require( + tensor_name not in seen_tensors, + "duplicate checkpoint tensor {!r}".format(tensor_name), + ) + seen_nodes.add(node_id) + seen_tensors.add(tensor_name) + + tensor = tensors_by_name[tensor_name] + node = nodes_by_id[node_id] + require( + tensor_name in node["outputs"], + "{} is not produced by {}".format(tensor_name, node_id), + ) + require( + tensor.get("storage") == "workspace" + and tensor.get("checkpoint") is True + and tensor.get("producer") == node_id, + "{} is not a pinned workspace output".format(tensor_name), + ) + for name in ("dtype", "shape", "elements", "nbytes"): + require( + checkpoint.get(name) == tensor.get(name), + "{} {} disagrees with tensor descriptor".format(field, name), + ) + + dtype = checkpoint["dtype"] + elements = integer(checkpoint["elements"], "{}.elements".format(field)) + nbytes = integer(checkpoint["nbytes"], "{}.nbytes".format(field)) + workspace_offset = integer( + checkpoint.get("workspace_offset"), + "{}.workspace_offset".format(field), + ) + golden_offset = integer( + checkpoint.get("golden_offset"), + "{}.golden_offset".format(field), + ) + require( + workspace_offset == integer( + tensor.get("offset"), "{}.tensor.offset".format(field) + ), + "{} workspace offset disagrees with tensor descriptor".format(field), + ) + require( + workspace_offset >= 0 + and workspace_offset + nbytes <= workspace_bytes, + "{} exceeds the workspace".format(field), + ) + require( + golden_offset >= 0 and golden_offset + nbytes <= golden_bytes, + "{} exceeds the golden blob".format(field), + ) + for start, end, prior_name in workspace_ranges: + require( + workspace_offset + nbytes <= start or workspace_offset >= end, + "{} overlaps checkpoint {!r} in the workspace".format( + field, prior_name + ), + ) + for start, end, prior_name in golden_ranges: + require( + golden_offset + nbytes <= start or golden_offset >= end, + "{} overlaps checkpoint {!r} in the golden blob".format( + field, prior_name + ), + ) + workspace_ranges.append( + (workspace_offset, workspace_offset + nbytes, tensor_name) + ) + golden_ranges.append( + (golden_offset, golden_offset + nbytes, tensor_name) + ) + + actual_raw = dump[ + output_base + workspace_offset: + output_base + workspace_offset + nbytes + ] + reference_raw = golden[golden_offset:golden_offset + nbytes] + require( + len(actual_raw) == nbytes and len(reference_raw) == nbytes, + "{} data is truncated".format(field), + ) + expected_golden_sha = checkpoint.get("golden_sha256") + require( + isinstance(expected_golden_sha, str) + and bytes_sha256(reference_raw) == expected_golden_sha, + "{} golden segment SHA-256 mismatch".format(field), + ) + + numpy_dtype = DTYPE_INFO[dtype][0] + actual = np.frombuffer(actual_raw, dtype=numpy_dtype, count=elements) + reference = np.frombuffer( + reference_raw, dtype=numpy_dtype, count=elements + ) + checkpoint_atol = atol + checkpoint_rtol = rtol + override = tolerance_overrides.get(node_id) + if override is not None: + require( + isinstance(override, dict), + "tolerance override {} must be an object".format(node_id), + ) + checkpoint_atol = float(override.get("atol", atol)) + checkpoint_rtol = float(override.get("rtol", rtol)) + require( + math.isfinite(checkpoint_atol) + and math.isfinite(checkpoint_rtol) + and checkpoint_atol >= 0.0 + and checkpoint_rtol >= 0.0, + "tolerance override {} is invalid".format(node_id), + ) + if dtype == "FLOAT": + metrics = compare_float( + actual, reference, checkpoint_atol, checkpoint_rtol + ) + else: + metrics = compare_int64(actual, reference) + metrics.update( + { + "node_id": node_id, + "tensor": tensor_name, + "dtype": dtype, + "shape": checkpoint["shape"], + "workspace_offset": workspace_offset, + "golden_offset": golden_offset, + "actual_sha256": bytes_sha256(actual_raw), + "reference_sha256": bytes_sha256(reference_raw), + } + ) + reports.append(metrics) + print( + "CHECKPOINT {} node={} tensor={} dtype={} shape={} " + "max_abs={:.9g} max_rel={:.9g} mean_abs={:.9g} " + "mismatches={}/{} atol={} rtol={}".format( + "PASS" if metrics["pass"] else "FAIL", + node_id, + tensor_name, + dtype, + checkpoint["shape"], + metrics["max_abs"], + metrics["max_rel"], + metrics["mean_abs"], + metrics["mismatch_count"], + metrics["elements"], + metrics["atol"], + metrics["rtol"], + ) + ) + if node_id == "N288" and checkpoint["shape"] == [1, 8400, 84]: + candidate_report = metrics + candidate_actual = actual.reshape(1, 8400, 84).copy() + candidate_reference = reference.reshape(1, 8400, 84).copy() + if tensor_name == output_tensor: + require( + final_report is None, + "result.output_tensor has multiple checkpoint records", + ) + final_checkpoint_report = metrics + final_report = metrics + if checkpoint["shape"] == [1, 300, 6] and dtype == "FLOAT": + output_actual = actual.reshape(1, 300, 6).copy() + output_reference = reference.reshape(1, 300, 6).copy() + preview_count = min(5, 300) + final_report["record_preview"] = { + "actual": json_float_records( + actual.reshape(1, 300, 6)[0, :preview_count, :] + ), + "reference": json_float_records( + reference.reshape(1, 300, 6)[ + 0, :preview_count, : + ] + ), + } + + require( + final_report is not None, + "result.output_tensor is not one of the declared checkpoints", + ) + require( + final_checkpoint_report is not None + and candidate_report is not None + and candidate_actual is not None + and candidate_reference is not None + and output_actual is not None + and output_reference is not None, + "full checkpoints must include N288 candidates and FLOAT output0", + ) + direct_output_pass = bool(final_report["pass"]) + selection = validate_selection_tail( + candidate_actual, + candidate_reference, + output_actual, + output_reference, + bool(candidate_report["pass"]), + direct_output_pass, + ) + final_report["selection_validation"] = selection + final_report["direct_ort_pass"] = direct_output_pass + final_report["direct_ort_mismatch_count"] = final_report["mismatch_count"] + final_report["unexplained_mismatch_count"] = ( + 0 if selection["pass"] else final_report["mismatch_count"] + ) + final_report["pass"] = selection["pass"] + print( + "SELECTION_TAIL {} mode={} first_margin={:.9g} " + "second_margin={:.9g} anchor_overlap={}/300 pair_overlap={}/300 " + "actual_replay_exact={} reference_replay_exact={}".format( + "PASS" if selection["pass"] else "FAIL", + selection["mode"], + selection["first_topk"]["margin"], + selection["second_topk"]["margin"], + selection["selected_anchor_overlap"], + selection["final_anchor_class_overlap"], + selection["actual_replay_matches_c_output_bitwise"], + selection["reference_replay_matches_ort_output_bitwise"], + ) + ) + print( + "FINAL_OUTPUT {} tensor={} node={} shape={} mode={} " + "max_abs={:.9g} max_rel={:.9g} direct_mismatches={}/{} " + "unexplained_mismatches={} actual_sha256={}".format( + "PASS" if final_report["pass"] else "FAIL", + final_report["tensor"], + final_report["node_id"], + final_report["shape"], + selection["mode"], + final_report["max_abs"], + final_report["max_rel"], + final_report["mismatch_count"], + final_report["elements"], + final_report["unexplained_mismatch_count"], + final_report["actual_sha256"], + ) + ) + return reports, final_report + + +def write_json(path: Optional[Path], report: Dict[str, Any]) -> None: + if path is None: + return + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text( + json.dumps(report, indent=2, allow_nan=False) + "\n", + encoding="utf-8", + ) + + +def run(args: argparse.Namespace) -> Tuple[int, Dict[str, Any]]: + full_dir = args.full_dir.resolve() + report: Dict[str, Any] = { + "schema_version": 1, + "comparison_kind": "full_graph_checkpoints", + "pass": False, + "errors": [], + "full_dir": str(full_dir), + "dump_path": str(args.dump.resolve()), + } + try: + require(full_dir.is_dir(), "full package directory does not exist") + manifest_path = full_dir / "slice_manifest.json" + require(manifest_path.is_file(), "missing slice_manifest.json") + manifest = json.loads(manifest_path.read_text(encoding="utf-8")) + require(isinstance(manifest, dict), "manifest root must be an object") + nodes_by_id, tensors_by_name = validate_manifest(manifest) + + source_check = verify_source(manifest, args.model.resolve()) + report["source"] = source_check + print( + "SOURCE {} revision={} bytes={} sha256={}".format( + "PASS" if source_check["pass"] else "FAIL", + EXPECTED_REVISION, + source_check["bytes"], + source_check["actual_sha256"], + ) + ) + + blob_pass, blob_checks = verify_blobs(manifest, full_dir) + report["blob_pass"] = blob_pass + report["blob_checks"] = blob_checks + header_identity = verify_generated_header(manifest, full_dir) + report["generated_header"] = header_identity + print( + "GENERATED_HEADER {} bytes={} sha256={}".format( + "PASS" if header_identity["pass"] else "FAIL", + header_identity["actual_bytes"], + header_identity["actual_sha256"], + ) + ) + require(source_check["pass"], "pinned source identity check failed") + require(blob_pass, "one or more full-package blobs failed identity checks") + require( + header_identity["pass"], + "generated header identity check failed", + ) + + dump = args.dump.read_bytes() + expected_dump_bytes = integer( + manifest["memory_map"].get("dump_size"), + "memory_map.dump_size", + ) + dump_pass = len(dump) == expected_dump_bytes + report["dump"] = { + "pass": dump_pass, + "expected_bytes": expected_dump_bytes, + "actual_bytes": len(dump), + "sha256": bytes_sha256(dump), + } + require( + dump_pass, + "dump size mismatch: expected {}, got {}".format( + expected_dump_bytes, len(dump) + ), + ) + + result = manifest.get("result") + memory_map = manifest.get("memory_map") + memory_plan = manifest.get("memory_plan") + require(isinstance(result, dict), "result must be an object") + require(isinstance(memory_map, dict), "memory_map must be an object") + require(isinstance(memory_plan, dict), "memory_plan must be an object") + require(result.get("magic") == "YRF1", "result magic is not YRF1") + require( + integer(result.get("header_bytes"), "result.header_bytes") + == integer( + result.get("workspace_offset_within_dump"), + "result.workspace_offset_within_dump", + ), + "workspace does not immediately follow the result header", + ) + require( + integer( + memory_map.get("result_device_offset"), + "memory_map.result_device_offset", + ) + == 0, + "full dump must begin at result_device_offset zero", + ) + workspace_bytes = integer( + memory_map.get("workspace_bytes"), "memory_map.workspace_bytes" + ) + require( + workspace_bytes + == integer(memory_plan.get("arena_bytes"), "memory_plan.arena_bytes"), + "workspace and liveness arena byte counts disagree", + ) + output_base = integer( + result.get("workspace_offset_within_dump"), + "result.workspace_offset_within_dump", + ) + workspace_end = output_base + workspace_bytes + require( + workspace_end <= len(dump), + "dump is too short for the declared workspace", + ) + + header = result_header(dump) + computed_fnv = fnv1a(dump[output_base:workspace_end]) + expected_header = { + "magic": RESULT_MAGIC, + "version": RESULT_VERSION, + "status": 0, + "failed_node": 0xFFFFFFFF, + "failed_op": 0, + "first_node": 0, + "last_node": 307, + "node_count": len(manifest["nodes"]), + "tensor_count": len(manifest["tensors"]), + "workspace_bytes": workspace_bytes, + "input_blob_bytes": integer( + manifest["blobs"]["inputs"].get("nbytes"), + "blobs.inputs.nbytes", + ), + "weight_blob_bytes": integer( + manifest["blobs"]["weights"].get("nbytes"), + "blobs.weights.nbytes", + ), + "math_version": MATH_VERSION, + "reserved32": [0, 0, 0], + "workspace_fnv1a": computed_fnv, + "reserved64": [0, 0, 0, 0, 0, 0, 0], + } + header_checks = { + name: header.get(name) == expected + for name, expected in expected_header.items() + } + header_pass = all(header_checks.values()) + report["header_pass"] = header_pass + report["header_checks"] = header_checks + report["expected_header"] = expected_header + report["header"] = header + print( + "YRF1 {} status={} nodes=N{:03d}:N{:03d} " + "workspace_bytes={} workspace_fnv1a={:016x}".format( + "PASS" if header_pass else "FAIL", + header["status_name"], + header["first_node"], + header["last_node"], + header["workspace_bytes"], + header["workspace_fnv1a"], + ) + ) + require(header_pass, "YRF1 header or workspace FNV check failed") + + atol = ( + args.atol + if args.atol is not None + else manifest["tolerances"]["atol"] + ) + rtol = ( + args.rtol + if args.rtol is not None + else manifest["tolerances"]["rtol"] + ) + require( + isinstance(atol, (int, float)) + and isinstance(rtol, (int, float)) + and math.isfinite(float(atol)) + and math.isfinite(float(rtol)) + and float(atol) >= 0.0 + and float(rtol) >= 0.0, + "atol and rtol must be finite and non-negative", + ) + atol = float(atol) + rtol = float(rtol) + require( + atol <= float(manifest["tolerances"]["atol"]) + and rtol <= float(manifest["tolerances"]["rtol"]), + "command-line tolerances may tighten but not loosen the " + "validated contract", + ) + golden_path = safe_package_path( + full_dir, + manifest["blobs"]["goldens"]["path"], + "blobs.goldens.path", + ) + golden = golden_path.read_bytes() + checkpoints, final_output = compare_checkpoints( + manifest, + dump, + golden, + atol, + rtol, + nodes_by_id, + tensors_by_name, + ) + checkpoint_pass = bool(checkpoints) and all( + item["pass"] for item in checkpoints + ) + report["tolerances"] = {"atol": atol, "rtol": rtol} + report["direct_output_required"] = args.require_direct_output + report["checkpoint_pass"] = checkpoint_pass + report["checkpoints"] = checkpoints + report["final_output"] = final_output + output_pass = bool( + final_output is not None + and ( + final_output["direct_ort_pass"] + if args.require_direct_output + else final_output["pass"] + ) + ) + report["pass"] = bool( + source_check["pass"] + and blob_pass + and header_identity["pass"] + and dump_pass + and header_pass + and checkpoint_pass + and output_pass + ) + except ( + CompareError, + KeyError, + OSError, + TypeError, + ValueError, + json.JSONDecodeError, + ) as error: + report["errors"].append(str(error)) + print("error: {}".format(error), file=sys.stderr) + + print( + "FULL_COMPARE {} selector={} checkpoints={} runtime_status={}".format( + "PASS" if report["pass"] else "FAIL", + EXPECTED_SELECTOR, + len(report.get("checkpoints", [])), + report.get("header", {}).get("status_name", "unavailable"), + ) + ) + return (0 if report["pass"] else 1), report + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser( + description=( + "compare declared full-graph checkpoints in a YRF1 C dump " + "against exact-artifact ONNX Runtime goldens" + ) + ) + parser.add_argument( + "full_dir", + type=Path, + help="schema-v2 full package directory", + ) + parser.add_argument("dump", type=Path, help="full YRF1 launcher dump") + parser.add_argument( + "--model", + type=Path, + default=DEFAULT_MODEL, + help="checksum-verified pinned ONNX source", + ) + parser.add_argument("--atol", type=float) + parser.add_argument("--rtol", type=float) + parser.add_argument( + "--require-direct-output", + action="store_true", + help=( + "reject tie-aware selection validation unless output0 also " + "passes direct positional ORT tolerance" + ), + ) + parser.add_argument( + "--json", type=Path, help="write the complete machine-readable report" + ) + return parser.parse_args() + + +def main() -> int: + args = parse_args() + status, report = run(args) + write_json(args.json, report) + return status + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/ported_models/yolov10n_hf_reference/tools/compare_range.py b/ported_models/yolov10n_hf_reference/tools/compare_range.py new file mode 100755 index 00000000..ec4411b7 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/tools/compare_range.py @@ -0,0 +1,801 @@ +#!/usr/bin/env python3 +"""Compare every range output with its pinned ONNX Runtime golden.""" + +from __future__ import annotations + +import argparse +import hashlib +import json +import math +from pathlib import Path +import struct +import sys +from typing import Any, Dict, List, Optional, Sequence, Tuple + +import numpy as np + + +PORT_ROOT = Path(__file__).resolve().parents[1] +REPO_ROOT = PORT_ROOT.parents[1] +DEFAULT_MODEL = REPO_ROOT / "local-artifacts/yolov10n_hf_reference/model.onnx" +EXPECTED_REPO = "onnx-community/yolov10n" +EXPECTED_REVISION = "57657320425ee34056408a57ad9d29c4d4815bd8" +EXPECTED_FILENAME = "onnx/model.onnx" +EXPECTED_SOURCE_SHA256 = ( + "a77dd863933f184a19e84361c64b788228a7c7dacc2c78939239a96ad3efca3b" +) +EXPECTED_LICENSE = "AGPL-3.0" +RESULT_MAGIC = 0x31465259 +RESULT_VERSION = 1 +MATH_VERSION = 1 +RESULT_STRUCT_BYTES = 128 +HEADER_U32 = struct.Struct("<16I") +HEADER_U64 = struct.Struct("<8Q") +DTYPES = {"FLOAT": (" None: + if not condition: + raise CompareError(message) + + +def file_sha256(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as source: + for block in iter(lambda: source.read(1024 * 1024), b""): + digest.update(block) + return digest.hexdigest() + + +def bytes_sha256(data: bytes) -> str: + return hashlib.sha256(data).hexdigest() + + +def fnv1a(data: bytes) -> int: + result = 14695981039346656037 + for byte in data: + result ^= byte + result = (result * 1099511628211) & 0xFFFFFFFFFFFFFFFF + return result + + +def integer(value: Any, field: str) -> int: + require( + isinstance(value, int) and not isinstance(value, bool), + "{} must be an integer".format(field), + ) + return int(value) + + +def parse_node_id(value: Any, field: str) -> int: + require( + isinstance(value, str) + and len(value) == 4 + and value[0] == "N" + and value[1:].isdigit(), + "{} must have form N000".format(field), + ) + return int(value[1:]) + + +def shape_elements(shape: Any, field: str) -> int: + require(isinstance(shape, list), "{} must be a list".format(field)) + elements = 1 + for index, value in enumerate(shape): + dimension = integer(value, "{}[{}]".format(field, index)) + require(dimension >= 0, "{} contains a negative dimension".format(field)) + elements *= dimension + return elements + + +def safe_package_path( + package_dir: Path, relative: Any, field: str +) -> Path: + require( + isinstance(relative, str) and relative, + "{} must be a non-empty relative path".format(field), + ) + resolved = (package_dir / relative).resolve() + try: + resolved.relative_to(package_dir) + except ValueError: + raise CompareError("{} escapes the range package".format(field)) + return resolved + + +def read_result_header(data: bytes) -> Dict[str, Any]: + require( + len(data) >= RESULT_STRUCT_BYTES, + "dump is shorter than the 128-byte result structure", + ) + words = HEADER_U32.unpack_from(data, 0) + longs = HEADER_U64.unpack_from(data, 64) + return { + "magic": words[0], + "version": words[1], + "status": words[2], + "failed_node": words[3], + "failed_op": words[4], + "first_node": words[5], + "last_node": words[6], + "node_count": words[7], + "tensor_count": words[8], + "workspace_bytes": words[9], + "input_blob_bytes": words[10], + "weight_blob_bytes": words[11], + "math_version": words[12], + "reserved32": list(words[13:16]), + "workspace_fnv1a": longs[0], + "reserved64": list(longs[1:8]), + } + + +def compare_float( + actual: np.ndarray, + reference: np.ndarray, + atol: float, + rtol: float, +) -> Dict[str, Any]: + actual64 = actual.astype(np.float64) + reference64 = reference.astype(np.float64) + finite = np.isfinite(actual64) & np.isfinite(reference64) + absolute = np.zeros(actual64.shape, dtype=np.float64) + absolute[finite] = np.abs(actual64[finite] - reference64[finite]) + allowed = atol + rtol * np.abs(reference64) + mismatch = ~finite + mismatch[finite] |= absolute[finite] > allowed[finite] + relative = np.zeros(actual64.shape, dtype=np.float64) + relative[finite] = absolute[finite] / np.maximum( + np.abs(reference64[finite]), np.finfo(np.float32).tiny + ) + nonfinite = np.flatnonzero(~finite) + if nonfinite.size: + worst = int(nonfinite[0]) + else: + worst = int(np.argmax(absolute)) if absolute.size else 0 + finite_abs = absolute[finite] + finite_rel = relative[finite] + return { + "comparison": "tolerance", + "pass": bool(not np.any(mismatch)), + "elements": int(actual.size), + "mismatch_count": int(np.count_nonzero(mismatch)), + "nonfinite_actual_count": int( + np.count_nonzero(~np.isfinite(actual64)) + ), + "nonfinite_reference_count": int( + np.count_nonzero(~np.isfinite(reference64)) + ), + "max_abs": float(np.max(finite_abs)) if finite_abs.size else 0.0, + "mean_abs": float(np.mean(finite_abs)) if finite_abs.size else 0.0, + "max_rel": float(np.max(finite_rel)) if finite_rel.size else 0.0, + "worst_flat_index": worst, + "worst_actual": ( + float(actual.flat[worst]) + if actual.size and np.isfinite(actual.flat[worst]) + else None + ), + "worst_reference": ( + float(reference.flat[worst]) + if reference.size and np.isfinite(reference.flat[worst]) + else None + ), + "atol": atol, + "rtol": rtol, + } + + +def compare_int64( + actual: np.ndarray, reference: np.ndarray +) -> Dict[str, Any]: + mismatch = actual != reference + absolute = np.abs( + actual.astype(np.longdouble) - reference.astype(np.longdouble) + ) + denominator = np.maximum( + np.abs(reference.astype(np.longdouble)), np.longdouble(1.0) + ) + relative = absolute / denominator + worst = int(np.argmax(absolute)) if absolute.size else 0 + return { + "comparison": "exact", + "pass": bool(not np.any(mismatch)), + "elements": int(actual.size), + "mismatch_count": int(np.count_nonzero(mismatch)), + "nonfinite_actual_count": 0, + "nonfinite_reference_count": 0, + "max_abs": float(np.max(absolute)) if absolute.size else 0.0, + "mean_abs": float(np.mean(absolute)) if absolute.size else 0.0, + "max_rel": float(np.max(relative)) if relative.size else 0.0, + "worst_flat_index": worst, + "worst_actual": int(actual.flat[worst]) if actual.size else None, + "worst_reference": ( + int(reference.flat[worst]) if reference.size else None + ), + "atol": 0, + "rtol": 0, + } + + +def verify_source( + manifest: Dict[str, Any], model_path: Path +) -> Dict[str, Any]: + source = manifest.get("source") + require(isinstance(source, dict), "source must be an object") + expected = { + "repo": EXPECTED_REPO, + "revision": EXPECTED_REVISION, + "filename": EXPECTED_FILENAME, + "sha256": EXPECTED_SOURCE_SHA256, + "license": EXPECTED_LICENSE, + } + fields = { + name: source.get(name) == value for name, value in expected.items() + } + exists = model_path.is_file() + actual_sha = file_sha256(model_path) if exists else None + passed = all(fields.values()) and actual_sha == EXPECTED_SOURCE_SHA256 + return { + "pass": passed, + "path": str(model_path), + "exists": exists, + "expected_sha256": EXPECTED_SOURCE_SHA256, + "actual_sha256": actual_sha, + "manifest_fields": fields, + } + + +def verify_blob( + package_dir: Path, record: Any, field: str +) -> Tuple[bytes, Dict[str, Any]]: + require(isinstance(record, dict), "{} must be an object".format(field)) + path = safe_package_path(package_dir, record.get("path"), field + ".path") + require(path.is_file(), "{} is missing".format(path)) + data = path.read_bytes() + expected_bytes = integer(record.get("nbytes"), field + ".nbytes") + expected_sha = record.get("sha256") + require( + isinstance(expected_sha, str) and len(expected_sha) == 64, + "{}.sha256 is invalid".format(field), + ) + actual_sha = bytes_sha256(data) + require( + len(data) == expected_bytes, + "{} size mismatch: manifest={} actual={}".format( + field, expected_bytes, len(data) + ), + ) + require( + actual_sha == expected_sha, + "{} SHA-256 mismatch".format(field), + ) + return data, { + "pass": True, + "path": str(path), + "nbytes": len(data), + "sha256": actual_sha, + } + + +def compare_package( + package_dir: Path, + dump_path: Path, + model_path: Path, + atol_override: Optional[float], + rtol_override: Optional[float], +) -> Dict[str, Any]: + package_dir = package_dir.resolve() + manifest_path = package_dir / "slice_manifest.json" + require(manifest_path.is_file(), "missing {}".format(manifest_path)) + manifest = json.loads(manifest_path.read_text(encoding="utf-8")) + require(manifest.get("schema_version") == 2, "expected schema_version 2") + require( + manifest.get("manifest_kind") == "contiguous_node_range", + "expected contiguous_node_range manifest", + ) + + source_report = verify_source(manifest, model_path.resolve()) + require(source_report["pass"], "pinned source verification failed") + source = manifest["source"] + instrumented_path = safe_package_path( + package_dir, + source.get("instrumented_path"), + "source.instrumented_path", + ) + require( + instrumented_path.is_file() + and file_sha256(instrumented_path) + == source.get("instrumented_sha256"), + "instrumented range model identity mismatch", + ) + source_report["instrumented_path"] = str(instrumented_path) + source_report["instrumented_sha256"] = file_sha256(instrumented_path) + + generated = manifest.get("generated") + require(isinstance(generated, dict), "generated must be an object") + _, header_report = verify_blob( + package_dir, generated.get("header"), "generated.header" + ) + + selection = manifest.get("selection") + require(isinstance(selection, dict), "selection must be an object") + first = parse_node_id(selection.get("first_node"), "selection.first_node") + last = parse_node_id(selection.get("last_node"), "selection.last_node") + node_count = integer(selection.get("node_count"), "selection.node_count") + require(first <= last, "selection is descending") + require(node_count == last - first + 1, "selection node count mismatch") + require( + selection.get("selector") + == "N{:03d}:N{:03d}".format(first, last), + "selector is not canonical", + ) + + nodes = manifest.get("nodes") + require( + isinstance(nodes, list) and len(nodes) == node_count, + "node list does not cover the selected range", + ) + nodes_by_id: Dict[str, Dict[str, Any]] = {} + for local_index, node in enumerate(nodes): + field = "nodes[{}]".format(local_index) + require(isinstance(node, dict), "{} must be an object".format(field)) + global_index = first + local_index + node_id = "N{:03d}".format(global_index) + require(node.get("node_id") == node_id, "{} id mismatch".format(field)) + require( + node.get("index") == global_index + and node.get("local_index") == local_index, + "{} ordinal mismatch".format(field), + ) + require( + isinstance(node.get("inputs"), list) + and isinstance(node.get("outputs"), list) + and len(node["outputs"]) >= 1, + "{} inputs/outputs are invalid".format(field), + ) + nodes_by_id[node_id] = node + + memory_map = manifest.get("memory_map") + require(isinstance(memory_map, dict), "memory_map must be an object") + result_offset = integer( + memory_map.get("result_device_offset"), + "memory_map.result_device_offset", + ) + input_offset = integer( + memory_map.get("input_device_offset"), + "memory_map.input_device_offset", + ) + weight_offset = integer( + memory_map.get("weight_device_offset"), + "memory_map.weight_device_offset", + ) + workspace_bytes = integer( + memory_map.get("workspace_bytes"), + "memory_map.workspace_bytes", + ) + input_bytes = integer( + memory_map.get("input_blob_bytes"), + "memory_map.input_blob_bytes", + ) + weight_bytes = integer( + memory_map.get("weight_blob_bytes"), + "memory_map.weight_blob_bytes", + ) + dump_size = integer(memory_map.get("dump_size"), "memory_map.dump_size") + mem_size = integer(memory_map.get("mem_size"), "memory_map.mem_size") + require(result_offset == 0, "result offset must be zero") + require(dump_size <= mem_size, "dump exceeds memory size") + + result_record = manifest.get("result") + require(isinstance(result_record, dict), "result must be an object") + header_bytes = integer( + result_record.get("header_bytes"), "result.header_bytes" + ) + require( + header_bytes >= RESULT_STRUCT_BYTES, + "result header is shorter than the ABI structure", + ) + workspace_base = result_offset + header_bytes + require( + workspace_base + workspace_bytes <= dump_size, + "workspace exceeds dump size", + ) + require( + input_offset + input_bytes <= mem_size + and weight_offset + weight_bytes <= mem_size, + "input or weights exceed memory size", + ) + + blobs = manifest.get("blobs") + require(isinstance(blobs, dict), "blobs must be an object") + input_blob, input_report = verify_blob( + package_dir, blobs.get("inputs"), "blobs.inputs" + ) + weight_blob, weight_report = verify_blob( + package_dir, blobs.get("weights"), "blobs.weights" + ) + golden_blob, golden_report = verify_blob( + package_dir, blobs.get("goldens"), "blobs.goldens" + ) + require(len(input_blob) == input_bytes, "input blob/memory map mismatch") + require( + len(weight_blob) == weight_bytes, "weight blob/memory map mismatch" + ) + + tensors = manifest.get("tensors") + require(isinstance(tensors, list) and tensors, "tensors must be non-empty") + tensors_by_name: Dict[str, Dict[str, Any]] = {} + for tensor_index, tensor in enumerate(tensors): + field = "tensors[{}]".format(tensor_index) + require(isinstance(tensor, dict), "{} must be an object".format(field)) + name = tensor.get("name") + dtype = tensor.get("dtype") + storage = tensor.get("storage") + require( + isinstance(name, str) and name, + "{}.name is invalid".format(field), + ) + require(name not in tensors_by_name, "duplicate tensor {!r}".format(name)) + require(dtype in DTYPES, "{} has unsupported dtype".format(field)) + require(storage in STORAGES, "{} has invalid storage".format(field)) + elements = shape_elements(tensor.get("shape"), field + ".shape") + require( + tensor.get("elements") == elements, + "{} element count mismatch".format(field), + ) + nbytes = elements * DTYPES[dtype][1] + require( + tensor.get("nbytes") == nbytes, + "{} byte count mismatch".format(field), + ) + offset = integer(tensor.get("offset"), field + ".offset") + limit = { + "input": input_bytes, + "weights": weight_bytes, + "workspace": workspace_bytes, + }[storage] + require( + offset >= 0 and offset + nbytes <= limit, + "{} exceeds its {} blob".format(field, storage), + ) + require( + offset % DTYPES[dtype][1] == 0, + "{} offset is not dtype-aligned".format(field), + ) + tensors_by_name[name] = tensor + + for boundary_index, boundary in enumerate(manifest.get("boundary_inputs", [])): + field = "boundary_inputs[{}]".format(boundary_index) + require(isinstance(boundary, dict), "{} must be an object".format(field)) + name = boundary.get("tensor") + require(name in tensors_by_name, "{} tensor is unknown".format(field)) + tensor = tensors_by_name[name] + require( + tensor.get("storage") == "input" + and tensor.get("role") == "boundary_input", + "{} is not an input tensor".format(field), + ) + start = integer(boundary.get("blob_offset"), field + ".blob_offset") + end = start + integer(boundary.get("nbytes"), field + ".nbytes") + raw = input_blob[start:end] + require( + bytes_sha256(raw) == boundary.get("sha256") + == tensor.get("segment_sha256"), + "{} segment SHA-256 mismatch".format(field), + ) + + for initializer_index, initializer in enumerate( + manifest.get("initializers", []) + ): + field = "initializers[{}]".format(initializer_index) + require( + isinstance(initializer, dict), "{} must be an object".format(field) + ) + name = initializer.get("tensor") + require(name in tensors_by_name, "{} tensor is unknown".format(field)) + tensor = tensors_by_name[name] + require( + tensor.get("storage") == "weights" + and tensor.get("role") == "initializer", + "{} is not an initializer tensor".format(field), + ) + start = integer(initializer.get("blob_offset"), field + ".blob_offset") + end = start + integer(initializer.get("nbytes"), field + ".nbytes") + raw = weight_blob[start:end] + require( + bytes_sha256(raw) == initializer.get("sha256") + == tensor.get("segment_sha256"), + "{} segment SHA-256 mismatch".format(field), + ) + + dump_path = dump_path.resolve() + require(dump_path.is_file(), "missing dump {}".format(dump_path)) + dump = dump_path.read_bytes() + require( + len(dump) == dump_size, + "dump size mismatch: expected={} actual={}".format( + dump_size, len(dump) + ), + ) + header = read_result_header(dump) + expected_header = { + "magic": RESULT_MAGIC, + "version": RESULT_VERSION, + "status": 0, + "failed_node": 0xFFFFFFFF, + "failed_op": 0, + "first_node": first, + "last_node": last, + "node_count": node_count, + "tensor_count": len(tensors), + "workspace_bytes": workspace_bytes, + "input_blob_bytes": input_bytes, + "weight_blob_bytes": weight_bytes, + "math_version": MATH_VERSION, + } + for name, expected in expected_header.items(): + require( + header[name] == expected, + "result header {} mismatch: expected={} actual={}".format( + name, expected, header[name] + ), + ) + require( + header["reserved32"] == [0, 0, 0] + and header["reserved64"] == [0] * 7, + "result header reserved fields are nonzero", + ) + workspace = dump[workspace_base:workspace_base + workspace_bytes] + require( + fnv1a(workspace) == header["workspace_fnv1a"], + "workspace FNV-1a mismatch", + ) + + tolerances = manifest.get("tolerances") + require(isinstance(tolerances, dict), "tolerances must be an object") + atol = ( + float(atol_override) + if atol_override is not None + else float(tolerances.get("atol")) + ) + rtol = ( + float(rtol_override) + if rtol_override is not None + else float(tolerances.get("rtol")) + ) + require( + math.isfinite(atol) and math.isfinite(rtol) + and atol >= 0.0 and rtol >= 0.0, + "tolerances must be finite and nonnegative", + ) + + outputs = manifest.get("outputs") + require(isinstance(outputs, list) and outputs, "outputs must be non-empty") + expected_output_count = sum(len(node["outputs"]) for node in nodes) + require( + len(outputs) == expected_output_count, + "output records do not cover every selected node output", + ) + seen_output_ids = set() + seen_tensors = set() + workspace_ranges: List[Tuple[int, int, str]] = [] + golden_ranges: List[Tuple[int, int, str]] = [] + reports = [] + for record_index, record in enumerate(outputs): + field = "outputs[{}]".format(record_index) + require(isinstance(record, dict), "{} must be an object".format(field)) + node_id = record.get("node_id") + output_index = integer( + record.get("output_index"), field + ".output_index" + ) + output_id = record.get("output_id") + name = record.get("tensor") + require(node_id in nodes_by_id, "{} node is unknown".format(field)) + require( + output_id == "{}:O{}".format(node_id, output_index) + and output_id not in seen_output_ids, + "{} output id is invalid or duplicate".format(field), + ) + node = nodes_by_id[node_id] + require( + output_index < len(node["outputs"]) + and node["outputs"][output_index] == name, + "{} does not match the ONNX node output".format(field), + ) + require( + name in tensors_by_name and name not in seen_tensors, + "{} tensor is unknown or duplicate".format(field), + ) + seen_output_ids.add(output_id) + seen_tensors.add(name) + tensor = tensors_by_name[name] + require( + tensor.get("storage") == "workspace" + and tensor.get("role") == "node_output_checkpoint" + and tensor.get("checkpoint") is True + and tensor.get("producer") == node_id, + "{} tensor is not a pinned selected output".format(field), + ) + for key in ("dtype", "shape", "elements", "nbytes"): + require( + record.get(key) == tensor.get(key), + "{} {} disagrees with tensor descriptor".format(field, key), + ) + dtype = record["dtype"] + elements = integer(record["elements"], field + ".elements") + nbytes = integer(record["nbytes"], field + ".nbytes") + workspace_offset = integer( + record.get("workspace_offset"), field + ".workspace_offset" + ) + golden_offset = integer( + record.get("golden_offset"), field + ".golden_offset" + ) + require( + workspace_offset == tensor["offset"] + and workspace_offset + nbytes <= workspace_bytes, + "{} workspace mapping is invalid".format(field), + ) + require( + golden_offset >= 0 + and golden_offset + nbytes <= len(golden_blob), + "{} golden mapping is invalid".format(field), + ) + for start, end, prior in workspace_ranges: + require( + workspace_offset + nbytes <= start + or workspace_offset >= end, + "{} overlaps workspace output {}".format(field, prior), + ) + for start, end, prior in golden_ranges: + require( + golden_offset + nbytes <= start or golden_offset >= end, + "{} overlaps golden output {}".format(field, prior), + ) + workspace_ranges.append( + (workspace_offset, workspace_offset + nbytes, output_id) + ) + golden_ranges.append( + (golden_offset, golden_offset + nbytes, output_id) + ) + actual_raw = workspace[ + workspace_offset:workspace_offset + nbytes + ] + reference_raw = golden_blob[golden_offset:golden_offset + nbytes] + require( + bytes_sha256(reference_raw) == record.get("golden_sha256"), + "{} golden segment SHA-256 mismatch".format(field), + ) + numpy_dtype = DTYPES[dtype][0] + actual = np.frombuffer( + actual_raw, dtype=numpy_dtype, count=elements + ) + reference = np.frombuffer( + reference_raw, dtype=numpy_dtype, count=elements + ) + if dtype == "FLOAT": + metrics = compare_float(actual, reference, atol, rtol) + else: + metrics = compare_int64(actual, reference) + metrics.update( + { + "output_id": output_id, + "node_id": node_id, + "op_type": node["op_type"], + "output_index": output_index, + "tensor": name, + "dtype": dtype, + "shape": record["shape"], + "workspace_offset": workspace_offset, + "golden_offset": golden_offset, + "actual_sha256": bytes_sha256(actual_raw), + "reference_sha256": bytes_sha256(reference_raw), + } + ) + reports.append(metrics) + print( + "NODE_OUTPUT {} id={} op={} tensor={} dtype={} shape={} " + "max_abs={:.9g} max_rel={:.9g} mismatches={}/{}".format( + "PASS" if metrics["pass"] else "FAIL", + output_id, + node["op_type"], + name, + dtype, + record["shape"], + metrics["max_abs"], + metrics["max_rel"], + metrics["mismatch_count"], + metrics["elements"], + ) + ) + + passed = all(item["pass"] for item in reports) + return { + "schema_version": 1, + "kind": "contiguous_range_comparison", + "pass": passed, + "selector": selection["selector"], + "source": source_report, + "manifest": { + "path": str(manifest_path), + "sha256": file_sha256(manifest_path), + "header": header_report, + }, + "dump": { + "path": str(dump_path), + "nbytes": len(dump), + "sha256": file_sha256(dump_path), + }, + "blobs": { + "inputs": input_report, + "weights": weight_report, + "goldens": golden_report, + }, + "result_header": header, + "tolerances": {"atol": atol, "rtol": rtol}, + "summary": { + "node_count": node_count, + "output_count": len(reports), + "passed_outputs": sum(bool(item["pass"]) for item in reports), + "failed_outputs": sum(not bool(item["pass"]) for item in reports), + "total_elements": sum(item["elements"] for item in reports), + "total_mismatches": sum( + item["mismatch_count"] for item in reports + ), + }, + "outputs": reports, + } + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser() + parser.add_argument("range_dir", type=Path) + parser.add_argument("dump", type=Path) + parser.add_argument("--model", type=Path, default=DEFAULT_MODEL) + parser.add_argument("--atol", type=float) + parser.add_argument("--rtol", type=float) + parser.add_argument("--json", type=Path) + return parser.parse_args() + + +def main() -> int: + args = parse_args() + try: + report = compare_package( + args.range_dir, + args.dump, + args.model, + args.atol, + args.rtol, + ) + except (CompareError, OSError, ValueError, KeyError) as exc: + print("RANGE_COMPARE FAIL {}".format(exc), file=sys.stderr) + return 2 + if args.json is not None: + args.json.parent.mkdir(parents=True, exist_ok=True) + args.json.write_text( + json.dumps(report, indent=2, allow_nan=False) + "\n", + encoding="utf-8", + ) + summary = report["summary"] + print( + "RANGE_COMPARE {} selector={} outputs={}/{} " + "mismatches={}/{} report={}".format( + "PASS" if report["pass"] else "FAIL", + report["selector"], + summary["passed_outputs"], + summary["output_count"], + summary["total_mismatches"], + summary["total_elements"], + str(args.json) if args.json is not None else "none", + ) + ) + return 0 if report["pass"] else 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/ported_models/yolov10n_hf_reference/tools/decode_pmc.py b/ported_models/yolov10n_hf_reference/tools/decode_pmc.py new file mode 100755 index 00000000..8575bb5f --- /dev/null +++ b/ported_models/yolov10n_hf_reference/tools/decode_pmc.py @@ -0,0 +1,634 @@ +#!/usr/bin/env python3 +"""Decode a versioned YR PMC region embedded in a full launcher dump. + +The byte offset is intentionally mandatory: launcher dumps can contain several +unrelated regions, and silently scanning for a magic value could accept stale +data from an earlier run. +""" + +import argparse +import json +import struct +import sys +from pathlib import Path +from typing import Any, Dict, List, Optional, Sequence, Tuple + + +REGION_MAGIC = 0x4D505259 # little-endian bytes b"YRPM" +HART_MAGIC = 0x48505259 # little-endian bytes b"YRPH" +AGGREGATE_MAGIC = 0x41505259 # little-endian bytes b"YRPA" +FORMAT_VERSION = 1 +ENDIAN_MARKER = 0x01020304 + +HPM_COUNT = 6 +SC_BANKS = 4 +MS_COUNT = 8 +COUNTERS_PER_BLOCK = 3 +MAX_HARTS = 32 + +HEADER_BYTES = 128 +HART_RECORD_BYTES = 128 +AGGREGATE_OFFSET = HEADER_BYTES + MAX_HARTS * HART_RECORD_BYTES +AGGREGATE_BYTES = 592 +REGION_BYTES = AGGREGATE_OFFSET + AGGREGATE_BYTES + +FLAG_SC_REQUESTED = 1 << 0 +FLAG_MS_REQUESTED = 1 << 1 +KNOWN_FLAGS = FLAG_SC_REQUESTED | FLAG_MS_REQUESTED +ERROR_VALUE = (1 << 64) - 1 + +HEADER_STRUCT = struct.Struct("<8I96x") +HART_STRUCT = struct.Struct("<4I14Q") +AGGREGATE_STRUCT = struct.Struct("<4I72Q") + +HPM_EVENTS: Sequence[Tuple[str, str]] = ( + ("hpmcounter3", "minion_cycles"), + ("hpmcounter4", "retired_instructions_thread_0"), + ("hpmcounter5", "retired_instructions_thread_1"), + ("hpmcounter6", "l2_miss_requests"), + ("hpmcounter7", "minion_icache_requests"), + ("hpmcounter8", "icache_etlink_requests"), +) +SC_EVENTS: Sequence[str] = ("cycles", "all_l2_reads", "all_l2_writes") +MS_EVENTS: Sequence[str] = ("cycles", "all_mesh_reads", "all_mesh_writes") + + +def parse_integer(value: str) -> int: + """Parse decimal or a Python-style base-prefixed integer such as 0x10000.""" + try: + return int(value, 0) + except ValueError as exc: + raise argparse.ArgumentTypeError( + "expected an integer byte offset (decimal or 0x-prefixed)" + ) from exc + + +def hex32(value: int) -> str: + return "0x{:08x}".format(value) + + +def hex64(value: int) -> str: + return "0x{:016x}".format(value) + + +def counter_delta(start: int, end: int) -> Tuple[int, bool]: + """Return the unsigned 64-bit delta and whether the counter wrapped.""" + return ((end - start) & ERROR_VALUE, end < start) + + +def magic_report(actual: int, expected: int, expected_ascii: str) -> Dict[str, Any]: + return { + "actual": actual, + "actual_hex": hex32(actual), + "expected": expected, + "expected_hex": hex32(expected), + "expected_ascii": expected_ascii, + "valid": actual == expected, + } + + +def new_report(path: Path, dump_bytes: int, offset: int) -> Dict[str, Any]: + return { + "status": "FAIL", + "dump": str(path), + "dump_bytes": dump_bytes, + "offset": offset, + "format": { + "name": "YR PMC", + "byte_order": "little", + "expected_magic_ascii": "YRPM", + "expected_magic_hex": hex32(REGION_MAGIC), + "expected_version": FORMAT_VERSION, + "expected_region_bytes": REGION_BYTES, + }, + "header": None, + "harts": [], + "shared": None, + "errors": [], + "warnings": [], + } + + +def add_error(report: Dict[str, Any], message: str) -> None: + report["errors"].append(message) + + +def add_warning(report: Dict[str, Any], message: str) -> None: + report["warnings"].append(message) + + +def decode_hart( + blob: bytes, region_offset: int, slot: int, report: Dict[str, Any] +) -> Dict[str, Any]: + record_offset = region_offset + HEADER_BYTES + slot * HART_RECORD_BYTES + values = HART_STRUCT.unpack_from(blob, record_offset) + magic, hart_id, minion_id, thread_id = values[:4] + starts = values[4:4 + HPM_COUNT] + ends = values[4 + HPM_COUNT:4 + 2 * HPM_COUNT] + errors: List[str] = [] + + if magic != HART_MAGIC: + errors.append( + "hart slot {} magic {} != {}".format( + slot, hex32(magic), hex32(HART_MAGIC) + ) + ) + if hart_id != slot: + errors.append( + "hart slot {} records hart_id {}".format(slot, hart_id) + ) + + counters: List[Dict[str, Any]] = [] + for index, ((csr_name, event_name), start, end) in enumerate( + zip(HPM_EVENTS, starts, ends) + ): + delta, wrapped = counter_delta(start, end) + counters.append( + { + "index": index, + "csr": csr_name, + "event": event_name, + "start": start, + "start_hex": hex64(start), + "end": end, + "end_hex": hex64(end), + "delta": delta, + "delta_hex": hex64(delta), + "wrapped": wrapped, + "status": "PASS", + } + ) + + for message in errors: + add_error(report, message) + return { + "status": "PASS" if not errors else "FAIL", + "slot": slot, + "record_offset": record_offset, + "magic": magic_report(magic, HART_MAGIC, "YRPH"), + "hart_id": hart_id, + "minion_id": minion_id, + "thread_id": thread_id, + "counters": counters, + "errors": errors, + } + + +def decode_shared_family( + family: str, + requested: bool, + supported_mask: int, + block_count: int, + event_names: Sequence[str], + starts: Sequence[int], + ends: Sequence[int], + report: Dict[str, Any], +) -> Dict[str, Any]: + entry_count = block_count * COUNTERS_PER_BLOCK + valid_mask = (1 << entry_count) - 1 + unknown_mask = supported_mask & ~valid_mask + family_upper = family.upper() + samples: List[Dict[str, Any]] = [] + + if unknown_mask: + add_error( + report, + "{} supported mask has out-of-range bits: {}".format( + family_upper, hex32(unknown_mask) + ), + ) + if not requested and supported_mask: + add_error( + report, + "{} reports supported samples although it was not requested".format( + family_upper + ), + ) + if requested and not (supported_mask & valid_mask): + add_warning( + report, + "{} sampling was requested but this firmware/emulator reported " + "no supported counters".format(family_upper), + ) + + for block in range(block_count): + for counter in range(COUNTERS_PER_BLOCK): + flat_index = block * COUNTERS_PER_BLOCK + counter + bit = 1 << flat_index + start = starts[flat_index] + end = ends[flat_index] + supported = bool(supported_mask & bit) + start_valid = start != ERROR_VALUE + end_valid = end != ERROR_VALUE + status = "NOT_REQUESTED" + delta: Optional[int] = None + wrapped: Optional[bool] = None + + if requested: + status = "PASS" if supported else "UNSUPPORTED" + if supported: + if not start_valid or not end_valid: + status = "FAIL" + add_error( + report, + "{} block {} counter {} is marked supported but has " + "an error sentinel endpoint".format( + family_upper, block, counter + ), + ) + else: + delta, wrapped = counter_delta(start, end) + elif requested and start_valid and end_valid: + status = "FAIL" + add_error( + report, + "{} block {} counter {} has two valid endpoints but its " + "support bit is clear".format( + family_upper, block, counter + ), + ) + elif requested and start_valid != end_valid: + status = "FAIL" + add_error( + report, + "{} block {} counter {} was available at only one " + "boundary".format(family_upper, block, counter), + ) + + sample = { + "status": status, + "block": block, + "block_kind": "bank" if family == "sc" else "memory_shire", + "counter": counter, + "event": event_names[counter], + "supported": supported, + "start": start if start_valid else None, + "start_hex": hex64(start) if start_valid else None, + "end": end if end_valid else None, + "end_hex": hex64(end) if end_valid else None, + "delta": delta, + "delta_hex": hex64(delta) if delta is not None else None, + "wrapped": wrapped, + } + samples.append(sample) + + return { + "requested": requested, + "supported": bool(supported_mask & valid_mask), + "supported_count": bin(supported_mask & valid_mask).count("1"), + "entry_count": entry_count, + "supported_mask": supported_mask, + "supported_mask_hex": hex32(supported_mask), + "samples": samples, + } + + +def decode_aggregate( + blob: bytes, region_offset: int, flags: int, report: Dict[str, Any] +) -> Dict[str, Any]: + error_count_before = len(report["errors"]) + record_offset = region_offset + AGGREGATE_OFFSET + values = AGGREGATE_STRUCT.unpack_from(blob, record_offset) + magic, shire_id, sc_supported_mask, ms_supported_mask = values[:4] + cursor = 4 + sc_entries = SC_BANKS * COUNTERS_PER_BLOCK + ms_entries = MS_COUNT * COUNTERS_PER_BLOCK + sc_start = values[cursor:cursor + sc_entries] + cursor += sc_entries + sc_end = values[cursor:cursor + sc_entries] + cursor += sc_entries + ms_start = values[cursor:cursor + ms_entries] + cursor += ms_entries + ms_end = values[cursor:cursor + ms_entries] + + if magic != AGGREGATE_MAGIC: + add_error( + report, + "aggregate magic {} != {}".format( + hex32(magic), hex32(AGGREGATE_MAGIC) + ), + ) + + sc = decode_shared_family( + "sc", + bool(flags & FLAG_SC_REQUESTED), + sc_supported_mask, + SC_BANKS, + SC_EVENTS, + sc_start, + sc_end, + report, + ) + ms = decode_shared_family( + "ms", + bool(flags & FLAG_MS_REQUESTED), + ms_supported_mask, + MS_COUNT, + MS_EVENTS, + ms_start, + ms_end, + report, + ) + return { + "status": ( + "PASS" + if len(report["errors"]) == error_count_before + else "FAIL" + ), + "record_offset": record_offset, + "magic": magic_report(magic, AGGREGATE_MAGIC, "YRPA"), + "shire_id": shire_id, + "sc": sc, + "ms": ms, + } + + +def decode_blob(blob: bytes, path: Path, offset: int) -> Dict[str, Any]: + report = new_report(path, len(blob), offset) + + if offset < 0: + add_error(report, "byte offset must be non-negative") + return report + if offset > len(blob): + add_error( + report, + "byte offset {} is beyond the {}-byte dump".format( + offset, len(blob) + ), + ) + return report + if len(blob) - offset < HEADER_BYTES: + add_error( + report, + "truncated PMC header: need {} bytes at offset {}, have {}".format( + HEADER_BYTES, offset, len(blob) - offset + ), + ) + return report + + ( + magic, + version, + region_bytes, + active_harts, + hpm_count, + max_harts, + flags, + endian_marker, + ) = HEADER_STRUCT.unpack_from(blob, offset) + header = { + "status": "PASS", + "record_offset": offset, + "magic": magic_report(magic, REGION_MAGIC, "YRPM"), + "version": version, + "region_bytes": region_bytes, + "active_harts": active_harts, + "hpm_count": hpm_count, + "max_harts": max_harts, + "flags": { + "raw": flags, + "raw_hex": hex32(flags), + "sc_requested": bool(flags & FLAG_SC_REQUESTED), + "ms_requested": bool(flags & FLAG_MS_REQUESTED), + "unknown_bits_hex": hex32(flags & ~KNOWN_FLAGS), + }, + "endian_marker": endian_marker, + "endian_marker_hex": hex32(endian_marker), + } + report["header"] = header + + header_errors: List[str] = [] + if magic != REGION_MAGIC: + header_errors.append( + "region magic {} != {} (expected ASCII YRPM)".format( + hex32(magic), hex32(REGION_MAGIC) + ) + ) + if version != FORMAT_VERSION: + header_errors.append( + "unsupported format version {}; expected {}".format( + version, FORMAT_VERSION + ) + ) + if region_bytes != REGION_BYTES: + header_errors.append( + "recorded region size {} != v{} size {}".format( + region_bytes, FORMAT_VERSION, REGION_BYTES + ) + ) + if not 1 <= active_harts <= MAX_HARTS: + header_errors.append( + "active_harts {} is outside 1..{}".format( + active_harts, MAX_HARTS + ) + ) + if hpm_count != HPM_COUNT: + header_errors.append( + "hpm_count {} != {}".format(hpm_count, HPM_COUNT) + ) + if max_harts != MAX_HARTS: + header_errors.append( + "max_harts {} != {}".format(max_harts, MAX_HARTS) + ) + if flags & ~KNOWN_FLAGS: + header_errors.append( + "unknown v{} header flag bits {}".format( + FORMAT_VERSION, hex32(flags & ~KNOWN_FLAGS) + ) + ) + if endian_marker != ENDIAN_MARKER: + header_errors.append( + "endian marker {} != {}".format( + hex32(endian_marker), hex32(ENDIAN_MARKER) + ) + ) + + for message in header_errors: + add_error(report, message) + if header_errors: + header["status"] = "FAIL" + + available = len(blob) - offset + if available < REGION_BYTES: + add_error( + report, + "truncated PMC region: need {} bytes at offset {}, have {}".format( + REGION_BYTES, offset, available + ), + ) + return report + + slots_to_decode = min(active_harts, MAX_HARTS) + report["harts"] = [ + decode_hart(blob, offset, slot, report) + for slot in range(slots_to_decode) + ] + report["shared"] = decode_aggregate(blob, offset, flags, report) + report["status"] = "PASS" if not report["errors"] else "FAIL" + return report + + +def render_optional_counter(value: Optional[int]) -> str: + return "-" if value is None else str(value) + + +def render_text(report: Dict[str, Any]) -> str: + lines: List[str] = [] + lines.append("RESULT: {}".format(report["status"])) + lines.append( + "dump={} bytes={} offset={}".format( + report["dump"], report["dump_bytes"], report["offset"] + ) + ) + lines.append( + "format={} magic={} version={} region_bytes={}".format( + report["format"]["name"], + report["format"]["expected_magic_ascii"], + report["format"]["expected_version"], + report["format"]["expected_region_bytes"], + ) + ) + + header = report.get("header") + if header is not None: + lines.append( + "header {} magic={} version={} region_bytes={} active_harts={} " + "hpm_count={} max_harts={} endian={}".format( + header["status"], + header["magic"]["actual_hex"], + header["version"], + header["region_bytes"], + header["active_harts"], + header["hpm_count"], + header["max_harts"], + header["endian_marker_hex"], + ) + ) + flags = header["flags"] + lines.append( + "support_flags raw={} sc_requested={} ms_requested={}".format( + flags["raw_hex"], + str(flags["sc_requested"]).lower(), + str(flags["ms_requested"]).lower(), + ) + ) + + for hart in report.get("harts", []): + lines.append( + "hart[{}] {} hart_id={} minion_id={} thread_id={} " + "record_offset={}".format( + hart["slot"], + hart["status"], + hart["hart_id"], + hart["minion_id"], + hart["thread_id"], + hart["record_offset"], + ) + ) + for counter in hart["counters"]: + lines.append( + " {} {} start={} end={} delta={} wrapped={} {}".format( + counter["csr"], + counter["event"], + counter["start"], + counter["end"], + counter["delta"], + str(counter["wrapped"]).lower(), + counter["status"], + ) + ) + + shared = report.get("shared") + if shared is not None: + lines.append( + "shared {} shire_id={} magic={} record_offset={}".format( + shared["status"], + shared["shire_id"], + shared["magic"]["actual_hex"], + shared["record_offset"], + ) + ) + for family_name in ("sc", "ms"): + family = shared[family_name] + lines.append( + "{} requested={} supported={} supported_count={}/{} " + "mask={}".format( + family_name.upper(), + str(family["requested"]).lower(), + str(family["supported"]).lower(), + family["supported_count"], + family["entry_count"], + family["supported_mask_hex"], + ) + ) + for sample in family["samples"]: + lines.append( + " {}[{}].{} start={} end={} delta={} {}".format( + sample["block_kind"], + sample["block"], + sample["event"], + render_optional_counter(sample["start"]), + render_optional_counter(sample["end"]), + render_optional_counter(sample["delta"]), + sample["status"], + ) + ) + + for warning in report.get("warnings", []): + lines.append("WARNING: {}".format(warning)) + for error in report.get("errors", []): + lines.append("ERROR: {}".format(error)) + return "\n".join(lines) + + +def read_and_decode(path: Path, offset: int) -> Dict[str, Any]: + try: + blob = path.read_bytes() + except OSError as exc: + report = new_report(path, 0, offset) + add_error(report, "cannot read dump: {}".format(exc)) + return report + return decode_blob(blob, path, offset) + + +def build_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser( + description=( + "Decode the fixed YR PMC v1 record from a full ET-SoC1 launcher " + "dump. The exact byte offset is required." + ), + epilog=( + "example: %(prog)s build/slice.dump --offset 0x20000 " + "--format json" + ), + ) + parser.add_argument("dump", type=Path, help="full launcher dump file") + parser.add_argument( + "--offset", + required=True, + type=parse_integer, + help="byte offset of struct yr_pmc_region (decimal or 0x-prefixed)", + ) + parser.add_argument( + "--format", + choices=("text", "json"), + default="text", + help="report format (default: text)", + ) + return parser + + +def main(argv: Optional[Sequence[str]] = None) -> int: + args = build_parser().parse_args(argv) + report = read_and_decode(args.dump, args.offset) + if args.format == "json": + json.dump(report, sys.stdout, indent=2) + sys.stdout.write("\n") + else: + sys.stdout.write(render_text(report)) + sys.stdout.write("\n") + return 0 if report["status"] == "PASS" else 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/ported_models/yolov10n_hf_reference/tools/download_model.py b/ported_models/yolov10n_hf_reference/tools/download_model.py new file mode 100755 index 00000000..eba7b99a --- /dev/null +++ b/ported_models/yolov10n_hf_reference/tools/download_model.py @@ -0,0 +1,179 @@ +#!/usr/bin/env python3 +"""Download and verify the pinned YOLOv10n ONNX source artifact. + +The file is written atomically into the repository's ignored local-artifacts +cache. An existing file is never trusted without hashing it first. +""" + +from __future__ import annotations + +import argparse +import hashlib +import json +import os +from pathlib import Path +import shutil +import sys +import tempfile +import urllib.request + + +PORT_ROOT = Path(__file__).resolve().parents[1] +REPO_ROOT = PORT_ROOT.parents[1] +DEFAULT_MANIFEST = PORT_ROOT / "artifacts.json" +PINNED_SOURCE = { + "type": "huggingface", + "repo": "onnx-community/yolov10n", + "revision": "57657320425ee34056408a57ad9d29c4d4815bd8", + "filename": "onnx/model.onnx", + "url": ( + "https://huggingface.co/onnx-community/yolov10n/resolve/" + "57657320425ee34056408a57ad9d29c4d4815bd8/" + "onnx/model.onnx?download=true" + ), +} +PINNED_SHA256 = ( + "a77dd863933f184a19e84361c64b788228a7c7dacc2c78939239a96ad3efca3b" +) +PINNED_SIZE_BYTES = 9386116 +PINNED_LICENSE = "AGPL-3.0" +PINNED_CACHE = "local-artifacts/yolov10n_hf_reference/model.onnx" + + +def sha256_file(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as src: + for block in iter(lambda: src.read(1024 * 1024), b""): + digest.update(block) + return digest.hexdigest() + + +def artifact_from_manifest(path: Path) -> dict: + with path.open("r", encoding="utf-8") as src: + manifest = json.load(src) + try: + artifact = manifest["artifacts"]["yolov10n_onnx"] + except (KeyError, TypeError) as exc: + raise SystemExit(f"error: malformed artifact manifest {path}: {exc}") from exc + expected = { + "kind": "model", + "format": "onnx", + "dtype": "fp32", + "size_bytes": PINNED_SIZE_BYTES, + "sha256": PINNED_SHA256, + "license": PINNED_LICENSE, + "local_cache": PINNED_CACHE, + "source_of_truth": True, + "export": "none", + } + if manifest.get("schema_version") != 1 or not isinstance(artifact, dict): + raise SystemExit(f"error: malformed artifact manifest {path}") + for key, expected_value in expected.items(): + if artifact.get(key) != expected_value: + raise SystemExit( + "error: artifact pin mismatch for {}: expected={!r} " + "actual={!r}".format( + key, expected_value, artifact.get(key) + ) + ) + source = artifact.get("source") + if not isinstance(source, dict): + raise SystemExit("error: artifact pin source is missing") + for key, expected_value in PINNED_SOURCE.items(): + if source.get(key) != expected_value: + raise SystemExit( + "error: artifact pin mismatch for source.{}: " + "expected={!r} actual={!r}".format( + key, expected_value, source.get(key) + ) + ) + return artifact + + +def resolve_cache_path(value: str) -> Path: + path = Path(value) + return path if path.is_absolute() else REPO_ROOT / path + + +def verify(path: Path, expected: str, expected_size: int) -> bool: + if not path.is_file(): + print(f"MISSING path={path}") + return False + actual = sha256_file(path) + actual_size = path.stat().st_size + status = ( + "PASS" + if actual == expected and actual_size == expected_size + else "FAIL" + ) + print( + f"CHECKSUM {status} path={path} bytes={actual_size} " + f"expected_bytes={expected_size} expected={expected} actual={actual}" + ) + return actual == expected and actual_size == expected_size + + +def download( + url: str, destination: Path, expected: str, expected_size: int +) -> None: + destination.parent.mkdir(parents=True, exist_ok=True) + fd, tmp_name = tempfile.mkstemp( + prefix=f".{destination.name}.", suffix=".part", dir=str(destination.parent) + ) + os.close(fd) + tmp = Path(tmp_name) + try: + request = urllib.request.Request( + url, headers={"User-Agent": "hf-hackathon-yolov10n-reference/1"} + ) + print(f"DOWNLOAD url={url}") + with urllib.request.urlopen(request, timeout=60) as response, tmp.open("wb") as dst: + shutil.copyfileobj(response, dst, length=1024 * 1024) + actual = sha256_file(tmp) + actual_size = tmp.stat().st_size + if actual != expected or actual_size != expected_size: + raise SystemExit( + "error: downloaded artifact identity mismatch: " + f"expected_bytes={expected_size} actual_bytes={actual_size} " + f"expected_sha256={expected} actual_sha256={actual}" + ) + os.replace(str(tmp), str(destination)) + finally: + if tmp.exists(): + tmp.unlink() + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument("--manifest", type=Path, default=DEFAULT_MANIFEST) + parser.add_argument("--output", type=Path) + parser.add_argument( + "--verify-only", action="store_true", help="do not access the network" + ) + parser.add_argument( + "--force", action="store_true", help="redownload even if the cache verifies" + ) + args = parser.parse_args() + + artifact = artifact_from_manifest(args.manifest.resolve()) + expected = str(artifact["sha256"]).lower() + expected_size = int(artifact["size_bytes"]) + destination = ( + args.output.resolve() + if args.output + else resolve_cache_path(str(artifact["local_cache"])) + ) + + if not args.force and verify(destination, expected, expected_size): + return 0 + if args.verify_only: + return 1 + + download( + str(artifact["source"]["url"]), destination, expected, expected_size + ) + return 0 if verify(destination, expected, expected_size) else 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/ported_models/yolov10n_hf_reference/tools/explain_detections.py b/ported_models/yolov10n_hf_reference/tools/explain_detections.py new file mode 100755 index 00000000..5249edb4 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/tools/explain_detections.py @@ -0,0 +1,426 @@ +#!/usr/bin/env python3 +"""Inspect output0 records from a validated full-reference dump. + +The pinned ONNX graph constructs output0 at N307 by concatenating the four +decoded corner coordinates selected at N303, the selected confidence at N304, +and the class index converted to FP32 at N306. This tool deliberately does +not apply NMS or mutate the model output. A score threshold only controls +which of the already selected top-300 records are displayed. +""" + +from __future__ import annotations + +import argparse +import hashlib +import json +from pathlib import Path +import struct +import sys +from typing import Any, Dict, List, Optional + +import numpy as np + + +RESULT_HEADER_BYTES = 128 +RESULT_MAGIC = 0x31465259 +RESULT_VERSION = 1 +HEADER_U32 = struct.Struct("<16I") +PINNED_SOURCE = { + "repo": "onnx-community/yolov10n", + "revision": "57657320425ee34056408a57ad9d29c4d4815bd8", + "filename": "onnx/model.onnx", + "sha256": "a77dd863933f184a19e84361c64b788228a7c7dacc2c78939239a96ad3efca3b", +} +COCO_ROOM_RAW_SHA256 = ( + "66b6131da00004bd2eab6a5d2fafab937289839d10d8199b3e95bfa3e76d8ca9" +) +TAIL_OPS_N281_N307 = [ + "Split", + "Sub", + "Add", + "Concat", + "Mul", + "Sigmoid", + "Concat", + "Transpose", + "Split", + "ReduceMax", + "TopK", + "Unsqueeze", + "Tile", + "GatherElements", + "Tile", + "GatherElements", + "Flatten", + "TopK", + "Mod", + "Div", + "Unsqueeze", + "Tile", + "GatherElements", + "Unsqueeze", + "Unsqueeze", + "Cast", + "Concat", +] + + +class DetectionError(RuntimeError): + """The package, dump, or preprocessing metadata is inconsistent.""" + + +def require(condition: bool, message: str) -> None: + if not condition: + raise DetectionError(message) + + +def sha256(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as source: + for block in iter(lambda: source.read(1024 * 1024), b""): + digest.update(block) + return digest.hexdigest() + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser() + parser.add_argument("package", type=Path) + parser.add_argument( + "dump", + type=Path, + help="full host, board, or system-emulator dump containing YRF1", + ) + parser.add_argument("--threshold", type=float, default=0.25) + parser.add_argument("--top", type=int, default=20) + parser.add_argument( + "--preprocess-metadata", + type=Path, + help="optional metadata from preprocess_coco_room.py", + ) + parser.add_argument("--json", type=Path) + return parser.parse_args() + + +def preprocessing_geometry( + metadata: Dict[str, Any], manifest: Dict[str, Any] +) -> Dict[str, Any]: + preprocessing = metadata.get("preprocessing") + source = metadata.get("source") + output = metadata.get("output") + require( + isinstance(preprocessing, dict) + and isinstance(source, dict) + and isinstance(output, dict), + "preprocessing metadata is incomplete", + ) + require( + metadata.get("fixture") == "coco_room_000139" + and source.get("dtype") == "UINT8" + and source.get("layout") == "HWC_RGB" + and source.get("shape") == [480, 640, 3] + and source.get("nbytes") == 480 * 640 * 3 + and source.get("sha256") == COCO_ROOM_RAW_SHA256, + "preprocessing metadata is not the pinned COCO-room fixture", + ) + require( + preprocessing.get("graph_location") == "host_side_outside_onnx" + and preprocessing.get("placement") + == {"row_start": 80, "row_end_exclusive": 560} + and preprocessing.get("padding_rgb") == [114, 114, 114] + and preprocessing.get("layout_transform") == "HWC_RGB_to_NCHW_RGB", + "preprocessing metadata does not describe the captured host transform", + ) + placement = preprocessing.get("placement") + canvas_shape = preprocessing.get("canvas_shape") + source_shape = source.get("shape") + require( + isinstance(placement, dict) + and canvas_shape == [640, 640, 3] + and isinstance(source_shape, list) + and len(source_shape) == 3, + "preprocessing placement/canvas/source metadata is invalid", + ) + source_height, source_width, source_channels = ( + int(value) for value in source_shape + ) + row_start = int(placement["row_start"]) + row_end = int(placement["row_end_exclusive"]) + require( + source_channels == 3 + and source_width == int(canvas_shape[1]) + and source_height == row_end - row_start + and 0 <= row_start < row_end <= int(canvas_shape[0]), + "captured preprocessing is not an unscaled full-width row placement", + ) + input_blob = manifest.get("blobs", {}).get("inputs", {}) + require( + output.get("dtype") == "FLOAT" + and output.get("layout") == "NCHW_RGB" + and output.get("shape") == [1, 3, 640, 640] + and output.get("sha256") == input_blob.get("sha256"), + "preprocessing metadata is not bound to the package input blob", + ) + return { + "source_shape": [source_height, source_width, source_channels], + "canvas_shape": canvas_shape, + "row_start": row_start, + "row_end_exclusive": row_end, + "inverse_transform": ( + "x_original=x_canvas; y_original=y_canvas-row_start; " + "then clip to source bounds" + ), + } + + +def original_box( + box: np.ndarray, geometry: Optional[Dict[str, Any]] +) -> Optional[List[float]]: + if geometry is None: + return None + row_start = int(geometry["row_start"]) + original_height = int(geometry["source_shape"][0]) + original_width = int(geometry["source_shape"][1]) + x1, y1, x2, y2 = (float(value) for value in box) + return [ + max(0.0, min(float(original_width), x1)), + max(0.0, min(float(original_height), y1 - row_start)), + max(0.0, min(float(original_width), x2)), + max(0.0, min(float(original_height), y2 - row_start)), + ] + + +def main() -> int: + args = parse_args() + package = args.package.resolve() + dump_path = args.dump.resolve() + require(args.top >= 0, "--top must be non-negative") + require(np.isfinite(args.threshold), "--threshold must be finite") + + manifest_path = package / "slice_manifest.json" + require(manifest_path.is_file(), "missing {}".format(manifest_path)) + manifest = json.loads(manifest_path.read_text(encoding="utf-8")) + require( + manifest.get("schema_version") == 2 + and manifest.get("manifest_kind") == "full_graph_liveness", + "expected a schema-v2 full-graph package", + ) + source = manifest.get("source") + require( + isinstance(source, dict) + and all(source.get(key) == value for key, value in PINNED_SOURCE.items()), + "package source does not match the pinned ONNX artifact", + ) + require( + manifest.get("selection", {}).get("selector") == "N000:N307", + "package does not select all 308 nodes", + ) + require( + manifest.get("result", {}).get("output_tensor") == "output0", + "manifest output tensor is not output0", + ) + nodes = manifest.get("nodes") + require( + isinstance(nodes, list) + and len(nodes) == 308 + and [node.get("index") for node in nodes] == list(range(308)), + "manifest does not contain the ordered N000:N307 graph", + ) + require( + [node.get("op_type") for node in nodes[281:308]] + == TAIL_OPS_N281_N307, + "manifest N281:N307 operator sequence differs from the pinned graph", + ) + final_node = nodes[307] + require( + final_node.get("name") == "/model.23/Concat_6" + and final_node.get("inputs") + == [ + "/model.23/GatherElements_2_output_0", + "/model.23/Unsqueeze_2_output_0", + "/model.23/Cast_2_output_0", + ] + and final_node.get("outputs") == ["output0"] + and final_node.get("attributes") == {"axis": -1}, + "N307 does not concatenate [box4, score1, class1] as output0", + ) + + output_records = [ + tensor + for tensor in manifest.get("tensors", []) + if tensor.get("name") == "output0" + ] + require(len(output_records) == 1, "expected exactly one output0 tensor") + output = output_records[0] + require( + output.get("dtype") == "FLOAT" + and output.get("shape") == [1, 300, 6] + and output.get("storage") == "workspace" + and output.get("producer") == "N307", + "output0 metadata does not match the pinned graph contract", + ) + + require(dump_path.is_file(), "missing {}".format(dump_path)) + dump = dump_path.read_bytes() + memory_map = manifest.get("memory_map") + result_contract = manifest.get("result") + require( + isinstance(memory_map, dict) and isinstance(result_contract, dict), + "manifest result memory map is missing", + ) + expected_dump_bytes = int(memory_map["dump_size"]) + require( + len(dump) == expected_dump_bytes, + "dump size mismatch: expected {}, got {}".format( + expected_dump_bytes, len(dump) + ), + ) + require(len(dump) >= RESULT_HEADER_BYTES, "dump is shorter than YRF1") + words = HEADER_U32.unpack_from(dump, 0) + require(words[0] == RESULT_MAGIC, "YRF1 magic mismatch") + require(words[1] == RESULT_VERSION, "YRF1 version mismatch") + require(words[2] == 0, "runtime status is not success") + require( + words[5] == 0 and words[6] == 307 and words[7] == 308, + "runtime did not execute N000:N307", + ) + require( + words[3] == 0xFFFFFFFF + and words[4] == 0 + and words[8] == len(manifest["tensors"]) + and words[9] == int(memory_map["workspace_bytes"]) + and words[10] == int(manifest["blobs"]["inputs"]["nbytes"]) + and words[11] == int(manifest["blobs"]["weights"]["nbytes"]) + and words[12] == 1 + and list(words[13:16]) == [0, 0, 0], + "YRF1 header does not match the full package", + ) + header_bytes = int(result_contract["header_bytes"]) + require( + header_bytes + == int(result_contract["workspace_offset_within_dump"]) + and int(memory_map["result_device_offset"]) == 0, + "manifest does not place the full workspace after YRF1", + ) + start = header_bytes + int(output["offset"]) + end = start + int(output["nbytes"]) + require(end <= len(dump), "output0 exceeds dump size") + records = np.frombuffer(dump[start:end], dtype="= 0.0) & (records[:, 4] <= 1.0)) + and np.all(records[:-1, 4] >= records[1:, 4]), + "output0 scores are outside [0,1] or not in TopK order", + ) + require( + np.all(records[:, 0] <= records[:, 2]) + and np.all(records[:, 1] <= records[:, 3]), + "output0 contains an invalid xyxy corner order", + ) + + geometry: Optional[Dict[str, Any]] = None + metadata_report: Optional[Dict[str, Any]] = None + if args.preprocess_metadata is not None: + metadata_path = args.preprocess_metadata.resolve() + require(metadata_path.is_file(), "missing {}".format(metadata_path)) + metadata = json.loads(metadata_path.read_text(encoding="utf-8")) + require( + metadata.get("schema_version") == 1, + "unsupported preprocessing metadata schema", + ) + geometry = preprocessing_geometry(metadata, manifest) + metadata_report = { + "path": str(metadata_path), + "sha256": sha256(metadata_path), + "fixture": metadata.get("fixture"), + "geometry": geometry, + } + + selected: List[Dict[str, Any]] = [] + for rank, record in enumerate(records): + score = float(record[4]) + class_float = float(record[5]) + class_id = int(class_float) + require( + class_float == float(class_id) and 0 <= class_id < 80, + "record {} has invalid class index {}".format(rank, class_float), + ) + if score < args.threshold or len(selected) >= args.top: + continue + canvas_box = [float(value) for value in record[:4]] + selected.append( + { + "rank": rank, + "box_xyxy_canvas": canvas_box, + "box_xyxy_original": original_box( + record[:4], geometry + ), + "score": score, + "class_id": class_id, + } + ) + + report = { + "schema_version": 1, + "pass": True, + "package": str(package), + "dump": { + "path": str(dump_path), + "nbytes": len(dump), + "sha256": sha256(dump_path), + }, + "graph_contract": { + "nodes": "N000:N307", + "output": "output0", + "shape": [1, 300, 6], + "record": ["x1", "y1", "x2", "y2", "score", "class_id"], + "coordinate_space": "640x640 ONNX input canvas pixels", + "selection": ( + "NMS-free two-stage TopK selection; overlapping records can " + "remain, and the display threshold does not change output0" + ), + "labels": ( + "numeric class IDs from output0; no external human-readable " + "label map is applied" + ), + }, + "preprocess_metadata": metadata_report, + "threshold": args.threshold, + "display_limit": args.top, + "records_at_or_above_threshold": int( + np.count_nonzero(records[:, 4] >= args.threshold) + ), + "displayed": selected, + } + if args.json is not None: + output_path = args.json.resolve() + output_path.parent.mkdir(parents=True, exist_ok=True) + output_path.write_text( + json.dumps(report, indent=2, allow_nan=False) + "\n", + encoding="utf-8", + ) + + print( + "DETECTIONS PASS output0=[1,300,6] threshold={} matches={} " + "displayed={}".format( + args.threshold, + report["records_at_or_above_threshold"], + len(selected), + ) + ) + for item in selected: + print( + "rank={rank} class_id={class_id} score={score:.8f} " + "xyxy_canvas={box_xyxy_canvas} " + "xyxy_original={box_xyxy_original}".format(**item) + ) + if args.json is not None: + print("REPORT {}".format(args.json.resolve())) + return 0 + + +if __name__ == "__main__": + try: + sys.exit(main()) + except (DetectionError, OSError, ValueError, KeyError) as error: + print("DETECTIONS FAIL {}".format(error), file=sys.stderr) + sys.exit(2) diff --git a/ported_models/yolov10n_hf_reference/tools/generate_full_graph.py b/ported_models/yolov10n_hf_reference/tools/generate_full_graph.py new file mode 100644 index 00000000..cfca6c5f --- /dev/null +++ b/ported_models/yolov10n_hf_reference/tools/generate_full_graph.py @@ -0,0 +1,1284 @@ +#!/usr/bin/env python3 +"""Generate the full pinned-ONNX scalar execution package. + +This is a declarative conversion, not a model export. The checksum-verified +ONNX remains authoritative for node order, tensor names/types/shapes, +attributes, and initializer values. The generated C header contains only +descriptors and a liveness-derived arena plan; operator implementations remain +in the small hand-written scalar runtime. +""" + +from __future__ import annotations + +import argparse +import copy +import hashlib +import json +from pathlib import Path +import shutil +import sys +from typing import Any, Dict, Iterable, List, Optional, Sequence, Set, Tuple + +import numpy as np +import onnx +from onnx import TensorProto, helper, numpy_helper, shape_inference +import onnxruntime as ort + + +PORT_ROOT = Path(__file__).resolve().parents[1] +REPO_ROOT = PORT_ROOT.parents[1] +DEFAULT_MODEL = REPO_ROOT / "local-artifacts/yolov10n_hf_reference/model.onnx" +DEFAULT_WEIGHTS = ( + REPO_ROOT / "local-artifacts/yolov10n_hf_reference/package/weights.bin" +) +DEFAULT_WEIGHTS_MANIFEST = PORT_ROOT / "manifests/weights_manifest.json" +DEFAULT_OUTPUT_ROOT = ( + REPO_ROOT / "local-artifacts/yolov10n_hf_reference/full_graph" +) +DEFAULT_EXECUTION_MANIFEST = PORT_ROOT / "manifests/full_execution.json" + +EXPECTED_SHA256 = "a77dd863933f184a19e84361c64b788228a7c7dacc2c78939239a96ad3efca3b" +EXPECTED_WEIGHTS_SHA256 = ( + "b6d5aa13ef3238328c19ff0f646f72841bcf44dc1651383d089f0d57e37cf850" +) +EXPECTED_HEADER_BYTES = 92881 +EXPECTED_HEADER_SHA256 = ( + "79be5b751842df025a3612ebb690e283813ea9ac8e373fd1bc44b706ca7a2a7e" +) +ALIGNMENT = 64 +PAGE_ALIGNMENT = 0x10000 +RESULT_HEADER_BYTES = 4096 +RESULT_DEVICE_OFFSET = 0 +PMC_STAGE_STRIDE = 0x10000 + +DTYPE_CODES = {"FLOAT": 1, "INT64": 2} +DTYPE_BYTES = {"FLOAT": 4, "INT64": 8} +STORAGE_CODES = {"input": 1, "weights": 2, "workspace": 3} +OP_CODES = { + "Conv": 1, + "Sigmoid": 2, + "Mul": 3, + "Concat": 4, + "Add": 5, + "Split": 6, + "MaxPool": 7, + "Resize": 8, + "MatMul": 9, + "Softmax": 10, + "Reshape": 11, + "Transpose": 12, + "Sub": 13, + "ReduceMax": 14, + "TopK": 15, + "Unsqueeze": 16, + "Tile": 17, + "GatherElements": 18, + "Flatten": 19, + "Mod": 20, + "Div": 21, + "Cast": 22, +} +EXPECTED_OP_COUNTS = { + "Add": 11, + "Cast": 1, + "Concat": 21, + "Conv": 83, + "Div": 1, + "Flatten": 1, + "GatherElements": 3, + "MatMul": 2, + "MaxPool": 3, + "Mod": 1, + "Mul": 71, + "ReduceMax": 1, + "Reshape": 8, + "Resize": 2, + "Sigmoid": 70, + "Softmax": 2, + "Split": 13, + "Sub": 1, + "Tile": 3, + "TopK": 2, + "Transpose": 4, + "Unsqueeze": 4, +} +ALLOWED_ATTRIBUTES = { + "Add": set(), + "Cast": {"to"}, + "Concat": {"axis"}, + "Conv": {"dilations", "group", "kernel_shape", "pads", "strides"}, + "Div": set(), + "Flatten": {"axis"}, + "GatherElements": {"axis"}, + "MatMul": set(), + "MaxPool": { + "ceil_mode", + "dilations", + "kernel_shape", + "pads", + "strides", + }, + "Mod": {"fmod"}, + "Mul": set(), + "ReduceMax": {"axes", "keepdims"}, + "Reshape": {"allowzero"}, + "Resize": { + "coordinate_transformation_mode", + "cubic_coeff_a", + "mode", + "nearest_mode", + }, + "Sigmoid": set(), + "Softmax": {"axis"}, + "Split": {"axis"}, + "Sub": set(), + "Tile": set(), + "TopK": {"axis", "largest", "sorted"}, + "Transpose": {"perm"}, + "Unsqueeze": set(), +} + +# Measured architecture boundaries used for full-graph PMC intervals. +CHECKPOINT_NODES = ( + 5, + 20, + 45, + 71, + 90, + 100, + 128, + 144, + 160, + 178, + 207, + 228, + 249, + 270, + 288, + 307, +) + +# Seven requested PMC categories. They partition N000:N307 exactly. +PMC_STAGES = ( + ("stem", 0, 5), + ("backbone", 6, 90), + ("sppf_psa", 91, 128), + ("neck", 129, 207), + ("three_scale_head", 208, 270), + ("dfl_decode", 271, 288), + ("topk_selection", 289, 307), +) + + +class GenerationError(RuntimeError): + """A graph or package condition outside the full-reference contract.""" + + +def align(value: int, alignment: int = ALIGNMENT) -> int: + return (value + alignment - 1) // alignment * alignment + + +def file_sha256(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as source: + for block in iter(lambda: source.read(1024 * 1024), b""): + digest.update(block) + return digest.hexdigest() + + +def canonical_bytes(array: np.ndarray) -> bytes: + if array.dtype == np.float32: + return np.asarray(array, dtype=" np.ndarray: + elements = int(np.prod(shape, dtype=np.int64)) + index = np.arange(elements, dtype=np.uint64) + bits = ( + index * np.uint64(1664525) + np.uint64(1013904223) + ) & np.uint64(0x00FFFFFF) + values = bits.astype(np.float32) * np.float32(1.0 / 16777215.0) + return values.reshape(tuple(shape)) + + +def value_shape(value: onnx.ValueInfoProto) -> List[int]: + shape = [] + for dimension in value.type.tensor_type.shape.dim: + if not dimension.HasField("dim_value"): + raise GenerationError( + "tensor {!r} has a non-static dimension".format(value.name) + ) + shape.append(int(dimension.dim_value)) + return shape + + +def value_dtype(value: onnx.ValueInfoProto) -> str: + return TensorProto.DataType.Name(value.type.tensor_type.elem_type) + + +def element_count(shape: Iterable[int]) -> int: + result = 1 + for dimension in shape: + if int(dimension) < 0: + raise GenerationError("negative static dimension {}".format(dimension)) + result *= int(dimension) + return result + + +def json_attribute(value: Any) -> Any: + if isinstance(value, bytes): + return value.decode("utf-8") + if isinstance(value, tuple): + return [json_attribute(item) for item in value] + if isinstance(value, list): + return [json_attribute(item) for item in value] + if isinstance(value, onnx.TensorProto): + array = numpy_helper.to_array(value) + return { + "dtype": str(array.dtype), + "shape": [int(item) for item in array.shape], + "values": array.reshape(-1).tolist(), + } + return value + + +def tensor_metadata( + model: onnx.ModelProto, +) -> Tuple[ + Dict[str, Dict[str, Any]], + Dict[str, onnx.ValueInfoProto], + Dict[str, onnx.TensorProto], +]: + values = { + item.name: item + for item in ( + list(model.graph.input) + + list(model.graph.value_info) + + list(model.graph.output) + ) + } + initializers = {item.name: item for item in model.graph.initializer} + metadata: Dict[str, Dict[str, Any]] = {} + for name, value in values.items(): + dtype = value_dtype(value) + shape = value_shape(value) + if dtype not in DTYPE_CODES: + raise GenerationError( + "runtime tensor {!r} has unsupported dtype {}".format(name, dtype) + ) + metadata[name] = { + "name": name, + "dtype": dtype, + "shape": shape, + "elements": element_count(shape), + "nbytes": element_count(shape) * DTYPE_BYTES[dtype], + } + for name, tensor in initializers.items(): + dtype = TensorProto.DataType.Name(tensor.data_type) + shape = [int(item) for item in tensor.dims] + if dtype not in DTYPE_CODES: + raise GenerationError( + "initializer {!r} has unsupported dtype {}".format(name, dtype) + ) + metadata[name] = { + "name": name, + "dtype": dtype, + "shape": shape, + "elements": element_count(shape), + "nbytes": element_count(shape) * DTYPE_BYTES[dtype], + } + return metadata, values, initializers + + +def validate_graph( + model: onnx.ModelProto, + metadata: Dict[str, Dict[str, Any]], +) -> None: + imports = {(item.domain, int(item.version)) for item in model.opset_import} + if imports != {("", 13)}: + raise GenerationError( + "expected the sole ONNX opset import ('', 13), got {}".format( + sorted(imports) + ) + ) + if len(model.graph.node) != 308: + raise GenerationError( + "expected 308 nodes, got {}".format(len(model.graph.node)) + ) + if len(model.graph.initializer) != 187: + raise GenerationError( + "expected 187 initializers, got {}".format( + len(model.graph.initializer) + ) + ) + actual_ops = {node.op_type for node in model.graph.node} + unsupported = sorted(actual_ops - set(OP_CODES)) + if unsupported: + raise GenerationError("unsupported graph operators: {}".format(unsupported)) + actual_counts = { + op_type: sum(node.op_type == op_type for node in model.graph.node) + for op_type in actual_ops + } + if actual_counts != EXPECTED_OP_COUNTS: + raise GenerationError( + "operator histogram differs from the pin: {}".format(actual_counts) + ) + if len(model.graph.input) != 1 or model.graph.input[0].name != "images": + raise GenerationError("expected sole graph input named images") + if metadata["images"] != { + "name": "images", + "dtype": "FLOAT", + "shape": [1, 3, 640, 640], + "elements": 1228800, + "nbytes": 4915200, + }: + raise GenerationError("input metadata differs from the pinned contract") + if len(model.graph.output) != 1 or model.graph.output[0].name != "output0": + raise GenerationError("expected sole graph output named output0") + if metadata["output0"]["dtype"] != "FLOAT" or metadata["output0"][ + "shape" + ] != [1, 300, 6]: + raise GenerationError("output0 metadata differs from the pinned contract") + + initializer_arrays = { + item.name: numpy_helper.to_array(item) + for item in model.graph.initializer + } + + for index, node in enumerate(model.graph.node): + if node.domain not in ("", "ai.onnx"): + raise GenerationError( + "N{:03d} uses unsupported domain {!r}".format(index, node.domain) + ) + if len(node.input) > 4 or len(node.output) > 3: + raise GenerationError( + "N{:03d} exceeds manifest arity: inputs={} outputs={}".format( + index, len(node.input), len(node.output) + ) + ) + for name in node.input: + if name and name not in metadata: + raise GenerationError( + "N{:03d} input {!r} lacks metadata".format(index, name) + ) + for name in node.output: + if not name or name not in metadata: + raise GenerationError( + "N{:03d} output {!r} lacks metadata".format(index, name) + ) + attrs = { + item.name: helper.get_attribute_value(item) for item in node.attribute + } + unexpected_attrs = set(attrs) - ALLOWED_ATTRIBUTES[node.op_type] + if unexpected_attrs: + raise GenerationError( + "N{:03d} {} has unimplemented attributes {}".format( + index, node.op_type, sorted(unexpected_attrs) + ) + ) + if node.op_type == "Reshape": + if attrs.get("allowzero", 0) != 0: + raise GenerationError( + "N{:03d} Reshape allowzero=1 is unsupported".format(index) + ) + if ( + len(node.input) != 2 + or node.input[1] not in initializer_arrays + or initializer_arrays[node.input[1]].dtype != np.int64 + ): + raise GenerationError( + "N{:03d} Reshape requires a packed INT64 shape".format(index) + ) + if node.op_type == "Split": + if ( + len(node.input) != 2 + or node.input[1] not in initializer_arrays + or initializer_arrays[node.input[1]].dtype != np.int64 + or initializer_arrays[node.input[1]].size != len(node.output) + ): + raise GenerationError( + "N{:03d} Split requires one INT64 size per output".format( + index + ) + ) + if node.op_type == "Resize": + expected = { + "coordinate_transformation_mode": b"asymmetric", + "mode": b"nearest", + "nearest_mode": b"floor", + } + for key, value in expected.items(): + if attrs.get(key) != value: + raise GenerationError( + "N{:03d} Resize {} is {!r}, expected {!r}".format( + index, key, attrs.get(key), value + ) + ) + if ( + len(node.input) != 3 + or node.input[1] != "" + or node.input[2] not in initializer_arrays + or initializer_arrays[node.input[2]].dtype != np.float32 + or not np.array_equal( + initializer_arrays[node.input[2]], + np.array([1.0, 1.0, 2.0, 2.0], dtype=np.float32), + ) + ): + raise GenerationError( + "N{:03d} Resize is not exact nearest 2x scales".format(index) + ) + if node.op_type == "TopK": + if attrs.get("largest", 1) != 1 or attrs.get("sorted", 1) != 1: + raise GenerationError( + "N{:03d} requires largest sorted TopK".format(index) + ) + if ( + len(node.input) != 2 + or node.input[1] not in initializer_arrays + or initializer_arrays[node.input[1]].dtype != np.int64 + or initializer_arrays[node.input[1]].size != 1 + ): + raise GenerationError( + "N{:03d} TopK requires a scalar packed INT64 K".format(index) + ) + if node.op_type == "MaxPool" and attrs.get("ceil_mode", 0) != 0: + raise GenerationError( + "N{:03d} MaxPool ceil_mode is unsupported".format(index) + ) + if node.op_type == "Mod" and attrs.get("fmod", 0) != 0: + raise GenerationError( + "N{:03d} floating-point Mod is unsupported".format(index) + ) + if node.op_type == "Cast" and attrs.get("to") != TensorProto.FLOAT: + raise GenerationError( + "N{:03d} Cast target is not FLOAT".format(index) + ) + if node.op_type in ("Unsqueeze", "Tile"): + if ( + len(node.input) != 2 + or node.input[1] not in initializer_arrays + or initializer_arrays[node.input[1]].dtype != np.int64 + ): + raise GenerationError( + "N{:03d} {} requires a packed INT64 control tensor".format( + index, node.op_type + ) + ) + if node.op_type in ("Mod", "Div"): + if ( + len(node.input) != 2 + or node.input[1] not in initializer_arrays + or initializer_arrays[node.input[1]].dtype != np.int64 + or initializer_arrays[node.input[1]].size != 1 + or int(initializer_arrays[node.input[1]].reshape(-1)[0]) == 0 + ): + raise GenerationError( + "N{:03d} {} requires a nonzero scalar INT64 divisor".format( + index, node.op_type + ) + ) + + +def verify_weight_package( + model: onnx.ModelProto, + weights_path: Path, + manifest_path: Path, +) -> Tuple[Dict[str, Dict[str, Any]], Dict[str, Any]]: + package = json.loads(manifest_path.read_text(encoding="utf-8")) + if package.get("schema_version") != 1: + raise GenerationError("unknown weights manifest schema") + if package.get("source", {}).get("sha256") != EXPECTED_SHA256: + raise GenerationError("weights manifest source SHA does not match the pin") + package_record = package.get("package") + if not isinstance(package_record, dict): + raise GenerationError("weights manifest lacks package metadata") + if ( + package_record["sha256"] != EXPECTED_WEIGHTS_SHA256 + or file_sha256(weights_path) != EXPECTED_WEIGHTS_SHA256 + or weights_path.stat().st_size != int(package_record["total_bytes"]) + ): + raise GenerationError("packed initializer blob identity mismatch") + if ( + package_record.get("format") + != "headerless_concatenated_tensor_bytes" + or package_record.get("byte_order") != "little" + or package_record.get("alignment_bytes") != ALIGNMENT + or package_record.get("initializer_order") != "name_ascending" + or package_record.get("padding_value") != 0 + ): + raise GenerationError("weights package layout contract differs") + + listed_records = package.get("initializers") + if not isinstance(listed_records, list): + raise GenerationError("weights manifest initializers are not a list") + records = {item.get("name"): item for item in listed_records} + if len(records) != len(listed_records) or None in records: + raise GenerationError("weights manifest has duplicate/invalid names") + if set(records) != {item.name for item in model.graph.initializer}: + raise GenerationError("weights manifest initializer coverage mismatch") + graph_indices = { + initializer.name: index + for index, initializer in enumerate(model.graph.initializer) + } + sorted_initializers = sorted( + model.graph.initializer, key=lambda initializer: initializer.name + ) + blob = weights_path.read_bytes() + cursor = 0 + data_bytes = 0 + dtype_counts: Dict[str, int] = {} + for pack_index, initializer in enumerate(sorted_initializers): + record = listed_records[pack_index] + array = numpy_helper.to_array(initializer) + data = canonical_bytes(array) + dtype = TensorProto.DataType.Name(initializer.data_type) + expected_offset = align(cursor) + expected_end = expected_offset + len(data) + if ( + record.get("pack_index") != pack_index + or record.get("graph_index") != graph_indices[initializer.name] + or record.get("name") != initializer.name + or record.get("dtype") != dtype + or record.get("dtype_code") != int(initializer.data_type) + or record["shape"] != [int(item) for item in initializer.dims] + or record.get("elements") != int(array.size) + or record.get("offset") != expected_offset + or int(record["nbytes"]) != len(data) + or record.get("end_offset") != expected_end + or record.get("padding_before") != expected_offset - cursor + or record["sha256"] != hashlib.sha256(data).hexdigest() + ): + raise GenerationError( + "initializer package mapping mismatch for {!r}".format( + initializer.name + ) + ) + if any(blob[cursor:expected_offset]): + raise GenerationError( + "initializer padding is nonzero before {!r}".format( + initializer.name + ) + ) + if blob[expected_offset:expected_end] != data: + raise GenerationError( + "packed initializer segment differs for {!r}".format( + initializer.name + ) + ) + cursor = expected_end + data_bytes += len(data) + dtype_counts[dtype] = dtype_counts.get(dtype, 0) + 1 + + final_size = align(cursor) + if len(blob) != final_size or any(blob[cursor:final_size]): + raise GenerationError("weights package trailing padding differs") + padding_bytes = len(blob) - data_bytes + if ( + package_record.get("initializer_count") != len(sorted_initializers) + or package_record.get("dtype_counts") != dtype_counts + or package_record.get("float_initializer_count") + != dtype_counts.get("FLOAT", 0) + or package_record.get("integer_initializer_count") + != len(sorted_initializers) - dtype_counts.get("FLOAT", 0) + or package_record.get("data_bytes") != data_bytes + or package_record.get("padding_bytes") != padding_bytes + or package_record.get("trailing_padding") != final_size - cursor + ): + raise GenerationError("weights package summary metadata differs") + return records, package + + +def allocate_liveness( + model: onnx.ModelProto, + metadata: Dict[str, Dict[str, Any]], + pinned: Set[str], +) -> Tuple[int, Dict[str, Dict[str, int]], List[Dict[str, Any]]]: + consumers: Dict[str, int] = {} + producer: Dict[str, int] = {} + for index, node in enumerate(model.graph.node): + for name in node.input: + if name: + consumers[name] = max(consumers.get(name, -1), index) + for name in node.output: + producer[name] = index + for item in model.graph.output: + consumers[item.name] = len(model.graph.node) + + live: Dict[str, Tuple[int, int]] = {} + free: List[Tuple[int, int]] = [] + allocations: Dict[str, Dict[str, int]] = {} + end = 0 + events: List[Dict[str, Any]] = [] + + def merge_free(blocks: List[Tuple[int, int]]) -> List[Tuple[int, int]]: + merged: List[Tuple[int, int]] = [] + for offset, size in sorted(blocks): + if merged and merged[-1][0] + merged[-1][1] == offset: + old_offset, old_size = merged[-1] + merged[-1] = (old_offset, old_size + size) + else: + merged.append((offset, size)) + return merged + + for node_index, node in enumerate(model.graph.node): + released = [] + for name, (offset, size) in list(live.items()): + last_use = consumers.get(name, -1) + if name in pinned: + last_use = len(model.graph.node) + if last_use < node_index: + released.append( + {"tensor": name, "offset": offset, "nbytes": size} + ) + free.append((offset, size)) + del live[name] + free = merge_free(free) + + allocated = [] + for name in node.output: + size = align(int(metadata[name]["nbytes"])) + chosen: Optional[int] = None + for block_index, (block_offset, block_size) in enumerate(free): + aligned_offset = align(block_offset) + prefix = aligned_offset - block_offset + if block_size - prefix < size: + continue + chosen = aligned_offset + replacement: List[Tuple[int, int]] = [] + if prefix: + replacement.append((block_offset, prefix)) + used_end = aligned_offset + size + block_end = block_offset + block_size + if used_end < block_end: + replacement.append((used_end, block_end - used_end)) + free = ( + free[:block_index] + replacement + free[block_index + 1 :] + ) + break + if chosen is None: + chosen = align(end) + end = chosen + size + allocation = { + "offset": chosen, + "allocated_nbytes": size, + "live_start": node_index, + "live_end": ( + len(model.graph.node) + if name in pinned + else consumers.get(name, node_index) + ), + } + allocations[name] = allocation + live[name] = (chosen, size) + allocated.append({"tensor": name, **allocation}) + events.append( + { + "node_id": "N{:03d}".format(node_index), + "released": released, + "allocated": allocated, + "arena_end": end, + } + ) + return align(end), allocations, events + + +def write_aligned_blob( + path: Path, entries: Iterable[Tuple[str, bytes]] +) -> Tuple[int, Dict[str, Dict[str, Any]]]: + cursor = 0 + records: Dict[str, Dict[str, Any]] = {} + with path.open("wb") as destination: + for name, data in entries: + offset = align(cursor) + if offset > cursor: + destination.write(b"\x00" * (offset - cursor)) + destination.write(data) + records[name] = { + "offset": offset, + "nbytes": len(data), + "sha256": hashlib.sha256(data).hexdigest(), + } + cursor = offset + len(data) + final_size = align(cursor) + if final_size > cursor: + destination.write(b"\x00" * (final_size - cursor)) + return final_size, records + + +def c_array(values: Sequence[int], width: int, suffix: str = "") -> str: + padded = list(values[:width]) + [0] * max(0, width - len(values)) + return "{ " + ", ".join("{}{}".format(int(item), suffix) for item in padded) + " }" + + +def node_attributes(node: onnx.NodeProto) -> Dict[str, Any]: + return { + item.name: json_attribute(helper.get_attribute_value(item)) + for item in node.attribute + } + + +def node_c_record( + index: int, + node: onnx.NodeProto, + tensor_ids: Dict[str, int], +) -> str: + attrs = { + item.name: helper.get_attribute_value(item) for item in node.attribute + } + kernel = list(attrs.get("kernel_shape", [0, 0])) + strides = list(attrs.get("strides", [1, 1])) + pads = list(attrs.get("pads", [0, 0, 0, 0])) + dilations = list(attrs.get("dilations", [1, 1])) + axes = list(attrs.get("axes", [])) + perm = list(attrs.get("perm", [])) + inputs = [ + 0xFFFFFFFF if not name else tensor_ids[name] for name in node.input + ] + outputs = [tensor_ids[name] for name in node.output] + axis = int(attrs.get("axis", 0)) + values = [ + "{}u".format(index), + "{}u".format(OP_CODES[node.op_type]), + "{}u".format(len(node.input)), + "{}u".format(len(node.output)), + c_array(inputs, 4, "u"), + c_array(outputs, 3, "u"), + str(int(attrs.get("group", 1))), + str(int(kernel[0]) if len(kernel) > 0 else 0), + str(int(kernel[1]) if len(kernel) > 1 else 0), + str(int(strides[0]) if len(strides) > 0 else 1), + str(int(strides[1]) if len(strides) > 1 else 1), + str(int(pads[0]) if len(pads) > 0 else 0), + str(int(pads[1]) if len(pads) > 1 else 0), + str(int(pads[2]) if len(pads) > 2 else 0), + str(int(pads[3]) if len(pads) > 3 else 0), + str(int(dilations[0]) if len(dilations) > 0 else 1), + str(int(dilations[1]) if len(dilations) > 1 else 1), + str(axis), + "{}u".format(len(axes)), + c_array(axes, 6), + "{}u".format(len(perm)), + c_array(perm, 6), + str(int(attrs.get("ceil_mode", 0))), + str(int(attrs.get("keepdims", 1))), + str(int(attrs.get("largest", 1))), + str(int(attrs.get("sorted", 1))), + str(int(attrs.get("fmod", 0))), + str(int(attrs.get("to", 0))), + "1" if node.op_type == "Resize" else "0", + ] + return " { " + ", ".join(values) + " }," + + +def write_header( + path: Path, + tensor_records: List[Dict[str, Any]], + model: onnx.ModelProto, + memory_map: Dict[str, int], +) -> None: + tensor_ids = { + tensor["name"]: index for index, tensor in enumerate(tensor_records) + } + lines = [ + "/* Generated directly from the pinned ONNX by tools/generate_full_graph.py. */", + "#ifndef YOLOV10N_HF_SLICE_MANIFEST_H", + "#define YOLOV10N_HF_SLICE_MANIFEST_H", + "", + "#include ", + "", + "#define YR_MANIFEST_VERSION 2u", + "#define YR_FIRST_NODE 0u", + "#define YR_LAST_NODE 307u", + "#define YR_NODE_COUNT 308u", + "#define YR_TENSOR_COUNT {}u".format(len(tensor_records)), + "#define YR_RESULT_HEADER_BYTES {}u".format(RESULT_HEADER_BYTES), + "#define YR_RESULT_DEVICE_OFFSET 0x{:08x}u".format( + memory_map["result_device_offset"] + ), + "#define YR_INPUT_DEVICE_OFFSET 0x{:08x}u".format( + memory_map["input_device_offset"] + ), + "#define YR_WEIGHT_DEVICE_OFFSET 0x{:08x}u".format( + memory_map["weight_device_offset"] + ), + "#define YR_PMC_DEVICE_OFFSET 0x{:08x}u".format( + memory_map["pmc_device_offset"] + ), + "#define YR_PMC_STAGE_COUNT {}u".format(len(PMC_STAGES)), + "#define YR_PMC_STAGE_STRIDE 0x{:08x}u".format(PMC_STAGE_STRIDE), + "#define YR_INPUT_BLOB_BYTES {}u".format(memory_map["input_blob_bytes"]), + "#define YR_WEIGHT_BLOB_BYTES {}u".format(memory_map["weight_blob_bytes"]), + "#define YR_WORKSPACE_BYTES {}u".format(memory_map["workspace_bytes"]), + "#define YR_DUMP_SIZE 0x{:08x}u".format(memory_map["dump_size"]), + "#define YR_MEM_SIZE 0x{:08x}u".format(memory_map["mem_size"]), + "", + "enum yr_storage { YR_STORAGE_INPUT = 1, YR_STORAGE_WEIGHTS = 2, YR_STORAGE_WORKSPACE = 3 };", + "enum yr_dtype { YR_DTYPE_FLOAT = 1, YR_DTYPE_INT64 = 2 };", + ( + "enum yr_op { YR_OP_CONV = 1, YR_OP_SIGMOID = 2, " + "YR_OP_MUL = 3, YR_OP_CONCAT = 4, YR_OP_ADD = 5, " + "YR_OP_SPLIT = 6, YR_OP_MAXPOOL = 7, YR_OP_RESIZE = 8, " + "YR_OP_MATMUL = 9, YR_OP_SOFTMAX = 10, YR_OP_RESHAPE = 11, " + "YR_OP_TRANSPOSE = 12, YR_OP_SUB = 13, " + "YR_OP_REDUCEMAX = 14, YR_OP_TOPK = 15, " + "YR_OP_UNSQUEEZE = 16, YR_OP_TILE = 17, " + "YR_OP_GATHERELEMENTS = 18, YR_OP_FLATTEN = 19, " + "YR_OP_MOD = 20, YR_OP_DIV = 21, YR_OP_CAST = 22 };" + ), + "", + "struct yr_tensor_desc {", + " uint32_t storage, offset, nbytes, elements, rank, dtype;", + " uint32_t dims[6];", + "};", + "", + "struct yr_node_desc {", + " uint32_t onnx_index, op, input_count, output_count;", + " uint32_t inputs[4], outputs[3];", + " int32_t group, kernel_h, kernel_w, stride_h, stride_w;", + " int32_t pad_top, pad_left, pad_bottom, pad_right;", + " int32_t dilation_h, dilation_w, axis;", + " uint32_t axes_count;", + " int32_t axes[6];", + " uint32_t perm_count;", + " int32_t perm[6];", + " int32_t ceil_mode, keepdims, largest, sorted, fmod, to;", + " int32_t resize_nearest_asymmetric_floor;", + "};", + "", + "struct yr_pmc_stage_desc {", + " uint32_t first_local_node, last_local_node;", + " uint32_t first_onnx_node, last_onnx_node;", + "};", + "", + "static const struct yr_tensor_desc yr_tensors[YR_TENSOR_COUNT] = {", + ] + for tensor in tensor_records: + lines.append( + " {{ " + "{}u, {}u, {}u, {}u, {}u, {}u, {}" + " }},".format( + STORAGE_CODES[tensor["storage"]], + tensor["offset"], + tensor["nbytes"], + tensor["elements"], + len(tensor["shape"]), + DTYPE_CODES[tensor["dtype"]], + c_array(tensor["shape"], 6), + ) + ) + lines.extend( + [ + "};", + "", + "static const struct yr_node_desc yr_nodes[YR_NODE_COUNT] = {", + ] + ) + for index, node in enumerate(model.graph.node): + lines.append(node_c_record(index, node, tensor_ids)) + lines.extend( + [ + "};", + "", + ( + "static const struct yr_pmc_stage_desc " + "yr_pmc_stages[YR_PMC_STAGE_COUNT] = {" + ), + ] + ) + for _, first, last in PMC_STAGES: + lines.append( + " {{ {}u, {}u, {}u, {}u }},".format(first, last, first, last) + ) + lines.extend(["};", "", "#endif", ""]) + path.write_text("\n".join(lines), encoding="utf-8") + + +def capture_checkpoints( + model: onnx.ModelProto, + model_path: Path, + input_array: np.ndarray, + checkpoint_names: List[str], + output_dir: Path, +) -> Tuple[ + Dict[str, np.ndarray], + ort.InferenceSession, + Path, +]: + instrumented = copy.deepcopy(model) + values = { + item.name: item + for item in ( + list(instrumented.graph.input) + + list(instrumented.graph.value_info) + + list(instrumented.graph.output) + ) + } + existing = {item.name for item in instrumented.graph.output} + for name in checkpoint_names: + if name not in values: + raise GenerationError( + "checkpoint {!r} has no inferred ValueInfo".format(name) + ) + if name not in existing: + instrumented.graph.output.append(copy.deepcopy(values[name])) + existing.add(name) + instrumented_path = output_dir / "instrumented_full.onnx" + onnx.save(instrumented, str(instrumented_path)) + + options = ort.SessionOptions() + options.graph_optimization_level = ort.GraphOptimizationLevel.ORT_DISABLE_ALL + options.intra_op_num_threads = 1 + options.inter_op_num_threads = 1 + session = ort.InferenceSession( + str(instrumented_path), + sess_options=options, + providers=["CPUExecutionProvider"], + ) + outputs = session.run(checkpoint_names, {"images": input_array}) + return dict(zip(checkpoint_names, outputs)), session, instrumented_path + + +def generate(args: argparse.Namespace) -> Dict[str, Any]: + model_path = args.model.resolve() + weights_path = args.weights.resolve() + weights_manifest_path = args.weights_manifest.resolve() + output_dir = args.output_root.resolve() / args.name + execution_manifest_path = args.execution_manifest.resolve() + output_dir.mkdir(parents=True, exist_ok=True) + + actual_sha = file_sha256(model_path) + if actual_sha != EXPECTED_SHA256: + raise GenerationError( + "model SHA mismatch: expected={} actual={}".format( + EXPECTED_SHA256, actual_sha + ) + ) + original = onnx.load(str(model_path), load_external_data=False) + onnx.checker.check_model(original) + inferred = shape_inference.infer_shapes( + original, check_type=True, strict_mode=True, data_prop=True + ) + onnx.checker.check_model(inferred) + metadata, _, initializers = tensor_metadata(inferred) + validate_graph(inferred, metadata) + weight_records, weight_package = verify_weight_package( + inferred, weights_path, weights_manifest_path + ) + + input_shape = metadata["images"]["shape"] + if args.input_bin is None: + input_array = deterministic_input(input_shape) + input_description = { + "kind": "deterministic_lcg", + "formula": ( + "(index * 1664525 + 1013904223) & 0x00ffffff, " + "divided by 16777215" + ), + } + else: + input_path = args.input_bin.resolve() + data = input_path.read_bytes() + expected_bytes = metadata["images"]["nbytes"] + if len(data) != expected_bytes: + raise GenerationError( + "input blob has {} bytes, expected {}".format( + len(data), expected_bytes + ) + ) + input_array = np.frombuffer(data, dtype=" argparse.Namespace: + parser = argparse.ArgumentParser() + parser.add_argument("--model", type=Path, default=DEFAULT_MODEL) + parser.add_argument("--weights", type=Path, default=DEFAULT_WEIGHTS) + parser.add_argument( + "--weights-manifest", type=Path, default=DEFAULT_WEIGHTS_MANIFEST + ) + parser.add_argument("--output-root", type=Path, default=DEFAULT_OUTPUT_ROOT) + parser.add_argument("--name", default="deterministic") + parser.add_argument("--input-bin", type=Path) + parser.add_argument( + "--execution-manifest", + type=Path, + default=DEFAULT_EXECUTION_MANIFEST, + ) + return parser.parse_args() + + +def main() -> int: + try: + generate(parse_args()) + except (GenerationError, OSError, ValueError, KeyError) as exc: + print("FULL_GRAPH FAIL {}".format(exc), file=sys.stderr) + return 2 + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/ported_models/yolov10n_hf_reference/tools/inspect_onnx.py b/ported_models/yolov10n_hf_reference/tools/inspect_onnx.py new file mode 100755 index 00000000..8e4b5e64 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/tools/inspect_onnx.py @@ -0,0 +1,409 @@ +#!/usr/bin/env python3 +"""Inspect the pinned graph and emit a stable, readable inventory. + +No graph transformation or re-export occurs here. Shape inference augments an +in-memory copy solely so tensor metadata can be attached to the inventory. +""" + +from __future__ import annotations + +import argparse +from collections import Counter, defaultdict +import csv +import hashlib +import json +from pathlib import Path +import re +import sys +from typing import Any, Dict, Iterable, List, Optional + +import onnx +from onnx import AttributeProto, TensorProto, helper, shape_inference + + +PORT_ROOT = Path(__file__).resolve().parents[1] +REPO_ROOT = PORT_ROOT.parents[1] +DEFAULT_MODEL = REPO_ROOT / "local-artifacts/yolov10n_hf_reference/model.onnx" +DEFAULT_OUT = PORT_ROOT / "manifests" +EXPECTED_SHA256 = "a77dd863933f184a19e84361c64b788228a7c7dacc2c78939239a96ad3efca3b" +EXPECTED_OPERATOR_COUNTS = { + "Add": 11, + "Cast": 1, + "Concat": 21, + "Conv": 83, + "Div": 1, + "Flatten": 1, + "GatherElements": 3, + "MatMul": 2, + "MaxPool": 3, + "Mod": 1, + "Mul": 71, + "ReduceMax": 1, + "Reshape": 8, + "Resize": 2, + "Sigmoid": 70, + "Softmax": 2, + "Split": 13, + "Sub": 1, + "Tile": 3, + "TopK": 2, + "Transpose": 4, + "Unsqueeze": 4, +} + + +def file_sha256(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as src: + for block in iter(lambda: src.read(1024 * 1024), b""): + digest.update(block) + return digest.hexdigest() + + +def dim_value(dim: onnx.TensorShapeProto.Dimension) -> Any: + if dim.HasField("dim_value"): + return int(dim.dim_value) + if dim.HasField("dim_param"): + return str(dim.dim_param) + return None + + +def value_info_record(value: onnx.ValueInfoProto) -> Dict[str, Any]: + tensor_type = value.type.tensor_type + if not tensor_type.HasField("elem_type"): + return {"name": value.name, "dtype": None, "shape": None} + dtype = TensorProto.DataType.Name(tensor_type.elem_type) + shape = None + if tensor_type.HasField("shape"): + shape = [dim_value(dim) for dim in tensor_type.shape.dim] + return {"name": value.name, "dtype": dtype, "shape": shape} + + +def tensor_record(tensor: onnx.TensorProto) -> Dict[str, Any]: + dims = [int(dim) for dim in tensor.dims] + elements = 1 + for dim in dims: + elements *= dim + return { + "name": tensor.name, + "dtype": TensorProto.DataType.Name(tensor.data_type), + "shape": dims, + "elements": elements, + "raw_bytes": len(tensor.raw_data), + "external_data": bool(tensor.external_data), + } + + +def summarize_tensor(tensor: onnx.TensorProto) -> Dict[str, Any]: + record = tensor_record(tensor) + record.pop("name", None) + return record + + +def attribute_value(attribute: onnx.AttributeProto) -> Any: + value = helper.get_attribute_value(attribute) + if attribute.type == AttributeProto.TENSOR: + return summarize_tensor(value) + if attribute.type == AttributeProto.TENSORS: + return [summarize_tensor(item) for item in value] + if isinstance(value, bytes): + return value.decode("utf-8", errors="replace") + if isinstance(value, tuple): + return list(value) + if isinstance(value, list): + return [ + item.decode("utf-8", errors="replace") if isinstance(item, bytes) else item + for item in value + ] + return value + + +def normalize_name(name: str) -> str: + name = re.sub(r"[^A-Za-z0-9]+", "_", name).strip("_").lower() + return name or "unnamed" + + +def build_tensor_metadata(model: onnx.ModelProto) -> Dict[str, Dict[str, Any]]: + records: Dict[str, Dict[str, Any]] = {} + for value in ( + list(model.graph.input) + + list(model.graph.value_info) + + list(model.graph.output) + ): + records[value.name] = value_info_record(value) + for initializer in model.graph.initializer: + records[initializer.name] = tensor_record(initializer) + return records + + +def node_records( + model: onnx.ModelProto, tensor_metadata: Dict[str, Dict[str, Any]] +) -> List[Dict[str, Any]]: + op_counts: Dict[str, int] = defaultdict(int) + records = [] + for index, node in enumerate(model.graph.node): + op_ordinal = op_counts[node.op_type] + op_counts[node.op_type] += 1 + records.append( + { + "node_id": f"N{index:03d}", + "layer_id": f"L{index:03d}", + "op_id": f"{normalize_name(node.op_type)}_{op_ordinal:03d}", + "index": index, + "name": node.name, + "domain": node.domain or "ai.onnx", + "op_type": node.op_type, + "inputs": [ + { + "name": name, + "dtype": tensor_metadata.get(name, {}).get("dtype"), + "shape": tensor_metadata.get(name, {}).get("shape"), + } + for name in node.input + ], + "outputs": [ + { + "name": name, + "dtype": tensor_metadata.get(name, {}).get("dtype"), + "shape": tensor_metadata.get(name, {}).get("shape"), + } + for name in node.output + ], + "attributes": { + attribute.name: attribute_value(attribute) + for attribute in node.attribute + }, + } + ) + return records + + +def graph_checks( + sha256: str, + model: onnx.ModelProto, + inputs: List[Dict[str, Any]], + outputs: List[Dict[str, Any]], + nodes: List[Dict[str, Any]], +) -> List[Dict[str, Any]]: + opsets = {item.domain or "ai.onnx": int(item.version) for item in model.opset_import} + terminal = nodes[-40:] + terminal_types = [node["op_type"] for node in terminal] + operator_counts = dict( + sorted(Counter(node["op_type"] for node in nodes).items()) + ) + terminal_selection_nodes = [ + (node["node_id"], node["op_type"]) + for node in nodes + if node["op_type"] in ("TopK", "GatherElements") + ] + return [ + { + "name": "sha256", + "expected": EXPECTED_SHA256, + "actual": sha256, + "pass": sha256 == EXPECTED_SHA256, + }, + { + "name": "opset_ai_onnx", + "expected": 13, + "actual": opsets.get("ai.onnx"), + "pass": opsets.get("ai.onnx") == 13, + }, + { + "name": "sole_opset_import", + "expected": {"ai.onnx": 13}, + "actual": opsets, + "pass": opsets == {"ai.onnx": 13}, + }, + { + "name": "input", + "expected": [{"name": "images", "dtype": "FLOAT", "shape": [1, 3, 640, 640]}], + "actual": inputs, + "pass": inputs + == [{"name": "images", "dtype": "FLOAT", "shape": [1, 3, 640, 640]}], + }, + { + "name": "output", + "expected": [{"name": "output0", "dtype": "FLOAT", "shape": [1, 300, 6]}], + "actual": outputs, + "pass": outputs + == [{"name": "output0", "dtype": "FLOAT", "shape": [1, 300, 6]}], + }, + { + "name": "node_count", + "expected": 308, + "actual": len(nodes), + "pass": len(nodes) == 308, + }, + { + "name": "initializer_count", + "expected": 187, + "actual": len(model.graph.initializer), + "pass": len(model.graph.initializer) == 187, + }, + { + "name": "operator_histogram", + "expected": EXPECTED_OPERATOR_COUNTS, + "actual": operator_counts, + "pass": operator_counts == EXPECTED_OPERATOR_COUNTS, + }, + { + "name": "terminal_topk", + "expected": "TopK in final 40 nodes", + "actual": terminal_types, + "pass": "TopK" in terminal_types, + }, + { + "name": "terminal_gather_elements", + "expected": "GatherElements in final 40 nodes", + "actual": terminal_types, + "pass": "GatherElements" in terminal_types, + }, + { + "name": "terminal_selection_path", + "expected": [ + ("N291", "TopK"), + ("N294", "GatherElements"), + ("N296", "GatherElements"), + ("N298", "TopK"), + ("N303", "GatherElements"), + ], + "actual": terminal_selection_nodes, + "pass": terminal_selection_nodes + == [ + ("N291", "TopK"), + ("N294", "GatherElements"), + ("N296", "GatherElements"), + ("N298", "TopK"), + ("N303", "GatherElements"), + ], + }, + ] + + +def write_tsv(path: Path, nodes: Iterable[Dict[str, Any]]) -> None: + with path.open("w", encoding="utf-8", newline="") as dst: + writer = csv.writer(dst, delimiter="\t", lineterminator="\n") + writer.writerow( + [ + "node_id", + "layer_id", + "op_id", + "name", + "op_type", + "inputs", + "outputs", + ] + ) + for node in nodes: + writer.writerow( + [ + node["node_id"], + node["layer_id"], + node["op_id"], + node["name"], + node["op_type"], + " | ".join( + f"{item['name']}:{item['dtype']}:{item['shape']}" + for item in node["inputs"] + ), + " | ".join( + f"{item['name']}:{item['dtype']}:{item['shape']}" + for item in node["outputs"] + ), + ] + ) + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument("--model", type=Path, default=DEFAULT_MODEL) + parser.add_argument("--out-dir", type=Path, default=DEFAULT_OUT) + parser.add_argument( + "--no-check", + action="store_true", + help="emit inventory without enforcing pinned graph facts", + ) + args = parser.parse_args() + + model_path = args.model.resolve() + out_dir = args.out_dir.resolve() + sha256 = file_sha256(model_path) + original = onnx.load(str(model_path), load_external_data=False) + onnx.checker.check_model(original) + inferred = shape_inference.infer_shapes(original, strict_mode=True, data_prop=True) + metadata = build_tensor_metadata(inferred) + nodes = node_records(inferred, metadata) + inputs = [value_info_record(value) for value in inferred.graph.input] + outputs = [value_info_record(value) for value in inferred.graph.output] + initializers = sorted( + (tensor_record(item) for item in inferred.graph.initializer), + key=lambda item: item["name"], + ) + checks = graph_checks(sha256, inferred, inputs, outputs, nodes) + + inventory = { + "schema_version": 1, + "source": { + "repo": "onnx-community/yolov10n", + "revision": "57657320425ee34056408a57ad9d29c4d4815bd8", + "filename": "onnx/model.onnx", + "sha256": sha256, + "license": "AGPL-3.0", + }, + "model": { + "ir_version": int(inferred.ir_version), + "producer_name": inferred.producer_name, + "producer_version": inferred.producer_version, + "domain": inferred.domain, + "model_version": int(inferred.model_version), + "opsets": { + item.domain or "ai.onnx": int(item.version) + for item in inferred.opset_import + }, + "inputs": inputs, + "outputs": outputs, + "node_count": len(nodes), + "initializer_count": len(initializers), + "operator_counts": dict( + sorted(Counter(node["op_type"] for node in nodes).items()) + ), + }, + "checks": checks, + "nodes": nodes, + "initializers": initializers, + } + + out_dir.mkdir(parents=True, exist_ok=True) + json_path = out_dir / "graph_inventory.json" + tsv_path = out_dir / "layers.tsv" + with json_path.open("w", encoding="utf-8") as dst: + json.dump(inventory, dst, indent=2, sort_keys=False) + dst.write("\n") + write_tsv(tsv_path, nodes) + + print(f"INVENTORY path={json_path}") + print(f"LAYERS path={tsv_path}") + print( + "GRAPH " + f"nodes={len(nodes)} initializers={len(initializers)} " + f"opsets={inventory['model']['opsets']} " + f"operators={inventory['model']['operator_counts']}" + ) + failed = False + for check in checks: + status = "PASS" if check["pass"] else "FAIL" + print( + f"CHECK {status} name={check['name']} " + f"expected={check['expected']} actual={check['actual']}" + ) + failed |= not check["pass"] + if failed and not args.no_check: + print("GRAPH_CHECK FAIL", file=sys.stderr) + return 1 + print("GRAPH_CHECK PASS" if not failed else "GRAPH_CHECK SKIPPED_FAILURES") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/ported_models/yolov10n_hf_reference/tools/pack_initializers.py b/ported_models/yolov10n_hf_reference/tools/pack_initializers.py new file mode 100755 index 00000000..1ac0c14b --- /dev/null +++ b/ported_models/yolov10n_hf_reference/tools/pack_initializers.py @@ -0,0 +1,615 @@ +#!/usr/bin/env python3 +"""Pack the pinned YOLOv10n ONNX initializers without changing their values. + +The package is deliberately just concatenated tensor bytes plus zero alignment +padding. Names, shapes, types, offsets, sizes, and hashes live in the readable +JSON manifest; there is no generated C parser or private container format. + +Only ONNX FLOAT (IEEE-754 binary32) and integer tensors are accepted. FLOAT16, +DOUBLE, BOOL, strings, complex values, sparse tensors, and external data are +rejected rather than converted or approximated. +""" + +from __future__ import annotations + +import argparse +from collections import Counter +import hashlib +import json +import os +from pathlib import Path +import sys +import tempfile +from typing import Any, Dict, Iterable, List, Optional, Tuple + +import numpy as np +import onnx +from onnx import AttributeProto, TensorProto, numpy_helper, shape_inference + + +PORT_ROOT = Path(__file__).resolve().parents[1] +REPO_ROOT = PORT_ROOT.parents[1] +DEFAULT_ARTIFACTS = PORT_ROOT / "artifacts.json" +DEFAULT_WEIGHTS = ( + REPO_ROOT + / "local-artifacts/yolov10n_hf_reference/package/weights.bin" +) +DEFAULT_OUTPUT_MANIFEST = PORT_ROOT / "manifests/weights_manifest.json" +ALIGNMENT = 64 + +PINNED_SOURCE = { + "type": "huggingface", + "repo": "onnx-community/yolov10n", + "revision": "57657320425ee34056408a57ad9d29c4d4815bd8", + "filename": "onnx/model.onnx", + "url": ( + "https://huggingface.co/onnx-community/yolov10n/resolve/" + "57657320425ee34056408a57ad9d29c4d4815bd8/" + "onnx/model.onnx?download=true" + ), +} +PINNED_SHA256 = "a77dd863933f184a19e84361c64b788228a7c7dacc2c78939239a96ad3efca3b" +PINNED_LICENSE = "AGPL-3.0" + +# Explicit canonical storage types. A leading '<' makes all multi-byte +# elements little-endian even if this tool is run on a big-endian host. +SUPPORTED_DTYPES = { + TensorProto.FLOAT: np.dtype(" str: + return hashlib.sha256(data).hexdigest() + + +def sha256_file(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as src: + for block in iter(lambda: src.read(1024 * 1024), b""): + digest.update(block) + return digest.hexdigest() + + +def display_path(path: Path) -> str: + """Prefer reproducible repository-relative paths in generated metadata.""" + + try: + return path.resolve().relative_to(REPO_ROOT.resolve()).as_posix() + except ValueError: + return str(path.resolve()) + + +def load_pinned_artifact(path: Path) -> Dict[str, Any]: + with path.open("r", encoding="utf-8") as src: + document = json.load(src) + try: + artifact = document["artifacts"]["yolov10n_onnx"] + except (KeyError, TypeError) as exc: + raise PackError(f"malformed artifact manifest {path}: {exc}") from exc + + source = artifact.get("source") + if not isinstance(source, dict): + raise PackError(f"artifact source is missing or malformed in {path}") + for key, expected in PINNED_SOURCE.items(): + actual = source.get(key) + if actual != expected: + raise PackError( + f"artifact pin mismatch for source.{key}: " + f"expected={expected!r} actual={actual!r}" + ) + + actual_sha = str(artifact.get("sha256", "")).lower() + if actual_sha != PINNED_SHA256: + raise PackError( + "artifact pin mismatch for sha256: " + f"expected={PINNED_SHA256} actual={actual_sha}" + ) + if artifact.get("license") != PINNED_LICENSE: + raise PackError( + "artifact pin mismatch for license: " + f"expected={PINNED_LICENSE!r} actual={artifact.get('license')!r}" + ) + if not artifact.get("local_cache"): + raise PackError(f"artifact local_cache is missing in {path}") + return artifact + + +def resolve_model_path( + artifact: Dict[str, Any], requested: Optional[Path] +) -> Path: + if requested is not None: + return requested.resolve() + cache = Path(str(artifact["local_cache"])) + if not cache.is_absolute(): + cache = REPO_ROOT / cache + return cache.resolve() + + +def iter_graphs( + graph: onnx.GraphProto, scope: str = "main" +) -> Iterable[Tuple[str, onnx.GraphProto]]: + yield scope, graph + for node_index, node in enumerate(graph.node): + node_label = node.name or f"{node.op_type}[{node_index}]" + for attribute in node.attribute: + if attribute.type == AttributeProto.GRAPH: + child_scope = f"{scope}/{node_label}:{attribute.name}" + yield from iter_graphs(attribute.g, child_scope) + elif attribute.type == AttributeProto.GRAPHS: + for graph_index, child in enumerate(attribute.graphs): + child_scope = ( + f"{scope}/{node_label}:{attribute.name}[{graph_index}]" + ) + yield from iter_graphs(child, child_scope) + + +def reject_sparse_and_nested_initializers(model: onnx.ModelProto) -> None: + """Reject storage forms that would otherwise be silently omitted.""" + + for scope, graph in iter_graphs(model.graph): + if graph.sparse_initializer: + raise PackError( + f"sparse initializers are unsupported: " + f"scope={scope} count={len(graph.sparse_initializer)}" + ) + if scope != "main" and graph.initializer: + raise PackError( + "nested-graph initializers are unsupported: " + f"scope={scope} count={len(graph.initializer)}" + ) + for node_index, node in enumerate(graph.node): + for attribute in node.attribute: + if attribute.type in ( + AttributeProto.SPARSE_TENSOR, + AttributeProto.SPARSE_TENSORS, + ): + node_label = node.name or f"{node.op_type}[{node_index}]" + raise PackError( + "sparse tensor attributes are unsupported: " + f"scope={scope} node={node_label} attribute={attribute.name}" + ) + + +def element_count(dims: Iterable[int]) -> int: + count = 1 + for raw_dim in dims: + dim = int(raw_dim) + if dim < 0: + raise PackError(f"initializer has negative dimension {dim}") + count *= dim + return count + + +def populated_typed_fields(tensor: TensorProto) -> List[str]: + return [ + field_name + for field_name in ALL_TYPED_STORAGE_FIELDS + if len(getattr(tensor, field_name)) + ] + + +def initializer_bytes(tensor: TensorProto) -> Tuple[bytes, str]: + """Return canonical little-endian bytes and their source storage form.""" + + if tensor.data_location == TensorProto.EXTERNAL or tensor.external_data: + raise PackError( + f"external initializer data is unsupported: name={tensor.name!r}" + ) + + storage_dtype = SUPPORTED_DTYPES.get(tensor.data_type) + if storage_dtype is None: + try: + dtype_name = TensorProto.DataType.Name(tensor.data_type) + except ValueError: + dtype_name = f"UNKNOWN({tensor.data_type})" + raise PackError( + f"unsupported initializer dtype: name={tensor.name!r} " + f"dtype={dtype_name}" + ) + + elements = element_count(tensor.dims) + expected_nbytes = elements * storage_dtype.itemsize + typed_fields = populated_typed_fields(tensor) + + if tensor.raw_data: + if typed_fields: + raise PackError( + f"ambiguous initializer storage: name={tensor.name!r} " + f"has raw_data and {typed_fields}" + ) + data = bytes(tensor.raw_data) + if len(data) != expected_nbytes: + raise PackError( + f"raw initializer byte count mismatch: name={tensor.name!r} " + f"expected={expected_nbytes} actual={len(data)}" + ) + # ONNX raw_data is defined to use little-endian element bytes. Keep + # those bytes verbatim, including FLOAT bit patterns such as signed + # zero or NaN payloads. + return data, "raw_data" + + expected_field = TYPED_STORAGE_FIELD[tensor.data_type] + unexpected_fields = [ + field_name for field_name in typed_fields if field_name != expected_field + ] + if unexpected_fields: + raise PackError( + f"initializer uses storage fields inconsistent with its dtype: " + f"name={tensor.name!r} fields={unexpected_fields}" + ) + actual_values = len(getattr(tensor, expected_field)) + if actual_values != elements: + raise PackError( + f"typed initializer element count mismatch: name={tensor.name!r} " + f"field={expected_field} expected={elements} actual={actual_values}" + ) + + try: + logical = numpy_helper.to_array(tensor) + except Exception as exc: + raise PackError( + f"could not decode initializer {tensor.name!r}: {exc}" + ) from exc + logical = np.asarray(logical) + if logical.size != elements: + raise PackError( + f"decoded initializer element count mismatch: name={tensor.name!r} " + f"expected={elements} actual={logical.size}" + ) + if ( + logical.dtype.kind != storage_dtype.kind + or logical.dtype.itemsize != storage_dtype.itemsize + ): + raise PackError( + f"decoded initializer dtype mismatch: name={tensor.name!r} " + f"expected={storage_dtype} actual={logical.dtype}" + ) + + canonical = np.ascontiguousarray(logical, dtype=storage_dtype) + data = canonical.tobytes(order="C") + if len(data) != expected_nbytes: + raise PackError( + f"encoded initializer byte count mismatch: name={tensor.name!r} " + f"expected={expected_nbytes} actual={len(data)}" + ) + return data, expected_field + + +def alignment_padding(offset: int) -> int: + return (-offset) % ALIGNMENT + + +def build_package( + initializers: Iterable[Tuple[int, TensorProto]] +) -> Tuple[bytes, List[Dict[str, Any]], Dict[str, Any]]: + blob = bytearray() + records: List[Dict[str, Any]] = [] + dtype_counts: Counter = Counter() + data_bytes = 0 + padding_bytes = 0 + + # Name ordering is independent of incidental protobuf field ordering. + ordered = sorted(initializers, key=lambda item: item[1].name) + names = [tensor.name for _, tensor in ordered] + if any(not name for name in names): + raise PackError("all initializers must have non-empty names") + duplicate_names = sorted( + name for name, count in Counter(names).items() if count != 1 + ) + if duplicate_names: + raise PackError(f"duplicate initializer names: {duplicate_names}") + + for pack_index, (graph_index, tensor) in enumerate(ordered): + padding_before = alignment_padding(len(blob)) + if padding_before: + blob.extend(b"\x00" * padding_before) + offset = len(blob) + if offset % ALIGNMENT: + raise AssertionError("internal alignment error") + + data, source_storage = initializer_bytes(tensor) + blob.extend(data) + dtype_name = TensorProto.DataType.Name(tensor.data_type) + shape = [int(dim) for dim in tensor.dims] + elements = element_count(shape) + dtype_counts[dtype_name] += 1 + data_bytes += len(data) + padding_bytes += padding_before + records.append( + { + "pack_index": pack_index, + "graph_index": graph_index, + "name": tensor.name, + "dtype": dtype_name, + "dtype_code": int(tensor.data_type), + "shape": shape, + "elements": elements, + "offset": offset, + "nbytes": len(data), + "end_offset": offset + len(data), + "padding_before": padding_before, + "sha256": sha256_bytes(data), + "source_storage": source_storage, + } + ) + + trailing_padding = alignment_padding(len(blob)) + if trailing_padding: + blob.extend(b"\x00" * trailing_padding) + padding_bytes += trailing_padding + statistics = { + "initializer_count": len(records), + "data_bytes": data_bytes, + "padding_bytes": padding_bytes, + "trailing_padding": trailing_padding, + "total_bytes": len(blob), + "float_initializer_count": dtype_counts.get("FLOAT", 0), + "integer_initializer_count": len(records) + - dtype_counts.get("FLOAT", 0), + } + statistics["dtype_counts"] = dict(sorted(dtype_counts.items())) + return bytes(blob), records, statistics + + +def atomic_write(path: Path, data: bytes) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + fd, temporary_name = tempfile.mkstemp( + prefix=f".{path.name}.", suffix=".tmp", dir=str(path.parent) + ) + temporary = Path(temporary_name) + try: + # mkstemp defaults to 0600. These are reproducible model artifacts, + # not secrets; keep generated manifests and cache blobs readable by + # the same users as ordinary checkout files. + os.fchmod(fd, 0o644) + with os.fdopen(fd, "wb") as dst: + dst.write(data) + dst.flush() + os.fsync(dst.fileno()) + os.replace(str(temporary), str(path)) + finally: + if temporary.exists(): + temporary.unlink() + + +def build_manifest( + artifact_manifest_path: Path, + model_path: Path, + model: onnx.ModelProto, + inferred: onnx.ModelProto, + weights_path: Path, + package: bytes, + records: List[Dict[str, Any]], + statistics: Dict[str, Any], +) -> Dict[str, Any]: + package_record = { + "path": display_path(weights_path), + "format": "headerless_concatenated_tensor_bytes", + "byte_order": "little", + "alignment_bytes": ALIGNMENT, + "initializer_order": "name_ascending", + "padding_value": 0, + "initializer_count": statistics["initializer_count"], + "dtype_counts": statistics["dtype_counts"], + "float_initializer_count": statistics["float_initializer_count"], + "integer_initializer_count": statistics["integer_initializer_count"], + "data_bytes": statistics["data_bytes"], + "padding_bytes": statistics["padding_bytes"], + "trailing_padding": statistics["trailing_padding"], + "total_bytes": statistics["total_bytes"], + "sha256": sha256_bytes(package), + } + return { + "schema_version": 1, + "source": { + "type": PINNED_SOURCE["type"], + "repo": PINNED_SOURCE["repo"], + "revision": PINNED_SOURCE["revision"], + "filename": PINNED_SOURCE["filename"], + "url": PINNED_SOURCE["url"], + "sha256": PINNED_SHA256, + "license": PINNED_LICENSE, + "artifact_manifest": display_path(artifact_manifest_path), + "local_model": display_path(model_path), + "model_bytes": model_path.stat().st_size, + }, + "validation": { + "model_checksum": "PASS", + "onnx_checker_original": "PASS", + "onnx_shape_inference": "PASS", + "onnx_checker_inferred": "PASS", + "onnx_ir_version": int(model.ir_version), + "opsets": { + item.domain or "ai.onnx": int(item.version) + for item in model.opset_import + }, + "graph_nodes": len(model.graph.node), + "graph_initializers": len(model.graph.initializer), + "graph_sparse_initializers": len(model.graph.sparse_initializer), + "value_info_before_inference": len(model.graph.value_info), + "value_info_after_inference": len(inferred.graph.value_info), + }, + "package": package_record, + "initializers": records, + } + + +def run(args: argparse.Namespace) -> Dict[str, Any]: + artifacts_path = args.artifacts.resolve() + artifact = load_pinned_artifact(artifacts_path) + model_path = resolve_model_path(artifact, args.model) + weights_path = args.weights_out.resolve() + manifest_path = args.manifest_out.resolve() + + if not model_path.is_file(): + raise PackError( + f"pinned model is missing: {model_path}; " + "run tools/download_model.py first" + ) + actual_model_sha = sha256_file(model_path) + if actual_model_sha != PINNED_SHA256: + raise PackError( + f"model checksum mismatch: path={model_path} " + f"expected={PINNED_SHA256} actual={actual_model_sha}" + ) + print( + f"SOURCE_CHECK PASS path={model_path} " + f"bytes={model_path.stat().st_size} sha256={actual_model_sha}" + ) + + # Do not resolve external-data references implicitly. This keeps a + # one-file pin meaningful and lets the explicit rejection below fire. + model = onnx.load(str(model_path), load_external_data=False) + reject_sparse_and_nested_initializers(model) + onnx.checker.check_model(model) + inferred = shape_inference.infer_shapes( + model, check_type=True, strict_mode=True, data_prop=True + ) + onnx.checker.check_model(inferred) + print( + "MODEL_CHECK PASS " + f"nodes={len(model.graph.node)} " + f"initializers={len(model.graph.initializer)} " + f"inferred_value_info={len(inferred.graph.value_info)}" + ) + + package, records, statistics = build_package( + enumerate(model.graph.initializer) + ) + if statistics["initializer_count"] != len(model.graph.initializer): + raise PackError( + "initializer coverage mismatch: " + f"graph={len(model.graph.initializer)} " + f"packed={statistics['initializer_count']}" + ) + if any(record["offset"] % ALIGNMENT for record in records): + raise PackError("one or more initializer offsets are not aligned") + if statistics["total_bytes"] % ALIGNMENT: + raise PackError("package total size is not aligned") + + manifest = build_manifest( + artifacts_path, + model_path, + model, + inferred, + weights_path, + package, + records, + statistics, + ) + manifest_bytes = ( + json.dumps(manifest, indent=2, sort_keys=False) + "\n" + ).encode("utf-8") + + atomic_write(weights_path, package) + written_sha = sha256_file(weights_path) + expected_package_sha = manifest["package"]["sha256"] + if written_sha != expected_package_sha: + raise PackError( + f"written package checksum mismatch: " + f"expected={expected_package_sha} actual={written_sha}" + ) + if weights_path.stat().st_size != statistics["total_bytes"]: + raise PackError( + f"written package size mismatch: " + f"expected={statistics['total_bytes']} " + f"actual={weights_path.stat().st_size}" + ) + atomic_write(manifest_path, manifest_bytes) + + print( + "INITIALIZERS PASS " + f"count={statistics['initializer_count']} " + f"dtypes={statistics['dtype_counts']} " + f"data_bytes={statistics['data_bytes']} " + f"padding_bytes={statistics['padding_bytes']}" + ) + print( + f"WEIGHTS PASS path={weights_path} " + f"bytes={statistics['total_bytes']} sha256={written_sha}" + ) + print(f"MANIFEST PASS path={manifest_path} entries={len(records)}") + print("PACK PASS") + return manifest + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser( + description=( + "Verify and pack every initializer from the pinned YOLOv10n ONNX " + "artifact into a 64-byte-aligned little-endian byte blob." + ) + ) + parser.add_argument( + "--artifacts", + type=Path, + default=DEFAULT_ARTIFACTS, + help=f"pinned artifact manifest (default: {DEFAULT_ARTIFACTS})", + ) + parser.add_argument( + "--model", + type=Path, + help=( + "model path override; it must still match the pinned SHA-256 " + "(default: artifacts.json local_cache)" + ), + ) + parser.add_argument( + "--weights-out", + type=Path, + default=DEFAULT_WEIGHTS, + help=f"raw package output (default: {DEFAULT_WEIGHTS})", + ) + parser.add_argument( + "--manifest-out", + type=Path, + default=DEFAULT_OUTPUT_MANIFEST, + help=f"JSON manifest output (default: {DEFAULT_OUTPUT_MANIFEST})", + ) + return parser.parse_args() + + +def main() -> int: + try: + run(parse_args()) + except (PackError, OSError, ValueError, json.JSONDecodeError) as exc: + print(f"PACK FAIL reason={exc}", file=sys.stderr) + return 1 + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/ported_models/yolov10n_hf_reference/tools/preprocess_coco_room.py b/ported_models/yolov10n_hf_reference/tools/preprocess_coco_room.py new file mode 100644 index 00000000..05b25bb0 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/tools/preprocess_coco_room.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python3 +"""Create the pinned model's FP32 input from the repository COCO-room fixture. + +Preprocessing is deliberately outside the ONNX node graph. The source image +is the repository's checked raw 480x640 RGB fixture. It is centered without +resizing in a 640x640 RGB canvas, with 80 rows of value 114 above and below, +then normalized to [0, 1] and written as little-endian NCHW FP32. +""" + +from __future__ import annotations + +import argparse +import hashlib +import json +from pathlib import Path +import sys + +import numpy as np + + +PORT_ROOT = Path(__file__).resolve().parents[1] +REPO_ROOT = PORT_ROOT.parents[1] +DEFAULT_RAW = ( + REPO_ROOT + / "ported_models/yolo/assets/yolo/" + "coco_room_000139_raw_480x640x3_uint8_rgb.bin" +) +DEFAULT_OUTPUT = ( + REPO_ROOT + / "local-artifacts/yolov10n_hf_reference/fixtures/" + "coco_room_000139/input_fp32.bin" +) +RAW_SHA256 = "66b6131da00004bd2eab6a5d2fafab937289839d10d8199b3e95bfa3e76d8ca9" +FP32_SHA256 = "65afc38f381c09712cd9a6a78e8e7e9800c713d21679abee588b218a6a137c7b" + + +def sha256(data: bytes) -> str: + return hashlib.sha256(data).hexdigest() + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser() + parser.add_argument("--raw", type=Path, default=DEFAULT_RAW) + parser.add_argument("--output", type=Path, default=DEFAULT_OUTPUT) + parser.add_argument( + "--metadata", + type=Path, + help="default: OUTPUT with .json appended", + ) + return parser.parse_args() + + +def main() -> int: + args = parse_args() + raw_path = args.raw.resolve() + output_path = args.output.resolve() + metadata_path = ( + args.metadata.resolve() + if args.metadata is not None + else output_path.with_suffix(output_path.suffix + ".json") + ) + + raw = raw_path.read_bytes() + actual_raw_sha = sha256(raw) + if len(raw) != 480 * 640 * 3 or actual_raw_sha != RAW_SHA256: + print( + "PREPROCESS FAIL raw identity expected_bytes={} actual_bytes={} " + "expected_sha256={} actual_sha256={}".format( + 480 * 640 * 3, + len(raw), + RAW_SHA256, + actual_raw_sha, + ), + file=sys.stderr, + ) + return 2 + + source = np.frombuffer(raw, dtype=np.uint8).reshape(480, 640, 3) + canvas = np.full((640, 640, 3), 114, dtype=np.uint8) + canvas[80:560, :, :] = source + tensor = np.ascontiguousarray( + (canvas.astype(np.float32) / np.float32(255.0)).transpose(2, 0, 1)[ + np.newaxis, ... + ], + dtype=" subprocess.CompletedProcess[str]: + return subprocess.run( + [ + sys.executable, + str(TOOL), + str(FULL_DIR), + str(run_dir), + str(output), + ], + check=False, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + text=True, + ) + + +def main() -> int: + if ( + not (FULL_DIR / "slice_manifest.json").is_file() + or not (RUN_DIR / "full_compare.json").is_file() + ): + print("BOARD_SUMMARY_BINDING SKIP real-board v3 evidence unavailable") + return 0 + + with tempfile.TemporaryDirectory(prefix="yr_board_summary_") as raw: + root = Path(raw) + positive = run(root / "positive.json", RUN_DIR) + if positive.returncode != 0: + print(positive.stdout, end="") + raise SystemExit("positive real-board evidence was rejected") + + tampered_run = root / "tampered_run" + tampered_run.mkdir() + for source in RUN_DIR.iterdir(): + if source.name == "full_compare.json" or not source.is_file(): + continue + (tampered_run / source.name).symlink_to(source) + comparison = json.loads( + (RUN_DIR / "full_compare.json").read_text(encoding="utf-8") + ) + comparison["final_output"]["direct_ort_mismatch_count"] = 1 + (tampered_run / "full_compare.json").write_text( + json.dumps(comparison, indent=2, allow_nan=False) + "\n", + encoding="utf-8", + ) + negative = run(root / "negative.json", tampered_run) + if negative.returncode == 0: + raise SystemExit("tampered direct-output mismatch was accepted") + if "output0 is not a direct zero-mismatch ORT pass" not in negative.stdout: + print(negative.stdout, end="") + raise SystemExit("tamper rejection did not identify output0") + + print( + "BOARD_SUMMARY_BINDING PASS positive=accepted direct_output_mismatch=rejected" + ) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/ported_models/yolov10n_hf_reference/tools/tests/test_download_pin.py b/ported_models/yolov10n_hf_reference/tools/tests/test_download_pin.py new file mode 100644 index 00000000..489f873f --- /dev/null +++ b/ported_models/yolov10n_hf_reference/tools/tests/test_download_pin.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 +"""Negative regression for downloader provenance fields.""" + +from __future__ import annotations + +import json +from pathlib import Path +import subprocess +import sys +import tempfile + + +PORT_ROOT = Path(__file__).resolve().parents[2] +REPO_ROOT = PORT_ROOT.parents[1] +DOWNLOADER = PORT_ROOT / "tools/download_model.py" +ARTIFACTS = PORT_ROOT / "artifacts.json" +MODEL = REPO_ROOT / "local-artifacts/yolov10n_hf_reference/model.onnx" + + +def main() -> int: + manifest = json.loads(ARTIFACTS.read_text(encoding="utf-8")) + manifest["artifacts"]["yolov10n_onnx"]["source"]["revision"] = "main" + with tempfile.TemporaryDirectory(prefix="yolov10n-download-pin-") as raw: + tampered = Path(raw) / "artifacts.json" + tampered.write_text( + json.dumps(manifest, indent=2, allow_nan=False) + "\n", + encoding="utf-8", + ) + completed = subprocess.run( + [ + sys.executable, + str(DOWNLOADER), + "--manifest", + str(tampered), + "--output", + str(MODEL), + "--verify-only", + ], + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + text=True, + check=False, + ) + if completed.returncode == 0: + print(completed.stdout, end="", file=sys.stderr) + print( + "error: downloader accepted a mutable revision", + file=sys.stderr, + ) + return 1 + if "artifact pin mismatch for source.revision" not in completed.stdout: + print(completed.stdout, end="", file=sys.stderr) + print( + "error: downloader failed for an unexpected reason", + file=sys.stderr, + ) + return 1 + print("DOWNLOAD_PIN PASS mutable_revision=rejected network_access=none") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/ported_models/yolov10n_hf_reference/tools/tests/test_explain_detections.py b/ported_models/yolov10n_hf_reference/tools/tests/test_explain_detections.py new file mode 100755 index 00000000..72a4a255 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/tools/tests/test_explain_detections.py @@ -0,0 +1,200 @@ +#!/usr/bin/env python3 +"""Positive and negative regressions for explain_detections.py.""" + +from __future__ import annotations + +import json +from pathlib import Path +import struct +import subprocess +import sys +import tempfile +from typing import Optional + + +PORT_ROOT = Path(__file__).resolve().parents[2] +REPO_ROOT = PORT_ROOT.parents[1] +TOOL = PORT_ROOT / "tools/explain_detections.py" +PACKAGE = ( + REPO_ROOT + / "local-artifacts/yolov10n_hf_reference/full_graph" + / "coco_room_000139_full308_v3" +) +METADATA = ( + REPO_ROOT + / "local-artifacts/yolov10n_hf_reference/fixtures" + / "coco_room_000139/input_fp32.bin.json" +) + + +def invoke( + dump: Path, + report: Optional[Path] = None, + metadata: Path = METADATA, +) -> subprocess.CompletedProcess: + command = [ + sys.executable, + str(TOOL), + str(PACKAGE), + str(dump), + "--preprocess-metadata", + str(metadata), + ] + if report is not None: + command.extend(["--json", str(report)]) + return subprocess.run( + command, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + text=True, + check=False, + ) + + +def expect_rejected( + dump: Path, expected_message: str, description: str +) -> None: + completed = invoke(dump) + if completed.returncode == 0 or expected_message not in completed.stdout: + print(completed.stdout, end="", file=sys.stderr) + raise RuntimeError( + "{} was not rejected for the expected reason".format(description) + ) + + +def main() -> int: + dump = PACKAGE / "host_full_dump.bin" + required = [ + TOOL, + PACKAGE / "slice_manifest.json", + dump, + METADATA, + ] + missing = [str(path) for path in required if not path.is_file()] + if missing: + print( + "error: real-image v3 regression artifacts are missing: {}".format( + ", ".join(missing) + ), + file=sys.stderr, + ) + return 2 + + with tempfile.TemporaryDirectory(prefix="yolov10n-detections-test-") as raw: + temporary = Path(raw) + report_path = temporary / "detections.json" + positive = invoke(dump, report_path) + if positive.returncode != 0: + print(positive.stdout, end="", file=sys.stderr) + return 1 + report = json.loads(report_path.read_text(encoding="utf-8")) + displayed = report["displayed"] + if ( + not report["pass"] + or report["records_at_or_above_threshold"] != 10 + or len(displayed) != 10 + or displayed[0]["rank"] != 0 + or displayed[0]["class_id"] != 62 + or abs(displayed[0]["score"] - 0.899284303188324) > 1e-9 + or displayed[0]["box_xyxy_canvas"] + != [ + 4.693794250488281, + 266.9769287109375, + 155.10342407226562, + 375.75567626953125, + ] + or displayed[0]["box_xyxy_original"] + != [ + 4.693794250488281, + 186.9769287109375, + 155.10342407226562, + 295.75567626953125, + ] + ): + print(json.dumps(report, indent=2), file=sys.stderr) + print("error: real-image detection record changed", file=sys.stderr) + return 1 + + original = dump.read_bytes() + truncated = temporary / "truncated.bin" + truncated.write_bytes(original[:-1]) + try: + expect_rejected(truncated, "dump size mismatch", "truncated dump") + + non_full = bytearray(original) + struct.pack_into(" argparse.Namespace: + parser = argparse.ArgumentParser() + parser.add_argument("--package", type=Path, default=DEFAULT_PACKAGE) + return parser.parse_args() + + +def main() -> int: + package = parse_args().package.resolve() + manifest_path = package / "slice_manifest.json" + header_path = package / "slice_manifest.h" + if not manifest_path.is_file() or not header_path.is_file(): + print("error: full package is incomplete: {}".format(package), file=sys.stderr) + return 2 + + manifest = json.loads(manifest_path.read_text(encoding="utf-8")) + with tempfile.TemporaryDirectory(prefix="yolov10n-full-header-tamper-") as raw: + tampered = Path(raw) + shutil.copy2(manifest_path, tampered / manifest_path.name) + header = header_path.read_text(encoding="utf-8") + marker = "static const struct yr_tensor_desc yr_tensors" + marker_offset = header.find(marker) + if marker_offset < 0: + print("error: generated tensor table marker is absent", file=sys.stderr) + return 2 + suffix = header[marker_offset:] + old = "{ 1u, 0u," + replacement_offset = suffix.find(old) + if replacement_offset < 0: + print("error: first tensor descriptor was not recognized", file=sys.stderr) + return 2 + replacement_offset += marker_offset + tampered_header = ( + header[:replacement_offset] + + "{ 1u, 4u," + + header[replacement_offset + len(old):] + ) + (tampered / header_path.name).write_text( + tampered_header, encoding="utf-8" + ) + tampered_manifest = json.loads( + (tampered / manifest_path.name).read_text(encoding="utf-8") + ) + tampered_bytes = tampered_header.encode("utf-8") + tampered_manifest["generated"]["header"]["nbytes"] = len( + tampered_bytes + ) + tampered_manifest["generated"]["header"]["sha256"] = hashlib.sha256( + tampered_bytes + ).hexdigest() + (tampered / manifest_path.name).write_text( + json.dumps(tampered_manifest, indent=2, allow_nan=False) + "\n", + encoding="utf-8", + ) + + for name, record in manifest["blobs"].items(): + source = (package / record["path"]).resolve() + destination = tampered / record["path"] + destination.parent.mkdir(parents=True, exist_ok=True) + try: + os.link(str(source), str(destination)) + except OSError as error: + if error.errno != errno.EXDEV: + raise + shutil.copy2(source, destination) + + completed = subprocess.run( + [str(VERIFIER), str(tampered)], + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + text=True, + check=False, + ) + if completed.returncode == 0: + print(completed.stdout, end="", file=sys.stderr) + print( + "error: verifier accepted a tampered tensor descriptor", + file=sys.stderr, + ) + return 1 + if ( + "generated header SHA-256 differs from the pinned topology" + not in completed.stdout + ): + print(completed.stdout, end="", file=sys.stderr) + print( + "error: verifier failed for an unexpected reason", + file=sys.stderr, + ) + return 1 + + print( + "FULL_HEADER_BINDING PASS tampered_descriptor=rejected " + "reason=pinned_sha256_mismatch" + ) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/ported_models/yolov10n_hf_reference/tools/tests/test_full_memory_plan.py b/ported_models/yolov10n_hf_reference/tools/tests/test_full_memory_plan.py new file mode 100644 index 00000000..16194e80 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/tools/tests/test_full_memory_plan.py @@ -0,0 +1,185 @@ +#!/usr/bin/env python3 +"""Independently validate full-graph liveness and arena non-aliasing.""" + +from __future__ import annotations + +import argparse +import json +from pathlib import Path +import sys +from typing import Any, Dict, List + + +PORT_ROOT = Path(__file__).resolve().parents[2] +REPO_ROOT = PORT_ROOT.parents[1] +DEFAULT_PACKAGE = ( + REPO_ROOT + / "local-artifacts/yolov10n_hf_reference/full_graph" + / "deterministic_full308_v3" +) + + +def fail(message: str) -> None: + raise RuntimeError(message) + + +def require(condition: bool, message: str) -> None: + if not condition: + fail(message) + + +def node_number(value: Any) -> int: + require( + isinstance(value, str) + and len(value) == 4 + and value.startswith("N") + and value[1:].isdigit(), + "invalid node ID {!r}".format(value), + ) + return int(value[1:]) + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser() + parser.add_argument("--package", type=Path, default=DEFAULT_PACKAGE) + return parser.parse_args() + + +def main() -> int: + package = parse_args().package.resolve() + try: + manifest = json.loads( + (package / "slice_manifest.json").read_text(encoding="utf-8") + ) + require(manifest.get("schema_version") == 2, "schema is not v2") + nodes = manifest.get("nodes") + tensors = manifest.get("tensors") + require( + isinstance(nodes, list) and len(nodes) == 308, + "node list is not the full graph", + ) + require(isinstance(tensors, list), "tensor list is absent") + tensors_by_name: Dict[str, Dict[str, Any]] = {} + for tensor in tensors: + name = tensor.get("name") + require( + isinstance(name, str) and name not in tensors_by_name, + "invalid or duplicate tensor name", + ) + tensors_by_name[name] = tensor + + consumers: Dict[str, List[int]] = {} + produced = set() + for index, node in enumerate(nodes): + require( + node.get("index") == index + and node.get("node_id") == "N{:03d}".format(index), + "node ordering differs at {}".format(index), + ) + inputs = node.get("inputs") + outputs = node.get("outputs") + require( + isinstance(inputs, list) and isinstance(outputs, list), + "node {} lacks input/output lists".format(index), + ) + for name in inputs: + if name: + require( + name in tensors_by_name, + "node {} input is undescribed".format(index), + ) + consumers.setdefault(name, []).append(index) + for name in outputs: + require( + name in tensors_by_name and name not in produced, + "node {} output is invalid or duplicated".format(index), + ) + produced.add(name) + + arena_bytes = manifest["memory_plan"]["arena_bytes"] + alignment = manifest["memory_plan"]["alignment_bytes"] + require( + isinstance(arena_bytes, int) and arena_bytes > 0, + "arena byte count is invalid", + ) + require(alignment == 64, "arena alignment is not 64 bytes") + workspace: List[Dict[str, Any]] = [] + for tensor in tensors: + if tensor.get("storage") != "workspace": + continue + name = tensor["name"] + producer = node_number(tensor.get("producer")) + live_start = tensor.get("live_start") + live_end = tensor.get("live_end") + nbytes = tensor.get("nbytes") + allocated = tensor.get("allocated_nbytes") + offset = tensor.get("offset") + require( + producer == live_start + and nodes[producer]["outputs"].count(name) == 1, + "{} producer/live_start differs".format(name), + ) + expected_end = max(consumers.get(name, [producer])) + if tensor.get("checkpoint") is True: + expected_end = len(nodes) + require( + live_end == expected_end, + "{} live_end is {}, expected {}".format( + name, live_end, expected_end + ), + ) + require( + isinstance(nbytes, int) + and isinstance(allocated, int) + and allocated == (nbytes + alignment - 1) // alignment * alignment, + "{} allocation size is not aligned".format(name), + ) + require( + isinstance(offset, int) + and offset % alignment == 0 + and 0 <= offset <= arena_bytes - allocated, + "{} allocation exceeds/misaligns the arena".format(name), + ) + workspace.append(tensor) + + for left_index, left in enumerate(workspace): + left_start = left["live_start"] + left_end = left["live_end"] + left_offset = left["offset"] + left_limit = left_offset + left["allocated_nbytes"] + for right in workspace[left_index + 1:]: + lifetimes_overlap = not ( + left_end < right["live_start"] + or right["live_end"] < left_start + ) + storage_overlaps = not ( + left_limit <= right["offset"] + or right["offset"] + right["allocated_nbytes"] + <= left_offset + ) + require( + not (lifetimes_overlap and storage_overlaps), + "live tensors {!r} and {!r} alias".format( + left["name"], right["name"] + ), + ) + except ( + KeyError, + OSError, + RuntimeError, + TypeError, + ValueError, + json.JSONDecodeError, + ) as error: + print("FULL_MEMORY_PLAN FAIL {}".format(error), file=sys.stderr) + return 1 + + print( + "FULL_MEMORY_PLAN PASS nodes=308 workspace_tensors={} " + "arena_bytes={} live_aliases=0".format(len(workspace), arena_bytes) + ) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/ported_models/yolov10n_hf_reference/tools/tests/test_full_tolerance_contract.py b/ported_models/yolov10n_hf_reference/tools/tests/test_full_tolerance_contract.py new file mode 100644 index 00000000..01c0e1ee --- /dev/null +++ b/ported_models/yolov10n_hf_reference/tools/tests/test_full_tolerance_contract.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python3 +"""Negative regression: official full validation cannot loosen tolerances.""" + +from __future__ import annotations + +import argparse +import errno +import json +import os +from pathlib import Path +import shutil +import subprocess +import sys +import tempfile + + +PORT_ROOT = Path(__file__).resolve().parents[2] +REPO_ROOT = PORT_ROOT.parents[1] +DEFAULT_PACKAGE = ( + REPO_ROOT + / "local-artifacts/yolov10n_hf_reference/full_graph" + / "deterministic_full308_v3" +) +VERIFIER = PORT_ROOT / "scripts/verify_full_package.sh" + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser() + parser.add_argument("--package", type=Path, default=DEFAULT_PACKAGE) + return parser.parse_args() + + +def main() -> int: + package = parse_args().package.resolve() + manifest_path = package / "slice_manifest.json" + if not manifest_path.is_file(): + print("error: full package is incomplete: {}".format(package), file=sys.stderr) + return 2 + manifest = json.loads(manifest_path.read_text(encoding="utf-8")) + + with tempfile.TemporaryDirectory(prefix="yolov10n-full-tolerance-") as raw: + tampered = Path(raw) + shutil.copy2(package / "slice_manifest.h", tampered / "slice_manifest.h") + manifest["tolerances"]["atol"] = 1.0 + (tampered / "slice_manifest.json").write_text( + json.dumps(manifest, indent=2, allow_nan=False) + "\n", + encoding="utf-8", + ) + for record in manifest["blobs"].values(): + source = (package / record["path"]).resolve() + destination = tampered / record["path"] + destination.parent.mkdir(parents=True, exist_ok=True) + try: + os.link(str(source), str(destination)) + except OSError as error: + if error.errno != errno.EXDEV: + raise + shutil.copy2(source, destination) + + completed = subprocess.run( + [str(VERIFIER), str(tampered)], + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + text=True, + check=False, + ) + if completed.returncode == 0: + print(completed.stdout, end="", file=sys.stderr) + print("error: verifier accepted atol=1.0", file=sys.stderr) + return 1 + if "global tolerances differ" not in completed.stdout: + print(completed.stdout, end="", file=sys.stderr) + print( + "error: verifier failed for an unexpected reason", + file=sys.stderr, + ) + return 1 + + print("FULL_TOLERANCE_CONTRACT PASS loosened_atol=rejected") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/ported_models/yolov10n_hf_reference/tools/tests/test_weights_manifest_binding.py b/ported_models/yolov10n_hf_reference/tools/tests/test_weights_manifest_binding.py new file mode 100644 index 00000000..978019c2 --- /dev/null +++ b/ported_models/yolov10n_hf_reference/tools/tests/test_weights_manifest_binding.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python3 +"""Negative regression for packed-initializer offsets and segment binding.""" + +from __future__ import annotations + +import json +from pathlib import Path +import subprocess +import sys +import tempfile + + +PORT_ROOT = Path(__file__).resolve().parents[2] +REPO_ROOT = PORT_ROOT.parents[1] +GENERATOR = PORT_ROOT / "tools/generate_full_graph.py" +MODEL = REPO_ROOT / "local-artifacts/yolov10n_hf_reference/model.onnx" +WEIGHTS = ( + REPO_ROOT + / "local-artifacts/yolov10n_hf_reference/package/weights.bin" +) +WEIGHTS_MANIFEST = PORT_ROOT / "manifests/weights_manifest.json" + + +def main() -> int: + manifest = json.loads( + WEIGHTS_MANIFEST.read_text(encoding="utf-8") + ) + manifest["initializers"][0]["offset"] = 64 + with tempfile.TemporaryDirectory( + prefix="yolov10n-weights-manifest-tamper-" + ) as raw: + temporary = Path(raw) + tampered_manifest = temporary / "weights_manifest.json" + tampered_manifest.write_text( + json.dumps(manifest, indent=2, allow_nan=False) + "\n", + encoding="utf-8", + ) + completed = subprocess.run( + [ + sys.executable, + str(GENERATOR), + "--model", + str(MODEL), + "--weights", + str(WEIGHTS), + "--weights-manifest", + str(tampered_manifest), + "--output-root", + str(temporary), + "--name", + "generated", + "--execution-manifest", + str(temporary / "execution.json"), + ], + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + text=True, + check=False, + ) + if completed.returncode == 0: + print(completed.stdout, end="", file=sys.stderr) + print( + "error: generator accepted a tampered initializer offset", + file=sys.stderr, + ) + return 1 + if "initializer package mapping mismatch" not in completed.stdout: + print(completed.stdout, end="", file=sys.stderr) + print( + "error: generator failed for an unexpected reason", + file=sys.stderr, + ) + return 1 + print( + "WEIGHTS_MANIFEST_BINDING PASS tampered_offset=rejected " + "segment_mapping=cross_checked" + ) + return 0 + + +if __name__ == "__main__": + sys.exit(main())