关于onnx 转ncnn 的问题
文章目录
- 修改模型Detect层设计
- 转换
- 后处理
- 优质文章
由于有些操作是没法支持的
如5维的操作:
Unsupported slice axes !
Unsupported slice axes !
Unsupported slice axes !
Unsupported slice axes !
Unsupported slice axes !
Unsupported slice axes !
参考:
解决方案1
修改模型Detect层设计
这可能是由于ncnn会把一个5维张量捏成4维(假设batch=1),但是YOLO5Face的坐标反算逻辑基本上是在5维上做slice,所以导致了NCNN在转换这段反算逻辑时出现了slice错误。那么怎么解决这个问题呢?那就是不使用5维张量,把Detect中关于坐标反算的那段拿到C++中做实现。如果你理解了Detect的细节,以及张量在内存中的分布,这个实现其实不难做。首先,我们来看看,在YOLO5Face中这个代码怎么改。
# x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous() 原来的处理
x[i] = x[i].view(bs, 3, 16, -1).permute(0, 1, 3, 2).contiguous() # e.g (b,3,20x20,16) for NCNN
# ... 注释掉坐标反算的逻辑
# return torch.cat(z, 1) # (bs,?,16) 原来的返回
return x # 修改后的返回 for NCNN
其实就是不展开最后(ny,no)这两个维度,把这2个维度flatten成一个维度。由于后续的处理都是基于5维的张量,所以,坐标反算那段逻辑也要注释掉,直接返回这个修改后的4维张量,把坐标反算这部分放在C++里面实现。为了顺利export出ONNX文件,还需要对应地修改export.py,因为现在输出是一个list了,里面有3个维度不一样的张量,而原来是被torch.cat在一起,只有一个张量。
# torch.onnx.export(model, img, f, verbose=False, opset_version=12,# input_names=input_names,# output_names=output_names,# dynamic_axes={'input': {0: 'batch'},# 'output': {0: 'batch'}# } if opt.dynamic else None)torch.onnx.export(model, img, f,verbose=False,opset_version=12,input_names=['input'],output_names=["det_stride_8", "det_stride_16", "det_stride_32"],) # for ncnn
转换
python export.py --weights weights/yolov5n-face.pt --img_size 640 640 --batch_size 1
python -m onnxsim weights/best.onnx weights/plate-sim.onnx
~ ncnn_models onnx2ncnn yolov5n-face-640x640-for-ncnn.onnx yolov5n-face-640x640.param yolov5n-face-640x640.bin
~ ncnnoptimize yolov5n-face-640x640.param yolov5n-face-640x640.bin yolov5n-face-640x640.opt.param yolov5n-face-640x640.opt.bin 0
Input layer input without shape info, shape_inference skipped
Input layer input without shape info, estimate_memory_footprint skipped
后处理
再根据需要实现nms等
github 处理代码
优质文章
https://www.zhihu.com/question/62871439/answer/2285654278?utm_id=0
相关文章:
关于onnx 转ncnn 的问题
文章目录修改模型Detect层设计转换后处理优质文章由于有些操作是没法支持的 如5维的操作: Unsupported slice axes ! Unsupported slice axes ! Unsupported slice axes ! Unsupported slice axes ! Unsupported slice axes ! Unsupported slice axes !参考&#…...
设计模式之《责任链模式》
------《责任链模式》责任链模式的概念为什么用责任链模式工作中用在哪里设计思路代码实现总结责任链模式的概念 责任链模式是一种行为型设计模式,它允许你将请求沿着处理链传递,直到有一个处理者能够处理该请求为止。 在责任链模式中,每个…...
Android Studio实现多功能日记本
项目目录一、项目概述二、系统特点三、开发环境四、详细设计1、E-R图2、数据库3、系统设置五、运行演示一、项目概述 本次实现了功能实用且齐全的日记本,界面友好,使用便捷,采用MVC架构设计。使用SQLite数据库存储数据,数据表有主…...
只依赖Tensorrt和opencv的yolov5源代码
simple_yolo.hpp #ifndef SIMPLE_YOLO_HPP #define SIMPLE_YOLO_HPP/*简单的yolo接口,容易集成但是高性能 */#include <vector> #include <memory> #include <string> #include <future> #include <opencv2/opencv.hpp>namespace Si…...
多路I/O转接 poll(了解)
poll() 的机制与 select() 类似,与 select() 在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是 poll() 没有最大文件描述符数量的限制(但是数量过大后性能也是会下降)。 p…...
听说你也在为配置tomcat server而烦恼,看我这一篇,让你醍醐灌顶!
一.通过maven创建项目 二.下载tomcat服务器 我们一般在tomcat官网中进行tomcat的下载 Apache Tomcat - Welcome! 三.添加配置:我们点击下图中的文件配置 四.测试配置的tomcat 我们在文件的body中输入 测试内容: 在控制台中显式tomcat运行的信息&#…...
【从零开始学Skynet】工具篇(二):虚拟机文件的复制粘贴
大家在Linux系统下开发的时候肯定会遇到虚拟机与主机间无法复制粘贴的问题,现在我们就来解决这样的问题,方便我们的开发。 1、打开设置 我们可以系统界面的菜单栏点击“控制”,然后打开“设置”; 也可以在VirtualBox界面打开“设…...
全球自动驾驶竞争力最新排行榜,4家中国企业上榜
发展至今,自动驾驶技术不仅是汽车行业的一个主战场,更是全球科技领域中备受关注和充满竞争的一个重要领域。近年来,各大汽车制造商和科技公司都在投入大量财力物力人力进行自动驾驶技术的研发,并进一步争夺市场份额。 当然&#…...
APP启动流程分析
1、要分析的问题 1、与正常trace比对,确认过耗时在哪个步骤(am create/pause/stop/start/doframe)? 2、与正常trace比对,确认过耗时在哪个cpu state(Running/Runnable/Sleep/Uninterruptible Sleep)? 2、启动分析 …...
IIR数字滤波器简介与实现
一、简介: IIR是一种数字滤波器,其输出是输入信号和过去输出的某些加权和。IIR滤波器由反馈和前馈组成,可以用于滤除或增强信号的特定频率成分。 IIR滤波器的输出表示为: y[n] b0 * x[n] b1 * x[n-1] b2 * x[n-2] … - a1 * …...
3.5 函数的极值与最大值和最小值
学习目标: 我要学习函数的极值、最大值和最小值,我会采取以下几个步骤: 理解基本概念:首先,我会理解函数的极值、最大值和最小值的概念。例如,我会学习函数在特定区间内的最高点和最低点,并且理…...
第五十八天打卡
第五十八天打卡 739. 每日温度 提示 中等 1.5K company 亚马逊 company Facebook company 字节跳动 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在…...
双一流大学计算机专业月薪拿2000?网友:我裂开
**“计算机不行了”“求求不要再学计算机”……**这样的言论时不时就会在网上掀起一番热议,知了姐看得不少。尤其最近有则新闻,更是给计算机专业盖上“不值钱”的帽子。 某985、211大学校招会上,有企业招聘计算机相关岗位时,提出…...
ChatGPT的“N宗罪”?|AI百态(上篇)
序: AI诞生伊始,那是人人欣喜若狂的科技曙光,深埋于哲学、想象和虚构中的古老的梦,终于成真,一个个肉眼可见的智能机器人,在复刻、模仿和服务着他们的造物主——人类。 但科技树的点亮,总会遇到…...
48.现有移动端开源框架及其特点—MDL(mobile-deep-learning)
48.1 功能特点 一键部署,脚本参数就可以切换ios或者android支持iOS gpu运行MobileNet、squeezenet模型已经测试过可以稳定运行MobileNet、GoogLeNet v1、squeezenet、ResNet-50模型体积极小,无任何第三方依赖。纯手工打造。提供量化函数,对32位float转8位uint直接支持,模型…...
4.9--计算机网络之TCP篇之TCP Keepalive 和 HTTP Keep-Alive --(复习+大总结)---沉淀ing
HTTP 的 Keep-Alive,是由应用层(用户态) 实现的,称为 HTTP 长连接; TCP 的 Keepalive,是由 TCP 层(内核态) 实现的,称为 TCP 保活机制 HTTP 的 Keep-Alive HTTP 是基于…...
qt完善登录界面(2023-4-6)
点击登录按钮后,判断账号和密码是否一致,如果匹配失败,则弹出错误对话框,文本内容“账号密码不匹配,是否重新登录”,给定两个按钮ok和cancel,点击ok后,会清除密码框中的内容…...
104.(cesium篇)cesium卫星轨道模拟
听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <html lang="en"> <...
Linux shell编程
Shell脚本入门 touch helloWorld.sh 【创建脚本文件】 vim helloWorld.sh 【编辑文件】 以#!/bin/bash开头 echo "helloWorld" 调用脚本 方式一:bash 【绝对路径|相对路径】 方式二:chomd x helloWorld.sh 绝对…...
Rasa 3.x 学习系列-Rasa [3.5.4] -2023-04-05新版本发布
Rasa 3.x 学习系列-Rasa [3.5.4] -2023-04-05新版本发布 Rasa Pro 3.5 中引入的两项新功能将帮助您更好地测试和保护您的 AI 助手:端到端测试和机密管理。 端到端测试 通过全面的验收和集成测试评估 AI 助手的性能。我们易于更新的端到端测试可以设置为运行每个流程和集成,…...
进程和线程
1.实现多线程 进程:是正在运行的程序 是系统进行资源分配和调用的独立单位 每一个进程都有它自己的内存空间和系统资源 线程:是进程中的单个顺序控制流,是一条执行路径 单线程:一个进程如果只有一条执行路径,则称为单线…...
ps 备忘清单_开发速查表分享
ps 命令速查备忘清单 Linux我们提供了一个名为 ps 的实用程序,用于查看与系统上的进程相关的信息,它是 Process Status 的缩写这份 ps 命令备忘清单的快速参考列表,包含常用选项和示例。入门,为开发人员分享快速参考备忘单。 开…...
【ROS】基于WIFI网络实现图像消息跨机实时传输
【开发背景】 研究机器人目标检测算法的时候,常常需要把推理图像实时展示出来,以供观摩。而ROS1提供的跨机通信方法,要么是配置单Master,要么是配置多Master;一方面配置麻烦,另一方面传输效率低下…...
一次性说清楚 JAVA的 ThreadPoolExecutor 、newFixedThreadPool 和newCachedThreadPool 等
目录 1、Executors.newCachedThreadPool() 与 Executors.newFixedThreadPool(n) 的区别是什么? 2、Executors.newCachedThreadPool() 与 Executors.newFixedThreadPool(n) 可以调参吗,比如线程大小,线程等待时间 等等 3、newCachedThreadP…...
Android双目三维重建:Android双目摄像头实现双目测距
Android双目三维重建:Android双目摄像头实现双目测距 目录 Android双目三维重建:Android双目摄像头实现双目测距 1.开发版本 2.Android双目摄像头 3.双目相机标定 (1)双目相机标定-Python版 (2)双目相机标定-Matlab版 4.相机参数配置 5.Android 双…...
解决Avoid using non-primitive value as key, use string/number value instead.
Avoid using non-primitive value as key, use string/number value instead. 意思是:避免使用非基本值作为键,而是使用字符串/数字值。 Duplicate keys detected: [object Object]. This may cause an update error. 意思是:检测到重复键:[o…...
重构·改善既有代码的设计.03之重构手法(上)
1. 前言 之前的重构系列中,介绍了书中提到的重构基础,以及识别代码的坏味道。今天继续第三更,讲述那些重构手法(上)。看看哪些手法对你的项目能有所帮助… 2. 重新组织函数 对函数进行整理,使之更恰当的…...
闭关修炼(0.0 pytorch基础学习)1
基于官网pytorch.org pytorch 动态 比较优秀 py3.7支持是最多的啦 原来anaconda 是蟒蛇的意思 细思极恐 python 是蛇 yi Introduction to PyTorch Tensors — PyTorch Tutorials 2.0.0cu117 documentation omygaga 英语极差 哈哈哈 tensor 多维数组 矩阵二维数组 Tensor…...
个人-计算机操作系统第一章
一、章节习题 1.操作系统的目标与应用环境有关,如分时系统,希望能提供良好的()能力。 A、批处理B、可靠性C、稳定性D、人-机交互 2.()是应用程序取得OS所有服务的唯一途径。 A、系统调用B、作业调度C、键…...
Python-责任链模式
介绍 责任链模式是一种行为型设计模式,它允许多个对象以链式的形式依次处理请求,直到请求被处理或者无处理对象为止 实现方式 责任链模式由多个处理器组成,每个处理器都可以处理一种请求。如果当前处理器无法处理请求,它将把请…...
网络营销模式下品牌推广研究论文/石家庄seo网络优化的公司
下行信道 频率校正信道(FCCH):Frequency Correction Channel。 携带用于校正MS频率的信息,作用使MS可以定位并调制出同一小区的其他信息。用于初步同步,向移动台传递频率校正信道,使移动台能调到相应频率上…...
广州推广型网站建设/制作网页的流程步骤
路由器之家网今天精心准备的是《在线闪字》,下面是详解!闪字在线制作有没有那种一笔一笔写出来的闪字?或者能制作很可爱很温暖闪字的网站?很急啊!!!!!!...有没…...
用网站做淘宝客的人多吗/阿里巴巴官网
2019.03.02 突然发现,戴耳机听音乐,比公放更容易被感动。 戴着耳机听音乐,感觉自己就是整个世界,而音乐,就是自己的心声。 写于毕业半年的一个雨天。posted 2019-03-02 11:23 小时候挺菜 阅读(...) 评论(...) 编辑 收…...
wordpress 自动换行/企业培训内容包括哪些内容
小米手机网速慢是怎么回事使用手机的时候,我们有可能会感到手机网速很慢。那么小米手机网速慢是怎么回事呢?下面就让jy135小编来告诉大家吧,欢迎阅读。小米手机上网慢情况一:负荷上传在满速上传(包括P2P后台上传或用户主动上传)的时候&#…...
这样做网站/百度建站
Ruby中的字符串处理非常灵活"abc"[0] 返回97 就是a"abc"[1] 98"abc"[2] 99"abc"[3] nil"abc"[-1] 99 从后向前数"abc"[-2] 98"abc"[-3] 97"abc"[-4] nil"abc" * 2 返回"abca…...
国内做性视频网站有哪些/百度开户返点
AMD公司今日发布AMD EPYC™(霄龙)7000系列高性能数据中心处理器,与全球服器生态系统的合作伙伴共同开启数据中心发展的新时代。AMD与众多客户和合作伙伴共同启动了全球发布会,带来了一系列系统和性能演示,以及客户的背书。AMD EPYC采用创记录…...