安装 ONNX: pip install onnx 注意事项: 模型转换过程中注意onnx版本问题 1. 自定义OP问题 问题:yolov5 - 自定义的Focus在转换为onnx过程中会被拆分成很多细小的操作 - 导致推理速度变慢 解决:1、删除Focus模块 2、选用卷积 + 最大池化替换掉 以节省后期推理效率 注意:精度下降 - 速度上升 脚下留心: 设计算法尽量减少自定义组件 2. 后处理问题 问题:梯度优化器 - NMS 解决:在转换模型的时候屏蔽掉后处理部分即可,在推理时构建算法后处理部分即可 3. ONNX模型精简 - onnx-simplifier 问题:模型中很简单的东西在转换为onnx之后,显示出来的静态图非常不利于查看 解决:使用 onnx-simplifier 简化模型静态图 安装:pip install onnx-simplifier
模型查看网址: https://netron.app/
"""
安装 ONNX: pip install onnx
注意事项: 模型转换过程中注意onnx版本问题
ONNX-部署篇
1. 自定义OP问题
问题:yolov5 - 自定义的Focus在转换为onnx过程中会被拆分成很多细小的操作 - 导致推理速度变慢
解决:1、删除Focus模块 2、选用卷积 + 最大池化替换掉 以节省后期推理效率
注意:精度下降 - 速度上升
脚下留心: 设计算法尽量减少自定义组件
2. 后处理问题
问题:梯度优化器 - NMS
解决:在转换模型的时候屏蔽掉后处理部分即可,在推理时构建算法后处理部分即可
3. ONNX模型精简 - onnx-simplifier
问题:模型中很简单的东西在转换为onnx之后,显示出来的静态图非常不利于查看
解决:使用 onnx-simplifier 简化模型静态图
安装:pip install onnx-simplifier
"""
import onnx
from onnxsim import simplify
def onnx_op(model_path, save_path):
"""
查看onnx节点
inputs
------
model_path str 模型路径
outputs
-------
save_path str 简化模型保存流经
"""
print('模型静态图开始简化')
model_onnx = onnx.load_model(model_path)
model_smi, check = simplify(model_onnx)
onnx.save(model_smi, save_path)
print('模型静态图简化完成')
def model_show(model_path):
"""
模型结构参数显示 pip install netron
"""
import netron
netron.start(model_path)