summaryrefslogtreecommitdiff
path: root/nn/runtime/test/TestNeuralNetworksWrapper.h
diff options
context:
space:
mode:
authorPrzemyslaw Szczepaniak <pszczepaniak@google.com>2018-11-15 13:22:02 +0000
committerPrzemyslaw Szczepaniak <pszczepaniak@google.com>2018-12-28 13:36:54 +0000
commitcbf05135560107f994c3051f2f4611c8d9eb890a (patch)
tree5aa6ac1dbdc7e9e8e0813dddf03576cec49b7cf3 /nn/runtime/test/TestNeuralNetworksWrapper.h
parent105714c837422a1cd1418106f1ea22d40e3d69e8 (diff)
downloadml-cbf05135560107f994c3051f2f4611c8d9eb890a.tar.gz
CONV_2D with per-channel quantization.
Variant of CONV_2D operand that takes: - TENSOR_QUANT8_ASYMM as input tensor. - TENSOR_QUANT8_ASYMM as output tensor. - TENSOR_INT32 as bias tensor. - TENSOR_QUANT8_SYMM_PER_CHANNEL as filter tensor. Filter tensor channel dimension has to be 0. Bias tensor scale value has to be 0. Its actual scaling values depends on its position: bias[d].scale = input_tensor.scale * filter.scales[d] We may want introduce TENSOR_INT32_PER_CHANNEL for validation of biases scaling. Added tests lack 'weights-as-input' variants, due to VTS binary being too large on ARM due to added size, will be added in following CLs (tracked in b/120014519). Added support for Operand extraParams field in NNAPI tests: - SymmPerChannelQuantParams class in NeuralNetworksWrapper that holds scales array. - CTS/VTS test generator supports Operand with extraParams, support for per-channel quantization extraParams. - VTS test generator is tiny bit awkward with its extraParams handling, safe_union makes it impossible to create operand in initializer, hence the ExtraParams object creation before Operands. Added 2 basic tests, with and without memory layout parameter. Added TestValidateOperations variant for new CONV_2D. Bug: 119255406 Test: Vts/Cts NNAPI tests. Change-Id: Icf1aff63e6838022b9c1b56814fcf0c9baeada3c Merged-In: Icf1aff63e6838022b9c1b56814fcf0c9baeada3c (cherry picked from commit 62d25a684f61d367a856062390a8725a658507a5)
Diffstat (limited to 'nn/runtime/test/TestNeuralNetworksWrapper.h')
-rw-r--r--nn/runtime/test/TestNeuralNetworksWrapper.h32
1 files changed, 31 insertions, 1 deletions
diff --git a/nn/runtime/test/TestNeuralNetworksWrapper.h b/nn/runtime/test/TestNeuralNetworksWrapper.h
index 9e58abe2c..1031d2ba4 100644
--- a/nn/runtime/test/TestNeuralNetworksWrapper.h
+++ b/nn/runtime/test/TestNeuralNetworksWrapper.h
@@ -61,18 +61,48 @@ enum class Result {
BAD_STATE = ANEURALNETWORKS_BAD_STATE,
};
+struct SymmPerChannelQuantParams {
+ ANeuralNetworksSymmPerChannelQuantParams params;
+ std::vector<float> scales;
+
+ SymmPerChannelQuantParams(std::vector<float> scalesVec, uint32_t channelDim)
+ : scales(std::move(scalesVec)) {
+ params = {.scaleCount = static_cast<uint32_t>(scales.size()),
+ .scales = scales.size() > 0 ? scales.data() : nullptr,
+ .channelDim = channelDim};
+ }
+};
+
struct OperandType {
ANeuralNetworksOperandType operandType;
std::vector<uint32_t> dimensions;
+ SymmPerChannelQuantParams channelQuant;
+
OperandType(Type type, std::vector<uint32_t> d, float scale = 0.0f, int32_t zeroPoint = 0)
- : dimensions(std::move(d)) {
+ : dimensions(std::move(d)), channelQuant({}, 0) {
+ operandType = {
+ .type = static_cast<int32_t>(type),
+ .dimensionCount = static_cast<uint32_t>(dimensions.size()),
+ .dimensions = dimensions.size() > 0 ? dimensions.data() : nullptr,
+ .scale = scale,
+ .zeroPoint = zeroPoint,
+ };
+ }
+
+ OperandType(Type type, std::vector<uint32_t> data, float scale, int32_t zeroPoint,
+ SymmPerChannelQuantParams&& channelQuant)
+ : dimensions(std::move(data)), channelQuant(std::move(channelQuant)) {
operandType = {
.type = static_cast<int32_t>(type),
.dimensionCount = static_cast<uint32_t>(dimensions.size()),
.dimensions = dimensions.size() > 0 ? dimensions.data() : nullptr,
.scale = scale,
.zeroPoint = zeroPoint,
+ .extraParams =
+ {
+ .channelQuant = channelQuant.params,
+ },
};
}
};