From df6a26913eb0dbb5232f9a6f47ca36aa8cb7b8e4 Mon Sep 17 00:00:00 2001 From: auphelia <jakobapk@web.de> Date: Mon, 18 May 2020 15:33:03 +0100 Subject: [PATCH] [Test] Add first draft of unit test for HLSCustomOp SameResize_Batch --- .../test_fpgadataflow_sameresize.py | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 tests/fpgadataflow/test_fpgadataflow_sameresize.py diff --git a/tests/fpgadataflow/test_fpgadataflow_sameresize.py b/tests/fpgadataflow/test_fpgadataflow_sameresize.py new file mode 100644 index 000000000..8177e92ef --- /dev/null +++ b/tests/fpgadataflow/test_fpgadataflow_sameresize.py @@ -0,0 +1,64 @@ +import pytest + +from onnx import TensorProto, helper +from finn.core.datatype import DataType +from finn.core.modelwrapper import ModelWrapper +from finn.transformation.infer_shapes import InferShapes + + +def make_single_sameresize_modelwrapper(idim, kdim, stride, num_ch, idt, pad_style): + assert idim % stride == 0, "Stride must divide input dimension." + # number of "same" windows over the input data + same_windows = idim // stride + odim = kdim + stride * (same_windows - 1) + inp = helper.make_tensor_value_info( + "inp", TensorProto.FLOAT, [1, idim, idim, num_ch] + ) + outp = helper.make_tensor_value_info( + "outp", TensorProto.FLOAT, [1, odim, odim, num_ch] + ) + + SameResize_node = helper.make_node( + "SameResize_Batch", + ["inp"], + ["outp"], + domain="finn", + backend="fpgadataflow", + ImgDim=idim, + KernelDim=kdim, + Stride=stride, + NumChannels=num_ch, + inputDataType=str(idt.name), + PaddingStyle=pad_style, + ) + + graph = helper.make_graph( + nodes=[SameResize_node], name="sameresize_graph", inputs=[inp], outputs=[outp] + ) + + model = helper.make_model(graph, producer_name="sameresize-model") + model = ModelWrapper(model) + + model.set_tensor_datatype("inp", idt) + model.set_tensor_datatype("outp", idt) + + return model + + +# image dimension +@pytest.mark.parametrize("idim", [4]) +# kernel dimension +@pytest.mark.parametrize("kdim", [2]) +# stride +@pytest.mark.parametrize("stride", [1]) +# number of channels +@pytest.mark.parametrize("num_ch", [2]) +# FINN input datatype +@pytest.mark.parametrize("idt", [DataType.INT2]) +# PaddingStyle: distribution of added values to achieve "same" padding +@pytest.mark.parametrize("pad_style", [2]) +def test_fpgadataflow_sameresize(idim, kdim, stride, num_ch, idt, pad_style): + model = make_single_sameresize_modelwrapper( + idim, kdim, stride, num_ch, idt, pad_style + ) + model = model.transform(InferShapes()) -- GitLab