OnnxOpConverter
#
import set_env
from tvm.relay.frontend.onnx import OnnxOpConverter
OnnxOpConverter??
Init signature: OnnxOpConverter()
Source:
class OnnxOpConverter(object):
"""A helper class for holding onnx op converters."""
@classmethod
def get_converter(cls, opset):
"""Get converter matches given opset.
Parameters
----------
opset: int
opset from model.
Returns
-------
converter, which should be `_impl_vx`. Number x is the biggest
number smaller than or equal to opset belongs to all support versions.
"""
versions = [int(d.replace("_impl_v", "")) for d in dir(cls) if "_impl_v" in d]
versions = sorted(versions + [opset])
version = versions[max([i for i, v in enumerate(versions) if v == opset]) - 1]
if hasattr(cls, f"_impl_v{version}"):
return getattr(cls, f"_impl_v{version}")
raise NotImplementedError(f"opset version {version} of {cls.__name__} not implemented")
File: /media/pc/data/lxw/ai/tvm/python/tvm/relay/frontend/onnx.py
Type: type
Subclasses: Unary, Elemwise, Pool, BatchNorm, InstanceNorm, Conv, ConvTranspose, GlobalAveragePool, QLinearGlobalAveragePool, GlobalMaxPool, ...
OnnxOpConverter
是用于持有 ONNX op 转换器的辅助类。
包含类方法 get_converter
,用于获取与给定 opset
匹配的转换器。
参数
opset
:来自模型的opset
(版本号)。返回值:转换器,应该是
_impl_vx
的形式,其中x
是小于或等于opset
的最大支持版本号。
方法的具体实现如下:
首先,使用列表推导式从类的
dir()
中获取所有以"_impl_v"
开头的属性,并将其转换为整数类型,得到版本列表versions
。将
versions
列表和[opset]
进行合并,并对合并后的列表进行排序,得到新的versions
列表。在
versions
列表中找到opset
所在的索引位置,然后取该位置前一个元素的值作为版本号version
。检查是否存在名为
_impl_v{version}
的属性,如果存在,则返回该属性对应的转换器。如果不存在对应的转换器,抛出
NotImplementedError
异常,并显示未实现的opset
版本信息。
这段代码的作用是根据给定的 opset
找到相应的转换器,以便在处理 ONNX 模型时进行算子的转换。