openvino_2019.2.275
1.模型转换时提示:AttributeError: 'Graph' object has no attribute 'node':
重新安装一下networkx这个模块就行了
pip install networkx==2.3
2.onnx Clamp层的转换有问题,转换后参数、输入不对:
模型加载提示:Error reading network: Error of validate layer: Clip_XXX with type: Clamp. Number of inputs (3) is not equal to expected ones。
修改openvino_2019.2.275\deployment_tools\model_optimizer\mo\ops\clamp.py,让其正常处理min,max。
from mo.graph.graph import Node, Graph
from mo.ops.op import Op
class Clamp(Op):
op = 'Clamp'
def __init__(self, graph: Graph, attrs: dict):
super().__init__(graph, {
'kind': 'op',
'type': __class__.op,
'op': __class__.op,
# 'infer': copy_shape_infer,
'infer': self.infer,
'in_ports_count': 1,
'out_ports_count': 1,
}, attrs)
def supported_attrs(self):
return [
'max',
'min'
]
@staticmethod
def infer(node: Node):
# name = node.soft_get('name', node.id)
name = node.soft_get('name')
min_input_connected = node.has_port('in', 1) and not node.in_port(1).disconnected()
max_input_connected = node.has_port('in', 2) and not node.in_port(2).disconnected()
input_value = node.in_port(0).data.get_value()
min_value = node.in_port(1).data.get_value() if min_input_connected else np.finfo(np.float32).min
max_value = node.in_port(2).data.get_value() if max_input_connected else np.finfo(np.float32).max
#设置min、max
node.min = min_value
node.max = max_value
#删除in_port 1,2
node.in_port(1).disconnect()
node.in_port(2).disconnect()
if input_value is not None and min_value is not None and max_value is not None:
assert np.all(max_value >= min_value), \
'Clamp max_value=={} is less than min_value=={} for node `{}`'.format(max_value, min_value, name)
node.out_port(0).data.set_value(np.clip(node.in_port(0).data.get_value(), min_value, max_value))
else:
node.out_port(0).data.set_shape(node.in_port(0).data.get_shape())