上面InferShapes代码的opset_imports为收集每个操作集的域名(domain)和版本号(version),这是因为在 ONNX 中,不同的操作可能来自不同的域(domain),每个域都有其版本号,在进行形状推理时,需要知道使用的操作集版本,因为不同版本的操作可能有不同的行为。model_local_functions_by_id主要为onnx端用户用于推理的自定义...
形状推理最核心的方法就是onnx模块中的infer_shapes,先采用Pytorch框架搭建一个卷积网络,并在网络结构最后增加两个上采样的OP,使用torch.onnx.export()将该模型导出,该例导出一个定长输入模型。直接调用onnx中的infer_shapes方法,将重新加载的模型进行形状推理,最后保存成一个新的模型,用Netron打开两个模型进行比较,...
因为其他参数都是可选的。如果是这样,内存将由onnxruntime分配。这对动态输出形状的情况很有帮助。
Pytorch模型在执行时是动态推导的,在运行之前并不知道整个推理的流程,ONNX模型是静态的,在推理时整个图已经构建完成。动态的模型是数据边走边计算,静态的模型是在推理时先构建了一个图,然后数据从输入节点开始,按照拓扑关系一直流向输出节点。这就导致在采用jit.trace(jit.script模式不讨论)方法进行模型导出时,遇到分...