pytorch ncnn,pytorch snn

  pytorch ncnn,pytorch snn

  TnDeploy YOLOV5到移动端——从——py torch到onnx再到tnn的完整流程可以直接使用腾讯的TNN-master运行android demo。可以参考这个博客。

  TNN入门笔记3354运行通过Android演示从零开始

  一些计算机性能有限,可能不支持虚拟机技术。可以通过usb连接手机,直接部署到真实的电脑上进行测试。请参考博客Android studio连接手机进行调试。

  中间可能会有一些问题,每个人的情况不一定一样。根据问题找到解决方案,最终TNN大师提供的android-demo可以成功部署到手机上。

  因为tnn-master中使用的权重已经是转换后的tnn权重,所以如果想根据自己的需要更改模型,需要将pytorch(或其他类型)权重转换为tnn格式。下面介绍如何将pytorch权重转换成tnn格式,替换tnn-master中的权重,并根据自己的需求展示android-demo。

1.下载yolov5工程文件

  根据搜索,tnn-master中转换的yolov5的版本号是41 bb 70 b 32598 c 016 cc 55 debae 7 bafd 26 c 94 e 984,但是这个版本的权重已经无法下载,所以选择了发布时间差不多的yolov5-3.1版本。通过验证后,选择yolov5-5.0版本即可实现最终的demo部署和测试,操作相同。Yolov5工程文档从版本历史yolov5下载。

  

2.将pytorch格式权重转为onnx格式

  yov5项目中有pytorch格式权重转换为onnx格式的书面代码,在yolov5-3.1/models文件夹下的export.py中。但是,这个文件夹中的yolo.py和export.py都需要修改。否则虽然转换可以成功,但是最后部署到手机上的demo是检测不到结果的。环境需要什么就装什么,缺什么就一个一个装。

  

2.1修改yolo.py文件

  Tnn好像不支持5维计算,所以模型输出部分有5维数据需要修改成4维输出:

2.2 修改export.py

  TNN大师使用的图像尺寸是448640,而yolov5是640640。如果型号转换期间未修改尺寸,则需要在tnn-master中修改相应的图片尺寸。建议在这里修改,比较方便。

3. 模型简化

  经过以上操作,可以得到onnx格式的模型。代码python 3-m onnxsim/yolo V5-master/weights/yolo V5 . onnx/yolo V5-master/weights/yolo V5 _ sim . onnx用于简化模型。前一个地址是要简化的模型,后一个是简化的模型和地址。这个简化模型的步骤一定要做,否则后面的onnx到tnn都不会成功。

  

4. onnx转tnn

  在获得简化的onnx模型之后,该步骤将onnx转换成tnn模型。推荐使用web版本转换工具,方便快捷,无需安装环境。网页的地址转换模型

  如果要配置自己的环境,安装编译工具,如果按照TNN官方文件,会出现很多莫名其妙的问题。尤其是按照官方文档安装protobuf的时候,从源代码开始安装比较麻烦,各种报错。安装后,后面有些包安装不了,浪费了很多时间和精力。最后我自己发现,不需要先安装protobuf,但是安装onnx的时候会安装protobuf。最后,我成功地配置了环境并安装了编译工具。下面给出了配置环境的每个步骤和代码:

  创建虚拟环境:conda create -n o2t python=3.8

  激活环境:康达激活o2t

  setup onnx:pip 3 install onnx==1 . 6 . 0

  安装onnx runtime:pip 3 install onnx runtime

  安装onnx-simplifier:pip 3安装onnx-simplifier

  安装cmake:因为cmake已经存在于我使用的服务器上,所以没有重新安装。

  编译:onnx2tnn工具在Mac和Linux上都有自动编译脚本,可以直接运行:CD path-to-tnn/tools/onnx 2 tnn/onnx-converter。/build.sh。

  如果显示没有操作权限,那么给文件权限chmod x ./build.sh,然后。/build.sh。

  模型的转换:CD path-to-tnn/tools/onnx 2 tnn/onnx-converterpythornx 2 tnn . py/yolov 5-master/weights/yolov 5s . onnx-version=v 1.0-optimize=1-half=0-o/lov 5-master/weights/-input _ shape input:1,3,448,640参数可根据官方文档设置,模型路径可根据实际情况更改。

  

5. 查看输出位置

  两个文件,tnnmodel和。tnnproto,是模型转换后得到的。用于查看输出位置。

  

6. 替换模型及修改输出位置

  在TNN-马斯特尔,用自己的改装型号替换它的yolov5型号。

  在AS打开的TNN主android-demo中打开object_detector_yolo.cc,找到输出位置,修改到上面查看的输出位置。tnn协议文件。注意顺序和对应关系,防止出错。您可以使用netron查看输出位置在。tnn-master和object _ detector _ yolo.cc附带的tnnproto文件。

  

7. 去除冗余

  TNN有许多模型-主人。部署到android上,demo比较大,很多功能不一定需要,可以赠送,减少内存消耗。这里举个例子,我们只使用yolov5模型进行物体检测,所以只能保留这个模型。

  先删除型号,只留下yolov5。

  MainActivity.java在TNN-master examples Android demo src main Java com Tencent TNN demo中注销了多余的活动。

  你也应该能找到界面中显示的那部分代码,并删除多余的显示按钮,这样你就能得到一个更干净的android-demo。

  最后,如果你想自己训练模型,修改类别或者其他内容,就要在TNN-master里面修改相应的文件,这个还没试过。

pytorch ncnn,pytorch snn