{
  "title": "Vision Detection Deployment Benchmark 2026",
  "executionDate": "2026-08-24",
  "dataset": "COCO 2017 validation split",
  "images": 5000,
  "evaluatorVersion": "pran-vision-deployment/1.0.0",
  "selectionRule": "Lowest p95 local latency within 2.0 absolute mAP50-95 points of YOLO11s at 640 px.",
  "accuracyFloor": 0.4437,
  "recommended": {
    "model": "yolo11s.pt",
    "modelSha256": "85a76fe86dd8afe384648546b56a7a78580c7cb7b404fc595f97969322d502d5",
    "sourceModel": "yolo11s.pt",
    "sourceModelSha256": "85a76fe86dd8afe384648546b56a7a78580c7cb7b404fc595f97969322d502d5",
    "modelSizeMb": 18.42,
    "runtime": "pytorch",
    "device": "mps",
    "imgsz": 640,
    "exportSeconds": 0.0,
    "accuracy": {
      "map50to95": 0.4637,
      "map50": 0.6319,
      "map75": 0.5003,
      "precision": 0.7043,
      "recall": 0.5765,
      "personMap50to95": 0.5794,
      "speedMsPerImage": {
        "preprocess": 0.1069,
        "inference": 6.198,
        "loss": 0.0,
        "postprocess": 3.4185
      }
    },
    "latency": {
      "runs": 200,
      "warmupRuns": 20,
      "latencyMs": {
        "mean": 14.0948,
        "stdev": 35.7217,
        "p50": 11.3186,
        "p95": 13.5522,
        "p99": 23.4027,
        "min": 9.2505,
        "max": 517.5404
      },
      "reportedStageMeanMs": {
        "preprocess": 0.6462,
        "postprocess": 1.5836,
        "inference": 11.5624
      },
      "throughputFpsAtP95": 73.7888,
      "safeFpsAt50PctHeadroom": 36.8944,
      "peakProcessRssMb": 1413.23
    }
  },
  "configurations": [
    {
      "model": "yolo11n.pt",
      "modelSha256": "0ebbc80d4a7680d14987a577cd21342b65ecfd94632bd9a8da63ae6417644ee1",
      "sourceModel": "yolo11n.pt",
      "sourceModelSha256": "0ebbc80d4a7680d14987a577cd21342b65ecfd94632bd9a8da63ae6417644ee1",
      "modelSizeMb": 5.35,
      "runtime": "pytorch",
      "device": "mps",
      "imgsz": 320,
      "exportSeconds": 0.0,
      "accuracy": {
        "map50to95": 0.2882,
        "map50": 0.4184,
        "map75": 0.3076,
        "precision": 0.5983,
        "recall": 0.3902,
        "personMap50to95": 0.3924,
        "speedMsPerImage": {
          "preprocess": 0.0771,
          "inference": 1.5783,
          "loss": 0.0,
          "postprocess": 2.336
        }
      },
      "latency": {
        "runs": 200,
        "warmupRuns": 20,
        "latencyMs": {
          "mean": 10.6057,
          "stdev": 1.7679,
          "p50": 10.3437,
          "p95": 12.7283,
          "p99": 17.7321,
          "min": 7.982,
          "max": 22.6851
        },
        "reportedStageMeanMs": {
          "preprocess": 0.4026,
          "postprocess": 2.0847,
          "inference": 7.6783
        },
        "throughputFpsAtP95": 78.565,
        "safeFpsAt50PctHeadroom": 39.2825,
        "peakProcessRssMb": 1669.25
      }
    },
    {
      "model": "yolo11n.pt",
      "modelSha256": "0ebbc80d4a7680d14987a577cd21342b65ecfd94632bd9a8da63ae6417644ee1",
      "sourceModel": "yolo11n.pt",
      "sourceModelSha256": "0ebbc80d4a7680d14987a577cd21342b65ecfd94632bd9a8da63ae6417644ee1",
      "modelSizeMb": 5.35,
      "runtime": "pytorch",
      "device": "mps",
      "imgsz": 480,
      "exportSeconds": 0.0,
      "accuracy": {
        "map50to95": 0.3571,
        "map50": 0.5068,
        "map75": 0.3815,
        "precision": 0.6299,
        "recall": 0.4681,
        "personMap50to95": 0.4729,
        "speedMsPerImage": {
          "preprocess": 0.0847,
          "inference": 2.6276,
          "loss": 0.0,
          "postprocess": 2.2394
        }
      },
      "latency": {
        "runs": 200,
        "warmupRuns": 20,
        "latencyMs": {
          "mean": 9.9441,
          "stdev": 2.1471,
          "p50": 9.8274,
          "p95": 13.7114,
          "p99": 16.9477,
          "min": 6.1898,
          "max": 17.3965
        },
        "reportedStageMeanMs": {
          "preprocess": 0.551,
          "postprocess": 1.7842,
          "inference": 7.2219
        },
        "throughputFpsAtP95": 72.9323,
        "safeFpsAt50PctHeadroom": 36.4661,
        "peakProcessRssMb": 1709.38
      }
    },
    {
      "model": "yolo11n.pt",
      "modelSha256": "0ebbc80d4a7680d14987a577cd21342b65ecfd94632bd9a8da63ae6417644ee1",
      "sourceModel": "yolo11n.pt",
      "sourceModelSha256": "0ebbc80d4a7680d14987a577cd21342b65ecfd94632bd9a8da63ae6417644ee1",
      "modelSizeMb": 5.35,
      "runtime": "pytorch",
      "device": "mps",
      "imgsz": 640,
      "exportSeconds": 0.0,
      "accuracy": {
        "map50to95": 0.3888,
        "map50": 0.5461,
        "map75": 0.4233,
        "precision": 0.6529,
        "recall": 0.5042,
        "personMap50to95": 0.5176,
        "speedMsPerImage": {
          "preprocess": 0.1062,
          "inference": 4.3211,
          "loss": 0.0,
          "postprocess": 2.888
        }
      },
      "latency": {
        "runs": 200,
        "warmupRuns": 20,
        "latencyMs": {
          "mean": 12.0332,
          "stdev": 54.0925,
          "p50": 7.7708,
          "p95": 10.3178,
          "p99": 21.6354,
          "min": 6.333,
          "max": 774.4642
        },
        "reportedStageMeanMs": {
          "preprocess": 0.5956,
          "postprocess": 1.5546,
          "inference": 9.5775
        },
        "throughputFpsAtP95": 96.9201,
        "safeFpsAt50PctHeadroom": 48.4601,
        "peakProcessRssMb": 1293.92
      }
    },
    {
      "model": "yolo11s.pt",
      "modelSha256": "85a76fe86dd8afe384648546b56a7a78580c7cb7b404fc595f97969322d502d5",
      "sourceModel": "yolo11s.pt",
      "sourceModelSha256": "85a76fe86dd8afe384648546b56a7a78580c7cb7b404fc595f97969322d502d5",
      "modelSizeMb": 18.42,
      "runtime": "pytorch",
      "device": "mps",
      "imgsz": 320,
      "exportSeconds": 0.0,
      "accuracy": {
        "map50to95": 0.3752,
        "map50": 0.5277,
        "map75": 0.3992,
        "precision": 0.6634,
        "recall": 0.4822,
        "personMap50to95": 0.4657,
        "speedMsPerImage": {
          "preprocess": 0.077,
          "inference": 2.5069,
          "loss": 0.0,
          "postprocess": 1.6091
        }
      },
      "latency": {
        "runs": 200,
        "warmupRuns": 20,
        "latencyMs": {
          "mean": 8.2957,
          "stdev": 1.8059,
          "p50": 7.9973,
          "p95": 10.0863,
          "p99": 19.6247,
          "min": 5.8122,
          "max": 21.1393
        },
        "reportedStageMeanMs": {
          "preprocess": 0.3587,
          "postprocess": 1.4488,
          "inference": 6.1959
        },
        "throughputFpsAtP95": 99.144,
        "safeFpsAt50PctHeadroom": 49.572,
        "peakProcessRssMb": 1347.22
      }
    },
    {
      "model": "yolo11s.pt",
      "modelSha256": "85a76fe86dd8afe384648546b56a7a78580c7cb7b404fc595f97969322d502d5",
      "sourceModel": "yolo11s.pt",
      "sourceModelSha256": "85a76fe86dd8afe384648546b56a7a78580c7cb7b404fc595f97969322d502d5",
      "modelSizeMb": 18.42,
      "runtime": "pytorch",
      "device": "mps",
      "imgsz": 480,
      "exportSeconds": 0.0,
      "accuracy": {
        "map50to95": 0.434,
        "map50": 0.5965,
        "map75": 0.468,
        "precision": 0.6689,
        "recall": 0.5494,
        "personMap50to95": 0.5427,
        "speedMsPerImage": {
          "preprocess": 0.0875,
          "inference": 4.1034,
          "loss": 0.0,
          "postprocess": 2.353
        }
      },
      "latency": {
        "runs": 200,
        "warmupRuns": 20,
        "latencyMs": {
          "mean": 9.0097,
          "stdev": 1.398,
          "p50": 8.8729,
          "p95": 10.2008,
          "p99": 15.1988,
          "min": 6.898,
          "max": 20.5464
        },
        "reportedStageMeanMs": {
          "preprocess": 0.5169,
          "postprocess": 1.4521,
          "inference": 6.7456
        },
        "throughputFpsAtP95": 98.0317,
        "safeFpsAt50PctHeadroom": 49.0159,
        "peakProcessRssMb": 1363.2
      }
    },
    {
      "model": "yolo11s.pt",
      "modelSha256": "85a76fe86dd8afe384648546b56a7a78580c7cb7b404fc595f97969322d502d5",
      "sourceModel": "yolo11s.pt",
      "sourceModelSha256": "85a76fe86dd8afe384648546b56a7a78580c7cb7b404fc595f97969322d502d5",
      "modelSizeMb": 18.42,
      "runtime": "pytorch",
      "device": "mps",
      "imgsz": 640,
      "exportSeconds": 0.0,
      "accuracy": {
        "map50to95": 0.4637,
        "map50": 0.6319,
        "map75": 0.5003,
        "precision": 0.7043,
        "recall": 0.5765,
        "personMap50to95": 0.5794,
        "speedMsPerImage": {
          "preprocess": 0.1069,
          "inference": 6.198,
          "loss": 0.0,
          "postprocess": 3.4185
        }
      },
      "latency": {
        "runs": 200,
        "warmupRuns": 20,
        "latencyMs": {
          "mean": 14.0948,
          "stdev": 35.7217,
          "p50": 11.3186,
          "p95": 13.5522,
          "p99": 23.4027,
          "min": 9.2505,
          "max": 517.5404
        },
        "reportedStageMeanMs": {
          "preprocess": 0.6462,
          "postprocess": 1.5836,
          "inference": 11.5624
        },
        "throughputFpsAtP95": 73.7888,
        "safeFpsAt50PctHeadroom": 36.8944,
        "peakProcessRssMb": 1413.23
      }
    },
    {
      "model": "yolo11n.mlpackage",
      "modelSha256": "ac39af16269fca52f80b28f4d1d841fe8be9630935ba5dd9e13ae14c02ec2987",
      "sourceModel": "yolo11n.pt",
      "sourceModelSha256": "0ebbc80d4a7680d14987a577cd21342b65ecfd94632bd9a8da63ae6417644ee1",
      "modelSizeMb": 10.23,
      "runtime": "coreml",
      "device": "mps",
      "imgsz": 640,
      "exportSeconds": 2.4008,
      "accuracy": {
        "map50to95": 0.3877,
        "map50": 0.5446,
        "map75": 0.4221,
        "precision": 0.6504,
        "recall": 0.4976,
        "personMap50to95": 0.5181,
        "speedMsPerImage": {
          "preprocess": 1.4031,
          "inference": 18.873,
          "loss": 0.0007,
          "postprocess": 4.3074
        }
      },
      "latency": {
        "runs": 200,
        "warmupRuns": 20,
        "latencyMs": {
          "mean": 22.6743,
          "stdev": 1.2806,
          "p50": 22.3963,
          "p95": 25.2355,
          "p99": 28.5721,
          "min": 20.5383,
          "max": 29.1067
        },
        "reportedStageMeanMs": {
          "inference": 18.6615,
          "postprocess": 2.7725,
          "preprocess": 0.8072
        },
        "throughputFpsAtP95": 39.6268,
        "safeFpsAt50PctHeadroom": 19.8134,
        "peakProcessRssMb": 3511.42
      }
    },
    {
      "model": "yolo11s.mlpackage",
      "modelSha256": "024a9f5905266dc8b94f42f8e9e003886abb1140825b8f407e94b27769ea0b5a",
      "sourceModel": "yolo11s.pt",
      "sourceModelSha256": "85a76fe86dd8afe384648546b56a7a78580c7cb7b404fc595f97969322d502d5",
      "modelSizeMb": 36.27,
      "runtime": "coreml",
      "device": "mps",
      "imgsz": 640,
      "exportSeconds": 1.6639,
      "accuracy": {
        "map50to95": 0.4608,
        "map50": 0.6282,
        "map75": 0.498,
        "precision": 0.6935,
        "recall": 0.5727,
        "personMap50to95": 0.5783,
        "speedMsPerImage": {
          "preprocess": 1.2521,
          "inference": 31.7253,
          "loss": 0.0008,
          "postprocess": 3.1027
        }
      },
      "latency": {
        "runs": 200,
        "warmupRuns": 20,
        "latencyMs": {
          "mean": 36.2011,
          "stdev": 1.9093,
          "p50": 35.8651,
          "p95": 40.5506,
          "p99": 42.1513,
          "min": 33.2211,
          "max": 42.8781
        },
        "reportedStageMeanMs": {
          "inference": 31.6506,
          "postprocess": 3.099,
          "preprocess": 0.8932
        },
        "throughputFpsAtP95": 24.6605,
        "safeFpsAt50PctHeadroom": 12.3303,
        "peakProcessRssMb": 3289.86
      }
    },
    {
      "model": "yolo11n.onnx",
      "modelSha256": "d24052a63c4627180609d80200c5aaa7a3e6bfd33182c9ca1a076928d1280d4d",
      "sourceModel": "yolo11n.pt",
      "sourceModelSha256": "0ebbc80d4a7680d14987a577cd21342b65ecfd94632bd9a8da63ae6417644ee1",
      "modelSizeMb": 10.21,
      "runtime": "onnx",
      "device": "cpu",
      "imgsz": 640,
      "exportSeconds": 0.6177,
      "accuracy": {
        "map50to95": 0.3877,
        "map50": 0.5446,
        "map75": 0.4221,
        "precision": 0.6503,
        "recall": 0.4976,
        "personMap50to95": 0.5181,
        "speedMsPerImage": {
          "preprocess": 0.4281,
          "inference": 44.8164,
          "loss": 0.0007,
          "postprocess": 1.5389
        }
      },
      "latency": {
        "runs": 200,
        "warmupRuns": 20,
        "latencyMs": {
          "mean": 38.475,
          "stdev": 0.9499,
          "p50": 38.232,
          "p95": 40.2347,
          "p99": 41.3458,
          "min": 36.6019,
          "max": 41.9498
        },
        "reportedStageMeanMs": {
          "inference": 36.568,
          "postprocess": 0.6545,
          "preprocess": 1.0433
        },
        "throughputFpsAtP95": 24.8542,
        "safeFpsAt50PctHeadroom": 12.4271,
        "peakProcessRssMb": 1005.5
      }
    },
    {
      "model": "yolo11s.onnx",
      "modelSha256": "b9399143de9810973ef7ee74ceec6410bd18cd986704f394bad7f1293d913d6d",
      "sourceModel": "yolo11s.pt",
      "sourceModelSha256": "85a76fe86dd8afe384648546b56a7a78580c7cb7b404fc595f97969322d502d5",
      "modelSizeMb": 36.25,
      "runtime": "onnx",
      "device": "cpu",
      "imgsz": 640,
      "exportSeconds": 1.067,
      "accuracy": {
        "map50to95": 0.4608,
        "map50": 0.6282,
        "map75": 0.498,
        "precision": 0.6935,
        "recall": 0.5727,
        "personMap50to95": 0.5783,
        "speedMsPerImage": {
          "preprocess": 0.6189,
          "inference": 94.1163,
          "loss": 0.001,
          "postprocess": 1.3746
        }
      },
      "latency": {
        "runs": 200,
        "warmupRuns": 20,
        "latencyMs": {
          "mean": 83.4511,
          "stdev": 0.9015,
          "p50": 83.366,
          "p95": 85.2678,
          "p99": 86.4657,
          "min": 81.7751,
          "max": 87.6844
        },
        "reportedStageMeanMs": {
          "inference": 81.5281,
          "postprocess": 0.6927,
          "preprocess": 1.0062
        },
        "throughputFpsAtP95": 11.7278,
        "safeFpsAt50PctHeadroom": 5.8639,
        "peakProcessRssMb": 1200.81
      }
    },
    {
      "model": "yolo11n.pt",
      "modelSha256": "0ebbc80d4a7680d14987a577cd21342b65ecfd94632bd9a8da63ae6417644ee1",
      "sourceModel": "yolo11n.pt",
      "sourceModelSha256": "0ebbc80d4a7680d14987a577cd21342b65ecfd94632bd9a8da63ae6417644ee1",
      "modelSizeMb": 5.35,
      "runtime": "pytorch",
      "device": "0",
      "imgsz": 640,
      "exportSeconds": 0.0,
      "accuracy": {
        "map50to95": 0.389,
        "map50": 0.5461,
        "map75": 0.4232,
        "precision": 0.6522,
        "recall": 0.5042,
        "personMap50to95": 0.5177,
        "speedMsPerImage": {
          "preprocess": 0.413,
          "inference": 1.7035,
          "loss": 0.0003,
          "postprocess": 0.7499
        }
      },
      "latency": {
        "runs": 200,
        "warmupRuns": 20,
        "latencyMs": {
          "mean": 12.6192,
          "stdev": 4.4028,
          "p50": 12.2073,
          "p95": 13.047,
          "p99": 13.6548,
          "min": 11.3274,
          "max": 74.3917
        },
        "reportedStageMeanMs": {
          "inference": 9.4897,
          "postprocess": 1.1188,
          "preprocess": 1.6864
        },
        "throughputFpsAtP95": 76.6457,
        "safeFpsAt50PctHeadroom": 38.3229,
        "peakProcessRssMb": 1581.98
      }
    },
    {
      "model": "yolo11s.pt",
      "modelSha256": "85a76fe86dd8afe384648546b56a7a78580c7cb7b404fc595f97969322d502d5",
      "sourceModel": "yolo11s.pt",
      "sourceModelSha256": "85a76fe86dd8afe384648546b56a7a78580c7cb7b404fc595f97969322d502d5",
      "modelSizeMb": 18.42,
      "runtime": "pytorch",
      "device": "0",
      "imgsz": 640,
      "exportSeconds": 0.0,
      "accuracy": {
        "map50to95": 0.4635,
        "map50": 0.6318,
        "map75": 0.5,
        "precision": 0.6998,
        "recall": 0.5763,
        "personMap50to95": 0.5795,
        "speedMsPerImage": {
          "preprocess": 0.3859,
          "inference": 3.4233,
          "loss": 0.0003,
          "postprocess": 0.6845
        }
      },
      "latency": {
        "runs": 200,
        "warmupRuns": 20,
        "latencyMs": {
          "mean": 12.7117,
          "stdev": 3.2408,
          "p50": 12.388,
          "p95": 13.2219,
          "p99": 14.2493,
          "min": 11.5849,
          "max": 57.9638
        },
        "reportedStageMeanMs": {
          "inference": 9.583,
          "postprocess": 1.111,
          "preprocess": 1.6984
        },
        "throughputFpsAtP95": 75.6321,
        "safeFpsAt50PctHeadroom": 37.8161,
        "peakProcessRssMb": 1660.01
      }
    }
  ],
  "capacityScenarios": [
    {
      "fpsPerCamera": 2,
      "supportedCamerasAt50PctHeadroom": 18
    },
    {
      "fpsPerCamera": 5,
      "supportedCamerasAt50PctHeadroom": 7
    },
    {
      "fpsPerCamera": 10,
      "supportedCamerasAt50PctHeadroom": 3
    }
  ],
  "limitations": [
    "COCO is a generic object-detection dataset, not representative industrial defect evidence.",
    "Capacity is computed from batch-one p95 latency and assumes frames are scheduled evenly; camera decoding and application I/O are outside the benchmark.",
    "No defect reduction, labour saving, or escape-rate claim can be inferred without site-specific ground truth.",
    "Ultralytics checkpoints and software have licensing terms that must be reviewed for the intended production use.",
    "Runtime bars compare different hardware and software stacks; they demonstrate deployability and must not be interpreted as a controlled hardware ranking."
  ]
}
