summaryrefslogtreecommitdiff
path: root/model-optimizer/extensions/ops/priorbox.py
diff options
context:
space:
mode:
Diffstat (limited to 'model-optimizer/extensions/ops/priorbox.py')
-rw-r--r--model-optimizer/extensions/ops/priorbox.py20
1 files changed, 18 insertions, 2 deletions
diff --git a/model-optimizer/extensions/ops/priorbox.py b/model-optimizer/extensions/ops/priorbox.py
index 0caf0e957..e494097d2 100644
--- a/model-optimizer/extensions/ops/priorbox.py
+++ b/model-optimizer/extensions/ops/priorbox.py
@@ -52,7 +52,7 @@ class PriorBoxOp(Op):
'step',
'step_h',
'step_w',
- 'offset'
+ 'offset',
]
def backend_attrs(self):
@@ -71,6 +71,22 @@ class PriorBoxOp(Op):
def priorbox_infer(node: Node):
layout = node.graph.graph['layout']
data_shape = node.in_node(0).shape
- num_ratios = ((node.flip + 1) * len(node.aspect_ratio) + 1) * len(node.min_size) + len(node.max_size)
+
+ # calculate all different aspect_ratios (the first one is always 1)
+ # in aspect_ratio 1/x values will be added for all except 1 if flip is True
+ ar_seen = [1.0]
+ ar_seen.extend(node.aspect_ratio.copy())
+ if node.flip:
+ for s in node.aspect_ratio:
+ ar_seen.append(1.0/s)
+
+ ar_seen = np.unique(np.array(ar_seen).round(decimals=6))
+
+ num_ratios = 0
+ if len(node.min_size) > 0:
+ num_ratios = len(ar_seen) * len(node.min_size)
+
+ num_ratios = num_ratios + len(node.max_size)
+
res_prod = data_shape[get_height_dim(layout, 4)] * data_shape[get_width_dim(layout, 4)] * num_ratios * 4
node.out_node(0).shape = np.array([1, 2, res_prod], dtype=np.int64)