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
17layout = BoolScalar("layout", False) # NHWC
18
19# TEST 1: GENERATE_PROPOSALS_1
20model = Model()
21i1 = Input("scores", "TENSOR_FLOAT32", "{1, 2, 2, 2}") # scores
22i2 = Input("bboxDeltas", "TENSOR_FLOAT32", "{1, 2, 2, 8}") # bounding box deltas
23i3 = Input("anchors", "TENSOR_FLOAT32", "{2, 4}") # anchors
24i4 = Input("imageInfo", "TENSOR_FLOAT32", "{1, 2}") # image info
25o1 = Output("scoresOut", "TENSOR_FLOAT32", "{4}") # scores out
26o2 = Output("roiOut", "TENSOR_FLOAT32", "{4, 4}") # roi out
27o3 = Output("batchSplit", "TENSOR_INT32", "{4}") # batch split out
28model = model.Operation("GENERATE_PROPOSALS",
29    i1, i2, i3, i4, 4.0, 4.0, -1, -1, 0.30, 1.0, layout).To(o1, o2, o3)
30
31quant8 = DataTypeConverter().Identify({
32    i1: ("TENSOR_QUANT8_ASYMM", 0.01, 100),
33    i2: ("TENSOR_QUANT8_ASYMM", 0.05, 128),
34    i3: ("TENSOR_QUANT16_SYMM", 0.125, 0),
35    i4: ("TENSOR_QUANT16_ASYMM", 0.125, 0),
36    o1: ("TENSOR_QUANT8_ASYMM", 0.01, 100),
37    o2: ("TENSOR_QUANT16_ASYMM", 0.125, 0)
38})
39
40input0 = {
41    i1: [   # scores
42        0.8, 0.9, 0.85, 0.85,
43        0.75, 0.8, 0.9, 0.95
44    ],
45    i2: [   # bounding box deltas
46        0.5, 0.1, 0.1, 0.1, 0.5, 0.1, 0.5, 0.1,
47        -0.25, 0.1, -0.1, -0.1, -0.25, 0.1, 0.2, 0.1,
48        0.4, -0.1, -0.2, 0.2, 0.4, -0.1, -0.2, 0.2,
49        -0.2, -0.2, 0.2, 0.2, -0.2, -0.2, 0.2, 0.2
50    ],
51    i3: [0, 1, 4, 3, 1, 0, 3, 4],    # anchors
52    i4: [32, 32],  # image info
53}
54
55output0 = {
56    o1: [0.95, 0.9, 0.85, 0.8],  # scores out
57    o2: [   # roi out
58        4.3785973,  2.7571943 , 6.8214025,  7.642805,
59        1.3512788,  0.18965816, 4.648721 ,  4.610342,
60        3.1903253,  1.2951627 , 6.8096747,  3.1048374,
61        1.9812691,  3.1571944 , 3.6187308,  8.042806
62    ],
63    o3: [0, 0, 0, 0]
64}
65
66Example((input0, output0)).AddNchw(i1, i2, layout).AddVariations("relaxed", quant8, "float16")
67
68# TEST 2: GENERATE_PROPOSALS_2
69model = Model()
70i1 = Input("scores", "TENSOR_FLOAT32", "{2, 4, 4, 4}") # scores
71i2 = Input("bboxDeltas", "TENSOR_FLOAT32", "{2, 4, 4, 16}") # bounding box deltas
72i3 = Input("anchors", "TENSOR_FLOAT32", "{4, 4}") # anchors
73i4 = Input("imageInfo", "TENSOR_FLOAT32", "{2, 2}") # image info
74o1 = Output("scoresOut", "TENSOR_FLOAT32", "{30}") # scores out
75o2 = Output("roiOut", "TENSOR_FLOAT32", "{30, 4}") # roi out
76o3 = Output("batchSplit", "TENSOR_INT32", "{30}") # batch split out
77model = model.Operation("GENERATE_PROPOSALS",
78    i1, i2, i3, i4, 10.0, 10.0, 32, 16, 0.20, 1.0, layout).To(o1, o2, o3)
79
80quant8 = DataTypeConverter().Identify({
81    i1: ("TENSOR_QUANT8_ASYMM", 0.005, 0),
82    i2: ("TENSOR_QUANT8_ASYMM", 0.1, 128),
83    i3: ("TENSOR_QUANT16_SYMM", 0.125, 0),
84    i4: ("TENSOR_QUANT16_ASYMM", 0.125, 0),
85    o1: ("TENSOR_QUANT8_ASYMM", 0.005, 0),
86    o2: ("TENSOR_QUANT16_ASYMM", 0.125, 0)
87})
88
89input0 = {
90    i1: [   # scores
91        0.885, 0.21 , 0.78 , 0.57 ,
92        0.795, 0.66 , 0.915, 0.615,
93        0.27 , 0.69 , 0.645, 0.945,
94        0.465, 0.345, 0.855, 0.555,
95        0.48 , 0.6  , 0.735, 0.63 ,
96        0.495, 0.03 , 0.12 , 0.225,
97        0.24 , 0.285, 0.51 , 0.315,
98        0.435, 0.255, 0.585, 0.06 ,
99        0.9  , 0.75 , 0.18 , 0.45 ,
100        0.36 , 0.09 , 0.405, 0.15 ,
101        0.   , 0.195, 0.075, 0.81 ,
102        0.87 , 0.93 , 0.39 , 0.165,
103        0.825, 0.525, 0.765, 0.105,
104        0.54 , 0.705, 0.675, 0.3  ,
105        0.42 , 0.045, 0.33 , 0.015,
106        0.84 , 0.135, 0.72 , 0.375,
107        0.495, 0.315, 0.195, 0.24 ,
108        0.21 , 0.54 , 0.78 , 0.72 ,
109        0.045, 0.93 , 0.27 , 0.735,
110        0.135, 0.09 , 0.81 , 0.705,
111        0.39 , 0.885, 0.42 , 0.945,
112        0.9  , 0.225, 0.75 , 0.3  ,
113        0.375, 0.63 , 0.825, 0.675,
114        0.015, 0.48 , 0.645, 0.615,
115        0.33 , 0.465, 0.66 , 0.6  ,
116        0.075, 0.84 , 0.285, 0.57 ,
117        0.585, 0.165, 0.06 , 0.36 ,
118        0.795, 0.855, 0.105, 0.45 ,
119        0.   , 0.87 , 0.525, 0.255,
120        0.69 , 0.555, 0.15 , 0.345,
121        0.03 , 0.915, 0.405, 0.435,
122        0.765, 0.12 , 0.51 , 0.18
123    ],
124    i2: [   # bounding box deltas
125    -1.9,  0.4,  1.4,  0.5, -1.5, -0.2,  0.3,  1.2,  0. , -0.6,  0.4, -1.3,  0.8,  0.9, -0.2,  0.8,
126    -0.2,  0. ,  0.4,  0.1, -0.2, -1.6, -0.6, -0.1, -1. ,  0.6,  0.5, -0.2, -1.7, -1.4,  0.5, -0.1,
127    -1.5,  1.3, -0.7, -0.9,  0.9,  0.2, -0.2,  0. , -0.7,  0.3, -0.4, -0.3, -0.5, -0.3,  1. , -0.7,
128     1.2, -0.3,  0. ,  0.3, -0.7,  1. , -0.2, -0.6, -1.3,  0. ,  0.3,  0.1,  0.4,  0.2,  2.4,  0. ,
129     0.1,  0. ,  0.7, -0.9,  0.1, -0.4,  0.3, -0.3, -0.7,  0.1,  0.7,  0. , -0.3,  1.6,  0. ,  1.1,
130     0.4, -0.7, -0.9,  0. ,  0. ,  0.4, -0.6,  0.4, -1.9, -1.2,  0. , -0.3,  0.2,  0. ,  0.1,  0.8,
131     0. ,  0.9, -1.7,  0.3,  0.7, -0.7,  0.7,  1.2, -0.4, -0.1, -0.6,  0.6, -0.4, -0.2,  0.3, -0.5,
132     0. ,  1. , -0.1, -0.3, -0.8,  0.1, -1.2, -2.4,  0.1,  1.4,  0.4,  0.1, -1.1,  0.4, -0.4, -0.2,
133     0.1,  0. ,  0.7,  0.1, -1.3,  0.1, -0.4, -0.2,  0.2,  0.1, -0.8,  0. , -1.4,  2. , -0.6, -0.5,
134     0. ,  1. , -1.4, -1.1,  0.6, -0.7,  0.4,  1.1, -1.1,  1.6, -0.3,  0. , -0.7,  0.3, -1.3,  0. ,
135     0. ,  0. , -0.3,  0. , -1.1, -1.5,  0.9, -1.4, -0.7,  0.1, -1.4,  0.9,  0.1,  0.2, -0.1, -1.7,
136     0.2, -0.3, -0.9,  1.1,  0.1,  1. ,  1. , -0.9,  0.7,  0. , -0.3,  0.2, -0.8, -0.5,  0.6, -1.2,
137     1. ,  0.6,  0. , -1.6,  0.1, -1.2,  0.7,  0.8,  0.5, -0.2, -0.8, -1.3, -0.3,  0. ,  0. ,  0.3,
138    -0.6, -0.3,  1.3,  0.1,  2.2,  1.2, -1.1,  0.1,  1.2,  1.2,  1.3, -0.9,  0.1, -0.5,  0.1, -0.7,
139    -1.3,  1.3,  0.1,  2. ,  0. ,  0.2,  0.6,  0. , -0.1, -0.4, -0.5,  0.1, -0.6, -0.3,  0.2, -0.4,
140    -0.4, -0.7, -1.8,  0.4, -0.7,  0.4,  1.4, -0.3,  0.8,  0. ,  0.4, -0.1, -1. ,  0.2,  0.5, -0.6,
141    -1.1,  0.2,  1.6, -0.2, -0.4, -0.9,  0. ,  0.3,  0. ,  0.3, -0.3,  0.3,  0.3,  1.9,  0.3, -0.5,
142    -0.8, -1.3, -0.8,  0.2,  0.2, -0.4, -0.3,  0.6,  0.2, -0.2,  1.2,  0. ,  0. , -0.3,  0.3, -1.5,
143    -1. , -0.3, -0.7, -0.3, -0.4, -1. , -0.6, -0.7, -0.2,  0.6, -0.3,  0.5, -0.2,  0.3, -0.5, -1.7,
144     0. , -0.7, -0.1, -1.5, -0.9,  0.6,  0.3, -0.1,  0.2,  0.5,  0.6, -0.8, -0.3,  0.6,  0.9, -0.3,
145     0.1, -1.7, -1.5,  0. , -0.1, -0.3,  0.7, -0.3, -0.4,  0. , -0.4, -0.3,  0.1,  1.1,  1.8, -0.9,
146     0.6,  0.5,  0.2, -0.7,  0.2,  0.1,  1.2,  2.2,  0.3,  0.6,  0.4,  0.1,  0.2,  0. , -1.1, -0.2,
147    -0.7,  0. , -1.2,  0.6, -0.6, -0.2, -0.4,  0. ,  0.7, -1.2,  0.8,  0. , -0.3,  0.2,  0.6, -1. ,
148    -0.1, -0.1,  0. , -0.4, -0.2,  0.4, -1.4,  0.3,  0.1,  1.3, -0.2, -0.7,  0.6,  0.7,  0.6,  0.1,
149    -0.4,  0.1, -0.2, -0.8,  0. , -1.3,  1.2,  1.4,  1.1,  0.5,  0.3,  0. ,  0.1, -0.4,  0.5, -0.1,
150    -0.5,  0.3, -0.7,  0.9, -0.1, -0.4,  0.2, -0.8,  1. ,  1. ,  0.1,  0.1, -0.2,  0. , -0.4, -0.3,
151    -0.8,  0.7, -0.9, -0.3, -0.3, -2.8,  1. ,  1.4,  0. , -2.6,  1.1, -1.1,  0.5,  0.1, -0.4, -1.5,
152     0. ,  0.3, -0.3, -0.2,  0.7, -0.8, -0.1,  0.5,  0.7,  1.4, -1.2, -1. , -0.6,  0.2,  1.1, -0.9,
153     0.7, -0.4,  0. ,  0. , -0.2, -0.2,  0.1,  0. ,  0. , -0.7, -0.7, -1.4, -0.9, -0.5, -0.6,  0.4,
154     0.3,  0. ,  0.9, -0.2,  0.7,  1.2,  0.5,  0.8, -0.5,  1. ,  0.2, -0.5,  1.3, -0.5,  0.3,  1.2,
155    -0.3, -0.1,  1.3,  0.2,  0.6, -1.4, -0.1, -0.2, -0.4, -0.9,  1.2, -0.9, -0.2, -1.2, -1. , -0.2,
156    -1.6,  2.1, -0.6, -0.2, -0.3,  0.5,  0.9, -0.4,  0. , -0.1,  0.1, -0.6, -1. , -0.7,  0.2, -0.2
157    ],
158    i3: [    # anchors
159        0, 6, 16, 10,
160        6, 0, 10, 16,
161        3, 5, 13, 11,
162        5, 3, 11, 13
163    ],
164    i4: [64, 64, 32, 32],  # image info
165}
166
167output0 = {
168    o1: [  # scores out
169        0.945, 0.93 , 0.915, 0.9  , 0.87 , 0.84 , 0.81, 0.795, 0.78, 0.765, 0.75, 0.735,
170        0.72 , 0.705, 0.69 , 0.675, 0.945, 0.915, 0.9 , 0.885, 0.87, 0.84 , 0.81, 0.78,
171        0.735, 0.72 , 0.63 , 0.6  , 0.585, 0.54
172    ],
173    o2: [   # roi out
174        16.845154 ,  2.5170734, 33.154846 ,  7.4829264,
175        32.96344  , 40.747444 , 43.836563 , 47.252556 ,
176         0.       ,  9.143808 , 16.243607 , 14.056192 ,
177         0.       , 25.789658 , 25.710022 , 30.210342 ,
178        37.947445 , 20.791668 , 44.452557 , 32.80833  ,
179        30.277609 , 32.21635  , 32.92239  , 38.18365  ,
180        25.885489 , 29.086582 , 31.314512 , 30.913418 ,
181         2.8654022,  5.789658 , 26.734598 , 10.210342 ,
182         0.5408764,  3.5824041, 15.459124 ,  5.217595 ,
183        10.753355 , 35.982403 , 15.246645 , 37.617596 ,
184         1.4593601, 23.050154 ,  4.1406403, 36.149845 ,
185         0.       , 15.6      , 11.068764 , 21.6      ,
186        38.54088  , 35.28549  , 53.45912  , 40.71451  ,
187        26.134256 , 48.358635 , 27.465742 , 64.       ,
188        29.96254  ,  3.1999998, 33.23746  , 19.2      ,
189        11.653517 , 43.980293 , 48.34648  , 46.41971  ,
190         0.       , 26.967152 , 26.748941 , 31.032848 ,
191        28.590324 ,  9.050154 , 32.       , 22.149847 ,
192        17.828777 , 19.00683  , 32.       , 20.99317  ,
193         3.5724945,  7.273454 , 11.627505 , 19.126545 ,
194         4.989658 , 26.8      ,  9.410341 , 32.       ,
195        15.157195 , 18.00537  , 20.042807 , 25.194632 ,
196        30.889404 ,  9.652013 , 32.       , 12.347987 ,
197         3.399414 ,  3.8000002, 32.       ,  9.8      ,
198        24.980408 , 10.086582 , 28.61959  , 11.913418 ,
199        13.950423 ,  3.884349 , 22.049576 ,  6.115651 ,
200        24.259361 ,  6.8      , 26.94064  , 22.8      ,
201         3.6538367, 19.475813 , 13.546164 , 28.524187 ,
202        11.947443 , 29.318363 , 18.452557 , 32.       ,
203        17.318363 ,  0.       , 20.281635 , 16.17695
204    ],
205    o3: [
206        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
207        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
208    ]
209}
210
211Example((input0, output0)).AddNchw(i1, i2, layout).AddVariations("relaxed", quant8, "float16")
212