> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.ovalbee.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.ovalbee.com/_mcp/server.

# Export DEIM

> Convert a trained DEIM checkpoint to PyTorch, ONNX and TensorRT and attach every format to the model it came from.

Runs on: gpu  Dockerfile

> **Note**
>
> First run can take longer while the worker pulls the configured Docker image.

## Overview

Converts a trained DEIM checkpoint into every format its checkboxes tick and attaches each one to the model version the weights came from.

The exports stay on that version, and the model page lists them for download. A format already exported from the same checkpoint at the same precision is reused instead of converted again.

```mermaid
flowchart LR
  n1["Train DEIM"] --> n2["Export DEIM"] --> n3["Exported model files"]
```

## Prerequisites

| Requirement         | What you need                                                                                                                                                                                                                    |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **DEIM checkpoint** | A DEIM model version with weights of its own, e.g. one from [Train DEIM](/node-library/nodes/models-deim-train-deim). A model copied from the catalog has no file to convert, because its public weights are downloaded by name. |
| **Training config** | The DEIM config the checkpoint was trained with. Training stores it on the model asset, so a separate config asset is only needed when that copy is missing.                                                                     |
| **NVIDIA GPU**      | A GPU worker with a working NVIDIA runtime. The node requests one for every run, and TensorRT compiles the engine on it.                                                                                                         |

## How it works

Checks each ticked format against the exports already on the model version and skips the ones built from the same checkpoint at the same precision.

Downloads the checkpoint and, for ONNX or TensorRT, the DEIM config it was trained with.

Rebuilds the model together with its postprocessor, so the exported graph returns labels, boxes, and scores directly instead of raw tensors, then traces it to ONNX at the input size recorded in the config.

Builds the TensorRT engine from that same ONNX graph when its checkbox is ticked, so asking for both costs one trace.

Attaches every produced file, and the class list, to the source model version.

## FAQ

#### Does the export replace the trained model?

No. Each export is another file on the version it came from, so one checkpoint can carry its PyTorch, ONNX, and TensorRT exports side by side while the weights stay untouched.

#### Why tick several formats in one run instead of one node each?

The TensorRT engine is built from an intermediate ONNX graph. Ticking both in one run traces the model once and reuses that graph, where two separate runs would trace it twice.

#### What input size does the exported model expect?

The evaluation size from the training config, which is 640 by 640 unless training changed it. The batch dimension is dynamic, so the same file serves any batch size.

#### When do I need to fill Config ID?

Only when the model asset carries no config, which happens for checkpoints that reached OvalBee outside the training node. Otherwise leave it empty and the stored config is used.

#### Should I change the ONNX opset?

Only when your runtime rejects the default. A lower opset can widen compatibility with older runtimes, at the cost of failing when the model uses a newer operator.

#### What does the export folder contain besides the model file?

A `classes.txt` listing one class per line, so line N names the class the graph reports as index N. It is copied from the version, which is the index space the model was trained on, and the checkpoint answers only when the version records none.

#### Why does the run warn about ONNX validation?

The file was written but the structural check did not pass or could not run. The export still finishes, so treat the warning as a signal to test the file before deploying it.

## Inputs

**`Model`** `model` — required

Model whose checkpoint is exported, e.g. a version trained in this workspace. A model copied from the catalog hosts no weights of its own and has nothing to export, so train from it first. Key: `MODEL`.

---

**`Export to PyTorch`** `boolean` — required, default: false

Attach the checkpoint itself as a PyTorch export. Key: `EXPORT_PYTORCH`.

---

**`Export to ONNX`** `boolean` — required, default: false

Trace the checkpoint to an ONNX graph. Key: `EXPORT_ONNX`.

---

**`Export to TensorRT`** `boolean` — required, default: false

Build a TensorRT engine. It is cut from an intermediate ONNX graph, so ticking ONNX as well costs one trace rather than two. Key: `EXPORT_TENSORRT`.

---

**`Config ID`** `string`

ID of a DEIM config asset to export with. Leave empty to use the config stored with the model's checkpoint. Key: `CONFIG_ID`.

---

**`ONNX opset`** `integer` — required, default: 17

Version of the ONNX operator set the exported graph targets. Lower it when the runtime you deploy to cannot read the default. Minimum: `11`. Key: `OPSET`.

---

**`TensorRT FP16`** `boolean` — required, default: false

Builds the engine with half-precision weights, which run faster and use less GPU memory at a small cost in accuracy. Key: `TRT_FP16`.

---

## Outputs

**`Exported formats`** `string`

Format keys this run produced, comma separated. Read by the download widget. Hidden from the flow editor. Key: `EXPORT_FORMATS`.

---

**`Model`** `model`

The model that was exported, as `&lt;model id&gt;@&lt;version id&gt;` - the same reference this node was given. An export is another file on that version, not a version of its own, so this output wires on to anything the input accepts. Shown as an artifact. Key: `MODEL`.

---

## Widgets

The model download widget downloads what this run produced: a single file when the run produced exactly one, and a zip of every ticked format, class lists included, when it produced more. The model version page lists the same files one by one.

## Runtime

The export runs in the DEIM Docker image on a GPU worker. Every run checks that the GPU it was given works before it downloads anything, and stops if it does not, so a broken worker fails in seconds instead of converting on the CPU at the GPU price.

## JSON config

Machine-readable node interface for automation and advanced usage.

#### Show JSON

```json
{
  "name": "Export DEIM",
  "description": "Convert a trained DEIM checkpoint to PyTorch, ONNX and TensorRT and attach every format to the model it came from.",
  "category": "Models",
  "namespace": "ovalbee",
  "templateKey": "models/deim/export_deim",
  "version": "v1",
  "inputs": [
    {
      "key": "MODEL",
      "label": "Model",
      "type": "model",
      "description": "Model whose checkpoint is exported, e.g. a version trained in this workspace. A model copied from the catalog hosts no weights of its own and has nothing to export, so train from it first.\n",
      "required": true,
      "default": null,
      "visibleWhen": null,
      "options": {
        "framework": "deim",
        "task_type": "object_detection"
      }
    },
    {
      "key": "EXPORT_PYTORCH",
      "label": "Export to PyTorch",
      "type": "boolean",
      "description": "Attach the checkpoint itself as a PyTorch export.",
      "required": true,
      "default": false,
      "visibleWhen": null
    },
    {
      "key": "EXPORT_ONNX",
      "label": "Export to ONNX",
      "type": "boolean",
      "description": "Trace the checkpoint to an ONNX graph.",
      "required": true,
      "default": false,
      "visibleWhen": null
    },
    {
      "key": "EXPORT_TENSORRT",
      "label": "Export to TensorRT",
      "type": "boolean",
      "description": "Build a TensorRT engine. It is cut from an intermediate ONNX graph, so ticking ONNX as well costs one trace rather than two.",
      "required": true,
      "default": false,
      "visibleWhen": null
    },
    {
      "key": "CONFIG_ID",
      "label": "Config ID",
      "type": "string",
      "description": "ID of a DEIM config asset to export with. Leave empty to use the config stored with the model's checkpoint.",
      "required": false,
      "default": null,
      "visibleWhen": null
    },
    {
      "key": "OPSET",
      "label": "ONNX opset",
      "type": "number",
      "description": "Version of the ONNX operator set the exported graph targets. Lower it when the runtime you deploy to cannot read the default.",
      "required": true,
      "default": 17,
      "visibleWhen": null,
      "options": {
        "type": "integer",
        "min": 11
      }
    },
    {
      "key": "TRT_FP16",
      "label": "TensorRT FP16",
      "type": "boolean",
      "description": "Builds the engine with half-precision weights, which run faster and use less GPU memory at a small cost in accuracy.",
      "required": true,
      "default": false,
      "visibleWhen": null
    }
  ],
  "outputs": [
    {
      "key": "EXPORT_FORMATS",
      "label": "Exported formats",
      "type": "string",
      "description": "Format keys this run produced, comma separated. Read by the download widget.",
      "artifact": false,
      "badge": false,
      "badgeOpens": null,
      "hidden": true
    },
    {
      "key": "MODEL",
      "label": "Model",
      "type": "model",
      "description": "The model that was exported, as `<model id>@<version id>` - the same reference this node was given. An export is another file on that version, not a version of its own, so this output wires on to anything the input accepts.\n",
      "artifact": true,
      "badge": false,
      "badgeOpens": null,
      "hidden": false
    }
  ],
  "runtime": {
    "type": "docker",
    "devices": [
      "gpu"
    ],
    "dockerImage": "ovalbee/node-deim:0.0.24"
  },
  "widgets": {
    "widget": {
      "id": "model-download",
      "settings": {
        "assetId": {
          "type": "variable",
          "value": "self.outputs.MODEL"
        },
        "format": {
          "type": "variable",
          "value": "self.outputs.EXPORT_FORMATS"
        }
      }
    }
  }
}
```