Fix linker issues on some compilers. micro_test::reporter and micro_test::did_test_fail fail to link when referenced from file not directly instantiating the micro test main function. Fixed by removing any micro_test::* dependencies from conv_test_common.

PiperOrigin-RevId: 351515143
Change-Id: Ie622fbfe5d07832b3b87b2258a6ee0f48c7b3272
This commit is contained in:
Nat Jeffries 2021-01-12 22:15:50 -08:00 committed by TensorFlower Gardener
parent a439e53437
commit 670cc3fa48
4 changed files with 136 additions and 113 deletions

View File

@ -67,13 +67,15 @@ TF_LITE_MICRO_TESTS_BEGIN
TF_LITE_MICRO_TEST(SimpleTestFloat) {
float output_data[tflite::testing::kOutputElements];
TF_LITE_MICRO_EXPECT_EQ(
kTfLiteOk,
tflite::testing::TestConvFloat(
tflite::testing::kInputShape, tflite::testing::kInputData,
tflite::testing::kFilterShape, tflite::testing::kFilterData,
tflite::testing::kBiasShape, tflite::testing::kBiasData,
tflite::testing::kOutputShape, tflite::testing::kGoldenData,
&tflite::testing::common_conv_params, tflite::Register_CONV_2D(),
output_data);
output_data));
}
TF_LITE_MICRO_TEST(InputAndFilterSameWidthHeight) {
@ -87,11 +89,13 @@ TF_LITE_MICRO_TEST(InputAndFilterSameWidthHeight) {
const int kOutputShape[] = {4, 2, 1, 1, 1};
const float expected_output[] = {10, 34};
TF_LITE_MICRO_EXPECT_EQ(
kTfLiteOk,
tflite::testing::TestConvFloat(
tflite::testing::kInputShape, tflite::testing::kInputData, kFilterShape,
filter_values, kBiasShape, bias_values, kOutputShape, expected_output,
&tflite::testing::common_conv_params, tflite::Register_CONV_2D(),
output_data);
tflite::testing::kInputShape, tflite::testing::kInputData,
kFilterShape, filter_values, kBiasShape, bias_values, kOutputShape,
expected_output, &tflite::testing::common_conv_params,
tflite::Register_CONV_2D(), output_data));
}
TF_LITE_MICRO_TEST(SimpleTestQuantized) {
@ -107,14 +111,17 @@ TF_LITE_MICRO_TEST(SimpleTestQuantized) {
int32_t bias_quantized[tflite::testing::kBiasElements];
uint8_t golden_quantized[tflite::testing::kOutputElements];
TF_LITE_MICRO_EXPECT_EQ(
kTfLiteOk,
tflite::testing::TestConvQuantizedPerLayer(
tflite::testing::kInputShape, tflite::testing::kInputData,
input_quantized, input_scale, tflite::testing::kFilterShape,
tflite::testing::kFilterData, filter_quantized, filter_scale,
tflite::testing::kBiasShape, tflite::testing::kBiasData, bias_quantized,
tflite::testing::kOutputShape, tflite::testing::kGoldenData,
golden_quantized, output_scale, &tflite::testing::common_conv_params,
tflite::Register_CONV_2D(), output_data);
tflite::testing::kBiasShape, tflite::testing::kBiasData,
bias_quantized, tflite::testing::kOutputShape,
tflite::testing::kGoldenData, golden_quantized, output_scale,
&tflite::testing::common_conv_params, tflite::Register_CONV_2D(),
output_data));
}
TF_LITE_MICRO_TEST(InputOutputDifferentTypeIsError) {
@ -206,13 +213,15 @@ TF_LITE_MICRO_TEST(SimpleTestDilatedQuantized) {
conv_params.dilation_width_factor = 3;
conv_params.dilation_height_factor = 2;
TF_LITE_MICRO_EXPECT_EQ(
kTfLiteOk,
tflite::testing::TestConvQuantizedPerLayer(
input_shape, input_data, input_quantized, input_scale,
tflite::testing::kFilterShape, tflite::testing::kFilterData,
filter_quantized, filter_scale, tflite::testing::kBiasShape,
tflite::testing::kBiasData, bias_quantized, output_shape, golden_data,
golden_quantized, output_scale, &conv_params, tflite::Register_CONV_2D(),
output_data);
golden_quantized, output_scale, &conv_params,
tflite::Register_CONV_2D(), output_data));
}
TF_LITE_MICRO_TEST(SimpleTestQuantizedPerChannel) {
@ -231,15 +240,18 @@ TF_LITE_MICRO_TEST(SimpleTestQuantizedPerChannel) {
int zero_points[tflite::testing::kBiasElements + 1];
float scales[tflite::testing::kBiasElements + 1];
TF_LITE_MICRO_EXPECT_EQ(
kTfLiteOk,
tflite::testing::TestConvQuantizedPerChannel(
tflite::testing::kInputShape, tflite::testing::kInputData,
input_quantized, input_scale, input_zero_point,
tflite::testing::kFilterShape, tflite::testing::kFilterData,
filter_quantized, tflite::testing::kBiasShape, tflite::testing::kBiasData,
bias_quantized, scales, zero_points, tflite::testing::kOutputShape,
tflite::testing::kGoldenData, golden_quantized, output_scale,
output_zero_point, &tflite::testing::common_conv_params,
tflite::Register_CONV_2D(), output_data);
filter_quantized, tflite::testing::kBiasShape,
tflite::testing::kBiasData, bias_quantized, scales, zero_points,
tflite::testing::kOutputShape, tflite::testing::kGoldenData,
golden_quantized, output_scale, output_zero_point,
&tflite::testing::common_conv_params, tflite::Register_CONV_2D(),
output_data));
}
TF_LITE_MICRO_TEST(SimpleTestDilatedQuantizedPerChannel) {
@ -274,13 +286,16 @@ TF_LITE_MICRO_TEST(SimpleTestDilatedQuantizedPerChannel) {
conv_params.dilation_width_factor = 3;
conv_params.dilation_height_factor = 2;
TF_LITE_MICRO_EXPECT_EQ(
kTfLiteOk,
tflite::testing::TestConvQuantizedPerChannel(
input_shape, input_data, input_quantized, input_scale, input_zero_point,
tflite::testing::kFilterShape, tflite::testing::kFilterData,
filter_quantized, tflite::testing::kBiasShape, tflite::testing::kBiasData,
input_shape, input_data, input_quantized, input_scale,
input_zero_point, tflite::testing::kFilterShape,
tflite::testing::kFilterData, filter_quantized,
tflite::testing::kBiasShape, tflite::testing::kBiasData,
bias_quantized, scales, zero_points, output_shape, golden_data,
golden_quantized, output_scale, output_zero_point, &conv_params,
tflite::Register_CONV_2D(), output_data);
tflite::Register_CONV_2D(), output_data));
}
TF_LITE_MICRO_TEST(SimpleTestQuantizedPerChannelRelu6) {
@ -302,6 +317,8 @@ TF_LITE_MICRO_TEST(SimpleTestQuantizedPerChannelRelu6) {
int zero_points[tflite::testing::kBiasElements + 1];
float scales[tflite::testing::kBiasElements + 1];
TF_LITE_MICRO_EXPECT_EQ(
kTfLiteOk,
tflite::testing::TestConvQuantizedPerChannel(
tflite::testing::kInputShape, tflite::testing::kInputData,
input_quantized, input_scale, input_zero_point,
@ -310,7 +327,7 @@ TF_LITE_MICRO_TEST(SimpleTestQuantizedPerChannelRelu6) {
bias_quantized, scales, zero_points, tflite::testing::kOutputShape,
golden_data, golden_quantized, output_scale, output_zero_point,
&tflite::testing::common_conv_params, tflite::Register_CONV_2D(),
output_data);
output_data));
}
TF_LITE_MICRO_TEST(Kernel1x1QuantizedPerChannel) {
@ -354,12 +371,14 @@ TF_LITE_MICRO_TEST(Kernel1x1QuantizedPerChannel) {
int zero_points[bias_elements + 1];
float scales[bias_elements + 1];
tflite::testing::TestConvQuantizedPerChannel(
input_shape, input_data, input_quantized, input_scale, input_zero_point,
filter_shape, filter_data, filter_quantized, bias_shape, bias_data,
bias_quantized, scales, zero_points, output_shape, golden_data,
golden_quantized, output_scale, output_zero_point, &conv_params,
tflite::Register_CONV_2D(), output_data);
TF_LITE_MICRO_EXPECT_EQ(
kTfLiteOk, tflite::testing::TestConvQuantizedPerChannel(
input_shape, input_data, input_quantized, input_scale,
input_zero_point, filter_shape, filter_data,
filter_quantized, bias_shape, bias_data, bias_quantized,
scales, zero_points, output_shape, golden_data,
golden_quantized, output_scale, output_zero_point,
&conv_params, tflite::Register_CONV_2D(), output_data));
}
TF_LITE_MICRO_TEST(Kernel1x1QuantizedPerChannelRelu6) {
@ -403,12 +422,14 @@ TF_LITE_MICRO_TEST(Kernel1x1QuantizedPerChannelRelu6) {
int zero_points[bias_elements + 1];
float scales[bias_elements + 1];
tflite::testing::TestConvQuantizedPerChannel(
input_shape, input_data, input_quantized, input_scale, input_zero_point,
filter_shape, filter_data, filter_quantized, bias_shape, bias_data,
bias_quantized, scales, zero_points, output_shape, golden_data,
golden_quantized, output_scale, output_zero_point, &conv_params,
tflite::Register_CONV_2D(), output_data);
TF_LITE_MICRO_EXPECT_EQ(
kTfLiteOk, tflite::testing::TestConvQuantizedPerChannel(
input_shape, input_data, input_quantized, input_scale,
input_zero_point, filter_shape, filter_data,
filter_quantized, bias_shape, bias_data, bias_quantized,
scales, zero_points, output_shape, golden_data,
golden_quantized, output_scale, output_zero_point,
&conv_params, tflite::Register_CONV_2D(), output_data));
}
TF_LITE_MICRO_TEST(BroadcastPerLayerQuantizationToPerChannelShouldMatchGolden) {

View File

@ -59,15 +59,15 @@ TfLiteStatus ValidateConvGoldens(TfLiteTensor* tensors, int tensors_size,
TfLiteRegistration registration,
uint8_t* output_data, float tolerance = 1e-5);
void TestConvFloat(const int* input_dims_data, const float* input_data,
const int* filter_dims_data, const float* filter_data,
const int* bias_dims_data, const float* bias_data,
const int* output_dims_data,
TfLiteStatus TestConvFloat(const int* input_dims_data, const float* input_data,
const int* filter_dims_data,
const float* filter_data, const int* bias_dims_data,
const float* bias_data, const int* output_dims_data,
const float* expected_output_data,
TfLiteConvParams* conv_params,
TfLiteRegistration registration, float* output_data);
void TestConvQuantizedPerLayer(
TfLiteStatus TestConvQuantizedPerLayer(
const int* input_dims_data, const float* input_data,
uint8_t* input_quantized, float input_scale, const int* filter_dims_data,
const float* filter_data, uint8_t* filter_quantized, float filter_scale,
@ -77,7 +77,7 @@ void TestConvQuantizedPerLayer(
TfLiteConvParams* conv_params, TfLiteRegistration registration,
uint8_t* output_data);
void TestConvQuantizedPerChannel(
TfLiteStatus TestConvQuantizedPerChannel(
const int* input_dims_data, const float* input_data,
int8_t* input_quantized, float input_scale, int input_zero_point,
const int* filter_dims_data, const float* filter_data,

View File

@ -27,9 +27,10 @@ TfLiteStatus InvokeConv(TfLiteTensor* tensors, int tensors_size,
int outputs_array_data[] = {1, 3};
TfLiteIntArray* outputs_array = IntArrayFromInts(outputs_array_data);
tflite::MicroErrorReporter reporter;
micro::KernelRunner runner(
registration, tensors, tensors_size, inputs_array, outputs_array,
reinterpret_cast<void*>(conv_params), micro_test::reporter);
reinterpret_cast<TfLiteStatus*>(conv_params), &reporter);
const char* init_data = reinterpret_cast<const char*>(conv_params);
TfLiteStatus status = runner.InitAndPrepare(init_data);
@ -112,13 +113,14 @@ TfLiteStatus ValidateConvGoldens(TfLiteTensor* tensors, int tensors_size,
registration, output_data, tolerance);
}
void TestConvFloat(const int* input_dims_data, const float* input_data,
const int* filter_dims_data, const float* filter_data,
const int* bias_dims_data, const float* bias_data,
const int* output_dims_data,
TfLiteStatus TestConvFloat(const int* input_dims_data, const float* input_data,
const int* filter_dims_data,
const float* filter_data, const int* bias_dims_data,
const float* bias_data, const int* output_dims_data,
const float* expected_output_data,
TfLiteConvParams* conv_params,
TfLiteRegistration registration, float* output_data) {
TfLiteRegistration registration,
float* output_data) {
TfLiteIntArray* input_dims = IntArrayFromInts(input_dims_data);
TfLiteIntArray* filter_dims = IntArrayFromInts(filter_dims_data);
TfLiteIntArray* bias_dims = IntArrayFromInts(bias_dims_data);
@ -134,13 +136,12 @@ void TestConvFloat(const int* input_dims_data, const float* input_data,
CreateTensor(output_data, output_dims),
};
TF_LITE_MICRO_EXPECT_EQ(
kTfLiteOk, ValidateConvGoldens(tensors, tensors_size,
expected_output_data, output_dims_count,
conv_params, registration, output_data));
return ValidateConvGoldens(tensors, tensors_size, expected_output_data,
output_dims_count, conv_params, registration,
output_data);
}
void TestConvQuantizedPerLayer(
TfLiteStatus TestConvQuantizedPerLayer(
const int* input_dims_data, const float* input_data,
uint8_t* input_quantized, float input_scale, const int* filter_dims_data,
const float* filter_data, uint8_t* filter_quantized, float filter_scale,
@ -177,14 +178,12 @@ void TestConvQuantizedPerLayer(
0};
tensors[1].quantization = {kTfLiteAffineQuantization, &filter_quant};
TF_LITE_MICRO_EXPECT_EQ(
kTfLiteOk,
ValidateConvGoldens(tensors, tensors_size, expected_output_quantized,
return ValidateConvGoldens(tensors, tensors_size, expected_output_quantized,
output_dims_count, conv_params, registration,
output_data));
output_data);
}
void TestConvQuantizedPerChannel(
TfLiteStatus TestConvQuantizedPerChannel(
const int* input_dims_data, const float* input_data,
int8_t* input_quantized, float input_scale, int input_zero_point,
const int* filter_dims_data, const float* filter_data,
@ -241,11 +240,9 @@ void TestConvQuantizedPerChannel(
tflite::Quantize(expected_output_data, expected_output_data_quantized,
output_dims_count, output_scale, output_zero_point);
TF_LITE_MICRO_EXPECT_EQ(
kTfLiteOk,
ValidateConvGoldens(tensors, tensors_size, expected_output_data_quantized,
output_dims_count, conv_params, registration,
output_data, 1.0 /* tolerance */));
return ValidateConvGoldens(
tensors, tensors_size, expected_output_data_quantized, output_dims_count,
conv_params, registration, output_data, 1.0 /* tolerance */);
}
} // namespace testing

View File

@ -64,13 +64,15 @@ TF_LITE_MICRO_TESTS_BEGIN
TF_LITE_MICRO_TEST(SimpleTestFloat) {
float output_data[tflite::testing::kOutputElements];
TF_LITE_MICRO_EXPECT_EQ(
kTfLiteOk,
tflite::testing::TestConvFloat(
tflite::testing::kInputShape, tflite::testing::kInputData,
tflite::testing::kFilterShape, tflite::testing::kFilterData,
tflite::testing::kBiasShape, tflite::testing::kBiasData,
tflite::testing::kOutputShape, tflite::testing::kGoldenData,
&tflite::testing::common_conv_params,
tflite::Register_TRANSPOSE_CONV_2D(), output_data);
tflite::Register_TRANSPOSE_CONV_2D(), output_data));
}
TF_LITE_MICRO_TEST(SimpleTestQuantizedPerChannel) {
@ -88,15 +90,18 @@ TF_LITE_MICRO_TEST(SimpleTestQuantizedPerChannel) {
int zero_points[tflite::testing::kBiasElements + 1];
float scales[tflite::testing::kBiasElements + 1];
TF_LITE_MICRO_EXPECT_EQ(
kTfLiteOk,
tflite::testing::TestConvQuantizedPerChannel(
tflite::testing::kInputShape, tflite::testing::kInputData,
input_quantized, input_scale, input_zero_point,
tflite::testing::kFilterShape, tflite::testing::kFilterData,
filter_quantized, tflite::testing::kBiasShape, tflite::testing::kBiasData,
bias_quantized, scales, zero_points, tflite::testing::kOutputShape,
tflite::testing::kGoldenData, golden_quantized, output_scale,
output_zero_point, &tflite::testing::common_conv_params,
tflite::Register_TRANSPOSE_CONV_2D(), output_data);
filter_quantized, tflite::testing::kBiasShape,
tflite::testing::kBiasData, bias_quantized, scales, zero_points,
tflite::testing::kOutputShape, tflite::testing::kGoldenData,
golden_quantized, output_scale, output_zero_point,
&tflite::testing::common_conv_params,
tflite::Register_TRANSPOSE_CONV_2D(), output_data));
}
TF_LITE_MICRO_TEST(InputOutputDifferentTypeIsError) {