yolov5模型通过Tengine框架部署在FT2000上全记录

一.前提:

1.模型:yolov5-6

2.框架:Tengine

3.FT2000:系统为国产版的linux二次开发系统,arm64

4.开发环境:虚拟机linux20.04

5.编译环境:git, g++, cmake, make

二.开发环境搭建

        虚拟机linux下:

        编译工具下载与安装:

sudo apt-get install cmake make g++ git

注意:此处有个坑apt install安装的cmake,版本最高为3.10,但是我们需要的cmake版本一般最低需要3.13,所以要先源码安装cmake.我安装的是cmake-3.15.5版本,有需要的小伙伴下面有链接可自取。

链接:https://pan.baidu.com/s/1AJHDFS3EQiEhuXP6XD2hSQ 
提取码:1024 
--来自百度网盘超级会员V3的分享

        开发环境为x86的linux系统,但是模型需要部署在FT2000上,内核为arm64,所以需要交叉编译环境。

        先在x86系统下拉取Tengine框架的源码,命令行键入:

git clone -b tengine-lite https://github.com/OAID/Tengine.git  Tengine

        安装交叉编译的工具,分为arm32和arm64的,自己看自己的嵌入式板子是哪种

        Arm64 linux 交叉编译工具:

sudo apt install g++-aarch64-linux-gnu

        Arm32 linux 交叉编译工具:

sudo apt install g++-arm-linux-gnueabihf

        交叉编译x86 下的linux系统中的源码:

cd Tengine
mkdir build 
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/aarch64-linux-gnu.toolchain.cmake ..
make
make install

注意:如果没有安装opencv以上编译只能编译一部分文件,无法编译完全,比如:yolov3,yolov5等需要opencv库的模型,因此需要先交叉编译opencv。

        安装依赖环境:

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
sudo apt-get install libcanberra-gtk-module
sudo apt-get install pkg-config

        下载opencv源码

        官方地址:Releases - OpenCV,我下载的是4.2版本,选择sources安装包下载.

        下载完成后解压到ubuntu中

        进入opencv源码目录中,创建build文件夹。

         进入build文件夹中,命令行键入:

sudo cmake -DCMAKE_MAKE_PROGRAM:PATH=/usr/bin/make -DCMAKE_INSTALL_PREFIX=../aarch_64_install -DWITH_CUDA=OFF -DENABLE_PRECOMPILED_HEADERS=OFF -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/aarch64-gnu.toolchain.cmake -DCUDA_GENERATION=Kepler ..

       -DCMAKE_INSTALL_PREFIX 指定编译文件make install后保存的路径

        执行完成后,键入make,注意不要加sudo,不要加sudo

make -j2

        时间比较长,等待几十分钟.完成后执行

make install

        大功告成后,重新开始编译源码。

        先打开Tengine目录下的exmple文件夹下的cmakelist.txt文件

         再上图中的位置加上一行set代码,用于寻找opencv库,然后按一下部骤开始编译。

cd Tengine
mkdir build 
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/aarch64-linux-gnu.toolchain.cmake ..
make
make install

         编译成功后会在build/install/bin下看到很多编译好的执行文件。

        

         在build/install/lib文件下还会生成静态链接库和动态链接库。

        然后将我们训练好的.pt文件转换成Tengine可用的.tmfile文件

        分为几步:不管用什么框架训练的网络模型都可以首先把我们训练好的权重文件,比如我用的pytorch框架做的训练,那我就将.pt文件转换为.onnx文件。

只需要一句代码就可以搞定。

torch.onnx.export(model, args, path, export_params, verbose, input_names, output_names, do_constant_folding, dynamic_axes, opset_version)
参数说明:

model——需要导出的pytorch模型
args——模型的输入参数,满足输入层的shape正确即可。
path——输出的onnx模型的位置。例如‘yolov5.onnx’。
export_params——输出模型是否可训练。default=True,表示导出trained model,否则untrained。
verbose——是否打印模型转换信息。default=False。
input_names——输入节点名称。default=None。
output_names——输出节点名称。default=None。
do_constant_folding——是否使用常量折叠,默认即可。default=True。
dynamic_axes——模型的输入输出有时是可变的,如Rnn,或者输出图像的batch可变,可通过该参数设置。如输入层的shape为(b,3,h,w),batch,height,width是可变的,但是chancel是固定三通道。
格式如下 :
1)仅list(int) dynamic_axes={‘input’:[0,2,3],‘output’:[0,1]}
2)仅dict<int, string> dynamic_axes={‘input’:{0:‘batch’,2:‘height’,3:‘width’},‘output’:{0:‘batch’,1:‘c’}}
3)mixed dynamic_axes={‘input’:{0:‘batch’,2:‘height’,3:‘width’},‘output’:[0,1]}
opset_version——opset的版本,低版本不支持upsample等操作。

注意:如果只用原参数转为.onnx文件,会出现一些Tengine不支持的算子,因此我们需要用onnx的内置的一些api,在我们转换时,要加上 --train=True 和 --simplifier,加上后我们转换后的onnx文件才不会包含一些Tengine框架不支持的算子,并且取消掉了后处理操作。

        生成后的文件后缀为.onnx样式,例如:

        生成.onnx文件后,需要把他转换为适用于Tengine框架的.tmfile文件。需要用到Tengine框架的convert_tool转换工具。

注意:转换工具只能在x86的环境下编译,才能生成。因此,我们需要在x86环境下重新再做一次编译。将Tengine源码复制一份,重新编译。

         重新创建一个build文件夹。

cd build
cmake ..
make
make install

        编译成功后,安装转换工具需要的依赖:

sudo apt install libprotobuf-dev protobuf-compiler

        编译完成后,生成的可执行文件 convert_tool 存放在 ./build/install/bin/ 目录下。将需要转换的.onnx文件,复制到convert_tool工具的同目录下。执行以下命令进行转换。

./convert_tool -f onnx -m best.onnx -o best.tmfile

//-f 被转换文件的类型
//-m 被转换的文件
//-o 生成的.tmfile文件名

转换后就会生成这样的文件

现在将这几个文件拷到FT2000的板子上,如下:

转换好的.tmfile文件         best.tmfile

交叉编译后的.so链接库文件:        libtengine-lite.so

需要用到的被识别的图片:         dog.jpg

执行文件:        tm_yolov5s

复制到FT2000后,终端打开,cd到存放上述四个文件的地址下。

命令行键入:

export LD_LIBRARY_PATH= 你所存放的文件夹的绝对路径
./tm_yolov5s -m best.tmfile -i dog.jpg -r 1 -t 1

至此,我们的模型已经基本在FT2000上跑起来了,但这里的执行文件只是识别一张照片,后续会改成实时检测的实现,未完待续~~

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值