Model¶
- class audonnx.Model(path, *, labels=None, transform=None, device='cpu', num_workers=1, session_options=None)[source]¶
Model with multiple input and output nodes.
For input nodes an optional transform can be given that transforms the input into the desired representation, otherwise the raw input is used. Use dictionary to assign transform objects to specific nodes if model has multiple input nodes.
For output nodes an optional list of labels can be given to assign names to the last non-dynamic dimension. E.g. if the shape of the output node is
(1, 3, -1)three labels can be assigned to the second dimension. By default, labels are generated from the name of the node. Use dictionary to assign labels to specific nodes if model has multiple output nodes.Modelinherites fromaudobject.Object, which means you can serialize to and instantiate the class from a YAML file. Have a look ataudobject.Objectto see all available methods.- Parameters
path (
str|ModelProto) – ONNX proto object or path to ONNX filelabels (
Union[Sequence[str],dict[str,Optional[Sequence[str]]],None]) – list of labels or dictionary with labelstransform (
Union[Callable[[ndarray,int],ndarray],Function,dict[str,Callable[[ndarray,int],ndarray] |Function],None]) – callable object or a dictionary of callable objectsdevice (
str|tuple[str,dict] |Sequence[str|tuple[str,dict]]) – set device ('cpu','cuda', or'cuda:<id>') or a (list of) provider(s)num_workers (
Optional[int]) – number of threads for running onnxruntime inference on cpu. IfNoneandsession_optionsisNone, onnxruntime chooses the number of threadssession_options (
Optional[SessionOptions]) –onnxruntime.SessionOptionsto use for inference. IfNonethe default options are used and the number of threads for running inference on cpu is determined bynum_workers. Otherwise, the provided options are used and thesession_optionspropertiesinter_op_num_threadsandintra_op_num_threadsdetermine the number of threads for inference on cpu andnum_workersis ignored
Examples
>>> import audiofile >>> import opensmile >>> transform = opensmile.Smile( ... opensmile.FeatureSet.GeMAPSv01b, ... opensmile.FeatureLevel.LowLevelDescriptors, ... ) >>> path = os.path.join("tests", "model.onnx") >>> model = Model( ... path, ... labels=["female", "male"], ... transform=transform, ... ) >>> model Input: feature: shape: [18, -1] dtype: tensor(float) transform: opensmile.core.smile.Smile Output: gender: shape: [2] dtype: tensor(float) labels: [female, male] >>> path = os.path.join("tests", "test.wav") >>> signal, sampling_rate = audiofile.read(path) >>> model( ... signal, ... sampling_rate, ... outputs="gender", ... ).round(1) array([-195.1, 73.3], dtype=float32)
__call__()¶
- Model.__call__(inputs, sampling_rate=None, *, outputs=None, concat=False, squeeze=False)[source]¶
Compute output for one or more nodes.
If
inputsis anumpy.ndarray, it is treated as the input signal.If
inputsis a dictionary, the dictionary entries correspond to the input names and input values, and the argument names and values for input transformation.If
outputsis a plain string, the output of the according node is returned.If
outputsis a list of strings, a dictionary with according nodes as keys and their outputs as values is returned.If
outputsis not set and the model has a single output node, the output of that node is returned. Otherwise a dictionary with outputs of all nodes is returned.If
concatis set toTrue, the output of the requested nodes is concatenated along the last non-dynamic axis and a single array is returned. This requires that the number of dimensions, the position of dynamic axis, and all dimensions except the last non-dynamic axis match for the requested nodesUse
audonnx.Model.outputsto get a list of available output nodes.- Parameters
inputs (
ndarray|dict[str,object]) – model input signal or dictionary with multiple inputsoutputs (
Union[str,Sequence[str],None]) – name of output or list with output namesconcat (
bool) – ifTrue, concatenate output of the requested nodessqueeze (
bool) – ifTrue, remove axes of length one from the output(s)
- Return type
- Returns
model output
- Raises
RuntimeError – if
concatisTrue, but output of requested nodes cannot be concatenatedValueError – if a required model input is missing
arguments¶
- Model.arguments¶
Returns arguments that are serialized.
- Returns
Dictionary of arguments and their values.
- Raises
RuntimeError – if arguments are found that are not assigned to attributes of the same name
Examples
>>> import audobject.testing >>> o = audobject.testing.TestObject("test", point=(1, 1)) >>> o.arguments {'name': 'test', 'point': (1, 1)}
borrowed_arguments¶
- Model.borrowed_arguments¶
Returns borrowed arguments.
- Returns
Dictionary with borrowed arguments.
id¶
- Model.id¶
Object identifier.
The ID of an object ID is created from its non-hidden arguments.
- Returns
object identifier
Examples
>>> class Foo(Object): ... def __init__(self, bar: str): ... self.bar = bar >>> foo1 = Foo("I am unique!") >>> foo1.id '893df240-babe-d796-cdf1-c436171b7a96' >>> foo2 = Foo("I am different!") >>> foo2.id '9303f2a5-bfc9-e5ff-0ffa-a9846e2d2190' >>> foo3 = Foo("I am unique!") >>> foo1.id == foo3.id True
is_loaded_from_dict¶
- Model.is_loaded_from_dict¶
Check if object was loaded from a dictionary.
Returns
Trueif object was initialized from a dictionary, e.g. after loading it from a YAML file.- Returns
Trueif object was loaded from a dictionary,otherwise
False
labels()¶
short_id¶
- Model.short_id¶
Short object identifier.
The short ID consists of eight characters and is created from its non-hidden arguments.
- Returns
short object identifier
Examples
>>> class Foo(Object): ... def __init__(self, bar: str): ... self.bar = bar >>> foo1 = Foo("I am unique!") >>> foo1.id '893df240-babe-d796-cdf1-c436171b7a96' >>> foo1.short_id '171b7a96' >>> foo2 = Foo("I am different!") >>> foo2.short_id '6e2d2190' >>> foo3 = Foo("I am unique!") >>> foo1.short_id == foo3.short_id True
to_dict()¶
- Model.to_dict(*, include_version=True, flatten=False, root=None)¶
Converts object to a dictionary.
Includes items from
audobject.Object.arguments. If an argument has a resolver, its value is encoded. Usually, the object can be re-instantiated usingaudobject.Object.from_dict(). However, ifflatten=True, this is not possible.- Parameters
- Return type
Mapping[str,Union[bool,datetime,dict,float,int,list,None,str]]- Returns
dictionary that represent the object
Examples
>>> import audobject.testing >>> o = audobject.testing.TestObject("test", point=(1, 1)) >>> o.to_dict(include_version=False) {'$audobject.core.testing.TestObject': {'name': 'test', 'point': [1, 1]}} >>> o.to_dict(flatten=True) {'name': 'test', 'point.0': 1, 'point.1': 1}
to_yaml()¶
- Model.to_yaml(path, *, include_version=True)[source]¶
Save model to YAML file.
If ONNX model was loaded from a byte stream, it will be saved in addition to the YAML file under the same path with file extension
.onnx.- Parameters
- Raises
ValueError – if file path does not end on
.yaml