294|1

6

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【嵌入式AI挑战营 】scrfd模型剪枝尝试,以及添加到摄像头例程 [复制链接]

本帖最后由 周国维 于 2024-12-18 19:41 编辑

因为活动管理员的催更,所以就加更一集模型剪枝和添加到Luckfox Pico Max开发板摄像头例程

 

模型蒸馏(Model Distillation)是一种在机器学习和深度学习中使用的模型压缩技术,目的是在保留模型性能的前提下,将复杂的“大”模型简化成更小、更高效的模型。这个过程涉及将一个称为“教师模型(Teacher Model)”的大模型中的知识传递给一个较小的“学生模型(Student Model)”。

但前提是没蒸馏前的模型就是“大”模型了,但现在我所选用的scrfd_500m_bnkps_shape320x320.onnx模型才2.5M,已经足够小了,感觉已经榨不出水分了,而且弄起来很复杂,所以pass这步。

接下来看剪枝,下面是在网上找的,https://segmentfault.com/a/1190000045481580

剪枝分为非结构化剪枝和结构化剪枝

非结构化剪枝:以filter的单个权重或者全连接层的单个神经元作为研究对象,通过剪枝策略将不重要的权重或者神经元去除掉。由于来自不同权重矩阵的不同稀疏度导致的负载失衡,这些方法对线程级并行性产生了负面影响。不规则的稀疏性也会影响内存性能,因为它会在数据访问位置中产生变化,从而降低跨各种平台(GPU、CPU、TPU)缓存的性能。

 

在结构化修剪中,对整个滤波器(如图1(c))或连续通道(如图1(b))进行修剪,以增加模型的稀疏性。滤波器/通道修剪提供了更均匀的权重矩阵,并减小了模型的大小。与非结构化修剪相比,简化的矩阵有助于减少乘法和累加(MAC)操作的数量。然而,结构化修剪也会降低模型的准确性,因为可以有助于模型整体准确性的权重也将与冗余权重一起被修剪。结构化修剪也可以与TensorRT等加速算法一起使用。与非结构化修剪不同,由于权重矩阵的统一性质,结构化修剪可以更好地利用各种平台在内存和带宽方面提供的硬件加速。

    因为模型是运行在npu的,所以排除非结构化剪枝,主要关注结构化剪枝,但网上大部分都是讲解原理和计算公式,都没什么基于实际工程的例程,下面是我的一些尝试,感觉没什么实际效果,就图一个试试。

首先是使用onnx-modifier,onnx-modifier是一款基于可视化界面的ONNX模型编辑工具,由GitHub用户ZhangGe6开发。该工具的核心理念是通过可视化的方式来编辑和预览ONNX模型,从而大大提高编辑效率。onnx-modifier基于流行的网络可视化工具Netron和轻量级Web应用框架Flask构建,结合了两者的优势,为用户提供了直观且功能强大的操作界面。

原本的scrfd_500m_bnkps_shape320x320.onnx模型分为3个步进等级,8,16,32,分别用来匹配不同的人脸尺寸,我想或许可以只保留一个通道,比如8,其他的都去掉

 

 

选择节点,然后点击删除节点以及子节点,就可以把16和32的通道给去掉

   

把新的onnx模型给下载下来,然后用上集的脚本转换为rknn模型再丢进去运行,发现去不去掉通道,消耗时间的耗时差别微乎其微,都是在0.09s~0.1s之间波动,用到的测试例程也是上集的,所以这步没什么卵用。

然后我看到rknn-toolkit2里的模型config配置参数里有些优化选项,也打开试一下

 

 

结果还是在0.09s~0.1s之间波动,只不过更偏向到0.09s的范围,还是突破不到0.08s,同样没卵用。

估计要起到真正的效果,得看每一层的卷积的耗时和权重,一步步调整,没弄过,不会弄,所以剪枝这步pass。

另外rv1106的手册上说gpu支持int4的量化精度,但实际rknn-toolkit2里又不支持int4的量化。

 

所以就不折腾模型了,之前都是用图片看效果,感觉差点意思,所以还是用摄像头获取图像数据再用模型处理。

基于luckfox_pico_rkmpi_example里的luckfox_pico_rtsp_retinaface示例上修改,就把人脸识别的模型和处理换成现在的scrfd_500m_bnkps_shape320x320.onnx模型,其余不变,源码看附件,因为加上了人脸识别,帧率降低了,勉强能用。

 

 

 

 

 

 

 

 

 

 

retinaface.zip

740.11 KB, 下载次数: 3

此帖出自Linux开发论坛

最新回复

大咖有新发现啊,学习了   详情 回复 发表于 2025-1-6 16:15
点赞 关注

回复
举报

5

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

大咖有新发现啊,学习了

此帖出自Linux开发论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
IPTV数字电视和网络电视的区别与联系

IPTV是以家用电视机为主要显示设备,集互联网、多媒体、通信等多种技术于一体,通过IP协议向家庭用户提供多种交互式媒体服务的业 ...

IC设计领域介绍及工程师未来出路规划

一、 IC 设计领域简介 (一)模拟与混号讯号电路设计 IC 电路可分为为模拟 IC 与数字 IC 两大类,以及两者兼具的混合讯号等三种 ...

当代最有竞争力的模拟技术和产品大看台

当代最有竞争力的模拟技术和产品大看台:前置放大器 前置放大器一般位于信号调理电路的最高端,它主要用于放大从传感器过来的 ...

ubuntu下修改内核发生“ncurses libraries“错误(解决方法)

BSEC@bsec-server:~/kernel/Kernel$ make menuconfig HOSTCC scripts/basic/fixdep HOSTCC scripts/basic/docproc HOSTCC script ...

学习笔记分享】【MSP430学习笔记】IAR开发环境中的数据、函数定位方法

IAR集成开发环境下,变量和函数的定位方法。 71081 qq:906411450 triton.zhang 本帖最后由 Triton.zhang 于 2011-9-2 ...

【MSP430F5529测评】2. UART串口通信

本帖最后由 wuguangtao 于 2020-10-27 22:17 编辑 # MSP430F5529LP UART 串口通信测试 由于energia很容易上手和测试, 这 ...

华为电磁兼容性结构设计规范 V2.0

本规范规定了电磁兼容性结构设计(屏蔽和搭接等)的主要原理 、设计原则和详细设计方法。 如果要深入理解电磁兼容的理论 ...

【安信可UWB室内定位模组NodeMCU-BU01】02.AT指令测距

1、NodeMCU-BU01开发板跳帽设置 NodeMCU-BU01开发板板载了一颗STM32 MCU作为主控制芯片,集成了AT调试指令功能,方便在线实时 ...

理论知识指导

各位朋友,前段时间用TAS5630B这颗集成内部MOS的D类运放芯片做了个D类功放,前前后后用了十几片,没有一块板子活过10分钟,既 ...

【得捷电子Follow me第1期】任务1 熟悉thonny软件与micropython的基本语法

本帖最后由 爱吃鱼的加菲猫 于 2023-5-29 22:00 编辑 第一步,开箱及排针焊接 先来两张焊接完成照片,我用了彩色排针区分 ...

关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表