diff --git a/cocoSSDModel/classes.json b/cocoSSDModel/classes.json new file mode 100644 index 0000000000..af8423983c --- /dev/null +++ b/cocoSSDModel/classes.json @@ -0,0 +1 @@ +[{"name":"/m/01g317","id":1,"displayName":"person"},{"name":"/m/0199g","id":2,"displayName":"bicycle"},{"name":"/m/0k4j","id":3,"displayName":"car"},{"name":"/m/04_sv","id":4,"displayName":"motorcycle"},{"name":"/m/05czz6l","id":5,"displayName":"airplane"},{"name":"/m/01bjv","id":6,"displayName":"bus"},{"name":"/m/07jdr","id":7,"displayName":"train"},{"name":"/m/07r04","id":8,"displayName":"truck"},{"name":"/m/019jd","id":9,"displayName":"boat"},{"name":"/m/015qff","id":10,"displayName":"traffic light"},{"name":"/m/01pns0","id":11,"displayName":"fire hydrant"},{"name":"/m/02pv19","id":13,"displayName":"stop sign"},{"name":"/m/015qbp","id":14,"displayName":"parking meter"},{"name":"/m/0cvnqh","id":15,"displayName":"bench"},{"name":"/m/015p6","id":16,"displayName":"bird"},{"name":"/m/01yrx","id":17,"displayName":"cat"},{"name":"/m/0bt9lr","id":18,"displayName":"dog"},{"name":"/m/03k3r","id":19,"displayName":"horse"},{"name":"/m/07bgp","id":20,"displayName":"sheep"},{"name":"/m/01xq0k1","id":21,"displayName":"cow"},{"name":"/m/0bwd_0j","id":22,"displayName":"elephant"},{"name":"/m/01dws","id":23,"displayName":"bear"},{"name":"/m/0898b","id":24,"displayName":"zebra"},{"name":"/m/03bk1","id":25,"displayName":"giraffe"},{"name":"/m/01940j","id":27,"displayName":"backpack"},{"name":"/m/0hnnb","id":28,"displayName":"umbrella"},{"name":"/m/080hkjn","id":31,"displayName":"handbag"},{"name":"/m/01rkbr","id":32,"displayName":"tie"},{"name":"/m/01s55n","id":33,"displayName":"suitcase"},{"name":"/m/02wmf","id":34,"displayName":"frisbee"},{"name":"/m/071p9","id":35,"displayName":"skis"},{"name":"/m/06__v","id":36,"displayName":"snowboard"},{"name":"/m/018xm","id":37,"displayName":"sports ball"},{"name":"/m/02zt3","id":38,"displayName":"kite"},{"name":"/m/03g8mr","id":39,"displayName":"baseball bat"},{"name":"/m/03grzl","id":40,"displayName":"baseball glove"},{"name":"/m/06_fw","id":41,"displayName":"skateboard"},{"name":"/m/019w40","id":42,"displayName":"surfboard"},{"name":"/m/0dv9c","id":43,"displayName":"tennis racket"},{"name":"/m/04dr76w","id":44,"displayName":"bottle"},{"name":"/m/09tvcd","id":46,"displayName":"wine glass"},{"name":"/m/08gqpm","id":47,"displayName":"cup"},{"name":"/m/0dt3t","id":48,"displayName":"fork"},{"name":"/m/04ctx","id":49,"displayName":"knife"},{"name":"/m/0cmx8","id":50,"displayName":"spoon"},{"name":"/m/04kkgm","id":51,"displayName":"bowl"},{"name":"/m/09qck","id":52,"displayName":"banana"},{"name":"/m/014j1m","id":53,"displayName":"apple"},{"name":"/m/0l515","id":54,"displayName":"sandwich"},{"name":"/m/0cyhj_","id":55,"displayName":"orange"},{"name":"/m/0hkxq","id":56,"displayName":"broccoli"},{"name":"/m/0fj52s","id":57,"displayName":"carrot"},{"name":"/m/01b9xk","id":58,"displayName":"hot dog"},{"name":"/m/0663v","id":59,"displayName":"pizza"},{"name":"/m/0jy4k","id":60,"displayName":"donut"},{"name":"/m/0fszt","id":61,"displayName":"cake"},{"name":"/m/01mzpv","id":62,"displayName":"chair"},{"name":"/m/02crq1","id":63,"displayName":"couch"},{"name":"/m/03fp41","id":64,"displayName":"potted plant"},{"name":"/m/03ssj5","id":65,"displayName":"bed"},{"name":"/m/04bcr3","id":67,"displayName":"dining table"},{"name":"/m/09g1w","id":70,"displayName":"toilet"},{"name":"/m/07c52","id":72,"displayName":"tv"},{"name":"/m/01c648","id":73,"displayName":"laptop"},{"name":"/m/020lf","id":74,"displayName":"mouse"},{"name":"/m/0qjjc","id":75,"displayName":"remote"},{"name":"/m/01m2v","id":76,"displayName":"keyboard"},{"name":"/m/050k8","id":77,"displayName":"cell phone"},{"name":"/m/0fx9l","id":78,"displayName":"microwave"},{"name":"/m/029bxz","id":79,"displayName":"oven"},{"name":"/m/01k6s3","id":80,"displayName":"toaster"},{"name":"/m/0130jx","id":81,"displayName":"sink"},{"name":"/m/040b_t","id":82,"displayName":"refrigerator"},{"name":"/m/0bt_c3","id":84,"displayName":"book"},{"name":"/m/01x3z","id":85,"displayName":"clock"},{"name":"/m/02s195","id":86,"displayName":"vase"},{"name":"/m/01lsmm","id":87,"displayName":"scissors"},{"name":"/m/0kmg4","id":88,"displayName":"teddy bear"},{"name":"/m/03wvsk","id":89,"displayName":"hair drier"},{"name":"/m/012xff","id":90,"displayName":"toothbrush"}] \ No newline at end of file diff --git a/cocoSSDModel/group1-shard1of5 b/cocoSSDModel/group1-shard1of5 new file mode 100644 index 0000000000..1752229434 Binary files /dev/null and b/cocoSSDModel/group1-shard1of5 differ diff --git a/cocoSSDModel/group1-shard2of5 b/cocoSSDModel/group1-shard2of5 new file mode 100644 index 0000000000..d04bc12267 Binary files /dev/null and b/cocoSSDModel/group1-shard2of5 differ diff --git a/cocoSSDModel/group1-shard3of5 b/cocoSSDModel/group1-shard3of5 new file mode 100644 index 0000000000..243a13e5f0 Binary files /dev/null and b/cocoSSDModel/group1-shard3of5 differ diff --git a/cocoSSDModel/group1-shard4of5 b/cocoSSDModel/group1-shard4of5 new file mode 100644 index 0000000000..5ddf602e67 Binary files /dev/null and b/cocoSSDModel/group1-shard4of5 differ diff --git a/cocoSSDModel/group1-shard5of5 b/cocoSSDModel/group1-shard5of5 new file mode 100644 index 0000000000..613e32cec4 Binary files /dev/null and b/cocoSSDModel/group1-shard5of5 differ diff --git a/cocoSSDModel/model.json b/cocoSSDModel/model.json new file mode 100644 index 0000000000..80158f3514 --- /dev/null +++ b/cocoSSDModel/model.json @@ -0,0 +1,21549 @@ +{ + "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": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1917" + }, + { + "size": "4" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "Postprocessor/ExpandDims", + "op": "Const" + }, + { + "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_4_recip", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 3 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [ + { + "size": "2" + } + ] + } + } + } + }, + "name": "Postprocessor/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": "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": "3" + }, + { + "size": "3" + }, + { + "size": "576" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_0/BoxEncodingPredictor_depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "576" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_0/BoxEncodingPredictor_depthwise/BatchNorm/gamma", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "576" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_0/BoxEncodingPredictor_depthwise/BatchNorm/beta", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "576" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_0/BoxEncodingPredictor_depthwise/BatchNorm/moving_mean", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "576" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_0/BoxEncodingPredictor_depthwise/BatchNorm/moving_variance", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "576" + }, + { + "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": "3" + }, + { + "size": "3" + }, + { + "size": "1280" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_1/BoxEncodingPredictor_depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1280" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_1/BoxEncodingPredictor_depthwise/BatchNorm/gamma", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1280" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_1/BoxEncodingPredictor_depthwise/BatchNorm/beta", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1280" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_1/BoxEncodingPredictor_depthwise/BatchNorm/moving_mean", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1280" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_1/BoxEncodingPredictor_depthwise/BatchNorm/moving_variance", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "1280" + }, + { + "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": "3" + }, + { + "size": "3" + }, + { + "size": "512" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_2/BoxEncodingPredictor_depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 1 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "512" + } + ] + } + } + } + }, + "name": "BoxPredictor_2/BoxEncodingPredictor_depthwise/BatchNorm/gamma", + "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": "BoxPredictor_2/BoxEncodingPredictor_depthwise/BatchNorm/beta", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 1 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "512" + } + ] + } + } + } + }, + "name": "BoxPredictor_2/BoxEncodingPredictor_depthwise/BatchNorm/moving_mean", + "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": "BoxPredictor_2/BoxEncodingPredictor_depthwise/BatchNorm/moving_variance", + "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": { + "dtype": { + "type": 1 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "3" + }, + { + "size": "3" + }, + { + "size": "256" + }, + { + "size": "1" + } + ] + } + } + } + }, + "name": "BoxPredictor_3/BoxEncodingPredictor_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": "BoxPredictor_3/BoxEncodingPredictor_depthwise/BatchNorm/gamma", + "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": "BoxPredictor_3/BoxEncodingPredictor_depthwise/BatchNorm/beta", + "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": "BoxPredictor_3/BoxEncodingPredictor_depthwise/BatchNorm/moving_mean", + "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": "BoxPredictor_3/BoxEncodingPredictor_depthwise/BatchNorm/moving_variance", + "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": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "24" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "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": "3" + }, + { + "size": "3" + }, + { + "size": "256" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_4/BoxEncodingPredictor_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": "BoxPredictor_4/BoxEncodingPredictor_depthwise/BatchNorm/gamma", + "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": "BoxPredictor_4/BoxEncodingPredictor_depthwise/BatchNorm/beta", + "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": "BoxPredictor_4/BoxEncodingPredictor_depthwise/BatchNorm/moving_mean", + "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": "BoxPredictor_4/BoxEncodingPredictor_depthwise/BatchNorm/moving_variance", + "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": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "24" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_4/BoxEncodingPredictor/biases", + "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": "BoxPredictor_5/BoxEncodingPredictor_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": "BoxPredictor_5/BoxEncodingPredictor_depthwise/BatchNorm/gamma", + "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": "BoxPredictor_5/BoxEncodingPredictor_depthwise/BatchNorm/beta", + "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": "BoxPredictor_5/BoxEncodingPredictor_depthwise/BatchNorm/moving_mean", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 1 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "128" + } + ] + } + } + } + }, + "name": "BoxPredictor_5/BoxEncodingPredictor_depthwise/BatchNorm/moving_variance", + "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": "24" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "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": "3" + }, + { + "size": "3" + }, + { + "size": "576" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_0/ClassPredictor_depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 1 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "576" + } + ] + } + } + } + }, + "name": "BoxPredictor_0/ClassPredictor_depthwise/BatchNorm/gamma", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "576" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_0/ClassPredictor_depthwise/BatchNorm/beta", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 1 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "576" + } + ] + } + } + } + }, + "name": "BoxPredictor_0/ClassPredictor_depthwise/BatchNorm/moving_mean", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "576" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_0/ClassPredictor_depthwise/BatchNorm/moving_variance", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "576" + }, + { + "size": "273" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_0/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": "273" + } + ] + } + } + } + }, + "name": "BoxPredictor_0/ClassPredictor/biases", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [ + 1083 + ], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [] + } + } + }, + "dtype": { + "type": 3 + } + }, + "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": "3" + }, + { + "size": "3" + }, + { + "size": "1280" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_1/ClassPredictor_depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1280" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_1/ClassPredictor_depthwise/BatchNorm/gamma", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1280" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_1/ClassPredictor_depthwise/BatchNorm/beta", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1280" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_1/ClassPredictor_depthwise/BatchNorm/moving_mean", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1280" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_1/ClassPredictor_depthwise/BatchNorm/moving_variance", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1" + }, + { + "size": "1" + }, + { + "size": "1280" + }, + { + "size": "546" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_1/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_1/ClassPredictor/biases", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [ + 600 + ], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "BoxPredictor_1/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": "3" + }, + { + "size": "3" + }, + { + "size": "512" + }, + { + "size": "1" + } + ] + } + } + } + }, + "name": "BoxPredictor_2/ClassPredictor_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": "BoxPredictor_2/ClassPredictor_depthwise/BatchNorm/gamma", + "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": "BoxPredictor_2/ClassPredictor_depthwise/BatchNorm/beta", + "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": "BoxPredictor_2/ClassPredictor_depthwise/BatchNorm/moving_mean", + "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": "BoxPredictor_2/ClassPredictor_depthwise/BatchNorm/moving_variance", + "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": { + "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": "BoxPredictor_3/ClassPredictor_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": "BoxPredictor_3/ClassPredictor_depthwise/BatchNorm/gamma", + "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": "BoxPredictor_3/ClassPredictor_depthwise/BatchNorm/beta", + "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": "BoxPredictor_3/ClassPredictor_depthwise/BatchNorm/moving_mean", + "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": "BoxPredictor_3/ClassPredictor_depthwise/BatchNorm/moving_variance", + "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_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": "3" + }, + { + "size": "3" + }, + { + "size": "256" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_4/ClassPredictor_depthwise/depthwise_weights", + "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": "BoxPredictor_4/ClassPredictor_depthwise/BatchNorm/gamma", + "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": "BoxPredictor_4/ClassPredictor_depthwise/BatchNorm/beta", + "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": "BoxPredictor_4/ClassPredictor_depthwise/BatchNorm/moving_mean", + "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": "BoxPredictor_4/ClassPredictor_depthwise/BatchNorm/moving_variance", + "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": "3" + }, + { + "size": "3" + }, + { + "size": "128" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "BoxPredictor_5/ClassPredictor_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": "BoxPredictor_5/ClassPredictor_depthwise/BatchNorm/gamma", + "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": "BoxPredictor_5/ClassPredictor_depthwise/BatchNorm/beta", + "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": "BoxPredictor_5/ClassPredictor_depthwise/BatchNorm/moving_mean", + "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": "BoxPredictor_5/ClassPredictor_depthwise/BatchNorm/moving_variance", + "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": "546" + } + ] + } + } + } + }, + "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": [ + { + "size": "160" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_15/project/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": "160" + }, + { + "size": "960" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_15/expand/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "960" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_15/expand/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": "960" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_15/depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "960" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_15/depthwise/BatchNorm/batchnorm/mul", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "960" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_15/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": "960" + }, + { + "size": "160" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_15/project/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "160" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_14/project/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": "160" + }, + { + "size": "960" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_14/expand/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "960" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_14/expand/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": "960" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_14/depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "960" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_14/depthwise/BatchNorm/batchnorm/mul", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "960" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_14/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": "960" + }, + { + "size": "160" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_14/project/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "96" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_12/project/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": "96" + }, + { + "size": "576" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_12/expand/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "576" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_12/expand/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": "576" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_12/depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "576" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_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": "576" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_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": "576" + }, + { + "size": "96" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_12/project/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": "96" + } + ] + } + } + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_11/project/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": "96" + }, + { + "size": "576" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_11/expand/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": "576" + } + ] + } + } + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_11/expand/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": "576" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_11/depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "576" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_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": "576" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_11/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": "576" + }, + { + "size": "96" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_11/project/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": "64" + } + ] + } + } + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_9/project/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": "384" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_9/expand/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "384" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_9/expand/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": "384" + }, + { + "size": "1" + } + ] + } + } + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_9/depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "384" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_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": "384" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_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": "384" + }, + { + "size": "64" + } + ] + } + } + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_9/project/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/MobilenetV2/expanded_conv_8/project/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": "384" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_8/expand/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "384" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_8/expand/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": "384" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_8/depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "384" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_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": "384" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_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": "384" + }, + { + "size": "64" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_8/project/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/MobilenetV2/expanded_conv_7/project/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": "384" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_7/expand/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "384" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_7/expand/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": "384" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_7/depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "384" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_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": "384" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_7/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": "384" + }, + { + "size": "64" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_7/project/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/MobilenetV2/expanded_conv_5/project/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": "192" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_5/expand/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "192" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_5/expand/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": "192" + }, + { + "size": "1" + } + ] + } + } + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_5/depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "192" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_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": "192" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_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": "192" + }, + { + "size": "32" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_5/project/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/MobilenetV2/expanded_conv_4/project/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": "192" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_4/expand/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "192" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_4/expand/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": "192" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_4/depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "192" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_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": "192" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_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": "192" + }, + { + "size": "32" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_4/project/Conv2D/merged_input", + "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": "FeatureExtractor/MobilenetV2/expanded_conv_2/project/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": "24" + }, + { + "size": "144" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_2/expand/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "144" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_2/expand/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": "144" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_2/depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "144" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_2/depthwise/BatchNorm/batchnorm/mul", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "144" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_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": "144" + }, + { + "size": "24" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_2/project/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": [] + } + } + } + }, + "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": "Preprocessor/map/TensorArrayStack/range/start", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "Preprocessor/sub/y", + "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": "3" + }, + { + "size": "32" + } + ] + } + } + } + }, + "name": "FeatureExtractor/MobilenetV2/Conv/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/MobilenetV2/Conv/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": "32" + }, + { + "size": "1" + } + ] + } + } + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv/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/MobilenetV2/expanded_conv/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/MobilenetV2/expanded_conv/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": "16" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv/project/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "16" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv/project/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": "16" + }, + { + "size": "96" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_1/expand/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "96" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_1/expand/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": "96" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_1/depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "96" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_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": "96" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_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": "96" + }, + { + "size": "24" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_1/project/Conv2D/merged_input", + "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": "FeatureExtractor/MobilenetV2/expanded_conv_1/project/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": "24" + }, + { + "size": "144" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_3/expand/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "144" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_3/expand/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": "144" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_3/depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "144" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_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": "144" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_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": "144" + }, + { + "size": "32" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_3/project/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": "32" + } + ] + } + } + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_3/project/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": "192" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_6/expand/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "192" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_6/expand/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": "192" + }, + { + "size": "1" + } + ] + } + } + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_6/depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "192" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_6/depthwise/BatchNorm/batchnorm/mul", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "192" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_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": "192" + }, + { + "size": "64" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_6/project/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/MobilenetV2/expanded_conv_6/project/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": "384" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_10/expand/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "384" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_10/expand/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": "384" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_10/depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "384" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_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": "384" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_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": "384" + }, + { + "size": "96" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_10/project/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "96" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_10/project/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": "96" + }, + { + "size": "576" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_13/expand/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "576" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_13/expand/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": "576" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_13/depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "576" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_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": "576" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_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": "576" + }, + { + "size": "160" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_13/project/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "160" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_13/project/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": "160" + }, + { + "size": "960" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_16/expand/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "960" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_16/expand/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": "960" + }, + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_16/depthwise/depthwise_weights", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "960" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_16/depthwise/BatchNorm/batchnorm/mul", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "960" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_16/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": "960" + }, + { + "size": "320" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_16/project/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "320" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_16/project/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": "320" + }, + { + "size": "1280" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/Conv_1/Conv2D/merged_input", + "op": "Const" + }, + { + "input": [], + "attr": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 1, + "tensorShape": { + "dim": [ + { + "size": "1280" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/Conv_1/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": "1280" + }, + { + "size": "256" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_2_1x1_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/MobilenetV2/layer_19_1_Conv2d_2_1x1_256/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": "256" + }, + { + "size": "1" + } + ] + } + } + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512_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/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512_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/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512_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/MobilenetV2/layer_19_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/MobilenetV2/layer_19_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/MobilenetV2/layer_19_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/MobilenetV2/layer_19_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": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256_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/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256_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/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256_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/MobilenetV2/layer_19_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/MobilenetV2/layer_19_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/MobilenetV2/layer_19_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/MobilenetV2/layer_19_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": "1" + } + ] + } + } + }, + "dtype": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256_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/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256_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/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256_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/MobilenetV2/layer_19_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/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256/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": "256" + }, + { + "size": "64" + } + ] + } + } + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_5_1x1_64/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": "64" + } + ] + } + } + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_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": "1" + } + ] + } + } + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128_depthwise/depthwise_weights", + "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/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128_depthwise/BatchNorm/batchnorm/mul", + "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/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128_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/MobilenetV2/layer_19_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/MobilenetV2/layer_19_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": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [ + 1 + ], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [ + { + "size": "1" + } + ] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "Postprocessor/strided_slice/stack_1", + "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": { + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [ + 91 + ], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [] + } + } + }, + "dtype": { + "type": 3 + } + }, + "name": "BoxPredictor_0/stack_1/2", + "op": "Const" + }, + { + "input": [], + "attr": { + "dtype": { + "type": 3 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [ + 1 + ], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [] + } + } + } + }, + "name": "Postprocessor/Tile/multiples/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": "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": [ + "Preprocessor/map/TensorArrayStack/range/start" + ], + "attr": { + "T": { + "type": 3 + }, + "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", + "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": { + "T": { + "type": 1 + }, + "out_type": { + "type": 3 + } + }, + "name": "Preprocessor/map/TensorArrayUnstack/Shape", + "op": "Shape" + }, + { + "input": [ + "Preprocessor/map/TensorArrayUnstack/Shape", + "Postprocessor/strided_slice/stack", + "Postprocessor/strided_slice/stack_1", + "Postprocessor/strided_slice/stack_1" + ], + "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": "Preprocessor/map/TensorArrayUnstack/strided_slice", + "op": "StridedSlice" + }, + { + "input": [ + "Preprocessor/map/TensorArrayUnstack/strided_slice" + ], + "attr": { + "dtype": { + "type": 1 + }, + "element_shape": { + "shape": { + "dim": [], + "unknownRank": true + } + }, + "dynamic_size": { + "b": false + }, + "clear_after_read": { + "b": true + }, + "identical_element_shapes": { + "b": false + }, + "tensor_array_name": { + "s": [] + } + }, + "name": "Preprocessor/map/TensorArray_1", + "op": "TensorArrayV3" + }, + { + "input": [ + "Preprocessor/map/TensorArrayStack/range/start", + "Preprocessor/map/TensorArrayUnstack/strided_slice", + "Postprocessor/Tile/multiples/1" + ], + "attr": { + "Tidx": { + "type": 3 + } + }, + "name": "Preprocessor/map/TensorArrayUnstack/range", + "op": "Range" + }, + { + "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": 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": { + "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 + ] + }, + "T": { + "type": 1 + } + }, + "name": "Preprocessor/map/while/Enter_1", + "op": "Enter" + }, + { + "input": [ + "Preprocessor/map/TensorArray_1" + ], + "attr": { + "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": 20 + }, + "is_constant": { + "b": true + }, + "parallel_iterations": { + "i": "32" + } + }, + "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": { + "T": { + "type": 1 + }, + "N": { + "i": "2" + } + }, + "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": { + "dtype": { + "type": 3 + }, + "value": { + "tensor": { + "floatVal": [], + "doubleVal": [], + "intVal": [], + "stringVal": [], + "scomplexVal": [], + "int64Val": [], + "boolVal": [], + "uint32Val": [], + "uint64Val": [], + "dtype": 3, + "tensorShape": { + "dim": [ + { + "size": "2" + } + ] + } + } + } + }, + "name": "Preprocessor/map/while/ResizeImage/stack", + "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": [ + "Preprocessor/map/TensorArrayStack/range/start", + "Preprocessor/map/TensorArrayStack/TensorArraySizeV3", + "Postprocessor/Tile/multiples/1" + ], + "attr": { + "Tidx": { + "type": 3 + } + }, + "name": "Preprocessor/map/TensorArrayStack/range", + "op": "Range" + }, + { + "input": [ + "Preprocessor/map/while/ResizeImage/ExpandDims", + "Preprocessor/map/while/ResizeImage/stack" + ], + "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": { + "element_shape": { + "shape": { + "dim": [ + { + "size": "300" + }, + { + "size": "300" + }, + { + "size": "3" + } + ] + } + }, + "dtype": { + "type": 1 + } + }, + "name": "Preprocessor/map/TensorArrayStack/TensorArrayGatherV3", + "op": "TensorArrayGatherV3" + }, + { + "input": [ + "Preprocessor/map/while/ResizeImage/ResizeBilinear" + ], + "attr": { + "T": { + "type": 1 + }, + "squeeze_dims": { + "list": { + "s": [], + "i": [ + "0" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + } + }, + "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", + "Preprocessor/sub/y" + ], + "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", + "FeatureExtractor/MobilenetV2/Conv/Conv2D/merged_input" + ], + "attr": { + "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": [] + } + }, + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/Conv/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/Conv/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/Conv/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/Conv/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/Conv/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/Conv/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/Conv/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv/depthwise/depthwise_weights" + ], + "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 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv/depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv/depthwise/depthwise", + "FeatureExtractor/MobilenetV2/expanded_conv/depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv/depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv/depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv/depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv/depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv/depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv/depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv/depthwise/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv/project/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/MobilenetV2/expanded_conv/project/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv/project/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv/project/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv/project/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv/project/BatchNorm/batchnorm/add_1", + "FeatureExtractor/MobilenetV2/expanded_conv_1/expand/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/MobilenetV2/expanded_conv_1/expand/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_1/expand/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_1/expand/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_1/expand/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_1/expand/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_1/expand/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_1/expand/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_1/depthwise/depthwise_weights" + ], + "attr": { + "strides": { + "list": { + "s": [], + "i": [ + "1", + "2", + "2", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_1/depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_1/depthwise/depthwise", + "FeatureExtractor/MobilenetV2/expanded_conv_1/depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_1/depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_1/depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_1/depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_1/depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_1/depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_1/depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_1/depthwise/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_1/project/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/MobilenetV2/expanded_conv_1/project/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_1/project/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_1/project/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_1/project/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_1/project/BatchNorm/batchnorm/add_1", + "FeatureExtractor/MobilenetV2/expanded_conv_2/expand/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/MobilenetV2/expanded_conv_2/expand/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_2/expand/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_2/expand/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_2/expand/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_2/expand/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_2/expand/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_2/expand/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_2/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", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_2/depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_2/depthwise/depthwise", + "FeatureExtractor/MobilenetV2/expanded_conv_2/depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_2/depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_2/depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_2/depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_2/depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_2/depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_2/depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_2/depthwise/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_2/project/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/MobilenetV2/expanded_conv_2/project/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_2/project/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_1/project/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + }, + "_grappler:ArithmeticOptimizer:AddOpsRewriteStage": { + "b": true + }, + "N": { + "i": "2" + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_2/ArithmeticOptimizer/AddOpsRewrite_Leaf_1_add", + "op": "AddN" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_2/project/BatchNorm/batchnorm/sub", + "FeatureExtractor/MobilenetV2/expanded_conv_2/ArithmeticOptimizer/AddOpsRewrite_Leaf_1_add" + ], + "attr": { + "_grappler:ArithmeticOptimizer:AddOpsRewriteStage": { + "b": true + }, + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_2/ArithmeticOptimizer/AddOpsRewrite_add", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_2/ArithmeticOptimizer/AddOpsRewrite_add", + "FeatureExtractor/MobilenetV2/expanded_conv_3/expand/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/MobilenetV2/expanded_conv_3/expand/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_3/expand/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_3/expand/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_3/expand/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_3/expand/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_3/expand/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_3/expand/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_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", + "2", + "2", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_3/depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_3/depthwise/depthwise", + "FeatureExtractor/MobilenetV2/expanded_conv_3/depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_3/depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_3/depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_3/depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_3/depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_3/depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_3/depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_3/depthwise/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_3/project/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/MobilenetV2/expanded_conv_3/project/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_3/project/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_3/project/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_3/project/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_3/project/BatchNorm/batchnorm/add_1", + "FeatureExtractor/MobilenetV2/expanded_conv_4/expand/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/MobilenetV2/expanded_conv_4/expand/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_4/expand/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_4/expand/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_4/expand/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_4/expand/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_4/expand/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_4/expand/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_4/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/MobilenetV2/expanded_conv_4/depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_4/depthwise/depthwise", + "FeatureExtractor/MobilenetV2/expanded_conv_4/depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_4/depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_4/depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_4/depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_4/depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_4/depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_4/depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_4/depthwise/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_4/project/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/MobilenetV2/expanded_conv_4/project/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_4/project/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_3/project/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + }, + "_grappler:ArithmeticOptimizer:AddOpsRewriteStage": { + "b": true + }, + "N": { + "i": "2" + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_4/ArithmeticOptimizer/AddOpsRewrite_Leaf_1_add", + "op": "AddN" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_4/project/BatchNorm/batchnorm/sub", + "FeatureExtractor/MobilenetV2/expanded_conv_4/ArithmeticOptimizer/AddOpsRewrite_Leaf_1_add" + ], + "attr": { + "T": { + "type": 1 + }, + "_grappler:ArithmeticOptimizer:AddOpsRewriteStage": { + "b": true + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_4/ArithmeticOptimizer/AddOpsRewrite_add", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_4/ArithmeticOptimizer/AddOpsRewrite_add", + "FeatureExtractor/MobilenetV2/expanded_conv_5/expand/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/MobilenetV2/expanded_conv_5/expand/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_5/expand/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_5/expand/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_5/expand/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_5/expand/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_5/expand/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_5/expand/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_5/depthwise/depthwise_weights" + ], + "attr": { + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "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/MobilenetV2/expanded_conv_5/depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_5/depthwise/depthwise", + "FeatureExtractor/MobilenetV2/expanded_conv_5/depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_5/depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_5/depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_5/depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_5/depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_5/depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_5/depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_5/depthwise/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_5/project/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/MobilenetV2/expanded_conv_5/project/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_5/project/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_4/ArithmeticOptimizer/AddOpsRewrite_add" + ], + "attr": { + "T": { + "type": 1 + }, + "_grappler:ArithmeticOptimizer:AddOpsRewriteStage": { + "b": true + }, + "N": { + "i": "2" + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_5/ArithmeticOptimizer/AddOpsRewrite_Leaf_1_add", + "op": "AddN" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_5/project/BatchNorm/batchnorm/sub", + "FeatureExtractor/MobilenetV2/expanded_conv_5/ArithmeticOptimizer/AddOpsRewrite_Leaf_1_add" + ], + "attr": { + "T": { + "type": 1 + }, + "_grappler:ArithmeticOptimizer:AddOpsRewriteStage": { + "b": true + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_5/ArithmeticOptimizer/AddOpsRewrite_add", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_5/ArithmeticOptimizer/AddOpsRewrite_add", + "FeatureExtractor/MobilenetV2/expanded_conv_6/expand/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/MobilenetV2/expanded_conv_6/expand/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_6/expand/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_6/expand/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_6/expand/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_6/expand/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_6/expand/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_6/expand/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_6/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/MobilenetV2/expanded_conv_6/depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_6/depthwise/depthwise", + "FeatureExtractor/MobilenetV2/expanded_conv_6/depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_6/depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_6/depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_6/depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_6/depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_6/depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_6/depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_6/depthwise/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_6/project/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/MobilenetV2/expanded_conv_6/project/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_6/project/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_6/project/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_6/project/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_6/project/BatchNorm/batchnorm/add_1", + "FeatureExtractor/MobilenetV2/expanded_conv_7/expand/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/MobilenetV2/expanded_conv_7/expand/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_7/expand/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_7/expand/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_7/expand/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_7/expand/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_7/expand/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_7/expand/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_7/depthwise/depthwise_weights" + ], + "attr": { + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "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/MobilenetV2/expanded_conv_7/depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_7/depthwise/depthwise", + "FeatureExtractor/MobilenetV2/expanded_conv_7/depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_7/depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_7/depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_7/depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_7/depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_7/depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_7/depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_7/depthwise/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_7/project/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/MobilenetV2/expanded_conv_7/project/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_7/project/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_6/project/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + }, + "_grappler:ArithmeticOptimizer:AddOpsRewriteStage": { + "b": true + }, + "N": { + "i": "2" + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_7/ArithmeticOptimizer/AddOpsRewrite_Leaf_1_add", + "op": "AddN" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_7/project/BatchNorm/batchnorm/sub", + "FeatureExtractor/MobilenetV2/expanded_conv_7/ArithmeticOptimizer/AddOpsRewrite_Leaf_1_add" + ], + "attr": { + "T": { + "type": 1 + }, + "_grappler:ArithmeticOptimizer:AddOpsRewriteStage": { + "b": true + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_7/ArithmeticOptimizer/AddOpsRewrite_add", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_7/ArithmeticOptimizer/AddOpsRewrite_add", + "FeatureExtractor/MobilenetV2/expanded_conv_8/expand/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", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_8/expand/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_8/expand/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_8/expand/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_8/expand/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_8/expand/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_8/expand/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_8/expand/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_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/MobilenetV2/expanded_conv_8/depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_8/depthwise/depthwise", + "FeatureExtractor/MobilenetV2/expanded_conv_8/depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_8/depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_8/depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_8/depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_8/depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_8/depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_8/depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_8/depthwise/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_8/project/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/MobilenetV2/expanded_conv_8/project/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_8/project/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_7/ArithmeticOptimizer/AddOpsRewrite_add" + ], + "attr": { + "T": { + "type": 1 + }, + "_grappler:ArithmeticOptimizer:AddOpsRewriteStage": { + "b": true + }, + "N": { + "i": "2" + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_8/ArithmeticOptimizer/AddOpsRewrite_Leaf_1_add", + "op": "AddN" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_8/project/BatchNorm/batchnorm/sub", + "FeatureExtractor/MobilenetV2/expanded_conv_8/ArithmeticOptimizer/AddOpsRewrite_Leaf_1_add" + ], + "attr": { + "T": { + "type": 1 + }, + "_grappler:ArithmeticOptimizer:AddOpsRewriteStage": { + "b": true + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_8/ArithmeticOptimizer/AddOpsRewrite_add", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_8/ArithmeticOptimizer/AddOpsRewrite_add", + "FeatureExtractor/MobilenetV2/expanded_conv_9/expand/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/MobilenetV2/expanded_conv_9/expand/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_9/expand/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_9/expand/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_9/expand/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_9/expand/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_9/expand/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_9/expand/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_9/depthwise/depthwise_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": [] + } + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_9/depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_9/depthwise/depthwise", + "FeatureExtractor/MobilenetV2/expanded_conv_9/depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_9/depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_9/depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_9/depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_9/depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_9/depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_9/depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_9/depthwise/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_9/project/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/MobilenetV2/expanded_conv_9/project/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_9/project/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_8/ArithmeticOptimizer/AddOpsRewrite_add" + ], + "attr": { + "T": { + "type": 1 + }, + "_grappler:ArithmeticOptimizer:AddOpsRewriteStage": { + "b": true + }, + "N": { + "i": "2" + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_9/ArithmeticOptimizer/AddOpsRewrite_Leaf_1_add", + "op": "AddN" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_9/project/BatchNorm/batchnorm/sub", + "FeatureExtractor/MobilenetV2/expanded_conv_9/ArithmeticOptimizer/AddOpsRewrite_Leaf_1_add" + ], + "attr": { + "T": { + "type": 1 + }, + "_grappler:ArithmeticOptimizer:AddOpsRewriteStage": { + "b": true + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_9/ArithmeticOptimizer/AddOpsRewrite_add", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_9/ArithmeticOptimizer/AddOpsRewrite_add", + "FeatureExtractor/MobilenetV2/expanded_conv_10/expand/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/MobilenetV2/expanded_conv_10/expand/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_10/expand/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_10/expand/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_10/expand/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_10/expand/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_10/expand/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_10/expand/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_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/MobilenetV2/expanded_conv_10/depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_10/depthwise/depthwise", + "FeatureExtractor/MobilenetV2/expanded_conv_10/depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_10/depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_10/depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_10/depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_10/depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_10/depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_10/depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_10/depthwise/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_10/project/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/MobilenetV2/expanded_conv_10/project/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_10/project/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_10/project/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_10/project/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_10/project/BatchNorm/batchnorm/add_1", + "FeatureExtractor/MobilenetV2/expanded_conv_11/expand/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/MobilenetV2/expanded_conv_11/expand/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_11/expand/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_11/expand/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_11/expand/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_11/expand/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_11/expand/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_11/expand/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_11/depthwise/depthwise_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": [] + } + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_11/depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_11/depthwise/depthwise", + "FeatureExtractor/MobilenetV2/expanded_conv_11/depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_11/depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_11/depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_11/depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_11/depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_11/depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_11/depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_11/depthwise/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_11/project/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/MobilenetV2/expanded_conv_11/project/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_11/project/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_10/project/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + }, + "_grappler:ArithmeticOptimizer:AddOpsRewriteStage": { + "b": true + }, + "N": { + "i": "2" + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_11/ArithmeticOptimizer/AddOpsRewrite_Leaf_1_add", + "op": "AddN" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_11/project/BatchNorm/batchnorm/sub", + "FeatureExtractor/MobilenetV2/expanded_conv_11/ArithmeticOptimizer/AddOpsRewrite_Leaf_1_add" + ], + "attr": { + "T": { + "type": 1 + }, + "_grappler:ArithmeticOptimizer:AddOpsRewriteStage": { + "b": true + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_11/ArithmeticOptimizer/AddOpsRewrite_add", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_11/ArithmeticOptimizer/AddOpsRewrite_add", + "FeatureExtractor/MobilenetV2/expanded_conv_12/expand/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/MobilenetV2/expanded_conv_12/expand/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_12/expand/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_12/expand/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_12/expand/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_12/expand/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_12/expand/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_12/expand/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_12/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 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_12/depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_12/depthwise/depthwise", + "FeatureExtractor/MobilenetV2/expanded_conv_12/depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_12/depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_12/depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_12/depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_12/depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_12/depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_12/depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_12/depthwise/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_12/project/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/MobilenetV2/expanded_conv_12/project/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_12/project/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_11/ArithmeticOptimizer/AddOpsRewrite_add" + ], + "attr": { + "_grappler:ArithmeticOptimizer:AddOpsRewriteStage": { + "b": true + }, + "N": { + "i": "2" + }, + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_12/ArithmeticOptimizer/AddOpsRewrite_Leaf_1_add", + "op": "AddN" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_12/project/BatchNorm/batchnorm/sub", + "FeatureExtractor/MobilenetV2/expanded_conv_12/ArithmeticOptimizer/AddOpsRewrite_Leaf_1_add" + ], + "attr": { + "T": { + "type": 1 + }, + "_grappler:ArithmeticOptimizer:AddOpsRewriteStage": { + "b": true + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_12/ArithmeticOptimizer/AddOpsRewrite_add", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_12/ArithmeticOptimizer/AddOpsRewrite_add", + "FeatureExtractor/MobilenetV2/expanded_conv_13/expand/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/MobilenetV2/expanded_conv_13/expand/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_13/expand/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_13/expand/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_13/expand/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_13/expand/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_13/expand/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_13/expand/Relu6", + "BoxPredictor_0/BoxEncodingPredictor_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": "BoxPredictor_0/BoxEncodingPredictor_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_13/expand/Relu6", + "BoxPredictor_0/ClassPredictor_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": "BoxPredictor_0/ClassPredictor_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_13/expand/Relu6" + ], + "attr": { + "T": { + "type": 1 + }, + "out_type": { + "type": 3 + } + }, + "name": "BoxPredictor_0/Shape", + "op": "Shape" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_13/expand/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_13/depthwise/depthwise_weights" + ], + "attr": { + "T": { + "type": 1 + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "2", + "2", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_13/depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "BoxPredictor_0/BoxEncodingPredictor_depthwise/depthwise", + "BoxPredictor_0/BoxEncodingPredictor_depthwise/BatchNorm/gamma", + "BoxPredictor_0/BoxEncodingPredictor_depthwise/BatchNorm/beta", + "BoxPredictor_0/BoxEncodingPredictor_depthwise/BatchNorm/moving_mean", + "BoxPredictor_0/BoxEncodingPredictor_depthwise/BatchNorm/moving_variance" + ], + "attr": { + "epsilon": { + "f": 0.0010000000474974513 + }, + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "is_training": { + "b": false + } + }, + "name": "BoxPredictor_0/BoxEncodingPredictor_depthwise/BatchNorm/FusedBatchNorm", + "op": "FusedBatchNorm" + }, + { + "input": [ + "BoxPredictor_0/ClassPredictor_depthwise/depthwise", + "BoxPredictor_0/ClassPredictor_depthwise/BatchNorm/gamma", + "BoxPredictor_0/ClassPredictor_depthwise/BatchNorm/beta", + "BoxPredictor_0/ClassPredictor_depthwise/BatchNorm/moving_mean", + "BoxPredictor_0/ClassPredictor_depthwise/BatchNorm/moving_variance" + ], + "attr": { + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "is_training": { + "b": false + }, + "epsilon": { + "f": 0.0010000000474974513 + } + }, + "name": "BoxPredictor_0/ClassPredictor_depthwise/BatchNorm/FusedBatchNorm", + "op": "FusedBatchNorm" + }, + { + "input": [ + "BoxPredictor_0/Shape", + "Postprocessor/strided_slice/stack", + "Postprocessor/strided_slice/stack_1", + "Postprocessor/strided_slice/stack_1" + ], + "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_0/strided_slice", + "op": "StridedSlice" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_13/depthwise/depthwise", + "FeatureExtractor/MobilenetV2/expanded_conv_13/depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_13/depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "BoxPredictor_0/BoxEncodingPredictor_depthwise/BatchNorm/FusedBatchNorm" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_0/BoxEncodingPredictor_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "BoxPredictor_0/ClassPredictor_depthwise/BatchNorm/FusedBatchNorm" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_0/ClassPredictor_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "BoxPredictor_0/strided_slice", + "BoxPredictor_0/stack/1", + "Postprocessor/Tile/multiples/1", + "BoxPredictor_0/stack/3" + ], + "attr": { + "T": { + "type": 3 + }, + "axis": { + "i": "0" + }, + "N": { + "i": "4" + } + }, + "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/MobilenetV2/expanded_conv_13/depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_13/depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_13/depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "BoxPredictor_0/BoxEncodingPredictor_depthwise/Relu6", + "BoxPredictor_0/BoxEncodingPredictor/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 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + } + }, + "name": "BoxPredictor_0/BoxEncodingPredictor/Conv2D", + "op": "Conv2D" + }, + { + "input": [ + "BoxPredictor_0/ClassPredictor_depthwise/Relu6", + "BoxPredictor_0/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_0/ClassPredictor/Conv2D", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_13/depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_13/depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "BoxPredictor_0/BoxEncodingPredictor/Conv2D", + "BoxPredictor_0/BoxEncodingPredictor/biases" + ], + "attr": { + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "BoxPredictor_0/BoxEncodingPredictor/BiasAdd", + "op": "BiasAdd" + }, + { + "input": [ + "BoxPredictor_0/ClassPredictor/Conv2D", + "BoxPredictor_0/ClassPredictor/biases" + ], + "attr": { + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_0/ClassPredictor/BiasAdd", + "op": "BiasAdd" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_13/depthwise/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_13/project/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/MobilenetV2/expanded_conv_13/project/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "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/MobilenetV2/expanded_conv_13/project/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_13/project/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_13/project/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_13/project/BatchNorm/batchnorm/add_1", + "FeatureExtractor/MobilenetV2/expanded_conv_14/expand/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/MobilenetV2/expanded_conv_14/expand/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_14/expand/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_14/expand/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_14/expand/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_14/expand/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_14/expand/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_14/expand/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_14/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", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_14/depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_14/depthwise/depthwise", + "FeatureExtractor/MobilenetV2/expanded_conv_14/depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_14/depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_14/depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_14/depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_14/depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_14/depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_14/depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_14/depthwise/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_14/project/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/MobilenetV2/expanded_conv_14/project/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_14/project/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_13/project/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + }, + "_grappler:ArithmeticOptimizer:AddOpsRewriteStage": { + "b": true + }, + "N": { + "i": "2" + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_14/ArithmeticOptimizer/AddOpsRewrite_Leaf_1_add", + "op": "AddN" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_14/project/BatchNorm/batchnorm/sub", + "FeatureExtractor/MobilenetV2/expanded_conv_14/ArithmeticOptimizer/AddOpsRewrite_Leaf_1_add" + ], + "attr": { + "T": { + "type": 1 + }, + "_grappler:ArithmeticOptimizer:AddOpsRewriteStage": { + "b": true + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_14/ArithmeticOptimizer/AddOpsRewrite_add", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_14/ArithmeticOptimizer/AddOpsRewrite_add", + "FeatureExtractor/MobilenetV2/expanded_conv_15/expand/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/MobilenetV2/expanded_conv_15/expand/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_15/expand/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_15/expand/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_15/expand/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_15/expand/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_15/expand/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_15/expand/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_15/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 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + }, + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_15/depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_15/depthwise/depthwise", + "FeatureExtractor/MobilenetV2/expanded_conv_15/depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_15/depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_15/depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_15/depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_15/depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_15/depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_15/depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_15/depthwise/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_15/project/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/MobilenetV2/expanded_conv_15/project/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_15/project/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_14/ArithmeticOptimizer/AddOpsRewrite_add" + ], + "attr": { + "_grappler:ArithmeticOptimizer:AddOpsRewriteStage": { + "b": true + }, + "N": { + "i": "2" + }, + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_15/ArithmeticOptimizer/AddOpsRewrite_Leaf_1_add", + "op": "AddN" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_15/project/BatchNorm/batchnorm/sub", + "FeatureExtractor/MobilenetV2/expanded_conv_15/ArithmeticOptimizer/AddOpsRewrite_Leaf_1_add" + ], + "attr": { + "T": { + "type": 1 + }, + "_grappler:ArithmeticOptimizer:AddOpsRewriteStage": { + "b": true + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_15/ArithmeticOptimizer/AddOpsRewrite_add", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_15/ArithmeticOptimizer/AddOpsRewrite_add", + "FeatureExtractor/MobilenetV2/expanded_conv_16/expand/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/MobilenetV2/expanded_conv_16/expand/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_16/expand/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_16/expand/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_16/expand/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_16/expand/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_16/expand/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_16/expand/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_16/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/MobilenetV2/expanded_conv_16/depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_16/depthwise/depthwise", + "FeatureExtractor/MobilenetV2/expanded_conv_16/depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_16/depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_16/depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_16/depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_16/depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_16/depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_16/depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_16/depthwise/Relu6", + "FeatureExtractor/MobilenetV2/expanded_conv_16/project/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/MobilenetV2/expanded_conv_16/project/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_16/project/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/expanded_conv_16/project/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/expanded_conv_16/project/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/expanded_conv_16/project/BatchNorm/batchnorm/add_1", + "FeatureExtractor/MobilenetV2/Conv_1/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/MobilenetV2/Conv_1/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/Conv_1/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/Conv_1/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/Conv_1/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/Conv_1/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/Conv_1/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/Conv_1/Relu6", + "BoxPredictor_1/BoxEncodingPredictor_depthwise/depthwise_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": [] + } + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + } + }, + "name": "BoxPredictor_1/BoxEncodingPredictor_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/Conv_1/Relu6", + "BoxPredictor_1/ClassPredictor_depthwise/depthwise_weights" + ], + "attr": { + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "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 + ] + }, + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_1/ClassPredictor_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/Conv_1/Relu6" + ], + "attr": { + "T": { + "type": 1 + }, + "out_type": { + "type": 3 + } + }, + "name": "BoxPredictor_1/Shape", + "op": "Shape" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/Conv_1/Relu6", + "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_2_1x1_256/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/MobilenetV2/layer_19_1_Conv2d_2_1x1_256/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "BoxPredictor_1/BoxEncodingPredictor_depthwise/depthwise", + "BoxPredictor_1/BoxEncodingPredictor_depthwise/BatchNorm/gamma", + "BoxPredictor_1/BoxEncodingPredictor_depthwise/BatchNorm/beta", + "BoxPredictor_1/BoxEncodingPredictor_depthwise/BatchNorm/moving_mean", + "BoxPredictor_1/BoxEncodingPredictor_depthwise/BatchNorm/moving_variance" + ], + "attr": { + "is_training": { + "b": false + }, + "epsilon": { + "f": 0.0010000000474974513 + }, + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "BoxPredictor_1/BoxEncodingPredictor_depthwise/BatchNorm/FusedBatchNorm", + "op": "FusedBatchNorm" + }, + { + "input": [ + "BoxPredictor_1/ClassPredictor_depthwise/depthwise", + "BoxPredictor_1/ClassPredictor_depthwise/BatchNorm/gamma", + "BoxPredictor_1/ClassPredictor_depthwise/BatchNorm/beta", + "BoxPredictor_1/ClassPredictor_depthwise/BatchNorm/moving_mean", + "BoxPredictor_1/ClassPredictor_depthwise/BatchNorm/moving_variance" + ], + "attr": { + "is_training": { + "b": false + }, + "epsilon": { + "f": 0.0010000000474974513 + }, + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "BoxPredictor_1/ClassPredictor_depthwise/BatchNorm/FusedBatchNorm", + "op": "FusedBatchNorm" + }, + { + "input": [ + "BoxPredictor_1/Shape", + "Postprocessor/strided_slice/stack", + "Postprocessor/strided_slice/stack_1", + "Postprocessor/strided_slice/stack_1" + ], + "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": "BoxPredictor_1/strided_slice", + "op": "StridedSlice" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_2_1x1_256/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_2_1x1_256/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_2_1x1_256/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "BoxPredictor_1/BoxEncodingPredictor_depthwise/BatchNorm/FusedBatchNorm" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_1/BoxEncodingPredictor_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "BoxPredictor_1/ClassPredictor_depthwise/BatchNorm/FusedBatchNorm" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_1/ClassPredictor_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "BoxPredictor_1/strided_slice", + "BoxPredictor_1/stack/1", + "Postprocessor/Tile/multiples/1", + "BoxPredictor_0/stack/3" + ], + "attr": { + "axis": { + "i": "0" + }, + "N": { + "i": "4" + }, + "T": { + "type": 3 + } + }, + "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/MobilenetV2/layer_19_1_Conv2d_2_1x1_256/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_2_1x1_256/Relu6", + "op": "Relu6" + }, + { + "input": [ + "BoxPredictor_1/BoxEncodingPredictor_depthwise/Relu6", + "BoxPredictor_1/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_1/BoxEncodingPredictor/Conv2D", + "op": "Conv2D" + }, + { + "input": [ + "BoxPredictor_1/ClassPredictor_depthwise/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/MobilenetV2/layer_19_1_Conv2d_2_1x1_256/Relu6", + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512_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/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "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": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512_depthwise/depthwise", + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512_depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512_depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "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/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512_depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512_depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512_depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512_depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512_depthwise/Relu6", + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512/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/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512/Relu6", + "BoxPredictor_2/BoxEncodingPredictor_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": "BoxPredictor_2/BoxEncodingPredictor_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512/Relu6", + "BoxPredictor_2/ClassPredictor_depthwise/depthwise_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": [] + } + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + } + }, + "name": "BoxPredictor_2/ClassPredictor_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512/Relu6" + ], + "attr": { + "T": { + "type": 1 + }, + "out_type": { + "type": 3 + } + }, + "name": "BoxPredictor_2/Shape", + "op": "Shape" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512/Relu6", + "FeatureExtractor/MobilenetV2/layer_19_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 + }, + "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/MobilenetV2/layer_19_1_Conv2d_3_1x1_128/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "BoxPredictor_2/BoxEncodingPredictor_depthwise/depthwise", + "BoxPredictor_2/BoxEncodingPredictor_depthwise/BatchNorm/gamma", + "BoxPredictor_2/BoxEncodingPredictor_depthwise/BatchNorm/beta", + "BoxPredictor_2/BoxEncodingPredictor_depthwise/BatchNorm/moving_mean", + "BoxPredictor_2/BoxEncodingPredictor_depthwise/BatchNorm/moving_variance" + ], + "attr": { + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "is_training": { + "b": false + }, + "epsilon": { + "f": 0.0010000000474974513 + } + }, + "name": "BoxPredictor_2/BoxEncodingPredictor_depthwise/BatchNorm/FusedBatchNorm", + "op": "FusedBatchNorm" + }, + { + "input": [ + "BoxPredictor_2/ClassPredictor_depthwise/depthwise", + "BoxPredictor_2/ClassPredictor_depthwise/BatchNorm/gamma", + "BoxPredictor_2/ClassPredictor_depthwise/BatchNorm/beta", + "BoxPredictor_2/ClassPredictor_depthwise/BatchNorm/moving_mean", + "BoxPredictor_2/ClassPredictor_depthwise/BatchNorm/moving_variance" + ], + "attr": { + "epsilon": { + "f": 0.0010000000474974513 + }, + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "is_training": { + "b": false + } + }, + "name": "BoxPredictor_2/ClassPredictor_depthwise/BatchNorm/FusedBatchNorm", + "op": "FusedBatchNorm" + }, + { + "input": [ + "BoxPredictor_2/Shape", + "Postprocessor/strided_slice/stack", + "Postprocessor/strided_slice/stack_1", + "Postprocessor/strided_slice/stack_1" + ], + "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/MobilenetV2/layer_19_1_Conv2d_3_1x1_128/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_3_1x1_128/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_3_1x1_128/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "BoxPredictor_2/BoxEncodingPredictor_depthwise/BatchNorm/FusedBatchNorm" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_2/BoxEncodingPredictor_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "BoxPredictor_2/ClassPredictor_depthwise/BatchNorm/FusedBatchNorm" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_2/ClassPredictor_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "BoxPredictor_2/strided_slice", + "BoxPredictor_2/stack/1", + "Postprocessor/Tile/multiples/1", + "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/MobilenetV2/layer_19_1_Conv2d_3_1x1_128/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_3_1x1_128/Relu6", + "op": "Relu6" + }, + { + "input": [ + "BoxPredictor_2/BoxEncodingPredictor_depthwise/Relu6", + "BoxPredictor_2/BoxEncodingPredictor/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/BoxEncodingPredictor/Conv2D", + "op": "Conv2D" + }, + { + "input": [ + "BoxPredictor_2/ClassPredictor_depthwise/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/MobilenetV2/layer_19_1_Conv2d_3_1x1_128/Relu6", + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256_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", + "2", + "2", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "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": { + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "BoxPredictor_2/ClassPredictor/BiasAdd", + "op": "BiasAdd" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256_depthwise/depthwise", + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256_depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256_depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "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/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256_depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256_depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256_depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256_depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256_depthwise/Relu6", + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256/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/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256/Relu6", + "BoxPredictor_3/BoxEncodingPredictor_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": "BoxPredictor_3/BoxEncodingPredictor_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256/Relu6", + "BoxPredictor_3/ClassPredictor_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": "BoxPredictor_3/ClassPredictor_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256/Relu6" + ], + "attr": { + "T": { + "type": 1 + }, + "out_type": { + "type": 3 + } + }, + "name": "BoxPredictor_3/Shape", + "op": "Shape" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256/Relu6", + "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_4_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/MobilenetV2/layer_19_1_Conv2d_4_1x1_128/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "BoxPredictor_3/BoxEncodingPredictor_depthwise/depthwise", + "BoxPredictor_3/BoxEncodingPredictor_depthwise/BatchNorm/gamma", + "BoxPredictor_3/BoxEncodingPredictor_depthwise/BatchNorm/beta", + "BoxPredictor_3/BoxEncodingPredictor_depthwise/BatchNorm/moving_mean", + "BoxPredictor_3/BoxEncodingPredictor_depthwise/BatchNorm/moving_variance" + ], + "attr": { + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "is_training": { + "b": false + }, + "epsilon": { + "f": 0.0010000000474974513 + }, + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_3/BoxEncodingPredictor_depthwise/BatchNorm/FusedBatchNorm", + "op": "FusedBatchNorm" + }, + { + "input": [ + "BoxPredictor_3/ClassPredictor_depthwise/depthwise", + "BoxPredictor_3/ClassPredictor_depthwise/BatchNorm/gamma", + "BoxPredictor_3/ClassPredictor_depthwise/BatchNorm/beta", + "BoxPredictor_3/ClassPredictor_depthwise/BatchNorm/moving_mean", + "BoxPredictor_3/ClassPredictor_depthwise/BatchNorm/moving_variance" + ], + "attr": { + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "is_training": { + "b": false + }, + "epsilon": { + "f": 0.0010000000474974513 + } + }, + "name": "BoxPredictor_3/ClassPredictor_depthwise/BatchNorm/FusedBatchNorm", + "op": "FusedBatchNorm" + }, + { + "input": [ + "BoxPredictor_3/Shape", + "Postprocessor/strided_slice/stack", + "Postprocessor/strided_slice/stack_1", + "Postprocessor/strided_slice/stack_1" + ], + "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": "BoxPredictor_3/strided_slice", + "op": "StridedSlice" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_4_1x1_128/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_4_1x1_128/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_4_1x1_128/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "BoxPredictor_3/BoxEncodingPredictor_depthwise/BatchNorm/FusedBatchNorm" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_3/BoxEncodingPredictor_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "BoxPredictor_3/ClassPredictor_depthwise/BatchNorm/FusedBatchNorm" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_3/ClassPredictor_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "BoxPredictor_3/strided_slice", + "BoxPredictor_3/stack/1", + "Postprocessor/Tile/multiples/1", + "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/MobilenetV2/layer_19_1_Conv2d_4_1x1_128/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_4_1x1_128/Relu6", + "op": "Relu6" + }, + { + "input": [ + "BoxPredictor_3/BoxEncodingPredictor_depthwise/Relu6", + "BoxPredictor_3/BoxEncodingPredictor/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_3/BoxEncodingPredictor/Conv2D", + "op": "Conv2D" + }, + { + "input": [ + "BoxPredictor_3/ClassPredictor_depthwise/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/MobilenetV2/layer_19_1_Conv2d_4_1x1_128/Relu6", + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256_depthwise/depthwise_weights" + ], + "attr": { + "T": { + "type": 1 + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "2", + "2", + "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": [] + } + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "BoxPredictor_3/BoxEncodingPredictor/Conv2D", + "BoxPredictor_3/BoxEncodingPredictor/biases" + ], + "attr": { + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_3/BoxEncodingPredictor/BiasAdd", + "op": "BiasAdd" + }, + { + "input": [ + "BoxPredictor_3/ClassPredictor/Conv2D", + "BoxPredictor_3/ClassPredictor/biases" + ], + "attr": { + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "BoxPredictor_3/ClassPredictor/BiasAdd", + "op": "BiasAdd" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256_depthwise/depthwise", + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256_depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256_depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "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/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256_depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256_depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256_depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256_depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256_depthwise/Relu6", + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_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 + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256/Relu6", + "BoxPredictor_4/BoxEncodingPredictor_depthwise/depthwise_weights" + ], + "attr": { + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "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 + ] + }, + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_4/BoxEncodingPredictor_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256/Relu6", + "BoxPredictor_4/ClassPredictor_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": "BoxPredictor_4/ClassPredictor_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256/Relu6" + ], + "attr": { + "T": { + "type": 1 + }, + "out_type": { + "type": 3 + } + }, + "name": "BoxPredictor_4/Shape", + "op": "Shape" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256/Relu6", + "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_5_1x1_64/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/MobilenetV2/layer_19_1_Conv2d_5_1x1_64/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "BoxPredictor_4/BoxEncodingPredictor_depthwise/depthwise", + "BoxPredictor_4/BoxEncodingPredictor_depthwise/BatchNorm/gamma", + "BoxPredictor_4/BoxEncodingPredictor_depthwise/BatchNorm/beta", + "BoxPredictor_4/BoxEncodingPredictor_depthwise/BatchNorm/moving_mean", + "BoxPredictor_4/BoxEncodingPredictor_depthwise/BatchNorm/moving_variance" + ], + "attr": { + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "is_training": { + "b": false + }, + "epsilon": { + "f": 0.0010000000474974513 + }, + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_4/BoxEncodingPredictor_depthwise/BatchNorm/FusedBatchNorm", + "op": "FusedBatchNorm" + }, + { + "input": [ + "BoxPredictor_4/ClassPredictor_depthwise/depthwise", + "BoxPredictor_4/ClassPredictor_depthwise/BatchNorm/gamma", + "BoxPredictor_4/ClassPredictor_depthwise/BatchNorm/beta", + "BoxPredictor_4/ClassPredictor_depthwise/BatchNorm/moving_mean", + "BoxPredictor_4/ClassPredictor_depthwise/BatchNorm/moving_variance" + ], + "attr": { + "epsilon": { + "f": 0.0010000000474974513 + }, + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "is_training": { + "b": false + } + }, + "name": "BoxPredictor_4/ClassPredictor_depthwise/BatchNorm/FusedBatchNorm", + "op": "FusedBatchNorm" + }, + { + "input": [ + "BoxPredictor_4/Shape", + "Postprocessor/strided_slice/stack", + "Postprocessor/strided_slice/stack_1", + "Postprocessor/strided_slice/stack_1" + ], + "attr": { + "shrink_axis_mask": { + "i": "1" + }, + "ellipsis_mask": { + "i": "0" + }, + "begin_mask": { + "i": "0" + }, + "new_axis_mask": { + "i": "0" + }, + "end_mask": { + "i": "0" + }, + "Index": { + "type": 3 + }, + "T": { + "type": 3 + } + }, + "name": "BoxPredictor_4/strided_slice", + "op": "StridedSlice" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_5_1x1_64/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_5_1x1_64/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_5_1x1_64/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "BoxPredictor_4/BoxEncodingPredictor_depthwise/BatchNorm/FusedBatchNorm" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_4/BoxEncodingPredictor_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "BoxPredictor_4/ClassPredictor_depthwise/BatchNorm/FusedBatchNorm" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_4/ClassPredictor_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "BoxPredictor_4/strided_slice", + "BoxPredictor_4/stack/1", + "Postprocessor/Tile/multiples/1", + "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/MobilenetV2/layer_19_1_Conv2d_5_1x1_64/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_5_1x1_64/Relu6", + "op": "Relu6" + }, + { + "input": [ + "BoxPredictor_4/BoxEncodingPredictor_depthwise/Relu6", + "BoxPredictor_4/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 + }, + "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": "BoxPredictor_4/BoxEncodingPredictor/Conv2D", + "op": "Conv2D" + }, + { + "input": [ + "BoxPredictor_4/ClassPredictor_depthwise/Relu6", + "BoxPredictor_4/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_4/ClassPredictor/Conv2D", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_5_1x1_64/Relu6", + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128_depthwise/depthwise_weights" + ], + "attr": { + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "strides": { + "list": { + "s": [], + "i": [ + "1", + "2", + "2", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "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/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "BoxPredictor_4/BoxEncodingPredictor/Conv2D", + "BoxPredictor_4/BoxEncodingPredictor/biases" + ], + "attr": { + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_4/BoxEncodingPredictor/BiasAdd", + "op": "BiasAdd" + }, + { + "input": [ + "BoxPredictor_4/ClassPredictor/Conv2D", + "BoxPredictor_4/ClassPredictor/biases" + ], + "attr": { + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_4/ClassPredictor/BiasAdd", + "op": "BiasAdd" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128_depthwise/depthwise", + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128_depthwise/BatchNorm/batchnorm/mul" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128_depthwise/BatchNorm/batchnorm/mul_1", + "op": "Mul" + }, + { + "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/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128_depthwise/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128_depthwise/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128_depthwise/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128_depthwise/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128_depthwise/Relu6", + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128/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/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128/BatchNorm/batchnorm/mul_1", + "op": "Conv2D" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128/BatchNorm/batchnorm/mul_1", + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128/BatchNorm/batchnorm/sub" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128/BatchNorm/batchnorm/add_1", + "op": "Add" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128/BatchNorm/batchnorm/add_1" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128/Relu6", + "op": "Relu6" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128/Relu6", + "BoxPredictor_5/BoxEncodingPredictor_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": "BoxPredictor_5/BoxEncodingPredictor_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128/Relu6", + "BoxPredictor_5/ClassPredictor_depthwise/depthwise_weights" + ], + "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 + ] + }, + "dilations": { + "list": { + "s": [], + "i": [ + "1", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "padding": { + "s": [ + 83, + 65, + 77, + 69 + ] + } + }, + "name": "BoxPredictor_5/ClassPredictor_depthwise/depthwise", + "op": "DepthwiseConv2dNative" + }, + { + "input": [ + "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128/Relu6" + ], + "attr": { + "T": { + "type": 1 + }, + "out_type": { + "type": 3 + } + }, + "name": "BoxPredictor_5/Shape", + "op": "Shape" + }, + { + "input": [ + "BoxPredictor_5/BoxEncodingPredictor_depthwise/depthwise", + "BoxPredictor_5/BoxEncodingPredictor_depthwise/BatchNorm/gamma", + "BoxPredictor_5/BoxEncodingPredictor_depthwise/BatchNorm/beta", + "BoxPredictor_5/BoxEncodingPredictor_depthwise/BatchNorm/moving_mean", + "BoxPredictor_5/BoxEncodingPredictor_depthwise/BatchNorm/moving_variance" + ], + "attr": { + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "is_training": { + "b": false + }, + "epsilon": { + "f": 0.0010000000474974513 + }, + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_5/BoxEncodingPredictor_depthwise/BatchNorm/FusedBatchNorm", + "op": "FusedBatchNorm" + }, + { + "input": [ + "BoxPredictor_5/ClassPredictor_depthwise/depthwise", + "BoxPredictor_5/ClassPredictor_depthwise/BatchNorm/gamma", + "BoxPredictor_5/ClassPredictor_depthwise/BatchNorm/beta", + "BoxPredictor_5/ClassPredictor_depthwise/BatchNorm/moving_mean", + "BoxPredictor_5/ClassPredictor_depthwise/BatchNorm/moving_variance" + ], + "attr": { + "epsilon": { + "f": 0.0010000000474974513 + }, + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + }, + "is_training": { + "b": false + } + }, + "name": "BoxPredictor_5/ClassPredictor_depthwise/BatchNorm/FusedBatchNorm", + "op": "FusedBatchNorm" + }, + { + "input": [ + "BoxPredictor_5/Shape", + "Postprocessor/strided_slice/stack", + "Postprocessor/strided_slice/stack_1", + "Postprocessor/strided_slice/stack_1" + ], + "attr": { + "new_axis_mask": { + "i": "0" + }, + "end_mask": { + "i": "0" + }, + "Index": { + "type": 3 + }, + "T": { + "type": 3 + }, + "shrink_axis_mask": { + "i": "1" + }, + "ellipsis_mask": { + "i": "0" + }, + "begin_mask": { + "i": "0" + } + }, + "name": "BoxPredictor_5/strided_slice", + "op": "StridedSlice" + }, + { + "input": [ + "BoxPredictor_5/BoxEncodingPredictor_depthwise/BatchNorm/FusedBatchNorm" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_5/BoxEncodingPredictor_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "BoxPredictor_5/ClassPredictor_depthwise/BatchNorm/FusedBatchNorm" + ], + "attr": { + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_5/ClassPredictor_depthwise/Relu6", + "op": "Relu6" + }, + { + "input": [ + "BoxPredictor_5/strided_slice", + "BoxPredictor_5/stack/1", + "Postprocessor/Tile/multiples/1", + "BoxPredictor_0/stack/3" + ], + "attr": { + "axis": { + "i": "0" + }, + "N": { + "i": "4" + }, + "T": { + "type": 3 + } + }, + "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_depthwise/Relu6", + "BoxPredictor_5/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_5/BoxEncodingPredictor/Conv2D", + "op": "Conv2D" + }, + { + "input": [ + "BoxPredictor_5/ClassPredictor_depthwise/Relu6", + "BoxPredictor_5/ClassPredictor/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", + "1", + "1", + "1" + ], + "f": [], + "b": [], + "type": [], + "shape": [], + "tensor": [], + "func": [] + } + }, + "use_cudnn_on_gpu": { + "b": true + } + }, + "name": "BoxPredictor_5/ClassPredictor/Conv2D", + "op": "Conv2D" + }, + { + "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": { + "T": { + "type": 1 + }, + "data_format": { + "s": [ + 78, + 72, + 87, + 67 + ] + } + }, + "name": "BoxPredictor_5/ClassPredictor/BiasAdd", + "op": "BiasAdd" + }, + { + "input": [ + "BoxPredictor_5/BoxEncodingPredictor/BiasAdd", + "BoxPredictor_5/stack" + ], + "attr": { + "Tshape": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "name": "BoxPredictor_5/Reshape", + "op": "Reshape" + }, + { + "input": [ + "BoxPredictor_5/ClassPredictor/BiasAdd", + "BoxPredictor_5/stack_1" + ], + "attr": { + "T": { + "type": 1 + }, + "Tshape": { + "type": 3 + } + }, + "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", + "Postprocessor/Tile/multiples/1" + ], + "attr": { + "T": { + "type": 1 + }, + "N": { + "i": "6" + }, + "Tidx": { + "type": 3 + } + }, + "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", + "Postprocessor/Tile/multiples/1" + ], + "attr": { + "T": { + "type": 1 + }, + "N": { + "i": "6" + }, + "Tidx": { + "type": 3 + } + }, + "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": { + "out_type": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "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", + "Postprocessor/strided_slice/stack_1", + "Postprocessor/strided_slice/stack_1" + ], + "attr": { + "end_mask": { + "i": "0" + }, + "T": { + "type": 3 + }, + "Index": { + "type": 3 + }, + "shrink_axis_mask": { + "i": "1" + }, + "ellipsis_mask": { + "i": "0" + }, + "begin_mask": { + "i": "0" + }, + "new_axis_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", + "Postprocessor/Tile/multiples/1", + "Postprocessor/Tile/multiples/1" + ], + "attr": { + "T": { + "type": 3 + }, + "axis": { + "i": "0" + }, + "N": { + "i": "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": { + "Tperm": { + "type": 3 + }, + "T": { + "type": 1 + } + }, + "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", + "ConstantFolding/Postprocessor/Decode/div_4_recip" + ], + "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", + "ConstantFolding/Postprocessor/Decode/div_4_recip" + ], + "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": { + "axis": { + "i": "0" + }, + "N": { + "i": "4" + }, + "T": { + "type": 1 + } + }, + "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": [ + { + "weights": [ + { + "shape": [], + "dtype": "float32", + "name": "ConstantFolding/Postprocessor/Decode/div_recip" + }, + { + "shape": [ + 1, + 1917, + 4 + ], + "dtype": "float32", + "name": "Postprocessor/ExpandDims" + }, + { + "shape": [], + "dtype": "float32", + "name": "ConstantFolding/Postprocessor/Decode/div_4_recip" + }, + { + "shape": [ + 2 + ], + "dtype": "int32", + "name": "Postprocessor/Reshape_1/shape" + }, + { + "shape": [], + "dtype": "float32", + "name": "ConstantFolding/Postprocessor/Decode/div_2_recip" + }, + { + "shape": [ + 3, + 3, + 576, + 1 + ], + "dtype": "float32", + "name": "BoxPredictor_0/BoxEncodingPredictor_depthwise/depthwise_weights" + }, + { + "shape": [ + 576 + ], + "dtype": "float32", + "name": "BoxPredictor_0/BoxEncodingPredictor_depthwise/BatchNorm/gamma" + }, + { + "shape": [ + 576 + ], + "dtype": "float32", + "name": "BoxPredictor_0/BoxEncodingPredictor_depthwise/BatchNorm/beta" + }, + { + "shape": [ + 576 + ], + "dtype": "float32", + "name": "BoxPredictor_0/BoxEncodingPredictor_depthwise/BatchNorm/moving_mean" + }, + { + "shape": [ + 576 + ], + "dtype": "float32", + "name": "BoxPredictor_0/BoxEncodingPredictor_depthwise/BatchNorm/moving_variance" + }, + { + "shape": [ + 1, + 1, + 576, + 12 + ], + "dtype": "float32", + "name": "BoxPredictor_0/BoxEncodingPredictor/weights" + }, + { + "shape": [ + 12 + ], + "dtype": "float32", + "name": "BoxPredictor_0/BoxEncodingPredictor/biases" + }, + { + "shape": [ + 3, + 3, + 1280, + 1 + ], + "dtype": "float32", + "name": "BoxPredictor_1/BoxEncodingPredictor_depthwise/depthwise_weights" + }, + { + "shape": [ + 1280 + ], + "dtype": "float32", + "name": "BoxPredictor_1/BoxEncodingPredictor_depthwise/BatchNorm/gamma" + }, + { + "shape": [ + 1280 + ], + "dtype": "float32", + "name": "BoxPredictor_1/BoxEncodingPredictor_depthwise/BatchNorm/beta" + }, + { + "shape": [ + 1280 + ], + "dtype": "float32", + "name": "BoxPredictor_1/BoxEncodingPredictor_depthwise/BatchNorm/moving_mean" + }, + { + "shape": [ + 1280 + ], + "dtype": "float32", + "name": "BoxPredictor_1/BoxEncodingPredictor_depthwise/BatchNorm/moving_variance" + }, + { + "shape": [ + 1, + 1, + 1280, + 24 + ], + "dtype": "float32", + "name": "BoxPredictor_1/BoxEncodingPredictor/weights" + }, + { + "shape": [ + 24 + ], + "dtype": "float32", + "name": "BoxPredictor_1/BoxEncodingPredictor/biases" + }, + { + "shape": [ + 3, + 3, + 512, + 1 + ], + "dtype": "float32", + "name": "BoxPredictor_2/BoxEncodingPredictor_depthwise/depthwise_weights" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "BoxPredictor_2/BoxEncodingPredictor_depthwise/BatchNorm/gamma" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "BoxPredictor_2/BoxEncodingPredictor_depthwise/BatchNorm/beta" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "BoxPredictor_2/BoxEncodingPredictor_depthwise/BatchNorm/moving_mean" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "BoxPredictor_2/BoxEncodingPredictor_depthwise/BatchNorm/moving_variance" + }, + { + "shape": [ + 1, + 1, + 512, + 24 + ], + "dtype": "float32", + "name": "BoxPredictor_2/BoxEncodingPredictor/weights" + }, + { + "shape": [ + 24 + ], + "dtype": "float32", + "name": "BoxPredictor_2/BoxEncodingPredictor/biases" + }, + { + "shape": [ + 3, + 3, + 256, + 1 + ], + "dtype": "float32", + "name": "BoxPredictor_3/BoxEncodingPredictor_depthwise/depthwise_weights" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "BoxPredictor_3/BoxEncodingPredictor_depthwise/BatchNorm/gamma" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "BoxPredictor_3/BoxEncodingPredictor_depthwise/BatchNorm/beta" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "BoxPredictor_3/BoxEncodingPredictor_depthwise/BatchNorm/moving_mean" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "BoxPredictor_3/BoxEncodingPredictor_depthwise/BatchNorm/moving_variance" + }, + { + "shape": [ + 1, + 1, + 256, + 24 + ], + "dtype": "float32", + "name": "BoxPredictor_3/BoxEncodingPredictor/weights" + }, + { + "shape": [ + 24 + ], + "dtype": "float32", + "name": "BoxPredictor_3/BoxEncodingPredictor/biases" + }, + { + "shape": [ + 3, + 3, + 256, + 1 + ], + "dtype": "float32", + "name": "BoxPredictor_4/BoxEncodingPredictor_depthwise/depthwise_weights" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "BoxPredictor_4/BoxEncodingPredictor_depthwise/BatchNorm/gamma" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "BoxPredictor_4/BoxEncodingPredictor_depthwise/BatchNorm/beta" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "BoxPredictor_4/BoxEncodingPredictor_depthwise/BatchNorm/moving_mean" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "BoxPredictor_4/BoxEncodingPredictor_depthwise/BatchNorm/moving_variance" + }, + { + "shape": [ + 1, + 1, + 256, + 24 + ], + "dtype": "float32", + "name": "BoxPredictor_4/BoxEncodingPredictor/weights" + }, + { + "shape": [ + 24 + ], + "dtype": "float32", + "name": "BoxPredictor_4/BoxEncodingPredictor/biases" + }, + { + "shape": [ + 3, + 3, + 128, + 1 + ], + "dtype": "float32", + "name": "BoxPredictor_5/BoxEncodingPredictor_depthwise/depthwise_weights" + }, + { + "shape": [ + 128 + ], + "dtype": "float32", + "name": "BoxPredictor_5/BoxEncodingPredictor_depthwise/BatchNorm/gamma" + }, + { + "shape": [ + 128 + ], + "dtype": "float32", + "name": "BoxPredictor_5/BoxEncodingPredictor_depthwise/BatchNorm/beta" + }, + { + "shape": [ + 128 + ], + "dtype": "float32", + "name": "BoxPredictor_5/BoxEncodingPredictor_depthwise/BatchNorm/moving_mean" + }, + { + "shape": [ + 128 + ], + "dtype": "float32", + "name": "BoxPredictor_5/BoxEncodingPredictor_depthwise/BatchNorm/moving_variance" + }, + { + "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": [ + 3, + 3, + 576, + 1 + ], + "dtype": "float32", + "name": "BoxPredictor_0/ClassPredictor_depthwise/depthwise_weights" + }, + { + "shape": [ + 576 + ], + "dtype": "float32", + "name": "BoxPredictor_0/ClassPredictor_depthwise/BatchNorm/gamma" + }, + { + "shape": [ + 576 + ], + "dtype": "float32", + "name": "BoxPredictor_0/ClassPredictor_depthwise/BatchNorm/beta" + }, + { + "shape": [ + 576 + ], + "dtype": "float32", + "name": "BoxPredictor_0/ClassPredictor_depthwise/BatchNorm/moving_mean" + }, + { + "shape": [ + 576 + ], + "dtype": "float32", + "name": "BoxPredictor_0/ClassPredictor_depthwise/BatchNorm/moving_variance" + }, + { + "shape": [ + 1, + 1, + 576, + 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": [ + 3, + 3, + 1280, + 1 + ], + "dtype": "float32", + "name": "BoxPredictor_1/ClassPredictor_depthwise/depthwise_weights" + }, + { + "shape": [ + 1280 + ], + "dtype": "float32", + "name": "BoxPredictor_1/ClassPredictor_depthwise/BatchNorm/gamma" + }, + { + "shape": [ + 1280 + ], + "dtype": "float32", + "name": "BoxPredictor_1/ClassPredictor_depthwise/BatchNorm/beta" + }, + { + "shape": [ + 1280 + ], + "dtype": "float32", + "name": "BoxPredictor_1/ClassPredictor_depthwise/BatchNorm/moving_mean" + }, + { + "shape": [ + 1280 + ], + "dtype": "float32", + "name": "BoxPredictor_1/ClassPredictor_depthwise/BatchNorm/moving_variance" + }, + { + "shape": [ + 1, + 1, + 1280, + 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": [ + 3, + 3, + 512, + 1 + ], + "dtype": "float32", + "name": "BoxPredictor_2/ClassPredictor_depthwise/depthwise_weights" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "BoxPredictor_2/ClassPredictor_depthwise/BatchNorm/gamma" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "BoxPredictor_2/ClassPredictor_depthwise/BatchNorm/beta" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "BoxPredictor_2/ClassPredictor_depthwise/BatchNorm/moving_mean" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "BoxPredictor_2/ClassPredictor_depthwise/BatchNorm/moving_variance" + }, + { + "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": [ + 3, + 3, + 256, + 1 + ], + "dtype": "float32", + "name": "BoxPredictor_3/ClassPredictor_depthwise/depthwise_weights" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "BoxPredictor_3/ClassPredictor_depthwise/BatchNorm/gamma" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "BoxPredictor_3/ClassPredictor_depthwise/BatchNorm/beta" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "BoxPredictor_3/ClassPredictor_depthwise/BatchNorm/moving_mean" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "BoxPredictor_3/ClassPredictor_depthwise/BatchNorm/moving_variance" + }, + { + "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": [ + 3, + 3, + 256, + 1 + ], + "dtype": "float32", + "name": "BoxPredictor_4/ClassPredictor_depthwise/depthwise_weights" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "BoxPredictor_4/ClassPredictor_depthwise/BatchNorm/gamma" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "BoxPredictor_4/ClassPredictor_depthwise/BatchNorm/beta" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "BoxPredictor_4/ClassPredictor_depthwise/BatchNorm/moving_mean" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "BoxPredictor_4/ClassPredictor_depthwise/BatchNorm/moving_variance" + }, + { + "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": [ + 3, + 3, + 128, + 1 + ], + "dtype": "float32", + "name": "BoxPredictor_5/ClassPredictor_depthwise/depthwise_weights" + }, + { + "shape": [ + 128 + ], + "dtype": "float32", + "name": "BoxPredictor_5/ClassPredictor_depthwise/BatchNorm/gamma" + }, + { + "shape": [ + 128 + ], + "dtype": "float32", + "name": "BoxPredictor_5/ClassPredictor_depthwise/BatchNorm/beta" + }, + { + "shape": [ + 128 + ], + "dtype": "float32", + "name": "BoxPredictor_5/ClassPredictor_depthwise/BatchNorm/moving_mean" + }, + { + "shape": [ + 128 + ], + "dtype": "float32", + "name": "BoxPredictor_5/ClassPredictor_depthwise/BatchNorm/moving_variance" + }, + { + "shape": [ + 1, + 1, + 128, + 546 + ], + "dtype": "float32", + "name": "BoxPredictor_5/ClassPredictor/weights" + }, + { + "shape": [ + 546 + ], + "dtype": "float32", + "name": "BoxPredictor_5/ClassPredictor/biases" + }, + { + "shape": [ + 160 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_15/project/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 160, + 960 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_15/expand/Conv2D/merged_input" + }, + { + "shape": [ + 960 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_15/expand/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 960, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_15/depthwise/depthwise_weights" + }, + { + "shape": [ + 960 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_15/depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 960 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_15/depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 960, + 160 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_15/project/Conv2D/merged_input" + }, + { + "shape": [ + 160 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_14/project/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 160, + 960 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_14/expand/Conv2D/merged_input" + }, + { + "shape": [ + 960 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_14/expand/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 960, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_14/depthwise/depthwise_weights" + }, + { + "shape": [ + 960 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_14/depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 960 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_14/depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 960, + 160 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_14/project/Conv2D/merged_input" + }, + { + "shape": [ + 96 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_12/project/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 96, + 576 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_12/expand/Conv2D/merged_input" + }, + { + "shape": [ + 576 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_12/expand/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 576, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_12/depthwise/depthwise_weights" + }, + { + "shape": [ + 576 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_12/depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 576 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_12/depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 576, + 96 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_12/project/Conv2D/merged_input" + }, + { + "shape": [ + 96 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_11/project/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 96, + 576 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_11/expand/Conv2D/merged_input" + }, + { + "shape": [ + 576 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_11/expand/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 576, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_11/depthwise/depthwise_weights" + }, + { + "shape": [ + 576 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_11/depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 576 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_11/depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 576, + 96 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_11/project/Conv2D/merged_input" + }, + { + "shape": [ + 64 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_9/project/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 64, + 384 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_9/expand/Conv2D/merged_input" + }, + { + "shape": [ + 384 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_9/expand/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 384, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_9/depthwise/depthwise_weights" + }, + { + "shape": [ + 384 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_9/depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 384 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_9/depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 384, + 64 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_9/project/Conv2D/merged_input" + }, + { + "shape": [ + 64 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_8/project/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 64, + 384 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_8/expand/Conv2D/merged_input" + }, + { + "shape": [ + 384 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_8/expand/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 384, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_8/depthwise/depthwise_weights" + }, + { + "shape": [ + 384 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_8/depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 384 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_8/depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 384, + 64 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_8/project/Conv2D/merged_input" + }, + { + "shape": [ + 64 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_7/project/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 64, + 384 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_7/expand/Conv2D/merged_input" + }, + { + "shape": [ + 384 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_7/expand/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 384, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_7/depthwise/depthwise_weights" + }, + { + "shape": [ + 384 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_7/depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 384 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_7/depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 384, + 64 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_7/project/Conv2D/merged_input" + }, + { + "shape": [ + 32 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_5/project/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 32, + 192 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_5/expand/Conv2D/merged_input" + }, + { + "shape": [ + 192 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_5/expand/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 192, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_5/depthwise/depthwise_weights" + }, + { + "shape": [ + 192 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_5/depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 192 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_5/depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 192, + 32 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_5/project/Conv2D/merged_input" + }, + { + "shape": [ + 32 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_4/project/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 32, + 192 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_4/expand/Conv2D/merged_input" + }, + { + "shape": [ + 192 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_4/expand/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 192, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_4/depthwise/depthwise_weights" + }, + { + "shape": [ + 192 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_4/depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 192 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_4/depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 192, + 32 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_4/project/Conv2D/merged_input" + }, + { + "shape": [ + 24 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_2/project/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 24, + 144 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_2/expand/Conv2D/merged_input" + }, + { + "shape": [ + 144 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_2/expand/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 144, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_2/depthwise/depthwise_weights" + }, + { + "shape": [ + 144 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_2/depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 144 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_2/depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 144, + 24 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_2/project/Conv2D/merged_input" + }, + { + "shape": [], + "dtype": "float32", + "name": "Preprocessor/mul/x" + }, + { + "shape": [], + "dtype": "int32", + "name": "Preprocessor/map/TensorArrayStack/range/start" + }, + { + "shape": [], + "dtype": "float32", + "name": "Preprocessor/sub/y" + }, + { + "shape": [ + 3, + 3, + 3, + 32 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/Conv/Conv2D/merged_input" + }, + { + "shape": [ + 32 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/Conv/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 32, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv/depthwise/depthwise_weights" + }, + { + "shape": [ + 32 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv/depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 32 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv/depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 32, + 16 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv/project/Conv2D/merged_input" + }, + { + "shape": [ + 16 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv/project/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 16, + 96 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_1/expand/Conv2D/merged_input" + }, + { + "shape": [ + 96 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_1/expand/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 96, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_1/depthwise/depthwise_weights" + }, + { + "shape": [ + 96 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_1/depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 96 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_1/depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 96, + 24 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_1/project/Conv2D/merged_input" + }, + { + "shape": [ + 24 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_1/project/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 24, + 144 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_3/expand/Conv2D/merged_input" + }, + { + "shape": [ + 144 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_3/expand/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 144, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_3/depthwise/depthwise_weights" + }, + { + "shape": [ + 144 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_3/depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 144 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_3/depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 144, + 32 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_3/project/Conv2D/merged_input" + }, + { + "shape": [ + 32 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_3/project/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 32, + 192 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_6/expand/Conv2D/merged_input" + }, + { + "shape": [ + 192 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_6/expand/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 192, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_6/depthwise/depthwise_weights" + }, + { + "shape": [ + 192 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_6/depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 192 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_6/depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 192, + 64 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_6/project/Conv2D/merged_input" + }, + { + "shape": [ + 64 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_6/project/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 64, + 384 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_10/expand/Conv2D/merged_input" + }, + { + "shape": [ + 384 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_10/expand/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 384, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_10/depthwise/depthwise_weights" + }, + { + "shape": [ + 384 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_10/depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 384 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_10/depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 384, + 96 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_10/project/Conv2D/merged_input" + }, + { + "shape": [ + 96 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_10/project/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 96, + 576 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_13/expand/Conv2D/merged_input" + }, + { + "shape": [ + 576 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_13/expand/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 576, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_13/depthwise/depthwise_weights" + }, + { + "shape": [ + 576 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_13/depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 576 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_13/depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 576, + 160 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_13/project/Conv2D/merged_input" + }, + { + "shape": [ + 160 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_13/project/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 160, + 960 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_16/expand/Conv2D/merged_input" + }, + { + "shape": [ + 960 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_16/expand/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 960, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_16/depthwise/depthwise_weights" + }, + { + "shape": [ + 960 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_16/depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 960 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_16/depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 960, + 320 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_16/project/Conv2D/merged_input" + }, + { + "shape": [ + 320 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/expanded_conv_16/project/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 320, + 1280 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/Conv_1/Conv2D/merged_input" + }, + { + "shape": [ + 1280 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/Conv_1/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 1280, + 256 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_2_1x1_256/Conv2D/merged_input" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_2_1x1_256/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 256, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512_depthwise/depthwise_weights" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512_depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512_depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 256, + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512/Conv2D/merged_input" + }, + { + "shape": [ + 512 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_2_3x3_s2_512/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 512, + 128 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_3_1x1_128/Conv2D/merged_input" + }, + { + "shape": [ + 128 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_3_1x1_128/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 128, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256_depthwise/depthwise_weights" + }, + { + "shape": [ + 128 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256_depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 128 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256_depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 128, + 256 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256/Conv2D/merged_input" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_3_3x3_s2_256/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 256, + 128 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_4_1x1_128/Conv2D/merged_input" + }, + { + "shape": [ + 128 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_4_1x1_128/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 128, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256_depthwise/depthwise_weights" + }, + { + "shape": [ + 128 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256_depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 128 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256_depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 128, + 256 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256/Conv2D/merged_input" + }, + { + "shape": [ + 256 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_4_3x3_s2_256/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 256, + 64 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_5_1x1_64/Conv2D/merged_input" + }, + { + "shape": [ + 64 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_1_Conv2d_5_1x1_64/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 3, + 3, + 64, + 1 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128_depthwise/depthwise_weights" + }, + { + "shape": [ + 64 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128_depthwise/BatchNorm/batchnorm/mul" + }, + { + "shape": [ + 64 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128_depthwise/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1, + 1, + 64, + 128 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128/Conv2D/merged_input" + }, + { + "shape": [ + 128 + ], + "dtype": "float32", + "name": "FeatureExtractor/MobilenetV2/layer_19_2_Conv2d_5_3x3_s2_128/BatchNorm/batchnorm/sub" + }, + { + "shape": [ + 1 + ], + "dtype": "int32", + "name": "Postprocessor/strided_slice/stack" + }, + { + "shape": [ + 1 + ], + "dtype": "int32", + "name": "Postprocessor/strided_slice/stack_1" + }, + { + "shape": [], + "dtype": "int32", + "name": "BoxPredictor_5/stack/1" + }, + { + "shape": [], + "dtype": "int32", + "name": "BoxPredictor_0/stack_1/2" + }, + { + "shape": [], + "dtype": "int32", + "name": "Postprocessor/Tile/multiples/1" + }, + { + "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/stack" + }, + { + "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" + } + ], + "paths": [ + "group1-shard1of5", + "group1-shard2of5", + "group1-shard3of5", + "group1-shard4of5", + "group1-shard5of5" + ] + } + ] +} \ No newline at end of file diff --git a/electron-builder.yml b/electron-builder.yml index f67de1d781..d2cfd01234 100644 --- a/electron-builder.yml +++ b/electron-builder.yml @@ -20,3 +20,5 @@ linux: - snap publish: null electronVersion: 3.0.13 +extraFiles: + - "cocoSSDModel" diff --git a/package-lock.json b/package-lock.json index 7a5d34e053..e8df37b608 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1017,6 +1017,55 @@ "loader-utils": "^1.1.0" } }, + "@tensorflow/tfjs": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-1.0.3.tgz", + "integrity": "sha512-tF6GcjO2KBYlPPiS7o4X+D3oASXJcWAYaZA13GCYp5cXAui0ncHxpC85kmNQlp2HEVmcE82BJz/1uUtkNxxQpw==", + "requires": { + "@tensorflow/tfjs-converter": "1.0.3", + "@tensorflow/tfjs-core": "1.0.3", + "@tensorflow/tfjs-data": "1.0.3", + "@tensorflow/tfjs-layers": "1.0.3" + } + }, + "@tensorflow/tfjs-converter": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-1.0.3.tgz", + "integrity": "sha512-vrGvVrPekhTOwMGsomcpcjw0ZUep6xhI8DQQoFXHjBcprt9bFO2hHMdAmYpqafcJ7KVMylbK4h2LJrsBI2zDgQ==" + }, + "@tensorflow/tfjs-core": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-1.0.3.tgz", + "integrity": "sha512-2UbjMQkmrykIIZuoRfmDPrtWm+6fdQRlYLCUJdiOIooeu/q4nye587HM1qKcdZosGPZTW6VvX+4VIVieYn5i0A==", + "requires": { + "@types/seedrandom": "2.4.27", + "@types/webgl-ext": "0.0.30", + "@types/webgl2": "0.0.4", + "seedrandom": "2.4.3" + } + }, + "@tensorflow/tfjs-data": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-1.0.3.tgz", + "integrity": "sha512-WFjYU2pWNZ0TZaJ7rN18GD/wOTVe6rBGxvSwZxIhEVIbwKXaKXFa9V4aGp4QBG9AXHIA89SjmGSGPxfsC015hQ==", + "requires": { + "@types/node-fetch": "^2.1.2", + "node-fetch": "~2.1.2", + "seedrandom": "~2.4.3" + }, + "dependencies": { + "node-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", + "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=" + } + } + }, + "@tensorflow/tfjs-layers": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-1.0.3.tgz", + "integrity": "sha512-7VdvQb0ft7TrWAbBy7HI+p420KX9rblYYACZ7/BzvzsikfEOdEL90WxrZDjZ167rYN/KvqC/haGcmhW/dYU3MA==" + }, "@types/axios": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@types/axios/-/axios-0.14.0.tgz", @@ -1087,8 +1136,15 @@ "@types/node": { "version": "10.12.7", "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.7.tgz", - "integrity": "sha512-Zh5Z4kACfbeE8aAOYh9mqotRxaZMro8MbBQtR8vEXOMiZo2rGEh2LayJijKdlu48YnS6y2EFU/oo2NCe5P6jGw==", - "dev": true + "integrity": "sha512-Zh5Z4kACfbeE8aAOYh9mqotRxaZMro8MbBQtR8vEXOMiZo2rGEh2LayJijKdlu48YnS6y2EFU/oo2NCe5P6jGw==" + }, + "@types/node-fetch": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.1.7.tgz", + "integrity": "sha512-TZozHCDVrs0Aj1B9ZR5F4Q9MknDNcVd+hO5lxXOCzz07ELBey6s1gMUSZHUYHlPfRFKJFXiTnNuD7ePiI6S4/g==", + "requires": { + "@types/node": "*" + } }, "@types/prop-types": { "version": "15.5.8", @@ -1230,6 +1286,11 @@ "redux": "^4.0.0" } }, + "@types/seedrandom": { + "version": "2.4.27", + "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.27.tgz", + "integrity": "sha1-nbVjk33YaRX2kJK8QyWdL0hXjkE=" + }, "@types/snapsvg": { "version": "0.4.35", "resolved": "https://registry.npmjs.org/@types/snapsvg/-/snapsvg-0.4.35.tgz", @@ -1243,6 +1304,16 @@ "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.2.tgz", "integrity": "sha512-42zEJkBpNfMEAvWR5WlwtTH22oDzcMjFsL9gDGExwF8X8WvAiw7Vwop7hPw03QT8TKfec83LwbHj6SvpqM4ELQ==" }, + "@types/webgl-ext": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/webgl-ext/-/webgl-ext-0.0.30.tgz", + "integrity": "sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg==" + }, + "@types/webgl2": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@types/webgl2/-/webgl2-0.0.4.tgz", + "integrity": "sha512-PACt1xdErJbMUOUweSrbVM7gSIYm1vTncW2hF6Os/EeWi6TXYAYMPp+8v6rzHmypE5gHrxaxZNXgMkJVIdZpHw==" + }, "@webassemblyjs/ast": { "version": "1.7.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.6.tgz", @@ -9380,6 +9451,17 @@ "requires": { "node-fetch": "^1.0.1", "whatwg-fetch": ">=0.10.0" + }, + "dependencies": { + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + } } }, "isstream": { @@ -10150,6 +10232,11 @@ "topo": "2.x.x" } }, + "jpeg-js": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.4.tgz", + "integrity": "sha512-6IzjQxvnlT8UlklNmDXIJMWxijULjqGrzgqc0OG7YadZdvm7KPQ1j0ehmQQHckgEWOfgpptzcnWgESovxudpTA==" + }, "jquery": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", @@ -11261,13 +11348,9 @@ } }, "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", + "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==" }, "node-forge": { "version": "0.7.5", @@ -16377,6 +16460,11 @@ } } }, + "seedrandom": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", + "integrity": "sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw=" + }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", diff --git a/package.json b/package.json index 5dde953633..1a527008ed 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "main": "build/main.js", "dependencies": { "@azure/storage-blob": "^10.3.0", + "@tensorflow/tfjs": "^1.0.3", "@types/snapsvg": "^0.4.35", "axios": "^0.18.0", "bootstrap": "^4.1.3", @@ -23,8 +24,10 @@ "crypto-js": "^3.1.9-1", "dotenv": "^7.0.0", "google-protobuf": "^3.6.1", + "jpeg-js": "^0.3.4", "lodash": "^4.17.11", "md5.js": "^1.3.5", + "node-fetch": "^2.3.0", "node-int64": "^0.4.0", "rc-align": "^2.4.5", "rc-checkbox": "^2.1.6", diff --git a/src/common/htmlFileReader.test.ts b/src/common/htmlFileReader.test.ts index 7f9e40f6aa..be8c189d69 100644 --- a/src/common/htmlFileReader.test.ts +++ b/src/common/htmlFileReader.test.ts @@ -10,17 +10,7 @@ describe("Html File Reader", () => { beforeEach(() => { assetTestCache.clear(); - - document.createElement = jest.fn((elementType) => { - switch (elementType) { - case "img": - return mockImage(); - case "video": - return mockVideo(); - case "canvas": - return mockCanvas(); - } - }); + MockFactory.mockElement(assetTestCache); }); it("Resolves promise after successfully reading file", async () => { @@ -234,67 +224,4 @@ describe("Html File Reader", () => { await expect(HtmlFileReader.getAssetFrameImage(videoErrorFrame)).rejects.not.toBeNull(); }); }); - - const mockImage = jest.fn(() => { - const element: any = { - naturalWidth: 0, - naturalHeight: 0, - onload: jest.fn(), - }; - - setImmediate(() => { - const asset = assetTestCache.get(element.src); - element.naturalWidth = asset.size.width; - element.naturalHeight = asset.size.height; - - element.onload(); - }); - - return element; - }); - - const mockVideo = jest.fn(() => { - const element: any = { - src: "", - duration: 0, - currentTime: 0, - videoWidth: 0, - videoHeight: 0, - onloadedmetadata: jest.fn(), - onseeked: jest.fn(), - onerror: jest.fn(), - }; - - setImmediate(() => { - const asset = assetTestCache.get(element.src); - if (asset.name.toLowerCase().indexOf("error") > -1) { - element.onerror("An error occurred loading the video"); - } else { - element.videoWidth = asset.size.width; - element.videoHeight = asset.size.height; - element.currentTime = asset.timestamp; - element.onloadedmetadata(); - element.onseeked(); - } - }); - - return element; - }); - - const mockCanvas = jest.fn(() => { - const canvas: any = { - width: 0, - height: 0, - getContext: jest.fn(() => { - return { - drawImage: jest.fn(), - }; - }), - toBlob: jest.fn((callback) => { - callback(new Blob(["Binary image data"])); - }), - }; - - return canvas; - }); }); diff --git a/src/common/localization/en-us.ts b/src/common/localization/en-us.ts index 2a07e1e715..7b29005f08 100644 --- a/src/common/localization/en-us.ts +++ b/src/common/localization/en-us.ts @@ -143,6 +143,7 @@ export const english: IAppStrings = { warnings: { existingName: "Tag name already exists. Choose another name", emptyName: "Cannot have an empty tag name", + unknownTagName: "Unknown", }, toolbar: { add: "Add new tag", @@ -231,6 +232,7 @@ export const english: IAppStrings = { nextAsset: "Next Asset", saveProject: "Save Project", exportProject: "Export Project", + activeLearning: "Active Learning", }, videoPlayer: { previousTaggedFrame: { @@ -275,9 +277,8 @@ export const english: IAppStrings = { messages: { enforceTaggedRegions: { title: "Invalid region(s) detected", - // tslint:disable-next-line:max-line-length description: "1 or more regions have not been tagged. Ensure all regions are tagged before \ - continuing to next asset.", + continuing to next asset.", }, }, }, @@ -391,6 +392,40 @@ export const english: IAppStrings = { }, activeLearning: { title: "Active Learning", + form: { + properties: { + modelPathType: { + title: "Model Provider", + description: "Where to load the training model from", + options: { + preTrained: "Pre-trained Coco SSD", + customFilePath: "Custom (File path)", + customWebUrl: "Custom (Url)", + }, + }, + autoDetect: { + title: "Auto Detect", + description: "Whether or not to automatically make predictions as you navigate between assets", + }, + modelPath: { + title: "Model path", + description: "Select a model from your local file system", + }, + modelUrl: { + title: "Model URL", + description: "Load your model from a public web URL", + }, + predictTag: { + title: "Predict Tag", + description: "Whether or not to automatically include tags in predictions", + }, + }, + }, + messages: { + loadingModel: "Loading active learning model...", + errorLoadModel: "Error loading active learning model", + saveSuccess: "Successfully saved active learning settings", + }, }, profile: { settings: "Profile Settings", @@ -444,5 +479,10 @@ export const english: IAppStrings = { title: "Error exporting project", message: "Project is missing export format. Please select an export format in the export setting page.", }, + activeLearningPredictionError: { + title: "Active Learning Error", + message: "An error occurred while predicting regions in the current asset. \ + Please verify your active learning configuration and try again", + }, }, }; diff --git a/src/common/localization/es-cl.ts b/src/common/localization/es-cl.ts index 41315013db..61f925091c 100644 --- a/src/common/localization/es-cl.ts +++ b/src/common/localization/es-cl.ts @@ -60,8 +60,8 @@ export const spanish: IAppStrings = { }, securityTokens: { title: "Tokens de seguridad", - // tslint:disable-next-line:max-line-length - description: "Los tokens de seguridad se utilizan para cifrar datos confidenciales dentro de la configuración del proyecto", + description: "Los tokens de seguridad se utilizan para cifrar datos confidenciales \ + dentro de la configuración del proyecto", }, version: { description: "Versión:", @@ -144,6 +144,7 @@ export const spanish: IAppStrings = { warnings: { existingName: "Nombre de etiqueta ya existe. Elige otro nombre", emptyName: "El nombre de etiqueta no puede ser vacío", + unknownTagName: "Desconocido", }, toolbar: { add: "Agregar nueva etiqueta", @@ -233,6 +234,7 @@ export const spanish: IAppStrings = { nextAsset: "Siguiente activo", saveProject: "Guardar Proyecto", exportProject: "Exprtar Proyecto", + activeLearning: "Aprendizaje Activo", }, videoPlayer: { previousTaggedFrame: { @@ -278,8 +280,8 @@ export const spanish: IAppStrings = { messages: { enforceTaggedRegions: { title: "Las regiones no válidas detectadas", - // tslint:disable-next-line:max-line-length - description: "1 o más regiones no se han etiquetado. Por favor, etiquete todas las regiones antes de continuar con el siguiente activo.", + description: "1 o más regiones no se han etiquetado. \ + Por favor, etiquete todas las regiones antes de continuar con el siguiente activo.", }, }, }, @@ -393,6 +395,41 @@ export const spanish: IAppStrings = { }, activeLearning: { title: "Aprendizaje Activo", + form: { + properties: { + modelPathType: { + title: "Proveedor del modelo", + description: "Fuente desde la cual cargar el modelo", + options: { + preTrained: "SSD de coco pre-entrenado", + customFilePath: "Personalizado (ruta de archivo)", + customWebUrl: "Personalizado (URL)", + }, + }, + autoDetect: { + title: "Detección automática", + description: "Si desea o no realizar automáticamente predicciones a \ + medida que navega entre activos", + }, + modelPath: { + title: "Ruta de modelo", + description: "Seleccione un modelo de su sistema de archivos local", + }, + modelUrl: { + title: "URL del modelo", + description: "Cargue el modelo desde una URL web pública", + }, + predictTag: { + title: "Predecir etiqueta", + description: "Si se incluirán o no automáticamente las etiquetas en las predicciones", + }, + }, + }, + messages: { + loadingModel: "Cargando modelo...", + errorLoadModel: "Error al cargar el modelo", + saveSuccess: "La configuración de aprendizaje activa se ha guardada correctamente", + }, }, profile: { settings: "Configuración de Perfíl", @@ -448,5 +485,10 @@ export const spanish: IAppStrings = { message: `Proyecto falta el formato de exportación. Seleccione un formato de exportación en la página de configuración de exportación.`, }, + activeLearningPredictionError: { + title: "Error de aprendizaje", + message: "Se ha producido un error al predecir regiones en el activo actual. \ + Compruebe la configuración de aprendizaje activa y vuelva a intentarlo", + }, }, }; diff --git a/src/common/mockFactory.ts b/src/common/mockFactory.ts index 8dfb8ef3e1..8bc6813971 100644 --- a/src/common/mockFactory.ts +++ b/src/common/mockFactory.ts @@ -3,7 +3,7 @@ import { AssetState, AssetType, IApplicationState, IAppSettings, IAsset, IAssetMetadata, IConnection, IExportFormat, IProject, ITag, StorageType, ISecurityToken, EditorMode, IAppError, IProjectVideoSettings, ErrorCode, - IPoint, IRegion, RegionType, + IPoint, IRegion, RegionType, ModelPathType, } from "../models/applicationState"; import { IV1Project, IV1Region } from "../models/v1Models"; import { ExportAssetState } from "../providers/export/exportProvider"; @@ -33,6 +33,7 @@ import { SelectionMode } from "vott-ct/lib/js/CanvasTools/Interface/ISelectorSet import { IKeyboardBindingProps } from "../react/components/common/keyboardBinding/keyboardBinding"; import { KeyEventType } from "../react/components/common/keyboardManager/keyboardManager"; import { IKeyboardRegistrations } from "../react/components/common/keyboardManager/keyboardRegistrationManager"; +import { IActiveLearningPageProps } from "../react/components/pages/activeLearning/activeLearningPage"; export default class MockFactory { @@ -283,6 +284,13 @@ export default class MockFactory { targetConnection: connection, tags: MockFactory.createTestTags(tagCount), videoSettings: MockFactory.createVideoSettings(), + activeLearningSettings: { + modelPathType: ModelPathType.Coco, + modelPath: "", + modelUrl: "", + autoDetect: false, + predictTag: false, + }, autoSave: true, }; } @@ -886,6 +894,21 @@ export default class MockFactory { }; } + /** + * Creates fake IActiveLearningPageProps + * @param projectId Current project ID + */ + public static activeLearningProps(projectId?: string): IActiveLearningPageProps { + return { + actions: (projectActions as any) as IProjectActions, + history: MockFactory.history(), + location: MockFactory.location(), + match: MockFactory.match(projectId, "active-learning"), + project: null, + recentProjects: MockFactory.createTestProjects(), + }; + } + /** * Creates fake IEditorPageProps * @param projectId Current project ID @@ -1012,6 +1035,93 @@ export default class MockFactory { }; } + public static mockElement(assetTestCache: Map) { + document.createElement = jest.fn((elementType) => { + switch (elementType) { + case "img": + const mockImage = MockFactory.mockImage(assetTestCache); + return mockImage(); + case "video": + const mockVideo = MockFactory.mockVideo(assetTestCache); + return mockVideo(); + case "canvas": + const mockCanvas = MockFactory.mockCanvas(); + return mockCanvas(); + } + }); + } + + public static mockImage(assetTestCache: Map) { + return jest.fn(() => { + const element: any = { + naturalWidth: 0, + naturalHeight: 0, + onload: jest.fn(), + }; + + setImmediate(() => { + const asset = assetTestCache.get(element.src); + if (asset) { + element.naturalWidth = asset.size.width; + element.naturalHeight = asset.size.height; + } + + element.onload(); + }); + + return element; + }); + } + + public static mockVideo(assetTestCache: Map) { + return jest.fn(() => { + const element: any = { + src: "", + duration: 0, + currentTime: 0, + videoWidth: 0, + videoHeight: 0, + onloadedmetadata: jest.fn(), + onseeked: jest.fn(), + onerror: jest.fn(), + }; + + setImmediate(() => { + const asset = assetTestCache.get(element.src); + if (asset.name.toLowerCase().indexOf("error") > -1) { + element.onerror("An error occurred loading the video"); + } else { + element.videoWidth = asset.size.width; + element.videoHeight = asset.size.height; + element.currentTime = asset.timestamp; + element.onloadedmetadata(); + element.onseeked(); + } + }); + + return element; + }); + } + + public static mockCanvas() { + return jest.fn(() => { + const canvas: any = { + width: 800, + height: 600, + getContext: jest.fn(() => { + return { + drawImage: jest.fn(), + }; + }), + toBlob: jest.fn((callback) => { + callback(new Blob(["Binary image data"])); + }), + }; + + return canvas; + }); + } + private static pageProps(projectId: string, method: string) { return { project: null, @@ -1093,5 +1203,4 @@ export default class MockFactory { return StorageType.Other; } } - } diff --git a/src/common/strings.ts b/src/common/strings.ts index 7a842c0949..6bbce1d6f0 100644 --- a/src/common/strings.ts +++ b/src/common/strings.ts @@ -154,6 +154,7 @@ export interface IAppStrings { warnings: { existingName: string; emptyName: string; + unknownTagName: string; } }; connections: { @@ -230,6 +231,7 @@ export interface IAppStrings { nextAsset: string; saveProject: string; exportProject: string; + activeLearning: string; } videoPlayer: { nextTaggedFrame: { @@ -387,6 +389,40 @@ export interface IAppStrings { }; activeLearning: { title: string; + form: { + properties: { + modelPathType: { + title: string, + description: string, + options: { + preTrained: string, + customFilePath: string, + customWebUrl: string, + }, + }, + autoDetect: { + title: string, + description: string, + }, + predictTag: { + title: string, + description: string, + }, + modelPath: { + title: string, + description: string, + }, + modelUrl: { + title: string, + description: string, + }, + }, + } + messages: { + loadingModel: string; + errorLoadModel: string; + saveSuccess: string; + } }; profile: { settings: string; @@ -403,6 +439,7 @@ export interface IAppStrings { importError: IErrorMetadata, pasteRegionTooBigError: IErrorMetadata, exportFormatNotFound: IErrorMetadata, + activeLearningPredictionError: IErrorMetadata, }; } diff --git a/src/models/applicationState.ts b/src/models/applicationState.ts index c8ad04a967..41b11bbd33 100644 --- a/src/models/applicationState.ts +++ b/src/models/applicationState.ts @@ -1,4 +1,5 @@ import { ExportAssetState } from "../providers/export/exportProvider"; +import { IAssetPreviewSettings } from "../react/components/common/assetPreview/assetPreview"; /** * @name - Application State @@ -49,6 +50,7 @@ export enum ErrorCode { ExportFormatNotFound = "exportFormatNotFound", PasteRegionTooBig = "pasteRegionTooBig", OverloadedKeyBinding = "overloadedKeyBinding", + ActiveLearningPredictionError = "activeLearningPredictionError", } /** @@ -112,6 +114,7 @@ export interface IProject { targetConnection: IConnection; exportFormat: IExportFormat; videoSettings: IProjectVideoSettings; + activeLearningSettings: IActiveLearningSettings; autoSave: boolean; assets?: { [index: string]: IAsset }; lastVisitedAssetId?: string; @@ -198,6 +201,44 @@ export interface IProjectVideoSettings { frameExtractionRate: number; } +/** + * @name - Model Path Type + * @description - Defines the mechanism to load the TF.js model for Active Learning + * @member Coco - Specifies the default/generic pre-trained Coco-SSD model + * @member File - Specifies to load a custom model from filesystem + * @member Url - Specifies to load a custom model from a web server + */ +export enum ModelPathType { + Coco = "coco", + File = "file", + Url = "url", +} + +/** + * Properties for additional project settings + * @member activeLearningSettings - Active Learning settings + */ +export interface IAdditionalPageSettings extends IAssetPreviewSettings { + activeLearningSettings: IActiveLearningSettings; +} + +/** + * @name - Active Learning Settings for the project + * @description - Defines the active learning settings within a VoTT project + * @member modelPathType - Model loading type ["coco", "file", "url"] + * @member modelPath - Local filesystem path to the TF.js model + * @member modelUrl - Web url to the TF.js model + * @member autoDetect - Flag for automatically call the model while opening a new asset + * @member predictTag - Flag to predict also the tag name other than the rectangle coordinates only + */ +export interface IActiveLearningSettings { + modelPathType: ModelPathType; + modelPath?: string; + modelUrl?: string; + autoDetect: boolean; + predictTag: boolean; +} + /** * @name - Asset Video Settings * @description - Defines the settings for video assets @@ -231,6 +272,7 @@ export interface IAsset { format?: string; timestamp?: number; parent?: IAsset; + predicted?: boolean; } /** diff --git a/src/providers/activeLearning/electronProxyHandler.test.ts b/src/providers/activeLearning/electronProxyHandler.test.ts new file mode 100644 index 0000000000..17eade6e2e --- /dev/null +++ b/src/providers/activeLearning/electronProxyHandler.test.ts @@ -0,0 +1,33 @@ +jest.mock("../storage/localFileSystemProxy"); +import { LocalFileSystemProxy } from "../storage/localFileSystemProxy"; +import { ElectronProxyHandler } from "./electronProxyHandler"; +import * as tf from "@tensorflow/tfjs"; +// tslint:disable-next-line:no-var-requires +const modelJson = require("../../../cocoSSDModel/model.json"); + +describe("Load default model from filesystem with TF io.IOHandler", () => { + it("Check file system proxy is correctly called", async () => { + const storageProviderMock = LocalFileSystemProxy as jest.Mock; + storageProviderMock.mockClear(); + + storageProviderMock.prototype.readText = jest.fn((fileName) => { + return Promise.resolve(JSON.stringify(modelJson)); + }); + + storageProviderMock.prototype.readBinary = jest.fn((fileName) => { + return Promise.resolve([]); + }); + + const handler = new ElectronProxyHandler("folder"); + try { + const model = await tf.loadGraphModel(handler); + } catch (_) { + // fully loading TF model fails as it has to load also weights + } + + expect(LocalFileSystemProxy.prototype.readText).toBeCalledWith("/model.json"); + + // Coco SSD Lite default embedded model has 5 weights matrix + expect(LocalFileSystemProxy.prototype.readBinary).toBeCalledTimes(5); + }); +}); diff --git a/src/providers/activeLearning/electronProxyHandler.ts b/src/providers/activeLearning/electronProxyHandler.ts new file mode 100644 index 0000000000..cbda70f59b --- /dev/null +++ b/src/providers/activeLearning/electronProxyHandler.ts @@ -0,0 +1,76 @@ +import * as tfc from "@tensorflow/tfjs-core"; +import { LocalFileSystemProxy, ILocalFileSystemProxyOptions } from "../../providers/storage/localFileSystemProxy"; + +export class ElectronProxyHandler implements tfc.io.IOHandler { + protected readonly provider: LocalFileSystemProxy; + + constructor(folderPath: string) { + const options: ILocalFileSystemProxyOptions = { folderPath }; + this.provider = new LocalFileSystemProxy(options); + } + + public async load(): Promise { + const modelJSON = JSON.parse(await this.provider.readText("/model.json")); + + const modelArtifacts: tfc.io.ModelArtifacts = { + modelTopology: modelJSON.modelTopology, + }; + + if (modelJSON.weightsManifest != null) { + const [weightSpecs, weightData] = + await this.loadWeights(modelJSON.weightsManifest); + modelArtifacts.weightSpecs = weightSpecs; + modelArtifacts.weightData = weightData; + } + + return modelArtifacts; + } + + public async loadClasses(): Promise { + const json = await this.provider.readText("/classes.json"); + return json ? JSON.parse(json) : null; + } + + private async loadWeights(weightsManifest: tfc.io.WeightsManifestConfig) + : Promise<[tfc.io.WeightsManifestEntry[], ArrayBuffer]> { + const buffers: Buffer[] = []; + const weightSpecs: tfc.io.WeightsManifestEntry[] = []; + + for (const group of weightsManifest) { + for (const shardName of group.paths) { + const buffer = await this.provider.readBinary("/" + shardName); + buffers.push(buffer); + } + weightSpecs.push(...group.weights); + } + + return [weightSpecs, this.toArrayBuffer(buffers)]; + } + + /** + * Convert a Buffer or an Array of Buffers to an ArrayBuffer. + * + * If the input is an Array of Buffers, they will be concatenated in the + * specified order to form the output ArrayBuffer. + */ + private toArrayBuffer(buf: Buffer | Buffer[]): ArrayBuffer { + if (Array.isArray(buf)) { + // An Array of Buffers. + let totalLength = 0; + for (const buffer of buf) { + totalLength += buffer.length; + } + + const ab = new ArrayBuffer(totalLength); + const view = new Uint8Array(ab); + let pos = 0; + for (const buffer of buf) { + pos += buffer.copy(view, pos); + } + return ab; + } else { + // A single Buffer. Return a copy of the underlying ArrayBuffer slice. + return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); + } + } +} diff --git a/src/providers/activeLearning/objectDetection.test.ts b/src/providers/activeLearning/objectDetection.test.ts new file mode 100644 index 0000000000..ed9e97dec9 --- /dev/null +++ b/src/providers/activeLearning/objectDetection.test.ts @@ -0,0 +1,123 @@ +import * as tf from "@tensorflow/tfjs"; +jest.mock("../storage/localFileSystemProxy"); +import { LocalFileSystemProxy } from "../storage/localFileSystemProxy"; +import { ObjectDetection, DetectedObject } from "./objectDetection"; +import { strings } from "../../common/strings"; +// tslint:disable-next-line:no-var-requires +const modelJson = require("../../../cocoSSDModel/model.json"); + +describe("Load an Object Detection model", () => { + it("Load model from file system using proxy", async () => { + const storageProviderMock = LocalFileSystemProxy as jest.Mock; + storageProviderMock.mockClear(); + + storageProviderMock.prototype.readText = jest.fn((fileName) => { + return Promise.resolve(JSON.stringify(modelJson)); + }); + + storageProviderMock.prototype.readBinary = jest.fn((fileName) => { + return Promise.resolve([]); + }); + + const model = new ObjectDetection(); + + try { + await model.load("path"); + } catch (_) { + // fully loading TF model fails has it has to load also weights + } + + expect(LocalFileSystemProxy.prototype.readText).toBeCalledWith("/model.json"); + + // Coco SSD Lite default embedded model has 5 weights matrix + expect(LocalFileSystemProxy.prototype.readBinary).toBeCalledTimes(5); + + // Modal not properly loaded as readBinary mock is not really loading the weights + expect(model.loaded).toBeFalsy(); + + const noDetection = await model.detect(null); + expect(noDetection.length).toEqual(0); + + model.dispose(); + }); + + it("Load model from http url", async () => { + window.fetch = jest.fn().mockImplementation((url, o) => { + if (url === "http://url/model.json") { + return Promise.resolve({ + ok: true, + json: () => modelJson, + }); + } else { + return Promise.resolve({ + ok: true, + data: () => [], + }); + } + }); + + const model = new ObjectDetection(); + + expect(model.load("http://url")).rejects.not.toBeNull(); + expect(window.fetch).toBeCalledTimes(1); + + // Modal not properly loaded as readBinary mock is not really loading the weights + expect(model.loaded).toBeFalsy(); + + const noDetection = await model.detect(null); + expect(noDetection.length).toEqual(0); + + model.dispose(); + }); +}); + +describe("Test Detection on Fake Model", () => { + beforeEach(() => { + spyOn(tf, "loadGraphModel").and.callFake(() => { + const model = { + executeAsync: + (x: tf.Tensor) => [tf.ones([1, 1917, 90]), tf.ones([1, 1917, 1, 4])], + }; + + return model; + }); + }); + + it("ObjectDetection detect method should generate output", async () => { + const model = new ObjectDetection(); + await model.load("path"); + + const x = tf.zeros([227, 227, 3]) as tf.Tensor3D; + + const data = await model.detect(x, 1); + + expect(data).toEqual([{bbox: [227, 227, 0, 0], class: strings.tags.warnings.unknownTagName, score: 1}]); + }); +}); + +describe("Test predictImage on Fake Model", () => { + beforeEach(() => { + spyOn(tf, "loadGraphModel").and.callFake(() => { + const model = { + executeAsync: + (x: tf.Tensor) => [tf.ones([1, 1917, 90]), tf.ones([1, 1917, 1, 4])], + }; + + return model; + }); + }); + + it("predictImage on a fake image", async () => { + const model = new ObjectDetection(); + await model.load("path"); + + const x = tf.zeros([227, 227, 3]) as tf.Tensor3D; + const regions = await model.predictImage(x, false, 1, 1); + + expect(regions.length).toEqual(20); + expect(regions[0].boundingBox.left).toEqual(227); + expect(regions[0].boundingBox.top).toEqual(227); + expect(regions[0].boundingBox.width).toEqual(0); + expect(regions[0].boundingBox.height).toEqual(0); + }); +}); diff --git a/src/providers/activeLearning/objectDetection.ts b/src/providers/activeLearning/objectDetection.ts new file mode 100755 index 0000000000..196db45aed --- /dev/null +++ b/src/providers/activeLearning/objectDetection.ts @@ -0,0 +1,253 @@ +import axios from "axios"; +import * as shortid from "shortid"; +import * as tf from "@tensorflow/tfjs"; +import { ElectronProxyHandler } from "./electronProxyHandler"; +import { IRegion, RegionType } from "../../models/applicationState"; +import { strings } from "../../common/strings"; + +// tslint:disable-next-line:interface-over-type-literal +export type DetectedObject = { + bbox: [number, number, number, number]; // [x, y, width, height] + class: string; + score: number; +}; + +/** + * Defines supported data types supported by Tensorflow JS + */ +export type ImageObject = tf.Tensor3D | ImageData | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement; + +/** + * Object Dectection loads active learning models and predicts regions + */ +export class ObjectDetection { + private modelLoaded: boolean = false; + + get loaded(): boolean { + return this.modelLoaded; + } + + private model: tf.GraphModel; + private jsonClasses: JSON; + + /** + * Dispose the tensors allocated by the model. You should call this when you + * are done with the model. + */ + public dispose() { + if (this.model) { + this.model.dispose(); + } + } + + /** + * Load a TensorFlow.js Object Detection model from file: or http URL. + * @param modelFolderPath file: or http URL to the model + */ + public async load(modelFolderPath: string) { + try { + if (modelFolderPath.toLowerCase().startsWith("http://") || + modelFolderPath.toLowerCase().startsWith("https://")) { + this.model = await tf.loadGraphModel(modelFolderPath + "/model.json"); + + const response = await axios.get(modelFolderPath + "/classes.json"); + this.jsonClasses = JSON.parse(JSON.stringify(response.data)); + } else { + const handler = new ElectronProxyHandler(modelFolderPath); + this.model = await tf.loadGraphModel(handler); + this.jsonClasses = await handler.loadClasses(); + } + + // Warmup the model. + const result = await this.model.executeAsync(tf.zeros([1, 300, 300, 3])) as tf.Tensor[]; + result.forEach(async (t) => await t.data()); + result.forEach(async (t) => t.dispose()); + this.modelLoaded = true; + } catch (err) { + this.modelLoaded = false; + throw err; + } + } + + /** + * Predict Regions from an HTMLImageElement returning list of IRegion. + * @param image ImageObject to be used for prediction + * @param predictTag Flag indicates if predict only region bounding box of tag too. + * @param xRatio Width compression ratio between the HTMLImageElement and the original image. + * @param yRatio Height compression ratio between the HTMLImageElement and the original image. + */ + public async predictImage(image: ImageObject, predictTag: boolean, xRatio: number, yRatio: number) + : Promise { + const regions: IRegion[] = []; + + const predictions = await this.detect(image); + predictions.forEach((prediction) => { + const left = Math.max(0, prediction.bbox[0] * xRatio); + const top = Math.max(0, prediction.bbox[1] * yRatio); + const width = Math.max(0, prediction.bbox[2] * xRatio); + const height = Math.max(0, prediction.bbox[3] * yRatio); + + regions.push({ + id: shortid.generate(), + type: RegionType.Rectangle, + tags: predictTag ? [prediction.class] : [], + boundingBox: { + left, + top, + width, + height, + }, + points: [{ + x: left, + y: top, + }, + { + x: left + width, + y: top, + }, + { + x: left + width, + y: top + height, + }, + { + x: left, + y: top + height, + }], + }); + }); + + return regions; + } + + /** + * Detect objects for an image returning a list of bounding boxes with + * associated class and score. + * + * @param img The image to detect objects from. Can be a tensor or a DOM + * element image, video, or canvas. + * @param maxNumBoxes The maximum number of bounding boxes of detected + * objects. There can be multiple objects of the same class, but at different + * locations. Defaults to 20. + * + */ + public async detect(img: ImageObject, maxNumBoxes: number = 20): Promise { + if (this.model) { + return this.infer(img, maxNumBoxes); + } + + return []; + } + + /** + * Infers through the model. + * + * @param img The image to classify. Can be a tensor or a DOM element image, + * video, or canvas. + * @param maxNumBoxes The maximum number of bounding boxes of detected + * objects. There can be multiple objects of the same class, but at different + * locations. Defaults to 20. + */ + private async infer(img: ImageObject, maxNumBoxes: number = 20): Promise { + const batched = tf.tidy(() => { + if (!(img instanceof tf.Tensor)) { + img = tf.browser.fromPixels(img); + } + // Reshape to a single-element batch so we can pass it to executeAsync. + return img.expandDims(0); + }); + const height = batched.shape[1]; + const width = batched.shape[2]; + + // model returns two tensors: + // 1. box classification score with shape of [1, 1917, 90] + // 2. box location with shape of [1, 1917, 1, 4] + // where 1917 is the number of box detectors, 90 is the number of classes. + // and 4 is the four coordinates of the box. + const result = await this.model.executeAsync(batched) as tf.Tensor[]; + + const scores = result[0].dataSync() as Float32Array; + const boxes = result[1].dataSync() as Float32Array; + + // clean the webgl tensors + batched.dispose(); + tf.dispose(result); + + const [maxScores, classes] = this.calculateMaxScores(scores, result[0].shape[1], result[0].shape[2]); + + const prevBackend = tf.getBackend(); + // run post process in cpu + tf.setBackend("cpu"); + const indexTensor = tf.tidy(() => { + const boxes2 = tf.tensor2d(boxes, [result[1].shape[1], result[1].shape[3]]); + return tf.image.nonMaxSuppression(boxes2, maxScores, maxNumBoxes, 0.5, 0.5); + }); + + const indexes = indexTensor.dataSync() as Float32Array; + indexTensor.dispose(); + + // restore previous backend + tf.setBackend(prevBackend); + + return this.buildDetectedObjects(width, height, boxes, maxScores, indexes, classes); + } + + private buildDetectedObjects( + width: number, height: number, boxes: Float32Array, scores: number[], + indexes: Float32Array, classes: number[]): DetectedObject[] { + const count = indexes.length; + const objects: DetectedObject[] = []; + + for (let i = 0; i < count; i++) { + const bbox = []; + for (let j = 0; j < 4; j++) { + bbox[j] = boxes[indexes[i] * 4 + j]; + } + const minY = bbox[0] * height; + const minX = bbox[1] * width; + const maxY = bbox[2] * height; + const maxX = bbox[3] * width; + bbox[0] = minX; + bbox[1] = minY; + bbox[2] = maxX - minX; + bbox[3] = maxY - minY; + objects.push({ + bbox: bbox as [number, number, number, number], + class: this.getClass(i, indexes, classes), + score: scores[indexes[i]], + }); + } + + return objects; + } + + private getClass(index: number, indexes: Float32Array, classes: number[]): string { + if (this.jsonClasses && index < indexes.length && indexes[index] < classes.length) { + const classId = classes[indexes[index]] - 1; + const classObject = this.jsonClasses[classId]; + + return classObject ? classObject.displayName : strings.tags.warnings.unknownTagName; + } + + return ""; + } + + private calculateMaxScores( + scores: Float32Array, numBoxes: number, + numClasses: number): [number[], number[]] { + const maxes = []; + const classes = []; + for (let i = 0; i < numBoxes; i++) { + let max = Number.MIN_VALUE; + let index = -1; + for (let j = 0; j < numClasses; j++) { + if (scores[i * numClasses + j] > max) { + max = scores[i * numClasses + j]; + index = j; + } + } + maxes[i] = max; + classes[i] = index; + } + return [maxes, classes]; + } +} diff --git a/src/react/components/common/assetPreview/imageAsset.tsx b/src/react/components/common/assetPreview/imageAsset.tsx index a68d89bece..7f5695116b 100644 --- a/src/react/components/common/assetPreview/imageAsset.tsx +++ b/src/react/components/common/assetPreview/imageAsset.tsx @@ -12,7 +12,8 @@ export class ImageAsset extends React.Component { ); + onError={this.props.onError} + crossOrigin="anonymous" />); } private onLoad = () => { diff --git a/src/react/components/common/assetPreview/tfrecordAsset.tsx b/src/react/components/common/assetPreview/tfrecordAsset.tsx index 774d0e63d1..8eeafe47f5 100644 --- a/src/react/components/common/assetPreview/tfrecordAsset.tsx +++ b/src/react/components/common/assetPreview/tfrecordAsset.tsx @@ -31,7 +31,8 @@ export class TFRecordAsset extends React.Component + onError={this.onError} + crossOrigin="anonymous" /> ); } diff --git a/src/react/components/common/assetPreview/videoAsset.tsx b/src/react/components/common/assetPreview/videoAsset.tsx index 7d445634f9..501c8dc289 100644 --- a/src/react/components/common/assetPreview/videoAsset.tsx +++ b/src/react/components/common/assetPreview/videoAsset.tsx @@ -73,7 +73,8 @@ export class VideoAsset extends React.Component { height="100%" autoPlay={autoPlay} src={videoPath} - onError={this.props.onError}> + onError={this.props.onError} + crossOrigin="anonymous"> {autoPlay && diff --git a/src/react/components/common/externalPicker/externalPicker.test.tsx b/src/react/components/common/externalPicker/externalPicker.test.tsx index 26c0edbd93..4d3da6bf7a 100644 --- a/src/react/components/common/externalPicker/externalPicker.test.tsx +++ b/src/react/components/common/externalPicker/externalPicker.test.tsx @@ -5,9 +5,7 @@ import ExternalPicker, { IExternalPickerProps, IExternalPickerState, FilterOpera import MockFactory from "../../../../common/mockFactory"; describe("External Picker", () => { - const onChangeHandler = jest.fn(() => { - console.log("hi"); - }); + const onChangeHandler = jest.fn(); const defaultProps = createProps({ id: "my-custom-control", value: "", diff --git a/src/react/components/pages/activeLearning/activeLearningForm.json b/src/react/components/pages/activeLearning/activeLearningForm.json new file mode 100644 index 0000000000..c8729d338e --- /dev/null +++ b/src/react/components/pages/activeLearning/activeLearningForm.json @@ -0,0 +1,82 @@ +{ + "type": "object", + "properties": { + "modelPathType": { + "type": "string", + "title": "${strings.activeLearning.form.properties.modelPathType.title}", + "description": "${strings.activeLearning.form.properties.modelPathType.description}", + "enum": [ + "coco", + "file", + "url" + ], + "default": "coco", + "enumNames": [ + "${strings.activeLearning.form.properties.modelPathType.options.preTrained}", + "${strings.activeLearning.form.properties.modelPathType.options.customFilePath}", + "${strings.activeLearning.form.properties.modelPathType.options.customWebUrl}" + ] + }, + "autoDetect": { + "title": "${strings.activeLearning.form.properties.autoDetect.title}", + "description": "${strings.activeLearning.form.properties.autoDetect.description}", + "type": "boolean" + }, + "predictTag": { + "title": " ${strings.activeLearning.form.properties.predictTag.title}", + "description": "${strings.activeLearning.form.properties.predictTag.description}", + "type": "boolean" + } + }, + "dependencies": { + "modelPathType": { + "oneOf": [ + { + "properties": { + "modelPathType": { + "enum": [ + "coco" + ] + } + } + }, + { + "required": [ + "modelPath" + ], + "properties": { + "modelPathType": { + "enum": [ + "file" + ] + }, + "modelPath": { + "title": "${strings.activeLearning.form.properties.modelPath.title}", + "description": "${strings.activeLearning.form.properties.modelPath.description}", + "type": "string" + } + } + }, + { + "required": [ + "modelUrl" + ], + "properties": { + "modelPathType": { + "enum": [ + "url" + ] + }, + "modelUrl": { + "title": "${strings.activeLearning.form.properties.modelUrl.title}", + "description": "${strings.activeLearning.form.properties.modelUrl.description}", + "default": "http://", + "pattern": "^https?\\\\://[a-zA-Z0-9\\\\-\\\\.]+\\\\.[a-zA-Z]{2,3}(/\\\\S*)?$", + "type": "string" + } + } + } + ] + } + } +} diff --git a/src/react/components/pages/activeLearning/activeLearningForm.test.tsx b/src/react/components/pages/activeLearning/activeLearningForm.test.tsx new file mode 100644 index 0000000000..e517c31dfb --- /dev/null +++ b/src/react/components/pages/activeLearning/activeLearningForm.test.tsx @@ -0,0 +1,95 @@ +import React from "react"; +import { IActiveLearningFormProps, ActiveLearningForm, IActiveLearningFormState } from "./activeLearningForm"; +import { ReactWrapper, mount } from "enzyme"; +import { ModelPathType, IActiveLearningSettings } from "../../../../models/applicationState"; +import Form from "react-jsonschema-form"; + +describe("Active Learning Form", () => { + const onChangeHandler = jest.fn(); + const onSubmitHandler = jest.fn(); + const onCancelHandler = jest.fn(); + const defaultProps: IActiveLearningFormProps = { + settings: { + modelPathType: ModelPathType.Coco, + modelPath: null, + modelUrl: null, + autoDetect: false, + predictTag: true, + }, + onChange: onChangeHandler, + onSubmit: onSubmitHandler, + onCancel: onCancelHandler, + }; + + function createComponent(props?: IActiveLearningFormProps) + : ReactWrapper { + props = props || defaultProps; + return mount(); + } + + it("renders a dynamic json schema form with default props", () => { + const wrapper = createComponent(); + expect(wrapper.find(Form).exists()).toBe(true); + expect(wrapper.state().formData).toEqual(defaultProps.settings); + }); + + it("sets formData state when loaded with different props", () => { + const props: IActiveLearningFormProps = { + ...defaultProps, + settings: { + modelPathType: ModelPathType.Url, + modelUrl: "https://myserver.com/myModel", + autoDetect: true, + predictTag: true, + }, + }; + + const wrapper = createComponent(props); + expect(wrapper.state().formData).toEqual(props.settings); + }); + + it("updates form data when the props change", () => { + const wrapper = createComponent(); + + const newSettings: IActiveLearningSettings = { + modelPathType: ModelPathType.Url, + modelUrl: "https://myserver.com/myModel", + autoDetect: true, + predictTag: true, + }; + + wrapper.setProps({ settings: newSettings }); + expect(wrapper.state().formData).toEqual(newSettings); + }); + + it("sets formData state when form changes", () => { + const wrapper = createComponent(); + const formData: IActiveLearningSettings = { + modelPathType: ModelPathType.Url, + modelUrl: "https://myserver.com/myModel", + autoDetect: true, + predictTag: true, + }; + + // Set type to URL + wrapper.find(Form).props().onChange({ formData: { modelPathType: ModelPathType.Url } }); + // Set the remaining settings + wrapper.find(Form).props().onChange({ formData }); + expect(wrapper.state().formData).toEqual(formData); + expect(onChangeHandler).toBeCalledWith(formData); + }); + + it("submits form data to the registered submit handler", () => { + const wrapper = createComponent(); + wrapper.find(Form).props().onSubmit({ formData: defaultProps.settings }); + + expect(onSubmitHandler).toBeCalledWith(defaultProps.settings); + }); + + it("raises the cancel event and called registered handler", () => { + const wrapper = createComponent(); + wrapper.find(".btn-cancel").simulate("click"); + + expect(onCancelHandler).toBeCalled(); + }); +}); diff --git a/src/react/components/pages/activeLearning/activeLearningForm.tsx b/src/react/components/pages/activeLearning/activeLearningForm.tsx new file mode 100644 index 0000000000..ab5f9579ad --- /dev/null +++ b/src/react/components/pages/activeLearning/activeLearningForm.tsx @@ -0,0 +1,112 @@ +import React from "react"; +import Form, { ISubmitEvent, IChangeEvent, Widget } from "react-jsonschema-form"; +import { IActiveLearningSettings, ModelPathType } from "../../../../models/applicationState"; +import { strings, addLocValues } from "../../../../common/strings"; +import CustomFieldTemplate from "../../common/customField/customFieldTemplate"; +import LocalFolderPicker from "../../common/localFolderPicker/localFolderPicker"; +import { CustomWidget } from "../../common/customField/customField"; +import Checkbox from "rc-checkbox"; + +// tslint:disable-next-line:no-var-requires +const formSchema = addLocValues(require("./activeLearningForm.json")); +// tslint:disable-next-line:no-var-requires +const uiSchema = addLocValues(require("./activeLearningForm.ui.json")); + +export interface IActiveLearningFormProps extends React.Props { + settings: IActiveLearningSettings; + onSubmit: (settings: IActiveLearningSettings) => void; + onChange?: (settings: IActiveLearningSettings) => void; + onCancel?: () => void; +} + +export interface IActiveLearningFormState { + classNames: string[]; + formData: IActiveLearningSettings; + uiSchema: any; + formSchema: any; +} + +export class ActiveLearningForm extends React.Component { + public state: IActiveLearningFormState = { + classNames: ["needs-validation"], + uiSchema: { ...uiSchema }, + formSchema: { ...formSchema }, + formData: { + ...this.props.settings, + }, + }; + + private widgets = { + localFolderPicker: (LocalFolderPicker as any) as Widget, + checkbox: CustomWidget(Checkbox, (props) => ({ + checked: props.value, + onChange: (value) => props.onChange(value.target.checked), + disabled: props.disabled, + })), + }; + + public componentDidUpdate(prevProps: Readonly) { + if (this.props.settings !== prevProps.settings) { + this.setState({ formData: this.props.settings }); + } + } + + public render() { + return ( +
+
+ + +
+
+ ); + } + + private onFormChange = (changeEvent: IChangeEvent): void => { + let updatedSettings = changeEvent.formData; + + if (changeEvent.formData.modelPathType !== this.state.formData.modelPathType) { + updatedSettings = { + ...changeEvent.formData, + modelPath: null, + modelUrl: null, + }; + } + + this.setState({ + formData: updatedSettings, + }, () => { + if (this.props.onChange) { + this.props.onChange(updatedSettings); + } + }); + } + + private onFormSubmit = (args: ISubmitEvent): void => { + const settings: IActiveLearningSettings = { + ...args.formData, + }; + + this.setState({ formData: settings }); + this.props.onSubmit(settings); + } + + private onFormCancel = (): void => { + if (this.props.onCancel) { + this.props.onCancel(); + } + } +} diff --git a/src/react/components/pages/activeLearning/activeLearningForm.ui.json b/src/react/components/pages/activeLearning/activeLearningForm.ui.json new file mode 100644 index 0000000000..3608b14c16 --- /dev/null +++ b/src/react/components/pages/activeLearning/activeLearningForm.ui.json @@ -0,0 +1,17 @@ +{ + "modelPath": { + "ui:widget": "localFolderPicker" + }, + "predictTag": { + "ui:widget": "checkbox" + }, + "autoDetect": { + "ui:widget": "checkbox" + }, + "ui:order": [ + "modelPathType", + "*", + "predictTag", + "autoDetect" + ] +} diff --git a/src/react/components/pages/activeLearning/activeLearningPage.test.tsx b/src/react/components/pages/activeLearning/activeLearningPage.test.tsx new file mode 100644 index 0000000000..9bc1679eb2 --- /dev/null +++ b/src/react/components/pages/activeLearning/activeLearningPage.test.tsx @@ -0,0 +1,118 @@ +import React from "react"; +import ActiveLearningPage, { IActiveLearningPageProps, IActiveLearningPageState } from "./activeLearningPage"; +import { ReactWrapper, mount } from "enzyme"; +import { Provider } from "react-redux"; +import { BrowserRouter as Router } from "react-router-dom"; +import createReduxStore from "../../../../redux/store/store"; +import MockFactory from "../../../../common/mockFactory"; +import { ActiveLearningForm } from "./activeLearningForm"; +import { IActiveLearningSettings, ModelPathType } from "../../../../models/applicationState"; +jest.mock("../../../../services/projectService"); +import ProjectService from "../../../../services/projectService"; +import { toast } from "react-toastify"; +import { strings } from "../../../../common/strings"; + +describe("Active Learning Page", () => { + function createComponent(store, props: IActiveLearningPageProps): ReactWrapper { + return mount( + + + + + , + ); + } + + beforeAll(() => { + toast.success = jest.fn(() => 2); + }); + + it("renders and loads settings from props", () => { + const testProject = MockFactory.createTestProject("TestProject"); + const store = createReduxStore(MockFactory.initialState({ + currentProject: testProject, + })); + + const props = MockFactory.activeLearningProps(); + const wrapper = createComponent(store, props); + + const activeLearningPage = wrapper + .find(ActiveLearningPage) + .childAt(0) as ReactWrapper; + + expect(activeLearningPage.state().settings).toEqual(testProject.activeLearningSettings); + expect(wrapper.find(ActiveLearningForm).props().settings).toEqual(testProject.activeLearningSettings); + }); + + it("updates active learning settings if project changes", () => { + const store = createReduxStore(MockFactory.initialState()); + const props = MockFactory.activeLearningProps(); + + const testProject = props.recentProjects[0]; + const wrapper = createComponent(store, props); + + const activeLearningPage = wrapper + .find(ActiveLearningPage) + .childAt(0) as ReactWrapper; + + expect(activeLearningPage.state().settings).toEqual(testProject.activeLearningSettings); + expect(wrapper.find(ActiveLearningForm).props().settings).toEqual(testProject.activeLearningSettings); + }); + + it("saves the active learning settings when the form is submitted", async () => { + const testProject = MockFactory.createTestProject("TestProject"); + const activeLearningSettings: IActiveLearningSettings = { + ...testProject.activeLearningSettings, + modelPathType: ModelPathType.Url, + modelUrl: "http://myserver.com/custommodel", + autoDetect: true, + predictTag: true, + }; + + const store = createReduxStore(MockFactory.initialState({ + currentProject: testProject, + })); + + const projectServiceMock = ProjectService as jest.Mocked; + projectServiceMock.prototype.load = jest.fn((project) => Promise.resolve(project)); + projectServiceMock.prototype.save = jest.fn((project) => Promise.resolve(project)); + + const props = MockFactory.activeLearningProps(); + const saveProjectSpy = jest.spyOn(props.actions, "saveProject"); + saveProjectSpy.mockClear(); + + const wrapper = createComponent(store, props); + + const activeLearningForm = wrapper.find(ActiveLearningForm); + activeLearningForm.props().onSubmit(activeLearningSettings); + + await MockFactory.flushUi(); + + expect(saveProjectSpy).toBeCalledWith(expect.objectContaining({ + ...testProject, + activeLearningSettings, + })); + + expect(toast.success).toBeCalledWith(strings.activeLearning.messages.saveSuccess); + expect(props.history.goBack).toBeCalled(); + }); + + it("returns to the previous page when the form is cancelled", async () => { + const testProject = MockFactory.createTestProject("TestProject"); + const store = createReduxStore(MockFactory.initialState({ + currentProject: testProject, + })); + + const props = MockFactory.activeLearningProps(); + const saveProjectSpy = jest.spyOn(props.actions, "saveProject"); + saveProjectSpy.mockClear(); + + const wrapper = createComponent(store, props); + + wrapper.find(ActiveLearningForm).props().onCancel(); + + await MockFactory.flushUi(); + expect(props.history.goBack).toBeCalled(); + expect(saveProjectSpy).not.toBeCalled(); + }); +}); diff --git a/src/react/components/pages/activeLearning/activeLearningPage.tsx b/src/react/components/pages/activeLearning/activeLearningPage.tsx new file mode 100644 index 0000000000..eefab2c3a7 --- /dev/null +++ b/src/react/components/pages/activeLearning/activeLearningPage.tsx @@ -0,0 +1,93 @@ +import React from "react"; +import { connect } from "react-redux"; +import { RouteComponentProps } from "react-router"; +import { bindActionCreators } from "redux"; +import { IActiveLearningSettings, IProject, IApplicationState } from "../../../../models/applicationState"; +import IProjectActions, * as projectActions from "../../../../redux/actions/projectActions"; +import { strings } from "../../../../common/strings"; +import { ActiveLearningForm } from "./activeLearningForm"; +import { toast } from "react-toastify"; + +export interface IActiveLearningPageProps extends RouteComponentProps, React.Props { + project: IProject; + recentProjects: IProject[]; + actions: IProjectActions; +} + +export interface IActiveLearningPageState { + settings: IActiveLearningSettings; +} + +function mapStateToProps(state: IApplicationState) { + return { + project: state.currentProject, + recentProjects: state.recentProjects, + }; +} + +function mapDispatchToProps(dispatch) { + return { + actions: bindActionCreators(projectActions, dispatch), + }; +} + +@connect(mapStateToProps, mapDispatchToProps) +export default class ActiveLearningPage extends React.Component { + public state: IActiveLearningPageState = { + settings: this.props.project ? this.props.project.activeLearningSettings : null, + }; + + public async componentDidMount() { + const projectId = this.props.match.params["projectId"]; + // If we are creating a new project check to see if there is a partial + // project already created in local storage + if (!this.props.project && projectId) { + const projectToLoad = this.props.recentProjects.find((project) => project.id === projectId); + if (projectToLoad) { + await this.props.actions.loadProject(projectToLoad); + } + } + } + + public componentDidUpdate(prevProps: Readonly) { + if (prevProps.project !== this.props.project) { + this.setState({ settings: this.props.project.activeLearningSettings }); + } + } + + public render() { + return ( +
+
+

+ + + {strings.activeLearning.title} + +

+
+ +
+
+
+ ); + } + + private onFormSubmit = async (settings: IActiveLearningSettings): Promise => { + const updatedProject: IProject = { + ...this.props.project, + activeLearningSettings: settings, + }; + + await this.props.actions.saveProject(updatedProject); + toast.success(strings.activeLearning.messages.saveSuccess); + this.props.history.goBack(); + } + + private onFormCancel = (): void => { + this.props.history.goBack(); + } +} diff --git a/src/react/components/pages/activeLearningPage.tsx b/src/react/components/pages/activeLearningPage.tsx deleted file mode 100644 index cf36ae08e1..0000000000 --- a/src/react/components/pages/activeLearningPage.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from "react"; - -export default class ActiveLearningPage extends React.Component { - public render() { - return ( -
ActiveLearningPage
- ); - } -} diff --git a/src/react/components/pages/editorPage/canvas.test.tsx b/src/react/components/pages/editorPage/canvas.test.tsx index a37c6f6a85..a028f2dc22 100644 --- a/src/react/components/pages/editorPage/canvas.test.tsx +++ b/src/react/components/pages/editorPage/canvas.test.tsx @@ -45,6 +45,7 @@ describe("Editor Canvas", () => { const canvasProps: ICanvasProps = { selectedAsset: getAssetMetadata(), onAssetMetadataChanged: jest.fn(), + onCanvasRendered: jest.fn(), editorMode: EditorMode.Rectangle, selectionMode: SelectionMode.RECT, project: MockFactory.createTestProject(), diff --git a/src/react/components/pages/editorPage/canvas.tsx b/src/react/components/pages/editorPage/canvas.tsx index 0205e6e186..ef2f86827c 100644 --- a/src/react/components/pages/editorPage/canvas.tsx +++ b/src/react/components/pages/editorPage/canvas.tsx @@ -25,6 +25,7 @@ export interface ICanvasProps extends React.Props { children?: ReactElement; onAssetMetadataChanged?: (assetMetadata: IAssetMetadata) => void; onSelectedRegionsChanged?: (regions: IRegion[]) => void; + onCanvasRendered?: (canvas: HTMLCanvasElement) => void; } export interface ICanvasState { @@ -455,6 +456,11 @@ export default class Canvas extends React.Component private setContentSource = async (contentSource: ContentSource) => { try { await this.editor.addContentSource(contentSource as any); + + if (this.props.onCanvasRendered) { + const canvas = this.canvasZone.current.querySelector("canvas"); + this.props.onCanvasRendered(canvas); + } } catch (e) { console.warn(e); } diff --git a/src/react/components/pages/editorPage/editorPage.test.tsx b/src/react/components/pages/editorPage/editorPage.test.tsx index f8a717366f..8baa7631bc 100644 --- a/src/react/components/pages/editorPage/editorPage.test.tsx +++ b/src/react/components/pages/editorPage/editorPage.test.tsx @@ -8,7 +8,7 @@ import EditorPage, { IEditorPageProps, IEditorPageState } from "./editorPage"; import MockFactory from "../../../../common/mockFactory"; import { IApplicationState, IAssetMetadata, IProject, - EditorMode, IAsset, AssetState, AssetType, ISize, + EditorMode, IAsset, AssetState, ISize, IActiveLearningSettings, ModelPathType, } from "../../../../models/applicationState"; import { AssetProviderFactory } from "../../../../providers/storage/assetProviderFactory"; import createReduxStore from "../../../../redux/store/store"; @@ -31,6 +31,9 @@ import EditorSideBar from "./editorSideBar"; import Alert from "../../common/alert/alert"; import registerMixins from "../../../../registerMixins"; import { TagInput } from "../../common/tagInput/tagInput"; +import { EditorToolbar } from "./editorToolbar"; +import { ToolbarItem } from "../../toolbar/toolbarItem"; +import { ActiveLearningService } from "../../../../services/activeLearningService"; function createComponent(store, props: IEditorPageProps): ReactWrapper { return mount( @@ -60,9 +63,20 @@ describe("Editor Page Component", () => { let assetServiceMock: jest.Mocked = null; let projectServiceMock: jest.Mocked = null; + const electronMock = { + remote: { + app: { + getAppPath: jest.fn(() => ""), + }, + }, + }; + const testAssets: IAsset[] = MockFactory.createTestAssets(5); beforeAll(() => { + registerToolbar(); + window["require"] = jest.fn(() => electronMock); + const editorMock = Editor as any; editorMock.prototype.addContentSource = jest.fn(() => Promise.resolve()); editorMock.prototype.scaleRegionToSourceSize = jest.fn((regionData: any) => regionData); @@ -334,45 +348,6 @@ describe("Editor Page Component", () => { expect(saveProjectSpy).toBeCalledWith(expect.objectContaining(partialProject)); }); - describe("Editor Page Component Forcing Tag Scenario", () => { - it("Detect new Tag from asset metadata when selecting the Asset", async () => { - const getAssetMetadataMock = assetServiceMock.prototype.getAssetMetadata as jest.Mock; - getAssetMetadataMock.mockImplementationOnce((asset) => { - const assetMetadata: IAssetMetadata = { - asset: { ...asset }, - regions: [{ ...MockFactory.createTestRegion(), tags: ["NEWTAG"] }], - version: appInfo.version, - }; - return Promise.resolve(assetMetadata); - }); - - // create test project and asset - const testProject = MockFactory.createTestProject("TestProject"); - - // mock store and props - const store = createStore(testProject, true); - const props = MockFactory.editorPageProps(testProject.id); - - const saveProjectSpy = jest.spyOn(props.actions, "saveProject"); - - // create mock editor page - createComponent(store, props); - - const partialProjectToBeSaved = { - id: testProject.id, - name: testProject.name, - tags: expect.arrayContaining([{ - name: "NEWTAG", - color: expect.any(String), - }]), - }; - - await MockFactory.flushUi(); - - expect(saveProjectSpy).toBeCalledWith(expect.objectContaining(partialProjectToBeSaved)); - }); - }); - it("When an image is updated the asset metadata is updated", async () => { const testProject = MockFactory.createTestProject("TestProject"); const store = createStore(testProject, true); @@ -498,7 +473,6 @@ describe("Editor Page Component", () => { const removeAllRegionsConfirm = jest.fn(); beforeAll(() => { - registerToolbar(); const clipboard = (navigator as any).clipboard; if (!(clipboard && clipboard.writeText)) { (navigator as any).clipboard = { @@ -826,6 +800,72 @@ describe("Editor Page Component", () => { })); }); }); + + describe("Active Learning", async () => { + let wrapper: ReactWrapper; + let editorPage: ReactWrapper; + const activeLearningMock = ActiveLearningService as jest.Mocked; + + async function beforeActiveLearningTest(activeLearningSettings?: IActiveLearningSettings) { + document.querySelector = MockFactory.mockCanvas(); + activeLearningMock.prototype.isModelLoaded = jest.fn(() => true); + activeLearningMock.prototype.predictRegions = jest.fn((canvas, assetMetadtata) => { + return Promise.resolve({ + ...assetMetadtata, + predicted: true, + }); + }); + const project = MockFactory.createTestProject(); + + if (activeLearningSettings) { + project.activeLearningSettings = activeLearningSettings; + } + + const store = createReduxStore({ + ...MockFactory.initialState(), + currentProject: project, + }); + + wrapper = createComponent(store, MockFactory.editorPageProps()); + await waitForSelectedAsset(wrapper); + wrapper.update(); + editorPage = wrapper.find(EditorPage).childAt(0); + } + + it("predicts regions when auto detect has been enabled", async () => { + const activeLearningSettings: IActiveLearningSettings = { + modelPathType: ModelPathType.Coco, + autoDetect: true, + predictTag: true, + }; + + await beforeActiveLearningTest(activeLearningSettings); + + editorPage.find(Canvas).props().onCanvasRendered(document.createElement("canvas")); + expect(activeLearningMock.prototype.predictRegions).toBeCalled(); + }); + + it("predicts regions when toolbar item is selected", async () => { + await beforeActiveLearningTest(); + + const toolbarItem = { + props: { + name: ToolbarItemName.ActiveLearning, + }, + }; + + const selectedAsset = editorPage.state().selectedAsset; + wrapper.find(EditorToolbar).props().onToolbarItemSelected(toolbarItem as ToolbarItem); + + await MockFactory.flushUi(); + + expect(activeLearningMock.prototype.predictRegions).toBeCalledWith(expect.anything(), selectedAsset); + expect(assetServiceMock.prototype.save).toBeCalledWith({ + ...selectedAsset, + predicted: true, + }); + }); + }); }); function createStore(project: IProject, setCurrentProject: boolean = false): Store { diff --git a/src/react/components/pages/editorPage/editorPage.tsx b/src/react/components/pages/editorPage/editorPage.tsx index c4d3a3b723..4cb52f0607 100644 --- a/src/react/components/pages/editorPage/editorPage.tsx +++ b/src/react/components/pages/editorPage/editorPage.tsx @@ -10,14 +10,14 @@ import { strings } from "../../../../common/strings"; import { AssetState, AssetType, EditorMode, IApplicationState, IAppSettings, IAsset, IAssetMetadata, IProject, IRegion, - ISize, ITag, + ISize, ITag, IAdditionalPageSettings, AppError, ErrorCode, } from "../../../../models/applicationState"; import { IToolbarItemRegistration, ToolbarItemFactory } from "../../../../providers/toolbar/toolbarItemFactory"; import IApplicationActions, * as applicationActions from "../../../../redux/actions/applicationActions"; import IProjectActions, * as projectActions from "../../../../redux/actions/projectActions"; import { ToolbarItemName } from "../../../../registerToolbar"; import { AssetService } from "../../../../services/assetService"; -import { AssetPreview, IAssetPreviewSettings } from "../../common/assetPreview/assetPreview"; +import { AssetPreview } from "../../common/assetPreview/assetPreview"; import { KeyboardBinding } from "../../common/keyboardBinding/keyboardBinding"; import { KeyEventType } from "../../common/keyboardManager/keyboardManager"; import { TagInput } from "../../common/tagInput/tagInput"; @@ -29,8 +29,8 @@ import EditorSideBar from "./editorSideBar"; import { EditorToolbar } from "./editorToolbar"; import Alert from "../../common/alert/alert"; import Confirm from "../../common/confirm/confirm"; -// tslint:disable-next-line:no-var-requires -const tagColors = require("../../common/tagColors.json"); +import { ActiveLearningService } from "../../../../services/activeLearningService"; +import { toast } from "react-toastify"; /** * Properties for Editor Page @@ -64,7 +64,7 @@ export interface IEditorPageState { /** The child assets used for nest asset typs */ childAssets?: IAsset[]; /** Additional settings for asset previews */ - additionalSettings?: IAssetPreviewSettings; + additionalSettings?: IAdditionalPageSettings; /** Most recently selected tag */ selectedTag: string; /** Tags locked for region labeling */ @@ -101,7 +101,6 @@ function mapDispatchToProps(dispatch) { */ @connect(mapStateToProps, mapDispatchToProps) export default class EditorPage extends React.Component { - public state: IEditorPageState = { selectedTag: null, lockedTags: [], @@ -109,12 +108,16 @@ export default class EditorPage extends React.Component = React.createRef(); @@ -129,6 +132,8 @@ export default class EditorPage extends React.Component project.id === projectId); await this.props.actions.loadProject(project); } + + this.activeLearningService = new ActiveLearningService(this.props.project.activeLearningSettings); } public async componentDidUpdate(prevProps: Readonly) { @@ -143,6 +148,7 @@ export default class EditorPage extends React.Component { + // When active learning auto-detect is enabled + // run predictions when asset changes + if (this.props.project.activeLearningSettings.autoDetect && !this.state.selectedAsset.asset.predicted) { + await this.predictRegions(canvas); + } + } + private onSelectedRegionsChanged = (selectedRegions: IRegion[]) => { this.setState({ selectedRegions }); } @@ -540,6 +558,41 @@ export default class EditorPage extends React.Component { + canvas = canvas || document.querySelector("canvas"); + if (!canvas) { + return; + } + + // Load the configured ML model + if (!this.activeLearningService.isModelLoaded()) { + let toastId: number = null; + try { + toastId = toast.info(strings.activeLearning.messages.loadingModel, { autoClose: false }); + await this.activeLearningService.ensureModelLoaded(); + } catch (e) { + toast.error(strings.activeLearning.messages.errorLoadModel); + return; + } finally { + toast.dismiss(toastId); + } + } + + // Predict and add regions to current asset + try { + const updatedAssetMetadata = await this.activeLearningService + .predictRegions(canvas, this.state.selectedAsset); + + await this.onAssetMetadataChanged(updatedAssetMetadata); + this.setState({ selectedAsset: updatedAssetMetadata }); + } catch (e) { + throw new AppError(ErrorCode.ActiveLearningPredictionError, "Error predicting regions"); } } @@ -579,7 +632,6 @@ export default class EditorPage extends React.Component region.tags.forEach((tag) => assetTags.add(tag))); - - const newTags: ITag[] = this.props.project.tags ? [...this.props.project.tags] : []; - let updateTags = false; - - assetTags.forEach((tag) => { - if (!this.props.project.tags || this.props.project.tags.length === 0 || - !this.props.project.tags.find((projectTag) => tag === projectTag.name)) { - newTags.push({ - name: tag, - color: tagColors[newTags.length % tagColors.length], - }); - updateTags = true; - } - }); - - if (updateTags) { - asset.asset.state = AssetState.Tagged; - const newProject = { ...this.props.project, tags: newTags }; - await this.props.actions.saveAssetMetadata(newProject, asset); - await this.props.actions.saveProject(newProject); - } - } - private loadProjectAssets = async (): Promise => { if (this.loadingProjectAssets || this.state.assets.length > 0) { return; diff --git a/src/react/components/pages/export/exportForm.tsx b/src/react/components/pages/export/exportForm.tsx index 8263ddb875..e97534e86b 100644 --- a/src/react/components/pages/export/exportForm.tsx +++ b/src/react/components/pages/export/exportForm.tsx @@ -116,7 +116,6 @@ export default class ExportForm extends React.ComponentProfileSettingsPage - ); - } -} diff --git a/src/react/components/pages/projectSettings/projectForm.tsx b/src/react/components/pages/projectSettings/projectForm.tsx index 6c3755d8a8..0cfc8dad8e 100644 --- a/src/react/components/pages/projectSettings/projectForm.tsx +++ b/src/react/components/pages/projectSettings/projectForm.tsx @@ -1,5 +1,5 @@ import React from "react"; -import Form, { FormValidation, ISubmitEvent, IChangeEvent } from "react-jsonschema-form"; +import Form, { FormValidation, ISubmitEvent, IChangeEvent, Widget } from "react-jsonschema-form"; import { ITagsInputProps, TagEditorModal, TagsInput } from "vott-react"; import { addLocValues, strings } from "../../../../common/strings"; import { IConnection, IProject, ITag, IAppSettings } from "../../../../models/applicationState"; @@ -10,6 +10,7 @@ import CustomFieldTemplate from "../../common/customField/customFieldTemplate"; import { ISecurityTokenPickerProps, SecurityTokenPicker } from "../../common/securityTokenPicker/securityTokenPicker"; import "vott-react/dist/css/tagsInput.css"; import { IConnectionProviderPickerProps } from "../../common/connectionProviderPicker/connectionProviderPicker"; +import LocalFolderPicker from "../../common/localFolderPicker/localFolderPicker"; // tslint:disable-next-line:no-var-requires const formSchema = addLocValues(require("./projectForm.json")); @@ -51,6 +52,10 @@ export interface IProjectFormState { * @description - Form for editing or creating VoTT projects */ export default class ProjectForm extends React.Component { + private widgets = { + localFolderPicker: (LocalFolderPicker as any) as Widget, + }; + private tagsInput: React.RefObject; private tagEditorModal: React.RefObject; @@ -95,6 +100,7 @@ export default class ProjectForm extends React.Component { @@ -43,7 +42,6 @@ describe("Main Content Router", () => { expect(pathMap["/"]).toBe(HomePage); expect(pathMap["/settings"]).toBe(SettingsPage); expect(pathMap["/connections"]).toBe(ConnectionsPage); - expect(pathMap["/profile"]).toBe(ProfilePage); }); it("renders a redirect when no route is matched", () => { diff --git a/src/react/components/shell/mainContentRouter.tsx b/src/react/components/shell/mainContentRouter.tsx index 4d6c6687ba..c8b8893c1e 100644 --- a/src/react/components/shell/mainContentRouter.tsx +++ b/src/react/components/shell/mainContentRouter.tsx @@ -1,13 +1,12 @@ import React from "react"; -import { Switch, Route, Redirect } from "react-router-dom"; +import { Switch, Route } from "react-router-dom"; import HomePage from "../pages/homepage/homePage"; -import ActiveLearningPage from "../pages/activeLearningPage"; +import ActiveLearningPage from "../pages/activeLearning/activeLearningPage"; import AppSettingsPage from "../pages/appSettings/appSettingsPage"; import ConnectionPage from "../pages/connections/connectionsPage"; import EditorPage from "../pages/editorPage/editorPage"; import ExportPage from "../pages/export/exportPage"; import ProjectSettingsPage from "../pages/projectSettings/projectSettingsPage"; -import ProfileSettingsPage from "../pages/profileSettingsPage"; /** * @name - Main Content Router @@ -19,7 +18,6 @@ export default function MainContentRouter() { - diff --git a/src/react/components/shell/sidebar.test.tsx b/src/react/components/shell/sidebar.test.tsx index 5beda94a6f..edd21cfdae 100644 --- a/src/react/components/shell/sidebar.test.tsx +++ b/src/react/components/shell/sidebar.test.tsx @@ -16,6 +16,6 @@ describe("Sidebar Component", () => { expect(wrapper).not.toBeNull(); const links = wrapper.find("ul li"); - expect(links.length).toEqual(6); + expect(links.length).toEqual(7); }); }); diff --git a/src/react/components/shell/sidebar.tsx b/src/react/components/shell/sidebar.tsx index 5b262d9096..ea6598bd49 100644 --- a/src/react/components/shell/sidebar.tsx +++ b/src/react/components/shell/sidebar.tsx @@ -39,7 +39,16 @@ export default function Sidebar({ project }) { - + + + +
  • + + + +
  • diff --git a/src/redux/actions/projectActions.test.ts b/src/redux/actions/projectActions.test.ts index f9a49d5827..c0f587bdcf 100644 --- a/src/redux/actions/projectActions.test.ts +++ b/src/redux/actions/projectActions.test.ts @@ -11,7 +11,7 @@ import ProjectService from "../../services/projectService"; jest.mock("../../services/assetService"); import { AssetService } from "../../services/assetService"; import { ExportProviderFactory } from "../../providers/export/exportProviderFactory"; -import { ExportAssetState, IExportProvider } from "../../providers/export/exportProvider"; +import { IExportProvider } from "../../providers/export/exportProvider"; import { IApplicationState, IProject } from "../../models/applicationState"; import initialState from "../store/initialState"; import { appInfo } from "../../common/appInfo"; @@ -87,40 +87,6 @@ describe("Project Redux Actions", () => { expect(result.version).toEqual(appInfo.version); }); - it("Save Project action on new project correctly add default export format", async () => { - projectServiceMock.prototype.save = jest.fn((project) => Promise.resolve(project)); - - const skeletonProject = MockFactory.createTestProject("TestProject"); - const project = { - ...skeletonProject, - exportFormat: null, - }; - - const result = await projectActions.saveProject(project)(store.dispatch, store.getState); - - expect(result.exportFormat).toEqual({ - providerType: "vottJson", - providerOptions: { - assetState: ExportAssetState.Visited, - includeImages: true, - }, - }); - }); - - it("Save Project action on new project correctly set tags to empty if none created", async () => { - projectServiceMock.prototype.save = jest.fn((project) => Promise.resolve(project)); - - const skeletonProject = MockFactory.createTestProject("TestProject"); - const project = { - ...skeletonProject, - tags: null, - }; - - const result = await projectActions.saveProject(project)(store.dispatch, store.getState); - - expect(result.tags).toEqual([]); - }); - it("Save Project action does not override existing export format", async () => { projectServiceMock.prototype.save = jest.fn((project) => Promise.resolve(project)); diff --git a/src/redux/actions/projectActions.ts b/src/redux/actions/projectActions.ts index 5d853ec6ad..f15575d851 100644 --- a/src/redux/actions/projectActions.ts +++ b/src/redux/actions/projectActions.ts @@ -80,24 +80,7 @@ export function saveProject(project: IProject) throw new AppError(ErrorCode.SecurityTokenNotFound, "Security Token Not Found"); } - const defaultExportProviderOptions: IVottJsonExportProviderOptions = { - assetState: ExportAssetState.Visited, - includeImages: true, - }; - - const defaultExportFormat: IExportFormat = { - providerType: "vottJson", - providerOptions: defaultExportProviderOptions, - }; - - const newProject = { - ...project, - version: appInfo.version, - exportFormat: project.exportFormat || defaultExportFormat, - tags: project.tags || [], - }; - - const savedProject = await projectService.save(newProject, projectToken); + const savedProject = await projectService.save(project, projectToken); dispatch(saveProjectAction(savedProject)); // Reload project after save actions diff --git a/src/redux/reducers/currentProjectReducer.test.ts b/src/redux/reducers/currentProjectReducer.test.ts index 536e2f30d9..56c6f9802d 100644 --- a/src/redux/reducers/currentProjectReducer.test.ts +++ b/src/redux/reducers/currentProjectReducer.test.ts @@ -1,6 +1,6 @@ import _ from "lodash"; import { reducer } from "./currentProjectReducer"; -import { IProject, IAssetMetadata, AssetState } from "../../models/applicationState"; +import { IProject, IAssetMetadata, AssetState, ITag } from "../../models/applicationState"; import MockFactory from "../../common/mockFactory"; import { loadProjectAction, @@ -50,7 +50,7 @@ describe("Current Project Reducer", () => { expect(result).toEqual(currentProject); }); - it("Updating connection used by current project is updated in curren project", () => { + it("Updating connection used by current project is updated in current project", () => { const currentProject = MockFactory.createTestProject("1"); const state: IProject = currentProject; @@ -113,6 +113,29 @@ describe("Current Project Reducer", () => { expect(result.assets[testAssets[0].id]).toEqual(assetMetadata.asset); }); + it("Appends new tags to project when saving asset contains new tags", () => { + const state: IProject = MockFactory.createTestProject("TestProject"); + const testAssets = MockFactory.createTestAssets(); + + const expectedTag: ITag = { + name: "NEWTAG", + color: expect.any(String), + }; + + const assetMetadata = MockFactory.createTestAssetMetadata( + testAssets[0], + [MockFactory.createTestRegion("Region 1", [expectedTag.name])], + ); + + const action = saveAssetMetadataAction(assetMetadata); + const result = reducer(state, action); + expect(result).not.toBe(state); + expect(result.tags).toEqual([ + ...state.tags, + expectedTag, + ]); + }); + it("Unknown action performs a noop", () => { const state: IProject = MockFactory.createTestProject("TestProject"); const action = anyOtherAction(); diff --git a/src/redux/reducers/currentProjectReducer.ts b/src/redux/reducers/currentProjectReducer.ts index a674cac29f..16458ed387 100644 --- a/src/redux/reducers/currentProjectReducer.ts +++ b/src/redux/reducers/currentProjectReducer.ts @@ -1,7 +1,9 @@ import _ from "lodash"; import { ActionTypes } from "../actions/actionTypes"; -import { IProject } from "../../models/applicationState"; +import { IProject, ITag } from "../../models/applicationState"; import { AnyAction } from "../actions/actionCreators"; +// tslint:disable-next-line:no-var-requires +const tagColors = require("../../react/components/common/tagColors.json"); /** * Reducer for project. Actions handled: @@ -38,6 +40,31 @@ export const reducer = (state: IProject = null, action: AnyAction): IProject => const updatedAssets = { ...state.assets } || {}; updatedAssets[action.payload.asset.id] = { ...action.payload.asset }; + const assetTags = new Set(); + action.payload.regions.forEach((region) => region.tags.forEach((tag) => assetTags.add(tag))); + + const newTags: ITag[] = state.tags ? [...state.tags] : []; + let updateTags = false; + + assetTags.forEach((tag) => { + if (!state.tags || state.tags.length === 0 || + !state.tags.find((projectTag) => tag === projectTag.name)) { + newTags.push({ + name: tag, + color: tagColors[newTags.length % tagColors.length], + }); + updateTags = true; + } + }); + + if (updateTags) { + return { + ...state, + tags: newTags, + assets: updatedAssets, + }; + } + return { ...state, assets: updatedAssets, diff --git a/src/registerToolbar.ts b/src/registerToolbar.ts index 51fdc3560c..231d8aaa31 100644 --- a/src/registerToolbar.ts +++ b/src/registerToolbar.ts @@ -17,6 +17,7 @@ export enum ToolbarItemName { NextAsset = "navigateNextAsset", SaveProject = "saveProject", ExportProject = "exportProject", + ActiveLearning = "activeLearning", } export enum ToolbarItemGroup { @@ -102,6 +103,15 @@ export default function registerToolbar() { accelerators: ["CmdOrCtrl+Delete", "CmdOrCtrl+Backspace"], }); + ToolbarItemFactory.register({ + name: ToolbarItemName.ActiveLearning, + tooltip: strings.editorPage.toolbar.activeLearning, + icon: "fas fa-graduation-cap", + group: ToolbarItemGroup.Canvas, + type: ToolbarItemType.Action, + accelerators: ["CmdOrCtrl+D", "CmdOrCtrl+d"], + }); + ToolbarItemFactory.register({ name: ToolbarItemName.PreviousAsset, tooltip: strings.editorPage.toolbar.previousAsset, diff --git a/src/services/activeLearningService.test.ts b/src/services/activeLearningService.test.ts new file mode 100644 index 0000000000..bf8d4e9460 --- /dev/null +++ b/src/services/activeLearningService.test.ts @@ -0,0 +1,120 @@ +import { ActiveLearningService } from "./activeLearningService"; +import { IActiveLearningSettings, ModelPathType, IAssetMetadata, AssetState } from "../models/applicationState"; +import MockFactory from "../common/mockFactory"; +import { appInfo } from "../common/appInfo"; +import { ObjectDetection } from "../providers/activeLearning/objectDetection"; + +describe("Active Learning Service", () => { + const objectDetectionMock = ObjectDetection as jest.Mocked; + const defaultSettings: IActiveLearningSettings = { + modelPathType: ModelPathType.Coco, + autoDetect: true, + predictTag: true, + }; + + let activeLearningService: ActiveLearningService = null; + + const electronMock = { + remote: { + app: { + getAppPath: jest.fn(), + }, + }, + }; + + beforeAll(() => { + window["require"] = jest.fn(() => electronMock); + }); + + beforeEach(() => { + activeLearningService = new ActiveLearningService(defaultSettings); + objectDetectionMock.prototype.load = jest.fn(() => Promise.resolve()); + objectDetectionMock.prototype.predictImage = jest.fn(() => Promise.resolve([])); + }); + + it("Predicts new regions to the asset metadata", async () => { + objectDetectionMock.prototype.predictImage = jest.fn(() => Promise.resolve(expectedRegions)); + + const expectedRegions = MockFactory.createTestRegions(2); + const canvas = MockFactory.mockCanvas()(); + const asset = MockFactory.createTestAsset("TestAsset", AssetState.Visited); + const assetMetadata: IAssetMetadata = { + asset: { + ...asset, + state: AssetState.Tagged, + }, + regions: [], + version: appInfo.version, + }; + + const updatedAssetMetadata = await activeLearningService.predictRegions(canvas, assetMetadata); + + expect(updatedAssetMetadata).toEqual({ + asset: { + ...assetMetadata.asset, + predicted: true, + }, + regions: expectedRegions, + version: appInfo.version, + }); + }); + + it("Predicts non matching regions to the asset metadata", async () => { + objectDetectionMock.prototype.predictImage = jest.fn(() => Promise.resolve(expectedRegions)); + + const uniqueRegion = MockFactory.createTestRegion("UniqueRegion", ["tag1", "tag2"]); + const expectedRegions = MockFactory.createTestRegions(4); + const canvas = MockFactory.mockCanvas()(); + const asset = MockFactory.createTestAsset("TestAsset", AssetState.Visited); + const assetMetadata: IAssetMetadata = { + asset: { + ...asset, + state: AssetState.Tagged, + }, + regions: [ + uniqueRegion, + expectedRegions[0], + expectedRegions[1], + ], + version: appInfo.version, + }; + + const updatedAssetMetadata = await activeLearningService.predictRegions(canvas, assetMetadata); + + expect(updatedAssetMetadata).toEqual({ + asset: { + ...assetMetadata.asset, + predicted: true, + }, + regions: [ + uniqueRegion, + ...expectedRegions, + ], + version: appInfo.version, + }); + }); + + it("ensures the underlying object detection model is only loaded 1 time", async () => { + const canvas = MockFactory.mockCanvas()(); + const assetMetadata: IAssetMetadata = { + asset: MockFactory.createTestAsset("TestAsset", AssetState.Visited), + regions: [], + version: appInfo.version, + }; + + await activeLearningService.predictRegions(canvas, assetMetadata); + await activeLearningService.predictRegions(canvas, assetMetadata); + await activeLearningService.predictRegions(canvas, assetMetadata); + await activeLearningService.predictRegions(canvas, assetMetadata); + expect(objectDetectionMock.prototype.load).toBeCalledTimes(1); + }); + + it("fails if constructor requirements aren't satisfied", () => { + expect(() => new ActiveLearningService(null)).toThrow(); + }); + + it("fails if method requirements aren't satisfied", () => { + const service = new ActiveLearningService(defaultSettings); + expect(service.predictRegions(null, null)).rejects.not.toBeNull(); + }); +}); diff --git a/src/services/activeLearningService.ts b/src/services/activeLearningService.ts new file mode 100644 index 0000000000..f607ea6df7 --- /dev/null +++ b/src/services/activeLearningService.ts @@ -0,0 +1,104 @@ +import { IAssetMetadata, ModelPathType, IActiveLearningSettings, AssetState } from "../models/applicationState"; +import { ObjectDetection } from "../providers/activeLearning/objectDetection"; +import Guard from "../common/guard"; +import { isElectron } from "../common/hostProcess"; +import { Env } from "../common/environment"; + +export class ActiveLearningService { + private objectDetection: ObjectDetection; + private modelLoaded: boolean = false; + + constructor(private settings: IActiveLearningSettings) { + Guard.null(settings); + this.objectDetection = new ObjectDetection(); + } + + public isModelLoaded() { + return this.modelLoaded; + } + + public async predictRegions(canvas: HTMLCanvasElement, assetMetadata: IAssetMetadata): Promise { + Guard.null(canvas); + Guard.null(assetMetadata); + + // If the canvas or asset are invalid return asset metadata + if (!(canvas.width && canvas.height && assetMetadata.asset && assetMetadata.asset.size)) { + return assetMetadata; + } + + await this.ensureModelLoaded(); + + const xRatio = assetMetadata.asset.size.width / canvas.width; + const yRatio = assetMetadata.asset.size.height / canvas.height; + const predictedRegions = await this.objectDetection.predictImage( + canvas, + this.settings.predictTag, + xRatio, + yRatio, + ); + + const updatedRegions = [...assetMetadata.regions]; + predictedRegions.forEach((prediction) => { + const matchingRegion = updatedRegions.find((region) => { + return region.boundingBox + && region.boundingBox.left === prediction.boundingBox.left + && region.boundingBox.top === prediction.boundingBox.top + && region.boundingBox.width === prediction.boundingBox.width + && region.boundingBox.height === prediction.boundingBox.height; + }); + + if (updatedRegions.length === 0 || !matchingRegion) { + updatedRegions.push(prediction); + } + }); + + return { + ...assetMetadata, + regions: updatedRegions, + asset: { + ...assetMetadata.asset, + state: updatedRegions.length > 0 ? AssetState.Tagged : AssetState.Visited, + predicted: true, + }, + } as IAssetMetadata; + } + + public async ensureModelLoaded(): Promise { + if (this.modelLoaded) { + return Promise.resolve(); + } + + await this.loadModel(); + this.modelLoaded = true; + } + + private async loadModel() { + let modelPath = ""; + if (this.settings.modelPathType === ModelPathType.Coco) { + if (isElectron()) { + const appPath = this.getAppPath(); + + if (Env.get() !== "production") { + modelPath = appPath + "/cocoSSDModel"; + } else { + modelPath = appPath + "/../../cocoSSDModel"; + } + } else { + modelPath = "https://vott.blob.core.windows.net/coco-ssd-model"; + } + } else if (this.settings.modelPathType === ModelPathType.File) { + if (isElectron()) { + modelPath = this.settings.modelPath; + } + } else { + modelPath = this.settings.modelUrl; + } + + await this.objectDetection.load(modelPath); + } + + private getAppPath = () => { + const remote = (window as any).require("electron").remote as Electron.Remote; + return remote.app.getAppPath(); + } +} diff --git a/src/services/importService.ts b/src/services/importService.ts index 5f9440b613..80c5d25625 100644 --- a/src/services/importService.ts +++ b/src/services/importService.ts @@ -2,7 +2,7 @@ import shortid from "shortid"; import { IProject, ITag, IConnection, AppError, ErrorCode, IAssetMetadata, IRegion, RegionType, AssetState, IFileInfo, - IAsset, AssetType, + IAsset, AssetType, ModelPathType, } from "../models/applicationState"; import { IV1Project, IV1Region } from "../models/v1Models"; import packageJson from "../../package.json"; @@ -66,6 +66,7 @@ export default class ImportService implements IImportService { videoSettings: { frameExtractionRate: originalProject.framerate ? Number(originalProject.framerate) : 15, }, + activeLearningSettings: null, autoSave: true, }; } diff --git a/src/services/projectService.test.ts b/src/services/projectService.test.ts index f610e750a3..c280cb31a9 100644 --- a/src/services/projectService.test.ts +++ b/src/services/projectService.test.ts @@ -2,11 +2,16 @@ import _ from "lodash"; import ProjectService, { IProjectService } from "./projectService"; import MockFactory from "../common/mockFactory"; import { StorageProviderFactory } from "../providers/storage/storageProviderFactory"; -import { IProject, IExportFormat, ISecurityToken, AssetState } from "../models/applicationState"; +import { + IProject, IExportFormat, ISecurityToken, + AssetState, IActiveLearningSettings, ModelPathType, +} from "../models/applicationState"; import { constants } from "../common/constants"; import { ExportProviderFactory } from "../providers/export/exportProviderFactory"; import { generateKey } from "../common/crypto"; -import { encryptProject } from "../common/utils"; +import { encryptProject, decryptProject } from "../common/utils"; +import { ExportAssetState } from "../providers/export/exportProvider"; +import { IVottJsonExportProviderOptions } from "../providers/export/vottJson"; describe("Project Service", () => { let projectSerivce: IProjectService = null; @@ -76,6 +81,45 @@ describe("Project Service", () => { expect.any(String)); }); + it("sets default export settings when not defined", async () => { + testProject.exportFormat = null; + const result = await projectSerivce.save(testProject, securityToken); + + const vottJsonExportProviderOptions: IVottJsonExportProviderOptions = { + assetState: ExportAssetState.Visited, + includeImages: true, + }; + + const expectedExportFormat: IExportFormat = { + providerType: "vottJson", + providerOptions: vottJsonExportProviderOptions, + }; + + const decryptedProject = decryptProject(result, securityToken); + + expect(decryptedProject.exportFormat).toEqual(expectedExportFormat); + }); + + it("sets default active learning setting when not defined", async () => { + testProject.activeLearningSettings = null; + const result = await projectSerivce.save(testProject, securityToken); + + const activeLearningSettings: IActiveLearningSettings = { + autoDetect: false, + predictTag: true, + modelPathType: ModelPathType.Coco, + }; + + expect(result.activeLearningSettings).toEqual(activeLearningSettings); + }); + + it("initializes tags to empty array if not defined", async () => { + testProject.tags = null; + const result = await projectSerivce.save(testProject, securityToken); + + expect(result.tags).toEqual([]); + }); + it("Save calls configured export provider save when defined", async () => { testProject.exportFormat = { providerType: "azureCustomVision", diff --git a/src/services/projectService.ts b/src/services/projectService.ts index 3b868cf27f..c8d15382ff 100644 --- a/src/services/projectService.ts +++ b/src/services/projectService.ts @@ -1,12 +1,17 @@ import _ from "lodash"; import shortid from "shortid"; import { StorageProviderFactory } from "../providers/storage/storageProviderFactory"; -import { IProject, ISecurityToken, AppError, ErrorCode, AssetState } from "../models/applicationState"; +import { + IProject, ISecurityToken, AppError, + ErrorCode, ModelPathType, IActiveLearningSettings, +} from "../models/applicationState"; import Guard from "../common/guard"; import { constants } from "../common/constants"; import { ExportProviderFactory } from "../providers/export/exportProviderFactory"; import { decryptProject, encryptProject } from "../common/utils"; import packageJson from "../../package.json"; +import { ExportAssetState } from "../providers/export/exportProvider"; +import { IExportFormat } from "vott-react"; /** * Functions required for a project service @@ -20,6 +25,20 @@ export interface IProjectService { isDuplicate(project: IProject, projectList: IProject[]): boolean; } +const defaultActiveLearningSettings: IActiveLearningSettings = { + autoDetect: false, + predictTag: true, + modelPathType: ModelPathType.Coco, +}; + +const defaultExportOptions: IExportFormat = { + providerType: "vottJson", + providerOptions: { + assetState: ExportAssetState.Visited, + includeImages: true, + }, +}; + /** * @name - Project Service * @description - Functions for dealing with projects @@ -35,7 +54,23 @@ export default class ProjectService implements IProjectService { try { const loadedProject = decryptProject(project, securityToken); - return Promise.resolve(loadedProject); + + // Ensure tags is always initialized to an array + if (!loadedProject.tags) { + loadedProject.tags = []; + } + + // Initialize active learning settings if they don't exist + if (!loadedProject.activeLearningSettings) { + loadedProject.activeLearningSettings = defaultActiveLearningSettings; + } + + // Initialize export settings if they don't exist + if (!loadedProject.exportFormat) { + loadedProject.exportFormat = defaultExportOptions; + } + + return Promise.resolve({ ...loadedProject }); } catch (e) { const error = new AppError(ErrorCode.ProjectInvalidSecurityToken, "Error decrypting project settings"); return Promise.reject(error); @@ -54,6 +89,21 @@ export default class ProjectService implements IProjectService { project.id = shortid.generate(); } + // Ensure tags is always initialized to an array + if (!project.tags) { + project.tags = []; + } + + // Initialize active learning settings if they don't exist + if (!project.activeLearningSettings) { + project.activeLearningSettings = defaultActiveLearningSettings; + } + + // Initialize export settings if they don't exist + if (!project.exportFormat) { + project.exportFormat = defaultExportOptions; + } + project.version = packageJson.version; const storageProvider = StorageProviderFactory.createFromConnection(project.targetConnection);