Home | History | Annotate | Download | only in V1_2
      1 #
      2 # Copyright (C) 2019 The Android Open Source Project
      3 #
      4 # Licensed under the Apache License, Version 2.0 (the "License");
      5 # you may not use this file except in compliance with the License.
      6 # You may obtain a copy of the License at
      7 #
      8 #      http://www.apache.org/licenses/LICENSE-2.0
      9 #
     10 # Unless required by applicable law or agreed to in writing, software
     11 # distributed under the License is distributed on an "AS IS" BASIS,
     12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 # See the License for the specific language governing permissions and
     14 # limitations under the License.
     15 #
     16 
     17 layout = BoolScalar("layout", False) # NHWC
     18 
     19 # Operation 1, GENERATE_PROPOSALS
     20 scores = Input("scores", "TENSOR_FLOAT32", "{1, 1, 1, 1}")
     21 deltas = Input("deltas", "TENSOR_FLOAT32", "{1, 1, 1, 4}")
     22 anchors = Input("anchors", "TENSOR_FLOAT32", "{1, 4}")
     23 image = Input("imageInfo", "TENSOR_FLOAT32", "{1, 2}")
     24 scoresOut_1 = Output("scores", "TENSOR_FLOAT32", "{0}")
     25 roiOut_1 = Internal("roi", "TENSOR_FLOAT32", "{0, 4}")
     26 batchOut_1 = Internal("batches", "TENSOR_INT32", "{0}")
     27 model = Model("zero_sized").Operation("GENERATE_PROPOSALS", scores, deltas, anchors, image, 1.0, 1.0, -1, -1, 0.3, 10.0, layout).To(scoresOut_1, roiOut_1, batchOut_1)
     28 
     29 # Operation 2, ROI_ALIGN
     30 feature = Input("featureMap", "TENSOR_FLOAT32", "{1, 1, 1, 1}")
     31 featureOut_2 = Internal("scores", "TENSOR_FLOAT32", "{0, 2, 2, 1}")
     32 model = model.Operation("ROI_ALIGN", feature, roiOut_1, batchOut_1, 2, 2, 1.0, 1.0, 4, 4, layout).To(featureOut_2)
     33 
     34 # Operation 3, FULLY_CONNECTED
     35 weights_3 = Parameter("weights", "TENSOR_FLOAT32", "{8, 4}", [1] * 32)
     36 bias_3 = Parameter("bias", "TENSOR_FLOAT32", "{8}", [1] * 8)
     37 deltaOut_3 = Internal("delta", "TENSOR_FLOAT32", "{0, 8}")
     38 model = model.Operation("FULLY_CONNECTED", featureOut_2, weights_3, bias_3, 0).To(deltaOut_3)
     39 
     40 # Operation 4, FULLY_CONNECTED
     41 weights_4 = Parameter("weights", "TENSOR_FLOAT32", "{2, 4}", [1] * 8)
     42 bias_4 = Parameter("bias", "TENSOR_FLOAT32", "{2}", [1] * 2)
     43 scoresOut_4 = Internal("scores", "TENSOR_FLOAT32", "{0, 2}")
     44 model = model.Operation("FULLY_CONNECTED", featureOut_2, weights_4, bias_4, 0).To(scoresOut_4)
     45 
     46 # Operation 5, AXIS_ALIGNED_BBOX_TRANSFORM
     47 roiOut_5 = Internal("roi", "TENSOR_FLOAT32", "{0, 8}")
     48 model = model.Operation("AXIS_ALIGNED_BBOX_TRANSFORM", roiOut_1, deltaOut_3, batchOut_1, image).To(roiOut_5)
     49 
     50 # Operation 6, BOX_WITH_NMS_LIMIT
     51 scoresOut_6 = Output("scores", "TENSOR_FLOAT32", "{0}")
     52 roiOut_6 = Output("roi", "TENSOR_FLOAT32", "{0, 4}")
     53 classOut_6 = Output("classes", "TENSOR_INT32", "{0}")
     54 batchOut_6 = Output("batches", "TENSOR_INT32", "{0}")
     55 model = model.Operation("BOX_WITH_NMS_LIMIT", scoresOut_4, roiOut_5, batchOut_1, 0.1, -1, 0, 0.3, 1.0, 0.1).To(scoresOut_6, roiOut_6, classOut_6, batchOut_6)
     56 
     57 quant8 = DataTypeConverter().Identify({
     58     scores: ("TENSOR_QUANT8_ASYMM", 0.1, 128),
     59     deltas: ("TENSOR_QUANT8_ASYMM", 0.1, 128),
     60     anchors: ("TENSOR_QUANT16_SYMM", 0.125, 0),
     61     image: ("TENSOR_QUANT16_ASYMM", 0.125, 0),
     62     scoresOut_1: ("TENSOR_QUANT8_ASYMM", 0.1, 128),
     63     roiOut_1: ("TENSOR_QUANT16_ASYMM", 0.125, 0),
     64     feature: ("TENSOR_QUANT8_ASYMM", 0.1, 128),
     65     featureOut_2: ("TENSOR_QUANT8_ASYMM", 0.1, 128),
     66     weights_3: ("TENSOR_QUANT8_ASYMM", 0.1, 128),
     67     bias_3: ("TENSOR_INT32", 0.01, 0),
     68     deltaOut_3: ("TENSOR_QUANT8_ASYMM", 0.1, 128),
     69     weights_4: ("TENSOR_QUANT8_ASYMM", 0.1, 128),
     70     bias_4: ("TENSOR_INT32", 0.01, 0),
     71     scoresOut_4: ("TENSOR_QUANT8_ASYMM", 0.1, 128),
     72     roiOut_5: ("TENSOR_QUANT16_ASYMM", 0.125, 0),
     73     scoresOut_6: ("TENSOR_QUANT8_ASYMM", 0.1, 128),
     74     roiOut_6: ("TENSOR_QUANT16_ASYMM", 0.125, 0),
     75 })
     76 
     77 Example({
     78 
     79     # Inputs that will lead to zero-sized output of GENERATE_PROPOSALS
     80     scores: [0.5],
     81     deltas: [0, 0, -10, -10],
     82     anchors: [0, 0, 10, 10],
     83     image: [32, 32],
     84     feature: [1],
     85 
     86     # Dummy outputs
     87     scoresOut_1: [0],
     88     scoresOut_6: [0],
     89     roiOut_6: [0],
     90     classOut_6: [0],
     91     batchOut_6: [0],
     92 
     93 }).AddVariations("relaxed", "float16", quant8)
     94