From 680e93fba75de873a379cb33b176be8b104f8fc2 Mon Sep 17 00:00:00 2001 From: iliya mironov Date: Tue, 4 Aug 2020 14:56:15 +0300 Subject: [PATCH] Add asinh acosh atanh extractors (#1600) * Add asinh acosh atanh extractors * Add asinh acosh atanh ext for tf * Update docs --- .../Supported_Frameworks_Layers.md | 6 ++++ .../extensions/front/onnx/activation_ext.py | 30 +++++++++++++++++ .../front/onnx/activation_ext_test.py | 2 +- .../extensions/front/tf/activation_ext.py | 32 ++++++++++++++++++- .../extensions/ops/activation_ops.py | 15 +++++++++ 5 files changed, 83 insertions(+), 2 deletions(-) diff --git a/docs/MO_DG/prepare_model/Supported_Frameworks_Layers.md b/docs/MO_DG/prepare_model/Supported_Frameworks_Layers.md index 9724cc08427..56f65af4fd2 100644 --- a/docs/MO_DG/prepare_model/Supported_Frameworks_Layers.md +++ b/docs/MO_DG/prepare_model/Supported_Frameworks_Layers.md @@ -117,9 +117,12 @@ Standard TensorFlow\* operations: | Operation Name in TensorFlow\* | Limitations| | :----------| :----------| +| Acosh | No | | Add | No | | AddN | No | | ArgMax | No | +| Asinh | No | +| Atanh | No | | AvgPool | No | | BatchToSpaceND | No | | BiasAdd | No | @@ -285,11 +288,14 @@ Standard ONNX\* operators: | :----------| :----------| | Abs | No | | Acos | No | +| Acosh | No | | Add | No | | Affine | No | | ArgMax | No | | Asin | No | +| Asinh | No | | Atan | No | +| Atanh | No | | AveragePool | No | | BatchMatMul | No | | BatchNormalization | No | diff --git a/model-optimizer/extensions/front/onnx/activation_ext.py b/model-optimizer/extensions/front/onnx/activation_ext.py index f108252d726..7c662dc676c 100644 --- a/model-optimizer/extensions/front/onnx/activation_ext.py +++ b/model-optimizer/extensions/front/onnx/activation_ext.py @@ -38,6 +38,16 @@ class AcosExtractor(FrontExtractorOp): return cls.enabled +class AcoshExtractor(FrontExtractorOp): + op = 'Acosh' + enabled = True + + @classmethod + def extract(cls, node): + Acosh.update_node_stat(node) + return cls.enabled + + class AsinExtractor(FrontExtractorOp): op = 'Asin' enabled = True @@ -48,6 +58,16 @@ class AsinExtractor(FrontExtractorOp): return cls.enabled +class AsinhExtractor(FrontExtractorOp): + op = 'Asinh' + enabled = True + + @classmethod + def extract(cls, node): + Asinh.update_node_stat(node) + return cls.enabled + + class AtanExtractor(FrontExtractorOp): op = 'Atan' enabled = True @@ -58,6 +78,16 @@ class AtanExtractor(FrontExtractorOp): return cls.enabled +class AtanhExtractor(FrontExtractorOp): + op = 'Atanh' + enabled = True + + @classmethod + def extract(cls, node): + Atanh.update_node_stat(node) + return cls.enabled + + class CeilExtractor(FrontExtractorOp): op = 'Ceil' enabled = True diff --git a/model-optimizer/extensions/front/onnx/activation_ext_test.py b/model-optimizer/extensions/front/onnx/activation_ext_test.py index c1476214442..1e4c8b6c749 100644 --- a/model-optimizer/extensions/front/onnx/activation_ext_test.py +++ b/model-optimizer/extensions/front/onnx/activation_ext_test.py @@ -58,7 +58,7 @@ class ActivationOpsONNXExtractorTest(unittest.TestCase): getattr(extractors, op_name + 'Extractor').extract(node) return node.graph.node[node.id] - @generate(*['Abs', 'Acos', 'Asin', 'Atan', 'Cos', 'Cosh', 'Erf', 'Exp', 'Floor', 'Log', 'Not', 'Sigmoid', 'Sin', + @generate(*['Abs', 'Acos', 'Asin', 'Atan', 'Acosh', 'Asinh', 'Atanh', 'Cos', 'Cosh', 'Erf', 'Exp', 'Floor', 'Log', 'Not', 'Sigmoid', 'Sin', 'Sinh', 'Tan', 'Tanh']) def test_default(self, op_name): ref = self._base_attrs(op_name) diff --git a/model-optimizer/extensions/front/tf/activation_ext.py b/model-optimizer/extensions/front/tf/activation_ext.py index 9344f8ce497..4da9556a880 100644 --- a/model-optimizer/extensions/front/tf/activation_ext.py +++ b/model-optimizer/extensions/front/tf/activation_ext.py @@ -14,7 +14,7 @@ limitations under the License. """ from extensions.ops.activation_ops import Abs, Elu, Erf, Exp, ReLU, LeakyReLU, LogicalNot, ReLU6, Sigmoid, \ - Sin, Sinh, Cos, Cosh, Tan, Tanh, Ceiling + Sin, Sinh, Cos, Cosh, Tan, Tanh, Ceiling, Atanh, Acosh, Asinh from mo.front.extractor import FrontExtractorOp @@ -132,6 +132,16 @@ class CoshFrontExtractor(FrontExtractorOp): return cls.enabled +class AcoshFrontExtractor(FrontExtractorOp): + op = 'Acosh' + enabled = True + + @classmethod + def extract(cls, node): + Acosh.update_node_stat(node) + return cls.enabled + + class SinFrontExtractor(FrontExtractorOp): op = 'Sin' enabled = True @@ -152,6 +162,16 @@ class SinhFrontExtractor(FrontExtractorOp): return cls.enabled +class AsinhFrontExtractor(FrontExtractorOp): + op = 'Asinh' + enabled = True + + @classmethod + def extract(cls, node): + Asinh.update_node_stat(node) + return cls.enabled + + class TanFrontExtractor(FrontExtractorOp): op = 'Tan' enabled = True @@ -172,6 +192,16 @@ class TanhFrontExtractor(FrontExtractorOp): return cls.enabled +class AtanhFrontExtractor(FrontExtractorOp): + op = 'Atanh' + enabled = True + + @classmethod + def extract(cls, node): + Atanh.update_node_stat(node) + return cls.enabled + + class CeilExtractor(FrontExtractorOp): op = 'Ceil' enabled = True diff --git a/model-optimizer/extensions/ops/activation_ops.py b/model-optimizer/extensions/ops/activation_ops.py index d12057b8ea5..9127903541d 100644 --- a/model-optimizer/extensions/ops/activation_ops.py +++ b/model-optimizer/extensions/ops/activation_ops.py @@ -65,6 +65,11 @@ class Asin(Activation): operation = staticmethod(lambda x: np.arcsin(x)) +class Asinh(Activation): + op = 'Asinh' + operation = staticmethod(lambda x: np.arcsinh(x)) + + class Cos(Activation): op = 'Cos' operation = staticmethod(lambda x: np.cos(x)) @@ -80,6 +85,11 @@ class Acos(Activation): operation = staticmethod(lambda x: np.arccos(x)) +class Acosh(Activation): + op = 'Acosh' + operation = staticmethod(lambda x: np.arccosh(x)) + + class Tan(Activation): op = 'Tan' operation = staticmethod(lambda x: np.tan(x)) @@ -95,6 +105,11 @@ class Atan(Activation): operation = staticmethod(lambda x: np.arctan(x)) +class Atanh(Activation): + op = 'Atanh' + operation = staticmethod(lambda x: np.arctanh(x)) + + class ReLU6(AttributedClamp): op = 'ReLU6'