【技术综述】如何Finetune一个小网络到移动端(时空性能分析篇)

PaddleOCR模型移植安卓 PaddleOCR 是一套丰富、领先、且实用的OCR工具库, 助力开发者训练出更好的模型, 并应用落地.基于 PaddleOCR 训练出的模型具有良好的文本识别性.PaddleOCR 的兼容性很差, 一个小版本都可能导致无法编译. 尤其需要注意高版本的 Android NDK, 它修改了各种库的位置, 很容易造成编译时出现头文件缺失的情况.... 阅读详情

本文首发于龙鹏的知乎专栏《有三AI学院》

https://zhuanlan.zhihu.com/p/34455109

00 引言

现在很多的图像算法都是离线计算的,而学术界刷榜单那些模型,什么vgg16,resnet152是不能直接拿来用的,所以,对于一个深度学习算法工程师来说,如果在这些模型的基础上,设计出一个又小又快的满足业务需求的模型,是必备技能,今天就来简单讨论一下这个问题。

首先,祭出一个baseline,来自Google的mobilenet,算是学术界祭出的真正有意义的移动端模型。

当然,这里我们要稍微修改一下,毕竟原始的mobilenet是分类模型过于简单无法展开更多,我们以更加复杂通用的一个任务开始,分割,同时修改一下初始输入尺度,毕竟224这个尺度在移动端不一定被采用,我们以更小的一个尺度开始,以MacBookPro为计算平台。

在原有mobilenet的基础上添加反卷积,输入网络尺度160*160,网络结构参考mobilenet,只是在最后加上反卷积如下

 

如果谁有可以可视化caffe网络结构图并保存成高清图片的方法,请告诉我一下,netscope不能保存图,graphviz的图又效果很差,所以这里没有放完整结构图。

不过,大家可以去参考mobilenet,然后我们在mac上跑一遍,看看时间代价如下:

其中黄色高亮是统计的每一个module的时间和。

 

准备工作完毕,接下来开始干活。

 

01 分析网络的性能瓶颈

1.1 运行时间和计算代价分析

 

 

上面两图分别是网络的计算时间和计算量,从上面我们总结几条规律:

(1) 耗时前5,conv2_1_sep,conv6_sep,conv3_1_sep,conv3_1_dw,conv2_1_dw。

我们看看为什么,

conv2_1_dw计算量,32*80*80*3*3*1=1843200

conv2_1_sep计算量,32*80*80*1*1*64=13107200

conv3_1_dw计算量,128*40*40*3*3*1=1843200

conv3_1_sep计算量,128*40*40*1*1*128=26214400

conv6_sep计算量,1024*5*5*1*1*1024=26214400

上面可以看出,计算量最大的是conv6_sep,conv2_1_sep,理论上conv2_1_dw计算量与conv2_1_sep不在一个量级,但是实际上相当,这是库实现的问题。

(2) 从conv5_1到conv5_5,由于尺度不发生变化,通道数不发生变化,所以耗时都是接近的,且dw模块/sep模块耗时比例约为1:3。

前者计算量:512*10*10*3*3

后者计算量:512*10*10*1*1*512

这一段网络结构是利用网络深度增加了非线性,所以对于复杂程度不同的问题,我们可以缩减这一段的深度。

1.2 网络参数量分析

 

从上面我们可以看出,参数量集中在conv6_sep,conv5_6_sep,conv5_1~5_5,所以要压缩模型,应该从这里地方入手。

当我们想设计更小的mobilenet网络时,有3招是基本的,一定要用。

(1) 降低输入分辨率,根据实际问题来设定。

(2) 调整网络宽度,也就是channel数量。

(3) 调整网络深度,比如从conv4_2到conv5_6这一段,都可以先去试一试。

 

02开始调整网络

在做这件事之前,我们先看看经典网络结构的一些东西,更具体可以参考之前的文章。

https://zhuanlan.zhihu.com/p/25797790

 

从上面的表看,主流网络第一个卷积,kernel=3,stride=2,featuremap=64,mobilenet系列已经降到了32。

第1层是提取边缘等信息的,当然是featuremap数量越大越好,但是其实边缘检测方向是有限的,很多信息是冗余的, 由于mobilenet优异的性能,事实证明,最底层的卷积featuremap channel=32已经够用。

实际的任务中,大家可以看conv1占据的时间来调整,不过大部分情况下只需要选择好输入尺度大小做训练,然后套用上面的参数即可,毕竟这一层占据的时间和参数,都不算多,32已经足够好足够优异,不太需要去调整的。

自从任意的卷积可以采用3*3替代且计算量更小后,网络结构中现在只剩下3*3和1*1的卷积,其他的尺寸可以先不考虑。

采用80*80输入,砍掉conv5_6和conv6,得到的模型各层花费时间如下

 

总共274ms,我们称这个模型为mobilenet_v0。

2.1 如何决定输入尺度

输入尺度绝对是任务驱动的,不同的任务需要不同的输入尺度,分割比分类需要尺度一般更大,检测又比分割所需要的尺度更大,在这里,我们限定一个比较简单的分割任务,然后将输入尺度定为80*80,就将该任务称为A吧。

2.2 如何调整网络宽度与深度

通道数决定网络的宽度,对时间和网络大小的贡献是一个乘因子,这是优化模型首先要做的,下面开始做。

2.2.1 反卷积

看上面的模型我们可以看出,反卷积所占用时间远远大于前面提取特征的卷积,这是因为我们没有去优化过这个参数。那么,到底选择多少才合适呢?

在这里经验就比较有用了。卷积提取特征的过程,是featuremap尺度变小,channel变大,反卷积正好相反,featuremap不断变大,通道数不断变小。这里有4次放大2倍的卷积,考虑到每次缩放一倍,所以第一次的channel数量不能小于2^4=16,一不做二不休,我们干脆就干为16。

我们称这个模型为mobilenet_v1

我们看下时间对比

 

再看下性能对比。

 

这样,一举将模型压缩5倍,时间压缩5倍,而且现在反卷积的时间代价几乎已经可以忽略。

2.2.2 粗暴地减少网络宽度

接下来我们再返回第1部分,conv5_1到conv5_5的计算量和时间代价都是不小的,且这一部分featuremap大小不再发生变化。这意味着什么?这意味着这一部分,纯粹是为了增加网络的非线性性。

下面我们直接将conv5_1到conv5_5的featuremap从512全部干到256,称其为mobilenet2.1.1,再看精度和时间代价。

 

时间代价和网络大小又有了明显下降,不过精度也有下降。

2.2.3 粗暴地减少网络深度

网络层数决定网络的深度,在一定的范围内,深度越深,网络的性能就越优异。但是从第一张图我们可看出来了,网络越深,featureamap越小,channel数越多,这个时候的计算量也是不小的。

所以,针对特定的任务去优化模型的时候,我们有必要去优化网络的深度,当然是在满足精度的前提下,越小越好。

我们从一个比较好的起点开始,从mobilenet_v1开始吧,直接砍掉conv5_5这个block,将其称为mobilenet_v2.1.2。

下面来看看比较。

 

从结果来看,精度下降尚且不算很明显,不过时间的优化很有限,模型大小压缩也有限。

下面在集中看一下同时粗暴地减少网络深度和宽度的结果,称其为mobilenet_v2.1.3

 

以损失将近1%的代价,将模型压缩到2.7m,40ms以内,这样的结果,得看实际应用能不能满足要求了。

总之,粗暴地直接减小深度和宽度,都会造成性能的下降。

2.2.4 怎么弥补通道的损失

从上面我们可以看出,减少深度和宽度,虽然减小了模型,但是都带来了精度的损失,很多时候这种精度损失导致模型无法上线。所以,我们需要一些其他方法来解决这个问题。

2.2.4.1 crelu通道补偿

从上面可以看出,网络宽度对结果的影响非常严重,如果我们可以想办法维持原来的网络宽度,且不显著增加计算量,那就完美了。正好有这样的方法,来源于这篇文章《Understanding and Improving Convolutional Neural Networks via Concatenated Rectified Linear Units》,它指出网络的参数有互补的现象,如果将减半后的通道补上它的反,会基本上相当于原有的模型,虽然原文针对的是网络浅层有这样的现象,不过深层我们不妨一试,将其用于参数量和计算代价都比较大的conv5_1到conv5_4,我们直接从mobilenet_v2.1.3开始,增加conv5_1到conv5_4的网络宽度,称之为mobilenet_v2.1.4。

 

2.2.4.2 skip connect,融合不同层的信息

这是说的不能再多,用的不能再多了的技术。从FCN开始,为了恢复分割细节,从底层添加branch到高层几乎就是必用的技巧了,它不一定能在精度指标上有多少提升,但是对于分割的细节一般是正向的。

我们直接从mobilenet_v2.1.3开始,添加3个尺度的skip connection。由于底层的channel数量较大,deconv后的channel数量较小,因此我们添加1*1卷积改变通道,剩下来就有了两种方案,1,concat。2,eltwise。

针对这两种方案,我们分别进行试验。

 

从上表可以看出,两个方案都不错,时间代价和模型大小增加都很小,而精度提升较大。

现在反过头回去看刚开始的模型v0,在精确度没有下降的情况下,我们已经把速度优化了5倍以上,模型大小压缩到原来的1/10,已经满足一个通用的线上模型了。

当然,我们不可能道尽所有的技术,而接着上面的思路,也还有很多可以做的事情,本篇的重点,是让大家学会分析性能网络的性能瓶颈,从而针对性的去优化网络。更多类似技巧和实验,作为技术人员,自己尝试去吧。

 

同时,在我的知乎专栏也会开始同步更新这个模块,欢迎来交流

https://zhuanlan.zhihu.com/c_151876233

注:部分图片来自网络

—END—

感谢各位看官的耐心阅读,不足之处希望多多指教。后续内容将会不定期奉上,欢迎大家关注有三公众号 有三AI!

 

 

 

【语音识别】端到端语音识别技术演进与工业落地实践 本文深入探讨了端到端语音识别技术的演进与工业落地实践,详细介绍了Conformer架构的优势及轻量化方案,分享了在医疗、车载等复杂场景中的实战经验,并展望了多模态融合和持续学习等未来技术方向。文章特别强调了ASR技术在智能客服、直播字幕等场景中的应用价值。 阅读详情

相关推荐

深度学习三类核心网络:MLP、CNN与序列网络原理与实战

深度学习本质是将复杂问题解构为可计算、可优化、可部署的标准化流程。Multilayer perceptron(MLP)作为通用函数拟合器,擅长处理静态特征映射;Convolutional neural network(ConvNet)依托局部感受野与权值共享,专精于图像中空间相关性的建模;而Sequence networks(如LSTM、Transformer)则通过状态传递或全局注意力机制,有效捕获时序数据中的前后依赖关系。这三类架构构成了工业级AI系统最常用的技术基座,广泛应用于图像识别、语音分析、推荐

weixin_33843409的博客 390

PyTorch(Python)训练MNIST模型移动端IOS上使用Swift实时数字识别

识别手写数字是计算机视觉的基石问题,可以通过神经网络来解决。在此,我不会重复有关模型构建和训练的细节。 本文中,我的目的是将经过训练的模型移植到移动环境中。我使用 pytorch 构建模型,因为我想尝试一下 torchscript。对于 ios 应用程序,我使用 swift 和 swiftUI。 使用 PyTorch 进行手写数字识别 数据集 我们将使用流行的 MNIST 数据库。 它是 70000 个手写数字的集合,分为 60000 个和 10000 个图像的训练集和测试集。 在开始之前,我们需要进行所有

跨学科知识视角展现 1570

模型部署与剪枝实践

深度模型模型剪枝

青灵_Yaffa的博客 727

第十七章 模型压缩及移动端部署

Markdown Revision 1; Date: 2018/11/4 Editor: 谈继勇 Contact: scutjy2015@163.com updata:贵州大学硕士张达峰 17.1 为什么需要模型压缩和加速? (1)随着AI技术的飞速发展,越来越多的公司希望在自己的移动端产品中注入AI能力 (2)对于在线学习和增量学习等实时应用而言,如何减少含有大量层级及结点的大型神经网络...

u014033218的专栏 8416

int8量化

感觉深度学习在移动端的全面开花就在这两年了,其实感觉已经开始开花了。 先说说量化是怎么一回事,目前我们在caffe, tensorflow等框架上训练模型(前向和反向)都是使用float 32的,与int 8相比,所需储存空间更大,但是精度更好。 量化目前来讲,有两种方式,一种是通过训练量化finetune原来的模型,另一种是直接对模型和计算进行量化。这篇文章先来讲不使用finetune...

jacke121的专栏 5295

FTViewSE利用VB脚本制作简易日报表

罗克韦尔SE用VB做的简单的报表

z0800656的博客 3024

移动端部署深度学习应用之yolov5--android

yolov5移植到安卓端的简便操作

pocean2012的博客 2049

【近源攻击】badusb制作

BadUSB是利用伪造HID设备执行攻击载荷的一种攻击方式。HID(Human InterfaceDevice)设备通常指的就是键盘鼠标等与人交互的设备,用户插入BadUSB,就会自动执行预置在固件中的恶意代码。BadUsb插入后,会模拟键盘鼠标对电脑进行操作,通过这些操作打开电脑的命令终端,并执行一条命令,这条命令将从指定网址下载其他代码并于后台静默运行。这些代码功能包括:窃取信息、反弹shell、发送邮件等,从而实现控制目标机或者窃取信息的目的。

qinjilll的博客 2550

如何将TensorFlow训练的模型移植到Android手机

现有经验贴汇总: https://blog.youkuaiyun.com/masa_fish/article/details/56049710?winzoom=1 https://blog.youkuaiyun.com/masa_fish/article/details/54097796 https://blog.youkuaiyun.com/guyuealian/article/details/79672257 https://w...

qq_38769551的博客 1678

PHP+MYSQL宠物主题动态网页设计源码+数据库,大学生期末大作业,PHP课程设计

PHP+MYSQL宠物主题动态网页设计源码+数据库,大学生期末大作业,PHP课程设计提示:本文采用PHP对数据库进行操作:本文就介绍了PHP实现对MySQL数据库的增删改查操作基础内容。

902

2024-江苏科技大学-模拟-动态接触角,模拟液滴撞击,comsol软件模拟。

相反,其对液滴粘度和平衡接触角的变化基本不敏感。重力势能的影响显著受过程参数调节,随着液滴直径和密度的增加而增加,而随着初始液滴速度和表面张力系数的增加而减小。通过考虑形状因子和粘度修正因子,可以准确定义表面能和粘性耗散能,使得所提出的半经验修正勺状模型表现出良好的性能,在所有65个研究案例中,液滴最大铺展长度因子(βmax)和中心厚度(h)的相对误差基本分别落在5%和10%的区间内。重力势能的影响受过程参数显著调节,随液滴直径和密度的增大而增大,随液滴初始速度和表面张力系数的增大而减小。

qq_15963745的博客 512

【人工智能】如何Finetune一个小网络到移动端(时空性能分析篇)

本文首发于龙鹏的知乎专栏《深度学习模型训练经验与代码剖析》https://zhuanlan.zhihu.com/p/3445510900引言现在很多的图像算法都是离线计算...

湾区人工智能 156

华为OD机试 - 服务中心选址(Python)

一个快递公司希望在一条街道建立新的服务中心。公司统计了该街道中所有区域在地图上的位置,并希望能够以此为依据为新的服务中心选址:使服务中心到所有区域的距离的总和最小。先输入区域数组positions的长度n(1 ≤ n ≤ 10^5)接下来 n 行每行输入成对的left和right值,以空格隔开。输出为location。

m0_46181452的博客 283

深度学习移动端在线训练 --- 基于MNN的端侧Finetune实现

开篇吐槽 ​ 在决定使用MNN实现在线训练之前,也比较了TNN/NCNN,但是发现目前各大端侧推理引擎的训练框架都不成熟,半斤八两的状态,可能都把精力放在在线预测和op支持上,但是端侧训练的需求真的少么?fine-tune在端侧应用难道不是刚需?查了下NCNN关于训练框架的文档或教程几乎没有,移植到端侧应用的更是没找到案例,NCNN发布几年至今没有完善的官方文档,目前只有github里的几个关于编译和入门的简单markdown(可能大神都是直接撕源码),这一点同是开源的MNN好一丢丢,至少文档结构清晰,代码

Ctrlturtle的博客 3765

Qt Quick/QML入门到精通_专栏demo对应文章目录(目前50个左右demo/长期更新)

自定义图标下拉列表框的效果如下所示:自定义三态按钮的效果如下所示:传送门:53.qt quick-自定义三态按钮、自定义图标下拉列表框_诺谦的博客-优快云博客传送门:59.qt quick-qml调色板(颜色取色器)实现、自定义QQuickStyle样式_诺谦的博客-优快云博客63.qt quick-QML侧边滑动栏(不需要任何图片资源,支持自定义左右方向和大小)_诺谦的博客-优快云博客_qt实现好看侧边栏。...

抵抗时间扭曲,坚持做一件有意义的事 2万+

第一讲:halcon模板匹配捆绑测量矩形检测芯片针脚

使用halcon模板匹配捆绑测量矩形,检测位置发生变换的芯片针脚缺陷。

uiopmn1的博客 2995

TensorBoard可视化指南:追踪finetune_alexnet_with_tensorflow训练过程

TensorBoard可视化是深度学习训练过程中不可或缺的监控工具,它能帮助开发者直观地追踪模型训练进度、分析模型性能。本文将详细介绍如何在finetune_alexnet_with_tensorflow项目中使用TensorBoard来监控AlexNet微调过程,让您轻松掌握训练状态,优化模型效果。无论您是深度学习新手还是经验丰富的开发者,这篇TensorBoard可视化指南都将为您提供实用的监

gitblog_00367的博客 924

【AutoSAR】【诊断栈】传输层CANTP

一、功能介绍 数据包发送放拆包分段发送 数据包接收方重组 流控 错误检测 二、参考协议 ISO 15765-2 三、数据帧格式 1、协议数据单元(PDU)格式 2、协议数据单元 - PCI格式 四、数据帧传输 1、单帧传输 CAN帧数据长度小于8字节(包括PCI信息) 无流控握手 PCI包含帧类型、数据长度和数据域 未使用字节填充 2、多帧传输 数据长度超过8字节 流控握手 定时控制 CAN帧类型包括: 首帧 流控帧 后继帧 3、多..

专注汽车软件开发、AutoSAR、车载以太网、SOA、EE架构。 1554

Quasar SSR 通用代码(Universal Code)编写指南:跨端一致的开发要点与实践

在 Quasar 应用(@quasar/app-vite)中启用 SSR 模式后,同一份代码既会在 Node.js 服务端运行,又会在浏览器客户端运行,这种"同构 / 通用(universal / isomorphic)"代码的编写方式与纯客户端应用有着本质区别。本指南以 Quasar 官方 SSR 文档为骨架,结合仓库内真实入口模板与 SSR 生产服务器源码,系统讲解服务端数据响应式、生命周期钩

gitblog_00411的博客 722

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

口袋里的AI大脑:MiniCPM-V在移动端部署的终极实战指南

还在为GPU内存不足而烦恼吗?想在自己的手机上跑起强大的多模态大模型吗?今天我们就来聊聊如何让MiniCPM-V这个"口袋级"AI大脑在你的Redmi K70等移动设备上流畅运行!🚀 MiniCPM-V是一款专为**端侧高效部署**设计的视觉语言模型,它能在保持强大性能的同时,将模型大小和计算需求降到最低,让你在普通手机上也能够享受AI带来的便利。无论你是想实现实时OCR识别、多模态对话,还是

gitblog_00855的博客 681

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

突破移动端AI瓶颈:MiniCPM-V在资源受限设备上的高效部署实践

在当今AI技术快速发展的时代,如何在资源受限的移动设备上部署强大的多模态大模型成为开发者面临的重要挑战。MiniCPM-V作为一款专为端侧部署设计的视觉语言模型,通过创新的架构设计和优化策略,成功将GPT-4V级别的多模态理解能力带到了智能手机等移动设备上。本文将从技术原理、部署优化、性能对比到实战案例,全面解析MiniCPM-V在Redmi K70等移动设备上的端侧部署方案。 ## 问题分析:

gitblog_00726的博客 1112

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

如何在Redmi K70上快速部署MiniCPM-V:移动端多模态AI完整指南

MiniCPM-V是一款专为移动设备优化的多模态大语言模型,能够在Redmi K70等中端手机上实现高效的图像和视频理解。本文将为你提供从环境配置到性能优化的完整部署指南,让你在手机端轻松运行强大的AI功能。 ## 为什么选择MiniCPM-V进行移动端部署? MiniCPM-V 4.6版本仅需13亿参数,就能超越Gemma4-E2B-it等更大模型的性能表现。其创新的**视觉token压缩技

gitblog_00724的博客 334

FixRes技术深度解析:解决训练-测试分辨率差异的架构优化方案

在计算机视觉领域,卷积神经网络(CNN)的性能优化一直是研究重点。传统CNN训练和测试阶段通常采用不同的图像分辨率处理策略,这种不一致性导致模型在实际应用中性能下降。Facebook Research团队提出的FixRes项目,通过创新的分辨率对齐技术,有效解决了这一长期存在的技术难题,为多种主流CNN架构带来了显著的性能提升。 ## 核心技术原理:训练-测试分辨率对齐策略 FixRes的核心

gitblog_00120的博客 958

CVNets视觉模型架构演进:从经典CNN到MobileViTv2的3大突破

CVNets作为一个专业的计算机视觉网络训练库,为开发者和技术决策者提供了从经典卷积神经网络到现代视觉Transformer的完整技术演进路径。本文将深入解析CVNets在视觉模型架构方面的三大技术突破,帮助您理解如何在实际项目中平衡模型性能与计算效率。 ## 技术演进:从CNN到ViT的架构革命 计算机视觉模型的发展经历了从传统卷积神经网络到视觉Transformer的深刻变革。CVNets

gitblog_00537的博客 1066

Kronos金融预测模型:如何用AI技术实现精准股票走势分析

在当今快节奏的金融市场中,投资者和分析师面临着海量数据处理和精准预测的挑战。传统分析方法需要逐只股票分析,处理沪深300成分股可能需要数小时,而Kronos金融预测模型能够在8分钟内完成沪深300所有成分股的未来走势分析。作为首个专门为金融市场K线序列设计的开源基础模型,Kronos通过创新的K线标记化技术和自回归预训练机制,为股票预测提供了全新的解决方案。 ## 什么是Kronos金融预测模型

gitblog_00508的博客 273

medium-editor 富文本编辑器的XSS防线:5层HTML净化与安全防护机制深度解析

如果你正在用富文本编辑器接收用户输入,**XSS 攻击**和**HTML 注入**就是必须跨过去的第一道坎。medium-editor 是一个基于 contenteditable API 的 WYSIWYG 富文本编辑器(Medium.com 同款风格),它内置了从"强制纯文本粘贴"到"HTML 片段净化"再到"链接安全校验"的一整套 XSS 防护机制。本文将带你逐层拆解它的 HTML 净化与安全

gitblog_00167的博客 472
上一篇: 【技术综述】一文道尽softmax loss及其变种
下一篇: 【pytorch速成】Pytorch图像分类从模型自定义到测试
言有三
言有三 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄15年 3635粉丝 976原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言有三

三人行必有AI

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值