03 2022 档案
摘要:如果模型中有些算子不被ONNX算子库支持,我们就需要利用ONNXRuntime提供的API手动添加新算子。在官方文档中已经对如何添加定制算子进行了介绍(https://onnxruntime.ai/docs/reference/operators/add-custom-op.html ),这里我们主
阅读全文
摘要:背景:在学习如何往ONNXRuntime中添加新算子时,参考了官方测试代码:onnxruntime/test/shared_lib/test_inference.cc,代码内部使用GTest作为单元测试工具。为了清楚地学习运行过程,一步一步地调试是不可缺少的。 开始调试前需要以Debug方式编译代码
阅读全文
摘要:前言 在上一篇博客中:【推理引擎】ONNXRuntime 的架构设计,主要从文档上对ONNXRuntime的执行流程进行了梳理,但是想要深入理解,还需从源码角度进行分析。 本文以目标检测模型NanoDet作为分析的基础,部分代码主要参考:超轻量级NanoDet MNN/TNN/NCNN/ONNXRu
阅读全文
摘要:ONNXRuntime,深度学习领域的神经网络模型推理框架,从名字中可以看出它和 ONNX 的关系:以 ONNX 模型作为中间表达(IR)的运行时(Runtime)。 本文许多内容翻译于官方文档:https://onnxruntime.ai/docs/reference/high-level-des
阅读全文
摘要:定义模型结构 首先使用 PyTorch 定义一个简单的网络模型: class ConvBnReluBlock(nn.Module): def __init__(self) -> None: super().__init__() self.conv1 = nn.Conv2d(3, 64, 3) sel
阅读全文
摘要:ONNXRuntime的线程池接口在Eigen线程池接口基础之上扩展而来(题外话:TensorFlow中的线程池同样是建立在Eigen线程池基础上),以下是线程池的继承关系,其中 ThreadPoolTempl 是对接口的实现: 在 \(Environment::Initialize()\) 函数中
阅读全文
摘要:在构建一个推理模型时(如NanoDet,一个目标检测模型),需要继承 BasicOrtHandler。BasicOrtHandler 的初始化函数中会调用 initialize_handler() 方法,该方法会对 OrtEnv ort_env(构建在栈上)、OrtSession ort_sessi
阅读全文
摘要:在使用 VS Code 编辑 Python 代码时,如果要导入第三方库,Pylance 当前(2022.3)不能提供代码提示,使得黄色波浪线颇为碍眼。因此,我们可以改动配置,添加第三方库的路径,使得库代码被正确提示。 打开 .vscode/settings.json 文件,添加如下信息,这里以 TV
阅读全文
摘要:根据下面这篇博客编译TNN的onnx2tnn模块: 编译 onnx2tnn 回生成一个动态链接库文件:onnx2tnn.cpython-36m-x86_64-linux-gnu.so 说明:这里是python3.6 + Linux,不同软硬件环境会得到不同名称的动态库。 有了这个库,我们就可以在py
阅读全文
摘要:因为要研究TNN如何做模型转换,因此需要编译TNN源码中的tools/onnx2tnn模块。 编译过程中,遇到一个问题: error: no match for 'operator[]' (operand types are 'const google::protobuf::RepeatedFiel
阅读全文
浙公网安备 33010602011771号