| { |
| "schema_version": "1.0", |
| "model": { |
| "model_id": "AD01", |
| "model_name": "MLPerf Tiny Deep AutoEncoder (ToyCar)", |
| "task": "anomaly_detection", |
| "architecture_family": "Dense AutoEncoder", |
| "source_framework": "TensorFlow/Keras and TensorFlow Lite", |
| "source_repository": "https://github.com/mlcommons/tiny/tree/4addd0fa08d216e20637637874e084895f289da4/benchmark/training/anomaly_detection", |
| "license": "MIT", |
| "public_quantized_available": true, |
| "paired_fp32_available": true, |
| "pair_compatibility": "VERIFIED", |
| "dataset": "DCASE 2020 Task 2 ToyCar", |
| "metric": "AUC and partial AUC from reconstruction error", |
| "input_shape": [ |
| 1, |
| 640 |
| ], |
| "output_shape": [ |
| 1, |
| 640 |
| ], |
| "preprocessing": "Upstream MLPerf Tiny DCASE pipeline: 640-element normalized log-mel feature vector", |
| "label_space": "640-element reconstructed feature vector; anomaly score is computed outside the network", |
| "eligibility": "ELIGIBLE", |
| "priority": "P0", |
| "random_seed": 20260806 |
| }, |
| "artifacts": { |
| "fp32": { |
| "artifact_id": "AD01-mlcommons-4addd0f-fp32-tflite", |
| "source_url": "https://raw.githubusercontent.com/mlcommons/tiny/4addd0fa08d216e20637637874e084895f289da4/benchmark/training/anomaly_detection/trained_models/ad01_fp32.tflite", |
| "local_path": "{model_dir}/source/fp32/ad01_fp32.tflite", |
| "format": "TFLite", |
| "version": "git:4addd0fa08d216e20637637874e084895f289da4", |
| "sha256": "c66636f4d7f8af8b10518e7be750a22c9d8d46ec97326b40b0d94c097e0aad9b", |
| "license": "MIT" |
| }, |
| "public_quantized": { |
| "artifact_id": "AD01-mlcommons-4addd0f-int8-tflite", |
| "source_url": "https://raw.githubusercontent.com/mlcommons/tiny/4addd0fa08d216e20637637874e084895f289da4/benchmark/training/anomaly_detection/trained_models/ad01_int8.tflite", |
| "local_path": "{model_dir}/source/quantized/ad01_int8.tflite", |
| "format": "TFLite", |
| "version": "git:4addd0fa08d216e20637637874e084895f289da4", |
| "sha256": "87cf24194ef93d1d9b11a591d805526b98008e351655d29883c825c9c106ba24", |
| "license": "MIT" |
| } |
| }, |
| "stages": [ |
| { |
| "id": "acquire_fp32", |
| "stage": "source_acquisition", |
| "variant": "fp32", |
| "command": [ |
| "{python}", |
| "{repo_root}/scripts/stages/fetch_artifact.py", |
| "--url", |
| "https://raw.githubusercontent.com/mlcommons/tiny/4addd0fa08d216e20637637874e084895f289da4/benchmark/training/anomaly_detection/trained_models/ad01_fp32.tflite", |
| "--output", |
| "{model_dir}/source/fp32/ad01_fp32.tflite", |
| "--sha256", |
| "c66636f4d7f8af8b10518e7be750a22c9d8d46ec97326b40b0d94c097e0aad9b", |
| "--metadata", |
| "{model_dir}/source/fp32/download_metadata.json" |
| ], |
| "inputs": [], |
| "outputs": [ |
| "{model_dir}/source/fp32/ad01_fp32.tflite", |
| "{model_dir}/source/fp32/download_metadata.json" |
| ], |
| "requires": [], |
| "timeout_sec": 180, |
| "failure_code_on_error": "FAIL_SOURCE", |
| "validation_report": "{model_dir}/source/fp32/download_metadata.json", |
| "options": { |
| "immutable_download": true, |
| "tls": "1.2+" |
| }, |
| "patch": null |
| }, |
| { |
| "id": "validate_fp32", |
| "stage": "baseline_inference", |
| "variant": "fp32", |
| "command": [ |
| "{python}", |
| "{repo_root}/scripts/stages/inspect_tflite.py", |
| "--model", |
| "{model_dir}/source/fp32/ad01_fp32.tflite", |
| "--report", |
| "{model_dir}/baseline/fp32_validation.json", |
| "--seed", |
| "20260806", |
| "--threads", |
| "1" |
| ], |
| "inputs": [ |
| "{model_dir}/source/fp32/ad01_fp32.tflite" |
| ], |
| "outputs": [ |
| "{model_dir}/baseline/fp32_validation.json" |
| ], |
| "requires": [ |
| "acquire_fp32" |
| ], |
| "timeout_sec": 120, |
| "failure_code_on_error": "FAIL_BASELINE", |
| "validation_report": "{model_dir}/baseline/fp32_validation.json", |
| "options": { |
| "runtime": "ai-edge-litert", |
| "threads": 1, |
| "batch_size": 1 |
| }, |
| "patch": null |
| }, |
| { |
| "id": "acquire_quantized", |
| "stage": "public_quantized_acquisition", |
| "variant": "public_quantized", |
| "command": [ |
| "{python}", |
| "{repo_root}/scripts/stages/fetch_artifact.py", |
| "--url", |
| "https://raw.githubusercontent.com/mlcommons/tiny/4addd0fa08d216e20637637874e084895f289da4/benchmark/training/anomaly_detection/trained_models/ad01_int8.tflite", |
| "--output", |
| "{model_dir}/source/quantized/ad01_int8.tflite", |
| "--sha256", |
| "87cf24194ef93d1d9b11a591d805526b98008e351655d29883c825c9c106ba24", |
| "--metadata", |
| "{model_dir}/source/quantized/download_metadata.json" |
| ], |
| "inputs": [], |
| "outputs": [ |
| "{model_dir}/source/quantized/ad01_int8.tflite", |
| "{model_dir}/source/quantized/download_metadata.json" |
| ], |
| "requires": [], |
| "timeout_sec": 180, |
| "failure_code_on_error": "FAIL_PUBLIC_QUANTIZED_ARTIFACT", |
| "validation_report": "{model_dir}/source/quantized/download_metadata.json", |
| "options": { |
| "immutable_download": true, |
| "tls": "1.2+" |
| }, |
| "patch": null |
| }, |
| { |
| "id": "validate_quantized", |
| "stage": "public_quantized_inference", |
| "variant": "public_quantized", |
| "command": [ |
| "{python}", |
| "{repo_root}/scripts/stages/inspect_tflite.py", |
| "--model", |
| "{model_dir}/source/quantized/ad01_int8.tflite", |
| "--report", |
| "{model_dir}/baseline/public_quantized_validation.json", |
| "--seed", |
| "20260806", |
| "--threads", |
| "1" |
| ], |
| "inputs": [ |
| "{model_dir}/source/quantized/ad01_int8.tflite" |
| ], |
| "outputs": [ |
| "{model_dir}/baseline/public_quantized_validation.json" |
| ], |
| "requires": [ |
| "acquire_quantized" |
| ], |
| "timeout_sec": 120, |
| "failure_code_on_error": "FAIL_PUBLIC_QUANTIZED_LOAD", |
| "validation_report": "{model_dir}/baseline/public_quantized_validation.json", |
| "options": { |
| "runtime": "ai-edge-litert", |
| "threads": 1, |
| "batch_size": 1 |
| }, |
| "patch": null |
| }, |
| { |
| "id": "validate_pair", |
| "stage": "baseline_pair_compatibility", |
| "variant": "pair", |
| "artifact_id": "AD01-mlcommons-4addd0f-pair", |
| "command": [ |
| "{python}", |
| "{repo_root}/scripts/stages/compare_tflite_pair.py", |
| "--fp32-report", |
| "{model_dir}/baseline/fp32_validation.json", |
| "--quantized-report", |
| "{model_dir}/baseline/public_quantized_validation.json", |
| "--report", |
| "{model_dir}/baseline/pair_compatibility.json", |
| "--preprocessing-evidence", |
| "same upstream MLPerf Tiny DCASE ToyCar feature pipeline", |
| "--label-space-evidence", |
| "same 640-element reconstruction target and external anomaly scoring", |
| "--dataset-evidence", |
| "same DCASE 2020 Task 2 ToyCar trained-model release" |
| ], |
| "inputs": [ |
| "{model_dir}/baseline/fp32_validation.json", |
| "{model_dir}/baseline/public_quantized_validation.json" |
| ], |
| "outputs": [ |
| "{model_dir}/baseline/pair_compatibility.json" |
| ], |
| "requires": [ |
| "validate_fp32", |
| "validate_quantized" |
| ], |
| "timeout_sec": 60, |
| "failure_code_on_error": "FAIL_BASELINE_PAIR_MISMATCH", |
| "validation_report": "{model_dir}/baseline/pair_compatibility.json", |
| "options": { |
| "compare_operator_sequence": true, |
| "compare_io_shapes": true |
| }, |
| "patch": null |
| }, |
| { |
| "id": "convert_fp32_onnx", |
| "stage": "tflite_to_onnx_conversion", |
| "variant": "fp32", |
| "command": [ |
| "{python}", |
| "{repo_root}/scripts/stages/convert_tflite_to_onnx.py", |
| "--converter-python", |
| "{repo_root}/environment/converters/tf2onnx/.venv/bin/python", |
| "--input", |
| "{model_dir}/source/fp32/ad01_fp32.tflite", |
| "--output", |
| "{model_dir}/onnx/fp32/model_fp32.onnx", |
| "--report", |
| "{model_dir}/onnx/fp32/onnx_conversion.json", |
| "--tool-versions", |
| "{repo_root}/environment/converters/tf2onnx/tool_versions.json", |
| "--opset", |
| "16" |
| ], |
| "inputs": [ |
| "{model_dir}/source/fp32/ad01_fp32.tflite", |
| "{repo_root}/environment/converters/tf2onnx/tool_versions.json" |
| ], |
| "outputs": [ |
| "{model_dir}/onnx/fp32/model_fp32.onnx", |
| "{model_dir}/onnx/fp32/onnx_conversion.json" |
| ], |
| "requires": [ |
| "validate_fp32" |
| ], |
| "timeout_sec": 300, |
| "failure_code_on_error": "FAIL_EXPORT", |
| "validation_report": "{model_dir}/onnx/fp32/onnx_conversion.json", |
| "options": { |
| "converter": "tf2onnx 1.17.0", |
| "tensorflow": "2.20.0", |
| "opset": 16, |
| "dequantize": false, |
| "dynamic_axes": false |
| }, |
| "patch": null |
| }, |
| { |
| "id": "validate_fp32_onnx", |
| "stage": "onnx_checker_shape_inference_runtime", |
| "variant": "fp32", |
| "command": [ |
| "{python}", |
| "{repo_root}/scripts/stages/inspect_onnx.py", |
| "--model", |
| "{model_dir}/onnx/fp32/model_fp32.onnx", |
| "--report", |
| "{model_dir}/onnx/fp32/onnx_check.json", |
| "--inferred-model", |
| "{model_dir}/onnx/fp32/model_fp32.inferred.onnx", |
| "--seed", |
| "20260806", |
| "--threads", |
| "1" |
| ], |
| "inputs": [ |
| "{model_dir}/onnx/fp32/model_fp32.onnx" |
| ], |
| "outputs": [ |
| "{model_dir}/onnx/fp32/onnx_check.json", |
| "{model_dir}/onnx/fp32/model_fp32.inferred.onnx" |
| ], |
| "requires": [ |
| "convert_fp32_onnx" |
| ], |
| "timeout_sec": 120, |
| "failure_code_on_error": "FAIL_RUNTIME", |
| "validation_report": "{model_dir}/onnx/fp32/onnx_check.json", |
| "options": { |
| "checker": true, |
| "shape_inference": true, |
| "runtime": "onnxruntime 1.22.1", |
| "threads": 1 |
| }, |
| "patch": null |
| }, |
| { |
| "id": "compare_fp32_onnx", |
| "stage": "tflite_onnx_numerical_comparison", |
| "variant": "fp32", |
| "command": [ |
| "{python}", |
| "{repo_root}/scripts/stages/compare_tflite_onnx.py", |
| "--tflite", |
| "{model_dir}/source/fp32/ad01_fp32.tflite", |
| "--onnx", |
| "{model_dir}/onnx/fp32/model_fp32.onnx", |
| "--report", |
| "{model_dir}/onnx/fp32/onnx_output_compare.json", |
| "--seed", |
| "20260806", |
| "--threads", |
| "1", |
| "--atol", |
| "0.00001", |
| "--rtol", |
| "0.00001" |
| ], |
| "inputs": [ |
| "{model_dir}/source/fp32/ad01_fp32.tflite", |
| "{model_dir}/onnx/fp32/model_fp32.onnx" |
| ], |
| "outputs": [ |
| "{model_dir}/onnx/fp32/onnx_output_compare.json" |
| ], |
| "requires": [ |
| "validate_fp32_onnx" |
| ], |
| "timeout_sec": 120, |
| "failure_code_on_error": "FAIL_NUMERICAL_MISMATCH", |
| "validation_report": "{model_dir}/onnx/fp32/onnx_output_compare.json", |
| "options": { |
| "seed": 20260806, |
| "threads": 1, |
| "atol": 1e-05, |
| "rtol": 1e-05 |
| }, |
| "patch": null |
| }, |
| { |
| "id": "convert_quantized_onnx", |
| "stage": "tflite_to_onnx_conversion", |
| "variant": "public_quantized", |
| "command": [ |
| "{python}", |
| "{repo_root}/scripts/stages/convert_tflite_to_onnx.py", |
| "--converter-python", |
| "{repo_root}/environment/converters/tf2onnx/.venv/bin/python", |
| "--input", |
| "{model_dir}/source/quantized/ad01_int8.tflite", |
| "--output", |
| "{model_dir}/onnx/quantized/model_quantized.onnx", |
| "--report", |
| "{model_dir}/onnx/quantized/onnx_conversion.json", |
| "--tool-versions", |
| "{repo_root}/environment/converters/tf2onnx/tool_versions.json", |
| "--opset", |
| "16" |
| ], |
| "inputs": [ |
| "{model_dir}/source/quantized/ad01_int8.tflite", |
| "{repo_root}/environment/converters/tf2onnx/tool_versions.json" |
| ], |
| "outputs": [ |
| "{model_dir}/onnx/quantized/model_quantized.onnx", |
| "{model_dir}/onnx/quantized/onnx_conversion.json" |
| ], |
| "requires": [ |
| "validate_quantized" |
| ], |
| "timeout_sec": 300, |
| "failure_code_on_error": "FAIL_EXPORT", |
| "validation_report": "{model_dir}/onnx/quantized/onnx_conversion.json", |
| "options": { |
| "converter": "tf2onnx 1.17.0", |
| "tensorflow": "2.20.0", |
| "opset": 16, |
| "dequantize": false, |
| "dynamic_axes": false |
| }, |
| "patch": null |
| }, |
| { |
| "id": "validate_quantized_onnx", |
| "stage": "onnx_checker_shape_inference_runtime", |
| "variant": "public_quantized", |
| "command": [ |
| "{python}", |
| "{repo_root}/scripts/stages/inspect_onnx.py", |
| "--model", |
| "{model_dir}/onnx/quantized/model_quantized.onnx", |
| "--report", |
| "{model_dir}/onnx/quantized/onnx_check.json", |
| "--inferred-model", |
| "{model_dir}/onnx/quantized/model_quantized.inferred.onnx", |
| "--seed", |
| "20260806", |
| "--threads", |
| "1" |
| ], |
| "inputs": [ |
| "{model_dir}/onnx/quantized/model_quantized.onnx" |
| ], |
| "outputs": [ |
| "{model_dir}/onnx/quantized/onnx_check.json", |
| "{model_dir}/onnx/quantized/model_quantized.inferred.onnx" |
| ], |
| "requires": [ |
| "convert_quantized_onnx" |
| ], |
| "timeout_sec": 120, |
| "failure_code_on_error": "FAIL_RUNTIME", |
| "validation_report": "{model_dir}/onnx/quantized/onnx_check.json", |
| "options": { |
| "checker": true, |
| "shape_inference": true, |
| "runtime": "onnxruntime 1.22.1", |
| "threads": 1 |
| }, |
| "patch": null |
| }, |
| { |
| "id": "compare_quantized_onnx", |
| "stage": "tflite_onnx_numerical_comparison", |
| "variant": "public_quantized", |
| "command": [ |
| "{python}", |
| "{repo_root}/scripts/stages/compare_tflite_onnx.py", |
| "--tflite", |
| "{model_dir}/source/quantized/ad01_int8.tflite", |
| "--onnx", |
| "{model_dir}/onnx/quantized/model_quantized.onnx", |
| "--report", |
| "{model_dir}/onnx/quantized/onnx_output_compare.json", |
| "--seed", |
| "20260806", |
| "--threads", |
| "1", |
| "--atol", |
| "0", |
| "--rtol", |
| "0" |
| ], |
| "inputs": [ |
| "{model_dir}/source/quantized/ad01_int8.tflite", |
| "{model_dir}/onnx/quantized/model_quantized.onnx" |
| ], |
| "outputs": [ |
| "{model_dir}/onnx/quantized/onnx_output_compare.json" |
| ], |
| "requires": [ |
| "validate_quantized_onnx" |
| ], |
| "timeout_sec": 120, |
| "failure_code_on_error": "FAIL_NUMERICAL_MISMATCH", |
| "validation_report": "{model_dir}/onnx/quantized/onnx_output_compare.json", |
| "options": { |
| "seed": 20260806, |
| "threads": 1, |
| "atol": 0.0, |
| "rtol": 0.0, |
| "comparison": "raw_integer" |
| }, |
| "patch": null |
| }, |
| { |
| "id": "inspect_quantized_onnx_preservation", |
| "stage": "onnx_quantization_preservation", |
| "variant": "public_quantized", |
| "command": [ |
| "{python}", |
| "{repo_root}/scripts/stages/inspect_onnx_quantization.py", |
| "--onnx-check", |
| "{model_dir}/onnx/quantized/onnx_check.json", |
| "--report", |
| "{model_dir}/onnx/quantized/onnx_quantization_inspection.json" |
| ], |
| "inputs": [ |
| "{model_dir}/onnx/quantized/onnx_check.json" |
| ], |
| "outputs": [ |
| "{model_dir}/onnx/quantized/onnx_quantization_inspection.json" |
| ], |
| "requires": [ |
| "validate_quantized_onnx" |
| ], |
| "timeout_sec": 60, |
| "failure_code_on_error": "FAIL_QUANTIZATION_PRESERVATION", |
| "validation_report": "{model_dir}/onnx/quantized/onnx_quantization_inspection.json", |
| "options": { |
| "allowed_representations": [ |
| "QDQ", |
| "QOPERATOR", |
| "QUANTIZED_TENSOR" |
| ], |
| "float_fallback_is_failure": true |
| }, |
| "patch": null |
| } |
| ] |
| } |
|
|