aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/contrib/lite/kernels/internal
diff options
context:
space:
mode:
authorGravatar A. Unique TensorFlower <gardener@tensorflow.org>2018-09-24 22:09:00 -0700
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2018-09-24 22:13:26 -0700
commiteb14cc419ac3e9ced5f38fc3d08b1ab2e128dafa (patch)
treeae0a7d75a45658b2d20fcea599bf289829f98d58 /tensorflow/contrib/lite/kernels/internal
parentc1644948d23cae271b140d67101c1a386e5495fd (diff)
Update kernel evals to use new kernel signatures.
PiperOrigin-RevId: 214384090
Diffstat (limited to 'tensorflow/contrib/lite/kernels/internal')
-rw-r--r--tensorflow/contrib/lite/kernels/internal/depthwiseconv_float_test.cc74
-rw-r--r--tensorflow/contrib/lite/kernels/internal/depthwiseconv_quantized_test.cc132
-rw-r--r--tensorflow/contrib/lite/kernels/internal/test_util.cc40
-rw-r--r--tensorflow/contrib/lite/kernels/internal/test_util.h12
4 files changed, 122 insertions, 136 deletions
diff --git a/tensorflow/contrib/lite/kernels/internal/depthwiseconv_float_test.cc b/tensorflow/contrib/lite/kernels/internal/depthwiseconv_float_test.cc
index 7600b26f5c..41862a21a6 100644
--- a/tensorflow/contrib/lite/kernels/internal/depthwiseconv_float_test.cc
+++ b/tensorflow/contrib/lite/kernels/internal/depthwiseconv_float_test.cc
@@ -29,28 +29,20 @@ namespace tflite {
namespace {
// Runs the DepthwiseConv and compares against the reference implementation.
-void TestOneDepthwiseConv(const float* input_data, const Dims<4>& input_dims,
- const float* filter_data, const Dims<4>& filter_dims,
- const float* bias_data, const Dims<4>& bias_dims,
- int stride, int dilation_width_factor,
- int dilation_height_factor, int pad_width,
- int pad_height, int depth_multiplier,
- float output_activation_min,
- float output_activation_max,
- const Dims<4>& output_dims) {
- const int output_buffer_size = RequiredBufferSizeForDims(output_dims);
+void TestOneDepthwiseConv(
+ const DepthwiseParams& params, const RuntimeShape& input_shape,
+ const float* input_data, const RuntimeShape& filter_shape,
+ const float* filter_data, const RuntimeShape& bias_shape,
+ const float* bias_data, const RuntimeShape& output_shape) {
+ const int output_buffer_size = output_shape.FlatSize();
std::vector<float> output_data(output_buffer_size);
std::vector<float> reference_output_data(output_buffer_size);
- reference_ops::DepthwiseConv(
- input_data, input_dims, filter_data, filter_dims, bias_data, bias_dims,
- stride, stride, dilation_width_factor, dilation_height_factor, pad_width,
- pad_height, depth_multiplier, output_activation_min,
- output_activation_max, reference_output_data.data(), output_dims);
- optimized_ops::DepthwiseConv(
- input_data, input_dims, filter_data, filter_dims, bias_data, bias_dims,
- stride, stride, dilation_width_factor, dilation_height_factor, pad_width,
- pad_height, depth_multiplier, output_activation_min,
- output_activation_max, output_data.data(), output_dims);
+ reference_ops::DepthwiseConv(params, input_shape, input_data, filter_shape,
+ filter_data, bias_shape, bias_data, output_shape,
+ reference_output_data.data());
+ optimized_ops::DepthwiseConv(params, input_shape, input_data, filter_shape,
+ filter_data, bias_shape, bias_data, output_shape,
+ output_data.data());
double sum_abs_diff = 0;
float max_abs_val = 0;
@@ -105,24 +97,23 @@ bool TryTestOneDepthwiseConv() {
if (output_depth > kMaxSupportedOutputDepth) {
return false;
}
- Dims<4> input_dims_inference =
- MakeDimsForInference(input_depth, input_width, input_height, batch);
- Dims<4> output_dims_inference;
+ RuntimeShape input_shape_inference(
+ {batch, input_height, input_width, input_depth});
+ RuntimeShape output_shape_inference;
int pad_width, pad_height;
const auto padding_type =
UniformRandomInt(0, 1) ? PaddingType::kSame : PaddingType::kValid;
- if (!ComputeConvSizes(input_dims_inference, output_depth, filter_width,
+ if (!ComputeConvSizes(input_shape_inference, output_depth, filter_width,
filter_height, stride, dilation_width_factor,
dilation_height_factor, padding_type,
- &output_dims_inference, &pad_width, &pad_height)) {
+ &output_shape_inference, &pad_width, &pad_height)) {
return false;
}
- Dims<4> filter_dims_inference =
- MakeDimsForInference(output_depth, filter_width, filter_height, 1);
- Dims<4> bias_dims_inference = MakeDimsForInference(output_depth, 1, 1, 1);
- const int input_buffer_size = RequiredBufferSizeForDims(input_dims_inference);
- const int filter_buffer_size =
- RequiredBufferSizeForDims(filter_dims_inference);
+ RuntimeShape filter_shape_inference(
+ {1, filter_height, filter_width, output_depth});
+ RuntimeShape bias_shape_inference({1, 1, 1, output_depth});
+ const int input_buffer_size = input_shape_inference.FlatSize();
+ const int filter_buffer_size = filter_shape_inference.FlatSize();
std::vector<float> input_data(input_buffer_size);
std::vector<float> filter_data(filter_buffer_size);
std::vector<float> bias_data(output_depth);
@@ -133,12 +124,21 @@ bool TryTestOneDepthwiseConv() {
FillRandom(&input_data, -input_amplitude, input_amplitude);
FillRandom(&filter_data, -filter_amplitude, filter_amplitude);
FillRandom(&bias_data, -bias_amplitude, bias_amplitude);
- TestOneDepthwiseConv(input_data.data(), input_dims_inference,
- filter_data.data(), filter_dims_inference,
- bias_data.data(), bias_dims_inference, stride,
- dilation_width_factor, dilation_height_factor, pad_width,
- pad_height, depth_multiplier, output_activation_min,
- output_activation_max, output_dims_inference);
+ DepthwiseParams op_params;
+ op_params.padding_type = PaddingType::kSame;
+ op_params.padding_values.width = pad_width;
+ op_params.padding_values.height = pad_height;
+ op_params.stride_width = stride;
+ op_params.stride_height = stride;
+ op_params.dilation_width_factor = dilation_width_factor;
+ op_params.dilation_height_factor = dilation_height_factor;
+ op_params.depth_multiplier = depth_multiplier;
+ op_params.float_activation_min = output_activation_min;
+ op_params.float_activation_max = output_activation_max;
+ TestOneDepthwiseConv(op_params, input_shape_inference, input_data.data(),
+ filter_shape_inference, filter_data.data(),
+ bias_shape_inference, bias_data.data(),
+ output_shape_inference);
return true;
}
diff --git a/tensorflow/contrib/lite/kernels/internal/depthwiseconv_quantized_test.cc b/tensorflow/contrib/lite/kernels/internal/depthwiseconv_quantized_test.cc
index 312d048b2d..9414e109c3 100644
--- a/tensorflow/contrib/lite/kernels/internal/depthwiseconv_quantized_test.cc
+++ b/tensorflow/contrib/lite/kernels/internal/depthwiseconv_quantized_test.cc
@@ -35,29 +35,40 @@ namespace {
// Runs the DepthwiseConv and compares against the reference implementation.
template <FusedActivationFunctionType Ac>
int TestOneDepthwiseConvWithGivenOutputShift(
- const std::uint8_t* input_data, const Dims<4>& input_dims,
+ const std::uint8_t* input_data, const RuntimeShape& input_shape,
std::int32_t input_offset, const std::uint8_t* filter_data,
- const Dims<4>& filter_dims, std::int32_t filter_offset,
- const std::int32_t* bias_data, const Dims<4>& bias_dims, int stride,
+ const RuntimeShape& filter_shape, std::int32_t filter_offset,
+ const std::int32_t* bias_data, const RuntimeShape& bias_shape, int stride,
int pad_width, int pad_height, int depth_multiplier,
std::int32_t output_offset, std::int32_t output_multiplier,
int output_shift, std::int32_t output_activation_min,
- std::int32_t output_activation_max, const Dims<4>& output_dims) {
- const int output_buffer_size = RequiredBufferSizeForDims(output_dims);
+ std::int32_t output_activation_max, const RuntimeShape& output_shape) {
+ const int output_buffer_size = output_shape.FlatSize();
std::vector<std::uint8_t> output_data(output_buffer_size);
std::vector<std::uint8_t> reference_output_data(output_buffer_size);
- reference_ops::DepthwiseConv<Ac>(
- input_data, input_dims, input_offset, filter_data, filter_dims,
- filter_offset, bias_data, bias_dims, stride, pad_width, pad_height,
- depth_multiplier, output_offset, output_multiplier, output_shift,
- output_activation_min, output_activation_max,
- reference_output_data.data(), output_dims);
- optimized_ops::DepthwiseConv<Ac>(
- input_data, input_dims, input_offset, filter_data, filter_dims,
- filter_offset, bias_data, bias_dims, stride, pad_width, pad_height,
- depth_multiplier, output_offset, output_multiplier, output_shift,
- output_activation_min, output_activation_max, output_data.data(),
- output_dims);
+
+ tflite::DepthwiseParams op_params;
+ op_params.padding_type = PaddingType::kSame;
+ op_params.padding_values.width = pad_width;
+ op_params.padding_values.height = pad_height;
+ op_params.stride_width = stride;
+ op_params.stride_height = stride;
+ op_params.dilation_width_factor = 1;
+ op_params.dilation_height_factor = 1;
+ op_params.depth_multiplier = depth_multiplier;
+ op_params.quantized_activation_min = output_activation_min;
+ op_params.quantized_activation_max = output_activation_max;
+ op_params.input_offset = input_offset;
+ op_params.weights_offset = filter_offset;
+ op_params.output_offset = output_offset;
+ op_params.output_multiplier = output_multiplier;
+ op_params.output_shift = -output_shift;
+ reference_ops::DepthwiseConv(op_params, input_shape, input_data, filter_shape,
+ filter_data, bias_shape, bias_data, output_shape,
+ reference_output_data.data());
+ optimized_ops::DepthwiseConv(op_params, input_shape, input_data, filter_shape,
+ filter_data, bias_shape, bias_data, output_shape,
+ output_data.data());
int saturated_min = 0;
int saturated_max = 0;
std::vector<int> diff(output_buffer_size);
@@ -106,25 +117,25 @@ int TestOneDepthwiseConvWithGivenOutputShift(
// vacuous. So we just bisect our way to reasonable output_shift values.
template <FusedActivationFunctionType Ac>
void TestOneDepthwiseConvBisectOutputShift(
- const std::uint8_t* input_data, const Dims<4>& input_dims,
+ const std::uint8_t* input_data, const RuntimeShape& input_shape,
std::int32_t input_offset, const std::uint8_t* filter_data,
- const Dims<4>& filter_dims, std::int32_t filter_offset,
- const std::int32_t* bias_data, const Dims<4>& bias_dims, int stride,
+ const RuntimeShape& filter_shape, std::int32_t filter_offset,
+ const std::int32_t* bias_data, const RuntimeShape& bias_shape, int stride,
int pad_width, int pad_height, int depth_multiplier,
std::int32_t output_offset, std::int32_t output_multiplier,
int output_activation_bisect_start, int output_activation_bisect_end,
std::int32_t output_activation_min, std::int32_t output_activation_max,
- const Dims<4>& output_dims) {
+ const RuntimeShape& output_shape) {
ASSERT_LT(output_activation_bisect_start, output_activation_bisect_end)
<< "Bisection failed ?!?!";
int output_shift_bisect_midpoint =
(output_activation_bisect_start + output_activation_bisect_end) / 2;
int bisect_result = TestOneDepthwiseConvWithGivenOutputShift<Ac>(
- input_data, input_dims, input_offset, filter_data, filter_dims,
- filter_offset, bias_data, bias_dims, stride, pad_width, pad_height,
+ input_data, input_shape, input_offset, filter_data, filter_shape,
+ filter_offset, bias_data, bias_shape, stride, pad_width, pad_height,
depth_multiplier, output_offset, output_multiplier,
output_shift_bisect_midpoint, output_activation_min,
- output_activation_max, output_dims);
+ output_activation_max, output_shape);
// At this point we know that the test succeeded (otherwise it would have
// aborted).
if (bisect_result == 0) {
@@ -147,47 +158,47 @@ void TestOneDepthwiseConvBisectOutputShift(
? output_activation_bisect_end
: output_shift_bisect_midpoint;
TestOneDepthwiseConvBisectOutputShift<Ac>(
- input_data, input_dims, input_offset, filter_data, filter_dims,
- filter_offset, bias_data, bias_dims, stride, pad_width, pad_height,
+ input_data, input_shape, input_offset, filter_data, filter_shape,
+ filter_offset, bias_data, bias_shape, stride, pad_width, pad_height,
depth_multiplier, output_offset, output_multiplier,
new_output_activation_bisect_start, new_output_activation_bisect_end,
- output_activation_min, output_activation_max, output_dims);
+ output_activation_min, output_activation_max, output_shape);
}
template <FusedActivationFunctionType Ac>
void TestOneDepthwiseConv(
- const std::uint8_t* input_data, const Dims<4>& input_dims,
+ const std::uint8_t* input_data, const RuntimeShape& input_shape,
std::int32_t input_offset, const std::uint8_t* filter_data,
- const Dims<4>& filter_dims, std::int32_t filter_offset,
- const std::int32_t* bias_data, const Dims<4>& bias_dims, int stride,
+ const RuntimeShape& filter_shape, std::int32_t filter_offset,
+ const std::int32_t* bias_data, const RuntimeShape& bias_shape, int stride,
int pad_width, int pad_height, int depth_multiplier,
std::int32_t output_offset, std::int32_t output_multiplier,
std::int32_t output_activation_min, std::int32_t output_activation_max,
- const Dims<4>& output_dims) {
+ const RuntimeShape& output_shape) {
TestOneDepthwiseConvBisectOutputShift<Ac>(
- input_data, input_dims, input_offset, filter_data, filter_dims,
- filter_offset, bias_data, bias_dims, stride, pad_width, pad_height,
+ input_data, input_shape, input_offset, filter_data, filter_shape,
+ filter_offset, bias_data, bias_shape, stride, pad_width, pad_height,
depth_multiplier, output_offset, output_multiplier, 0, 32,
- output_activation_min, output_activation_max, output_dims);
+ output_activation_min, output_activation_max, output_shape);
}
void TestOneDepthwiseConv(
FusedActivationFunctionType Ac, const std::uint8_t* input_data,
- const Dims<4>& input_dims, std::int32_t input_offset,
- const std::uint8_t* filter_data, const Dims<4>& filter_dims,
+ const RuntimeShape& input_shape, std::int32_t input_offset,
+ const std::uint8_t* filter_data, const RuntimeShape& filter_shape,
std::int32_t filter_offset, const std::int32_t* bias_data,
- const Dims<4>& bias_dims, int stride, int pad_width, int pad_height,
+ const RuntimeShape& bias_shape, int stride, int pad_width, int pad_height,
int depth_multiplier, std::int32_t output_offset,
std::int32_t output_multiplier, std::int32_t output_activation_min,
- std::int32_t output_activation_max, const Dims<4>& output_dims) {
-#define TOCO_HANDLE_CASE(AC_TYPE) \
- if (AC_TYPE == Ac) { \
- TestOneDepthwiseConv<AC_TYPE>( \
- input_data, input_dims, input_offset, filter_data, filter_dims, \
- filter_offset, bias_data, bias_dims, stride, pad_width, pad_height, \
- depth_multiplier, output_offset, output_multiplier, \
- output_activation_min, output_activation_max, output_dims); \
- return; \
+ std::int32_t output_activation_max, const RuntimeShape& output_shape) {
+#define TOCO_HANDLE_CASE(AC_TYPE) \
+ if (AC_TYPE == Ac) { \
+ TestOneDepthwiseConv<AC_TYPE>( \
+ input_data, input_shape, input_offset, filter_data, filter_shape, \
+ filter_offset, bias_data, bias_shape, stride, pad_width, pad_height, \
+ depth_multiplier, output_offset, output_multiplier, \
+ output_activation_min, output_activation_max, output_shape); \
+ return; \
}
TOCO_HANDLE_CASE(FusedActivationFunctionType::kNone)
TOCO_HANDLE_CASE(FusedActivationFunctionType::kRelu)
@@ -227,34 +238,33 @@ bool TryTestDepthwiseConv(int batch, int input_depth, int input_width,
const std::int32_t input_offset = UniformRandomInt(-256, 0);
const std::int32_t filter_offset = UniformRandomInt(-256, 0);
const std::int32_t output_offset = UniformRandomInt(-256, 0);
- Dims<4> input_dims_inference =
- MakeDimsForInference(input_depth, input_width, input_height, batch);
- Dims<4> output_dims_inference;
+ RuntimeShape input_shape_inference(
+ {batch, input_height, input_width, input_depth});
+ RuntimeShape output_shape_inference;
int pad_width, pad_height;
- if (!ComputeConvSizes(input_dims_inference, output_depth, filter_width,
+ if (!ComputeConvSizes(input_shape_inference, output_depth, filter_width,
filter_height, stride, dilation_width_factor,
dilation_height_factor, padding_type,
- &output_dims_inference, &pad_width, &pad_height)) {
+ &output_shape_inference, &pad_width, &pad_height)) {
return false;
}
- Dims<4> filter_dims_inference =
- MakeDimsForInference(output_depth, filter_width, filter_height, 1);
- Dims<4> bias_dims_inference = MakeDimsForInference(output_depth, 1, 1, 1);
- const int input_buffer_size = RequiredBufferSizeForDims(input_dims_inference);
- const int filter_buffer_size =
- RequiredBufferSizeForDims(filter_dims_inference);
+ RuntimeShape filter_shape_inference(
+ {1, filter_height, filter_width, output_depth});
+ RuntimeShape bias_shape_inference({1, 1, 1, output_depth});
+ const int input_buffer_size = input_shape_inference.FlatSize();
+ const int filter_buffer_size = filter_shape_inference.FlatSize();
std::vector<std::uint8_t> input_data(input_buffer_size);
std::vector<std::uint8_t> filter_data(filter_buffer_size);
std::vector<std::int32_t> bias_data(output_depth);
FillRandom(&input_data);
FillRandom(&filter_data);
FillRandom(&bias_data, -10000, 10000);
- TestOneDepthwiseConv(ac, input_data.data(), input_dims_inference,
- input_offset, filter_data.data(), filter_dims_inference,
- filter_offset, bias_data.data(), bias_dims_inference,
+ TestOneDepthwiseConv(ac, input_data.data(), input_shape_inference,
+ input_offset, filter_data.data(), filter_shape_inference,
+ filter_offset, bias_data.data(), bias_shape_inference,
stride, pad_width, pad_height, depth_multiplier,
output_offset, output_multiplier, output_activation_min,
- output_activation_max, output_dims_inference);
+ output_activation_max, output_shape_inference);
return true;
}
diff --git a/tensorflow/contrib/lite/kernels/internal/test_util.cc b/tensorflow/contrib/lite/kernels/internal/test_util.cc
index 5ae4b193d0..75d568ae3a 100644
--- a/tensorflow/contrib/lite/kernels/internal/test_util.cc
+++ b/tensorflow/contrib/lite/kernels/internal/test_util.cc
@@ -19,36 +19,15 @@ limitations under the License.
namespace tflite {
-Dims<4> MakeDimsForInference(int depth, int width, int height, int batch) {
- Dims<4> result;
- int cum_prod = 1;
-
- result.sizes[0] = depth;
- result.strides[0] = cum_prod;
- cum_prod *= result.sizes[0];
-
- result.sizes[1] = width;
- result.strides[1] = cum_prod;
- cum_prod *= result.sizes[1];
-
- result.sizes[2] = height;
- result.strides[2] = cum_prod;
- cum_prod *= result.sizes[2];
-
- result.sizes[3] = batch;
- result.strides[3] = cum_prod;
-
- return result;
-}
-
// this is a copied from an internal function in propagate_fixed_sizes.cc
-bool ComputeConvSizes(Dims<4> input_dims, int output_depth, int filter_width,
- int filter_height, int stride, int dilation_width_factor,
- int dilation_height_factor, PaddingType padding_type,
- Dims<4>* output_dims, int* pad_width, int* pad_height) {
- const int input_width = ArraySize(input_dims, 1);
- const int input_height = ArraySize(input_dims, 2);
- const int batch = ArraySize(input_dims, 3);
+bool ComputeConvSizes(const RuntimeShape& input_shape, int output_depth,
+ int filter_width, int filter_height, int stride,
+ int dilation_width_factor, int dilation_height_factor,
+ PaddingType padding_type, RuntimeShape* output_shape,
+ int* pad_width, int* pad_height) {
+ const int input_width = input_shape.Dims(2);
+ const int input_height = input_shape.Dims(1);
+ const int batch = input_shape.Dims(0);
int dilated_filter_width = dilation_width_factor * (filter_width - 1) + 1;
int dilated_filter_height = dilation_height_factor * (filter_height - 1) + 1;
@@ -76,8 +55,7 @@ bool ComputeConvSizes(Dims<4> input_dims, int output_depth, int filter_width,
0,
((output_width - 1) * stride + dilated_filter_width - input_width) / 2);
- *output_dims =
- MakeDimsForInference(output_depth, output_width, output_height, batch);
+ output_shape->BuildFrom({batch, output_height, output_width, output_depth});
return true;
}
diff --git a/tensorflow/contrib/lite/kernels/internal/test_util.h b/tensorflow/contrib/lite/kernels/internal/test_util.h
index cb6d8b147c..e4a383bedf 100644
--- a/tensorflow/contrib/lite/kernels/internal/test_util.h
+++ b/tensorflow/contrib/lite/kernels/internal/test_util.h
@@ -26,14 +26,12 @@ limitations under the License.
namespace tflite {
-// Creates a Dims struct from a set of dimensions.
-Dims<4> MakeDimsForInference(int depth, int width, int height, int batch);
-
// Computes output and padding dimensions.
-bool ComputeConvSizes(Dims<4> input_dims, int output_depth, int filter_width,
- int filter_height, int stride, int dilation_width_factor,
- int dilation_height_factor, PaddingType padding_type,
- Dims<4>* output_dims, int* pad_width, int* pad_height);
+bool ComputeConvSizes(const RuntimeShape& input_shape, int output_depth,
+ int filter_width, int filter_height, int stride,
+ int dilation_width_factor, int dilation_height_factor,
+ PaddingType padding_type, RuntimeShape* output_shape,
+ int* pad_width, int* pad_height);
// Returns a mt19937 random engine.
std::mt19937& RandomEngine();