100 lines
3.5 KiB
C++
100 lines
3.5 KiB
C++
//
|
|
// UnaryOnnx.cpp
|
|
// MNNConverter
|
|
//
|
|
// Created by MNN on 2019/10/28.
|
|
// Copyright © 2018, Alibaba Group Holding Limited
|
|
//
|
|
|
|
#include "onnxOpConverter.hpp"
|
|
|
|
DECLARE_OP_CONVERTER(UnaryOnnx);
|
|
|
|
MNN::OpType UnaryOnnx::opType() {
|
|
return MNN::OpType_UnaryOp;
|
|
}
|
|
|
|
MNN::OpParameter UnaryOnnx::type() {
|
|
return MNN::OpParameter_UnaryOp;
|
|
}
|
|
|
|
void UnaryOnnx::run(MNN::OpT *dstOp, const onnx::NodeProto *onnxNode,
|
|
OnnxScope* scope) {
|
|
std::unique_ptr<MNN::UnaryOpT> unaryOpParam(new MNN::UnaryOpT);
|
|
unaryOpParam->T = MNN::DataType_DT_FLOAT;
|
|
|
|
const auto &originalType = onnxNode->op_type();
|
|
|
|
#define TO_UNARY_OP(src, dst) \
|
|
if (originalType == src) { \
|
|
unaryOpParam->opType = dst; \
|
|
}
|
|
|
|
TO_UNARY_OP("Abs", MNN::UnaryOpOperation_ABS);
|
|
TO_UNARY_OP("Acos", MNN::UnaryOpOperation_ACOS);
|
|
TO_UNARY_OP("Acosh", MNN::UnaryOpOperation_ACOSH);
|
|
TO_UNARY_OP("Asinh", MNN::UnaryOpOperation_ASINH);
|
|
TO_UNARY_OP("Atan", MNN::UnaryOpOperation_ATAN);
|
|
TO_UNARY_OP("Atanh", MNN::UnaryOpOperation_ATANH);
|
|
TO_UNARY_OP("Asin", MNN::UnaryOpOperation_ASIN);
|
|
TO_UNARY_OP("Ceil", MNN::UnaryOpOperation_CEIL);
|
|
TO_UNARY_OP("Cos", MNN::UnaryOpOperation_COS);
|
|
TO_UNARY_OP("Cosh", MNN::UnaryOpOperation_COSH);
|
|
TO_UNARY_OP("Exp", MNN::UnaryOpOperation_EXP);
|
|
TO_UNARY_OP("Erf", MNN::UnaryOpOperation_ERF);
|
|
TO_UNARY_OP("Erfc", MNN::UnaryOpOperation_ERFC);
|
|
TO_UNARY_OP("Erfinv", MNN::UnaryOpOperation_ERFINV);
|
|
TO_UNARY_OP("Expm1", MNN::UnaryOpOperation_EXPM1);
|
|
TO_UNARY_OP("Floor", MNN::UnaryOpOperation_FLOOR);
|
|
TO_UNARY_OP("HardSwish", MNN::UnaryOpOperation_HARDSWISH);
|
|
TO_UNARY_OP("Log", MNN::UnaryOpOperation_LOG);
|
|
TO_UNARY_OP("Log1p", MNN::UnaryOpOperation_LOG1P);
|
|
TO_UNARY_OP("Gelu", MNN::UnaryOpOperation_GELU);
|
|
TO_UNARY_OP("Neg", MNN::UnaryOpOperation_NEG);
|
|
TO_UNARY_OP("Sin", MNN::UnaryOpOperation_SIN);
|
|
TO_UNARY_OP("Sinh", MNN::UnaryOpOperation_SINH);
|
|
TO_UNARY_OP("Sqrt", MNN::UnaryOpOperation_SQRT);
|
|
TO_UNARY_OP("Tan", MNN::UnaryOpOperation_TAN);
|
|
TO_UNARY_OP("Tanh", MNN::UnaryOpOperation_TANH);
|
|
TO_UNARY_OP("Reciprocal", MNN::UnaryOpOperation_RECIPROCAL);
|
|
TO_UNARY_OP("Round", MNN::UnaryOpOperation_ROUND);
|
|
TO_UNARY_OP("Sign", MNN::UnaryOpOperation_SIGN);
|
|
|
|
// For specitial error onnx
|
|
TO_UNARY_OP("ATan", MNN::UnaryOpOperation_ATAN);
|
|
dstOp->main.value = unaryOpParam.release();
|
|
}
|
|
|
|
REGISTER_CONVERTER(UnaryOnnx, Abs);
|
|
REGISTER_CONVERTER(UnaryOnnx, Acos);
|
|
REGISTER_CONVERTER(UnaryOnnx, Acosh);
|
|
REGISTER_CONVERTER(UnaryOnnx, Asinh);
|
|
REGISTER_CONVERTER(UnaryOnnx, Atan);
|
|
REGISTER_CONVERTER(UnaryOnnx, Atanh);
|
|
REGISTER_CONVERTER(UnaryOnnx, Asin);
|
|
REGISTER_CONVERTER(UnaryOnnx, Ceil);
|
|
REGISTER_CONVERTER(UnaryOnnx, Cos);
|
|
REGISTER_CONVERTER(UnaryOnnx, Cosh);
|
|
REGISTER_CONVERTER(UnaryOnnx, Expm1);
|
|
REGISTER_CONVERTER(UnaryOnnx, Exp);
|
|
REGISTER_CONVERTER(UnaryOnnx, Erf);
|
|
REGISTER_CONVERTER(UnaryOnnx, Erfc);
|
|
REGISTER_CONVERTER(UnaryOnnx, Erfinv);
|
|
REGISTER_CONVERTER(UnaryOnnx, Floor);
|
|
REGISTER_CONVERTER(UnaryOnnx, HardSwish);
|
|
REGISTER_CONVERTER(UnaryOnnx, Log);
|
|
REGISTER_CONVERTER(UnaryOnnx, Log1p);
|
|
REGISTER_CONVERTER(UnaryOnnx, Gelu);
|
|
REGISTER_CONVERTER(UnaryOnnx, Neg);
|
|
REGISTER_CONVERTER(UnaryOnnx, Sin);
|
|
REGISTER_CONVERTER(UnaryOnnx, Tan);
|
|
REGISTER_CONVERTER(UnaryOnnx, Tanh);
|
|
REGISTER_CONVERTER(UnaryOnnx, Reciprocal);
|
|
REGISTER_CONVERTER(UnaryOnnx, Round);
|
|
REGISTER_CONVERTER(UnaryOnnx, Sign);
|
|
REGISTER_CONVERTER(UnaryOnnx, Sinh);
|
|
REGISTER_CONVERTER(UnaryOnnx, Sqrt);
|
|
|
|
// For specitial error onnx
|
|
REGISTER_CONVERTER(UnaryOnnx, ATan);
|