type
Post
status
Published
date
Mar 8, 2024
slug
summary
tags
ai
category
AI
icon
password
闲聊
最近比较忙,已经有一段时间不写文章了,这里分享一下最近遇到的问题————yolov5的模型转换为ncnn模型调用的问题。
yolov5就不多说了,百度吧。
ncnn这里唠一下。
ncnn简介
ncnn地址
ncnn是腾讯开源的一个高性能、轻量级、模块化的神经网络计算框架,支持多种硬件平台和操作系统,包括CPU、GPU、DSP等,并且可以在Android、iOS、Windows、Linux等各种平台上运行。
ncnn的设计目标是尽可能地降低计算和存储资源的使用,以提高推理速度和效率,同时保持较高的准确率。为了达到这个目标,ncnn采用了一系列优化技术,包括模型量化、模型压缩、异构计算等,同时还采用了基于SIMD指令和多线程优化的方法,使得它能够在各种硬件上获得卓越的性能表现。
ncnn的模块化设计使得用户可以自由地组合和定制模型,从而构建适合自己应用场景的神经网络。ncnn还提供了一些预训练模型和示例代码,方便用户快速上手。
总的来说,ncnn是一个强大、高效、易用的神经网络计算框架,适用于各种边缘计算场景,包括移动设备、嵌入式设备、IoT设备等。
以上内容来之chatgpt.....(需要账号的找我)

问题
我用的yolov5版本是5.7.0,在训练好模型后要先把pt模型转onnx模型,但是用netron查看模型结构时发现输出的形式不对,我要的格式是图二这种OUTPUTS是3个的,但是输出的OUTPUTS是1个的。

图一

图二
解决办法
我一开始以为是我python版本或者pytorch版本的问题,然后我就开始更换这些,但是都不对,结果都是一样的。然后我就开始换yolov5的版本,用了一下yolov5.6.2,发现OUTPUTS是三个,然后我就对不两个版本的
export_onnx函数,发现v5.6.2的命令参数有个train,但是在v5.7.0把这个参数去掉了,这里加上tarining=torch.onnx.TrainimgMode.TRAINING就可以了,详细代码如下。接下来再用netron看一下模型,其OUTPUTS就是3个了。
还有一个值得注意的点就是转成ncnn模型后,一共两个文件,生成
param中要把Reshape层中的0=xxx(xxx代表数字)改成0=-1,这样再用ncnn的python包调用时就不会出现报错了。至于为啥要这样改就去github看吧,这里不再过多赘述。END
好了本期就这样了,我们下期这样。
- 作者:esword
- 链接:https://blog.esword.cn//article/f6be267b-be20-44ab-aecb-108d0bba4d70
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。




