| /* |
| * Copyright (C) 2018 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #define LOG_TAG "OperationResolver" |
| |
| #include "OperationResolver.h" |
| |
| #include "NeuralNetworks.h" |
| |
| namespace android { |
| namespace nn { |
| |
| // TODO(b/119608412): Find a way to not reference every operation here. |
| const OperationRegistration* register_ABS(); |
| const OperationRegistration* register_ADD(); |
| const OperationRegistration* register_AVERAGE_POOL_2D(); |
| const OperationRegistration* register_AXIS_ALIGNED_BBOX_TRANSFORM(); |
| const OperationRegistration* register_BIDIRECTIONAL_SEQUENCE_RNN(); |
| const OperationRegistration* register_BOX_WITH_NMS_LIMIT(); |
| const OperationRegistration* register_CHANNEL_SHUFFLE(); |
| const OperationRegistration* register_CONCATENATION(); |
| const OperationRegistration* register_CONV_2D(); |
| const OperationRegistration* register_DEPTHWISE_CONV_2D(); |
| const OperationRegistration* register_DEQUANTIZE(); |
| const OperationRegistration* register_DETECTION_POSTPROCESSING(); |
| const OperationRegistration* register_DIV(); |
| const OperationRegistration* register_ELU(); |
| const OperationRegistration* register_EQUAL(); |
| const OperationRegistration* register_EXP(); |
| const OperationRegistration* register_FILL(); |
| const OperationRegistration* register_FLOOR(); |
| const OperationRegistration* register_FULLY_CONNECTED(); |
| const OperationRegistration* register_GATHER(); |
| const OperationRegistration* register_GENERATE_PROPOSALS(); |
| const OperationRegistration* register_GREATER(); |
| const OperationRegistration* register_GREATER_EQUAL(); |
| const OperationRegistration* register_HARD_SWISH(); |
| const OperationRegistration* register_HEATMAP_MAX_KEYPOINT(); |
| const OperationRegistration* register_INSTANCE_NORMALIZATION(); |
| const OperationRegistration* register_L2_NORMALIZATION(); |
| const OperationRegistration* register_L2_POOL_2D(); |
| const OperationRegistration* register_LESS(); |
| const OperationRegistration* register_LESS_EQUAL(); |
| const OperationRegistration* register_LOCAL_RESPONSE_NORMALIZATION(); |
| const OperationRegistration* register_LOG(); |
| const OperationRegistration* register_LOGICAL_AND(); |
| const OperationRegistration* register_LOGICAL_NOT(); |
| const OperationRegistration* register_LOGICAL_OR(); |
| const OperationRegistration* register_LOGISTIC(); |
| const OperationRegistration* register_LOG_SOFTMAX(); |
| const OperationRegistration* register_MAX_POOL_2D(); |
| const OperationRegistration* register_MUL(); |
| const OperationRegistration* register_NEG(); |
| const OperationRegistration* register_NOT_EQUAL(); |
| const OperationRegistration* register_PRELU(); |
| const OperationRegistration* register_QUANTIZE(); |
| const OperationRegistration* register_QUANTIZED_LSTM(); |
| const OperationRegistration* register_RANK(); |
| const OperationRegistration* register_REDUCE_ALL(); |
| const OperationRegistration* register_REDUCE_ANY(); |
| const OperationRegistration* register_REDUCE_MAX(); |
| const OperationRegistration* register_REDUCE_MIN(); |
| const OperationRegistration* register_REDUCE_PROD(); |
| const OperationRegistration* register_REDUCE_SUM(); |
| const OperationRegistration* register_RELU(); |
| const OperationRegistration* register_RELU1(); |
| const OperationRegistration* register_RELU6(); |
| const OperationRegistration* register_RESIZE_BILINEAR(); |
| const OperationRegistration* register_RESIZE_NEAREST_NEIGHBOR(); |
| const OperationRegistration* register_ROI_ALIGN(); |
| const OperationRegistration* register_ROI_POOLING(); |
| const OperationRegistration* register_RSQRT(); |
| const OperationRegistration* register_SELECT(); |
| const OperationRegistration* register_SIN(); |
| const OperationRegistration* register_SLICE(); |
| const OperationRegistration* register_SOFTMAX(); |
| const OperationRegistration* register_SQRT(); |
| const OperationRegistration* register_SQUEEZE(); |
| const OperationRegistration* register_STRIDED_SLICE(); |
| const OperationRegistration* register_SUB(); |
| const OperationRegistration* register_TANH(); |
| const OperationRegistration* register_TOPK_V2(); |
| const OperationRegistration* register_TRANSPOSE(); |
| const OperationRegistration* register_TRANSPOSE_CONV_2D(); |
| const OperationRegistration* register_UNIDIRECTIONAL_SEQUENCE_LSTM(); |
| const OperationRegistration* register_UNIDIRECTIONAL_SEQUENCE_RNN(); |
| |
| BuiltinOperationResolver::BuiltinOperationResolver() { |
| registerOperation(register_ABS()); |
| registerOperation(register_ADD()); |
| registerOperation(register_AVERAGE_POOL_2D()); |
| registerOperation(register_AXIS_ALIGNED_BBOX_TRANSFORM()); |
| registerOperation(register_BIDIRECTIONAL_SEQUENCE_RNN()); |
| registerOperation(register_BOX_WITH_NMS_LIMIT()); |
| registerOperation(register_CHANNEL_SHUFFLE()); |
| registerOperation(register_CONCATENATION()); |
| registerOperation(register_CONV_2D()); |
| registerOperation(register_DEPTHWISE_CONV_2D()); |
| registerOperation(register_DEQUANTIZE()); |
| registerOperation(register_DETECTION_POSTPROCESSING()); |
| registerOperation(register_DIV()); |
| registerOperation(register_ELU()); |
| registerOperation(register_EQUAL()); |
| registerOperation(register_EXP()); |
| registerOperation(register_FILL()); |
| registerOperation(register_FLOOR()); |
| registerOperation(register_FULLY_CONNECTED()); |
| registerOperation(register_GATHER()); |
| registerOperation(register_GENERATE_PROPOSALS()); |
| registerOperation(register_GREATER()); |
| registerOperation(register_GREATER_EQUAL()); |
| registerOperation(register_HARD_SWISH()); |
| registerOperation(register_HEATMAP_MAX_KEYPOINT()); |
| registerOperation(register_INSTANCE_NORMALIZATION()); |
| registerOperation(register_L2_NORMALIZATION()); |
| registerOperation(register_L2_POOL_2D()); |
| registerOperation(register_LESS()); |
| registerOperation(register_LESS_EQUAL()); |
| registerOperation(register_LOCAL_RESPONSE_NORMALIZATION()); |
| registerOperation(register_LOG()); |
| registerOperation(register_LOGICAL_AND()); |
| registerOperation(register_LOGICAL_NOT()); |
| registerOperation(register_LOGICAL_OR()); |
| registerOperation(register_LOGISTIC()); |
| registerOperation(register_LOG_SOFTMAX()); |
| registerOperation(register_MAX_POOL_2D()); |
| registerOperation(register_MUL()); |
| registerOperation(register_NEG()); |
| registerOperation(register_NOT_EQUAL()); |
| registerOperation(register_PRELU()); |
| registerOperation(register_QUANTIZE()); |
| registerOperation(register_QUANTIZED_LSTM()); |
| registerOperation(register_RANK()); |
| registerOperation(register_REDUCE_ALL()); |
| registerOperation(register_REDUCE_ANY()); |
| registerOperation(register_REDUCE_MAX()); |
| registerOperation(register_REDUCE_MIN()); |
| registerOperation(register_REDUCE_PROD()); |
| registerOperation(register_REDUCE_SUM()); |
| registerOperation(register_RELU()); |
| registerOperation(register_RELU1()); |
| registerOperation(register_RELU6()); |
| registerOperation(register_RESIZE_BILINEAR()); |
| registerOperation(register_RESIZE_NEAREST_NEIGHBOR()); |
| registerOperation(register_ROI_ALIGN()); |
| registerOperation(register_ROI_POOLING()); |
| registerOperation(register_RSQRT()); |
| registerOperation(register_SELECT()); |
| registerOperation(register_SIN()); |
| registerOperation(register_SLICE()); |
| registerOperation(register_SOFTMAX()); |
| registerOperation(register_SQRT()); |
| registerOperation(register_SQUEEZE()); |
| registerOperation(register_STRIDED_SLICE()); |
| registerOperation(register_SUB()); |
| registerOperation(register_TANH()); |
| registerOperation(register_TOPK_V2()); |
| registerOperation(register_TRANSPOSE()); |
| registerOperation(register_TRANSPOSE_CONV_2D()); |
| registerOperation(register_UNIDIRECTIONAL_SEQUENCE_LSTM()); |
| registerOperation(register_UNIDIRECTIONAL_SEQUENCE_RNN()); |
| } |
| |
| const OperationRegistration* BuiltinOperationResolver::findOperation( |
| OperationType operationType) const { |
| auto index = static_cast<int32_t>(operationType); |
| if (index < 0 || index >= kNumberOfOperationTypes) { |
| return nullptr; |
| } |
| return mRegistrations[index]; |
| } |
| |
| void BuiltinOperationResolver::registerOperation( |
| const OperationRegistration* operationRegistration) { |
| CHECK(operationRegistration != nullptr); |
| auto index = static_cast<int32_t>(operationRegistration->type); |
| CHECK_LE(0, index); |
| CHECK_LT(index, kNumberOfOperationTypes); |
| CHECK(mRegistrations[index] == nullptr); |
| mRegistrations[index] = operationRegistration; |
| } |
| |
| } // namespace nn |
| } // namespace android |