Home | History | Annotate | Download | only in V1_2
      1 #
      2 # Copyright (C) 2018 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 # TEST 1: ROI_ALIGN_1, outputShape = [2, 2], spatialScale = [0.5, 0.5], samplingRatio = [4, 4]
     20 i1 = Input("in", "TENSOR_FLOAT32", "{1, 4, 4, 1}")
     21 roi1 = Input("roi", "TENSOR_FLOAT32", "{4, 4}")
     22 o1 = Output("out", "TENSOR_FLOAT32", "{4, 2, 2, 1}")
     23 Model().Operation("ROI_ALIGN", i1, roi1, [0, 0, 0, 0], 2, 2, 2.0, 2.0, 4, 4, layout).To(o1)
     24 
     25 quant8 = DataTypeConverter().Identify({
     26     i1: ("TENSOR_QUANT8_ASYMM", 0.25, 128),
     27     roi1: ("TENSOR_QUANT16_ASYMM", 0.125, 0),
     28     o1: ("TENSOR_QUANT8_ASYMM", 0.0625, 128)
     29 })
     30 
     31 # Instantiate an example
     32 Example({
     33     i1: [
     34         -10, -1,  4, -5,
     35          -8, -2,  9,  1,
     36           7, -2,  3, -7,
     37          -2, 10, -3,  5
     38     ],
     39     roi1: [
     40         2, 2, 4, 4,
     41         0, 0, 8, 8,
     42         2, 0, 4, 8,
     43         0, 2, 8, 4
     44     ],
     45     o1: [
     46         0.375, 5.125, -0.375, 2.875,
     47         -0.5, -0.3125, 3.1875, 1.125,
     48          0.25, 4.25, 4.875, 0.625,
     49         -0.1875, 1.125, 0.9375, -2.625
     50     ]
     51 }).AddNchw(i1, o1, layout).AddVariations("relaxed", quant8, "float16")
     52 
     53 
     54 # TEST 2: ROI_ALIGN_2, outputShape = [2, 3], spatialScale = [0.25, 0.25], samplingRatio = [4, 4]
     55 i2 = Input("in", "TENSOR_FLOAT32", "{4, 4, 8, 2}")
     56 roi2 = Input("roi", "TENSOR_FLOAT32", "{4, 4}")
     57 o2 = Output("out", "TENSOR_FLOAT32", "{4, 2, 3, 2}")
     58 Model().Operation("ROI_ALIGN", i2, roi2, [0, 0, 3, 3], 2, 3, 4.0, 4.0, 4, 4, layout).To(o2)
     59 
     60 quant8 = DataTypeConverter().Identify({
     61     i2: ("TENSOR_QUANT8_ASYMM", 0.04, 0),
     62     roi2: ("TENSOR_QUANT16_ASYMM", 0.125, 0),
     63     o2: ("TENSOR_QUANT8_ASYMM", 0.03125, 10)
     64 })
     65 
     66 # Instantiate an example
     67 Example({
     68     i2: [
     69         8.84, 8.88, 7.41, 5.60, 9.95, 4.37, 0.10, 7.64, 6.50, 9.47,
     70         7.55, 3.00, 0.89, 3.01, 6.30, 4.40, 1.64, 6.74, 6.16, 8.60,
     71         5.85, 3.17, 7.12, 6.79, 5.77, 6.62, 5.13, 8.44, 5.08, 7.12,
     72         2.84, 1.19, 8.37, 0.90, 7.86, 9.69, 1.97, 1.31, 4.42, 9.89,
     73         0.18, 9.00, 9.30, 0.44, 5.05, 6.47, 1.09, 9.50, 1.30, 2.18,
     74         2.05, 7.74, 7.66, 0.65, 4.18, 7.14, 5.35, 7.90, 1.04, 1.47,
     75         9.01, 0.95, 4.07, 0.65,
     76         0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
     77         0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
     78         0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
     79         0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
     80         0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
     81         0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
     82         0.00, 0.00, 0.00, 0.00,
     83         0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
     84         0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
     85         0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
     86         0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
     87         0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
     88         0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
     89         0.00, 0.00, 0.00, 0.00,
     90         5.47, 2.64, 0.86, 4.86, 2.38, 2.45, 8.77, 0.06, 3.60, 9.28,
     91         5.84, 8.97, 6.89, 1.43, 3.90, 5.91, 7.40, 9.25, 3.12, 4.92,
     92         1.87, 3.22, 9.50, 6.73, 2.07, 7.30, 3.07, 4.97, 0.24, 8.91,
     93         1.09, 0.27, 7.29, 6.94, 2.31, 6.88, 4.33, 1.37, 0.86, 0.46,
     94         6.07, 3.81, 0.86, 6.99, 4.36, 1.92, 8.19, 3.57, 7.90, 6.78,
     95         4.64, 6.82, 6.18, 9.63, 2.63, 2.33, 1.36, 2.70, 9.99, 9.85,
     96         8.06, 4.80, 7.80, 5.43
     97     ],
     98     roi2: [
     99         4, 4, 28, 12,
    100         4, 4, 32, 16,
    101         7, 1, 29, 15,   # test rounding
    102         1, 7,  9, 11    # test roi with shape smaller than output
    103     ],
    104     o2: [
    105         5.150000, 5.491250, 4.733750, 7.100000, 4.827500,
    106         5.843750, 4.721250, 4.797500, 3.750000, 6.592500,
    107         5.452500, 3.362500,
    108         4.899396, 5.861696, 4.941504, 5.979741, 3.182904,
    109         6.111551, 5.141833, 4.631891, 3.903325, 4.627793,
    110         5.537240, 1.356019,
    111         4.845915, 3.618338, 3.301958, 6.250566, 2.930461,
    112         4.269676, 3.642174, 4.201423, 5.008657, 5.735293,
    113         7.426004, 4.819665,
    114         4.518229, 6.887344, 2.952656, 5.565781, 3.952786,
    115         2.552812, 5.191667, 6.854167, 3.920000, 6.512500,
    116         4.886250, 5.497708
    117     ]
    118 }).AddNchw(i2, o2, layout).AddVariations("relaxed", quant8, "float16")
    119 
    120 
    121 # TEST 3: ROI_ALIGN_3, outputShape = [2, 3], spatialScale = [0.25, 0.25], samplingRatio = [0, 0]
    122 i3 = Input("in", "TENSOR_FLOAT32", "{2, 4, 8, 2}")
    123 roi3 = Input("roi", "TENSOR_FLOAT32", "{4, 4}")
    124 o3 = Output("out", "TENSOR_FLOAT32", "{4, 2, 3, 2}")
    125 Model().Operation("ROI_ALIGN", i3, roi3, [0, 0, 1, 1], 2, 3, 4.0, 4.0, 0, 0, layout).To(o3)
    126 
    127 quant8 = DataTypeConverter().Identify({
    128     i3: ("TENSOR_QUANT8_ASYMM", 0.04, 0),
    129     roi3: ("TENSOR_QUANT16_ASYMM", 0.125, 0),
    130     o3: ("TENSOR_QUANT8_ASYMM", 0.03125, 10)
    131 })
    132 
    133 # Instantiate an example
    134 Example({
    135     i3: [
    136         8.84, 8.88, 7.41, 5.60, 9.95, 4.37, 0.10, 7.64, 6.50, 9.47,
    137         7.55, 3.00, 0.89, 3.01, 6.30, 4.40, 1.64, 6.74, 6.16, 8.60,
    138         5.85, 3.17, 7.12, 6.79, 5.77, 6.62, 5.13, 8.44, 5.08, 7.12,
    139         2.84, 1.19, 8.37, 0.90, 7.86, 9.69, 1.97, 1.31, 4.42, 9.89,
    140         0.18, 9.00, 9.30, 0.44, 5.05, 6.47, 1.09, 9.50, 1.30, 2.18,
    141         2.05, 7.74, 7.66, 0.65, 4.18, 7.14, 5.35, 7.90, 1.04, 1.47,
    142         9.01, 0.95, 4.07, 0.65,
    143         5.47, 2.64, 0.86, 4.86, 2.38, 2.45, 8.77, 0.06, 3.60, 9.28,
    144         5.84, 8.97, 6.89, 1.43, 3.90, 5.91, 7.40, 9.25, 3.12, 4.92,
    145         1.87, 3.22, 9.50, 6.73, 2.07, 7.30, 3.07, 4.97, 0.24, 8.91,
    146         1.09, 0.27, 7.29, 6.94, 2.31, 6.88, 4.33, 1.37, 0.86, 0.46,
    147         6.07, 3.81, 0.86, 6.99, 4.36, 1.92, 8.19, 3.57, 7.90, 6.78,
    148         4.64, 6.82, 6.18, 9.63, 2.63, 2.33, 1.36, 2.70, 9.99, 9.85,
    149         8.06, 4.80, 7.80, 5.43
    150     ],
    151     roi3: [
    152         4, 4, 28, 12,
    153         4, 4, 32, 16,
    154         7, 1, 29, 15,   # test rounding
    155         1, 7,  9, 11    # test roi with shape smaller than output
    156     ],
    157     o3: [
    158         5.150000, 5.491250, 4.733750, 7.100000, 4.827500,
    159         5.843750, 4.721250, 4.797500, 3.750000, 6.592500,
    160         5.452500, 3.362500,
    161         4.869884, 5.908148, 4.941701, 5.955718, 3.113403,
    162         6.341898, 5.156389, 4.604016, 3.881782, 4.616123,
    163         5.690694, 1.237153,
    164         5.028047, 3.560944, 3.157656, 6.395469, 2.896243,
    165         4.336576, 3.563021, 4.057767, 5.053437, 6.028906,
    166         7.396966, 4.668906,
    167         4.385000, 6.905000, 2.815000, 5.502500, 4.161667,
    168         1.829167, 5.191667, 6.854167, 3.920000, 6.512500,
    169         5.106667, 5.612500
    170     ]
    171 }).AddNchw(i3, o3, layout).AddVariations("relaxed", quant8, "float16")
    172 
    173 
    174 # TEST 4: ROI_ALIGN_4, outputShape = [2, 2], spatialScale = [0.5, 1.0], samplingRatio = [0, 4]
    175 i4 = Input("in", "TENSOR_FLOAT32", "{4, 4, 4, 1}")
    176 roi4 = Input("roi", "TENSOR_FLOAT32", "{5, 4}")
    177 o4 = Output("out", "TENSOR_FLOAT32", "{5, 2, 2, 1}")
    178 Model().Operation("ROI_ALIGN", i4, roi4, [2, 2, 2, 2, 2],  2, 2, 2.0, 1.0, 0, 4, layout).To(o4)
    179 
    180 quant8 = DataTypeConverter().Identify({
    181     i4: ("TENSOR_QUANT8_ASYMM", 0.25, 128),
    182     roi4: ("TENSOR_QUANT16_ASYMM", 0.125, 0),
    183     o4: ("TENSOR_QUANT8_ASYMM", 0.0625, 128)
    184 })
    185 
    186 # Instantiate an example
    187 Example({
    188     i4: [
    189         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    190         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    191         -10, -1,  4, -5,
    192          -8, -2,  9,  1,
    193           7, -2,  3, -7,
    194          -2, 10, -3,  5,
    195         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
    196     ],
    197     roi4: [
    198         1, 2, 2, 4,
    199         0, 0, 4, 8,
    200         1, 0, 2, 8,
    201         0, 2, 4, 4,
    202         0, 0, 0, 0
    203     ],
    204     o4: [
    205         0.375, 5.125, -0.375, 2.875,
    206         -0.5, -0.3125, 3.1875, 1.125,
    207          0.25, 4.25, 4.875, 0.625,
    208         -0.1875, 1.125, 0.9375, -2.625,
    209         -7.4375, -3.3125, -6.8125, -3.4375
    210     ]
    211 }).AddNchw(i4, o4, layout).AddVariations("relaxed", quant8, "float16")
    212 
    213 
    214 # TEST 5: ROI_ALIGN_zero_sized
    215 
    216 # Use BOX_WITH_NMS_LIMIT op to generate a zero-sized internal tensor for box cooridnates.
    217 p1 = Parameter("scores", "TENSOR_FLOAT32", "{1, 2}", [0.90, 0.10]) # scores
    218 p2 = Parameter("roi", "TENSOR_FLOAT32", "{1, 8}", [1, 1, 10, 10, 0, 0, 10, 10]) # roi
    219 o1 = Output("scoresOut", "TENSOR_FLOAT32", "{0}") # scores out
    220 o2 = Output("classesOut", "TENSOR_INT32", "{0}") # classes out
    221 tmp1 = Internal("roiOut", "TENSOR_FLOAT32", "{0, 4}") # roi out
    222 tmp2 = Internal("batchSplitOut", "TENSOR_INT32", "{0}") # batch split out
    223 model = Model("zero_sized").Operation("BOX_WITH_NMS_LIMIT", p1, p2, [0], 0.3,  -1, 0, 0.4, 1.0, 0.3).To(o1, tmp1, o2, tmp2)
    224 
    225 # ROI_ALIGN op with numRois = 0.
    226 i1 = Input("in", "TENSOR_FLOAT32", "{1, 1, 1, 1}")
    227 zero_sized = Output("featureMap", "TENSOR_FLOAT32", "{0, 2, 2, 1}")
    228 model = model.Operation("ROI_ALIGN", i1, tmp1, tmp2, 2, 2, 2.0, 2.0, 4, 4, layout).To(zero_sized)
    229 
    230 quant8 = DataTypeConverter().Identify({
    231     p1: ("TENSOR_QUANT8_ASYMM", 0.1, 128),
    232     p2: ("TENSOR_QUANT16_ASYMM", 0.125, 0),
    233     o1: ("TENSOR_QUANT8_ASYMM", 0.1, 128),
    234     tmp1: ("TENSOR_QUANT16_ASYMM", 0.125, 0),
    235     i1: ("TENSOR_QUANT8_ASYMM", 0.1, 128),
    236     zero_sized: ("TENSOR_QUANT8_ASYMM", 0.1, 128)
    237 })
    238 
    239 # Create test case with dummy values.
    240 Example({
    241     i1: [0],
    242     o1: [0],
    243     o2: [0],
    244     zero_sized: [0],
    245 }).AddNchw(i1, zero_sized, layout).AddVariations("relaxed", quant8, "float16")
    246 
    247 
    248 # TEST 6: ROI_ALIGN_6, hanging issue
    249 i4 = Input("in", "TENSOR_FLOAT32", "{1, 512, 8, 1}")
    250 roi4 = Input("roi", "TENSOR_FLOAT32", "{1, 4}")
    251 o4 = Output("out", "TENSOR_FLOAT32", "{1, 128, 4, 1}")
    252 Model().Operation("ROI_ALIGN", i4, roi4, [0], 128, 4, 1.0, 64.0, 10, 10, layout).To(o4)
    253 
    254 quant8 = DataTypeConverter().Identify({
    255     i4: ("TENSOR_QUANT8_ASYMM", 0.25, 128),
    256     roi4: ("TENSOR_QUANT16_ASYMM", 0.125, 0),
    257     o4: ("TENSOR_QUANT8_ASYMM", 0.0625, 128)
    258 })
    259 
    260 # Instantiate an example
    261 Example({
    262     i4: [0] * (512 * 8),
    263     roi4: [450, 500, 466, 508],
    264     o4: [0] * (128 * 4)
    265 }).AddNchw(i4, o4, layout).AddVariations("relaxed", quant8, "float16")
    266