Metadata-Version: 2.4
Name: deepview-converter
Version: 3.0.4
Summary: DeepViewRT Converter
Project-URL: Changelog, https://pypi.org/project/deepview-converter/#changelog
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE.txt
Requires-Dist: deepview-rt>=2.6.3
Requires-Dist: networkx==3.1
Requires-Dist: flatbuffers==25.9.23
Requires-Dist: pillow==10.4.0
Requires-Dist: protobuf==3.20.3
Dynamic: license-file

# DeepView Converter

`deepview-converter` is the model compiler for the
[DeepViewRT](https://pypi.org/project/deepview-rt/) inference engine. It takes a
trained model from a common training framework and produces a `.rtm` model —
the native format DeepViewRT loads to run inference on the edge.

The converter imports the source model, runs a graph optimization pass, and
exports an RTM model with an embedded memory map so the runtime can execute it
with a fixed, pre-planned allocation.

## Supported inputs

| Format     | Extension / layout             | Notes                                           |
| ---------- | ------------------------------ | ----------------------------------------------- |
| TFLite     | `.tflite`                      | Must already be quantized to convert quantized  |
| ONNX       | `.onnx`                        |                                                 |
| TensorFlow | `.pb`, SavedModel, Keras `.h5` | Can be quantized at convert time (`--quantize`) |

The output is always a DeepViewRT `.rtm` model.

## Installation

```shell
pip install deepview-converter
```

This pulls in the matching `deepview-rt` runtime as a dependency.

## Usage

The package installs the `rtm-converter` console script (equivalently
`python -m deepview_rtm`):

```shell
# Basic conversion
rtm-converter model.onnx model.rtm

# Quantize a float TensorFlow/Keras model using calibration samples
rtm-converter model.h5 model.rtm --quantize --samples ./calibration_images

# Constrain the converted graph to a subgraph by I/O layer names
rtm-converter model.tflite model.rtm \
    --input-names input_0 --output-names logits
```

Run `rtm-converter --help` for the full set of options, including
quantization mode (`--quant-channel` / `--quant-tensor`), input/output data
types, custom user-op handlers, and optimizer controls
(`--skip-optimizations`).

Set `DEEPVIEW_CONVERTER_DEBUG=1` to print a full traceback when a conversion
fails.

## Testing

```shell
pip install pytest pytest-html
python -m pytest --html=tests/report.html -s --capture=tee-sys --self-contained-html
```

The HTML report is written to `tests/report.html`.

# <a id="changelog"></a>Changelog

## [3.0.4] - 2026-06-05

### Changed

- The changelog is now appended to the package long description, so it renders
  directly on the PyPI project page instead of linking out to the release
  history, and the `Changelog` project link anchors to it.

## [3.0.3] - 2026-06-05

### Fixed

- **GRU / recurrent models converted with `--copy_layers` now match the source
  model.** Stateful models exported through the TFLite importer produced
  incorrect outputs: the update-gate constant in the GRU's `1 - z` was emitted
  as a scalar, but the DeepViewRT runtime cannot broadcast a scalar against an
  `[N, C]` operand for non-commutative ops and effectively computed `z - 1`,
  negating the recurrent state (the error then compounded across timesteps via
  the copied-back state). The converter now materializes such constants to the
  operand shape, restoring parity with the 2.4.x converter line. Runtime-safe
  broadcasts (equal-shape, per-row, per-channel) are left untouched, so
  per-channel convolution biases are not expanded, and the behaviour can be
  disabled with `--skip-optimizations broadcast_const`.
- **ONNX models whose NCHW convolution chain starts at a non-`external` node now
  convert correctly.** When a conv chain's input was a non-external node — for
  example a `Concat` produced by inline buffer rolling — no entry transpose was
  inserted, so the convolution read its input in the wrong memory layout and
  produced corrupted output. NCHW→NHWC entry transposes are now inserted for
  non-external 4D inputs, mirroring the existing exit-transpose handling.

## [3.0.2] - 2025-11-18

### Added

- Broader ONNX operator coverage and handling for rank-3 models.

### Fixed

- GEMM biases could be overwritten during conversion.

## [3.0.1] - 2025-10-03

### Fixed

- Declared runtime dependencies that were missing from the initial 3.0.0
  packaging.

## [3.0.0] - 2025-10-01

### Removed

- The plugin system for targeting non-RTM model formats. The converter now
  focuses exclusively on compiling models to the DeepViewRT `.rtm` format.

### Changed

- Merged the separate `deepview-converter-rtm` plugin directly into the
  `deepview-converter` repository, so the converter ships as a single
  self-contained package rather than a host plus plugin.

### Added

- Distribution on PyPI (`pip install deepview-converter`) with the
  `rtm-converter` console script.
