Skip to content

Commit a7b2db8

Browse files
anwang2009Lucien0
authored andcommitted
[FQ2I] Add abs to FQ2I (apache#10922)
* add abs to fq2i * lint * special case for fq2i * np iinfo
1 parent 199c3eb commit a7b2db8

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

python/tvm/relay/transform/fake_quantization_to_integer.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,20 @@ def identity(expr, type_map):
109109
register_unary_identity("image.resize2d")
110110

111111

112+
@register_fake_quantization_to_integer("abs")
113+
def abs_(expr, type_map):
114+
"""Rewrite an abs op"""
115+
assert len(expr.args) == 1
116+
arg = expr.args[0]
117+
t = type_map[arg]
118+
119+
min_value = relay.const(np.iinfo(t.dtype).min, t.dtype)
120+
one = relay.const(1, t.dtype)
121+
out = relay.op.where(relay.op.equal(min_value, arg), arg + one, arg)
122+
out = relay.op.abs(out)
123+
return [out, t]
124+
125+
112126
@register_fake_quantization_to_integer("nn.adaptive_avg_pool1d")
113127
def adaptive_avgpool1d(expr, type_map):
114128
"""Rewrite an adaptive avgpool op"""

tests/python/relay/test_pass_fake_quantization_to_integer.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,19 @@ def test_fake_quantize_image_resize_bilinear():
374374
compare_fq_to_int(op, [x_np], allow_rounding_error=True)
375375

376376

377+
def test_fake_quantize_abs():
378+
x = relay.var("x", shape=[1, 3, 224, 224], dtype="int8")
379+
380+
zero = relay.const(0)
381+
x = relay.qnn.op.dequantize(x, relay.const(2.0), zero)
382+
op = relay.op.abs(x)
383+
op = relay.qnn.op.quantize(op, relay.const(2.0), zero)
384+
385+
x_np = np.random.randint(-128, 127, size=[1, 3, 224, 224], dtype="int8")
386+
387+
compare_fq_to_int(op, [x_np])
388+
389+
377390
def test_fake_quantize_expand_dims():
378391
x = relay.var("x", shape=[1, 3, 224, 224], dtype="int8")
379392

0 commit comments

Comments
 (0)