# Models
### Register model
Datumaro can execute deep learning models in various frameworks. Check
[the plugins section](/docs/user-manual/extending/#builtin-plugins)
for more info.
Supported frameworks:
- OpenVINO
- Custom models via custom `launchers`
Models need to be added to the Datumaro project first. It can be done with
the `datum model add` command.
Usage:
``` bash
datum model add [-h] [-n NAME] -l LAUNCHER [--copy] [--no-check]
[-p PROJECT_DIR] [-- EXTRA_ARGS]
```
Parameters:
- `-l, --launcher` (string) - Model launcher name
- `--copy` - Copy model data into project. By default, only the link is saved.
- `--no-check` - Don't check the model can be loaded
- `-n`, `--name` (string) - Name of the new model (default: generate
automatically)
- `-p, --project` (string) - Directory of the project to operate on
(default: current directory).
- `-h, --help` - Print the help message and exit.
- `` - Additional arguments for the model launcher
(use `-- -h` for help). Must be specified after the main command arguments.
Example: register an OpenVINO model
A model consists of a graph description and weights. There is also a script
used to convert model outputs to internal data structures.
``` bash
datum create
datum model add \
-n -l openvino -- \
-d -w -i
```
Interpretation script for an OpenVINO detection model (`convert.py`):
You can find OpenVINO model interpreter samples in
`datumaro/plugins/openvino/samples` ([instruction](/docs/plugins/openvino_plugin)).
``` python
from datumaro.components.extractor import *
max_det = 10
conf_thresh = 0.1
def process_outputs(inputs, outputs):
# inputs = model input, array or images, shape = (N, C, H, W)
# outputs = model output, shape = (N, 1, K, 7)
# results = conversion result, [ [ Annotation, ... ], ... ]
results = []
for input, output in zip(inputs, outputs):
input_height, input_width = input.shape[:2]
detections = output[0]
image_results = []
for i, det in enumerate(detections):
label = int(det[1])
conf = float(det[2])
if conf <= conf_thresh:
continue
x = max(int(det[3] * input_width), 0)
y = max(int(det[4] * input_height), 0)
w = min(int(det[5] * input_width - x), input_width)
h = min(int(det[6] * input_height - y), input_height)
image_results.append(Bbox(x, y, w, h,
label=label, attributes={'score': conf} ))
results.append(image_results[:max_det])
return results
def get_categories():
# Optionally, provide output categories - label map etc.
# Example:
label_categories = LabelCategories()
label_categories.add('person')
label_categories.add('car')
return { AnnotationType.label: label_categories }
```
### Remove Models
To remove a model from a project, use the `datum model remove` command.
Usage:
``` bash
datum model remove [-h] [-p PROJECT_DIR] name
```
Parameters:
- `` (string) - The name of the model to be removed
- `-p, --project` (string) - Directory of the project to operate on
(default: current directory).
- `-h, --help` - Print the help message and exit.
Example:
``` bash
datum create
datum model add <...> -n model1
datum remove model1
```
### Run Model
This command applies model to dataset images and produces a new dataset.
Usage:
``` bash
datum model run
```
Parameters:
- `` (string) - A project build target to be used.
By default, uses the combined `project` target.
- `-m, --model` (string) - Model name
- `-o, --output-dir` (string) - Output directory. By default, results will
be stored in an auto-generated directory in the current directory.
- `--overwrite` - Allows to overwrite existing files in the output directory,
when it is specified and is not empty.
- `-p, --project` (string) - Directory of the project to operate on
(default: current directory).
- `-h, --help` - Print the help message and exit.
Example: launch inference on a dataset
``` bash
datum create
datum import <...>
datum model add mymodel <...>
datum model run -m mymodel -o inference
```