66#include < arm_compute/runtime/NEON/functions/NEElementwiseUnaryLayer.h>
77#include < arm_compute/runtime/NEON/functions/NEFloor.h>
88#include < arm_compute/runtime/NEON/functions/NEPReluLayer.h>
9+ #include < ngraph/runtime/reference/abs.hpp>
10+ #include < ngraph/runtime/reference/clamp.hpp>
11+ #include < ngraph/runtime/reference/floor.hpp>
912#include < ngraph/runtime/reference/hsigmoid.hpp>
1013#include < ngraph/runtime/reference/hard_sigmoid.hpp>
1114#include < ngraph/runtime/reference/selu.hpp>
@@ -40,13 +43,34 @@ template<> Converter::Conversion::Ptr Converter::Convert(const opset::PRelu& nod
4043}
4144
4245template <> Converter::Conversion::Ptr Converter::Convert (const opset::Abs& node) {
43- arm_compute::ActivationLayerInfo info (arm_compute::ActivationLayerInfo::ActivationFunction::ABS);
44- return ConvertActivation (node, info, this );
46+ if (node.input (0 ).get_element_type () == ngraph::element::f32 ||
47+ node.input (0 ).get_element_type () == ngraph::element::f16 ) {
48+ arm_compute::ActivationLayerInfo info (arm_compute::ActivationLayerInfo::ActivationFunction::ABS);
49+ return ConvertActivation (node, info, this );
50+ } else {
51+ auto make = [&] (auto refFunction) {
52+ return this ->MakeConversion (refFunction, node.input (0 ), node.output (0 ), ngraph::shape_size (node.get_output_shape (0 )));
53+ };
54+ return CallSwitch (
55+ AP_WRAP (make, ngraph::runtime::reference::abs),
56+ node.input (0 ), intTypes);
57+ }
4558}
4659
4760template <> Converter::Conversion::Ptr Converter::Convert (const opset::Clamp& node) {
48- arm_compute::ActivationLayerInfo info (arm_compute::ActivationLayerInfo::ActivationFunction::LU_BOUNDED_RELU, node.get_max (), node.get_min ());
49- return ConvertActivation (node, info, this );
61+ if (node.input (0 ).get_element_type () == ngraph::element::f32 ||
62+ node.input (0 ).get_element_type () == ngraph::element::f16 ) {
63+ arm_compute::ActivationLayerInfo info (arm_compute::ActivationLayerInfo::ActivationFunction::LU_BOUNDED_RELU, node.get_max (), node.get_min ());
64+ return ConvertActivation (node, info, this );
65+ } else {
66+ auto make = [&] (auto refFunction) {
67+ return this ->MakeConversion (refFunction, node.input (0 ), node.output (0 ),
68+ static_cast <std::int32_t >(node.get_min ()), static_cast <std::int32_t >(node.get_max ()), ngraph::shape_size (node.get_input_shape (0 )));
69+ };
70+ return CallSwitch (
71+ AP_WRAP (make, ngraph::runtime::reference::clamp),
72+ node.input (0 ), std::tuple<std::int32_t >{});
73+ }
5074}
5175
5276template <> Converter::Conversion::Ptr Converter::Convert (const opset::Sqrt& node) {
@@ -68,7 +92,17 @@ template<> Converter::Conversion::Ptr Converter::Convert(const opset::Exp& node)
6892}
6993
7094template <> Converter::Conversion::Ptr Converter::Convert (const opset::Floor& node) {
71- return MakeConversion<arm_compute::NEFloor>(node.input (0 ), node.output (0 ));
95+ if (node.input (0 ).get_element_type () == ngraph::element::f32 ||
96+ node.input (0 ).get_element_type () == ngraph::element::f16 ) {
97+ return MakeConversion<arm_compute::NEFloor>(node.input (0 ), node.output (0 ));
98+ } else {
99+ auto make = [&] (auto refFunction) {
100+ return this ->MakeConversion (refFunction, node.input (0 ), node.output (0 ), ngraph::shape_size (node.get_output_shape (0 )));
101+ };
102+ return CallSwitch (
103+ AP_WRAP (make, ngraph::runtime::reference::floor),
104+ node.input (0 ), allTypes);
105+ }
72106}
73107
74108template <> Converter::Conversion::Ptr Converter::Convert (const opset::HSwish& node) {
@@ -88,7 +122,7 @@ template<> Converter::Conversion::Ptr Converter::Convert(const opset::Gelu& node
88122
89123template <> Converter::Conversion::Ptr Converter::Convert (const opset::Swish& node) {
90124 float beta = 1.0 ;
91- if (ov::get_constant_from_source (node.input_value (1 )) != nullptr ) {
125+ if (node. get_input_size () > 1 && ov::get_constant_from_source (node.input_value (1 )) != nullptr ) {
92126 beta = ov::get_constant_from_source (node.input_value (1 ))->cast_vector <float >()[0 ];
93127 }
94128 arm_compute::ActivationLayerInfo info (arm_compute::ActivationLayerInfo::ActivationFunction::SWISH, beta);
0 commit comments