Browse Source

[web] Remove tensorflow, and then some (#1411)

Remove all ML code that is not in the immediate release path. We will
resurrect if/when we reintroduce object and text detection, for now we
prune in an attempt to get the face detection release out to completion.
Manav Rathi 1 year ago
parent
commit
bbdbad5891
68 changed files with 197 additions and 16776 deletions
  1. 0 7
      web/apps/photos/package.json
  2. 0 8
      web/apps/photos/public/js/tesseract/tesseract-core.wasm.js
  3. 0 7
      web/apps/photos/public/js/tesseract/worker.min.js
  4. BIN
      web/apps/photos/public/js/tfjs/tfjs-backend-wasm-simd.wasm
  5. BIN
      web/apps/photos/public/js/tfjs/tfjs-backend-wasm-threaded-simd.wasm
  6. BIN
      web/apps/photos/public/js/tfjs/tfjs-backend-wasm.wasm
  7. 0 8
      web/apps/photos/public/js/tflite/tflite_web_api_cc.js
  8. BIN
      web/apps/photos/public/js/tflite/tflite_web_api_cc.wasm
  9. 0 8
      web/apps/photos/public/js/tflite/tflite_web_api_cc_simd.js
  10. BIN
      web/apps/photos/public/js/tflite/tflite_web_api_cc_simd.wasm
  11. 0 8
      web/apps/photos/public/js/tflite/tflite_web_api_cc_simd_threaded.js
  12. BIN
      web/apps/photos/public/js/tflite/tflite_web_api_cc_simd_threaded.wasm
  13. 0 0
      web/apps/photos/public/js/tflite/tflite_web_api_cc_simd_threaded.worker.js
  14. 0 8
      web/apps/photos/public/js/tflite/tflite_web_api_cc_threaded.js
  15. BIN
      web/apps/photos/public/js/tflite/tflite_web_api_cc_threaded.wasm
  16. 0 0
      web/apps/photos/public/js/tflite/tflite_web_api_cc_threaded.worker.js
  17. BIN
      web/apps/photos/public/models/blazeface/back/group1-shard1of1.bin
  18. 0 0
      web/apps/photos/public/models/blazeface/back/model.json
  19. BIN
      web/apps/photos/public/models/imagescene/group1-shard1of7.bin
  20. BIN
      web/apps/photos/public/models/imagescene/group1-shard2of7.bin
  21. BIN
      web/apps/photos/public/models/imagescene/group1-shard3of7.bin
  22. BIN
      web/apps/photos/public/models/imagescene/group1-shard4of7.bin
  23. BIN
      web/apps/photos/public/models/imagescene/group1-shard5of7.bin
  24. BIN
      web/apps/photos/public/models/imagescene/group1-shard6of7.bin
  25. BIN
      web/apps/photos/public/models/imagescene/group1-shard7of7.bin
  26. 0 0
      web/apps/photos/public/models/imagescene/model.json
  27. 0 32
      web/apps/photos/public/models/imagescene/sceneMap.json
  28. BIN
      web/apps/photos/public/models/mobilefacenet/mobilefacenet.tflite
  29. BIN
      web/apps/photos/public/models/ssdmobilenet/group1-shard1of7
  30. BIN
      web/apps/photos/public/models/ssdmobilenet/group1-shard2of7
  31. BIN
      web/apps/photos/public/models/ssdmobilenet/group1-shard3of7
  32. BIN
      web/apps/photos/public/models/ssdmobilenet/group1-shard4of7
  33. BIN
      web/apps/photos/public/models/ssdmobilenet/group1-shard5of7
  34. BIN
      web/apps/photos/public/models/ssdmobilenet/group1-shard6of7
  35. BIN
      web/apps/photos/public/models/ssdmobilenet/group1-shard7of7
  36. 0 14584
      web/apps/photos/public/models/ssdmobilenet/model.json
  37. 0 0
      web/apps/photos/public/models/ssdmobilenet/weights_manifest.json
  38. 0 51
      web/apps/photos/src/components/MachineLearning/ObjectList.tsx
  39. 0 39
      web/apps/photos/src/components/MachineLearning/TFJSImage.tsx
  40. 0 5
      web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx
  41. 1 7
      web/apps/photos/src/components/Search/SearchBar/searchInput/index.tsx
  42. 0 30
      web/apps/photos/src/constants/mlConfig.ts
  43. 0 257
      web/apps/photos/src/services/machineLearning/blazeFaceDetectionService.ts
  44. 0 108
      web/apps/photos/src/services/machineLearning/imageSceneService.ts
  45. 0 36
      web/apps/photos/src/services/machineLearning/machineLearningFactory.ts
  46. 4 126
      web/apps/photos/src/services/machineLearning/machineLearningService.ts
  47. 0 9
      web/apps/photos/src/services/machineLearning/mlSyncJob.ts
  48. 9 1
      web/apps/photos/src/services/machineLearning/mlWorkManager.ts
  49. 2 91
      web/apps/photos/src/services/machineLearning/mobileFaceNetEmbeddingService.ts
  50. 0 146
      web/apps/photos/src/services/machineLearning/objectService.ts
  51. 0 2
      web/apps/photos/src/services/machineLearning/readerService.ts
  52. 0 66
      web/apps/photos/src/services/machineLearning/ssdMobileNetV2Service.ts
  53. 102 12
      web/apps/photos/src/services/machineLearning/yoloFaceDetectionService.ts
  54. 2 25
      web/apps/photos/src/services/searchService.ts
  55. 0 16
      web/apps/photos/src/types/machineLearning/archface.ts
  56. 1 91
      web/apps/photos/src/types/machineLearning/index.ts
  57. 1 7
      web/apps/photos/src/types/search/index.ts
  58. 37 196
      web/apps/photos/src/utils/machineLearning/faceAlign.ts
  59. 17 170
      web/apps/photos/src/utils/machineLearning/faceCrop.ts
  60. 0 108
      web/apps/photos/src/utils/machineLearning/faceDetection.ts
  61. 1 267
      web/apps/photos/src/utils/machineLearning/index.ts
  62. 0 33
      web/apps/photos/src/utils/machineLearning/transform.ts
  63. 9 39
      web/apps/photos/src/utils/storage/mlIDbStorage.ts
  64. 0 8
      web/apps/photos/src/worker/search.worker.ts
  65. 9 2
      web/apps/photos/thirdparty/face-api/classes/Box.ts
  66. 2 2
      web/apps/photos/thirdparty/face-api/classes/Dimensions.ts
  67. 0 63
      web/apps/photos/thirdparty/face-api/utils/index.ts
  68. 0 93
      web/yarn.lock

+ 0 - 7
web/apps/photos/package.json

@@ -10,14 +10,7 @@
         "@ente/shared": "*",
         "@mui/x-date-pickers": "^5.0.0-alpha.6",
         "@stripe/stripe-js": "^1.13.2",
-        "@tensorflow-models/coco-ssd": "^2.2.2",
-        "@tensorflow/tfjs-backend-cpu": "^4.10.0",
-        "@tensorflow/tfjs-backend-webgl": "^4.9.0",
-        "@tensorflow/tfjs-converter": "^4.10.0",
-        "@tensorflow/tfjs-core": "^4.10.0",
-        "@tensorflow/tfjs-tflite": "0.0.1-alpha.7",
         "bip39": "^3.0.4",
-        "blazeface-back": "^0.0.9",
         "bs58": "^5.0.0",
         "chrono-node": "^2.2.6",
         "date-fns": "^2",

File diff suppressed because it is too large
+ 0 - 8
web/apps/photos/public/js/tesseract/tesseract-core.wasm.js


File diff suppressed because it is too large
+ 0 - 7
web/apps/photos/public/js/tesseract/worker.min.js


BIN
web/apps/photos/public/js/tfjs/tfjs-backend-wasm-simd.wasm


BIN
web/apps/photos/public/js/tfjs/tfjs-backend-wasm-threaded-simd.wasm


BIN
web/apps/photos/public/js/tfjs/tfjs-backend-wasm.wasm


File diff suppressed because it is too large
+ 0 - 8
web/apps/photos/public/js/tflite/tflite_web_api_cc.js


BIN
web/apps/photos/public/js/tflite/tflite_web_api_cc.wasm


File diff suppressed because it is too large
+ 0 - 8
web/apps/photos/public/js/tflite/tflite_web_api_cc_simd.js


BIN
web/apps/photos/public/js/tflite/tflite_web_api_cc_simd.wasm


File diff suppressed because it is too large
+ 0 - 8
web/apps/photos/public/js/tflite/tflite_web_api_cc_simd_threaded.js


BIN
web/apps/photos/public/js/tflite/tflite_web_api_cc_simd_threaded.wasm


File diff suppressed because it is too large
+ 0 - 0
web/apps/photos/public/js/tflite/tflite_web_api_cc_simd_threaded.worker.js


File diff suppressed because it is too large
+ 0 - 8
web/apps/photos/public/js/tflite/tflite_web_api_cc_threaded.js


BIN
web/apps/photos/public/js/tflite/tflite_web_api_cc_threaded.wasm


File diff suppressed because it is too large
+ 0 - 0
web/apps/photos/public/js/tflite/tflite_web_api_cc_threaded.worker.js


BIN
web/apps/photos/public/models/blazeface/back/group1-shard1of1.bin


File diff suppressed because it is too large
+ 0 - 0
web/apps/photos/public/models/blazeface/back/model.json


BIN
web/apps/photos/public/models/imagescene/group1-shard1of7.bin


BIN
web/apps/photos/public/models/imagescene/group1-shard2of7.bin


BIN
web/apps/photos/public/models/imagescene/group1-shard3of7.bin


BIN
web/apps/photos/public/models/imagescene/group1-shard4of7.bin


BIN
web/apps/photos/public/models/imagescene/group1-shard5of7.bin


BIN
web/apps/photos/public/models/imagescene/group1-shard6of7.bin


BIN
web/apps/photos/public/models/imagescene/group1-shard7of7.bin


File diff suppressed because it is too large
+ 0 - 0
web/apps/photos/public/models/imagescene/model.json


+ 0 - 32
web/apps/photos/public/models/imagescene/sceneMap.json

@@ -1,32 +0,0 @@
-{
-    "0": "waterfall",
-    "1": "snow",
-    "2": "landscape",
-    "3": "underwater",
-    "4": "architecture",
-    "5": "sunset / sunrise",
-    "6": "blue sky",
-    "7": "cloudy sky",
-    "8": "greenery",
-    "9": "autumn leaves",
-    "10": "portrait",
-    "11": "flower",
-    "12": "night shot",
-    "13": "stage concert",
-    "14": "fireworks",
-    "15": "candle light",
-    "16": "neon lights",
-    "17": "indoor",
-    "18": "backlight",
-    "19": "text documents",
-    "20": "qr images",
-    "21": "group portrait",
-    "22": "computer screens",
-    "23": "kids",
-    "24": "dog",
-    "25": "cat",
-    "26": "macro",
-    "27": "food",
-    "28": "beach",
-    "29": "mountain"
-}

BIN
web/apps/photos/public/models/mobilefacenet/mobilefacenet.tflite


BIN
web/apps/photos/public/models/ssdmobilenet/group1-shard1of7


BIN
web/apps/photos/public/models/ssdmobilenet/group1-shard2of7


BIN
web/apps/photos/public/models/ssdmobilenet/group1-shard3of7


BIN
web/apps/photos/public/models/ssdmobilenet/group1-shard4of7


BIN
web/apps/photos/public/models/ssdmobilenet/group1-shard5of7


BIN
web/apps/photos/public/models/ssdmobilenet/group1-shard6of7


BIN
web/apps/photos/public/models/ssdmobilenet/group1-shard7of7


+ 0 - 14584
web/apps/photos/public/models/ssdmobilenet/model.json

@@ -1,14584 +0,0 @@
-{
-  "modelTopology": {
-    "node": [
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": []
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "ConstantFolding/Postprocessor/Decode/div_recip",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "dtype": {
-            "type": 1
-          },
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1083"
-                  },
-                  {
-                    "size": "2"
-                  }
-                ]
-              }
-            }
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Reshape",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/div_14",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_15",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "dtype": {
-            "type": 3
-          },
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  }
-                ]
-              }
-            }
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_2/ExpandedShape/concat",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_2/ExpandedShape_1/concat",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "600"
-                  },
-                  {
-                    "size": "2"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Reshape_2",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "6"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/div_15",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "6"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_23",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape_1/concat",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "dtype": {
-            "type": 1
-          },
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "150"
-                  },
-                  {
-                    "size": "2"
-                  }
-                ]
-              }
-            }
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Reshape_4",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "6"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/div_16",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "6"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_31",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_8/ExpandedShape_1/concat",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "54"
-                  },
-                  {
-                    "size": "2"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Reshape_6",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "6"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/div_17",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "6"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_39",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_11/ExpandedShape_1/concat",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "24"
-                  },
-                  {
-                    "size": "2"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Reshape_8",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "6"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/div_18",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "6"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_47",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_14/ExpandedShape_1/concat",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "6"
-                  },
-                  {
-                    "size": "2"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Reshape_10",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "6"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/div_19",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "6"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_55",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [
-                2
-              ],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "strided_slice_6/stack_1",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [
-                3
-              ],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "strided_slice_7/stack_1",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "2"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Reshape_1/shape",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": []
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_19/x",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "2"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "Postprocessor/Reshape_1/shape",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "dtype": {
-            "type": 1
-          },
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": []
-              }
-            }
-          }
-        },
-        "name": "ConstantFolding/Postprocessor/Decode/div_2_recip",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "512"
-                  },
-                  {
-                    "size": "12"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_0/BoxEncodingPredictor/weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "12"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_0/BoxEncodingPredictor/biases",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1024"
-                  },
-                  {
-                    "size": "24"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_1/BoxEncodingPredictor/weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "24"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_1/BoxEncodingPredictor/biases",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "512"
-                  },
-                  {
-                    "size": "24"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_2/BoxEncodingPredictor/weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "24"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_2/BoxEncodingPredictor/biases",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "256"
-                  },
-                  {
-                    "size": "24"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_3/BoxEncodingPredictor/weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "dtype": {
-            "type": 1
-          },
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "24"
-                  }
-                ]
-              }
-            }
-          }
-        },
-        "name": "BoxPredictor_3/BoxEncodingPredictor/biases",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "256"
-                  },
-                  {
-                    "size": "24"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_4/BoxEncodingPredictor/weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "dtype": {
-            "type": 1
-          },
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "24"
-                  }
-                ]
-              }
-            }
-          }
-        },
-        "name": "BoxPredictor_4/BoxEncodingPredictor/biases",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "dtype": {
-            "type": 1
-          },
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "128"
-                  },
-                  {
-                    "size": "24"
-                  }
-                ]
-              }
-            }
-          }
-        },
-        "name": "BoxPredictor_5/BoxEncodingPredictor/weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "24"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_5/BoxEncodingPredictor/biases",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [
-                1917
-              ],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": []
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/assert_equal/x",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [
-                4
-              ],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": []
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "BoxPredictor_0/stack/3",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [
-                2
-              ],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": []
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "Postprocessor/ExpandDims_1/dim",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "512"
-                  },
-                  {
-                    "size": "273"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_0/ClassPredictor/weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "273"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_0/ClassPredictor/biases",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "dtype": {
-            "type": 3
-          },
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [
-                1083
-              ],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": []
-              }
-            }
-          }
-        },
-        "name": "BoxPredictor_0/stack/1",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1024"
-                  },
-                  {
-                    "size": "546"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_1/ClassPredictor/weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "dtype": {
-            "type": 1
-          },
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "546"
-                  }
-                ]
-              }
-            }
-          }
-        },
-        "name": "BoxPredictor_1/ClassPredictor/biases",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "dtype": {
-            "type": 3
-          },
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [
-                600
-              ],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": []
-              }
-            }
-          }
-        },
-        "name": "BoxPredictor_1/stack/1",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "512"
-                  },
-                  {
-                    "size": "546"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_2/ClassPredictor/weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "546"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_2/ClassPredictor/biases",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [
-                150
-              ],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": []
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "BoxPredictor_2/stack/1",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "dtype": {
-            "type": 1
-          },
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "256"
-                  },
-                  {
-                    "size": "546"
-                  }
-                ]
-              }
-            }
-          }
-        },
-        "name": "BoxPredictor_3/ClassPredictor/weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "546"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_3/ClassPredictor/biases",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [
-                54
-              ],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": []
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "BoxPredictor_3/stack/1",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "256"
-                  },
-                  {
-                    "size": "546"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_4/ClassPredictor/weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "546"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_4/ClassPredictor/biases",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [
-                24
-              ],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": []
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "BoxPredictor_4/stack/1",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "128"
-                  },
-                  {
-                    "size": "546"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_5/ClassPredictor/weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "546"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_5/ClassPredictor/biases",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": []
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "Preprocessor/mul/x",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [
-                0
-              ],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": []
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Concatenate/concat/axis",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": []
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/strided_slice",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "32"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/Conv2D/merged_input",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "32"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "32"
-                  },
-                  {
-                    "size": "1"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_1_depthwise/depthwise_weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "32"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/BatchNorm/batchnorm/mul",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "32"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "32"
-                  },
-                  {
-                    "size": "64"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/Conv2D/merged_input",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "64"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "64"
-                  },
-                  {
-                    "size": "1"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_2_depthwise/depthwise_weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "64"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/BatchNorm/batchnorm/mul",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "dtype": {
-            "type": 1
-          },
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "64"
-                  }
-                ]
-              }
-            }
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "64"
-                  },
-                  {
-                    "size": "128"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/Conv2D/merged_input",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "128"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "128"
-                  },
-                  {
-                    "size": "1"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_3_depthwise/depthwise_weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "128"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/BatchNorm/batchnorm/mul",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "128"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "128"
-                  },
-                  {
-                    "size": "128"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/Conv2D/merged_input",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "128"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "128"
-                  },
-                  {
-                    "size": "1"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_4_depthwise/depthwise_weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "128"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/BatchNorm/batchnorm/mul",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "128"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "128"
-                  },
-                  {
-                    "size": "256"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/Conv2D/merged_input",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "256"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "256"
-                  },
-                  {
-                    "size": "1"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_5_depthwise/depthwise_weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "256"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/BatchNorm/batchnorm/mul",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "256"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "256"
-                  },
-                  {
-                    "size": "256"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/Conv2D/merged_input",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "256"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "256"
-                  },
-                  {
-                    "size": "1"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_6_depthwise/depthwise_weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "256"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/BatchNorm/batchnorm/mul",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "dtype": {
-            "type": 1
-          },
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "256"
-                  }
-                ]
-              }
-            }
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "256"
-                  },
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/Conv2D/merged_input",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "dtype": {
-            "type": 1
-          },
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "512"
-                  },
-                  {
-                    "size": "1"
-                  }
-                ]
-              }
-            }
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_7_depthwise/depthwise_weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/BatchNorm/batchnorm/mul",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "dtype": {
-            "type": 1
-          },
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "512"
-                  },
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/Conv2D/merged_input",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "512"
-                  },
-                  {
-                    "size": "1"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_8_depthwise/depthwise_weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/BatchNorm/batchnorm/mul",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "512"
-                  },
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/Conv2D/merged_input",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "512"
-                  },
-                  {
-                    "size": "1"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_9_depthwise/depthwise_weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/BatchNorm/batchnorm/mul",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "dtype": {
-            "type": 1
-          },
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "512"
-                  },
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/Conv2D/merged_input",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "512"
-                  },
-                  {
-                    "size": "1"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_10_depthwise/depthwise_weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/BatchNorm/batchnorm/mul",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "512"
-                  },
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/Conv2D/merged_input",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "512"
-                  },
-                  {
-                    "size": "1"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_11_depthwise/depthwise_weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/BatchNorm/batchnorm/mul",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "dtype": {
-            "type": 1
-          },
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "512"
-                  },
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Conv2D/merged_input",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "512"
-                  },
-                  {
-                    "size": "1"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_12_depthwise/depthwise_weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/BatchNorm/batchnorm/mul",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "512"
-                  },
-                  {
-                    "size": "1024"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/Conv2D/merged_input",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1024"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "1024"
-                  },
-                  {
-                    "size": "1"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_depthwise/depthwise_weights",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1024"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/BatchNorm/batchnorm/mul",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1024"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1024"
-                  },
-                  {
-                    "size": "1024"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Conv2D/merged_input",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1024"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "dtype": {
-            "type": 1
-          },
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1024"
-                  },
-                  {
-                    "size": "256"
-                  }
-                ]
-              }
-            }
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/Conv2D/merged_input",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "dtype": {
-            "type": 1
-          },
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "256"
-                  }
-                ]
-              }
-            }
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "256"
-                  },
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/Conv2D/merged_input",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "512"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "512"
-                  },
-                  {
-                    "size": "128"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/Conv2D/merged_input",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "128"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "128"
-                  },
-                  {
-                    "size": "256"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/Conv2D/merged_input",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "256"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "256"
-                  },
-                  {
-                    "size": "128"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/Conv2D/merged_input",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "128"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "128"
-                  },
-                  {
-                    "size": "256"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/Conv2D/merged_input",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "256"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "1"
-                  },
-                  {
-                    "size": "256"
-                  },
-                  {
-                    "size": "64"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/Conv2D/merged_input",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "64"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "dtype": {
-            "type": 1
-          },
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "3"
-                  },
-                  {
-                    "size": "64"
-                  },
-                  {
-                    "size": "128"
-                  }
-                ]
-              }
-            }
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/Conv2D/merged_input",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 1,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "128"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/BatchNorm/batchnorm/sub",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [
-                0
-              ],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "Postprocessor/strided_slice/stack",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "dtype": {
-            "type": 3
-          },
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [
-                1
-              ],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "1"
-                  }
-                ]
-              }
-            }
-          }
-        },
-        "name": "strided_slice_6/stack",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [
-                6
-              ],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": []
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "BoxPredictor_5/stack/1",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "dtype": {
-            "type": 3
-          },
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [
-                91
-              ],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": []
-              }
-            }
-          }
-        },
-        "name": "BoxPredictor_0/stack_1/2",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [
-                1
-              ],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": []
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/concat/axis",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "Postprocessor/Slice/begin",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "3"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "Postprocessor/Slice/size",
-        "op": "Const"
-      },
-      {
-        "input": [],
-        "attr": {
-          "dtype": {
-            "type": 4
-          },
-          "shape": {
-            "shape": {
-              "dim": [
-                {
-                  "size": "-1"
-                },
-                {
-                  "size": "-1"
-                },
-                {
-                  "size": "-1"
-                },
-                {
-                  "size": "3"
-                }
-              ]
-            }
-          }
-        },
-        "name": "image_tensor",
-        "op": "Placeholder"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Concatenate/concat/axis"
-        ],
-        "attr": {
-          "parallel_iterations": {
-            "i": "32"
-          },
-          "frame_name": {
-            "s": [
-              80,
-              114,
-              101,
-              112,
-              114,
-              111,
-              99,
-              101,
-              115,
-              115,
-              111,
-              114,
-              47,
-              109,
-              97,
-              112,
-              47,
-              119,
-              104,
-              105,
-              108,
-              101,
-              47,
-              119,
-              104,
-              105,
-              108,
-              101,
-              95,
-              99,
-              111,
-              110,
-              116,
-              101,
-              120,
-              116
-            ]
-          },
-          "T": {
-            "type": 3
-          },
-          "is_constant": {
-            "b": false
-          }
-        },
-        "name": "Preprocessor/map/while/Enter",
-        "op": "Enter"
-      },
-      {
-        "input": [
-          "image_tensor"
-        ],
-        "attr": {
-          "SrcT": {
-            "type": 4
-          },
-          "DstT": {
-            "type": 1
-          }
-        },
-        "name": "ToFloat",
-        "op": "Cast"
-      },
-      {
-        "input": [
-          "Preprocessor/map/while/Enter",
-          "Preprocessor/map/while/NextIteration"
-        ],
-        "attr": {
-          "T": {
-            "type": 3
-          },
-          "N": {
-            "i": "2"
-          }
-        },
-        "name": "Preprocessor/map/while/Merge",
-        "op": "Merge"
-      },
-      {
-        "input": [
-          "ToFloat"
-        ],
-        "attr": {
-          "out_type": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Preprocessor/map/TensorArrayUnstack/Shape",
-        "op": "Shape"
-      },
-      {
-        "input": [
-          "Preprocessor/map/TensorArrayUnstack/Shape",
-          "Postprocessor/strided_slice/stack",
-          "strided_slice_6/stack",
-          "strided_slice_6/stack"
-        ],
-        "attr": {
-          "shrink_axis_mask": {
-            "i": "1"
-          },
-          "begin_mask": {
-            "i": "0"
-          },
-          "ellipsis_mask": {
-            "i": "0"
-          },
-          "new_axis_mask": {
-            "i": "0"
-          },
-          "end_mask": {
-            "i": "0"
-          },
-          "T": {
-            "type": 3
-          },
-          "Index": {
-            "type": 3
-          }
-        },
-        "name": "Preprocessor/map/TensorArrayUnstack/strided_slice",
-        "op": "StridedSlice"
-      },
-      {
-        "input": [
-          "Preprocessor/map/TensorArrayUnstack/strided_slice"
-        ],
-        "attr": {
-          "tensor_array_name": {
-            "s": []
-          },
-          "dtype": {
-            "type": 1
-          },
-          "element_shape": {
-            "shape": {
-              "dim": [],
-              "unknownRank": true
-            }
-          },
-          "dynamic_size": {
-            "b": false
-          },
-          "clear_after_read": {
-            "b": true
-          },
-          "identical_element_shapes": {
-            "b": true
-          }
-        },
-        "name": "Preprocessor/map/TensorArray_1",
-        "op": "TensorArrayV3"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Concatenate/concat/axis",
-          "Preprocessor/map/TensorArrayUnstack/strided_slice",
-          "MultipleGridAnchorGenerator/concat/axis"
-        ],
-        "attr": {
-          "Tidx": {
-            "type": 3
-          }
-        },
-        "name": "Preprocessor/map/TensorArrayUnstack/range",
-        "op": "Range"
-      },
-      {
-        "input": [
-          "Preprocessor/map/TensorArrayUnstack/strided_slice"
-        ],
-        "attr": {
-          "identical_element_shapes": {
-            "b": true
-          },
-          "tensor_array_name": {
-            "s": []
-          },
-          "dtype": {
-            "type": 1
-          },
-          "element_shape": {
-            "shape": {
-              "dim": [],
-              "unknownRank": true
-            }
-          },
-          "clear_after_read": {
-            "b": true
-          },
-          "dynamic_size": {
-            "b": false
-          }
-        },
-        "name": "Preprocessor/map/TensorArray",
-        "op": "TensorArrayV3"
-      },
-      {
-        "input": [
-          "Preprocessor/map/TensorArrayUnstack/strided_slice"
-        ],
-        "attr": {
-          "T": {
-            "type": 3
-          },
-          "is_constant": {
-            "b": true
-          },
-          "parallel_iterations": {
-            "i": "32"
-          },
-          "frame_name": {
-            "s": [
-              80,
-              114,
-              101,
-              112,
-              114,
-              111,
-              99,
-              101,
-              115,
-              115,
-              111,
-              114,
-              47,
-              109,
-              97,
-              112,
-              47,
-              119,
-              104,
-              105,
-              108,
-              101,
-              47,
-              119,
-              104,
-              105,
-              108,
-              101,
-              95,
-              99,
-              111,
-              110,
-              116,
-              101,
-              120,
-              116
-            ]
-          }
-        },
-        "name": "Preprocessor/map/while/Less/Enter",
-        "op": "Enter"
-      },
-      {
-        "input": [
-          "Preprocessor/map/TensorArray_1:1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "is_constant": {
-            "b": false
-          },
-          "parallel_iterations": {
-            "i": "32"
-          },
-          "frame_name": {
-            "s": [
-              80,
-              114,
-              101,
-              112,
-              114,
-              111,
-              99,
-              101,
-              115,
-              115,
-              111,
-              114,
-              47,
-              109,
-              97,
-              112,
-              47,
-              119,
-              104,
-              105,
-              108,
-              101,
-              47,
-              119,
-              104,
-              105,
-              108,
-              101,
-              95,
-              99,
-              111,
-              110,
-              116,
-              101,
-              120,
-              116
-            ]
-          }
-        },
-        "name": "Preprocessor/map/while/Enter_1",
-        "op": "Enter"
-      },
-      {
-        "input": [
-          "Preprocessor/map/TensorArray_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 20
-          },
-          "is_constant": {
-            "b": true
-          },
-          "parallel_iterations": {
-            "i": "32"
-          },
-          "frame_name": {
-            "s": [
-              80,
-              114,
-              101,
-              112,
-              114,
-              111,
-              99,
-              101,
-              115,
-              115,
-              111,
-              114,
-              47,
-              109,
-              97,
-              112,
-              47,
-              119,
-              104,
-              105,
-              108,
-              101,
-              47,
-              119,
-              104,
-              105,
-              108,
-              101,
-              95,
-              99,
-              111,
-              110,
-              116,
-              101,
-              120,
-              116
-            ]
-          }
-        },
-        "name": "Preprocessor/map/while/TensorArrayWrite/TensorArrayWriteV3/Enter",
-        "op": "Enter"
-      },
-      {
-        "input": [
-          "Preprocessor/map/TensorArray"
-        ],
-        "attr": {
-          "T": {
-            "type": 20
-          },
-          "is_constant": {
-            "b": true
-          },
-          "parallel_iterations": {
-            "i": "32"
-          },
-          "frame_name": {
-            "s": [
-              80,
-              114,
-              101,
-              112,
-              114,
-              111,
-              99,
-              101,
-              115,
-              115,
-              111,
-              114,
-              47,
-              109,
-              97,
-              112,
-              47,
-              119,
-              104,
-              105,
-              108,
-              101,
-              47,
-              119,
-              104,
-              105,
-              108,
-              101,
-              95,
-              99,
-              111,
-              110,
-              116,
-              101,
-              120,
-              116
-            ]
-          }
-        },
-        "name": "Preprocessor/map/while/TensorArrayReadV3/Enter",
-        "op": "Enter"
-      },
-      {
-        "input": [
-          "Preprocessor/map/TensorArray",
-          "Preprocessor/map/TensorArrayUnstack/range",
-          "ToFloat",
-          "Preprocessor/map/TensorArray:1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Preprocessor/map/TensorArrayUnstack/TensorArrayScatter/TensorArrayScatterV3",
-        "op": "TensorArrayScatterV3"
-      },
-      {
-        "input": [
-          "Preprocessor/map/while/Merge",
-          "Preprocessor/map/while/Less/Enter"
-        ],
-        "attr": {
-          "T": {
-            "type": 3
-          }
-        },
-        "name": "Preprocessor/map/while/Less",
-        "op": "Less"
-      },
-      {
-        "input": [
-          "Preprocessor/map/while/Enter_1",
-          "Preprocessor/map/while/NextIteration_1"
-        ],
-        "attr": {
-          "N": {
-            "i": "2"
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Preprocessor/map/while/Merge_1",
-        "op": "Merge"
-      },
-      {
-        "input": [
-          "Preprocessor/map/TensorArrayUnstack/TensorArrayScatter/TensorArrayScatterV3"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "is_constant": {
-            "b": true
-          },
-          "parallel_iterations": {
-            "i": "32"
-          },
-          "frame_name": {
-            "s": [
-              80,
-              114,
-              101,
-              112,
-              114,
-              111,
-              99,
-              101,
-              115,
-              115,
-              111,
-              114,
-              47,
-              109,
-              97,
-              112,
-              47,
-              119,
-              104,
-              105,
-              108,
-              101,
-              47,
-              119,
-              104,
-              105,
-              108,
-              101,
-              95,
-              99,
-              111,
-              110,
-              116,
-              101,
-              120,
-              116
-            ]
-          }
-        },
-        "name": "Preprocessor/map/while/TensorArrayReadV3/Enter_1",
-        "op": "Enter"
-      },
-      {
-        "input": [
-          "Preprocessor/map/while/Less"
-        ],
-        "attr": {},
-        "name": "Preprocessor/map/while/LoopCond",
-        "op": "LoopCond"
-      },
-      {
-        "input": [
-          "Preprocessor/map/while/Merge",
-          "Preprocessor/map/while/LoopCond"
-        ],
-        "attr": {
-          "T": {
-            "type": 3
-          }
-        },
-        "name": "Preprocessor/map/while/Switch",
-        "op": "Switch"
-      },
-      {
-        "input": [
-          "Preprocessor/map/while/Merge_1",
-          "Preprocessor/map/while/LoopCond"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Preprocessor/map/while/Switch_1",
-        "op": "Switch"
-      },
-      {
-        "input": [
-          "Preprocessor/map/while/Switch:1"
-        ],
-        "attr": {
-          "T": {
-            "type": 3
-          }
-        },
-        "name": "Preprocessor/map/while/Identity",
-        "op": "Identity"
-      },
-      {
-        "input": [
-          "Preprocessor/map/while/Switch_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Preprocessor/map/while/Exit_1",
-        "op": "Exit"
-      },
-      {
-        "input": [
-          "Preprocessor/map/while/TensorArrayReadV3/Enter",
-          "Preprocessor/map/while/Identity",
-          "Preprocessor/map/while/TensorArrayReadV3/Enter_1"
-        ],
-        "attr": {
-          "dtype": {
-            "type": 1
-          }
-        },
-        "name": "Preprocessor/map/while/TensorArrayReadV3",
-        "op": "TensorArrayReadV3"
-      },
-      {
-        "input": [
-          "^Preprocessor/map/while/Identity"
-        ],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [
-                0
-              ],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": []
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "Preprocessor/map/while/ResizeImage/ExpandDims/dim",
-        "op": "Const"
-      },
-      {
-        "input": [
-          "^Preprocessor/map/while/Identity"
-        ],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "2"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "Preprocessor/map/while/ResizeImage/size",
-        "op": "Const"
-      },
-      {
-        "input": [
-          "^Preprocessor/map/while/Identity"
-        ],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [
-                1
-              ],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": []
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "Preprocessor/map/while/add/y",
-        "op": "Const"
-      },
-      {
-        "input": [
-          "Preprocessor/map/TensorArray_1",
-          "Preprocessor/map/while/Exit_1"
-        ],
-        "attr": {},
-        "name": "Preprocessor/map/TensorArrayStack/TensorArraySizeV3",
-        "op": "TensorArraySizeV3"
-      },
-      {
-        "input": [
-          "Preprocessor/map/while/TensorArrayReadV3",
-          "Preprocessor/map/while/ResizeImage/ExpandDims/dim"
-        ],
-        "attr": {
-          "Tdim": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Preprocessor/map/while/ResizeImage/ExpandDims",
-        "op": "ExpandDims"
-      },
-      {
-        "input": [
-          "Preprocessor/map/while/Identity",
-          "Preprocessor/map/while/add/y"
-        ],
-        "attr": {
-          "T": {
-            "type": 3
-          }
-        },
-        "name": "Preprocessor/map/while/add",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Concatenate/concat/axis",
-          "Preprocessor/map/TensorArrayStack/TensorArraySizeV3",
-          "MultipleGridAnchorGenerator/concat/axis"
-        ],
-        "attr": {
-          "Tidx": {
-            "type": 3
-          }
-        },
-        "name": "Preprocessor/map/TensorArrayStack/range",
-        "op": "Range"
-      },
-      {
-        "input": [
-          "Preprocessor/map/while/ResizeImage/ExpandDims",
-          "Preprocessor/map/while/ResizeImage/size"
-        ],
-        "attr": {
-          "align_corners": {
-            "b": false
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Preprocessor/map/while/ResizeImage/ResizeBilinear",
-        "op": "ResizeBilinear"
-      },
-      {
-        "input": [
-          "Preprocessor/map/while/add"
-        ],
-        "attr": {
-          "T": {
-            "type": 3
-          }
-        },
-        "name": "Preprocessor/map/while/NextIteration",
-        "op": "NextIteration"
-      },
-      {
-        "input": [
-          "Preprocessor/map/TensorArray_1",
-          "Preprocessor/map/TensorArrayStack/range",
-          "Preprocessor/map/while/Exit_1"
-        ],
-        "attr": {
-          "dtype": {
-            "type": 1
-          },
-          "element_shape": {
-            "shape": {
-              "dim": [
-                {
-                  "size": "300"
-                },
-                {
-                  "size": "300"
-                },
-                {
-                  "size": "3"
-                }
-              ]
-            }
-          }
-        },
-        "name": "Preprocessor/map/TensorArrayStack/TensorArrayGatherV3",
-        "op": "TensorArrayGatherV3"
-      },
-      {
-        "input": [
-          "Preprocessor/map/while/ResizeImage/ResizeBilinear"
-        ],
-        "attr": {
-          "squeeze_dims": {
-            "list": {
-              "s": [],
-              "i": [
-                "0"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Preprocessor/map/while/ResizeImage/Squeeze",
-        "op": "Squeeze"
-      },
-      {
-        "input": [
-          "Preprocessor/mul/x",
-          "Preprocessor/map/TensorArrayStack/TensorArrayGatherV3"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Preprocessor/mul",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "Preprocessor/map/while/TensorArrayWrite/TensorArrayWriteV3/Enter",
-          "Preprocessor/map/while/Identity",
-          "Preprocessor/map/while/ResizeImage/Squeeze",
-          "Preprocessor/map/while/Switch_1:1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Preprocessor/map/while/TensorArrayWrite/TensorArrayWriteV3",
-        "op": "TensorArrayWriteV3"
-      },
-      {
-        "input": [
-          "Preprocessor/mul",
-          "MultipleGridAnchorGenerator/strided_slice"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Preprocessor/sub",
-        "op": "Sub"
-      },
-      {
-        "input": [
-          "Preprocessor/map/while/TensorArrayWrite/TensorArrayWriteV3"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Preprocessor/map/while/NextIteration_1",
-        "op": "NextIteration"
-      },
-      {
-        "input": [
-          "Preprocessor/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "out_type": {
-            "type": 3
-          }
-        },
-        "name": "Shape_6",
-        "op": "Shape"
-      },
-      {
-        "input": [
-          "Preprocessor/sub",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/Conv2D/merged_input"
-        ],
-        "attr": {
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "2",
-                "2",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/BatchNorm/batchnorm/mul_1",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "Shape_6",
-          "strided_slice_6/stack",
-          "strided_slice_6/stack_1",
-          "strided_slice_6/stack"
-        ],
-        "attr": {
-          "begin_mask": {
-            "i": "0"
-          },
-          "ellipsis_mask": {
-            "i": "0"
-          },
-          "new_axis_mask": {
-            "i": "0"
-          },
-          "end_mask": {
-            "i": "0"
-          },
-          "T": {
-            "type": 3
-          },
-          "Index": {
-            "type": 3
-          },
-          "shrink_axis_mask": {
-            "i": "1"
-          }
-        },
-        "name": "strided_slice_6",
-        "op": "StridedSlice"
-      },
-      {
-        "input": [
-          "Shape_6",
-          "strided_slice_6/stack_1",
-          "strided_slice_7/stack_1",
-          "strided_slice_6/stack"
-        ],
-        "attr": {
-          "shrink_axis_mask": {
-            "i": "1"
-          },
-          "begin_mask": {
-            "i": "0"
-          },
-          "ellipsis_mask": {
-            "i": "0"
-          },
-          "new_axis_mask": {
-            "i": "0"
-          },
-          "end_mask": {
-            "i": "0"
-          },
-          "Index": {
-            "type": 3
-          },
-          "T": {
-            "type": 3
-          }
-        },
-        "name": "strided_slice_7",
-        "op": "StridedSlice"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "strided_slice_6"
-        ],
-        "attr": {
-          "DstT": {
-            "type": 1
-          },
-          "SrcT": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/ToFloat",
-        "op": "Cast"
-      },
-      {
-        "input": [
-          "strided_slice_7"
-        ],
-        "attr": {
-          "DstT": {
-            "type": 1
-          },
-          "SrcT": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/ToFloat_1",
-        "op": "Cast"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/ToFloat",
-          "MultipleGridAnchorGenerator/ToFloat_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Minimum",
-        "op": "Minimum"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/Relu6",
-          "FeatureExtractor/MobilenetV1/Conv2d_1_depthwise/depthwise_weights"
-        ],
-        "attr": {
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/depthwise",
-        "op": "DepthwiseConv2dNative"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Minimum",
-          "MultipleGridAnchorGenerator/ToFloat"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/div_12",
-        "op": "RealDiv"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Minimum",
-          "MultipleGridAnchorGenerator/ToFloat_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/div_13",
-        "op": "RealDiv"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/depthwise",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/BatchNorm/batchnorm/mul"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/BatchNorm/batchnorm/mul_1",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/div_14",
-          "MultipleGridAnchorGenerator/div_12"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_14",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/div_15",
-          "MultipleGridAnchorGenerator/div_12"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_22",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/div_16",
-          "MultipleGridAnchorGenerator/div_12"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_30",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/div_17",
-          "MultipleGridAnchorGenerator/div_12"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_38",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/div_18",
-          "MultipleGridAnchorGenerator/div_12"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_46",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/div_19",
-          "MultipleGridAnchorGenerator/div_12"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_54",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/mul_15",
-          "MultipleGridAnchorGenerator/div_13"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_16",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/mul_23",
-          "MultipleGridAnchorGenerator/div_13"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_24",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/mul_31",
-          "MultipleGridAnchorGenerator/div_13"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_32",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/mul_39",
-          "MultipleGridAnchorGenerator/div_13"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_40",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/mul_47",
-          "MultipleGridAnchorGenerator/div_13"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_48",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/mul_55",
-          "MultipleGridAnchorGenerator/div_13"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_56",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/mul_14",
-          "MultipleGridAnchorGenerator/Meshgrid_2/ExpandedShape/concat"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_2/Reshape",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/mul_22",
-          "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_5/Reshape",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/mul_30",
-          "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat"
-        ],
-        "attr": {
-          "Tshape": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_8/Reshape",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/mul_38",
-          "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_11/Reshape",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/mul_46",
-          "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_14/Reshape",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/mul_54",
-          "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_17/Reshape",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/mul_16",
-          "MultipleGridAnchorGenerator/Meshgrid_2/ExpandedShape/concat"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_1/Reshape",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/mul_24",
-          "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_4/Reshape",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/mul_32",
-          "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_7/Reshape",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/mul_40",
-          "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_10/Reshape",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/mul_48",
-          "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_13/Reshape",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/mul_56",
-          "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_16/Reshape",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Meshgrid_2/Reshape",
-          "MultipleGridAnchorGenerator/Meshgrid_2/ExpandedShape_1/concat"
-        ],
-        "attr": {
-          "Tmultiples": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_2/Tile",
-        "op": "Tile"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Meshgrid_5/Reshape",
-          "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape_1/concat"
-        ],
-        "attr": {
-          "Tmultiples": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_5/Tile",
-        "op": "Tile"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Meshgrid_8/Reshape",
-          "MultipleGridAnchorGenerator/Meshgrid_8/ExpandedShape_1/concat"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tmultiples": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_8/Tile",
-        "op": "Tile"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Meshgrid_11/Reshape",
-          "MultipleGridAnchorGenerator/Meshgrid_11/ExpandedShape_1/concat"
-        ],
-        "attr": {
-          "Tmultiples": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_11/Tile",
-        "op": "Tile"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Meshgrid_14/Reshape",
-          "MultipleGridAnchorGenerator/Meshgrid_14/ExpandedShape_1/concat"
-        ],
-        "attr": {
-          "Tmultiples": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_14/Tile",
-        "op": "Tile"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Meshgrid_1/Reshape",
-          "MultipleGridAnchorGenerator/Meshgrid_2/ExpandedShape_1/concat"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tmultiples": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_1/Tile",
-        "op": "Tile"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Meshgrid_4/Reshape",
-          "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape_1/concat"
-        ],
-        "attr": {
-          "Tmultiples": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_4/Tile",
-        "op": "Tile"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Meshgrid_7/Reshape",
-          "MultipleGridAnchorGenerator/Meshgrid_8/ExpandedShape_1/concat"
-        ],
-        "attr": {
-          "Tmultiples": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_7/Tile",
-        "op": "Tile"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Meshgrid_10/Reshape",
-          "MultipleGridAnchorGenerator/Meshgrid_11/ExpandedShape_1/concat"
-        ],
-        "attr": {
-          "Tmultiples": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_10/Tile",
-        "op": "Tile"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Meshgrid_13/Reshape",
-          "MultipleGridAnchorGenerator/Meshgrid_14/ExpandedShape_1/concat"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tmultiples": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Meshgrid_13/Tile",
-        "op": "Tile"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Meshgrid_17/Reshape",
-          "MultipleGridAnchorGenerator/Meshgrid_16/Reshape"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "axis": {
-            "i": "3"
-          },
-          "N": {
-            "i": "2"
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/stack_11",
-        "op": "Pack"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/Relu6",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/Conv2D/merged_input"
-        ],
-        "attr": {
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/BatchNorm/batchnorm/mul_1",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Meshgrid_2/Tile",
-          "MultipleGridAnchorGenerator/Meshgrid_1/Tile"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "axis": {
-            "i": "3"
-          },
-          "N": {
-            "i": "2"
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/stack_1",
-        "op": "Pack"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Meshgrid_5/Tile",
-          "MultipleGridAnchorGenerator/Meshgrid_4/Tile"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "axis": {
-            "i": "3"
-          },
-          "N": {
-            "i": "2"
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/stack_3",
-        "op": "Pack"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Meshgrid_8/Tile",
-          "MultipleGridAnchorGenerator/Meshgrid_7/Tile"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "axis": {
-            "i": "3"
-          },
-          "N": {
-            "i": "2"
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/stack_5",
-        "op": "Pack"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Meshgrid_11/Tile",
-          "MultipleGridAnchorGenerator/Meshgrid_10/Tile"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "axis": {
-            "i": "3"
-          },
-          "N": {
-            "i": "2"
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/stack_7",
-        "op": "Pack"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Meshgrid_14/Tile",
-          "MultipleGridAnchorGenerator/Meshgrid_13/Tile"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "axis": {
-            "i": "3"
-          },
-          "N": {
-            "i": "2"
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/stack_9",
-        "op": "Pack"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/stack_11",
-          "MultipleGridAnchorGenerator/Reshape_1/shape"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Reshape_11",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/stack_1",
-          "MultipleGridAnchorGenerator/Reshape_1/shape"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Reshape_1",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/stack_3",
-          "MultipleGridAnchorGenerator/Reshape_1/shape"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Reshape_3",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/stack_5",
-          "MultipleGridAnchorGenerator/Reshape_1/shape"
-        ],
-        "attr": {
-          "Tshape": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Reshape_5",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/stack_7",
-          "MultipleGridAnchorGenerator/Reshape_1/shape"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Reshape_7",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/stack_9",
-          "MultipleGridAnchorGenerator/Reshape_1/shape"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Reshape_9",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/mul_19/x",
-          "MultipleGridAnchorGenerator/Reshape_11"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_59",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/mul_19/x",
-          "MultipleGridAnchorGenerator/Reshape_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_19",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/mul_19/x",
-          "MultipleGridAnchorGenerator/Reshape_3"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_27",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/mul_19/x",
-          "MultipleGridAnchorGenerator/Reshape_5"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_35",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/mul_19/x",
-          "MultipleGridAnchorGenerator/Reshape_7"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_43",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/mul_19/x",
-          "MultipleGridAnchorGenerator/Reshape_9"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/mul_51",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Reshape_10",
-          "MultipleGridAnchorGenerator/mul_59"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/sub_5",
-        "op": "Sub"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Reshape_10",
-          "MultipleGridAnchorGenerator/mul_59"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/add_17",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/Relu6",
-          "FeatureExtractor/MobilenetV1/Conv2d_2_depthwise/depthwise_weights"
-        ],
-        "attr": {
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "T": {
-            "type": 1
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "2",
-                "2",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/depthwise",
-        "op": "DepthwiseConv2dNative"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Reshape",
-          "MultipleGridAnchorGenerator/mul_19"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/sub",
-        "op": "Sub"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Reshape",
-          "MultipleGridAnchorGenerator/mul_19"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/add_2",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Reshape_2",
-          "MultipleGridAnchorGenerator/mul_27"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/sub_1",
-        "op": "Sub"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Reshape_2",
-          "MultipleGridAnchorGenerator/mul_27"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/add_5",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Reshape_4",
-          "MultipleGridAnchorGenerator/mul_35"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/sub_2",
-        "op": "Sub"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Reshape_4",
-          "MultipleGridAnchorGenerator/mul_35"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/add_8",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Reshape_6",
-          "MultipleGridAnchorGenerator/mul_43"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/sub_3",
-        "op": "Sub"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Reshape_6",
-          "MultipleGridAnchorGenerator/mul_43"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/add_11",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Reshape_8",
-          "MultipleGridAnchorGenerator/mul_51"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/sub_4",
-        "op": "Sub"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Reshape_8",
-          "MultipleGridAnchorGenerator/mul_51"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/add_14",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/sub_5",
-          "MultipleGridAnchorGenerator/add_17",
-          "MultipleGridAnchorGenerator/concat/axis"
-        ],
-        "attr": {
-          "N": {
-            "i": "2"
-          },
-          "Tidx": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/concat_5",
-        "op": "ConcatV2"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/depthwise",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/BatchNorm/batchnorm/mul"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/BatchNorm/batchnorm/mul_1",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/sub",
-          "MultipleGridAnchorGenerator/add_2",
-          "MultipleGridAnchorGenerator/concat/axis"
-        ],
-        "attr": {
-          "N": {
-            "i": "2"
-          },
-          "Tidx": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/concat",
-        "op": "ConcatV2"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/sub_1",
-          "MultipleGridAnchorGenerator/add_5",
-          "MultipleGridAnchorGenerator/concat/axis"
-        ],
-        "attr": {
-          "Tidx": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          },
-          "N": {
-            "i": "2"
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/concat_1",
-        "op": "ConcatV2"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/sub_2",
-          "MultipleGridAnchorGenerator/add_8",
-          "MultipleGridAnchorGenerator/concat/axis"
-        ],
-        "attr": {
-          "N": {
-            "i": "2"
-          },
-          "Tidx": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/concat_2",
-        "op": "ConcatV2"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/sub_3",
-          "MultipleGridAnchorGenerator/add_11",
-          "MultipleGridAnchorGenerator/concat/axis"
-        ],
-        "attr": {
-          "N": {
-            "i": "2"
-          },
-          "Tidx": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/concat_3",
-        "op": "ConcatV2"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/sub_4",
-          "MultipleGridAnchorGenerator/add_14",
-          "MultipleGridAnchorGenerator/concat/axis"
-        ],
-        "attr": {
-          "Tidx": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          },
-          "N": {
-            "i": "2"
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/concat_4",
-        "op": "ConcatV2"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/concat",
-          "MultipleGridAnchorGenerator/concat_1",
-          "MultipleGridAnchorGenerator/concat_2",
-          "MultipleGridAnchorGenerator/concat_3",
-          "MultipleGridAnchorGenerator/concat_4",
-          "MultipleGridAnchorGenerator/concat_5",
-          "MultipleGridAnchorGenerator/Concatenate/concat/axis"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "N": {
-            "i": "6"
-          },
-          "Tidx": {
-            "type": 3
-          }
-        },
-        "name": "MultipleGridAnchorGenerator/Concatenate/concat",
-        "op": "ConcatV2"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "MultipleGridAnchorGenerator/Concatenate/concat",
-          "MultipleGridAnchorGenerator/Concatenate/concat/axis"
-        ],
-        "attr": {
-          "Tdim": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/ExpandDims",
-        "op": "ExpandDims"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/Relu6",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/Conv2D/merged_input"
-        ],
-        "attr": {
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/BatchNorm/batchnorm/mul_1",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/Relu6",
-          "FeatureExtractor/MobilenetV1/Conv2d_3_depthwise/depthwise_weights"
-        ],
-        "attr": {
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/depthwise",
-        "op": "DepthwiseConv2dNative"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/depthwise",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/BatchNorm/batchnorm/mul"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/BatchNorm/batchnorm/mul_1",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/Relu6",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/Conv2D/merged_input"
-        ],
-        "attr": {
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/BatchNorm/batchnorm/mul_1",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/Relu6",
-          "FeatureExtractor/MobilenetV1/Conv2d_4_depthwise/depthwise_weights"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "2",
-                "2",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/depthwise",
-        "op": "DepthwiseConv2dNative"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/depthwise",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/BatchNorm/batchnorm/mul"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/BatchNorm/batchnorm/mul_1",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/Relu6",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/Conv2D/merged_input"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/BatchNorm/batchnorm/mul_1",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/Relu6",
-          "FeatureExtractor/MobilenetV1/Conv2d_5_depthwise/depthwise_weights"
-        ],
-        "attr": {
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/depthwise",
-        "op": "DepthwiseConv2dNative"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/depthwise",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/BatchNorm/batchnorm/mul"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/BatchNorm/batchnorm/mul_1",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/Relu6",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/Conv2D/merged_input"
-        ],
-        "attr": {
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/BatchNorm/batchnorm/mul_1",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/Relu6",
-          "FeatureExtractor/MobilenetV1/Conv2d_6_depthwise/depthwise_weights"
-        ],
-        "attr": {
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "2",
-                "2",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/depthwise",
-        "op": "DepthwiseConv2dNative"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/depthwise",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/BatchNorm/batchnorm/mul"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/BatchNorm/batchnorm/mul_1",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/Relu6",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/Conv2D/merged_input"
-        ],
-        "attr": {
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/BatchNorm/batchnorm/mul_1",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/Relu6",
-          "FeatureExtractor/MobilenetV1/Conv2d_7_depthwise/depthwise_weights"
-        ],
-        "attr": {
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/depthwise",
-        "op": "DepthwiseConv2dNative"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/depthwise",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/BatchNorm/batchnorm/mul"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/BatchNorm/batchnorm/mul_1",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/Relu6",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/Conv2D/merged_input"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/BatchNorm/batchnorm/mul_1",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/Relu6",
-          "FeatureExtractor/MobilenetV1/Conv2d_8_depthwise/depthwise_weights"
-        ],
-        "attr": {
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/depthwise",
-        "op": "DepthwiseConv2dNative"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/depthwise",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/BatchNorm/batchnorm/mul"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/BatchNorm/batchnorm/mul_1",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/Relu6",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/Conv2D/merged_input"
-        ],
-        "attr": {
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/BatchNorm/batchnorm/mul_1",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/Relu6",
-          "FeatureExtractor/MobilenetV1/Conv2d_9_depthwise/depthwise_weights"
-        ],
-        "attr": {
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/depthwise",
-        "op": "DepthwiseConv2dNative"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/depthwise",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/BatchNorm/batchnorm/mul"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/BatchNorm/batchnorm/mul_1",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/Relu6",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/Conv2D/merged_input"
-        ],
-        "attr": {
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/BatchNorm/batchnorm/mul_1",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/Relu6",
-          "FeatureExtractor/MobilenetV1/Conv2d_10_depthwise/depthwise_weights"
-        ],
-        "attr": {
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/depthwise",
-        "op": "DepthwiseConv2dNative"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/depthwise",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/BatchNorm/batchnorm/mul"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/BatchNorm/batchnorm/mul_1",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/Relu6",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/Conv2D/merged_input"
-        ],
-        "attr": {
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/BatchNorm/batchnorm/mul_1",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/Relu6",
-          "FeatureExtractor/MobilenetV1/Conv2d_11_depthwise/depthwise_weights"
-        ],
-        "attr": {
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "T": {
-            "type": 1
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/depthwise",
-        "op": "DepthwiseConv2dNative"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/depthwise",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/BatchNorm/batchnorm/mul"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/BatchNorm/batchnorm/mul_1",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/Relu6",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Conv2D/merged_input"
-        ],
-        "attr": {
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/BatchNorm/batchnorm/mul_1",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Relu6",
-          "BoxPredictor_0/BoxEncodingPredictor/weights"
-        ],
-        "attr": {
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_0/BoxEncodingPredictor/Conv2D",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Relu6",
-          "BoxPredictor_0/ClassPredictor/weights"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          }
-        },
-        "name": "BoxPredictor_0/ClassPredictor/Conv2D",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Relu6"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "out_type": {
-            "type": 3
-          }
-        },
-        "name": "BoxPredictor_0/Shape",
-        "op": "Shape"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Relu6",
-          "FeatureExtractor/MobilenetV1/Conv2d_12_depthwise/depthwise_weights"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "2",
-                "2",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/depthwise",
-        "op": "DepthwiseConv2dNative"
-      },
-      {
-        "input": [
-          "BoxPredictor_0/BoxEncodingPredictor/Conv2D",
-          "BoxPredictor_0/BoxEncodingPredictor/biases"
-        ],
-        "attr": {
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_0/BoxEncodingPredictor/BiasAdd",
-        "op": "BiasAdd"
-      },
-      {
-        "input": [
-          "BoxPredictor_0/ClassPredictor/Conv2D",
-          "BoxPredictor_0/ClassPredictor/biases"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          }
-        },
-        "name": "BoxPredictor_0/ClassPredictor/BiasAdd",
-        "op": "BiasAdd"
-      },
-      {
-        "input": [
-          "BoxPredictor_0/Shape",
-          "Postprocessor/strided_slice/stack",
-          "strided_slice_6/stack",
-          "strided_slice_6/stack"
-        ],
-        "attr": {
-          "shrink_axis_mask": {
-            "i": "1"
-          },
-          "begin_mask": {
-            "i": "0"
-          },
-          "ellipsis_mask": {
-            "i": "0"
-          },
-          "new_axis_mask": {
-            "i": "0"
-          },
-          "end_mask": {
-            "i": "0"
-          },
-          "T": {
-            "type": 3
-          },
-          "Index": {
-            "type": 3
-          }
-        },
-        "name": "BoxPredictor_0/strided_slice",
-        "op": "StridedSlice"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/depthwise",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/BatchNorm/batchnorm/mul"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/BatchNorm/batchnorm/mul_1",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "BoxPredictor_0/strided_slice",
-          "BoxPredictor_0/stack/1",
-          "MultipleGridAnchorGenerator/concat/axis",
-          "BoxPredictor_0/stack/3"
-        ],
-        "attr": {
-          "N": {
-            "i": "4"
-          },
-          "T": {
-            "type": 3
-          },
-          "axis": {
-            "i": "0"
-          }
-        },
-        "name": "BoxPredictor_0/stack",
-        "op": "Pack"
-      },
-      {
-        "input": [
-          "BoxPredictor_0/strided_slice",
-          "BoxPredictor_0/stack/1",
-          "BoxPredictor_0/stack_1/2"
-        ],
-        "attr": {
-          "T": {
-            "type": 3
-          },
-          "axis": {
-            "i": "0"
-          },
-          "N": {
-            "i": "3"
-          }
-        },
-        "name": "BoxPredictor_0/stack_1",
-        "op": "Pack"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "BoxPredictor_0/BoxEncodingPredictor/BiasAdd",
-          "BoxPredictor_0/stack"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "BoxPredictor_0/Reshape",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "BoxPredictor_0/ClassPredictor/BiasAdd",
-          "BoxPredictor_0/stack_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "BoxPredictor_0/Reshape_1",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/Relu6",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/Conv2D/merged_input"
-        ],
-        "attr": {
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/BatchNorm/batchnorm/mul_1",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/Relu6",
-          "FeatureExtractor/MobilenetV1/Conv2d_13_depthwise/depthwise_weights"
-        ],
-        "attr": {
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "T": {
-            "type": 1
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/depthwise",
-        "op": "DepthwiseConv2dNative"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/depthwise",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/BatchNorm/batchnorm/mul"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/BatchNorm/batchnorm/mul_1",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/Relu6",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Conv2D/merged_input"
-        ],
-        "attr": {
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/BatchNorm/batchnorm/mul_1",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Relu6",
-          "BoxPredictor_1/BoxEncodingPredictor/weights"
-        ],
-        "attr": {
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          }
-        },
-        "name": "BoxPredictor_1/BoxEncodingPredictor/Conv2D",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Relu6",
-          "BoxPredictor_1/ClassPredictor/weights"
-        ],
-        "attr": {
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          }
-        },
-        "name": "BoxPredictor_1/ClassPredictor/Conv2D",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Relu6"
-        ],
-        "attr": {
-          "out_type": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_1/Shape",
-        "op": "Shape"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Relu6",
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/Conv2D/merged_input"
-        ],
-        "attr": {
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/BatchNorm/batchnorm/mul_1",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "BoxPredictor_1/BoxEncodingPredictor/Conv2D",
-          "BoxPredictor_1/BoxEncodingPredictor/biases"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          }
-        },
-        "name": "BoxPredictor_1/BoxEncodingPredictor/BiasAdd",
-        "op": "BiasAdd"
-      },
-      {
-        "input": [
-          "BoxPredictor_1/ClassPredictor/Conv2D",
-          "BoxPredictor_1/ClassPredictor/biases"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          }
-        },
-        "name": "BoxPredictor_1/ClassPredictor/BiasAdd",
-        "op": "BiasAdd"
-      },
-      {
-        "input": [
-          "BoxPredictor_1/Shape",
-          "Postprocessor/strided_slice/stack",
-          "strided_slice_6/stack",
-          "strided_slice_6/stack"
-        ],
-        "attr": {
-          "Index": {
-            "type": 3
-          },
-          "T": {
-            "type": 3
-          },
-          "shrink_axis_mask": {
-            "i": "1"
-          },
-          "begin_mask": {
-            "i": "0"
-          },
-          "ellipsis_mask": {
-            "i": "0"
-          },
-          "new_axis_mask": {
-            "i": "0"
-          },
-          "end_mask": {
-            "i": "0"
-          }
-        },
-        "name": "BoxPredictor_1/strided_slice",
-        "op": "StridedSlice"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "BoxPredictor_1/strided_slice",
-          "BoxPredictor_1/stack/1",
-          "MultipleGridAnchorGenerator/concat/axis",
-          "BoxPredictor_0/stack/3"
-        ],
-        "attr": {
-          "N": {
-            "i": "4"
-          },
-          "T": {
-            "type": 3
-          },
-          "axis": {
-            "i": "0"
-          }
-        },
-        "name": "BoxPredictor_1/stack",
-        "op": "Pack"
-      },
-      {
-        "input": [
-          "BoxPredictor_1/strided_slice",
-          "BoxPredictor_1/stack/1",
-          "BoxPredictor_0/stack_1/2"
-        ],
-        "attr": {
-          "T": {
-            "type": 3
-          },
-          "axis": {
-            "i": "0"
-          },
-          "N": {
-            "i": "3"
-          }
-        },
-        "name": "BoxPredictor_1/stack_1",
-        "op": "Pack"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "BoxPredictor_1/BoxEncodingPredictor/BiasAdd",
-          "BoxPredictor_1/stack"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "BoxPredictor_1/Reshape",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "BoxPredictor_1/ClassPredictor/BiasAdd",
-          "BoxPredictor_1/stack_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "BoxPredictor_1/Reshape_1",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/Relu6",
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/Conv2D/merged_input"
-        ],
-        "attr": {
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "2",
-                "2",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/BatchNorm/batchnorm/mul_1",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/Relu6",
-          "BoxPredictor_2/BoxEncodingPredictor/weights"
-        ],
-        "attr": {
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          }
-        },
-        "name": "BoxPredictor_2/BoxEncodingPredictor/Conv2D",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/Relu6",
-          "BoxPredictor_2/ClassPredictor/weights"
-        ],
-        "attr": {
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          }
-        },
-        "name": "BoxPredictor_2/ClassPredictor/Conv2D",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/Relu6"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "out_type": {
-            "type": 3
-          }
-        },
-        "name": "BoxPredictor_2/Shape",
-        "op": "Shape"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/Relu6",
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/Conv2D/merged_input"
-        ],
-        "attr": {
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/BatchNorm/batchnorm/mul_1",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "BoxPredictor_2/BoxEncodingPredictor/Conv2D",
-          "BoxPredictor_2/BoxEncodingPredictor/biases"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          }
-        },
-        "name": "BoxPredictor_2/BoxEncodingPredictor/BiasAdd",
-        "op": "BiasAdd"
-      },
-      {
-        "input": [
-          "BoxPredictor_2/ClassPredictor/Conv2D",
-          "BoxPredictor_2/ClassPredictor/biases"
-        ],
-        "attr": {
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_2/ClassPredictor/BiasAdd",
-        "op": "BiasAdd"
-      },
-      {
-        "input": [
-          "BoxPredictor_2/Shape",
-          "Postprocessor/strided_slice/stack",
-          "strided_slice_6/stack",
-          "strided_slice_6/stack"
-        ],
-        "attr": {
-          "T": {
-            "type": 3
-          },
-          "Index": {
-            "type": 3
-          },
-          "shrink_axis_mask": {
-            "i": "1"
-          },
-          "begin_mask": {
-            "i": "0"
-          },
-          "ellipsis_mask": {
-            "i": "0"
-          },
-          "new_axis_mask": {
-            "i": "0"
-          },
-          "end_mask": {
-            "i": "0"
-          }
-        },
-        "name": "BoxPredictor_2/strided_slice",
-        "op": "StridedSlice"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "BoxPredictor_2/strided_slice",
-          "BoxPredictor_2/stack/1",
-          "MultipleGridAnchorGenerator/concat/axis",
-          "BoxPredictor_0/stack/3"
-        ],
-        "attr": {
-          "T": {
-            "type": 3
-          },
-          "axis": {
-            "i": "0"
-          },
-          "N": {
-            "i": "4"
-          }
-        },
-        "name": "BoxPredictor_2/stack",
-        "op": "Pack"
-      },
-      {
-        "input": [
-          "BoxPredictor_2/strided_slice",
-          "BoxPredictor_2/stack/1",
-          "BoxPredictor_0/stack_1/2"
-        ],
-        "attr": {
-          "T": {
-            "type": 3
-          },
-          "axis": {
-            "i": "0"
-          },
-          "N": {
-            "i": "3"
-          }
-        },
-        "name": "BoxPredictor_2/stack_1",
-        "op": "Pack"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "BoxPredictor_2/BoxEncodingPredictor/BiasAdd",
-          "BoxPredictor_2/stack"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "BoxPredictor_2/Reshape",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "BoxPredictor_2/ClassPredictor/BiasAdd",
-          "BoxPredictor_2/stack_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "BoxPredictor_2/Reshape_1",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/Relu6",
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/Conv2D/merged_input"
-        ],
-        "attr": {
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "2",
-                "2",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/BatchNorm/batchnorm/mul_1",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/Relu6",
-          "BoxPredictor_3/BoxEncodingPredictor/weights"
-        ],
-        "attr": {
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          }
-        },
-        "name": "BoxPredictor_3/BoxEncodingPredictor/Conv2D",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/Relu6",
-          "BoxPredictor_3/ClassPredictor/weights"
-        ],
-        "attr": {
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          }
-        },
-        "name": "BoxPredictor_3/ClassPredictor/Conv2D",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/Relu6"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "out_type": {
-            "type": 3
-          }
-        },
-        "name": "BoxPredictor_3/Shape",
-        "op": "Shape"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/Relu6",
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/Conv2D/merged_input"
-        ],
-        "attr": {
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/BatchNorm/batchnorm/mul_1",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "BoxPredictor_3/BoxEncodingPredictor/Conv2D",
-          "BoxPredictor_3/BoxEncodingPredictor/biases"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          }
-        },
-        "name": "BoxPredictor_3/BoxEncodingPredictor/BiasAdd",
-        "op": "BiasAdd"
-      },
-      {
-        "input": [
-          "BoxPredictor_3/ClassPredictor/Conv2D",
-          "BoxPredictor_3/ClassPredictor/biases"
-        ],
-        "attr": {
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_3/ClassPredictor/BiasAdd",
-        "op": "BiasAdd"
-      },
-      {
-        "input": [
-          "BoxPredictor_3/Shape",
-          "Postprocessor/strided_slice/stack",
-          "strided_slice_6/stack",
-          "strided_slice_6/stack"
-        ],
-        "attr": {
-          "ellipsis_mask": {
-            "i": "0"
-          },
-          "begin_mask": {
-            "i": "0"
-          },
-          "new_axis_mask": {
-            "i": "0"
-          },
-          "end_mask": {
-            "i": "0"
-          },
-          "T": {
-            "type": 3
-          },
-          "Index": {
-            "type": 3
-          },
-          "shrink_axis_mask": {
-            "i": "1"
-          }
-        },
-        "name": "BoxPredictor_3/strided_slice",
-        "op": "StridedSlice"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "BoxPredictor_3/strided_slice",
-          "BoxPredictor_3/stack/1",
-          "MultipleGridAnchorGenerator/concat/axis",
-          "BoxPredictor_0/stack/3"
-        ],
-        "attr": {
-          "axis": {
-            "i": "0"
-          },
-          "N": {
-            "i": "4"
-          },
-          "T": {
-            "type": 3
-          }
-        },
-        "name": "BoxPredictor_3/stack",
-        "op": "Pack"
-      },
-      {
-        "input": [
-          "BoxPredictor_3/strided_slice",
-          "BoxPredictor_3/stack/1",
-          "BoxPredictor_0/stack_1/2"
-        ],
-        "attr": {
-          "T": {
-            "type": 3
-          },
-          "axis": {
-            "i": "0"
-          },
-          "N": {
-            "i": "3"
-          }
-        },
-        "name": "BoxPredictor_3/stack_1",
-        "op": "Pack"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "BoxPredictor_3/BoxEncodingPredictor/BiasAdd",
-          "BoxPredictor_3/stack"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "BoxPredictor_3/Reshape",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "BoxPredictor_3/ClassPredictor/BiasAdd",
-          "BoxPredictor_3/stack_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "BoxPredictor_3/Reshape_1",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/Relu6",
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/Conv2D/merged_input"
-        ],
-        "attr": {
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "2",
-                "2",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/BatchNorm/batchnorm/mul_1",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/Relu6",
-          "BoxPredictor_4/BoxEncodingPredictor/weights"
-        ],
-        "attr": {
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          }
-        },
-        "name": "BoxPredictor_4/BoxEncodingPredictor/Conv2D",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/Relu6",
-          "BoxPredictor_4/ClassPredictor/weights"
-        ],
-        "attr": {
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_4/ClassPredictor/Conv2D",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/Relu6"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "out_type": {
-            "type": 3
-          }
-        },
-        "name": "BoxPredictor_4/Shape",
-        "op": "Shape"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/Relu6",
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/Conv2D/merged_input"
-        ],
-        "attr": {
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/BatchNorm/batchnorm/mul_1",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "BoxPredictor_4/BoxEncodingPredictor/Conv2D",
-          "BoxPredictor_4/BoxEncodingPredictor/biases"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          }
-        },
-        "name": "BoxPredictor_4/BoxEncodingPredictor/BiasAdd",
-        "op": "BiasAdd"
-      },
-      {
-        "input": [
-          "BoxPredictor_4/ClassPredictor/Conv2D",
-          "BoxPredictor_4/ClassPredictor/biases"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          }
-        },
-        "name": "BoxPredictor_4/ClassPredictor/BiasAdd",
-        "op": "BiasAdd"
-      },
-      {
-        "input": [
-          "BoxPredictor_4/Shape",
-          "Postprocessor/strided_slice/stack",
-          "strided_slice_6/stack",
-          "strided_slice_6/stack"
-        ],
-        "attr": {
-          "Index": {
-            "type": 3
-          },
-          "T": {
-            "type": 3
-          },
-          "shrink_axis_mask": {
-            "i": "1"
-          },
-          "ellipsis_mask": {
-            "i": "0"
-          },
-          "begin_mask": {
-            "i": "0"
-          },
-          "new_axis_mask": {
-            "i": "0"
-          },
-          "end_mask": {
-            "i": "0"
-          }
-        },
-        "name": "BoxPredictor_4/strided_slice",
-        "op": "StridedSlice"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "BoxPredictor_4/strided_slice",
-          "BoxPredictor_4/stack/1",
-          "MultipleGridAnchorGenerator/concat/axis",
-          "BoxPredictor_0/stack/3"
-        ],
-        "attr": {
-          "T": {
-            "type": 3
-          },
-          "axis": {
-            "i": "0"
-          },
-          "N": {
-            "i": "4"
-          }
-        },
-        "name": "BoxPredictor_4/stack",
-        "op": "Pack"
-      },
-      {
-        "input": [
-          "BoxPredictor_4/strided_slice",
-          "BoxPredictor_4/stack/1",
-          "BoxPredictor_0/stack_1/2"
-        ],
-        "attr": {
-          "T": {
-            "type": 3
-          },
-          "axis": {
-            "i": "0"
-          },
-          "N": {
-            "i": "3"
-          }
-        },
-        "name": "BoxPredictor_4/stack_1",
-        "op": "Pack"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "BoxPredictor_4/BoxEncodingPredictor/BiasAdd",
-          "BoxPredictor_4/stack"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "BoxPredictor_4/Reshape",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "BoxPredictor_4/ClassPredictor/BiasAdd",
-          "BoxPredictor_4/stack_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "BoxPredictor_4/Reshape_1",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/Relu6",
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/Conv2D/merged_input"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "2",
-                "2",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          },
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/BatchNorm/batchnorm/mul_1",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/BatchNorm/batchnorm/mul_1",
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/BatchNorm/batchnorm/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/BatchNorm/batchnorm/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/BatchNorm/batchnorm/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/Relu6",
-        "op": "Relu6"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/Relu6",
-          "BoxPredictor_5/BoxEncodingPredictor/weights"
-        ],
-        "attr": {
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          }
-        },
-        "name": "BoxPredictor_5/BoxEncodingPredictor/Conv2D",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/Relu6",
-          "BoxPredictor_5/ClassPredictor/weights"
-        ],
-        "attr": {
-          "dilations": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "strides": {
-            "list": {
-              "s": [],
-              "i": [
-                "1",
-                "1",
-                "1",
-                "1"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          },
-          "use_cudnn_on_gpu": {
-            "b": true
-          },
-          "padding": {
-            "s": [
-              83,
-              65,
-              77,
-              69
-            ]
-          }
-        },
-        "name": "BoxPredictor_5/ClassPredictor/Conv2D",
-        "op": "Conv2D"
-      },
-      {
-        "input": [
-          "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/Relu6"
-        ],
-        "attr": {
-          "out_type": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_5/Shape",
-        "op": "Shape"
-      },
-      {
-        "input": [
-          "BoxPredictor_5/BoxEncodingPredictor/Conv2D",
-          "BoxPredictor_5/BoxEncodingPredictor/biases"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          }
-        },
-        "name": "BoxPredictor_5/BoxEncodingPredictor/BiasAdd",
-        "op": "BiasAdd"
-      },
-      {
-        "input": [
-          "BoxPredictor_5/ClassPredictor/Conv2D",
-          "BoxPredictor_5/ClassPredictor/biases"
-        ],
-        "attr": {
-          "data_format": {
-            "s": [
-              78,
-              72,
-              87,
-              67
-            ]
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_5/ClassPredictor/BiasAdd",
-        "op": "BiasAdd"
-      },
-      {
-        "input": [
-          "BoxPredictor_5/Shape",
-          "Postprocessor/strided_slice/stack",
-          "strided_slice_6/stack",
-          "strided_slice_6/stack"
-        ],
-        "attr": {
-          "T": {
-            "type": 3
-          },
-          "Index": {
-            "type": 3
-          },
-          "shrink_axis_mask": {
-            "i": "1"
-          },
-          "ellipsis_mask": {
-            "i": "0"
-          },
-          "begin_mask": {
-            "i": "0"
-          },
-          "new_axis_mask": {
-            "i": "0"
-          },
-          "end_mask": {
-            "i": "0"
-          }
-        },
-        "name": "BoxPredictor_5/strided_slice",
-        "op": "StridedSlice"
-      },
-      {
-        "input": [
-          "BoxPredictor_5/strided_slice",
-          "BoxPredictor_5/stack/1",
-          "MultipleGridAnchorGenerator/concat/axis",
-          "BoxPredictor_0/stack/3"
-        ],
-        "attr": {
-          "T": {
-            "type": 3
-          },
-          "axis": {
-            "i": "0"
-          },
-          "N": {
-            "i": "4"
-          }
-        },
-        "name": "BoxPredictor_5/stack",
-        "op": "Pack"
-      },
-      {
-        "input": [
-          "BoxPredictor_5/strided_slice",
-          "BoxPredictor_5/stack/1",
-          "BoxPredictor_0/stack_1/2"
-        ],
-        "attr": {
-          "T": {
-            "type": 3
-          },
-          "axis": {
-            "i": "0"
-          },
-          "N": {
-            "i": "3"
-          }
-        },
-        "name": "BoxPredictor_5/stack_1",
-        "op": "Pack"
-      },
-      {
-        "input": [
-          "BoxPredictor_5/BoxEncodingPredictor/BiasAdd",
-          "BoxPredictor_5/stack"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "BoxPredictor_5/Reshape",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "BoxPredictor_5/ClassPredictor/BiasAdd",
-          "BoxPredictor_5/stack_1"
-        ],
-        "attr": {
-          "Tshape": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "BoxPredictor_5/Reshape_1",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "BoxPredictor_0/Reshape",
-          "BoxPredictor_1/Reshape",
-          "BoxPredictor_2/Reshape",
-          "BoxPredictor_3/Reshape",
-          "BoxPredictor_4/Reshape",
-          "BoxPredictor_5/Reshape",
-          "MultipleGridAnchorGenerator/concat/axis"
-        ],
-        "attr": {
-          "Tidx": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          },
-          "N": {
-            "i": "6"
-          }
-        },
-        "name": "concat",
-        "op": "ConcatV2"
-      },
-      {
-        "input": [
-          "BoxPredictor_0/Reshape_1",
-          "BoxPredictor_1/Reshape_1",
-          "BoxPredictor_2/Reshape_1",
-          "BoxPredictor_3/Reshape_1",
-          "BoxPredictor_4/Reshape_1",
-          "BoxPredictor_5/Reshape_1",
-          "MultipleGridAnchorGenerator/concat/axis"
-        ],
-        "attr": {
-          "N": {
-            "i": "6"
-          },
-          "Tidx": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "concat_1",
-        "op": "ConcatV2"
-      },
-      {
-        "input": [
-          "concat"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "squeeze_dims": {
-            "list": {
-              "s": [],
-              "i": [
-                "2"
-              ],
-              "f": [],
-              "b": [],
-              "type": [],
-              "shape": [],
-              "tensor": [],
-              "func": []
-            }
-          }
-        },
-        "name": "Squeeze",
-        "op": "Squeeze"
-      },
-      {
-        "input": [
-          "concat_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/convert_scores",
-        "op": "Sigmoid"
-      },
-      {
-        "input": [
-          "Squeeze",
-          "Postprocessor/Reshape_1/shape"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "Postprocessor/Reshape_1",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "Squeeze"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "out_type": {
-            "type": 3
-          }
-        },
-        "name": "Postprocessor/Shape",
-        "op": "Shape"
-      },
-      {
-        "input": [
-          "Postprocessor/convert_scores",
-          "Postprocessor/Slice/begin",
-          "Postprocessor/Slice/size"
-        ],
-        "attr": {
-          "Index": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/Slice",
-        "op": "Slice"
-      },
-      {
-        "input": [
-          "^Postprocessor/Reshape_1"
-        ],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "2"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "Postprocessor/Decode/transpose/sub_1",
-        "op": "Const"
-      },
-      {
-        "input": [
-          "Postprocessor/Shape",
-          "Postprocessor/strided_slice/stack",
-          "strided_slice_6/stack",
-          "strided_slice_6/stack"
-        ],
-        "attr": {
-          "T": {
-            "type": 3
-          },
-          "Index": {
-            "type": 3
-          },
-          "shrink_axis_mask": {
-            "i": "1"
-          },
-          "ellipsis_mask": {
-            "i": "0"
-          },
-          "begin_mask": {
-            "i": "0"
-          },
-          "new_axis_mask": {
-            "i": "0"
-          },
-          "end_mask": {
-            "i": "0"
-          }
-        },
-        "name": "Postprocessor/strided_slice",
-        "op": "StridedSlice"
-      },
-      {
-        "input": [
-          "Postprocessor/Reshape_1",
-          "Postprocessor/Decode/transpose/sub_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tperm": {
-            "type": 3
-          }
-        },
-        "name": "Postprocessor/Decode/transpose",
-        "op": "Transpose"
-      },
-      {
-        "input": [
-          "Postprocessor/strided_slice",
-          "MultipleGridAnchorGenerator/concat/axis",
-          "MultipleGridAnchorGenerator/concat/axis"
-        ],
-        "attr": {
-          "axis": {
-            "i": "0"
-          },
-          "N": {
-            "i": "3"
-          },
-          "T": {
-            "type": 3
-          }
-        },
-        "name": "Postprocessor/Tile/multiples",
-        "op": "Pack"
-      },
-      {
-        "input": [
-          "Postprocessor/strided_slice",
-          "MultipleGridAnchorGenerator/assert_equal/x",
-          "BoxPredictor_0/stack/3"
-        ],
-        "attr": {
-          "T": {
-            "type": 3
-          },
-          "axis": {
-            "i": "0"
-          },
-          "N": {
-            "i": "3"
-          }
-        },
-        "name": "Postprocessor/stack",
-        "op": "Pack"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/transpose"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "num": {
-            "i": "4"
-          },
-          "axis": {
-            "i": "0"
-          }
-        },
-        "name": "Postprocessor/Decode/unstack",
-        "op": "Unpack"
-      },
-      {
-        "input": [
-          "Postprocessor/ExpandDims",
-          "Postprocessor/Tile/multiples"
-        ],
-        "attr": {
-          "Tmultiples": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/Tile",
-        "op": "Tile"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/unstack",
-          "ConstantFolding/Postprocessor/Decode/div_recip"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/Decode/div",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/unstack:2",
-          "ConstantFolding/Postprocessor/Decode/div_2_recip"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/Decode/div_2",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/unstack:1",
-          "ConstantFolding/Postprocessor/Decode/div_recip"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/Decode/div_1",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/unstack:3",
-          "ConstantFolding/Postprocessor/Decode/div_2_recip"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/Decode/div_3",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "Postprocessor/Tile",
-          "Postprocessor/Reshape_1/shape"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "Postprocessor/Reshape",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/div_2"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/Decode/Exp_1",
-        "op": "Exp"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/div_3"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/Decode/Exp",
-        "op": "Exp"
-      },
-      {
-        "input": [
-          "^Postprocessor/Reshape"
-        ],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "2"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "Postprocessor/Decode/get_center_coordinates_and_sizes/transpose/sub_1",
-        "op": "Const"
-      },
-      {
-        "input": [
-          "Postprocessor/Reshape",
-          "Postprocessor/Decode/get_center_coordinates_and_sizes/transpose/sub_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tperm": {
-            "type": 3
-          }
-        },
-        "name": "Postprocessor/Decode/get_center_coordinates_and_sizes/transpose",
-        "op": "Transpose"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/get_center_coordinates_and_sizes/transpose"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "num": {
-            "i": "4"
-          },
-          "axis": {
-            "i": "0"
-          }
-        },
-        "name": "Postprocessor/Decode/get_center_coordinates_and_sizes/unstack",
-        "op": "Unpack"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/get_center_coordinates_and_sizes/unstack:2",
-          "Postprocessor/Decode/get_center_coordinates_and_sizes/unstack"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/Decode/get_center_coordinates_and_sizes/sub_1",
-        "op": "Sub"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/get_center_coordinates_and_sizes/unstack:3",
-          "Postprocessor/Decode/get_center_coordinates_and_sizes/unstack:1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/Decode/get_center_coordinates_and_sizes/sub",
-        "op": "Sub"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/div",
-          "Postprocessor/Decode/get_center_coordinates_and_sizes/sub_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/Decode/mul_2",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/get_center_coordinates_and_sizes/sub_1",
-          "MultipleGridAnchorGenerator/mul_19/x"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/Decode/get_center_coordinates_and_sizes/div",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/div_1",
-          "Postprocessor/Decode/get_center_coordinates_and_sizes/sub"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/Decode/mul_3",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/get_center_coordinates_and_sizes/sub",
-          "MultipleGridAnchorGenerator/mul_19/x"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/Decode/get_center_coordinates_and_sizes/div_1",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/get_center_coordinates_and_sizes/unstack",
-          "Postprocessor/Decode/get_center_coordinates_and_sizes/div"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/Decode/get_center_coordinates_and_sizes/add",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/get_center_coordinates_and_sizes/div",
-          "Postprocessor/Decode/Exp_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/Decode/div_4",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/get_center_coordinates_and_sizes/unstack:1",
-          "Postprocessor/Decode/get_center_coordinates_and_sizes/div_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/Decode/get_center_coordinates_and_sizes/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/get_center_coordinates_and_sizes/div_1",
-          "Postprocessor/Decode/Exp"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/Decode/div_5",
-        "op": "Mul"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/mul_2",
-          "Postprocessor/Decode/get_center_coordinates_and_sizes/add"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/Decode/add",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/mul_3",
-          "Postprocessor/Decode/get_center_coordinates_and_sizes/add_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/Decode/add_1",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/add",
-          "Postprocessor/Decode/div_4"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/Decode/sub",
-        "op": "Sub"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/add",
-          "Postprocessor/Decode/div_4"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/Decode/add_2",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/add_1",
-          "Postprocessor/Decode/div_5"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/Decode/sub_1",
-        "op": "Sub"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/add_1",
-          "Postprocessor/Decode/div_5"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/Decode/add_3",
-        "op": "Add"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/sub",
-          "Postprocessor/Decode/sub_1",
-          "Postprocessor/Decode/add_2",
-          "Postprocessor/Decode/add_3"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "axis": {
-            "i": "0"
-          },
-          "N": {
-            "i": "4"
-          }
-        },
-        "name": "Postprocessor/Decode/stack",
-        "op": "Pack"
-      },
-      {
-        "input": [
-          "^Postprocessor/Decode/stack"
-        ],
-        "attr": {
-          "value": {
-            "tensor": {
-              "floatVal": [],
-              "doubleVal": [],
-              "intVal": [],
-              "stringVal": [],
-              "scomplexVal": [],
-              "int64Val": [],
-              "boolVal": [],
-              "uint32Val": [],
-              "uint64Val": [],
-              "dtype": 3,
-              "tensorShape": {
-                "dim": [
-                  {
-                    "size": "2"
-                  }
-                ]
-              }
-            }
-          },
-          "dtype": {
-            "type": 3
-          }
-        },
-        "name": "Postprocessor/Decode/transpose_1/sub_1",
-        "op": "Const"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/stack",
-          "Postprocessor/Decode/transpose_1/sub_1"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tperm": {
-            "type": 3
-          }
-        },
-        "name": "Postprocessor/Decode/transpose_1",
-        "op": "Transpose"
-      },
-      {
-        "input": [
-          "Postprocessor/Decode/transpose_1",
-          "Postprocessor/stack"
-        ],
-        "attr": {
-          "T": {
-            "type": 1
-          },
-          "Tshape": {
-            "type": 3
-          }
-        },
-        "name": "Postprocessor/Reshape_2",
-        "op": "Reshape"
-      },
-      {
-        "input": [
-          "Postprocessor/Reshape_2",
-          "Postprocessor/ExpandDims_1/dim"
-        ],
-        "attr": {
-          "Tdim": {
-            "type": 3
-          },
-          "T": {
-            "type": 1
-          }
-        },
-        "name": "Postprocessor/ExpandDims_1",
-        "op": "ExpandDims"
-      }
-    ],
-    "library": {
-      "function": [],
-      "gradient": []
-    },
-    "versions": {
-      "badConsumers": []
-    }
-  },
-  "weightsManifest": [
-    {
-      "paths": [
-        "group1-shard1of7",
-        "group1-shard2of7",
-        "group1-shard3of7",
-        "group1-shard4of7",
-        "group1-shard5of7",
-        "group1-shard6of7",
-        "group1-shard7of7"
-      ],
-      "weights": [
-        {
-          "shape": [],
-          "dtype": "float32",
-          "name": "ConstantFolding/Postprocessor/Decode/div_recip"
-        },
-        {
-          "shape": [
-            1083,
-            2
-          ],
-          "dtype": "float32",
-          "name": "MultipleGridAnchorGenerator/Reshape"
-        },
-        {
-          "shape": [
-            3
-          ],
-          "dtype": "float32",
-          "name": "MultipleGridAnchorGenerator/div_14"
-        },
-        {
-          "shape": [
-            3
-          ],
-          "dtype": "float32",
-          "name": "MultipleGridAnchorGenerator/mul_15"
-        },
-        {
-          "shape": [
-            3
-          ],
-          "dtype": "int32",
-          "name": "MultipleGridAnchorGenerator/Meshgrid_2/ExpandedShape/concat"
-        },
-        {
-          "shape": [
-            3
-          ],
-          "dtype": "int32",
-          "name": "MultipleGridAnchorGenerator/Meshgrid_2/ExpandedShape_1/concat"
-        },
-        {
-          "shape": [
-            600,
-            2
-          ],
-          "dtype": "float32",
-          "name": "MultipleGridAnchorGenerator/Reshape_2"
-        },
-        {
-          "shape": [
-            6
-          ],
-          "dtype": "float32",
-          "name": "MultipleGridAnchorGenerator/div_15"
-        },
-        {
-          "shape": [
-            6
-          ],
-          "dtype": "float32",
-          "name": "MultipleGridAnchorGenerator/mul_23"
-        },
-        {
-          "shape": [
-            3
-          ],
-          "dtype": "int32",
-          "name": "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape_1/concat"
-        },
-        {
-          "shape": [
-            150,
-            2
-          ],
-          "dtype": "float32",
-          "name": "MultipleGridAnchorGenerator/Reshape_4"
-        },
-        {
-          "shape": [
-            6
-          ],
-          "dtype": "float32",
-          "name": "MultipleGridAnchorGenerator/div_16"
-        },
-        {
-          "shape": [
-            6
-          ],
-          "dtype": "float32",
-          "name": "MultipleGridAnchorGenerator/mul_31"
-        },
-        {
-          "shape": [
-            3
-          ],
-          "dtype": "int32",
-          "name": "MultipleGridAnchorGenerator/Meshgrid_8/ExpandedShape_1/concat"
-        },
-        {
-          "shape": [
-            54,
-            2
-          ],
-          "dtype": "float32",
-          "name": "MultipleGridAnchorGenerator/Reshape_6"
-        },
-        {
-          "shape": [
-            6
-          ],
-          "dtype": "float32",
-          "name": "MultipleGridAnchorGenerator/div_17"
-        },
-        {
-          "shape": [
-            6
-          ],
-          "dtype": "float32",
-          "name": "MultipleGridAnchorGenerator/mul_39"
-        },
-        {
-          "shape": [
-            3
-          ],
-          "dtype": "int32",
-          "name": "MultipleGridAnchorGenerator/Meshgrid_11/ExpandedShape_1/concat"
-        },
-        {
-          "shape": [
-            24,
-            2
-          ],
-          "dtype": "float32",
-          "name": "MultipleGridAnchorGenerator/Reshape_8"
-        },
-        {
-          "shape": [
-            6
-          ],
-          "dtype": "float32",
-          "name": "MultipleGridAnchorGenerator/div_18"
-        },
-        {
-          "shape": [
-            6
-          ],
-          "dtype": "float32",
-          "name": "MultipleGridAnchorGenerator/mul_47"
-        },
-        {
-          "shape": [
-            3
-          ],
-          "dtype": "int32",
-          "name": "MultipleGridAnchorGenerator/Meshgrid_14/ExpandedShape_1/concat"
-        },
-        {
-          "shape": [
-            6,
-            2
-          ],
-          "dtype": "float32",
-          "name": "MultipleGridAnchorGenerator/Reshape_10"
-        },
-        {
-          "shape": [
-            6
-          ],
-          "dtype": "float32",
-          "name": "MultipleGridAnchorGenerator/div_19"
-        },
-        {
-          "shape": [
-            6
-          ],
-          "dtype": "float32",
-          "name": "MultipleGridAnchorGenerator/mul_55"
-        },
-        {
-          "shape": [
-            1
-          ],
-          "dtype": "int32",
-          "name": "strided_slice_6/stack_1"
-        },
-        {
-          "shape": [
-            1
-          ],
-          "dtype": "int32",
-          "name": "strided_slice_7/stack_1"
-        },
-        {
-          "shape": [
-            3
-          ],
-          "dtype": "int32",
-          "name": "MultipleGridAnchorGenerator/Meshgrid_5/ExpandedShape/concat"
-        },
-        {
-          "shape": [
-            2
-          ],
-          "dtype": "int32",
-          "name": "MultipleGridAnchorGenerator/Reshape_1/shape"
-        },
-        {
-          "shape": [],
-          "dtype": "float32",
-          "name": "MultipleGridAnchorGenerator/mul_19/x"
-        },
-        {
-          "shape": [
-            2
-          ],
-          "dtype": "int32",
-          "name": "Postprocessor/Reshape_1/shape"
-        },
-        {
-          "shape": [],
-          "dtype": "float32",
-          "name": "ConstantFolding/Postprocessor/Decode/div_2_recip"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            512,
-            12
-          ],
-          "dtype": "float32",
-          "name": "BoxPredictor_0/BoxEncodingPredictor/weights"
-        },
-        {
-          "shape": [
-            12
-          ],
-          "dtype": "float32",
-          "name": "BoxPredictor_0/BoxEncodingPredictor/biases"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            1024,
-            24
-          ],
-          "dtype": "float32",
-          "name": "BoxPredictor_1/BoxEncodingPredictor/weights"
-        },
-        {
-          "shape": [
-            24
-          ],
-          "dtype": "float32",
-          "name": "BoxPredictor_1/BoxEncodingPredictor/biases"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            512,
-            24
-          ],
-          "dtype": "float32",
-          "name": "BoxPredictor_2/BoxEncodingPredictor/weights"
-        },
-        {
-          "shape": [
-            24
-          ],
-          "dtype": "float32",
-          "name": "BoxPredictor_2/BoxEncodingPredictor/biases"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            256,
-            24
-          ],
-          "dtype": "float32",
-          "name": "BoxPredictor_3/BoxEncodingPredictor/weights"
-        },
-        {
-          "shape": [
-            24
-          ],
-          "dtype": "float32",
-          "name": "BoxPredictor_3/BoxEncodingPredictor/biases"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            256,
-            24
-          ],
-          "dtype": "float32",
-          "name": "BoxPredictor_4/BoxEncodingPredictor/weights"
-        },
-        {
-          "shape": [
-            24
-          ],
-          "dtype": "float32",
-          "name": "BoxPredictor_4/BoxEncodingPredictor/biases"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            128,
-            24
-          ],
-          "dtype": "float32",
-          "name": "BoxPredictor_5/BoxEncodingPredictor/weights"
-        },
-        {
-          "shape": [
-            24
-          ],
-          "dtype": "float32",
-          "name": "BoxPredictor_5/BoxEncodingPredictor/biases"
-        },
-        {
-          "shape": [],
-          "dtype": "int32",
-          "name": "MultipleGridAnchorGenerator/assert_equal/x"
-        },
-        {
-          "shape": [],
-          "dtype": "int32",
-          "name": "BoxPredictor_0/stack/3"
-        },
-        {
-          "shape": [],
-          "dtype": "int32",
-          "name": "Postprocessor/ExpandDims_1/dim"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            512,
-            273
-          ],
-          "dtype": "float32",
-          "name": "BoxPredictor_0/ClassPredictor/weights"
-        },
-        {
-          "shape": [
-            273
-          ],
-          "dtype": "float32",
-          "name": "BoxPredictor_0/ClassPredictor/biases"
-        },
-        {
-          "shape": [],
-          "dtype": "int32",
-          "name": "BoxPredictor_0/stack/1"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            1024,
-            546
-          ],
-          "dtype": "float32",
-          "name": "BoxPredictor_1/ClassPredictor/weights"
-        },
-        {
-          "shape": [
-            546
-          ],
-          "dtype": "float32",
-          "name": "BoxPredictor_1/ClassPredictor/biases"
-        },
-        {
-          "shape": [],
-          "dtype": "int32",
-          "name": "BoxPredictor_1/stack/1"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            512,
-            546
-          ],
-          "dtype": "float32",
-          "name": "BoxPredictor_2/ClassPredictor/weights"
-        },
-        {
-          "shape": [
-            546
-          ],
-          "dtype": "float32",
-          "name": "BoxPredictor_2/ClassPredictor/biases"
-        },
-        {
-          "shape": [],
-          "dtype": "int32",
-          "name": "BoxPredictor_2/stack/1"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            256,
-            546
-          ],
-          "dtype": "float32",
-          "name": "BoxPredictor_3/ClassPredictor/weights"
-        },
-        {
-          "shape": [
-            546
-          ],
-          "dtype": "float32",
-          "name": "BoxPredictor_3/ClassPredictor/biases"
-        },
-        {
-          "shape": [],
-          "dtype": "int32",
-          "name": "BoxPredictor_3/stack/1"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            256,
-            546
-          ],
-          "dtype": "float32",
-          "name": "BoxPredictor_4/ClassPredictor/weights"
-        },
-        {
-          "shape": [
-            546
-          ],
-          "dtype": "float32",
-          "name": "BoxPredictor_4/ClassPredictor/biases"
-        },
-        {
-          "shape": [],
-          "dtype": "int32",
-          "name": "BoxPredictor_4/stack/1"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            128,
-            546
-          ],
-          "dtype": "float32",
-          "name": "BoxPredictor_5/ClassPredictor/weights"
-        },
-        {
-          "shape": [
-            546
-          ],
-          "dtype": "float32",
-          "name": "BoxPredictor_5/ClassPredictor/biases"
-        },
-        {
-          "shape": [],
-          "dtype": "float32",
-          "name": "Preprocessor/mul/x"
-        },
-        {
-          "shape": [],
-          "dtype": "int32",
-          "name": "MultipleGridAnchorGenerator/Concatenate/concat/axis"
-        },
-        {
-          "shape": [],
-          "dtype": "float32",
-          "name": "MultipleGridAnchorGenerator/strided_slice"
-        },
-        {
-          "shape": [
-            3,
-            3,
-            3,
-            32
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/Conv2D/merged_input"
-        },
-        {
-          "shape": [
-            32
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_0/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            3,
-            3,
-            32,
-            1
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_1_depthwise/depthwise_weights"
-        },
-        {
-          "shape": [
-            32
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/BatchNorm/batchnorm/mul"
-        },
-        {
-          "shape": [
-            32
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_depthwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            32,
-            64
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/Conv2D/merged_input"
-        },
-        {
-          "shape": [
-            64
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_1_pointwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            3,
-            3,
-            64,
-            1
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_2_depthwise/depthwise_weights"
-        },
-        {
-          "shape": [
-            64
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/BatchNorm/batchnorm/mul"
-        },
-        {
-          "shape": [
-            64
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_depthwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            64,
-            128
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/Conv2D/merged_input"
-        },
-        {
-          "shape": [
-            128
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_2_pointwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            3,
-            3,
-            128,
-            1
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_3_depthwise/depthwise_weights"
-        },
-        {
-          "shape": [
-            128
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/BatchNorm/batchnorm/mul"
-        },
-        {
-          "shape": [
-            128
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_depthwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            128,
-            128
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/Conv2D/merged_input"
-        },
-        {
-          "shape": [
-            128
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_3_pointwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            3,
-            3,
-            128,
-            1
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_4_depthwise/depthwise_weights"
-        },
-        {
-          "shape": [
-            128
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/BatchNorm/batchnorm/mul"
-        },
-        {
-          "shape": [
-            128
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_depthwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            128,
-            256
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/Conv2D/merged_input"
-        },
-        {
-          "shape": [
-            256
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_4_pointwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            3,
-            3,
-            256,
-            1
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_5_depthwise/depthwise_weights"
-        },
-        {
-          "shape": [
-            256
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/BatchNorm/batchnorm/mul"
-        },
-        {
-          "shape": [
-            256
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_depthwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            256,
-            256
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/Conv2D/merged_input"
-        },
-        {
-          "shape": [
-            256
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_5_pointwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            3,
-            3,
-            256,
-            1
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_6_depthwise/depthwise_weights"
-        },
-        {
-          "shape": [
-            256
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/BatchNorm/batchnorm/mul"
-        },
-        {
-          "shape": [
-            256
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_depthwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            256,
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/Conv2D/merged_input"
-        },
-        {
-          "shape": [
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_6_pointwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            3,
-            3,
-            512,
-            1
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_7_depthwise/depthwise_weights"
-        },
-        {
-          "shape": [
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/BatchNorm/batchnorm/mul"
-        },
-        {
-          "shape": [
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_depthwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            512,
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/Conv2D/merged_input"
-        },
-        {
-          "shape": [
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_7_pointwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            3,
-            3,
-            512,
-            1
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_8_depthwise/depthwise_weights"
-        },
-        {
-          "shape": [
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/BatchNorm/batchnorm/mul"
-        },
-        {
-          "shape": [
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_depthwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            512,
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/Conv2D/merged_input"
-        },
-        {
-          "shape": [
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_8_pointwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            3,
-            3,
-            512,
-            1
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_9_depthwise/depthwise_weights"
-        },
-        {
-          "shape": [
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/BatchNorm/batchnorm/mul"
-        },
-        {
-          "shape": [
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_depthwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            512,
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/Conv2D/merged_input"
-        },
-        {
-          "shape": [
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_9_pointwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            3,
-            3,
-            512,
-            1
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_10_depthwise/depthwise_weights"
-        },
-        {
-          "shape": [
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/BatchNorm/batchnorm/mul"
-        },
-        {
-          "shape": [
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_depthwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            512,
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/Conv2D/merged_input"
-        },
-        {
-          "shape": [
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_10_pointwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            3,
-            3,
-            512,
-            1
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_11_depthwise/depthwise_weights"
-        },
-        {
-          "shape": [
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/BatchNorm/batchnorm/mul"
-        },
-        {
-          "shape": [
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_depthwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            512,
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/Conv2D/merged_input"
-        },
-        {
-          "shape": [
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_11_pointwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            3,
-            3,
-            512,
-            1
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_12_depthwise/depthwise_weights"
-        },
-        {
-          "shape": [
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/BatchNorm/batchnorm/mul"
-        },
-        {
-          "shape": [
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_depthwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            512,
-            1024
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/Conv2D/merged_input"
-        },
-        {
-          "shape": [
-            1024
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_12_pointwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            3,
-            3,
-            1024,
-            1
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_13_depthwise/depthwise_weights"
-        },
-        {
-          "shape": [
-            1024
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/BatchNorm/batchnorm/mul"
-        },
-        {
-          "shape": [
-            1024
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_depthwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            1024,
-            1024
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/Conv2D/merged_input"
-        },
-        {
-          "shape": [
-            1024
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/MobilenetV1/Conv2d_13_pointwise/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            1024,
-            256
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/Conv2D/merged_input"
-        },
-        {
-          "shape": [
-            256
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_2_1x1_256/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            3,
-            3,
-            256,
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/Conv2D/merged_input"
-        },
-        {
-          "shape": [
-            512
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_2_3x3_s2_512/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            512,
-            128
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/Conv2D/merged_input"
-        },
-        {
-          "shape": [
-            128
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_3_1x1_128/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            3,
-            3,
-            128,
-            256
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/Conv2D/merged_input"
-        },
-        {
-          "shape": [
-            256
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_3_3x3_s2_256/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            256,
-            128
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/Conv2D/merged_input"
-        },
-        {
-          "shape": [
-            128
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_4_1x1_128/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            3,
-            3,
-            128,
-            256
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/Conv2D/merged_input"
-        },
-        {
-          "shape": [
-            256
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_4_3x3_s2_256/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            1,
-            1,
-            256,
-            64
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/Conv2D/merged_input"
-        },
-        {
-          "shape": [
-            64
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_1_Conv2d_5_1x1_64/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            3,
-            3,
-            64,
-            128
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/Conv2D/merged_input"
-        },
-        {
-          "shape": [
-            128
-          ],
-          "dtype": "float32",
-          "name": "FeatureExtractor/MobilenetV1/Conv2d_13_pointwise_2_Conv2d_5_3x3_s2_128/BatchNorm/batchnorm/sub"
-        },
-        {
-          "shape": [
-            1
-          ],
-          "dtype": "int32",
-          "name": "Postprocessor/strided_slice/stack"
-        },
-        {
-          "shape": [
-            1
-          ],
-          "dtype": "int32",
-          "name": "strided_slice_6/stack"
-        },
-        {
-          "shape": [],
-          "dtype": "int32",
-          "name": "BoxPredictor_5/stack/1"
-        },
-        {
-          "shape": [],
-          "dtype": "int32",
-          "name": "BoxPredictor_0/stack_1/2"
-        },
-        {
-          "shape": [],
-          "dtype": "int32",
-          "name": "MultipleGridAnchorGenerator/concat/axis"
-        },
-        {
-          "shape": [
-            3
-          ],
-          "dtype": "int32",
-          "name": "Postprocessor/Slice/begin"
-        },
-        {
-          "shape": [
-            3
-          ],
-          "dtype": "int32",
-          "name": "Postprocessor/Slice/size"
-        },
-        {
-          "shape": [],
-          "dtype": "int32",
-          "name": "Preprocessor/map/while/ResizeImage/ExpandDims/dim"
-        },
-        {
-          "shape": [
-            2
-          ],
-          "dtype": "int32",
-          "name": "Preprocessor/map/while/ResizeImage/size"
-        },
-        {
-          "shape": [],
-          "dtype": "int32",
-          "name": "Preprocessor/map/while/add/y"
-        },
-        {
-          "shape": [
-            2
-          ],
-          "dtype": "int32",
-          "name": "Postprocessor/Decode/transpose/sub_1"
-        },
-        {
-          "shape": [
-            2
-          ],
-          "dtype": "int32",
-          "name": "Postprocessor/Decode/get_center_coordinates_and_sizes/transpose/sub_1"
-        },
-        {
-          "shape": [
-            2
-          ],
-          "dtype": "int32",
-          "name": "Postprocessor/Decode/transpose_1/sub_1"
-        }
-      ]
-    }
-  ]
-}

File diff suppressed because it is too large
+ 0 - 0
web/apps/photos/public/models/ssdmobilenet/weights_manifest.json


+ 0 - 51
web/apps/photos/src/components/MachineLearning/ObjectList.tsx

@@ -1,51 +0,0 @@
-import Box from "@mui/material/Box";
-import { Chip } from "components/Chip";
-import { Legend } from "components/PhotoViewer/styledComponents/Legend";
-import { t } from "i18next";
-import { useEffect, useState } from "react";
-import { EnteFile } from "types/file";
-import mlIDbStorage from "utils/storage/mlIDbStorage";
-
-export function ObjectLabelList(props: {
-    file: EnteFile;
-    updateMLDataIndex: number;
-}) {
-    const [objects, setObjects] = useState<Array<string>>([]);
-    useEffect(() => {
-        let didCancel = false;
-        const main = async () => {
-            const objects = await mlIDbStorage.getAllObjectsMap();
-            const uniqueObjectNames = [
-                ...new Set(
-                    (objects.get(props.file.id) ?? []).map(
-                        (object) => object.detection.class,
-                    ),
-                ),
-            ];
-            !didCancel && setObjects(uniqueObjectNames);
-        };
-        main();
-        return () => {
-            didCancel = true;
-        };
-    }, [props.file, props.updateMLDataIndex]);
-
-    if (objects.length === 0) return <></>;
-
-    return (
-        <div>
-            <Legend sx={{ pb: 1, display: "block" }}>{t("OBJECTS")}</Legend>
-            <Box
-                display={"flex"}
-                gap={1}
-                flexWrap="wrap"
-                justifyContent={"flex-start"}
-                alignItems={"flex-start"}
-            >
-                {objects.map((object) => (
-                    <Chip key={object}>{object}</Chip>
-                ))}
-            </Box>
-        </div>
-    );
-}

+ 0 - 39
web/apps/photos/src/components/MachineLearning/TFJSImage.tsx

@@ -1,39 +0,0 @@
-import * as tf from "@tensorflow/tfjs-core";
-import { useEffect, useRef } from "react";
-import { FaceImage } from "types/machineLearning";
-
-interface FaceImageProps {
-    faceImage: FaceImage;
-    width?: number;
-    height?: number;
-}
-
-export default function TFJSImage(props: FaceImageProps) {
-    const canvasRef = useRef(null);
-
-    useEffect(() => {
-        if (!props || !props.faceImage) {
-            return;
-        }
-        const canvas = canvasRef.current;
-        const faceTensor = tf.tensor3d(props.faceImage);
-        const resized =
-            props.width && props.height
-                ? tf.image.resizeBilinear(faceTensor, [
-                      props.width,
-                      props.height,
-                  ])
-                : faceTensor;
-        const normFaceImage = tf.div(tf.add(resized, 1.0), 2);
-        tf.browser.toPixels(normFaceImage as tf.Tensor3D, canvas);
-    }, [props]);
-
-    return (
-        <canvas
-            ref={canvasRef}
-            width={112}
-            height={112}
-            style={{ display: "inline" }}
-        />
-    );
-}

+ 0 - 5
web/apps/photos/src/components/PhotoViewer/FileInfo/index.tsx

@@ -10,7 +10,6 @@ import TextSnippetOutlined from "@mui/icons-material/TextSnippetOutlined";
 import { Box, DialogProps, Link, Stack, styled } from "@mui/material";
 import { Chip } from "components/Chip";
 import { EnteDrawer } from "components/EnteDrawer";
-import { ObjectLabelList } from "components/MachineLearning/ObjectList";
 import {
     PhotoPeopleList,
     UnidentifiedFaces,
@@ -344,10 +343,6 @@ export function FileInfo({
                             file={file}
                             updateMLDataIndex={updateMLDataIndex}
                         />
-                        <ObjectLabelList
-                            file={file}
-                            updateMLDataIndex={updateMLDataIndex}
-                        />
                     </>
                 )}
             </Stack>

+ 1 - 7
web/apps/photos/src/components/Search/SearchBar/searchInput/index.tsx

@@ -17,7 +17,7 @@ import {
 import { Collection } from "types/collection";
 import { LocationTagData } from "types/entity";
 import { EnteFile } from "types/file";
-import { Person, Thing, WordGroup } from "types/machineLearning";
+import { Person } from "types/machineLearning";
 import {
     ClipSearchScores,
     DateValue,
@@ -146,12 +146,6 @@ export default function SearchInput(props: Iprops) {
             case SuggestionType.PERSON:
                 search = { person: selectedOption.value as Person };
                 break;
-            case SuggestionType.THING:
-                search = { thing: selectedOption.value as Thing };
-                break;
-            case SuggestionType.TEXT:
-                search = { text: selectedOption.value as WordGroup };
-                break;
             case SuggestionType.FILE_TYPE:
                 search = { fileType: selectedOption.value as FILE_TYPE };
                 break;

+ 0 - 30
web/apps/photos/src/constants/mlConfig.ts

@@ -46,22 +46,6 @@ export const DEFAULT_ML_SYNC_CONFIG: MLSyncConfig = {
         // maxDistanceInsideCluster: 0.4,
         generateDebugInfo: true,
     },
-    objectDetection: {
-        method: "SSDMobileNetV2",
-        maxNumBoxes: 20,
-        minScore: 0.2,
-    },
-    sceneDetection: {
-        method: "ImageScene",
-        minScore: 0.1,
-    },
-    // tsne: {
-    //     samples: 200,
-    //     dim: 2,
-    //     perplexity: 10.0,
-    //     learningRate: 10.0,
-    //     metric: 'euclidean',
-    // },
     mlVersion: 3,
 };
 
@@ -77,21 +61,7 @@ export const MAX_ML_SYNC_ERROR_COUNT = 1;
 
 export const TEXT_DETECTION_TIMEOUT_MS = [10000, 30000, 60000, 120000, 240000];
 
-export const BLAZEFACE_MAX_FACES = 50;
-export const BLAZEFACE_INPUT_SIZE = 256;
-export const BLAZEFACE_IOU_THRESHOLD = 0.3;
-export const BLAZEFACE_SCORE_THRESHOLD = 0.75;
-export const BLAZEFACE_PASS1_SCORE_THRESHOLD = 0.4;
-export const BLAZEFACE_FACE_SIZE = 112;
 export const MOBILEFACENET_FACE_SIZE = 112;
 export const MOBILEFACENET_EMBEDDING_SIZE = 192;
 
-// scene detection model takes fixed-shaped (224x224) inputs
-// https://tfhub.dev/sayannath/lite-model/image-scene/1
-export const SCENE_DETECTION_IMAGE_SIZE = 224;
-
-// SSD with Mobilenet v2 initialized from Imagenet classification checkpoint. Trained on COCO 2017 dataset (images scaled to 320x320 resolution).
-// https://tfhub.dev/tensorflow/ssd_mobilenet_v2/2
-export const OBJECT_DETECTION_IMAGE_SIZE = 320;
-
 export const BATCHES_BEFORE_SYNCING_INDEX = 5;

+ 0 - 257
web/apps/photos/src/services/machineLearning/blazeFaceDetectionService.ts

@@ -1,257 +0,0 @@
-import log from "@/next/log";
-import { GraphModel } from "@tensorflow/tfjs-converter";
-import * as tf from "@tensorflow/tfjs-core";
-import {
-    load as blazeFaceLoad,
-    BlazeFaceModel,
-    NormalizedFace,
-} from "blazeface-back";
-import {
-    BLAZEFACE_FACE_SIZE,
-    BLAZEFACE_INPUT_SIZE,
-    BLAZEFACE_IOU_THRESHOLD,
-    BLAZEFACE_MAX_FACES,
-    BLAZEFACE_PASS1_SCORE_THRESHOLD,
-    BLAZEFACE_SCORE_THRESHOLD,
-    MAX_FACE_DISTANCE_PERCENT,
-} from "constants/mlConfig";
-import {
-    FaceDetection,
-    FaceDetectionMethod,
-    FaceDetectionService,
-    Versioned,
-} from "types/machineLearning";
-import { addPadding, crop, resizeToSquare } from "utils/image";
-import { enlargeBox, newBox, normFaceBox } from "utils/machineLearning";
-import {
-    getNearestDetection,
-    removeDuplicateDetections,
-    transformPaddedToImage,
-} from "utils/machineLearning/faceDetection";
-import {
-    computeTransformToBox,
-    transformBox,
-    transformPoints,
-} from "utils/machineLearning/transform";
-import { Box, Point } from "../../../thirdparty/face-api/classes";
-
-class BlazeFaceDetectionService implements FaceDetectionService {
-    private blazeFaceModel: Promise<BlazeFaceModel>;
-    private blazeFaceBackModel: GraphModel;
-    public method: Versioned<FaceDetectionMethod>;
-
-    private desiredLeftEye = [0.36, 0.45];
-    private desiredFaceSize;
-
-    public constructor(desiredFaceSize: number = BLAZEFACE_FACE_SIZE) {
-        this.method = {
-            value: "BlazeFace",
-            version: 1,
-        };
-        this.desiredFaceSize = desiredFaceSize;
-    }
-
-    public getRelativeDetection(): FaceDetection {
-        // TODO(MR): onnx-yolo
-        throw new Error();
-    }
-
-    private async init() {
-        this.blazeFaceModel = blazeFaceLoad({
-            maxFaces: BLAZEFACE_MAX_FACES,
-            scoreThreshold: BLAZEFACE_PASS1_SCORE_THRESHOLD,
-            iouThreshold: BLAZEFACE_IOU_THRESHOLD,
-            modelUrl: "/models/blazeface/back/model.json",
-            inputHeight: BLAZEFACE_INPUT_SIZE,
-            inputWidth: BLAZEFACE_INPUT_SIZE,
-        });
-        log.info(
-            "loaded blazeFaceModel: ",
-            // await this.blazeFaceModel,
-            // eslint-disable-next-line @typescript-eslint/await-thenable
-            await tf.getBackend(),
-        );
-    }
-
-    private getDlibAlignedFace(normFace: NormalizedFace): Box {
-        const relX = 0.5;
-        const relY = 0.43;
-        const relScale = 0.45;
-
-        const leftEyeCenter = normFace.landmarks[0];
-        const rightEyeCenter = normFace.landmarks[1];
-        const mountCenter = normFace.landmarks[3];
-
-        const distToMouth = (pt) => {
-            const dy = mountCenter[1] - pt[1];
-            const dx = mountCenter[0] - pt[0];
-            return Math.sqrt(dx * dx + dy * dy);
-        };
-        const eyeToMouthDist =
-            (distToMouth(leftEyeCenter) + distToMouth(rightEyeCenter)) / 2;
-
-        const size = Math.floor(eyeToMouthDist / relScale);
-
-        const center = [
-            (leftEyeCenter[0] + rightEyeCenter[0] + mountCenter[0]) / 3,
-            (leftEyeCenter[1] + rightEyeCenter[1] + mountCenter[1]) / 3,
-        ];
-
-        const left = center[0] - relX * size;
-        const top = center[1] - relY * size;
-        const right = center[0] + relX * size;
-        const bottom = center[1] + relY * size;
-
-        return new Box({
-            left: left,
-            top: top,
-            right: right,
-            bottom: bottom,
-        });
-    }
-
-    private getAlignedFace(normFace: NormalizedFace): Box {
-        const leftEye = normFace.landmarks[0];
-        const rightEye = normFace.landmarks[1];
-        // const noseTip = normFace.landmarks[2];
-
-        const dy = rightEye[1] - leftEye[1];
-        const dx = rightEye[0] - leftEye[0];
-
-        const desiredRightEyeX = 1.0 - this.desiredLeftEye[0];
-
-        // const eyesCenterX = (leftEye[0] + rightEye[0]) / 2;
-        // const yaw = Math.abs(noseTip[0] - eyesCenterX)
-        const dist = Math.sqrt(dx * dx + dy * dy);
-        let desiredDist = desiredRightEyeX - this.desiredLeftEye[0];
-        desiredDist *= this.desiredFaceSize;
-        const scale = desiredDist / dist;
-        // log.info("scale: ", scale);
-
-        const eyesCenter = [];
-        eyesCenter[0] = Math.floor((leftEye[0] + rightEye[0]) / 2);
-        eyesCenter[1] = Math.floor((leftEye[1] + rightEye[1]) / 2);
-        // log.info("eyesCenter: ", eyesCenter);
-
-        const faceWidth = this.desiredFaceSize / scale;
-        const faceHeight = this.desiredFaceSize / scale;
-        // log.info("faceWidth: ", faceWidth, "faceHeight: ", faceHeight)
-
-        const tx = eyesCenter[0] - faceWidth * 0.5;
-        const ty = eyesCenter[1] - faceHeight * this.desiredLeftEye[1];
-        // log.info("tx: ", tx, "ty: ", ty);
-
-        return new Box({
-            left: tx,
-            top: ty,
-            right: tx + faceWidth,
-            bottom: ty + faceHeight,
-        });
-    }
-
-    public async detectFacesUsingModel(image: tf.Tensor3D) {
-        const resizedImage = tf.image.resizeBilinear(image, [256, 256]);
-        const reshapedImage = tf.reshape(resizedImage, [
-            1,
-            resizedImage.shape[0],
-            resizedImage.shape[1],
-            3,
-        ]);
-        const normalizedImage = tf.sub(tf.div(reshapedImage, 127.5), 1.0);
-        // eslint-disable-next-line @typescript-eslint/await-thenable
-        const results = await this.blazeFaceBackModel.predict(normalizedImage);
-        // log.info('onFacesDetected: ', results);
-        return results;
-    }
-
-    private async getBlazefaceModel() {
-        if (!this.blazeFaceModel) {
-            await this.init();
-        }
-
-        return this.blazeFaceModel;
-    }
-
-    private async estimateFaces(
-        imageBitmap: ImageBitmap,
-    ): Promise<Array<FaceDetection>> {
-        const resized = resizeToSquare(imageBitmap, BLAZEFACE_INPUT_SIZE);
-        const tfImage = tf.browser.fromPixels(resized.image);
-        const blazeFaceModel = await this.getBlazefaceModel();
-        // TODO: check if this works concurrently, else use serialqueue
-        const faces = await blazeFaceModel.estimateFaces(tfImage);
-        tf.dispose(tfImage);
-
-        const inBox = newBox(0, 0, resized.width, resized.height);
-        const toBox = newBox(0, 0, imageBitmap.width, imageBitmap.height);
-        const transform = computeTransformToBox(inBox, toBox);
-        // log.info("1st pass: ", { transform });
-
-        const faceDetections: Array<FaceDetection> = faces?.map((f) => {
-            const box = transformBox(normFaceBox(f), transform);
-            const normLandmarks = (f.landmarks as number[][])?.map(
-                (l) => new Point(l[0], l[1]),
-            );
-            const landmarks = transformPoints(normLandmarks, transform);
-            return {
-                box,
-                landmarks,
-                probability: f.probability as number,
-                // detectionMethod: this.method,
-            } as FaceDetection;
-        });
-
-        return faceDetections;
-    }
-
-    public async detectFaces(
-        imageBitmap: ImageBitmap,
-    ): Promise<Array<FaceDetection>> {
-        const maxFaceDistance = imageBitmap.width * MAX_FACE_DISTANCE_PERCENT;
-        const pass1Detections = await this.estimateFaces(imageBitmap);
-
-        // run 2nd pass for accuracy
-        const detections: Array<FaceDetection> = [];
-        for (const pass1Detection of pass1Detections) {
-            const imageBox = enlargeBox(pass1Detection.box, 2);
-            const faceImage = crop(
-                imageBitmap,
-                imageBox,
-                BLAZEFACE_INPUT_SIZE / 2,
-            );
-            const paddedImage = addPadding(faceImage, 0.5);
-            const paddedBox = enlargeBox(imageBox, 2);
-            const pass2Detections = await this.estimateFaces(paddedImage);
-
-            pass2Detections?.forEach((d) =>
-                transformPaddedToImage(d, faceImage, imageBox, paddedBox),
-            );
-            let selected = pass2Detections?.[0];
-            if (pass2Detections?.length > 1) {
-                // log.info('2nd pass >1 face', pass2Detections.length);
-                selected = getNearestDetection(
-                    pass1Detection,
-                    pass2Detections,
-                    // maxFaceDistance
-                );
-            }
-
-            // we might miss 1st pass face actually having score within threshold
-            // it is ok as results will be consistent with 2nd pass only detections
-            if (selected && selected.probability >= BLAZEFACE_SCORE_THRESHOLD) {
-                // log.info("pass2: ", { imageBox, paddedBox, transform, selected });
-                detections.push(selected);
-            }
-        }
-
-        return removeDuplicateDetections(detections, maxFaceDistance);
-    }
-
-    public async dispose() {
-        const blazeFaceModel = await this.getBlazefaceModel();
-        blazeFaceModel?.dispose();
-        this.blazeFaceModel = undefined;
-    }
-}
-
-export default new BlazeFaceDetectionService();

+ 0 - 108
web/apps/photos/src/services/machineLearning/imageSceneService.ts

@@ -1,108 +0,0 @@
-import log from "@/next/log";
-import * as tfjsConverter from "@tensorflow/tfjs-converter";
-import * as tf from "@tensorflow/tfjs-core";
-import { SCENE_DETECTION_IMAGE_SIZE } from "constants/mlConfig";
-import {
-    ObjectDetection,
-    SceneDetectionMethod,
-    SceneDetectionService,
-    Versioned,
-} from "types/machineLearning";
-import { resizeToSquare } from "utils/image";
-
-class ImageScene implements SceneDetectionService {
-    method: Versioned<SceneDetectionMethod>;
-    private model: tfjsConverter.GraphModel;
-    private sceneMap: { [key: string]: string };
-    private ready: Promise<void>;
-    private workerID: number;
-
-    public constructor() {
-        this.method = {
-            value: "ImageScene",
-            version: 1,
-        };
-        this.workerID = Math.round(Math.random() * 1000);
-    }
-
-    private async init() {
-        log.info(`[${this.workerID}]`, "ImageScene init called");
-        if (this.model) {
-            return;
-        }
-
-        this.sceneMap = await (
-            await fetch("/models/imagescene/sceneMap.json")
-        ).json();
-
-        this.model = await tfjsConverter.loadGraphModel(
-            "/models/imagescene/model.json",
-        );
-        log.info(
-            `[${this.workerID}]`,
-            "loaded ImageScene model",
-            tf.getBackend(),
-        );
-
-        tf.tidy(() => {
-            const zeroTensor = tf.zeros([1, 224, 224, 3]);
-            // warmup the model
-            this.model.predict(zeroTensor) as tf.Tensor;
-        });
-    }
-
-    private async getImageSceneModel() {
-        log.info(`[${this.workerID}]`, "ImageScene getImageSceneModel called");
-        if (!this.ready) {
-            this.ready = this.init();
-        }
-        await this.ready;
-        return this.model;
-    }
-
-    async detectScenes(image: ImageBitmap, minScore: number) {
-        const resized = resizeToSquare(image, SCENE_DETECTION_IMAGE_SIZE);
-
-        const model = await this.getImageSceneModel();
-
-        const output = tf.tidy(() => {
-            const tfImage = tf.browser.fromPixels(resized.image);
-            const input = tf.expandDims(tf.cast(tfImage, "float32"));
-            const output = model.predict(input) as tf.Tensor;
-            return output;
-        });
-
-        const data = (await output.data()) as Float32Array;
-        output.dispose();
-
-        const scenes = this.parseSceneDetectionResult(
-            data,
-            minScore,
-            image.width,
-            image.height,
-        );
-
-        return scenes;
-    }
-
-    private parseSceneDetectionResult(
-        outputData: Float32Array,
-        minScore: number,
-        width: number,
-        height: number,
-    ): ObjectDetection[] {
-        const scenes = [];
-        for (let i = 0; i < outputData.length; i++) {
-            if (outputData[i] >= minScore) {
-                scenes.push({
-                    class: this.sceneMap[i.toString()],
-                    score: outputData[i],
-                    bbox: [0, 0, width, height],
-                });
-            }
-        }
-        return scenes;
-    }
-}
-
-export default new ImageScene();

+ 0 - 36
web/apps/photos/src/services/machineLearning/machineLearningFactory.ts

@@ -22,20 +22,14 @@ import {
     MLLibraryData,
     MLSyncConfig,
     MLSyncContext,
-    ObjectDetectionMethod,
-    ObjectDetectionService,
-    SceneDetectionMethod,
-    SceneDetectionService,
 } from "types/machineLearning";
 import { logQueueStats } from "utils/machineLearning";
 import arcfaceAlignmentService from "./arcfaceAlignmentService";
 import arcfaceCropService from "./arcfaceCropService";
 import dbscanClusteringService from "./dbscanClusteringService";
 import hdbscanClusteringService from "./hdbscanClusteringService";
-import imageSceneService from "./imageSceneService";
 import laplacianBlurDetectionService from "./laplacianBlurDetectionService";
 import mobileFaceNetEmbeddingService from "./mobileFaceNetEmbeddingService";
-import ssdMobileNetV2Service from "./ssdMobileNetV2Service";
 import yoloFaceDetectionService from "./yoloFaceDetectionService";
 
 export class MLFactory {
@@ -49,26 +43,6 @@ export class MLFactory {
         throw Error("Unknon face detection method: " + method);
     }
 
-    public static getObjectDetectionService(
-        method: ObjectDetectionMethod,
-    ): ObjectDetectionService {
-        if (method === "SSDMobileNetV2") {
-            return ssdMobileNetV2Service;
-        }
-
-        throw Error("Unknown object detection method: " + method);
-    }
-
-    public static getSceneDetectionService(
-        method: SceneDetectionMethod,
-    ): SceneDetectionService {
-        if (method === "ImageScene") {
-            return imageSceneService;
-        }
-
-        throw Error("Unknown scene detection method: " + method);
-    }
-
     public static getFaceCropService(method: FaceCropMethod) {
         if (method === "ArcFace") {
             return arcfaceCropService;
@@ -147,15 +121,12 @@ export class LocalMLSyncContext implements MLSyncContext {
     public blurDetectionService: BlurDetectionService;
     public faceEmbeddingService: FaceEmbeddingService;
     public faceClusteringService: ClusteringService;
-    public objectDetectionService: ObjectDetectionService;
-    public sceneDetectionService: SceneDetectionService;
 
     public localFilesMap: Map<number, EnteFile>;
     public outOfSyncFiles: EnteFile[];
     public nSyncedFiles: number;
     public nSyncedFaces: number;
     public allSyncedFacesMap?: Map<number, Array<Face>>;
-    public tsne?: any;
 
     public error?: Error;
 
@@ -202,13 +173,6 @@ export class LocalMLSyncContext implements MLSyncContext {
             this.config.faceClustering.method,
         );
 
-        this.objectDetectionService = MLFactory.getObjectDetectionService(
-            this.config.objectDetection.method,
-        );
-        this.sceneDetectionService = MLFactory.getSceneDetectionService(
-            this.config.sceneDetection.method,
-        );
-
         this.outOfSyncFiles = [];
         this.nSyncedFiles = 0;
         this.nSyncedFaces = 0;

+ 4 - 126
web/apps/photos/src/services/machineLearning/machineLearningService.ts

@@ -2,9 +2,6 @@ import log from "@/next/log";
 import { APPS } from "@ente/shared/apps/constants";
 import ComlinkCryptoWorker from "@ente/shared/crypto";
 import { CustomError, parseUploadErrorCodes } from "@ente/shared/error";
-import "@tensorflow/tfjs-backend-cpu";
-import "@tensorflow/tfjs-backend-webgl";
-import * as tf from "@tensorflow/tfjs-core";
 import { MAX_ML_SYNC_ERROR_COUNT } from "constants/mlConfig";
 import downloadManager from "services/download";
 import { putEmbedding } from "services/embeddingService";
@@ -21,13 +18,10 @@ import { LocalFileMlDataToServerFileMl } from "utils/machineLearning/mldataMappe
 import mlIDbStorage from "utils/storage/mlIDbStorage";
 import FaceService from "./faceService";
 import { MLFactory } from "./machineLearningFactory";
-import ObjectService from "./objectService";
 import PeopleService from "./peopleService";
 import ReaderService from "./readerService";
 
 class MachineLearningService {
-    private initialized = false;
-
     private localSyncContext: Promise<MLSyncContext>;
     private syncContext: Promise<MLSyncContext>;
 
@@ -58,12 +52,6 @@ class MachineLearningService {
             await this.syncIndex(syncContext);
         }
 
-        // tf.engine().endScope();
-
-        // if (syncContext.config.tsne) {
-        //     await this.runTSNE(syncContext);
-        // }
-
         const mlSyncResult: MLSyncResult = {
             nOutOfSyncFiles: syncContext.outOfSyncFiles.length,
             nSyncedFiles: syncContext.nSyncedFiles,
@@ -73,14 +61,10 @@ class MachineLearningService {
                     .length,
             nFaceNoise:
                 syncContext.mlLibraryData?.faceClusteringResults?.noise.length,
-            tsne: syncContext.tsne,
             error: syncContext.error,
         };
         // log.info('[MLService] sync results: ', mlSyncResult);
 
-        // await syncContext.dispose();
-        log.info("Final TF Memory stats: ", JSON.stringify(tf.memory()));
-
         return mlSyncResult;
     }
 
@@ -183,50 +167,6 @@ class MachineLearningService {
         log.info("getOutOfSyncFiles", Date.now() - startTime, "ms");
     }
 
-    // TODO: optimize, use indexdb indexes, move facecrops to cache to reduce io
-    // remove, already done
-    private async getUniqueOutOfSyncFilesNoIdx(
-        syncContext: MLSyncContext,
-        files: EnteFile[],
-    ) {
-        const limit = syncContext.config.batchSize;
-        const mlVersion = syncContext.config.mlVersion;
-        const uniqueFiles: Map<number, EnteFile> = new Map<number, EnteFile>();
-        for (let i = 0; uniqueFiles.size < limit && i < files.length; i++) {
-            const mlFileData = await this.getMLFileData(files[i].id);
-            const mlFileVersion = mlFileData?.mlVersion || 0;
-            if (
-                !uniqueFiles.has(files[i].id) &&
-                (!mlFileData?.errorCount || mlFileData.errorCount < 2) &&
-                (mlFileVersion < mlVersion ||
-                    syncContext.config.imageSource !== mlFileData.imageSource)
-            ) {
-                uniqueFiles.set(files[i].id, files[i]);
-            }
-        }
-
-        return [...uniqueFiles.values()];
-    }
-
-    private async getOutOfSyncFilesNoIdx(syncContext: MLSyncContext) {
-        const existingFilesMap = await this.getLocalFilesMap(syncContext);
-        // existingFiles.sort(
-        //     (a, b) => b.metadata.creationTime - a.metadata.creationTime
-        // );
-        console.time("getUniqueOutOfSyncFiles");
-        syncContext.outOfSyncFiles = await this.getUniqueOutOfSyncFilesNoIdx(
-            syncContext,
-            [...existingFilesMap.values()],
-        );
-        log.info("getUniqueOutOfSyncFiles");
-        log.info(
-            "Got unique outOfSyncFiles: ",
-            syncContext.outOfSyncFiles.length,
-            "for batchSize: ",
-            syncContext.config.batchSize,
-        );
-    }
-
     private async syncFiles(syncContext: MLSyncContext) {
         try {
             const functions = syncContext.outOfSyncFiles.map(
@@ -295,7 +235,6 @@ class MachineLearningService {
         userID: number,
         enteFile: EnteFile,
         localFile?: globalThis.File,
-        textDetectionTimeoutIndex?: number,
     ): Promise<MlFileData | Error> {
         const syncContext = await this.getLocalSyncContext(token, userID);
 
@@ -304,7 +243,6 @@ class MachineLearningService {
                 syncContext,
                 enteFile,
                 localFile,
-                textDetectionTimeoutIndex,
             );
 
             if (syncContext.nSyncedFiles >= syncContext.config.batchSize) {
@@ -322,19 +260,15 @@ class MachineLearningService {
         syncContext: MLSyncContext,
         enteFile: EnteFile,
         localFile?: globalThis.File,
-        textDetectionTimeoutIndex?: number,
     ): Promise<MlFileData> {
         try {
             console.log(
-                "Start index for ",
-                enteFile.title ?? "no title",
-                enteFile.id,
+                `Indexing ${enteFile.title ?? "<untitled>"} ${enteFile.id}`,
             );
             const mlFileData = await this.syncFile(
                 syncContext,
                 enteFile,
                 localFile,
-                textDetectionTimeoutIndex,
             );
             syncContext.nSyncedFaces += mlFileData.faces?.length || 0;
             syncContext.nSyncedFiles += 1;
@@ -363,16 +297,8 @@ class MachineLearningService {
                     throw error;
             }
 
-            await this.persistMLFileSyncError(syncContext, enteFile, error);
+            await this.persistMLFileSyncError(enteFile, error);
             syncContext.nSyncedFiles += 1;
-        } finally {
-            console.log(
-                "done index for ",
-                enteFile.title ?? "no title",
-                enteFile.id,
-            );
-            // addLogLine('TF Memory stats: ', JSON.stringify(tf.memory()));
-            log.info("TF Memory stats: ", JSON.stringify(tf.memory()));
         }
     }
 
@@ -380,8 +306,6 @@ class MachineLearningService {
         syncContext: MLSyncContext,
         enteFile: EnteFile,
         localFile?: globalThis.File,
-        // eslint-disable-next-line @typescript-eslint/no-unused-vars
-        textDetectionTimeoutIndex?: number,
     ) {
         console.log("Syncing for file" + enteFile.title);
         const fileContext: MLSyncFileContext = { enteFile, localFile };
@@ -406,34 +330,17 @@ class MachineLearningService {
             await ReaderService.getImageBitmap(syncContext, fileContext);
             await Promise.all([
                 this.syncFileAnalyzeFaces(syncContext, fileContext),
-                // ObjectService.syncFileObjectDetections(
-                //     syncContext,
-                //     fileContext
-                // ),
-                // TextService.syncFileTextDetections(
-                //     syncContext,
-                //     fileContext,
-                //     textDetectionTimeoutIndex
-                // ),
             ]);
             newMlFile.errorCount = 0;
             newMlFile.lastErrorMessage = undefined;
             await this.persistOnServer(newMlFile, enteFile);
-            await this.persistMLFileData(syncContext, newMlFile);
+            await mlIDbStorage.putFile(newMlFile);
         } catch (e) {
             log.error("ml detection failed", e);
             newMlFile.mlVersion = oldMlFile.mlVersion;
             throw e;
         } finally {
-            fileContext.tfImage && fileContext.tfImage.dispose();
             fileContext.imageBitmap && fileContext.imageBitmap.close();
-            // log.info('8 TF Memory stats: ',JSON.stringify(tf.memory()));
-
-            // TODO: enable once faceId changes go in
-            // await removeOldFaceCrops(
-            //     fileContext.oldMlFile,
-            //     fileContext.newMlFile
-            // );
         }
 
         return newMlFile;
@@ -458,38 +365,11 @@ class MachineLearningService {
         log.info("putEmbedding response: ", res);
     }
 
-    public async init() {
-        if (this.initialized) {
-            return;
-        }
-
-        await tf.ready();
-
-        log.info("01 TF Memory stats: ", JSON.stringify(tf.memory()));
-
-        this.initialized = true;
-    }
-
-    public async dispose() {
-        this.initialized = false;
-    }
-
     private async getMLFileData(fileId: number) {
         return mlIDbStorage.getFile(fileId);
     }
 
-    private async persistMLFileData(
-        syncContext: MLSyncContext,
-        mlFileData: MlFileData,
-    ) {
-        mlIDbStorage.putFile(mlFileData);
-    }
-
-    private async persistMLFileSyncError(
-        syncContext: MLSyncContext,
-        enteFile: EnteFile,
-        e: Error,
-    ) {
+    private async persistMLFileSyncError(enteFile: EnteFile, e: Error) {
         try {
             await mlIDbStorage.upsertFileInTx(enteFile.id, (mlFileData) => {
                 if (!mlFileData) {
@@ -522,8 +402,6 @@ class MachineLearningService {
 
         await PeopleService.syncPeopleIndex(syncContext);
 
-        await ObjectService.syncThingsIndex(syncContext);
-
         await this.persistMLLibraryData(syncContext);
     }
 

+ 0 - 9
web/apps/photos/src/services/machineLearning/mlSyncJob.ts

@@ -1,9 +0,0 @@
-import { JobResult } from "types/common/job";
-import { MLSyncResult } from "types/machineLearning";
-import { SimpleJob } from "utils/common/job";
-
-export interface MLSyncJobResult extends JobResult {
-    mlSyncResult: MLSyncResult;
-}
-
-export class MLSyncJob extends SimpleJob<MLSyncJobResult> {}

+ 9 - 1
web/apps/photos/src/services/machineLearning/mlWorkManager.ts

@@ -5,18 +5,26 @@ import { getToken, getUserID } from "@ente/shared/storage/localStorage/helpers";
 import { FILE_TYPE } from "constants/file";
 import debounce from "debounce";
 import PQueue from "p-queue";
+import { JobResult } from "types/common/job";
 import { EnteFile } from "types/file";
+import { MLSyncResult } from "types/machineLearning";
 import { getDedicatedMLWorker } from "utils/comlink/ComlinkMLWorker";
+import { SimpleJob } from "utils/common/job";
 import { logQueueStats } from "utils/machineLearning";
 import { getMLSyncJobConfig } from "utils/machineLearning/config";
 import mlIDbStorage from "utils/storage/mlIDbStorage";
 import { DedicatedMLWorker } from "worker/ml.worker";
-import { MLSyncJob, MLSyncJobResult } from "./mlSyncJob";
 
 const LIVE_SYNC_IDLE_DEBOUNCE_SEC = 30;
 const LIVE_SYNC_QUEUE_TIMEOUT_SEC = 300;
 const LOCAL_FILES_UPDATED_DEBOUNCE_SEC = 30;
 
+export interface MLSyncJobResult extends JobResult {
+    mlSyncResult: MLSyncResult;
+}
+
+export class MLSyncJob extends SimpleJob<MLSyncJobResult> {}
+
 class MLWorkManager {
     private mlSyncJob: MLSyncJob;
     private syncJobWorker: ComlinkWorker<typeof DedicatedMLWorker>;

+ 2 - 91
web/apps/photos/src/services/machineLearning/mobileFaceNetEmbeddingService.ts

@@ -1,11 +1,7 @@
-import log from "@/next/log";
-import * as tf from "@tensorflow/tfjs-core";
 import {
     MOBILEFACENET_EMBEDDING_SIZE,
     MOBILEFACENET_FACE_SIZE,
 } from "constants/mlConfig";
-// import { TFLiteModel } from "@tensorflow/tfjs-tflite";
-// import PQueue from "p-queue";
 import {
     FaceEmbedding,
     FaceEmbeddingMethod,
@@ -18,12 +14,6 @@ import {
 // import { env } from "onnxruntime-web";
 const ort: any = {};
 
-import {
-    clamp,
-    getPixelBilinear,
-    normalizePixelBetweenMinus1And1,
-} from "utils/image";
-
 // TODO(MR): onnx-yolo
 // env.wasm.wasmPaths = "/js/onnx/";
 class MobileFaceNetEmbeddingService implements FaceEmbeddingService {
@@ -33,12 +23,12 @@ class MobileFaceNetEmbeddingService implements FaceEmbeddingService {
     public method: Versioned<FaceEmbeddingMethod>;
     public faceSize: number;
 
-    public constructor(faceSize: number = MOBILEFACENET_FACE_SIZE) {
+    public constructor() {
         this.method = {
             value: "MobileFaceNet",
             version: 2,
         };
-        this.faceSize = faceSize;
+        this.faceSize = MOBILEFACENET_FACE_SIZE;
         // TODO: set timeout
     }
 
@@ -73,85 +63,6 @@ class MobileFaceNetEmbeddingService implements FaceEmbeddingService {
         return this.onnxInferenceSession;
     }
 
-    private preprocessImageBitmapToFloat32(
-        imageBitmap: ImageBitmap,
-        requiredWidth: number = this.faceSize,
-        requiredHeight: number = this.faceSize,
-        maintainAspectRatio: boolean = true,
-        normFunction: (
-            pixelValue: number,
-        ) => number = normalizePixelBetweenMinus1And1,
-    ) {
-        // Create an OffscreenCanvas and set its size
-        const offscreenCanvas = new OffscreenCanvas(
-            imageBitmap.width,
-            imageBitmap.height,
-        );
-        const ctx = offscreenCanvas.getContext("2d");
-        ctx.drawImage(imageBitmap, 0, 0, imageBitmap.width, imageBitmap.height);
-        const imageData = ctx.getImageData(
-            0,
-            0,
-            imageBitmap.width,
-            imageBitmap.height,
-        );
-        const pixelData = imageData.data;
-
-        let scaleW = requiredWidth / imageBitmap.width;
-        let scaleH = requiredHeight / imageBitmap.height;
-        if (maintainAspectRatio) {
-            const scale = Math.min(
-                requiredWidth / imageBitmap.width,
-                requiredHeight / imageBitmap.height,
-            );
-            scaleW = scale;
-            scaleH = scale;
-        }
-        const scaledWidth = clamp(
-            Math.round(imageBitmap.width * scaleW),
-            0,
-            requiredWidth,
-        );
-        const scaledHeight = clamp(
-            Math.round(imageBitmap.height * scaleH),
-            0,
-            requiredHeight,
-        );
-
-        const processedImage = new Float32Array(
-            1 * requiredWidth * requiredHeight * 3,
-        );
-        log.info("loaded mobileFaceNetModel: ", tf.getBackend());
-
-        // Populate the Float32Array with normalized pixel values
-        for (let h = 0; h < requiredHeight; h++) {
-            for (let w = 0; w < requiredWidth; w++) {
-                let pixel: {
-                    r: number;
-                    g: number;
-                    b: number;
-                };
-                if (w >= scaledWidth || h >= scaledHeight) {
-                    pixel = { r: 114, g: 114, b: 114 };
-                } else {
-                    pixel = getPixelBilinear(
-                        w / scaleW,
-                        h / scaleH,
-                        pixelData,
-                        imageBitmap.width,
-                        imageBitmap.height,
-                    );
-                }
-                const pixelIndex = 3 * (h * requiredWidth + w);
-                processedImage[pixelIndex] = normFunction(pixel.r);
-                processedImage[pixelIndex + 1] = normFunction(pixel.g);
-                processedImage[pixelIndex + 2] = normFunction(pixel.b);
-            }
-        }
-
-        return processedImage;
-    }
-
     public async getFaceEmbeddings(
         faceData: Float32Array,
     ): Promise<Array<FaceEmbedding>> {

+ 0 - 146
web/apps/photos/src/services/machineLearning/objectService.ts

@@ -1,146 +0,0 @@
-import log from "@/next/log";
-import {
-    DetectedObject,
-    MLSyncContext,
-    MLSyncFileContext,
-    Thing,
-} from "types/machineLearning";
-import {
-    getAllObjectsFromMap,
-    getObjectId,
-    isDifferentOrOld,
-} from "utils/machineLearning";
-import mlIDbStorage from "utils/storage/mlIDbStorage";
-import ReaderService from "./readerService";
-
-class ObjectService {
-    async syncFileObjectDetections(
-        syncContext: MLSyncContext,
-        fileContext: MLSyncFileContext,
-    ) {
-        const startTime = Date.now();
-        const { oldMlFile, newMlFile } = fileContext;
-        if (
-            !isDifferentOrOld(
-                oldMlFile?.objectDetectionMethod,
-                syncContext.objectDetectionService.method,
-            ) &&
-            !isDifferentOrOld(
-                oldMlFile?.sceneDetectionMethod,
-                syncContext.sceneDetectionService.method,
-            ) &&
-            oldMlFile?.imageSource === syncContext.config.imageSource
-        ) {
-            newMlFile.objects = oldMlFile?.objects;
-            newMlFile.imageSource = oldMlFile.imageSource;
-            newMlFile.imageDimensions = oldMlFile.imageDimensions;
-            newMlFile.objectDetectionMethod = oldMlFile.objectDetectionMethod;
-            newMlFile.sceneDetectionMethod = oldMlFile.sceneDetectionMethod;
-            return;
-        }
-
-        newMlFile.objectDetectionMethod =
-            syncContext.objectDetectionService.method;
-        newMlFile.sceneDetectionMethod =
-            syncContext.sceneDetectionService.method;
-
-        fileContext.newDetection = true;
-        const imageBitmap = await ReaderService.getImageBitmap(
-            syncContext,
-            fileContext,
-        );
-        const objectDetections =
-            await syncContext.objectDetectionService.detectObjects(
-                imageBitmap,
-                syncContext.config.objectDetection.maxNumBoxes,
-                syncContext.config.objectDetection.minScore,
-            );
-        objectDetections.push(
-            ...(await syncContext.sceneDetectionService.detectScenes(
-                imageBitmap,
-                syncContext.config.sceneDetection.minScore,
-            )),
-        );
-        // log.info('3 TF Memory stats: ',JSON.stringify(tf.memory()));
-        // TODO: reenable faces filtering based on width
-        const detectedObjects = objectDetections?.map((detection) => {
-            return {
-                fileID: fileContext.enteFile.id,
-                detection,
-            } as DetectedObject;
-        });
-        newMlFile.objects = detectedObjects?.map((detectedObject) => ({
-            ...detectedObject,
-            id: getObjectId(detectedObject, newMlFile.imageDimensions),
-            className: detectedObject.detection.class,
-        }));
-        // ?.filter((f) =>
-        //     f.box.width > syncContext.config.faceDetection.minFaceSize
-        // );
-        log.info(
-            `object detection time taken ${fileContext.enteFile.id}`,
-            Date.now() - startTime,
-            "ms",
-        );
-
-        log.info("[MLService] Detected Objects: ", newMlFile.objects?.length);
-    }
-
-    async getAllSyncedObjectsMap(syncContext: MLSyncContext) {
-        if (syncContext.allSyncedObjectsMap) {
-            return syncContext.allSyncedObjectsMap;
-        }
-
-        syncContext.allSyncedObjectsMap = await mlIDbStorage.getAllObjectsMap();
-        return syncContext.allSyncedObjectsMap;
-    }
-
-    public async clusterThings(syncContext: MLSyncContext): Promise<Thing[]> {
-        const allObjectsMap = await this.getAllSyncedObjectsMap(syncContext);
-        const allObjects = getAllObjectsFromMap(allObjectsMap);
-        const objectClusters = new Map<string, number[]>();
-        allObjects.map((object) => {
-            if (!objectClusters.has(object.detection.class)) {
-                objectClusters.set(object.detection.class, []);
-            }
-            const objectsInCluster = objectClusters.get(object.detection.class);
-            objectsInCluster.push(object.fileID);
-        });
-        return [...objectClusters.entries()].map(([className, files], id) => ({
-            id,
-            name: className,
-            files,
-        }));
-    }
-
-    async syncThingsIndex(syncContext: MLSyncContext) {
-        const filesVersion = await mlIDbStorage.getIndexVersion("files");
-        log.info("things", await mlIDbStorage.getIndexVersion("things"));
-        if (filesVersion <= (await mlIDbStorage.getIndexVersion("things"))) {
-            log.info(
-                "[MLService] Skipping people index as already synced to latest version",
-            );
-            return;
-        }
-
-        const things = await this.clusterThings(syncContext);
-
-        if (!things || things.length < 1) {
-            return;
-        }
-
-        await mlIDbStorage.clearAllThings();
-
-        for (const thing of things) {
-            await mlIDbStorage.putThing(thing);
-        }
-
-        await mlIDbStorage.setIndexVersion("things", filesVersion);
-    }
-
-    async getAllThings() {
-        return await mlIDbStorage.getAllThings();
-    }
-}
-
-export default new ObjectService();

+ 0 - 2
web/apps/photos/src/services/machineLearning/readerService.ts

@@ -16,7 +16,6 @@ class ReaderService {
             if (fileContext.imageBitmap) {
                 return fileContext.imageBitmap;
             }
-            // log.info('1 TF Memory stats: ',JSON.stringify(tf.memory()));
             if (fileContext.localFile) {
                 if (
                     fileContext.enteFile.metadata.fileType !== FILE_TYPE.IMAGE
@@ -47,7 +46,6 @@ class ReaderService {
             fileContext.newMlFile.imageSource = syncContext.config.imageSource;
             const { width, height } = fileContext.imageBitmap;
             fileContext.newMlFile.imageDimensions = { width, height };
-            // log.info('2 TF Memory stats: ',JSON.stringify(tf.memory()));
 
             return fileContext.imageBitmap;
         } catch (e) {

+ 0 - 66
web/apps/photos/src/services/machineLearning/ssdMobileNetV2Service.ts

@@ -1,66 +0,0 @@
-import log from "@/next/log";
-import * as tf from "@tensorflow/tfjs-core";
-import {
-    ObjectDetection,
-    ObjectDetectionMethod,
-    ObjectDetectionService,
-    Versioned,
-} from "types/machineLearning";
-
-import * as SSDMobileNet from "@tensorflow-models/coco-ssd";
-import { OBJECT_DETECTION_IMAGE_SIZE } from "constants/mlConfig";
-import { resizeToSquare } from "utils/image";
-
-class SSDMobileNetV2 implements ObjectDetectionService {
-    private ssdMobileNetV2Model: SSDMobileNet.ObjectDetection;
-    public method: Versioned<ObjectDetectionMethod>;
-    private ready: Promise<void>;
-
-    public constructor() {
-        this.method = {
-            value: "SSDMobileNetV2",
-            version: 1,
-        };
-    }
-
-    private async init() {
-        this.ssdMobileNetV2Model = await SSDMobileNet.load({
-            base: "mobilenet_v2",
-            modelUrl: "/models/ssdmobilenet/model.json",
-        });
-        log.info("loaded ssdMobileNetV2Model", tf.getBackend());
-    }
-
-    private async getSSDMobileNetV2Model() {
-        if (!this.ready) {
-            this.ready = this.init();
-        }
-        await this.ready;
-        return this.ssdMobileNetV2Model;
-    }
-
-    public async detectObjects(
-        image: ImageBitmap,
-        maxNumberBoxes: number,
-        minScore: number,
-    ): Promise<ObjectDetection[]> {
-        const ssdMobileNetV2Model = await this.getSSDMobileNetV2Model();
-        const resized = resizeToSquare(image, OBJECT_DETECTION_IMAGE_SIZE);
-        const tfImage = tf.browser.fromPixels(resized.image);
-        const detections = await ssdMobileNetV2Model.detect(
-            tfImage,
-            maxNumberBoxes,
-            minScore,
-        );
-        tfImage.dispose();
-        return detections;
-    }
-
-    public async dispose() {
-        const ssdMobileNetV2Model = await this.getSSDMobileNetV2Model();
-        ssdMobileNetV2Model?.dispose();
-        this.ssdMobileNetV2Model = null;
-    }
-}
-
-export default new SSDMobileNetV2();

+ 102 - 12
web/apps/photos/src/services/machineLearning/yoloFaceDetectionService.ts

@@ -1,7 +1,11 @@
+import { MAX_FACE_DISTANCE_PERCENT } from "constants/mlConfig";
 import {
-    BLAZEFACE_FACE_SIZE,
-    MAX_FACE_DISTANCE_PERCENT,
-} from "constants/mlConfig";
+    Matrix,
+    applyToPoint,
+    compose,
+    scale,
+    translate,
+} from "transformation-matrix";
 import { Dimensions } from "types/image";
 import {
     FaceDetection,
@@ -15,12 +19,6 @@ import {
     normalizePixelBetween0And1,
 } from "utils/image";
 import { newBox } from "utils/machineLearning";
-import { removeDuplicateDetections } from "utils/machineLearning/faceDetection";
-import {
-    computeTransformToBox,
-    transformBox,
-    transformPoints,
-} from "utils/machineLearning/transform";
 import { Box, Point } from "../../../thirdparty/face-api/classes";
 
 // TODO(MR): onnx-yolo
@@ -35,14 +33,12 @@ class YoloFaceDetectionService implements FaceDetectionService {
     // private onnxInferenceSession?: ort.InferenceSession;
     private onnxInferenceSession?: any;
     public method: Versioned<FaceDetectionMethod>;
-    private desiredFaceSize;
 
-    public constructor(desiredFaceSize: number = BLAZEFACE_FACE_SIZE) {
+    public constructor() {
         this.method = {
             value: "YoloFace",
             version: 1,
         };
-        this.desiredFaceSize = desiredFaceSize;
     }
 
     private async initOnnx() {
@@ -329,3 +325,97 @@ class YoloFaceDetectionService implements FaceDetectionService {
 }
 
 export default new YoloFaceDetectionService();
+
+import { euclidean } from "hdbscan";
+
+/**
+ * Removes duplicate face detections from an array of detections.
+ *
+ * This function sorts the detections by their probability in descending order, then iterates over them.
+ * For each detection, it calculates the Euclidean distance to all other detections.
+ * If the distance is less than or equal to the specified threshold (`withinDistance`), the other detection is considered a duplicate and is removed.
+ *
+ * @param detections - An array of face detections to remove duplicates from.
+ * @param withinDistance - The maximum Euclidean distance between two detections for them to be considered duplicates.
+ *
+ * @returns An array of face detections with duplicates removed.
+ */
+function removeDuplicateDetections(
+    detections: Array<FaceDetection>,
+    withinDistance: number,
+) {
+    // console.time('removeDuplicates');
+    detections.sort((a, b) => b.probability - a.probability);
+    const isSelected = new Map<number, boolean>();
+    for (let i = 0; i < detections.length; i++) {
+        if (isSelected.get(i) === false) {
+            continue;
+        }
+        isSelected.set(i, true);
+        for (let j = i + 1; j < detections.length; j++) {
+            if (isSelected.get(j) === false) {
+                continue;
+            }
+            const centeri = getDetectionCenter(detections[i]);
+            const centerj = getDetectionCenter(detections[j]);
+            const dist = euclidean(
+                [centeri.x, centeri.y],
+                [centerj.x, centerj.y],
+            );
+            if (dist <= withinDistance) {
+                isSelected.set(j, false);
+            }
+        }
+    }
+
+    const uniques: Array<FaceDetection> = [];
+    for (let i = 0; i < detections.length; i++) {
+        isSelected.get(i) && uniques.push(detections[i]);
+    }
+    // console.timeEnd('removeDuplicates');
+    return uniques;
+}
+
+function getDetectionCenter(detection: FaceDetection) {
+    const center = new Point(0, 0);
+    // TODO: first 4 landmarks is applicable to blazeface only
+    // this needs to consider eyes, nose and mouth landmarks to take center
+    detection.landmarks?.slice(0, 4).forEach((p) => {
+        center.x += p.x;
+        center.y += p.y;
+    });
+
+    return center.div({ x: 4, y: 4 });
+}
+
+function computeTransformToBox(inBox: Box, toBox: Box): Matrix {
+    return compose(
+        translate(toBox.x, toBox.y),
+        scale(toBox.width / inBox.width, toBox.height / inBox.height),
+    );
+}
+
+function transformPoint(point: Point, transform: Matrix) {
+    const txdPoint = applyToPoint(transform, point);
+    return new Point(txdPoint.x, txdPoint.y);
+}
+
+function transformPoints(points: Point[], transform: Matrix) {
+    return points?.map((p) => transformPoint(p, transform));
+}
+
+function transformBox(box: Box, transform: Matrix) {
+    const topLeft = transformPoint(box.topLeft, transform);
+    const bottomRight = transformPoint(box.bottomRight, transform);
+
+    return newBoxFromPoints(topLeft.x, topLeft.y, bottomRight.x, bottomRight.y);
+}
+
+function newBoxFromPoints(
+    left: number,
+    top: number,
+    right: number,
+    bottom: number,
+) {
+    return new Box({ left, top, right, bottom });
+}

+ 2 - 25
web/apps/photos/src/services/searchService.ts

@@ -6,7 +6,7 @@ import { t } from "i18next";
 import { Collection } from "types/collection";
 import { EntityType, LocationTag, LocationTagData } from "types/entity";
 import { EnteFile } from "types/file";
-import { Person, Thing } from "types/machineLearning";
+import { Person } from "types/machineLearning";
 import {
     ClipSearchScores,
     DateValue,
@@ -25,7 +25,6 @@ import { clipService, computeClipMatchScore } from "./clip-service";
 import { getLocalEmbeddings } from "./embeddingService";
 import { getLatestEntities } from "./entityService";
 import locationSearchService, { City } from "./locationSearchService";
-import ObjectService from "./machineLearning/objectService";
 
 const DIGITS = new Set(["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]);
 
@@ -56,7 +55,6 @@ export const getAutoCompleteSuggestions =
                 getFileNameSuggestion(searchPhrase, files),
                 getFileCaptionSuggestion(searchPhrase, files),
                 ...(await getLocationSuggestions(searchPhrase)),
-                ...(await getThingSuggestion(searchPhrase)),
             ].filter((suggestion) => !!suggestion);
 
             return convertSuggestionsToOptions(suggestions);
@@ -289,19 +287,6 @@ async function getLocationSuggestions(searchPhrase: string) {
     return [...locationTagSuggestions, ...citySearchSuggestions];
 }
 
-async function getThingSuggestion(searchPhrase: string): Promise<Suggestion[]> {
-    const thingResults = await searchThing(searchPhrase);
-
-    return thingResults.map(
-        (searchResult) =>
-            ({
-                type: SuggestionType.THING,
-                value: searchResult,
-                label: searchResult.name,
-            }) as Suggestion,
-    );
-}
-
 async function getClipSuggestion(searchPhrase: string): Promise<Suggestion> {
     try {
         if (!clipService.isPlatformSupported()) {
@@ -389,13 +374,6 @@ async function searchLocationTag(searchPhrase: string): Promise<LocationTag[]> {
     return matchedLocationTags;
 }
 
-async function searchThing(searchPhrase: string) {
-    const things = await ObjectService.getAllThings();
-    return things.filter((thing) =>
-        thing.name.toLocaleLowerCase().includes(searchPhrase),
-    );
-}
-
 async function searchClip(searchPhrase: string): Promise<ClipSearchScores> {
     const imageEmbeddings = await getLocalEmbeddings();
     const textEmbedding = await clipService.getTextEmbedding(searchPhrase);
@@ -445,10 +423,9 @@ function convertSuggestionToSearchQuery(option: Suggestion): Search {
         case SuggestionType.PERSON:
             return { person: option.value as Person };
 
-        case SuggestionType.THING:
-            return { thing: option.value as Thing };
         case SuggestionType.FILE_TYPE:
             return { fileType: option.value as FILE_TYPE };
+
         case SuggestionType.CLIP:
             return { clip: option.value as ClipSearchScores };
     }

+ 0 - 16
web/apps/photos/src/types/machineLearning/archface.ts

@@ -1,16 +0,0 @@
-export const ARCFACE_LANDMARKS = [
-    [38.2946, 51.6963],
-    [73.5318, 51.5014],
-    [56.0252, 71.7366],
-    [56.1396, 92.2848],
-] as Array<[number, number]>;
-
-export const ARCFACE_LANDMARKS_FACE_SIZE = 112;
-
-export const ARC_FACE_5_LANDMARKS = [
-    [38.2946, 51.6963],
-    [73.5318, 51.5014],
-    [56.0252, 71.7366],
-    [41.5493, 92.3655],
-    [70.7299, 92.2041],
-] as Array<[number, number]>;

+ 1 - 91
web/apps/photos/src/types/machineLearning/index.ts

@@ -1,5 +1,3 @@
-import * as tf from "@tensorflow/tfjs-core";
-
 import { DebugInfo } from "hdbscan";
 import PQueue from "p-queue";
 import { EnteFile } from "types/file";
@@ -12,21 +10,9 @@ export interface MLSyncResult {
     nSyncedFaces: number;
     nFaceClusters: number;
     nFaceNoise: number;
-    tsne?: any;
     error?: Error;
 }
 
-export interface DebugFace {
-    fileId: string;
-    // face: FaceApiResult;
-    face: AlignedFace;
-    embedding: FaceEmbedding;
-    faceImage: FaceImage;
-}
-
-export declare type FaceImage = Array<Array<Array<number>>>;
-export declare type FaceImageBlob = Blob;
-
 export declare type FaceDescriptor = Float32Array;
 
 export declare type Cluster = Array<number>;
@@ -59,14 +45,7 @@ export declare type Landmark = Point;
 
 export declare type ImageType = "Original" | "Preview";
 
-export declare type FaceDetectionMethod =
-    | "BlazeFace"
-    | "FaceApiSSD"
-    | "YoloFace";
-
-export declare type ObjectDetectionMethod = "SSDMobileNetV2";
-
-export declare type SceneDetectionMethod = "ImageScene";
+export declare type FaceDetectionMethod = "FaceApiSSD" | "YoloFace";
 
 export declare type FaceCropMethod = "ArcFace";
 
@@ -155,45 +134,15 @@ export interface Person {
     displayImageUrl?: string;
 }
 
-export interface ObjectDetection {
-    bbox: [number, number, number, number];
-    class: string;
-    score: number;
-}
-
-export interface DetectedObject {
-    fileID: number;
-    detection: ObjectDetection;
-}
-
-export interface RealWorldObject extends DetectedObject {
-    id: string;
-    className: string;
-}
-
-export interface Thing {
-    id: number;
-    name: string;
-    files: Array<number>;
-}
-
-export interface WordGroup {
-    word: string;
-    files: Array<number>;
-}
-
 export interface MlFileData {
     fileId: number;
     faces?: Face[];
-    objects?: RealWorldObject[];
     imageSource?: ImageType;
     imageDimensions?: Dimensions;
     faceDetectionMethod?: Versioned<FaceDetectionMethod>;
     faceCropMethod?: Versioned<FaceCropMethod>;
     faceAlignmentMethod?: Versioned<FaceAlignmentMethod>;
     faceEmbeddingMethod?: Versioned<FaceEmbeddingMethod>;
-    objectDetectionMethod?: Versioned<ObjectDetectionMethod>;
-    sceneDetectionMethod?: Versioned<SceneDetectionMethod>;
     mlVersion: number;
     errorCount: number;
     lastErrorMessage?: string;
@@ -203,17 +152,6 @@ export interface FaceDetectionConfig {
     method: FaceDetectionMethod;
 }
 
-export interface ObjectDetectionConfig {
-    method: ObjectDetectionMethod;
-    maxNumBoxes: number;
-    minScore: number;
-}
-
-export interface SceneDetectionConfig {
-    method: SceneDetectionMethod;
-    minScore: number;
-}
-
 export interface FaceCropConfig {
     enabled: boolean;
     method: FaceCropMethod;
@@ -263,9 +201,6 @@ export interface MLSyncConfig {
     blurDetection: BlurDetectionConfig;
     faceEmbedding: FaceEmbeddingConfig;
     faceClustering: FaceClusteringConfig;
-    objectDetection: ObjectDetectionConfig;
-    sceneDetection: SceneDetectionConfig;
-    tsne?: TSNEConfig;
     mlVersion: number;
 }
 
@@ -285,16 +220,12 @@ export interface MLSyncContext {
     faceEmbeddingService: FaceEmbeddingService;
     blurDetectionService: BlurDetectionService;
     faceClusteringService: ClusteringService;
-    objectDetectionService: ObjectDetectionService;
-    sceneDetectionService: SceneDetectionService;
 
     localFilesMap: Map<number, EnteFile>;
     outOfSyncFiles: EnteFile[];
     nSyncedFiles: number;
     nSyncedFaces: number;
     allSyncedFacesMap?: Map<number, Array<Face>>;
-    allSyncedObjectsMap?: Map<number, Array<RealWorldObject>>;
-    tsne?: any;
 
     error?: Error;
 
@@ -314,7 +245,6 @@ export interface MLSyncFileContext {
     oldMlFile?: MlFileData;
     newMlFile?: MlFileData;
 
-    tfImage?: tf.Tensor3D;
     imageBitmap?: ImageBitmap;
 
     newDetection?: boolean;
@@ -340,26 +270,6 @@ export interface FaceDetectionService {
     dispose(): Promise<void>;
 }
 
-export interface ObjectDetectionService {
-    method: Versioned<ObjectDetectionMethod>;
-    // init(): Promise<void>;
-    detectObjects(
-        image: ImageBitmap,
-        maxNumBoxes: number,
-        minScore: number,
-    ): Promise<ObjectDetection[]>;
-    dispose(): Promise<void>;
-}
-
-export interface SceneDetectionService {
-    method: Versioned<SceneDetectionMethod>;
-    // init(): Promise<void>;
-    detectScenes(
-        image: ImageBitmap,
-        minScore: number,
-    ): Promise<ObjectDetection[]>;
-}
-
 export interface FaceCropService {
     method: Versioned<FaceCropMethod>;
 

+ 1 - 7
web/apps/photos/src/types/search/index.ts

@@ -2,7 +2,7 @@ import { FILE_TYPE } from "constants/file";
 import { City } from "services/locationSearchService";
 import { LocationTagData } from "types/entity";
 import { EnteFile } from "types/file";
-import { Person, Thing, WordGroup } from "types/machineLearning";
+import { Person } from "types/machineLearning";
 import { IndexStatus } from "types/machineLearning/ui";
 
 export enum SuggestionType {
@@ -12,8 +12,6 @@ export enum SuggestionType {
     FILE_NAME = "FILE_NAME",
     PERSON = "PERSON",
     INDEX_STATUS = "INDEX_STATUS",
-    THING = "THING",
-    TEXT = "TEXT",
     FILE_CAPTION = "FILE_CAPTION",
     FILE_TYPE = "FILE_TYPE",
     CLIP = "CLIP",
@@ -34,8 +32,6 @@ export interface Suggestion {
         | number[]
         | Person
         | IndexStatus
-        | Thing
-        | WordGroup
         | LocationTagData
         | City
         | FILE_TYPE
@@ -50,8 +46,6 @@ export type Search = {
     collection?: number;
     files?: number[];
     person?: Person;
-    thing?: Thing;
-    text?: WordGroup;
     fileType?: FILE_TYPE;
     clip?: ClipSearchScores;
 };

+ 37 - 196
web/apps/photos/src/utils/machineLearning/faceAlign.ts

@@ -1,34 +1,39 @@
-import * as tf from "@tensorflow/tfjs-core";
-import { Matrix, inverse } from "ml-matrix";
+import { Matrix } from "ml-matrix";
 import { getSimilarityTransformation } from "similarity-transformation";
-import { Dimensions } from "types/image";
 import { FaceAlignment, FaceDetection } from "types/machineLearning";
-import {
-    ARCFACE_LANDMARKS,
-    ARCFACE_LANDMARKS_FACE_SIZE,
-    ARC_FACE_5_LANDMARKS,
-} from "types/machineLearning/archface";
-import { cropWithRotation, transform } from "utils/image";
-import {
-    computeRotation,
-    enlargeBox,
-    extractFaces,
-    getBoxCenter,
-    getBoxCenterPt,
-    toTensor4D,
-} from ".";
-import { Box, Point } from "../../../thirdparty/face-api/classes";
+import { Point } from "../../../thirdparty/face-api/classes";
 
-export function normalizeLandmarks(
-    landmarks: Array<[number, number]>,
-    faceSize: number,
-): Array<[number, number]> {
-    return landmarks.map((landmark) =>
-        landmark.map((p) => p / faceSize),
-    ) as Array<[number, number]>;
+const ARCFACE_LANDMARKS = [
+    [38.2946, 51.6963],
+    [73.5318, 51.5014],
+    [56.0252, 71.7366],
+    [56.1396, 92.2848],
+] as Array<[number, number]>;
+
+const ARCFACE_LANDMARKS_FACE_SIZE = 112;
+
+const ARC_FACE_5_LANDMARKS = [
+    [38.2946, 51.6963],
+    [73.5318, 51.5014],
+    [56.0252, 71.7366],
+    [41.5493, 92.3655],
+    [70.7299, 92.2041],
+] as Array<[number, number]>;
+
+export function getArcfaceAlignment(
+    faceDetection: FaceDetection,
+): FaceAlignment {
+    const landmarkCount = faceDetection.landmarks.length;
+    return getFaceAlignmentUsingSimilarityTransform(
+        faceDetection,
+        normalizeLandmarks(
+            landmarkCount === 5 ? ARC_FACE_5_LANDMARKS : ARCFACE_LANDMARKS,
+            ARCFACE_LANDMARKS_FACE_SIZE,
+        ),
+    );
 }
 
-export function getFaceAlignmentUsingSimilarityTransform(
+function getFaceAlignmentUsingSimilarityTransform(
     faceDetection: FaceDetection,
     alignedLandmarks: Array<[number, number]>,
     // alignmentMethod: Versioned<FaceAlignmentMethod>
@@ -72,175 +77,11 @@ export function getFaceAlignmentUsingSimilarityTransform(
     };
 }
 
-export function getArcfaceAlignment(
-    faceDetection: FaceDetection,
-): FaceAlignment {
-    const landmarkCount = faceDetection.landmarks.length;
-    return getFaceAlignmentUsingSimilarityTransform(
-        faceDetection,
-        normalizeLandmarks(
-            landmarkCount === 5 ? ARC_FACE_5_LANDMARKS : ARCFACE_LANDMARKS,
-            ARCFACE_LANDMARKS_FACE_SIZE,
-        ),
-    );
-}
-
-export function extractFaceImage(
-    image: tf.Tensor4D,
-    alignment: FaceAlignment,
-    faceSize: number,
-) {
-    const affineMat = new Matrix(alignment.affineMatrix);
-
-    const I = inverse(affineMat);
-
-    return tf.tidy(() => {
-        const projection = tf.tensor2d([
-            [
-                I.get(0, 0),
-                I.get(0, 1),
-                I.get(0, 2),
-                I.get(1, 0),
-                I.get(1, 1),
-                I.get(1, 2),
-                0,
-                0,
-            ],
-        ]);
-        const faceImage = tf.image.transform(
-            image,
-            projection,
-            "bilinear",
-            "constant",
-            0,
-            [faceSize, faceSize],
-        );
-        return faceImage;
-    });
-}
-
-export function tfExtractFaceImages(
-    image: tf.Tensor3D | tf.Tensor4D,
-    alignments: Array<FaceAlignment>,
-    faceSize: number,
-): tf.Tensor4D {
-    return tf.tidy(() => {
-        const tf4dFloat32Image = toTensor4D(image, "float32");
-        const faceImages = new Array<tf.Tensor3D>(alignments.length);
-        for (let i = 0; i < alignments.length; i++) {
-            faceImages[i] = tf.squeeze(
-                extractFaceImage(tf4dFloat32Image, alignments[i], faceSize),
-                [0],
-            );
-        }
-
-        return tf.stack(faceImages) as tf.Tensor4D;
-    });
-}
-
-export function getAlignedFaceBox(alignment: FaceAlignment) {
-    return new Box({
-        x: alignment.center.x - alignment.size / 2,
-        y: alignment.center.y - alignment.size / 2,
-        width: alignment.size,
-        height: alignment.size,
-    }).round();
-}
-
-export function ibExtractFaceImage(
-    image: ImageBitmap,
-    alignment: FaceAlignment,
-    faceSize: number,
-): ImageBitmap {
-    const box = getAlignedFaceBox(alignment);
-    const faceSizeDimentions: Dimensions = {
-        width: faceSize,
-        height: faceSize,
-    };
-    return cropWithRotation(
-        image,
-        box,
-        alignment.rotation,
-        faceSizeDimentions,
-        faceSizeDimentions,
-    );
-}
-
-// Used in MLDebugViewOnly
-export function ibExtractFaceImageUsingTransform(
-    image: ImageBitmap,
-    alignment: FaceAlignment,
-    faceSize: number,
-): ImageBitmap {
-    const scaledMatrix = new Matrix(alignment.affineMatrix)
-        .mul(faceSize)
-        .to2DArray();
-    // log.info("scaledMatrix: ", scaledMatrix);
-    return transform(image, scaledMatrix, faceSize, faceSize);
-}
-
-export function ibExtractFaceImages(
-    image: ImageBitmap,
-    alignments: Array<FaceAlignment>,
+function normalizeLandmarks(
+    landmarks: Array<[number, number]>,
     faceSize: number,
-): Array<ImageBitmap> {
-    return alignments.map((alignment) =>
-        ibExtractFaceImage(image, alignment, faceSize),
-    );
-}
-
-const BLAZEFACE_LEFT_EYE_INDEX = 0;
-const BLAZEFACE_RIGHT_EYE_INDEX = 1;
-// const BLAZEFACE_NOSE_INDEX = 2;
-const BLAZEFACE_MOUTH_INDEX = 3;
-
-export function getRotatedFaceImage(
-    image: tf.Tensor3D | tf.Tensor4D,
-    faceDetection: FaceDetection,
-    padding: number = 1.5,
-): tf.Tensor4D {
-    const paddedBox = enlargeBox(faceDetection.box, padding);
-    // log.info("paddedBox", paddedBox);
-    const landmarkPoints = faceDetection.landmarks;
-
-    return tf.tidy(() => {
-        const tf4dFloat32Image = toTensor4D(image, "float32");
-        let angle = 0;
-        const leftEye = landmarkPoints[BLAZEFACE_LEFT_EYE_INDEX];
-        const rightEye = landmarkPoints[BLAZEFACE_RIGHT_EYE_INDEX];
-        const foreheadCenter = getBoxCenterPt(leftEye, rightEye);
-
-        angle = computeRotation(
-            landmarkPoints[BLAZEFACE_MOUTH_INDEX],
-            foreheadCenter,
-        ); // landmarkPoints[BLAZEFACE_NOSE_INDEX]
-        // angle = computeRotation(leftEye, rightEye);
-        // log.info('angle: ', angle);
-
-        const faceCenter = getBoxCenter(faceDetection.box);
-        // log.info('faceCenter: ', faceCenter);
-        const faceCenterNormalized: [number, number] = [
-            faceCenter.x / tf4dFloat32Image.shape[2],
-            faceCenter.y / tf4dFloat32Image.shape[1],
-        ];
-        // log.info('faceCenterNormalized: ', faceCenterNormalized);
-
-        let rotatedImage = tf4dFloat32Image;
-        if (angle !== 0) {
-            rotatedImage = tf.image.rotateWithOffset(
-                tf4dFloat32Image,
-                angle,
-                0,
-                faceCenterNormalized,
-            );
-        }
-
-        const faceImageTensor = extractFaces(
-            rotatedImage,
-            [paddedBox],
-            paddedBox.width > 224 ? 448 : 224,
-        );
-        return faceImageTensor;
-        // return tf.gather(faceImageTensor, 0);
-    });
+): Array<[number, number]> {
+    return landmarks.map((landmark) =>
+        landmark.map((p) => p / faceSize),
+    ) as Array<[number, number]>;
 }

+ 17 - 170
web/apps/photos/src/utils/machineLearning/faceCrop.ts

@@ -1,23 +1,15 @@
-import log from "@/next/log";
 import { CacheStorageService } from "@ente/shared/storage/cacheStorage";
 import { CACHES } from "@ente/shared/storage/cacheStorage/constants";
-import { getBlobFromCache } from "@ente/shared/storage/cacheStorage/helpers";
-import { compose, Matrix, scale, translate } from "transformation-matrix";
-import { BlobOptions, Dimensions } from "types/image";
+import { BlobOptions } from "types/image";
 import {
-    AlignedFace,
     FaceAlignment,
     FaceCrop,
     FaceCropConfig,
-    FaceDetection,
-    MlFileData,
     StoredFaceCrop,
 } from "types/machineLearning";
 import { cropWithRotation, imageBitmapToBlob } from "utils/image";
 import { enlargeBox } from ".";
 import { Box } from "../../../thirdparty/face-api/classes";
-import { getAlignedFaceBox } from "./faceAlign";
-import { transformBox, transformPoints } from "./transform";
 
 export function getFaceCrop(
     imageBitmap: ImageBitmap,
@@ -38,19 +30,13 @@ export function getFaceCrop(
     };
 }
 
-export async function storeFaceCropForBlob(
-    faceId: string,
-    imageBox: Box,
-    faceCropBlob: Blob,
-) {
-    const faceCropUrl = `/${faceId}`;
-    const faceCropResponse = new Response(faceCropBlob);
-    const faceCropCache = await CacheStorageService.open(CACHES.FACE_CROPS);
-    await faceCropCache.put(faceCropUrl, faceCropResponse);
-    return {
-        imageUrl: faceCropUrl,
-        imageBox: imageBox,
-    };
+function getAlignedFaceBox(alignment: FaceAlignment) {
+    return new Box({
+        x: alignment.center.x - alignment.size / 2,
+        y: alignment.center.y - alignment.size / 2,
+        width: alignment.size,
+        height: alignment.size,
+    }).round();
 }
 
 export async function storeFaceCrop(
@@ -62,156 +48,17 @@ export async function storeFaceCrop(
     return storeFaceCropForBlob(faceId, faceCrop.imageBox, faceCropBlob);
 }
 
-export async function getFaceCropBlobFromStorage(
-    storedFaceCrop: StoredFaceCrop,
-): Promise<Blob> {
-    return getBlobFromCache(CACHES.FACE_CROPS, storedFaceCrop.imageUrl);
-}
-
-export async function getFaceCropFromStorage(
-    storedFaceCrop: StoredFaceCrop,
-): Promise<FaceCrop> {
-    const faceCropBlob = await getFaceCropBlobFromStorage(storedFaceCrop);
-    const faceCropImage = await createImageBitmap(faceCropBlob);
-
-    return {
-        image: faceCropImage,
-        imageBox: storedFaceCrop.imageBox,
-    };
-}
-
-export async function removeOldFaceCrops(
-    oldMLFileData: MlFileData,
-    newMLFileData: MlFileData,
+async function storeFaceCropForBlob(
+    faceId: string,
+    imageBox: Box,
+    faceCropBlob: Blob,
 ) {
-    const newFaceCropUrls =
-        newMLFileData?.faces
-            ?.map((f) => f.crop?.imageUrl)
-            ?.filter((fc) => fc !== null && fc !== undefined) || [];
-
-    const oldFaceCropUrls =
-        oldMLFileData?.faces
-            ?.map((f) => f.crop?.imageUrl)
-            ?.filter((fc) => fc !== null && fc !== undefined) || [];
-
-    const unusedFaceCropUrls = oldFaceCropUrls.filter(
-        (oldUrl) => !newFaceCropUrls.includes(oldUrl),
-    );
-    if (!unusedFaceCropUrls || unusedFaceCropUrls.length < 1) {
-        return;
-    }
-
-    return removeFaceCropUrls(unusedFaceCropUrls);
-}
-
-export async function removeFaceCropUrls(faceCropUrls: Array<string>) {
-    log.info("Removing face crop urls: ", JSON.stringify(faceCropUrls));
+    const faceCropUrl = `/${faceId}`;
+    const faceCropResponse = new Response(faceCropBlob);
     const faceCropCache = await CacheStorageService.open(CACHES.FACE_CROPS);
-    const urlRemovalPromises = faceCropUrls?.map((url) =>
-        faceCropCache.delete(url),
-    );
-    return urlRemovalPromises && Promise.all(urlRemovalPromises);
-}
-
-export function extractFaceImageFromCrop(
-    faceCrop: FaceCrop,
-    box: Box,
-    rotation: number,
-    faceSize: number,
-): ImageBitmap {
-    const faceCropImage = faceCrop?.image;
-    let imageBox = faceCrop?.imageBox;
-    if (!faceCropImage || !imageBox) {
-        throw Error("Face crop not present");
-    }
-
-    // TODO: Have better serialization to avoid creating new object manually when calling class methods
-    imageBox = new Box(imageBox);
-    const scale = faceCropImage.width / imageBox.width;
-    const transformedBox = box
-        .shift(-imageBox.x, -imageBox.y)
-        .rescale(scale)
-        .round();
-    // log.info({ box, imageBox, faceCropImage, scale, scaledBox, scaledImageBox, shiftedBox });
-
-    const faceSizeDimentions: Dimensions = {
-        width: faceSize,
-        height: faceSize,
-    };
-    const faceImage = cropWithRotation(
-        faceCropImage,
-        transformedBox,
-        rotation,
-        faceSizeDimentions,
-        faceSizeDimentions,
-    );
-
-    return faceImage;
-}
-
-export async function ibExtractFaceImageFromCrop(
-    faceCrop: FaceCrop,
-    alignment: FaceAlignment,
-    faceSize: number,
-): Promise<ImageBitmap> {
-    const box = getAlignedFaceBox(alignment);
-
-    return extractFaceImageFromCrop(
-        faceCrop,
-        box,
-        alignment.rotation,
-        faceSize,
-    );
-}
-
-export async function ibExtractFaceImagesFromCrops(
-    faces: Array<AlignedFace>,
-    faceSize: number,
-): Promise<Array<ImageBitmap>> {
-    const faceImagePromises = faces.map(async (alignedFace) => {
-        const faceCrop = await getFaceCropFromStorage(alignedFace.crop);
-        return ibExtractFaceImageFromCrop(
-            faceCrop,
-            alignedFace.alignment,
-            faceSize,
-        );
-    });
-    return Promise.all(faceImagePromises);
-}
-
-export function transformFace(faceDetection: FaceDetection, transform: Matrix) {
+    await faceCropCache.put(faceCropUrl, faceCropResponse);
     return {
-        ...faceDetection,
-
-        box: transformBox(faceDetection.box, transform),
-        landmarks: transformPoints(faceDetection.landmarks, transform),
+        imageUrl: faceCropUrl,
+        imageBox: imageBox,
     };
 }
-
-export function transformToFaceCropDims(
-    faceCrop: FaceCrop,
-    faceDetection: FaceDetection,
-) {
-    const imageBox = new Box(faceCrop.imageBox);
-
-    const transform = compose(
-        scale(faceCrop.image.width / imageBox.width),
-        translate(-imageBox.x, -imageBox.y),
-    );
-
-    return transformFace(faceDetection, transform);
-}
-
-export function transformToImageDims(
-    faceCrop: FaceCrop,
-    faceDetection: FaceDetection,
-) {
-    const imageBox = new Box(faceCrop.imageBox);
-
-    const transform = compose(
-        translate(imageBox.x, imageBox.y),
-        scale(imageBox.width / faceCrop.image.width),
-    );
-
-    return transformFace(faceDetection, transform);
-}

+ 0 - 108
web/apps/photos/src/utils/machineLearning/faceDetection.ts

@@ -1,108 +0,0 @@
-import { euclidean } from "hdbscan";
-import { FaceDetection } from "types/machineLearning";
-import { getNearestPointIndex, newBox } from ".";
-import { Box, Point } from "../../../thirdparty/face-api/classes";
-import {
-    computeTransformToBox,
-    transformBox,
-    transformPoints,
-} from "./transform";
-
-export function transformPaddedToImage(
-    detection: FaceDetection,
-    faceImage: ImageBitmap,
-    imageBox: Box,
-    paddedBox: Box,
-) {
-    const inBox = newBox(0, 0, faceImage.width, faceImage.height);
-    imageBox.x = paddedBox.x;
-    imageBox.y = paddedBox.y;
-    const transform = computeTransformToBox(inBox, imageBox);
-
-    detection.box = transformBox(detection.box, transform);
-    detection.landmarks = transformPoints(detection.landmarks, transform);
-}
-
-export function getDetectionCenter(detection: FaceDetection) {
-    const center = new Point(0, 0);
-    // TODO: first 4 landmarks is applicable to blazeface only
-    // this needs to consider eyes, nose and mouth landmarks to take center
-    detection.landmarks?.slice(0, 4).forEach((p) => {
-        center.x += p.x;
-        center.y += p.y;
-    });
-
-    return center.div({ x: 4, y: 4 });
-}
-
-/**
- * Finds the nearest face detection from a list of detections to a specified detection.
- *
- * This function calculates the center of each detection and then finds the detection whose center is nearest to the center of the specified detection.
- * If a maximum distance is specified, only detections within that distance are considered.
- *
- * @param toDetection - The face detection to find the nearest detection to.
- * @param fromDetections - An array of face detections to search in.
- * @param maxDistance - The maximum distance between the centers of the two detections for a detection to be considered. If not specified, all detections are considered.
- *
- * @returns The nearest face detection from the list, or `undefined` if no detection is within the maximum distance.
- */
-export function getNearestDetection(
-    toDetection: FaceDetection,
-    fromDetections: Array<FaceDetection>,
-    maxDistance?: number,
-) {
-    const toCenter = getDetectionCenter(toDetection);
-    const centers = fromDetections.map((d) => getDetectionCenter(d));
-    const nearestIndex = getNearestPointIndex(toCenter, centers, maxDistance);
-
-    return nearestIndex >= 0 && fromDetections[nearestIndex];
-}
-
-/**
- * Removes duplicate face detections from an array of detections.
- *
- * This function sorts the detections by their probability in descending order, then iterates over them.
- * For each detection, it calculates the Euclidean distance to all other detections.
- * If the distance is less than or equal to the specified threshold (`withinDistance`), the other detection is considered a duplicate and is removed.
- *
- * @param detections - An array of face detections to remove duplicates from.
- * @param withinDistance - The maximum Euclidean distance between two detections for them to be considered duplicates.
- *
- * @returns An array of face detections with duplicates removed.
- */
-export function removeDuplicateDetections(
-    detections: Array<FaceDetection>,
-    withinDistance: number,
-) {
-    // console.time('removeDuplicates');
-    detections.sort((a, b) => b.probability - a.probability);
-    const isSelected = new Map<number, boolean>();
-    for (let i = 0; i < detections.length; i++) {
-        if (isSelected.get(i) === false) {
-            continue;
-        }
-        isSelected.set(i, true);
-        for (let j = i + 1; j < detections.length; j++) {
-            if (isSelected.get(j) === false) {
-                continue;
-            }
-            const centeri = getDetectionCenter(detections[i]);
-            const centerj = getDetectionCenter(detections[j]);
-            const dist = euclidean(
-                [centeri.x, centeri.y],
-                [centerj.x, centerj.y],
-            );
-            if (dist <= withinDistance) {
-                isSelected.set(j, false);
-            }
-        }
-    }
-
-    const uniques: Array<FaceDetection> = [];
-    for (let i = 0; i < detections.length; i++) {
-        isSelected.get(i) && uniques.push(detections[i]);
-    }
-    // console.timeEnd('removeDuplicates');
-    return uniques;
-}

+ 1 - 267
web/apps/photos/src/utils/machineLearning/index.ts

@@ -1,11 +1,7 @@
 import log from "@/next/log";
 import { CACHES } from "@ente/shared/storage/cacheStorage/constants";
 import { cached } from "@ente/shared/storage/cacheStorage/helpers";
-import * as tf from "@tensorflow/tfjs-core";
-import { NormalizedFace } from "blazeface-back";
 import { FILE_TYPE } from "constants/file";
-import { BLAZEFACE_FACE_SIZE } from "constants/mlConfig";
-import { euclidean } from "hdbscan";
 import PQueue from "p-queue";
 import DownloadManager from "services/download";
 import { getLocalFiles } from "services/fileService";
@@ -13,152 +9,22 @@ import { decodeLivePhoto } from "services/livePhotoService";
 import { EnteFile } from "types/file";
 import { Dimensions } from "types/image";
 import {
-    AlignedFace,
     DetectedFace,
-    DetectedObject,
     Face,
     FaceAlignment,
-    FaceImageBlob,
     MlFileData,
     Person,
-    RealWorldObject,
     Versioned,
 } from "types/machineLearning";
 import { getRenderableImage } from "utils/file";
-import { clamp, imageBitmapToBlob, warpAffineFloat32List } from "utils/image";
+import { clamp, warpAffineFloat32List } from "utils/image";
 import mlIDbStorage from "utils/storage/mlIDbStorage";
 import { Box, Point } from "../../../thirdparty/face-api/classes";
-import { ibExtractFaceImage, ibExtractFaceImages } from "./faceAlign";
-import { getFaceCropBlobFromStorage } from "./faceCrop";
-
-export function f32Average(descriptors: Float32Array[]) {
-    if (descriptors.length < 1) {
-        throw Error("f32Average: input size 0");
-    }
-
-    if (descriptors.length === 1) {
-        return descriptors[0];
-    }
-
-    const f32Size = descriptors[0].length;
-    const avg = new Float32Array(f32Size);
-
-    for (let index = 0; index < f32Size; index++) {
-        avg[index] = descriptors[0][index];
-        for (let desc = 1; desc < descriptors.length; desc++) {
-            avg[index] = avg[index] + descriptors[desc][index];
-        }
-        avg[index] = avg[index] / descriptors.length;
-    }
-
-    return avg;
-}
-
-export function isTensor(tensor: any, dim: number) {
-    return tensor instanceof tf.Tensor && tensor.shape.length === dim;
-}
-
-export function isTensor1D(tensor: any): tensor is tf.Tensor1D {
-    return isTensor(tensor, 1);
-}
-
-export function isTensor2D(tensor: any): tensor is tf.Tensor2D {
-    return isTensor(tensor, 2);
-}
-
-export function isTensor3D(tensor: any): tensor is tf.Tensor3D {
-    return isTensor(tensor, 3);
-}
-
-export function isTensor4D(tensor: any): tensor is tf.Tensor4D {
-    return isTensor(tensor, 4);
-}
-
-export function toTensor4D(
-    image: tf.Tensor3D | tf.Tensor4D,
-    dtype?: tf.DataType,
-) {
-    return tf.tidy(() => {
-        let reshapedImage: tf.Tensor4D;
-        if (isTensor3D(image)) {
-            reshapedImage = tf.expandDims(image, 0);
-        } else if (isTensor4D(image)) {
-            reshapedImage = image;
-        } else {
-            throw Error("toTensor4D only supports Tensor3D and Tensor4D input");
-        }
-        if (dtype) {
-            reshapedImage = tf.cast(reshapedImage, dtype);
-        }
-
-        return reshapedImage;
-    });
-}
-
-export function imageBitmapsToTensor4D(imageBitmaps: Array<ImageBitmap>) {
-    return tf.tidy(() => {
-        const tfImages = imageBitmaps.map((ib) => tf.browser.fromPixels(ib));
-        return tf.stack(tfImages) as tf.Tensor4D;
-    });
-}
-
-export function extractFaces(
-    image: tf.Tensor3D | tf.Tensor4D,
-    facebBoxes: Array<Box>,
-    faceSize: number,
-) {
-    return tf.tidy(() => {
-        const reshapedImage = toTensor4D(image, "float32");
-
-        const boxes = facebBoxes.map((box) => {
-            const normalized = box.rescale({
-                width: 1 / reshapedImage.shape[2],
-                height: 1 / reshapedImage.shape[1],
-            });
-
-            return [
-                normalized.top,
-                normalized.left,
-                normalized.bottom,
-                normalized.right,
-            ];
-        });
-
-        // log.info('boxes: ', boxes[0]);
-
-        const faceImagesTensor = tf.image.cropAndResize(
-            reshapedImage,
-            boxes,
-            tf.fill([boxes.length], 0, "int32"),
-            [faceSize, faceSize],
-        );
-
-        return faceImagesTensor;
-    });
-}
 
 export function newBox(x: number, y: number, width: number, height: number) {
     return new Box({ x, y, width, height });
 }
 
-export function newBoxFromPoints(
-    left: number,
-    top: number,
-    right: number,
-    bottom: number,
-) {
-    return new Box({ left, top, right, bottom });
-}
-
-export function normFaceBox(face: NormalizedFace) {
-    return newBoxFromPoints(
-        face.topLeft[0],
-        face.topLeft[1],
-        face.bottomRight[0],
-        face.bottomRight[1],
-    );
-}
-
 export function getBoxCenterPt(topLeft: Point, bottomRight: Point): Point {
     return topLeft.add(bottomRight.sub(topLeft).div(new Point(2, 2)));
 }
@@ -180,74 +46,17 @@ export function enlargeBox(box: Box, factor: number = 1.5) {
     });
 }
 
-export function normalizeRadians(angle: number) {
-    return angle - 2 * Math.PI * Math.floor((angle + Math.PI) / (2 * Math.PI));
-}
-
-export function computeRotation(point1: Point, point2: Point) {
-    const radians =
-        Math.PI / 2 - Math.atan2(-(point2.y - point1.y), point2.x - point1.x);
-    return normalizeRadians(radians);
-}
-
 export function getAllFacesFromMap(allFacesMap: Map<number, Array<Face>>) {
     const allFaces = [...allFacesMap.values()].flat();
 
     return allFaces;
 }
 
-export function getAllObjectsFromMap(
-    allObjectsMap: Map<number, Array<RealWorldObject>>,
-) {
-    return [...allObjectsMap.values()].flat();
-}
-
 export async function getLocalFile(fileId: number) {
     const localFiles = await getLocalFiles();
     return localFiles.find((f) => f.id === fileId);
 }
 
-export async function getFaceImage(
-    face: AlignedFace,
-    token: string,
-    faceSize: number = BLAZEFACE_FACE_SIZE,
-    file?: EnteFile,
-): Promise<FaceImageBlob> {
-    if (!file) {
-        file = await getLocalFile(face.fileId);
-    }
-
-    const imageBitmap = await getOriginalImageBitmap(file);
-    const faceImageBitmap = ibExtractFaceImage(
-        imageBitmap,
-        face.alignment,
-        faceSize,
-    );
-    const faceImage = imageBitmapToBlob(faceImageBitmap);
-    faceImageBitmap.close();
-    imageBitmap.close();
-
-    return faceImage;
-}
-
-export async function extractFaceImages(
-    faces: Array<AlignedFace>,
-    faceSize: number,
-    image?: ImageBitmap,
-) {
-    // if (faces.length === faces.filter((f) => f.crop).length) {
-    // return ibExtractFaceImagesFromCrops(faces, faceSize);
-    // } else
-    if (image) {
-        const faceAlignments = faces.map((f) => f.alignment);
-        return ibExtractFaceImages(image, faceAlignments, faceSize);
-    } else {
-        throw Error(
-            "Either face crops or image is required to extract face images",
-        );
-    }
-}
-
 export async function extractFaceImagesToFloat32(
     faceAlignments: Array<FaceAlignment>,
     faceSize: number,
@@ -270,10 +79,6 @@ export async function extractFaceImagesToFloat32(
     return faceData;
 }
 
-export function leftFillNum(num: number, length: number, padding: number) {
-    return num.toString().padStart(length, padding.toString());
-}
-
 export function getFaceId(detectedFace: DetectedFace, imageDims: Dimensions) {
     const xMin = clamp(
         detectedFace.detection.box.x / imageDims.width,
@@ -312,45 +117,10 @@ export function getFaceId(detectedFace: DetectedFace, imageDims: Dimensions) {
     return faceID;
 }
 
-export function getObjectId(
-    detectedObject: DetectedObject,
-    imageDims: Dimensions,
-) {
-    const imgDimPoint = new Point(imageDims.width, imageDims.height);
-    const objectCenterPoint = new Point(
-        detectedObject.detection.bbox[2] / 2,
-        detectedObject.detection.bbox[3] / 2,
-    );
-    const gridPt = objectCenterPoint
-        .mul(new Point(100, 100))
-        .div(imgDimPoint)
-        .floor()
-        .bound(0, 99);
-    const gridPaddedX = leftFillNum(gridPt.x, 2, 0);
-    const gridPaddedY = leftFillNum(gridPt.y, 2, 0);
-
-    return `${detectedObject.fileID}-${gridPaddedX}-${gridPaddedY}`;
-}
-
-export async function getTFImage(blob): Promise<tf.Tensor3D> {
-    const imageBitmap = await createImageBitmap(blob);
-    const tfImage = tf.browser.fromPixels(imageBitmap);
-    imageBitmap.close();
-
-    return tfImage;
-}
-
 export async function getImageBlobBitmap(blob: Blob): Promise<ImageBitmap> {
     return await createImageBitmap(blob);
 }
 
-// export async function getTFImageUsingJpegJS(blob: Blob): Promise<TFImageBitmap> {
-//     const imageData = jpegjs.decode(await blob.arrayBuffer());
-//     const tfImage = tf.browser.fromPixels(imageData);
-
-//     return new TFImageBitmap(undefined, tfImage);
-// }
-
 async function getOriginalFile(file: EnteFile, queue?: PQueue) {
     let fileStream;
     if (queue) {
@@ -453,21 +223,6 @@ export async function getUnidentifiedFaces(
     );
 }
 
-export async function getFaceCropBlobs(
-    faces: Array<Face>,
-): Promise<Array<FaceImageBlob>> {
-    const faceCrops = faces
-        .map((f) => f.crop)
-        .filter((faceCrop) => faceCrop !== null && faceCrop !== undefined);
-
-    return (
-        faceCrops &&
-        Promise.all(
-            faceCrops.map((faceCrop) => getFaceCropBlobFromStorage(faceCrop)),
-        )
-    );
-}
-
 export async function getAllPeople(limit: number = undefined) {
     let people: Array<Person> = await mlIDbStorage.getAllPeople();
     // await mlPeopleStore.iterate<Person, void>((person) => {
@@ -531,27 +286,6 @@ export function areFaceIdsSame(ofFaces: Array<Face>, toFaces: Array<Face>) {
     );
 }
 
-export function getNearestPointIndex(
-    toPoint: Point,
-    fromPoints: Array<Point>,
-    maxDistance?: number,
-) {
-    const dists = fromPoints.map((point, i) => ({
-        index: i,
-        point: point,
-        distance: euclidean([point.x, point.y], [toPoint.x, toPoint.y]),
-    }));
-    const nearest = findFirstIfSorted(
-        dists,
-        (a, b) => Math.abs(a.distance) - Math.abs(b.distance),
-    );
-
-    // log.info('Nearest dist: ', nearest.distance, maxDistance);
-    if (!maxDistance || nearest.distance <= maxDistance) {
-        return nearest.index;
-    }
-}
-
 export function logQueueStats(queue: PQueue, name: string) {
     queue.on("active", () =>
         log.info(

+ 0 - 33
web/apps/photos/src/utils/machineLearning/transform.ts

@@ -1,33 +0,0 @@
-import { newBoxFromPoints } from ".";
-import { Box, Point } from "../../../thirdparty/face-api/classes";
-
-import {
-    Matrix,
-    applyToPoint,
-    compose,
-    scale,
-    translate,
-} from "transformation-matrix";
-
-export function computeTransformToBox(inBox: Box, toBox: Box): Matrix {
-    return compose(
-        translate(toBox.x, toBox.y),
-        scale(toBox.width / inBox.width, toBox.height / inBox.height),
-    );
-}
-
-export function transformPoint(point: Point, transform: Matrix) {
-    const txdPoint = applyToPoint(transform, point);
-    return new Point(txdPoint.x, txdPoint.y);
-}
-
-export function transformPoints(points: Point[], transform: Matrix) {
-    return points?.map((p) => transformPoint(p, transform));
-}
-
-export function transformBox(box: Box, transform: Matrix) {
-    const topLeft = transformPoint(box.topLeft, transform);
-    const bottomRight = transformPoint(box.bottomRight, transform);
-
-    return newBoxFromPoints(topLeft.x, topLeft.y, bottomRight.x, bottomRight.y);
-}

+ 9 - 39
web/apps/photos/src/utils/storage/mlIDbStorage.ts

@@ -15,14 +15,7 @@ import {
     openDB,
 } from "idb";
 import isElectron from "is-electron";
-import {
-    Face,
-    MLLibraryData,
-    MlFileData,
-    Person,
-    RealWorldObject,
-    Thing,
-} from "types/machineLearning";
+import { Face, MLLibraryData, MlFileData, Person } from "types/machineLearning";
 import { IndexStatus } from "types/machineLearning/ui";
 
 interface Config {}
@@ -42,9 +35,11 @@ interface MLDb extends DBSchema {
         key: number;
         value: Person;
     };
+    // Unused, we only retain this is the schema so that we can delete it during
+    // migration.
     things: {
         key: number;
-        value: Thing;
+        value: unknown;
     };
     versions: {
         key: string;
@@ -72,7 +67,7 @@ class MLIDbStorage {
     }
 
     private openDB(): Promise<IDBPDatabase<MLDb>> {
-        return openDB<MLDb>(MLDATA_DB_NAME, 3, {
+        return openDB<MLDb>(MLDATA_DB_NAME, 4, {
             terminated: async () => {
                 log.error("ML Indexed DB terminated");
                 this._db = undefined;
@@ -128,6 +123,10 @@ class MLIDbStorage {
                         .objectStore("configs")
                         .add(DEFAULT_ML_SEARCH_CONFIG, ML_SEARCH_CONFIG_NAME);
                 }
+                if (oldVersion < 4) {
+                    db.deleteObjectStore("things");
+                }
+
                 log.info(
                     `Ml DB upgraded to version: ${newVersion} from version: ${oldVersion}`,
                 );
@@ -299,21 +298,6 @@ class MLIDbStorage {
         log.info("updateFaces", Date.now() - startTime, "ms");
     }
 
-    public async getAllObjectsMap() {
-        const startTime = Date.now();
-        const db = await this.db;
-        const allFiles = await db.getAll("files");
-        const allObjectsMap = new Map<number, Array<RealWorldObject>>();
-        allFiles.forEach(
-            (mlFileData) =>
-                mlFileData.objects &&
-                allObjectsMap.set(mlFileData.fileId, mlFileData.objects),
-        );
-        log.info("allObjectsMap", Date.now() - startTime, "ms");
-
-        return allObjectsMap;
-    }
-
     public async getPerson(id: number) {
         const db = await this.db;
         return db.get("people", id);
@@ -334,20 +318,6 @@ class MLIDbStorage {
         return db.clear("people");
     }
 
-    public async getAllThings() {
-        const db = await this.db;
-        return db.getAll("things");
-    }
-    public async putThing(thing: Thing) {
-        const db = await this.db;
-        return db.put("things", thing);
-    }
-
-    public async clearAllThings() {
-        const db = await this.db;
-        return db.clear("things");
-    }
-
     public async getIndexVersion(index: string) {
         const db = await this.db;
         return db.get("versions", index);

+ 0 - 8
web/apps/photos/src/worker/search.worker.ts

@@ -57,14 +57,6 @@ function isSearchedFile(file: EnteFile, search: Search) {
     if (search?.person) {
         return search.person.files.indexOf(file.id) !== -1;
     }
-
-    if (search?.thing) {
-        return search.thing.files.indexOf(file.id) !== -1;
-    }
-
-    if (search?.text) {
-        return search.text.files.indexOf(file.id) !== -1;
-    }
     if (typeof search?.fileType !== "undefined") {
         return search.fileType === file.metadata.fileType;
     }

+ 9 - 2
web/apps/photos/thirdparty/face-api/classes/Box.ts

@@ -1,4 +1,3 @@
-import { isDimensions, isValidNumber } from '../utils';
 import { IBoundingBox } from './BoundingBox';
 import { IDimensions } from './Dimensions';
 import { Point } from './Point';
@@ -172,4 +171,12 @@ export class Box<BoxType = any> implements IBoundingBox, IRect {
       bottom: this.bottom + (region.bottom * this.height)
     }).toSquare().round()
   }
-}
+}
+
+export function isValidNumber(num: any) {
+  return !!num && num !== Infinity && num !== -Infinity && !isNaN(num) || num === 0
+}
+
+export function isDimensions(obj: any): boolean {
+    return obj && obj.width && obj.height
+}

+ 2 - 2
web/apps/photos/thirdparty/face-api/classes/Dimensions.ts

@@ -1,4 +1,4 @@
-import { isValidNumber } from '../utils';
+import { isValidNumber } from './Box';
 
 export interface IDimensions {
   width: number
@@ -25,4 +25,4 @@ export class Dimensions implements IDimensions {
   public reverse(): Dimensions {
     return new Dimensions(1 / this.width, 1 / this.height)
   }
-}
+}

+ 0 - 63
web/apps/photos/thirdparty/face-api/utils/index.ts

@@ -1,63 +0,0 @@
-import * as tf from '@tensorflow/tfjs-core';
-
-import { Point } from '../classes';
-import { Dimensions, IDimensions } from '../classes/Dimensions';
-
-export function isTensor(tensor: any, dim: number) {
-  return tensor instanceof tf.Tensor && tensor.shape.length === dim
-}
-
-export function isTensor1D(tensor: any): tensor is tf.Tensor1D {
-  return isTensor(tensor, 1)
-}
-
-export function isTensor2D(tensor: any): tensor is tf.Tensor2D {
-  return isTensor(tensor, 2)
-}
-
-export function isTensor3D(tensor: any): tensor is tf.Tensor3D {
-  return isTensor(tensor, 3)
-}
-
-export function isTensor4D(tensor: any): tensor is tf.Tensor4D {
-  return isTensor(tensor, 4)
-}
-
-export function isFloat(num: number) {
-  return num % 1 !== 0
-}
-
-export function isEven(num: number) {
-  return num % 2 === 0
-}
-
-export function round(num: number, prec: number = 2) {
-  const f = Math.pow(10, prec)
-  return Math.floor(num * f) / f
-}
-
-export function isDimensions(obj: any): boolean {
-  return obj && obj.width && obj.height
-}
-
-export function computeReshapedDimensions({ width, height }: IDimensions, inputSize: number) {
-  const scale = inputSize / Math.max(height, width)
-  return new Dimensions(Math.round(width * scale), Math.round(height * scale))
-}
-
-export function getCenterPoint(pts: Point[]): Point {
-  return pts.reduce((sum, pt) => sum.add(pt), new Point(0, 0))
-    .div(new Point(pts.length, pts.length))
-}
-
-export function range(num: number, start: number, step: number): number[] {
-  return Array(num).fill(0).map((_, i) => start + (i * step))
-}
-
-export function isValidNumber(num: any) {
-  return !!num && num !== Infinity && num !== -Infinity && !isNaN(num) || num === 0
-}
-
-export function isValidProbablitiy(num: any) {
-  return isValidNumber(num) && 0 <= num && num <= 1.0
-}

+ 0 - 93
web/yarn.lock

@@ -954,52 +954,6 @@
   dependencies:
     tslib "^2.4.0"
 
-"@tensorflow-models/coco-ssd@^2.2.2":
-  version "2.2.3"
-  resolved "https://registry.yarnpkg.com/@tensorflow-models/coco-ssd/-/coco-ssd-2.2.3.tgz#3825286569076d6788199c9cb89fb2fa31f7d2f2"
-  integrity sha512-iCLGktG/XhHbP6h2FWxqCKMp/Px0lCp6MZU1fjNhjDHeaWEC9G7S7cZrnPXsfH+NewCM53YShlrHnknxU3SQig==
-
-"@tensorflow/tfjs-backend-cpu@4.17.0", "@tensorflow/tfjs-backend-cpu@^4.10.0":
-  version "4.17.0"
-  resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-4.17.0.tgz#b0c495de686cf700f2ae1f6d8bc2eb6f1964d250"
-  integrity sha512-2VSCHnX9qhYTjw9HiVwTBSnRVlntKXeBlK7aSVsmZfHGwWE2faErTtO7bWmqNqw0U7gyznJbVAjlow/p+0RNGw==
-  dependencies:
-    "@types/seedrandom" "^2.4.28"
-    seedrandom "^3.0.5"
-
-"@tensorflow/tfjs-backend-webgl@^4.9.0":
-  version "4.17.0"
-  resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-4.17.0.tgz#7d540a92343582d37d2cdf9509060598a19cd17a"
-  integrity sha512-CC5GsGECCd7eYAUaKq0XJ48FjEZdgXZWPxgUYx4djvfUx5fQPp35hCSP9w/k463jllBMbjl2tKRg8u7Ia/LYzg==
-  dependencies:
-    "@tensorflow/tfjs-backend-cpu" "4.17.0"
-    "@types/offscreencanvas" "~2019.3.0"
-    "@types/seedrandom" "^2.4.28"
-    seedrandom "^3.0.5"
-
-"@tensorflow/tfjs-converter@^4.10.0":
-  version "4.17.0"
-  resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-converter/-/tfjs-converter-4.17.0.tgz#f4407bd53d5e300b05ed0b0f068506bc50c956b0"
-  integrity sha512-qFxIjPfomCuTrYxsFjtKbi3QfdmTTCWo+RvqD64oCMS0sjp7sUDNhJyKDoLx6LZhXlwXpHIVDJctLMRMwet0Zw==
-
-"@tensorflow/tfjs-core@^4.10.0":
-  version "4.17.0"
-  resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-core/-/tfjs-core-4.17.0.tgz#1ea128555a4d197aed417d70461fcbc7eaec635f"
-  integrity sha512-v9Q5430EnRpyhWNd9LVgXadciKvxLiq+sTrLKRowh26BHyAsams4tZIgX3lFKjB7b90p+FYifVMcqLTTHgjGpQ==
-  dependencies:
-    "@types/long" "^4.0.1"
-    "@types/offscreencanvas" "~2019.7.0"
-    "@types/seedrandom" "^2.4.28"
-    "@webgpu/types" "0.1.38"
-    long "4.0.0"
-    node-fetch "~2.6.1"
-    seedrandom "^3.0.5"
-
-"@tensorflow/tfjs-tflite@0.0.1-alpha.7":
-  version "0.0.1-alpha.7"
-  resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-tflite/-/tfjs-tflite-0.0.1-alpha.7.tgz#647c088689131fee424b7ae0bb9b7fdc74a61475"
-  integrity sha512-aOmmEC/AHzfc/u1Q6ccY6Kr7CfNwjonqyTGVU1OqlQGDrH2IopcCjNSZdatJIB6J2RxlBs979JilCOUpK1LXng==
-
 "@tokenizer/token@^0.3.0":
   version "0.3.0"
   resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276"
@@ -1098,11 +1052,6 @@
   resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8"
   integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==
 
-"@types/long@^4.0.1":
-  version "4.0.2"
-  resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a"
-  integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==
-
 "@types/node@*":
   version "20.11.20"
   resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.20.tgz#f0a2aee575215149a62784210ad88b3a34843659"
@@ -1110,16 +1059,6 @@
   dependencies:
     undici-types "~5.26.4"
 
-"@types/offscreencanvas@~2019.3.0":
-  version "2019.3.0"
-  resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz#3336428ec7e9180cf4566dfea5da04eb586a6553"
-  integrity sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==
-
-"@types/offscreencanvas@~2019.7.0":
-  version "2019.7.3"
-  resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz#90267db13f64d6e9ccb5ae3eac92786a7c77a516"
-  integrity sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==
-
 "@types/parse-json@^4.0.0":
   version "4.0.2"
   resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239"
@@ -1195,11 +1134,6 @@
   resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff"
   integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==
 
-"@types/seedrandom@^2.4.28":
-  version "2.4.34"
-  resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-2.4.34.tgz#c725cd0fc0442e2d3d0e5913af005686ffb7eb99"
-  integrity sha512-ytDiArvrn/3Xk6/vtylys5tlY6eo7Ane0hvcx++TKo6RxQXuVfW0AF/oeWqAj9dN29SyhtawuXstgmPlwNcv/A==
-
 "@types/semver@^7.5.0":
   version "7.5.7"
   resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.7.tgz#326f5fdda70d13580777bcaa1bc6fa772a5aef0e"
@@ -1363,11 +1297,6 @@
     "@types/babel__core" "^7.20.5"
     react-refresh "^0.14.0"
 
-"@webgpu/types@0.1.38":
-  version "0.1.38"
-  resolved "https://registry.yarnpkg.com/@webgpu/types/-/types-0.1.38.tgz#6fda4b410edc753d3213c648320ebcf319669020"
-  integrity sha512-7LrhVKz2PRh+DD7+S+PVaFd5HxaWQvoMqBbsV9fNJO1pjUs1P8bM2vQVNfk+3URTqbuTI7gkXi0rfsN0IadoBA==
-
 acorn-jsx@^5.3.2:
   version "5.3.2"
   resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
@@ -1630,11 +1559,6 @@ bip39@^3.0.4:
   dependencies:
     "@noble/hashes" "^1.2.0"
 
-blazeface-back@^0.0.9:
-  version "0.0.9"
-  resolved "https://registry.yarnpkg.com/blazeface-back/-/blazeface-back-0.0.9.tgz#a8a26a0022950eb21136693f2fca3c52315ad2a4"
-  integrity sha512-t0i5V117j074d7d7mlLaRq9n/bYchXcSEgpWVbGGloV68A6Jn22t4SNoEC3t+MOsU8H+eXoDv2/6+JsqActM1g==
-
 brace-expansion@^1.1.7:
   version "1.1.11"
   resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
@@ -3445,11 +3369,6 @@ lodash@^4.17.21:
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
   integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
 
-long@4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
-  integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==
-
 loose-envify@^1.1.0, loose-envify@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
@@ -3621,13 +3540,6 @@ node-fetch@^2.6.1:
   dependencies:
     whatwg-url "^5.0.0"
 
-node-fetch@~2.6.1:
-  version "2.6.13"
-  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.13.tgz#a20acbbec73c2e09f9007de5cda17104122e0010"
-  integrity sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==
-  dependencies:
-    whatwg-url "^5.0.0"
-
 node-releases@^2.0.14:
   version "2.0.14"
   resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b"
@@ -4251,11 +4163,6 @@ scheduler@^0.23.0:
   dependencies:
     loose-envify "^1.1.0"
 
-seedrandom@^3.0.5:
-  version "3.0.5"
-  resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7"
-  integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==
-
 semver@^6.3.1:
   version "6.3.1"
   resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"

Some files were not shown because too many files changed in this diff