
模型优化
文章平均质量分 93
饭后吃西瓜
这个作者很懒,什么都没留下…
展开
-
图解ncnn实现Winograd卷积
图解ncnn实现Winograd卷积前言上一篇讲了Winograd的基本实现思路, 提到ncnn的实现是使用结论公式描述计算的流程, 用固定已知系数的加法代替矩阵乘法, 除此之外, ncnn的实现还涉及到一系列的内存重排配合SIMD操作提高效率. 本文用多幅图描述ncnn实现Winograd的详细流程. 希望能够帮助大家更好的理解.流程概述Y=AT[(GgGT)⊙(BTdB)]A=AT[U⊙V]A=ATMA(1)Y=A^T[(GgG^T)⊙(B^TdB)]A =A^T[U⊙V]A=A^TMA \t原创 2021-04-27 17:12:26 · 1722 阅读 · 4 评论 -
三种思路实现Winograd卷积, 配上代码的保姆级教程
三种思路实现Winograd卷积, 配上代码你一定能看得懂前言一般我们实现卷积的时候大多采用的方案是im2col+gemm, 除此之外, 还有一种加速方案, 就是Winograd卷积, 目前几乎在所有推理框架里都能找到其实现. Winograd卷积出自一篇2016CVPR论文. 网上相关的博客挺多的, 但是都几乎只是几个公式配几个图, 看完后似懂非懂, 没有对应代码总是会感觉少了点什么, 想去看各个推理框架的代码吧, 又对应不上, 看不懂. 本人经过一段时间的硬啃, 最终实现了Winograd多个思路的原创 2021-04-25 19:27:39 · 5561 阅读 · 11 评论 -
序列化与反序列化之Flatbuffers(二):深入剖析
序列化与反序列化之Flatbuffers(二):深入剖析一: 前言上一篇介绍了Flatbuffers的基本情况和基本使用方法, 现在我们对这个序列化的过程比较感兴趣, 或者说想要知道序列化后这个信息是以什么样形式存储起来了. 在网上也看到一些讲Flatbuffers内部保存结构的, 基本都用的下面这样一张图. 这张图基本意思是对了, 但是细节上不对的!!!我不知道是否是因为版本迭代的缘故, 至少目前2021年4月最新的Flatbuffers细节上与那张图不一样.二: 回顾table Person原创 2021-04-15 11:11:46 · 2426 阅读 · 1 评论 -
序列化与反序列化之Flatbuffers(一):初步使用
序列化与反序列化之Flatbuffers(一):初步使用一: 前言在MNN中, 一个训练好的静态模型是经过Flatbuffers序列化之后保存在硬盘中的. 这带来两个问题: 1.为什么模型信息要序列化不能直接保存 2.其他框架如caffe和onnx都是用Protobuf序列化, 为什么MNN要用Flatbuffers, 有啥优势? 在解答这两个问题之前, 我们先要了解什么是序列化和反序列化.二: 什么是序列化和反序列化什么是序列化和反序列化:序列化是指把一个实例对象变成二进制内容,本质上就是一个原创 2021-04-15 11:07:27 · 8384 阅读 · 2 评论 -
nc4hw4排布配合neon加速im2col+gemm的卷积推理
nc4hw4排布配合neon加速im2col+gemm的卷积推理一:前言一个tensor常见的内存排布有nchw和nhwc,除此之外,MNN还有一种内存排布方式叫做nc4hw4,如何理解这个排布呢?这种排布对性能又有什么提升呢?二:什么是nc4hw4概念本身很简单,两幅图就很能说明.其实nc4hw4准确的说应该是n(c/4)h(w*4).一句话来说就是:沿着c方向取4个数按照w方向排列.如果c不是4的倍数,则全用0补上.三:nc4hw4如何提升卷积推理性能nc4hw4的出现就是为了配合矢量操原创 2021-04-11 17:08:52 · 1374 阅读 · 0 评论 -
模型的图优化
图优化在各种开源推理框架中,我们总能看到有一种graph optimizer技术,主要是对用户想要运行的网络模型进行一种网络结构层面的优化,剔除不需要的Op、融合某些特定的相邻Op、转换某些框架不支持或者实现效率较低的Op等。但是目前网上貌似系统的介绍图优化方向的文章较少,本文是在整理了目前几个开源框架MNN、NCNN、ONNX-Runtime中关于图优化技术后所完成,希望能让大家对图优化有一个大略的了解。前言本文着重介绍是图优化,对于本文出现的Op的定义不作介绍.这些Op名可能是来自于各种框架.原创 2021-04-06 23:07:59 · 1318 阅读 · 2 评论