TODO (COMPMID-7511): delegate to LUTManager
| 131 | #ifdef __aarch64__ |
| 132 | // TODO (COMPMID-7511): delegate to LUTManager |
| 133 | void init_lut(ActivationLayerInfo::ActivationFunction act_func, |
| 134 | DataType data_type, |
| 135 | const UniformQuantizationInfo &qi_in, |
| 136 | const UniformQuantizationInfo &qi_out, |
| 137 | ActivationLayerInfo::LookupTable256 &lut, |
| 138 | float a, |
| 139 | float b) |
| 140 | { |
| 141 | for (size_t i = 0; i < lut.size(); ++i) |
| 142 | { |
| 143 | float tmp_f = |
| 144 | (data_type == DataType::QASYMM8) ? dequantize_qasymm8(i, qi_in) : dequantize_qasymm8_signed(i, qi_in); |
| 145 | switch (act_func) |
| 146 | { |
| 147 | case ActivationLayerInfo::ActivationFunction::HARD_SWISH: |
| 148 | tmp_f = tmp_f * ((std::min(std::max((tmp_f + 3), 0.0f), 6.0f)) * 0.166666667f); |
| 149 | break; |
| 150 | case ActivationLayerInfo::ActivationFunction::LEAKY_RELU: |
| 151 | tmp_f = tmp_f > 0 ? tmp_f : tmp_f * a; |
| 152 | break; |
| 153 | case ActivationLayerInfo::ActivationFunction::LOGISTIC: |
| 154 | tmp_f = 1.f / (1.f + std::exp(-tmp_f)); |
| 155 | break; |
| 156 | case ActivationLayerInfo::ActivationFunction::ABS: |
| 157 | tmp_f = std::abs(tmp_f); |
| 158 | break; |
| 159 | case ActivationLayerInfo::ActivationFunction::LINEAR: |
| 160 | tmp_f = a * tmp_f + b; |
| 161 | break; |
| 162 | case ActivationLayerInfo::ActivationFunction::BOUNDED_RELU: |
| 163 | tmp_f = std::min<>(a, std::max(0.f, tmp_f)); |
| 164 | break; |
| 165 | case ActivationLayerInfo::ActivationFunction::LU_BOUNDED_RELU: |
| 166 | tmp_f = std::min<>(a, std::max<>(b, tmp_f)); |
| 167 | break; |
| 168 | case ActivationLayerInfo::ActivationFunction::SOFT_RELU: |
| 169 | tmp_f = (tmp_f > 12.f) ? tmp_f : std::log(1.f + std::exp(tmp_f)); |
| 170 | break; |
| 171 | case ActivationLayerInfo::ActivationFunction::ELU: |
| 172 | tmp_f = (tmp_f >= 0) ? tmp_f : a * (std::exp(tmp_f) - 1); |
| 173 | break; |
| 174 | case ActivationLayerInfo::ActivationFunction::SQRT: |
| 175 | tmp_f = std::sqrt(tmp_f); |
| 176 | break; |
| 177 | case ActivationLayerInfo::ActivationFunction::SQUARE: |
| 178 | tmp_f = tmp_f * tmp_f; |
| 179 | break; |
| 180 | case ActivationLayerInfo::ActivationFunction::TANH: |
| 181 | tmp_f = a * std::tanh(b * tmp_f); |
| 182 | break; |
| 183 | case ActivationLayerInfo::ActivationFunction::IDENTITY: |
| 184 | break; |
| 185 | case ActivationLayerInfo::ActivationFunction::SWISH: |
| 186 | tmp_f = tmp_f / (1.f + std::exp(-a * tmp_f)); |
| 187 | break; |
| 188 | case ActivationLayerInfo::ActivationFunction::GELU: |
| 189 | tmp_f = tmp_f * (0.5f * (1.0f + erff(tmp_f / 1.41421356237f))); |
| 190 | break; |
no test coverage detected