![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
AI移动端优化
文章平均质量分 84
just_sort
Acdream.
展开
-
onnx2pytorch和onnx-simplifer新版介绍
【GiantPandaCV导语】本文是ONNX2Pytorch思路分享以及onnx-simplifier新版简要介绍。ONNX2Pytorch工具已经测试了onnx model zoo中的大量分类模型并转换正确,欢迎使用,github地址:https://github.com/BBuf/onnx2nn。GiantPandaCV几个月前遭受恶意举报,今天终于解除封印了。感谢众多粉丝们的长期等待和支持,我们会在此继续分享学习经验。0x0. 背景ONNX作为微软的神经网络模型的开放格式被各个框架广泛应用,包括原创 2021-03-03 08:53:27 · 4886 阅读 · 1 评论 -
ONNX再探
0x0. 前言接着上篇文章,继续探索ONNX。这一节我将主要从盘点ONNX模型部署有哪些常见问题,以及针对这些问题提出一些解决方法,另外本文也会介绍一个可以快速用于ONNX模型推理验证的框架onnxruntime。如果你想用ONNX作为模型转换和部署的工具,可以耐心看下去。今天要讲到的ONNX模型部署碰到的问题大多来自于一些知乎上关于ONNX模型部署的文章以及自己使用ONNX进行模型部署过程中发现的,有一定的实践意义。0x1. 导出ONNX这里以Pytorch为例,来介绍一下要把Pytorch模型导原创 2021-02-28 16:51:04 · 1270 阅读 · 1 评论 -
ONNX初探
0x00. 背景最近看了一些ONNX的资料,一个最大的感受就是这些资料太凌乱了。大多数都是在介绍ONNX模型转换中碰到的坑点以及解决办法。很少有文章可以系统的介绍ONNX的背景,分析ONNX格式,ONNX简化方法等。所以,综合了相当多资料之后我准备写一篇ONNX相关的文章,希望对大家有用。0x01. 什么是ONNX?简单描述一下官方介绍,开放神经网络交换(Open Neural Network Exchange)简称ONNX是微软和Facebook提出用来表示深度学习模型的开放格式。所谓开放就是ONN原创 2021-01-27 23:15:10 · 1318 阅读 · 1 评论 -
如何阅读一个前向推理框架?以NCNN为例。
【GiantPandaCV导语】自NCNN开源以来,其它厂商的端侧推理框架或者搭载特定硬件芯片的工具链层出不穷。如何去繁从简的阅读一个深度学习推理框架十分重要,这篇文章记录了我是如何阅读NCNN框架的,希望对一些不知道如何下手的读者有一点启发。0x00. 想法来源CNN从15年的ResNet在ImageNet比赛中大放异彩,到今天各种层出不穷的网络结构被提出以解决生活中碰到的各种问题。然而,在CNN长期发展过程中,也伴随着很多的挑战,比如如何调整算法使得在特定场景或者说数据集上取得最好的精度,如何将.原创 2020-12-20 12:16:39 · 2302 阅读 · 3 评论 -
道阻且长_再探矩阵乘法优化
【GiantPandaCV导语】本文记录了笔者最近的一些优化gemm的思路和实现,这些思路大多是公开的方案,例如来自how-to-optimize-gemm工程的一些优化手段,来自ncnn的一些优化手段等。最终,笔者目前实现的版本在armv7a上可以达到50%左右的硬件利用率(这个利用率的确还不高,笔者也是一步步学习和尝试,大佬请忽略),本文记录了这些思路以及核心实现方法。改好的行主序代码(x76+armv7a)可以直接访问https://github.com/BBuf/how-to-optimize-ge原创 2020-12-05 19:19:50 · 543 阅读 · 1 评论 -
人脸106点Caffe模型如何部署到MsnhNet
1. 前言MsnhNet之前只支持Pytorch模型直接转换到MsnhNet框架可以运行的模型文件,并且我们在之前的Pytorch转Msnhnet模型思路分享分享了这个转换的思路。最近拿到了一些需要部署在MsnhNet的Caffe模型,所以...原创 2020-11-18 21:56:40 · 429 阅读 · 1 评论 -
基于how-to-optimize-gemm初探矩阵乘法优化
1. 前言这次,我们来聊一个轻松一点的话题,那就是给你一个矩阵A和一个矩阵B,使用矩阵乘法获得目标矩阵C,相信大家都不难写出下面的代码:#define A( i, j ) a[ (i)*lda + (j) ]#define B( i, j ) b[ (i)*ldb + (j) ]#define C( i, j ) c[ (i)*ldc + (j) ]// gemm C = A * B + Cvoid MatrixMultiply(int m, int n, int k, float *a, in原创 2020-11-05 18:26:53 · 1160 阅读 · 0 评论 -
如何判断算法是否有可优化空间?
计算Armv7a架构理论gflops以及自己写的某个算法的gflops的方法,另外提供了一个脚本可以显示native版矩阵乘法各个尺寸对应的gflops。1. 前言之前一直在写一些算法怎么优化,包括算法逻辑甚至是更加底层一些的文章,但是测试工作都做得比较随意,也就是粗略的比较时间。最近准备学习一下矩阵乘法的优化,觉得这种比较方式实际上是看不出太多信息的,比如不知道当前版本的算法在某块指定硬件上是否还存在优化空间。因此,这篇文章尝试向大家介绍另外一个算法加速的评判标准,即算法的浮点峰值(gflops).原创 2020-10-26 23:21:04 · 572 阅读 · 0 评论 -
Im2Col+GEMM的改进方法MEC,一种更加高效的卷积计算策略
1. 前言前面介绍了Im2Col+GEMM来实现卷积以在某些条件下获得更好的访存和计算效率,详见:详解Im2Col+Pack+Sgemm策略更好的优化卷积运算 。然后,最近偶然发现了Im2Col+GEMM的一个改进版本即MEC: Memory-efficient Convolution for Deep Neural Network ,这是发表在ICML 2017年的文章,它主要优化了Im2Col+GEMM计算策略中的内存消耗,并且也能提升一点速度,是一个不错的卷积加速算法。所以我在这里结合论文以及代码实原创 2020-10-10 22:35:21 · 1325 阅读 · 0 评论 -
详解卷积中的Winograd加速算法
1. 为什么会引入WinoGrad?做过ACM/OI的朋友大家应该对FFT并不默认,我们知道对于两个序列的乘法通过FFT可以从原始O(n^2)复杂度变成O(nlogn),所以我们就会想着FFT这个算法是否可以应用到我们计算卷积中来呢?当然是可以的,但是FFT的计算有个问题哦,会引入复数。而移动端是不好处理复数的,对于小卷积核可能减少的计算量和复数运算带来的降速效果是不好说谁会主导的。所以在这种情况下,针对卷积的WinoGrad算法出现了,它不仅可以类似FFT一样降低计算量,它还不会引入复数,使得卷积的运算原创 2020-09-28 16:12:24 · 6819 阅读 · 1 评论 -
AI移动端优化之Im2Col+Pack+Sgemm
1. 前言最近在给MsnhNet贡献Arm端的代码,地址详见:https://github.com/msnh2012/Msnhnet ,然后对于卷积一种最常见的方法就是Im2Col加上Sgemm,我也尝试去实现一把,我参考了NCNN的部分实现并且花了一周业余时间通过手推的方式终于想清楚了这个算法及其Pack优化版本,所以是时候将我的理解分享给想了解这个算法的读者了。2. Im2Col+Sgemm计算卷积原理相信大家对于卷积的概念都非常熟悉了,这里就不再赘述。我说一下一般卷积的计算方式有哪些吧。首先是暴原创 2020-09-13 19:35:12 · 1331 阅读 · 1 评论 -
基于NCNN的3x3可分离卷积再思考盒子滤波
1. 前言前面已经做了一系列实验来优化盒子滤波算法,然后经nihui大佬提醒又获得了2种优化方法,再加上提到过的将原始矩阵进行转置,将盒子滤波的行方向求和进行规避,或者能获得进一步加速。为了验证这些想法,就有了这篇文章。上篇论文我们已经将半径为333的盒子的滤波在A53上优化到了145.92ms145.92ms145.92ms,图像的分辨率是4032×30244032\times 30244032×3024,所以本次系列实验的BaseLine已经明确,接下来就开始新的优化历程吧。2. 将盒子滤波看成卷积原创 2020-08-12 23:49:39 · 589 阅读 · 1 评论 -
【Arm端算法优化笔记】一,一步步优化盒子滤波算法
1. 前言这是我自己做的移动端算法优化笔记的第一篇文章。我入门移动端的时间其实很短,也是今年刚开始接触Neon优化并尝试用Neon来做一些算法加速工作,之前我做过系列的X86上的SSE/AVX算法加速文章分享。但那个系列已经比较久没有更新了,一是因为我日常做的都是和移动端相关的一些算法工作,二是因为我最近变懒了,所以希望新开这个专题重新找到一点分享算法优化文章的热情(笑)。关于这篇文章,其实之前梁德澎作者已经分享过了,即【AI移动端算法优化】二,移动端arm cpu优化学习笔记之一步步优化盒子滤波 ,所原创 2020-08-06 22:45:54 · 1864 阅读 · 2 评论