1.pytorch模型转化onnx

先把pytorch的.pth模型转成onnx,例如我这个是用Bisenet转的,执行export_onnx.py

import argparse
import os.path as osp
import sys
sys.path.insert(0, '.')import torchfrom lib.models import model_factory
from configs import set_cfg_from_filetorch.set_grad_enabled(False)parse = argparse.ArgumentParser()
parse.add_argument('--config', dest='config', type=str,default='G:/6666Ground_segmentation0813/configs/bisenetv2_city.py',)
parse.add_argument('--weight-path', dest='weight_pth', type=str,default='G:/6666Ground_segmentation0813/v4_model_final.pth') #最后的pytorch模型
parse.add_argument('--outpath', dest='out_pth', type=str,default='G:/6666Ground_segmentation0813/model0124.onnx')#转成onnx的路径
args = parse.parse_args()cfg = set_cfg_from_file(args.config)
if cfg.use_sync_bn: cfg.use_sync_bn = Falsenet = model_factory[cfg.model_type](cfg.n_cats, aux_mode='pred')
net.load_state_dict(torch.load(args.weight_pth), strict=False)
net.eval()#  dummy_input = torch.randn(1, 3, *cfg.crop_size)
# dummy_input = torch.randn(1, 3, 1024, 2048)
dummy_input = torch.randn(1, 3, 480, 640) #图像的输入尺寸
input_names = ['input_image']
output_names = ['preds',]torch.onnx.export(net, dummy_input, args.out_pth,input_names=input_names, output_names=output_names,verbose=False, opset_version=11)

转好之后长这样~

2.onnx转rknn量化模型

2.1 配置rknn环境(win64)

2.1.1 安装python3.6的环境

具体过程参考:https://zhuanlan.zhihu.com/p/357844310

2.1.2 安装依赖包

conda info --envs 查看环境
创建新的rknn避免和其他的环境产生冲突
1.conda create -n rknn python=3.6
2.activate rknn
3.python -m pip install --upgrade pip
4.pip install tensorflow==1.14.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
5.pip install torch==1.6.0+cpu torchvision==0.7.0+cpu -f https://download.pytorch.org/whl/torch_stable.html --user
6.pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
7.pip install G:\6666Ground_segmentation0813\rknn_toolkit-1.6.0-cp36-cp36m-win_amd64.whl
这里是rknn套件安装包路径

8.pip install mxnet==1.5.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
9.pip install tensorflow==1.5.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
下面这两个8和9貌似可以不安装,无伤大雅~ 中间如果版本冲突的话直接uninstall卸载再重装需要的版本,我是最后整了几次卸载掉matplotlib就好了

一顿操作之后:检查下python3.6版本问题是否符合要求

rknn套件安装包长这样:

在pycharm中配置一下环境:

2.2 量化的话需要准备量化校正数据集


这个txt里面放图片路径:


生成路径文件的python:

import os
# 图片文件夹路径
pic_paths= "G:/6666Ground_segmentation0813/rknn_dataset"
f=open('G:/6666Ground_segmentation0813/rknntxt.txt', 'w')
filenames=os.listdir(pic_paths)
filenames.sort()
for filename in filenames:# 图片绝对路径out_path="G:/6666Ground_segmentation0813/rknn_dataset/" + filenameprint(out_path)f.write(out_path+'\n')
f.close()

其中需要计算训练代码时候的里面的均值归一化的值:

得到如下量化参数配置均值和归一化的值:

再用用转好的onnx模型进行量化,转成rknn模型:

from __future__ import absolute_import, print_function, division
import os
from rknn.api import RKNN# onnx_model = './resource/onnx/model_256x256_max_mscf_0.924553.onnx'G:/6666Ground_segmentation0813
onnx_model = 'G:/6666Ground_segmentation0813/onnx/model0124.onnx' #onnx路径
save_rknn_dir = 'G:/6666Ground_segmentation0813/rknn'#rknn保存路径if __name__ == '__main__':# Create RKNN objectrknn = RKNN()# pre-process configprint('--> Config model')rknn.config(mean_values=[[83.0535, 94.095, 82.1865]], std_values=[[53.856, 54.774, 53.9325]], reorder_channel='2 1 0', target_platform=['rk1808'], batch_size=1,quantized_dtype='asymmetric_quantized-u8')  # 需要输入为RGB#####需要转化一下均值和归一化的值# rknn.config(mean_values=[[0.0, 0.0, 0.0]], std_values=[[255, 255, 255]], reorder_channel='2 1 0', target_platform=['rv1126'], batch_size=1)  # 需要输入为RGBprint('done')model_name = onnx_model[onnx_model.rfind('/') + 1:]# Load ONNX modelprint('--> Loading model %s' % model_name)ret = rknn.load_onnx(model=onnx_model)if ret != 0:print('Load %s failed!' % model_name)exit(ret)print('done')# Build modelprint('--> Building model')# ret = rknn.build(do_quantization=False, dataset='./quantization_dataset.txt', pre_compile=True) ###路哥的版本pre_compil=True离线预编译ret = rknn.build(do_quantization=True, dataset='G:/6666Ground_segmentation0813/rknntxt.txt', pre_compile=False)#do_quantization是否对模型进行量化,datase量化校正数据集,pre_compil模型预编译开关,预编译 RKNN 模型可以减少模型初始化时间,但是无法通过模拟器进行推理或性能评估if ret != 0:print('Build net failed!')exit(ret)print('done')# Export RKNN modelprint('--> Export RKNN model')# save_name = model_name.replace(os.path.splitext(model_name)[-1], "_no_quant.rknn")save_name = model_name.replace(os.path.splitext(model_name)[-1], "_quant.rknn")ret = rknn.export_rknn(os.path.join(save_rknn_dir, save_name))if ret != 0:print('Export rknn failed!')exit(ret)print('done')rknn.release()

200张图片数据进行量化,大概11分钟左右(640*480),然后量化成功!

最后Pytorch的20M模型——转成onnx(12.7M)——量化RKNN(3.3M)

配置文件model_config.txt


其中指定的inpchannel输入通道要根据量化和训练测试的代码里面看:
此处是训练代码里面,opencv读入的是BGR,后面经过通道转换转成了RGB,再对网络进行输入,输入到网络,此处可以看出输入网络前的通道时RGB

又或者看测试代码:


此处的顺序是2 1 0,进行了通道转化,所以配置文件里面的指定输入通道时BGR
@@@@@@@@@@@@@@@@@@@@@@
此处有两种形式:

  1. config量化 配置文件中的指定InpChannel为BGR→→→→→量化rknn时,进行通道转换2 1 0BGR–>RGB→→→→→ (保持送进网络输入层的是RGB)

  2. config量化 配置文件中的指定InpChannel为RGB→→→→→量化rknn时,进行通道转换时候保持不变0 1 2 ,还是RGB→→→→→ (保持送进网络输入层的是RGB)

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
其中需要记住的是:
opencv读入cv2.imread的是BGR,其他的image.open(PIL)\imshow等都是RGB

pytorch模型转onnx-量化rknn(bisenet)相关推荐

  1. 【TensorRT】PyTorch模型转换为ONNX及TensorRT模型

    文章目录 1. PyTorch模型转TensorRT模型流程 2. PyTorch模型转ONNX模型 3. ONNX模型转TensorRT模型 3.1 TensorRT安装 3.2 将ONNX模型转换 ...

  2. 模型转换:pytorch模型转onnx, onnx转tensorflow, tensorflow转tflite

    文章目录 软件版本: pytorch模型转onnx onnx模型转tensorflow tensorflow模型转tflite 软件版本: tensorflow 2.3.1 pytorch 1.6.0 ...

  3. Pytorch模型转onnx打包部署(完全脱离pytorch)

    一.问题阐述: 深度学习pytorch框架在实际部署中由于其对环境和资源要求太高以及python语言的限制性,导致其部署存在重重困难,在这里介绍一下onnxruntime(GPU)的部署流程. 二.o ...

  4. pytorch模型转ONNX转TensorRT,模型转换和推理部署

    一.pth模型转ONNX import os import sys import torch import numpy as npfrom feat.model import ResNet # 导入自 ...

  5. pytorch模型转onnx遇到的问题记录

    1 . AttributeError: module 'onnxruntime' has no attribute 'InferenceSession' 解决方法 FAIL : Non-zero st ...

  6. 【地平线开发板 模型转换】将pytorch生成的onnx模型转换成.bin模型

    文章目录 1 获取onnx模型 2 启动docker容器 3 onnx模型检查 3.1 为什么要检查? 3.2 如何操作 4 图像数据预处理 4.1 一些问题的思考 4.2 图片挑选与放置 4.2 使 ...

  7. PyTorch模型部署:pth转onnx跨框架部署详解+代码

    文章目录 引言 基础概念 onnx:跨框架的模型表达标准 onnxruntime:部署模型的推理引擎 示例代码 0)安装onnx和onnxruntime 1)pytorch模型转onnx模型 2)on ...

  8. onnx实现对pytorch模型推理加速

    向AI转型的程序员都关注了这个号???????????? 人工智能大数据与深度学习  公众号:datayx 微软宣布将多平台通用ONNX机器学习引擎开源,此举将让机器学习框架,向着机器学习框架的标准化 ...

  9. pytorch模型(.pt)转onnx模型(.onnx)的方法详解(1)

    1. pytorch模型转换到onnx模型 2.运行onnx模型 3.比对onnx模型和pytorch模型的输出结果 我这里重点是第一点和第二点,第三部分  比较容易 首先你要安装 依赖库:onnx ...

最新文章

  1. web服务器(IIS)的操作步骤
  2. servlet的 session什么时候用_抖音什么时候用dou+
  3. DevExpress控件安装和初次使用图解
  4. 硬件:断路器、接触器、继电器基础知识
  5. android开发 apk文件,android开发中,将数据库文件与APK一起发布?
  6. linux改文件系统类型,linux文件系统类型及mount
  7. struts的执行流程
  8. PHP实现单向链表解决约瑟夫环问题
  9. HTML页面跳转的5种方法。
  10. 网络舆情监测关键词怎么设置与搜集的方法技巧
  11. Excel插入复选框
  12. python中的序列化与反序列化_Python之序列化与反序列化(pickle模块与json模块)...
  13. ubuntu添加阿里云软件源
  14. 计算机鼠标无法控制,鼠标控制不了电脑屏幕
  15. 【LeetCode】回溯 N皇后(DFS、子集、组合问题)
  16. 不看好叮咚买菜的N个理
  17. python求股票收益率_python – 有没有办法自动获取许多股票的一般信息,如市盈率,收益率等等?...
  18. AI人工智能学习准备之路线图
  19. 爬虫爬取淘宝商品信息
  20. Win10家庭版开启Administrator超级管理员账号 + Win10将中文用户文改为英文名

热门文章

  1. Android RSA加密对象数据
  2. 笔记 - Git使用
  3. 【c++】指针参数是如何传递内存的
  4. Nginx——负载均衡
  5. Redis读写分离技术架构解析
  6. 为什么建议大家使用Linux开发?
  7. Java是如何实现自己的SPI机制的? JDK源码(一)
  8. 除 Java 外,还有哪些编程语言蹭了 JVM 的车票?
  9. CPU飙高,频繁GC,怎么排查?
  10. 图解TCP/UDP原理!秒懂!