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 raw signal into the desired representation, otherwise the raw signal is used as input. 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.Model
inherites fromaudobject.Object
, which means you can serialize to and instantiate the class from a YAML file. Have a look ataudobject.Object
to see all available methods.- Parameters
path (
Union
[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
],Dict
[str
,Optional
[Callable
[[ndarray
,int
],ndarray
]]],None
]) – callable object or a dictionary of callable objectsdevice (
Union
[str
,Tuple
[str
,Dict
],Sequence
[Union
[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. IfNone
andsession_options
isNone
, onnxruntime chooses the number of threadssession_options (
Optional
[SessionOptions
]) –onnxruntime.SessionOptions
to use for inference. IfNone
the 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_options
propertiesinter_op_num_threads
andintra_op_num_threads
determine the number of threads for inference on cpu andnum_workers
is 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__(signal, sampling_rate, *, outputs=None, concat=False, squeeze=False)[source]¶
Compute output for one or more nodes.
If
outputs
is a plain string, the output of the according node is returned.If
outputs
is a list of strings, a dictionary with according nodes as keys and their outputs as values is returned.If
outputs
is 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
concat
is 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.outputs
to get a list of available output nodes.- Parameters
- Return type
- Returns
model output
- Raises
RuntimeError – if
concat
isTrue
, but output of requested nodes cannot be concatenated
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
True
if object was initialized from a dictionary, e.g. after loading it from a YAML file.- Returns
True
if 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
Dict
[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