Retain qnn input kernel scales (#4292)
authorRamana Radhakrishnan <ramana.radhakrishnan@arm.com>
Sat, 16 Nov 2019 16:39:19 +0000 (16:39 +0000)
committerZhi <5145158+zhiics@users.noreply.github.com>
Sat, 16 Nov 2019 16:39:19 +0000 (08:39 -0800)
commit3ba9dd0920bc727f4dd4fb82ce08fbaced92f4f5
tree60c70d0c7d2e2f4e1e29aa5b5f6369cbf589824c
parent560280dd7cbc99ab9fbae52b52cee7c8b7150d11
Retain qnn input kernel scales (#4292)

* Add qnn conv2d attributes for input_tensor_scale and
kernel_tensor_scale.

The lowering in the tflite frontend loses the input_tensor_scale
and the kernel_tensor_scale by multiplying it and putting it into
the Requantize operation. This means that any graph partitioning
passes or other passes that need to access this information no longer
have it available in the qnn dialect.

regards
Ramana

* Store input tensor scale and Weight tensor scale for Dense as well

As for conv2d, the tflite frontend drops the input tensor
scale and the weight tensor scale from the relay op. Store
it as separate fields in there.

* Fix unintentional tab

* Rename input_tensor_scale to input_scale and kernel_tensor_scale
to kernel_scale for conv2d.

* input_tensor_scale -> input_scale weight_tensor_scale->weight_scale

* Rework dense testcase

And use input_scale and kernel_scale

* Be consistent in use of input_scale and kernel_scale values

* Fixup qnn conv2d tests for input_scale and kernel_scale

* Make pydoc identical between conv2d and dense for weight_tensor

* Fix up conv2d parameters to be in the same order between C++ and python

* Fix ordering of parameters for dense.

* Add input_scale and output_scale to try and satisfy ci gods

* Delete input_scale and kernel_scale.

nn.conv2d does not contain input_scale and kernel_scale. We need
to delete it when lowering it to nn.conv2d.

* Add input_scale and kernel_scale for qnn.conv2d
include/tvm/relay/qnn/attrs.h
python/tvm/relay/frontend/tflite.py
python/tvm/relay/qnn/op/legalizations.py
python/tvm/relay/qnn/op/qnn.py
src/relay/qnn/op/convolution.cc
src/relay/qnn/op/dense.cc
tests/python/relay/test_op_qnn_conv2d.py
tests/python/relay/test_op_qnn_dense.py
tests/python/relay/test_pass_qnn_legalize.py