[Bug] [Relax][ONNX] Resize drops axes-scoped sizes before constructing resize2d

Aperta
#20,887 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
Mezza giornata
Idoneità per principianti
65/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
python
Ambito
compilers

Direzione di ricerca

Start from the Resize converter in the Relax ONNX frontend, where sizes[2:] is sliced without applying the axes mapping. Run the provided repro.py to confirm the ValueError for axes=[2, 3] while full-rank sizes still import. Done when the axes-scoped case yields a 2-dim size and the output matches the full-rank result [1, 1, 4, 4].

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

needs-triage type: bug
Expected behavior

For Resize-18, axes=[2, 3], sizes=[4, 4] on a [1, 1, 2, 2] tensor should produce the same [1, 1, 4, 4] result as full-rank sizes=[1, 1, 4, 4].

Actual behavior

Full-rank sizes import successfully. Axes-scoped sizes pass ONNX full checking and the ONNX reference evaluation, but fail during Relax import:

ValueError: Resize2D expects the given output image size to be a 2-dim shape, while the given one has ndim 0

The converter slices sizes[2:] without expanding the axes mapping. This uses the default stretch policy; the aspect-ratio change in #20846 does not cover it.

Environment

TVM 0.28.dev0 (local build; build commit unavailable), Python 3.12.3, Linux x86_64; ONNX 1.22.0, NumPy 2.5.4.

Steps to reproduce

Run with python repro.py:

import numpy as np
import onnx
from onnx import TensorProto as T, helper as h, numpy_helper as nh
from onnx.reference import ReferenceEvaluator
from tvm.relax.frontend.onnx import from_onnx

x = np.arange(4, dtype="float32").reshape(1, 1, 2, 2)
expected = x.repeat(2, axis=2).repeat(2, axis=3)
for axes, sizes in [(None, [1, 1, 4, 4]), ([2, 3], [4, 4])]:
    attrs = {} if axes is None else {"axes": axes}
    node = h.make_node("Resize", ["x", "", "", "sizes"], ["y"],
                       mode="nearest", coordinate_transformation_mode="asymmetric",
                       nearest_mode="floor", **attrs)
    model = h.make_model(h.make_graph([node], "resize",
        [h.make_tensor_value_info("x", T.FLOAT, [1, 1, 2, 2])],
        [h.make_tensor_value_info("y", T.FLOAT, [1, 1, 4, 4])],
        [nh.from_array(np.array(sizes, dtype="int64"), "sizes")]),
        opset_imports=[h.make_opsetid("", 18)], ir_version=10)
    onnx.checker.check_model(model, full_check=True)
    np.testing.assert_array_equal(ReferenceEvaluator(model).run(None, {"x": x})[0], expected)
    try:
        from_onnx(model, keep_params_in_input=False)
        print("axes", axes, "imported")
    except Exception as error:
        print("axes", axes, type(error).__name__, str(error).splitlines()[-1])
Triage
  • needs-triage
Lingua principale
Python
Stelle
13.9k
Fork
4k
Merge medio
8h 5m
PR unite (30g)
170

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di apache/tvm

Tutte le issue di apache/tvm

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.