yolov5模型pt转wk(HISI3559)

目录

1 caffe-plus环境安装

1.1 准备ubuntu16.04虚拟机

1.2 caffe安装

1.2.1 安装依赖

1.2.2 安装caffe

1.2.3 编译python接口

2 适应wk的yolov5模型训练

2.1 yolov5-6.0项目获取

2.2 安装yolov5-6.0需要的环境。

2.3 修改模型

2.4 修改数据集

2.5 模型训练

3 pt->onnx->caffe->wk

3.1 pt->onnx

3.2 onnx->caffe

3.3 caffe->wk

3.3.1 windows下安装MinGW

3.3.2 配置环境变量

3.3.3 验证配置是否成功

3.3.4 RuyiStudio安装

1 caffe-plus环境安装

1.1 准备ubuntu16.04虚拟机

当然也可以使用其他版本,这里建议使用VM安装ubuntu16.04。

关于换源等一系列操作自行百度即可。·

1.2 caffe安装

1.2.1 安装依赖

sudo  apt-get update
apt-get install libprotobuf-dev
apt-get install libleveldb-dev
apt-get install libsnappy-dev
apt-get install libopencv-dev
apt-get install libhdf5-serial-dev
apt-get install protobuf-compiler
apt-get install libgflags-dev
apt-get install libgoogle-glog-dev
apt-get install liblmdb-dev
apt-get install libatlas-base-dev
apt-get install --no-install-recommends libboost-all-dev

1.2.2 安装caffe

安装git

apt-get install git

克隆caffe工程

 git clone git://github.com/BVLC/caffe.git

克隆caffe-plus工程

yolov5中有upsample层和transpose层,caffe是没有的,需要手动添加,先下载caffe_plus代码:

git clone https://github.com/jnulzl/caffe_plus.git
 将caffe_plus/include/caffe/layers/upsample_layer.hpp 
    caffe_plus/include/caffe/layers/permute_layer.hpp
 复制到caffe/include/caffe/layers/
 ​
 将caffe_plus/src/caffe/layers/upsample_layer.cpp 
    caffe_plus/src/caffe/layers/upsample_layer.cu 
    caffe_plus/src/caffe/layers/permute_layer.cpp 
    caffe_plus/src/caffe/layers/permute_layer.cu 
 复制到caffe/src/caffe/layers/
 ​
 修改caffe.proto文件
 vim caffe/src/caffe/proto/caffe.proto
 在optional WindowDataParameter window_data_param = 129;(约第423行)后增加代码:
 optional PermuteParameter permute_param = 150;
 optional UpsampleParameter upsample_param = 151;
 ​
 在末尾增加代码:
 message PermuteParameter {
   // The new orders of the axes of data. Notice it should be with
   // in the same range as the input data, and it starts from 0.
   // Do not provide repeated order.
   repeated uint32 order = 1;
 }
 message UpsampleParameter {     
     optional int32 height = 1 [default = 32];
     optional int32 width = 2 [default = 32];
     optional int32 height_scale = 3 [default = 2];
     optional int32 width_scale = 4 [default = 2];
     enum UpsampleOp {
         NEAREST = 0;
         BILINEAR = 1;
     }
     optional UpsampleOp mode = 5 [default = BILINEAR];
 }

配置Makefike.config

进入caffe目录

cd caffe

备份配置文件

cp Makefike.config.example Makefike.config 

修改配置文件

 首先打开配置文件
gedit Makefile.config
 1.去掉CPU_ONLY前面的#号注释,使得CPU_ONLY := 1
 2.配置引用文件路径(主要是HDF5的路径问题),找到INCLUDE_DIRS和LIBRARY_DIRS,分别在其后面(空一空格)新增内容 /usr/include/hdf5/serial 和 /usr/lib/x86_64-linux-gnu/hdf5/serial ,然后按ctrl + S 保存并关掉该文件。

依次执行

make all
make test
make runtest

安装完成没有报错,全绿说明caffe安装成功

如果其中一项发生错误,执行

 make clean

重新编译即可

1.2.3 编译python接口

Ubuntu16.04默认安装的是python2.7,没有pip指令包,所以需要先安装pip,根据提示键入命令:

apt install python-pip

安装完成后,进入如下目录:

cd caffe/python

其中有一个名为requirements.txt的文件,里面有需要的依赖库和版本信息,按照其安装即可。在安装前,需要先安装fortran编辑器(gfrotran),因为安装scipy库时需要它,执行命令:

apt-get install gfortran

随后输入:

pip install --upgrade pip

这一步极有可能发生pip无法更新以及安装包的问题,这是由于pip版本过老问题,可以手动安装较新版本的pip解决,这里建议安装20.3.4版本

apt install python-pip==20.3.4

然后需要修改一下/usr/bin/pip文件,不然执行requirements.txt文件中下载python模块的命令时会出现错误,键入命令:

 gedit /usr/bin/pip
 将文件中的 
 from pip import main 
 修改为
 from pip._internal import main
 保存后关闭

接着执行命令:

gedit requirements.txt
 将
 python-dateutil>=1.4,<2
 修改为
 python-dateutil
 保存后管理

继续执行命令:

for req in $(cat requirements.txt); do pip install $req; done

下载所有python包、

如未发生错误,则表明安装成功,如果有某些包并未安装成功,可以手动安装,命令如下:

pip install xxx==版本号 -i http://mirrors.aliyun.com/pypi/simple/

由于我们要进行onnx->caffe的操作,所以需要安装onnx包,推荐安装1.7.0版本

pip install onnx==1.7.0 -i http://mirrors.aliyun.com/pypi/simple/

将caffe根目录下的python文件所在路径加入到全局环境变量

键入命令:

gedit ~/.bashrc

打开bashrc文件,在文件的最后面添加一条语句 :

export PYTHONPATH=/home/你的登录名/caffe/python:$PYTHONPATH

保存后关闭,并使其生效:

source ~/.bashrc

最后一步:编译python接口。这里需要先修改一下配置文件,键入命令:

gedit Makefile.config

找到文件中的PYTHON_INCLUDE

将 
/usr/lib/python2.7/dist-packages/numpy/core/include 
修改为 
/usr/local/lib/python2.7/dist-packages/numpy/core/include

保存关闭后执行

make pycaffe

输出为: 

PROTOC (python) src/caffe/proto/caffe.proto

 表示编译python接口成功

验证一下,命令行输入python进入python2.7

import caffe

回车运行未报错则安装成功

2 适应wk的yolov5模型训练

2.1 yolov5-6.0项目获取

在GIthub上进入yolov5官方仓库下载6.0版本。

这里使用git clone下载的会是最新版本,建议下载6.0版本,下载zip包后解压

2.2 安装yolov5-6.0需要的环境。

这里参考rknn文档,关于利用anaconda安装yolov5环境的即可。

2.3 修改模型

利用pycharm打开yolov5-6.0项目工程,首先将models目录下的yolov5s.yaml配置文件修改为:

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
 ​
 # Parameters
 nc: 80  # number of classes
 depth_multiple: 0.33  # model depth multiple
 width_multiple: 0.50  # layer channel multiple
 anchors:
   - [10,13, 16,30, 33,23]  # P3/8
   - [30,61, 62,45, 59,119]  # P4/16
   - [116,90, 156,198, 373,326]  # P5/32
 ​
 # YOLOv5 v6.0 backbone
 backbone:
   # [from, number, module, args]
   [[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2
    [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
    [-1, 3, C3, [128]],
    [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
    [-1, 6, C3, [256]],
    [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
    [-1, 9, C3, [512]],
    [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
    [-1, 3, C3, [1024]],
    [-1, 1, SPPF, [1024, 5]],  # 9
   ]
 ​
 # YOLOv5 v6.0 head
 head:
   [[-1, 1, Conv, [512, 1, 1]],
   # [-1, 1, nn.Upsample, [None, 2, 'nearest']],
    [ -1, -1, nn.ConvTranspose2d,[ 256, 256, 2, 2 ] ],
    [[-1, 6], 1, Concat, [1]],  # cat backbone P4
    [-1, 3, C3, [512, False]],  # 13
 ​
    [-1, 1, Conv, [256, 1, 1]],
    #[-1, 1, nn.Upsample, [None, 2, 'nearest']],
    [ -1, -1, nn.ConvTranspose2d,[ 128, 128, 2, 2 ] ],
    [[-1, 4], 1, Concat, [1]],  # cat backbone P3
    [-1, 3, C3, [256, False]],  # 17 (P3/8-small)
 ​
    [-1, 1, Conv, [256, 3, 2]],
    [[-1, 14], 1, Concat, [1]],  # cat head P4
    [-1, 3, C3, [512, False]],  # 20 (P4/16-medium)
 ​
    [-1, 1, Conv, [512, 3, 2]],
    [[-1, 10], 1, Concat, [1]],  # cat head P5
    [-1, 3, C3, [1024, False]],  # 23 (P5/32-large)
 ​
    [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
   ]

这里主要是将上采样层换成了反卷积层,以适应HISI3559平台。其他配置文件根据自身数据集做出调整。

2.4 修改数据集

修改方式与rknn一致,可查看rknn文档

2.5 模型训练

进入yolov5的anaconda环境并cd项目根目录,运行:

python train.py --data mydata.yaml --cfg yolov5s.yaml

等待训练完成,关于结果,可阅读rknn文档

3 pt->onnx->caffe->wk

3.1 pt->onnx

训练好的模型在yolov5工程中的、/runs/train/exp/weights/目录下

python export.py --data mydata.yaml --weights runs/train/weights/best.pt --batch 1 --img 640 640 --train --simplify --include onnx --opset 10

将生成的onnx文件进行进一步的简化,运行:

 python -m onnxsim best.onnx best-sim.onnx

其中,onnxsim后的两个参数分别是上一步生成的onnx的地址以及生成简化后onnx的地址。

3.2 onnx->caffe

获取yolov5_onnx2caffe项目

git clone https://github.com/Wulingtian/yolov5_onnx2caffe.git

将上一步生成的best-sim.onnx文件copy到虚拟机上

进入yolov5_onnx2caffe目录下

打开convertCaffe.py文件,根据模型网络层的情况与simple_onnx文件地址修改main函数下面的内容。

其中onnx_path为best-sim.onnx路径,其他两个为生成文件路径

并且如上图留下最后一个converttoCaffe,其他的注释掉。

这里需要注意!!!

由于编码问题,python2.7存在无法解析中文注释,这里需要在该工程下所有的py文件第一行加上

# -*- coding: UTF-8 -*- 
 解决编码问题,如图:

 完成上述工作后,进入控制台到yolov5_onnx2caffe目录下,运行:

python converCaffe

输出如下表明转换成功,会在对应目录生成.caffemodel和.prototxt文件

随后将生成的.caffemodel和.prototxt文件copy到windows上,进行下一步操作

3.3 caffe->wk

3.3.1 windows下安装MinGW

MinGW 的全称是:Minimalist GNU on Windows ,实际上是将gcc(c/c++编译器)移植到了 Windows 平台下,并且包含了 Win32API ,因此可以将源代码编译为可在 Windows 中运行的可执行程序。而且还可以使用一些 Windows 不具备的,Linux平台下的开发工具。

使用它的原因:

  1. MinGW-w64 是开源软件,可以免费使用。

  2. MinGW-w64 由一个活跃的开源社区在持续维护,不会过时。

  3. MinGW-w64 支持最新的 C语言 标准。 使用 Windows 的C语言运行库,因此编译出的程序不需要第三方 DLL ,可以直接在 Windows 下运行。总之就是要在windows运行c/c++按就对了。可以理解为c/c++的编译器gcc的windows版。

1.下载解压安装

官方下载网站:MinGW-w64 - for 32 and 64 bit Windows download | SourceForge.net

 页面向下拉,找到下一张图的位置

 

 下载完成后压到想安装到的目录

3.3.2 配置环境变量

 

 

 

配置完成,确认保存即可 

3.3.3 验证配置是否成功

cmd进入控制台

输入:

gcc -v

3.3.4 RuyiStudio安装

下载地址

RuyiStudio

 解压压缩包

双击打开.exe文件

这里默认下一步即可

创建NNIE工程

如图的项目名,项目类型等选择如下:

打开文件最下方的 xxx.cfg,导入caffe模型文件,并设置模型转化的对应参数。

参数说明: prototxt ------------------------------- 导入caffe模型的prototxt文件

                 caffemodel  --------------------------- 导入caffe模型的caffemodel文件
 ​
                 net_type  ------------------------------ 模型类别(图像都是CNN)
 ​
                 is_simulation  ------------------------ 是否进行仿真(默认即可)
 ​
                 marked_prototxt  -------------------- 预生成wk文件的prototxt文件   (需要进行修改)
 ​
                 output_wk_name  -------------------- 导出的wk文件的命名
 ​
                 complie_model  ---------------------- 导出模型的精度
 ​
                 log_level  ------------------------------ 是否开启日志文件
 ​
                 align_bytes  ---------------------------- 模型组对齐方式(默认)
 ​
                 batch_num  ----------------------------- 处理图片的批次
 ​
                 sparse_rate  ----------------------------  FC参数稀疏化操作(默认)
 ​
                 image_type  ----------------------------  输入模型的图像类型(与后处  理有关)
 ​
                 RGB_order  ----------------------------  输入模型图像的通道顺序
 ​
                 image_list  -----------------------------  参考图片
 ​
                 norm_type  -----------------------------  模型输入数据初始化
 ​
                 mean_file  ------------------------------  均值文件(一般不用加)

打开mark_prototxt文件夹下的xxx.prototxt,删除xxx.prototxt最后几行中的Reshape和Transpose层(即model_hand中3个output区域的Reshape和Transpose层),然后保存修改后的xxx.prototxt,利用marked_prototxt中的Mark来查看修改后的xxx.prototxt(以其中一组Reshape和Transpose层为例子)。左边为未修改,右边为已修改。修改完成后记得保存。

删除掉最后的三个Transpose层,如下图:(其他yolo的tiny版本可能两个输出,这个看自己的模型)

修改后面的三个Reshape层,第一个dim改为0,删除第五个dim,第四个dim改为dim的平方。

修改后的

原始的 

 

点击箭头make

 成功后如下:

生成的.wk位置如下:

至此,模型转换整个流程完成。

最后就是模型部署了,可以参考如下:

GitHub - mahxn0/Hisi3559A_Yolov5: 基于hisi3559a的yolov5

  • 10
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值