Skip to content

ONNX models with import or runtime issues #18

Open

Description

@antimora

Tracking: Models That Fail to Import or Run in Burn

This issue tracks ONNX models that cannot currently be onnx converted, rs built, have runtime problems or output accuracies using burn-import. If you encounter a model that fails to import or execute, please comment below or submit a new issue and reference this tracker.

Checklist of Models with Known Issues (working if checked)

Natural Language Processing (NLP)

  • ALBERT/BERT models
  • all-MiniLM-L6-v2
  • ModernBERT-base
  • IBM Granite 4.0 Tiny Preview (models#71) - no public ONNX export exists yet, only GGUF
  • Qwen1.5
  • Qwen2.5
  • Qwen3
  • SmolLM
  • SmolLM2

Multimodal (Vision-Language)

  • CLIP ViT-B-32
  • clip-ViT-B-32 Vision

Object Detection

  • YOLOv5 model
  • YOLOv8n
  • YOLOv10 model
  • Yolo11x mode
  • YOLOv12m
  • YOLO12x
  • Yolo26x
  • Retinaface model (#2037)
  • Face Detector (MediaPipe)
  • RF-DETR

Depth Estimation

  • Depth-Anything-v2
  • dpt-dinov2-small-kitti - converts and compiles on main from the onnx-community export as published (#2592 fixed); needs a run/accuracy check
  • Apple Depth Pro

Generative Models

Audio/Speech

  • piper-tts / VITS - converts on main, generated code does not compile (#534, #533)
  • NVIDIA FastConformer (streaming Conformer-Hybrid Large en-US) - awaiting a re-test on main
  • Silero VAD
  • kokoro onnx model

Computer Vision - Classification

  • AlexNet
  • DenseNet-121
  • Inception v1
  • Inception v2
  • MobileNet v2
  • ResNet-50
  • Resnet (onnx model)
  • ShuffleNet
  • SqueezeNet
  • VGG-19
  • ZFNet-512

Computer Vision - Face Recognition

  • ArcFace (LResNet100E-IR)

Segmentation

  • Segment Anything 2 (SAM-2) hiera_tiny encoder - converts and compiles on main; needs a run/accuracy check

Computer Vision - Other

  • waifu2x cunet - converts and compiles on main; needs a run/accuracy check
  • XFeat - converts and compiles on main (#3110 fixed, ScatterND and TopK both supported now); needs a run/accuracy check
  • Piiranha - converts and compiles on main (#2968 fixed); needs a run/accuracy check
  • DINOv3 (#469 for the onnx-community export; the -MHA export needs com.microsoft::MultiHeadAttention; the quantized variant also needs #160)
  • PP-OCRv6 - det and rec both convert and compile on main (#468 fixed); needs a run/accuracy check

Optical Flow & Pose Estimation

  • GMFlow models - last known blocker (#20) was fixed by #53; not re-tested since, model is Google Drive only
  • RTMW3D-x (#2930, models#74)

How to Use

  • Add a comment if you find a new failing model, or if your model is fixed by a PR.
  • Check off models as they become supported or fixed.
  • Reference this issue when creating new ONNX import failure reports.

For operator-level or feature gaps, please also check:

Activity

  1. pinned this issue on Jul 23, 2025
  2. changed the title [-]ONNX models with import or runtime issues in burn-import[/-] [+]ONNX models with import or runtime issues[/+] on Jul 23, 2025
  3. antimora commented on Jul 24, 2025

    @antimora
    CollaboratorAuthor

    Quick update I am able to convert yolo11x_opset16.onnx using this WIP PR: tracel-ai/burn#3381

  4. antimora commented on Aug 16, 2025

    @antimora
    CollaboratorAuthor

    CLIP ViT-B-32 is buildable with tracel-ai/burn#3560 (still under review)

  5. antimora commented on Aug 16, 2025

    @antimora
    CollaboratorAuthor

    I'll be working on a test harness to test various large models quickly.

  6. antimora commented on Aug 17, 2025

    @antimora
    CollaboratorAuthor

    RTMW3D-x is buildable with tracel-ai/burn#3564 (still under review)

  7. n1ght-hunter commented on Aug 18, 2025

    @n1ght-hunter

    i am able to import https://huggingface.co/Xenova/albert-large-v2/resolve/main/onnx/model.onnx but rust code has type errors

  8. coolstudio1678 commented on Aug 18, 2025

    @coolstudio1678

    in rust,shou error:
    === Tensor Operation Error ===
    Operation: 'Reshape'
    Reason:
    1. The given shape doesn't have the same number of elements as the current tensor. Current shape: [1035], target shape: [1, 1034].

    program in python,
    def init(self, input_dim=1035):
    super(Net, self).init()
    self.attention = ChannelAttention(input_dim)
    self.fc1 = nn.Linear(input_dim, 512)
    self.fc2 = nn.Linear(512, 256)
    self.fc3 = nn.Linear(256, 128)
    self.fc4 = nn.Linear(128, 2)
    self.relu = nn.ReLU()

    torch.onnx.export(model, 
                    dummy_input, 
                    'd:/archicad/model_data/f_best_2.onnx',
                    export_params=True, 
                    opset_version=12, 
                    do_constant_folding=True,
                    input_names=['input'], 
                    output_names=['output'],
                    dynamic_axes={})
    

    have use uv run --script https://raw.githubusercontent.com/tracel-ai/burn/refs/heads/main/crates/burn-import/onnx_opset_upgrade.py
    change to opset version 16

  9. antimora commented on Aug 18, 2025

    @antimora
    CollaboratorAuthor

    i am able to import https://huggingface.co/Xenova/albert-large-v2/resolve/main/onnx/model.onnx but rust code has type errors

    I have 3 outstanding ONNX related PRs (#3563, tracel-ai/burn#3564, tracel-ai/burn#3550) with fixes. Most likely it's caused by this: tracel-ai/burn#3564.

    Hopefully @laggui will have some time to review ;-)

  10. antimora commented on Aug 18, 2025

    @antimora
    CollaboratorAuthor

    Resnet is buildable:

    Image
  11. n1ght-hunter commented on Aug 19, 2025

    @n1ght-hunter

    can we add kokoro to this. as its a very popular tts model. currently has an issue with expand1 - rank which is an already known issue.
    it also uses albert internally so will probably require albert model to be working for this to work
    https://github.com/thewh1teagle/kokoro-onnx/releases/download/model-files-v1.0/kokoro-v1.0.onnx
    there is also the bin file for voices
    https://github.com/thewh1teagle/kokoro-onnx/releases/download/model-files-v1.0/voices-v1.0.bin

  12. antimora commented on Aug 21, 2025

    @antimora
    CollaboratorAuthor

    Even though Yolo11X ONNX file can be converted into rust code, currently the generated rust code can't be built to due to not handing broadcasting (see why automatic full broadcasting is lacking in Burn tracel-ai/burn#1499). I have fixed this broadcasting issue here: tracel-ai/burn#3589

    Afterwards, there is another runtime issue with slice that I need to investigate.

  13. notdanilo commented on Aug 21, 2025

    @notdanilo

    Is failing to import due to a scalar input in ConstantOfShape
    https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/vae_decoder/model.onnx

      ERROR burn_import::logger: PANIC => panicked at C:\Users\Danilo\.cargo\registry\src\index.crates.io-1949cf8c6b5b557f\onnx-ir-0.18.0\src\node\constant_of_shape.rs:34:18:
      ConstantOfShape node must have a Tensor with a non-empty static shape value

    attribute in netron

    tensor: float32[1]
    [
        0
    ]
    
  14. antimora commented on Aug 25, 2025

    @antimora
    CollaboratorAuthor

    I have added a harness to test models: https://github.com/tracel-ai/burn/tree/main/crates/burn-import/model-checks

    YOLOx11 is passing for tch and ndarray backends but currently it's failing on metal due to: #51 bug in metal.

    I am working on clip-vit-b-32-text next. Locally it's passing (with 5-6 fixes in burn-import related to broadcasting and other issues). I have identified one bug in ndarray backend related to int lower open. I will submit a PR shortly and a bug report for ndarray (if I can't fix it).

  15. torsteingrindvik commented on Aug 25, 2025

    @torsteingrindvik

    Recently had issues with Apple Depth Pro , could it be added? It has a script for weights.

    Another one of interest to me is LVSM: A Large View Synthesis Model with Minimal 3D Inductive Bias also with a list of checkpoints, also with issues importing in Burn (on a recent main).

  16. 63 remaining items

  17. ZOXEXIVO commented on Mar 31, 2026

    @ZOXEXIVO

    Yolo26x worked a few months ago (before the burn-onnx crate was extracted)
    Currently it fails in runtime for all backends with

    index.crates.io-1949cf8c6b5b557f\ndarray-0.17.2\src\zip\mod.rs:252:5:
    Zip: Producer dimension mismatch, expected: IxDynImpl(Inline(2, [1, 300, 0, 0])), got: IxDynImpl(Inline(2, [1, 1, 0, 0]))
    stack backtrace:
    
    ---
    let unsqueeze2_out1: Tensor<B, 3> = topk2_out1.unsqueeze_dims::<3>(&[2]);
    let mod1_out1 = topk2_out2.remainder((constant354_out1).unsqueeze_dims(&[0isize])); <-- here
    let unsqueeze3_out1: Tensor<B, 3, Int> = mod1_out1.unsqueeze_dims::<3>(&[2]);
    
  18. AdrianEddy commented on Mar 31, 2026

    @AdrianEddy

    @ZOXEXIVO are you using batch size other than 1?

  19. ZOXEXIVO commented on Mar 31, 2026

    @ZOXEXIVO

    I export it as i usually do

    yolo export model=last.pt format=onnx
    Ultralytics 8.4.33  Python-3.13.9 torch-2.9.0+cu130 CPU (AMD ...)
    YOLO26x summary (fused): 190 layers, 55,637,013 parameters, 0 gradients, 193.4 GFLOPs
    
    PyTorch: starting from 'last.pt' with input shape (1, 3, 1280, 1280) BCHW and output shape(s) (1, 300, 6) (225.4 MB)
    
    ONNX: slimming with onnxslim 0.1.72...
    ONNX: export success  2.8s, saved as 'last.onnx' (213.1 MB)
    
  20. AdrianEddy commented on Mar 31, 2026

    @AdrianEddy

    but at runtime, does your input tensor include batch size more than 1?

  21. ZOXEXIVO commented on Mar 31, 2026

    @ZOXEXIVO

    Yes, code not changed

    let tensor_data = TensorData::new(input_data, [1, CHANNEL_COUNT, IMG_SIZE, IMG_SIZE]);
    
    let input_tensor: Tensor<B, 4> = Tensor::from_data(
         tensor_data.convert::<B::FloatElem>(),
         device
    );
    
    let output = model.forward(input_tensor);
    
  22. antimora commented on Mar 31, 2026

    @antimora
    CollaboratorAuthor

    @ZOXEXIVO filed an issue: #281

  23. antimora commented on Apr 1, 2026

    @antimora
    CollaboratorAuthor

    @ZOXEXIVO

    Can you please test if this PR fixes your issue: #285 ?

    it's merged on main

  24. ZOXEXIVO commented on Apr 1, 2026

    @ZOXEXIVO

    @ZOXEXIVO

    Can you please test if this PR fixes your issue: #285 ?

    it's merged on main

    I tested it — the issue is fixed.
    Thanks, @antimora !

  25. antimora commented on Apr 7, 2026

    @antimora
    CollaboratorAuthor

    Added 11 more model-checks, including ArcFace

  26. antimora commented on Apr 25, 2026

    @antimora
    CollaboratorAuthor

    kokoro model works with #372 fix

    however, there is accuracy 1% discrepancy with ORT see #371

  27. kingwingfly commented on May 14, 2026

    @kingwingfly

    DINOv3 cannot be imported.

    The model downloaded from hugging face onnx-community failed to be built.

    quantized build log
    ...
      DEBUG onnx_ir::pipeline:  PHASE 3: Type Inference
      ERROR burn_onnx::logger: PANIC => panicked at /home/louis/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/burn-onnx-0.21.0/src/model_gen.rs:349:33:
      Failed to parse ONNX file 'models/upgraded_model_quantized.onnx': Type inference failed: Unsupported ONNX operation(s): DynamicQuantizeLinear (node 'dynamr18'), SplitToSequence (node 'splittosequence9'), SplitToSequence (node 'splittosequence10'), SequenceAt (node 'sequenceat17'), SequenceAt (node 'sequenceat18'), SequenceAt (node 'sequenceat19'), SequenceAt (node 'sequenceat20'), DynamicQuantizeLinear (node 'dynamicquantizelinear19'), DynamicQuantizeLinear (node 'dynamicquantizelinear20'), DynamicQuantizeLinear (node 'dynamicquantizelinear21'), DynamicQuantizeLinear (node 'dynamicquantizelinear22'), SplitToSequence (node 'splittosequence11'), SplitToSequence (node 'splittosequence12'), SequenceAt (node 'sequenceat21'), SequenceAt (node 'sequenceat22'), SequenceAt (node 'sequenceat23'), SequenceAt (node 'sequenceat24'), DynamicQuantizeLinear (node 'dynamicquantizelinear23'), DynamicQuantizeLinear (node 'dynamicquantizelinear24'), DynamicQuantizeLinear (node 'dynamicquantizelinear25'), DynamicQuantizeLinear (node 'dynamicquantizelinear26'), SplitToSequence (node 'splittosequence13'), SplitToSequence (node 'splittosequence14'), SequenceAt (node 'sequenceat25'), SequenceAt (node 'sequenceat26'), SequenceAt (node 'sequenceat27'), SequenceAt (node 'sequenceat28'), DynamicQuantizeLinear (node 'dynamicquantizelinear27'), DynamicQuantizeLinear (node 'dynamicquantizelinear28'), DynamicQuantizeLinear (node 'dynamicquantizelinear29'), DynamicQuantizeLinear (node 'dynamicquantizelinear30'), SplitToSequence (node 'splittosequence15'), SplitToSequence (node 'splittosequence16'), SequenceAt (node 'sequenceat29'), SequenceAt (node 'sequenceat30'), SequenceAt (node 'sequenceat31'), SequenceAt (node 'sequenceat32'), DynamicQuantizeLinear (node 'dynamicquantizelinear31'), DynamicQuantizeLinear (node 'dynamicquantizelinear32'), DynamicQuantizeLinear (node 'dynamicquantizelinear33'), DynamicQuantizeLinear (node 'dynamicquantizelinear34'), SplitToSequence (node 'splittosequence17'), SplitToSequence (node 'splittosequence18'), SequenceAt (node 'sequenceat33'), SequenceAt (node 'sequenceat34'), SequenceAt (node 'sequenceat35'), SequenceAt (node 'sequenceat36'), DynamicQuantizeLinear (node 'dynamicquantizelinear35'), DynamicQuantizeLinear (node 'dynamicquantizelinear36'), DynamicQuantizeLinear (node 'dynamicquantizelinear37'), DynamicQuantizeLinear (node 'dynamicquantizelinear38'), SplitToSequence (node 'splittosequence19'), SplitToSequence (node 'splittosequence20'), SequenceAt (node 'sequenceat37'), SequenceAt (node 'sequenceat38'), SequenceAt (node 'sequenceat39'), SequenceAt (node 'sequenceat40'), DynamicQuantizeLinear (node 'dynamicquantizelinear39'), DynamicQuantizeLinear (node 'dynamicquantizelinear40'), DynamicQuantizeLinear (node 'dynamicquantizelinear41'), DynamicQuantizeLinear (node 'dynamicquantizelinear42'), SplitToSequence (node 'splittosequence21'), SplitToSequence (node 'splittosequence22'), SequenceAt (node 'sequenceat41'), SequenceAt (node 'sequenceat42'), SequenceAt (node 'sequenceat43'), SequenceAt (node 'sequenceat44'), DynamicQuantizeLinear (node 'dynamicquantizelinear43'), DynamicQuantizeLinear (node 'dynamicquantizelinear44'), DynamicQuantizeLinear (node 'dynamicquantizelinear45'), DynamicQuantizeLinear (node 'dynamicquantizelinear46'), SplitToSequence (node 'splittosequence23'), SplitToSequence (node 'splittosequence24'), SequenceAt (node 'sequenceat45'), SequenceAt (node 'sequenceat46'), SequenceAt (node 'sequenceat47'), SequenceAt (node 'sequenceat48'), DynamicQuantizeLinear (node 'dynamicquantizelinear47'), DynamicQuantizeLinear (node 'dynamicquantizelinear48'), DynamicQuantizeLinear (node 'dynamicquantizelinear49')
    not quantized build log
    ...
    DEBUG onnx_ir::pipeline:  PHASE 3: Type Inference
      ERROR burn_onnx::logger: PANIC => panicked at /home/louis/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/burn-onnx-0.21.0/src/model_gen.rs:349:33:
      Failed to parse ONNX file 'models/model.onnx': Type inference failed: Unsupported ONNX operation(s): SplitToSequence (node 'splittosequence1'), SplitToSequence (node 'splittosequence2'), SequenceAt (node 'sequenceat1'), SequenceAt (node 'sequenceat2'), SequenceAt (node 'sequenceat3'), SequenceAt (node 'sequenceat4'), SplitToSequence (node 'splittosequence3'), SplitToSequence (node 'splittosequence4'), SequenceAt (node 'sequenceat5'), SequenceAt (node 'sequenceat6'), SequenceAt (node 'sequenceat7'), SequenceAt (node 'sequenceat8'), SplitToSequence (node 'splittosequence5'), SplitToSequence (node 'splittosequence6'), SequenceAt (node 'sequenceat9'), SequenceAt (node 'sequenceat10'), SequenceAt (node 'sequenceat11'), SequenceAt (node 'sequenceat12'), SplitToSequence (node 'splittosequence7'), SplitToSequence (node 'splittosequence8'), SequenceAt (node 'sequenceat13'), SequenceAt (node 'sequenceat14'), SequenceAt (node 'sequenceat15'), SequenceAt (node 'sequenceat16'), SplitToSequence (node 'splittosequence9'), SplitToSequence (node 'splittosequence10'), SequenceAt (node 'sequenceat17'), SequenceAt (node 'sequenceat18'), SequenceAt (node 'sequenceat19'), SequenceAt (node 'sequenceat20'), SplitToSequence (node 'splittosequence11'), SplitToSequence (node 'splittosequence12'), SequenceAt (node 'sequenceat21'), SequenceAt (node 'sequenceat22'), SequenceAt (node 'sequenceat23'), SequenceAt (node 'sequenceat24'), SplitToSequence (node 'splittosequence13'), SplitToSequence (node 'splittosequence14'), SequenceAt (node 'sequenceat25'), SequenceAt (node 'sequenceat26'), SequenceAt (node 'sequenceat27'), SequenceAt (node 'sequenceat28'), SplitToSequence (node 'splittosequence15'), SplitToSequence (node 'splittosequence16'), SequenceAt (node 'sequenceat29'), SequenceAt (node 'sequenceat30'), SequenceAt (node 'sequenceat31'), SequenceAt (node 'sequenceat32'), SplitToSequence (node 'splittosequence17'), SplitToSequence (node 'splittosequence18'), SequenceAt (node 'sequenceat33'), SequenceAt (node 'sequenceat34'), SequenceAt (node 'sequenceat35'), SequenceAt (node 'sequenceat36'), SplitToSequence (node 'splittosequence19'), SplitToSequence (node 'splittosequence20'), SequenceAt (node 'sequenceat37'), SequenceAt (node 'sequenceat38'), SequenceAt (node 'sequenceat39'), SequenceAt (node 'sequenceat40'), SplitToSequence (node 'splittosequence21'), SplitToSequence (node 'splittosequence22'), SequenceAt (node 'sequenceat41'), SequenceAt (node 'sequenceat42'), SequenceAt (node 'sequenceat43'), SequenceAt (node 'sequenceat44'), SplitToSequence (node 'splittosequence23'), SplitToSequence (node 'splittosequence24'), SequenceAt (node 'sequenceat45'), SequenceAt (node 'sequenceat46'), SequenceAt (node 'sequenceat47'), SequenceAt (node 'sequenceat48')

    It seems that lack of some operators...

    I also tried to download .pth from facebook DINOv3 repo, and manually convert them into .onnx with this python script:

    python script to convert pth to onnx
    from functools import lru_cache
    from pathlib import Path
    import torch
    import os
    
    MODELS_DIR = "../models"
    
    
    @lru_cache(maxsize=1)
    def models() -> dict[str, Path]:
        return {
            key: Path(f"{root}/{file}")
            for root, _, files in os.walk(MODELS_DIR)
            for file in files
            if file.endswith(".pth") and (key := "_".join(file.split("_")[:2]))
        }
    
    
    def main():
        for model, path in models().items():
            convert(model, path)
    
    
    def convert(model: str, path: Path):
        torch_model = torch.hub.load(
            repo_or_dir="facebookresearch/dinov3",
            model=model,
            weights=str(path),
        )
        torch_model.eval()
        example_inputs = (
            torch.rand(1, 3, 256, 256, dtype=torch.float32, requires_grad=True),
        )
        torch_model(example_inputs[0])
        torch.onnx.export(
            torch_model,
            example_inputs,
            path.with_suffix(".onnx"),
            input_names=["input"],
            output_names=["output"],
            opset_version=20,
            dynamo=False, # dynamo is buggy when converting DINOv3, so disable it
            dynamic_axes={
                "input": {0: "batch_size"},
                "output": {0: "batch_size"},
            },
        )
    
    
    if __name__ == "__main__":
        main()

    pyproject.toml

    [project]
    name = "pth2onnx"
    version = "0.1.0"
    description = "Add your description here"
    readme = "README.md"
    requires-python = ">=3.14"
    dependencies = [
        "torch",
        "torchvision",
        "torchmetrics",
        "termcolor",
        "onnx",
        "onnxscript"
    ]
    
    [tool.uv.sources]
    torch = [
      { index = "pytorch-cpu" },
    ]
    torchvision = [
      { index = "pytorch-cpu" },
    ]
    torchmetrics = [
      { index = "pytorch-cpu" },
    ]
    
    [[tool.uv.index]]
    name = "pytorch-cpu"
    url = "https://download.pytorch.org/whl/cpu"
    explicit = true

    And loading in build.rs got:

    manually converted build log
    ...
    ERROR burn_onnx::logger: PANIC => panicked at /home/louis/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/burn-onnx-0.21.0/src/burn/node/expand.rs:37:26:
      Invalid shape source ScalarNative(I64)
  28. dericktseng commented on Jun 20, 2026

    @dericktseng

    PP-OCRv6 does not build.
    Model downloaded from here doesn't work.

    // build.rs
    use burn_onnx::ModelGen;
    
    const OUTPUT_DIR: &str = "models/";
    
    // the text detection model
    const DET_MODEL_PATH_ONNX: &str = "models/PP-OCRv6_medium_det_onnx/inference.onnx";
    
    // the text recognition model
    const REC_MODEL_PATH_ONNX: &str = "models/PP-OCRv6_medium_rec_onnx/inference.onnx";
    
    fn main() {
        for onnx_file in [DET_MODEL_PATH_ONNX, REC_MODEL_PATH_ONNX] {
            ModelGen::new()
                .input(onnx_file)
                .out_dir(OUTPUT_DIR)
                .load_strategy(burn_onnx::LoadStrategy::Embedded)
                .run_from_script();
        }
    }

    Error Message:

      ERROR burn_onnx::logger: PANIC => panicked at .cargo/registry/src/index.crates.io-1949cf8c6b5b557f/burn-onnx-0.21.0/src/burn/codegen.rs:237:18:
      auto_pad SAME_UPPER/SAME_LOWER requires static input shape, but input has dynamic dimensions. Use explicit pads instead
    
  29. MolotovCherry commented on Jul 31, 2026

    @MolotovCherry

    Tried this with waifu2x onnx models which can be downloaded from here:
    https://github.com/nagadomi/nunif/releases/tag/0.0.0

    And ran into

      ERROR burn_onnx::logger: PANIC => panicked at /home/cherry/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/burn-onnx-0.21.0/src/burn/node/pad.rs:22:17:
      Runtime pads are not supported in burn-onnx
    
      --- stderr
    
      thread 'main' (226314) panicked at /home/cherry/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/burn-onnx-0.21.0/src/burn/node/pad.rs:22:17:
      Runtime pads are not supported in burn-onnx
      note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    

    Used an initial test of this to do it

    use burn_onnx::ModelGen;
    
    fn main() {
        ModelGen::new()
            .input("models/cunet/art/noise0.onnx")
            .out_dir("model/")
            .run_from_script();
    }
  30. antimora commented on Aug 22, 2026

    @antimora
    CollaboratorAuthor

    Triaged the reports in this thread against main (438d2cd). Summary of where each one stands.

    Filed as new issues

    Model Issue Error
    DINOv3 #467 Invalid shape source ScalarNative(I64) in Expand codegen
    DINOv3 #469 SplitToSequence / SequenceAt unsupported
    PP-OCRv6 #468 auto_pad SAME_UPPER/SAME_LOWER requires static input shape

    Both #467 and #468 reproduce on main with a single-node graph, and each issue carries a short
    uv script that builds the model, so neither needs the original download to work on.

    @kingwingfly the quantized DINOv3 export additionally needs DynamicQuantizeLinear, tracked in #160,
    so the non-quantized export is the one to watch once #467 and #469 land.

    Already fixed on main, please re-test

    In each case the specific error reported no longer reproduces. I checked the failing path rather
    than the full model, so a re-test on main would be useful to confirm nothing else is behind it.

    All of these are on main and not in the released 0.21.0, which is what the reports were run against.

    Needs more detail

    @AdrianEddy you mentioned Yolo11x exported with dynamic=True fails to import, without the error
    text. If it is a auto_pad SAME_UPPER/SAME_LOWER requires static input shape panic then it is #468
    and will be covered by that fix. If it is something else it is worth its own issue. Could you post
    the panic message?

    Also updated the checklist above: Retinaface and Resnet were both confirmed working in this thread
    but never checked off, and DINOv3 and PP-OCRv6 are added with links to the issues above.

  31. antimora commented on Sep 22, 2026

    @antimora
    CollaboratorAuthor

    Retriaged against main (a3b8dc0, burn rev faec3983). Last pass was a month ago against 438d2cd.

    Everything below was re-run, not read off issue state. Two levels of evidence: converts means
    onnx2burn produced Rust, compiles means that Rust was then cargo checked against
    burn 0.22.0-pre.3. Neither means the output matches onnxruntime; that still needs a model-check.

    Unblocked since the last pass

    Model Blocker it was filed under Now
    PP-OCRv6 det + rec #468 auto_pad SAME_* on dynamic H/W converts + compiles
    XFeat burn#3110 TopK scalar input, then ScatterND converts + compiles
    Piiranha burn#2968 Squeeze converts + compiles
    dpt-dinov2-small-kitti burn#2592 Expand w/ dynamic shape converts + compiles
    waifu2x cunet/art/noise0 runtime pads converts + compiles
    SDXL vae_encoder Slice: steps other than 1 converts + compiles
    SAM-2 hiera_tiny encoder n-d Pad converts + compiles

    @dericktseng PP-OCRv6 was the concrete win: #478 landed the PaddingConfig2d::Same lowering, and both
    PP-OCRv6_medium_det_onnx and PP-OCRv6_medium_rec_onnx now go straight through from the
    HuggingFace download with no re-export.

    @MolotovCherry waifu2x imports now. I used the 20230504 model zip, cunet/art/noise0.onnx.

    dpt-dinov2-small-kitti no longer needs the opset-16 upgrade step that
    burn#2592 ended on. The onnx-community export
    imports as published, which is the opset-compliance work paying off.

    None of these seven are checked off above, because "converts + compiles" is not "runs and matches".
    Checking a box needs a model-check under crates/model-checks/.

    Still blocked

    DINOv3 is unchanged, and all three exports fail differently:

    Export Result
    onnx-community/dinov3-vits16-...-ONNX #469, SplitToSequence + SequenceAt, 72 nodes
    onnx-community/...-ONNX-MHA com.microsoft::MultiHeadAttention x12, a contrib op, not standard ONNX
    manual torch.onnx.export from the .pth rank-0 Expand shape input

    @kingwingfly on the third one: #470 turned that panic into a real error message, but it is not a
    burn-onnx bug. ONNX requires Expand's shape to be 1-D and onnxruntime rejects that graph too, so
    the export itself is out of spec. #469 is the one to watch for the onnx-community export. The
    quantized variant additionally needs #160.

    piper-tts / VITS (@madushan1000) has moved but is not fixed. I asked you to re-test last month;
    I did it instead, on en_US-lessac-medium. It converts now, so #266 and the runtime padding really
    are behind us, but the generated Rust does not compile: 17 errors in two families. Both reduce to
    small graphs, both turned out to be bigger than piper, and both are now filed.

    1. Add/Sub/Mul/Div do not rank-lift a Shape operand, emitting a rank mismatch #534. Add/Sub/Mul/Div do not rank-lift a Shape operand. The Shape is materialized as a
      rank-1 tensor and passed straight to .add(..), which in burn needs matching ranks:

      let add108_out1 = add107_out1                                  // Tensor<4, Int>
          .add(Tensor::<1, burn::tensor::Int>::from_data(...));      // expected 4, found 1

      leading_broadcast already exists and is applied in the tensor-vs-tensor arm of the same
      match, just not in the Shape arms. 8 sites across the four ops. A three-node
      Shape -> Gather -> Add graph reproduces it.

    2. Range is incorrect for float element types: static bounds truncated to i64 and codegen does not compile #533. Range is broken for every float range, not just piper's. One node reproduces it:
      Range(1.5, 5.0, 1.0) should give [1.5, 2.5, 3.5, 4.5] and we generate [1, 2, 3, 4],
      because RangeInput::Static holds an i64 and is filled through scalar_i64(), whose F32
      arm is a bare as i64. The same graph also fails to build, because arange().cast(dtype)
      changes the dtype but not the tensor Kind, so a float range stays Tensor<1, Int>. There is no
      float case in crates/onnx-tests/tests/range/ and no float snapshot in range.rs, which is how
      both got this far. piper hits a third face of it: a runtime float limit against static i64
      bounds gives f32 - i64.

      This one is worth flagging beyond piper, since the truncation is silent and wrong rather than a
      build failure.

    GMFlow was never re-tested. Its BatchNorm blocker (#20) was fixed by #53 back in January. The
    checklist entry still carries a link labelled #1560 that points at the closed #20, which is why it
    reads as blocked. I could not re-run it because the model is only on Google Drive. @AdrianEddy if
    you still have it, it is worth one try.

    IBM Granite 4.0 Tiny Preview has no public ONNX export at all, only GGUF, so there is nothing to
    import. models#71 is really a request for someone
    to produce an export first.

    NVIDIA FastConformer (@LexiconCode) still needs your re-test. I have no way to fetch that model.

    Two more codegen defects found while doing this

    Both are pre-existing and neither blocks a model, but they show up in every model that hits the path.

    1. Codegen emits deprecated TensorData::into_vec #535. Generated code calls TensorData::into_vec::<i64>(), which burn deprecated in 0.22.0 in favour of
      try_into_vec::<E>(). 12 emit sites across codegen.rs, pad.rs, tile.rs, squeeze.rs and
      unsqueeze.rs. It is already firing in our own suite: pad_runtime_axes, pad_runtime_pads,
      pad_runtime_pads_axes and unsqueeze_runtime_axes all warn on build. onnx-tests/build.rs
      already uses try_into_vec for its own code, so only codegen is behind.
    2. TopK binds both outputs even when the graph consumes one, so XFeat builds with
      unused variable: topk1_out1. Same family as avg_pool1d/avg_pool2d ONNX models declare unused inputs x1, x2 #68, folded in there rather than filed separately.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions