litert-models / docs /USAGE.en.md
unicorn who dev
Refresh bilingual documentation, model evidence and continued-learning guides
bdcd483 verified
|
Raw History Blame Contribute Delete
6.75 kB
# Using the conversions
[Français](USAGE.md) · [English](USAGE.en.md)
## Application update — 23 September 2026
Vision Dataset Studio rc5 uses LiteRT 1.4.2 with rebuilt Flex **2.16.1-vds16k1**. Its 4/16 KB core tests are separate from the older per-model campaign and the standalone SDK; they do not qualify every conversion or the entire APK for 16 KB pages. [Runtime details](https://github.com/unicornwhodev/vision-dataset-studio/blob/65e4620/docs/FLEX_16K.md).
The original model is retained. First training creates a separate learned version, and later runs continue its latest validated weights even before inference activation. [Versions and checkpoints](CONTINUOUS_LEARNING.en.md).
## 1. Choose the exact variant
Use the [qualification matrix](BENCHMARKS.en.md). An inference graph and its `_learning` counterpart are separate artifacts. Multi-graph bundles require all graphs and processor/tokenizer files described in `pipeline.json`; do not rename one component to pretend it is a complete model. Downloaded weights are separate from the app APK.
## 2. Pin and verify
Use Python 3.11+ and `huggingface_hub`. Authenticate with `hf auth login` only if access is required; never paste credentials into source code, documentation or a command committed to Git. Select the immutable revision, then verify every manifest entry before loading:
```python
from huggingface_hub import snapshot_download
snapshot_download(
repo_id="fireviewer/litert-models",
revision="330e9097409042751988e9fa5994b51ac2b577bc",
allow_patterns=["models/fireviewer_dfine_m_strict_v1_learning/*"],
local_dir="model-checkout",
)
```
The following check uses the folder downloaded above.
```python
from pathlib import Path
import hashlib, json
folder = Path("model-checkout/models/fireviewer_dfine_m_strict_v1_learning") # choose the downloaded folder
for name, expected in json.loads((folder / "artifact_manifest.json").read_text(encoding="utf-8")).items():
path = (folder / name).resolve()
assert path.is_relative_to(folder.resolve())
assert path.stat().st_size == expected["bytes"]
with path.open("rb") as stream:
assert hashlib.file_digest(stream, "sha256").hexdigest() == expected["sha256"]
```
The manifest also includes configuration files; preserve their bytes. A different revision or weight hash requires requalification. Upstream licences, notices and usage restrictions remain independent of the application’s Apache-2.0 licence.
## 3. Apply the supplied contract
Read the variant’s `runtime_contract.json` and `android_model_config.json` when present; older/bundled variants use `config.json`, `pipeline.json` and their conversion report. Respect tensor dtype/layout, RGB/BGR order, normalization, shape bounds/stride, label order and output decoder. Do not apply one family’s preprocessing to another. Resize masks with nearest-neighbour; map detections back to the original image and retain coordinate transforms. Dynamic external image dimensions may still feed a fixed frozen backbone through graph resizing.
In Vision Dataset Studio, open **Models**, configure the authorized HF source, download/import the chosen variant and contract, then inspect and run one image before batch preannotation. Manual annotation/export work without a model. Adapters existing in code do not establish compatibility for untested variants.
## 4. Runtime and learning
The converter/standalone SDK uses `org.tensorflow:tensorflow-lite:2.16.1` and `org.tensorflow:tensorflow-lite-select-tf-ops:2.16.1`. The app campaign separately used LiteRT 1.4.2 + Select TF Ops 2.16.1. These are distinct tested environments, not interchangeable guarantees. CPU, XNNPACK disabled for the learning graph, Flex/Select TF Ops for checkpoint save/restore. GPU/NPU and physical ARM remain unqualified here.
Learning requires the actual `train`, `infer`, `save`, `restore` signatures and the exact input/output names from the contract. Targets follow its `targetEncoding`, shape and labels; a missing annotation is not a negative example. Text training inputs are not supported by the current app. Heads/adapters are mutable; all supplied visual backbones remain frozen. Detection adapters cannot create proposals missing from the frozen detector. Changing the class count requires rebuilding the head.
## 5. Batch lifecycle in the app
Import → preannotate when enabled → manually correct/review → export and verify readback → optional learning on that exported batch → confirm cleanup → next batch. Learning is off by default and runs on Android. It uses accepted examples from this batch only; rejected/other-batch examples are excluded. Cleanup waits for learning and evaluation to finish; interruption/failure retains the data. Candidate weights require manual activation.
Checkpoints preserve parameters, optimizer momentum and step; keep compatible model/label hashes, dataset provenance and replay/held-out examples separately. Restored state does not prove generalization. The app requires at least 32 training and 8 validation images after its deterministic split. Persistent project fingerprints survive cleanup and reject exact file/pixel copies, but not arbitrary edited near-duplicates.
## 6. Reproduce Android integration checks
Use the [application QA tools](https://github.com/unicornwhodev/vision-dataset-studio/tree/65e4620/tools/qa) on a dedicated device with verified app and test APKs. `fetch_model_fixtures.py` downloads pinned fixtures outside the APK and verifies manifests. `qualify_converted_models.py` executes one conversion at a time and records its build, hashes and raw Android verdict. Use `--help` to supply explicit model/evidence paths and device serial. The consent variable is `VDS_ALLOW_TEST_INSTALL=1`; these scripts are QA tools, not automatic training on a user corpus. Keep failed and timed-out cases. No host optimizer is used in this app test path.
## Troubleshooting
- Hash mismatch: stop; verify revision and re-download the affected file.
- Missing Flex/Save/Restore op: check the exact CPU runtime pair and signatures.
- Tensor/stride mismatch: inspect the conversion’s shapes and decoder; the inference-only RTMDet app defect was fixed and its 22 September retest passed.
- Nonfinite loss or incompatible checkpoint: retain data and restore a previously verified compatible generation.
- Slow software emulator: functional evidence only; do not infer phone speed.
See [results and limitations](BENCHMARKS.en.md) before deploying a conversion.
[FireViewer Kotlin SDK / SDK Kotlin FireViewer](../android/README.md) includes detector target construction and DINOv3 four-task supervision. Its standalone test is separate from application integration.