每日一博 | 图解神秘的 NC4HW4
【GiantPandaCV导语】以卷积和im2col+gemm实现卷积操作举例,来图解深度学习中Tensor的NC4HW4(其实应该是N{C/4+C%4>0?1:0}HW4),写成NC4HW4方便阅读.
什么是NC4HW4?
-
对于卷积操作, 根据计算机内存排布特点, 按行进行处理.处理完一个通道的数据, 转入下一个通道继续按行处理.
-
对于一个nchw格式的Tensor来说, 其在计算机中的内存排布是这样的:
-
使用cpp一次指令处理一个数据, 用来处理卷积操作, 即循环实现乘法相加即可.
-
现在有一条指令处理4组数据的能力, 比如x86结构的sse指令,arm的neon指令.以及GPGPU的OpenGL和OpenCL,单次处理RGBA四组数据. 如果继续使用nchw内存排布的话, 是这样的.
-
根据按行处理特点, 对于Feature和kernel的宽不是4倍数进行处理, 会出现错误. 图中的kernel很明显以已经到了第二行的值。那么有没有方法在按行处理的思想上, 一次处理4个数,而不受影响.答案是有的, 即NC4HW4.即把前4个通道合并在一个通道上, 依次类推, 在通道数不够4的情况下进行补0.
-
经过NC4HW4重排后的Tensor在内存中的排布情况如下:
-
那么, 此时在进行单次指令处理4组数据的处理,就没有问题了.只不过处理结果也是NC4HW4结构的,需要在结果输出加上NC4HW4转nchw.
NC4HW4中使用im2col+gemm实现卷积:
-
im2col+gemm在深度学习中是最常用的对卷积进行加速计算的方案。最早在caffe框架中支持。思路如下:
-
使用im2col+gemm进行计算:
-
对于NC4HW4内存排布的Tensor来说,同样可以采用im2col+gemm来处理. -
有如下卷积,可以使用NC4HW4内存排布方式,使用指令集优化对卷积进行加速.
-
NCHW转NC4HW4.
-
NC4HW4对feature进行im2col
-
NC4HW4对kernel进行im2col
-
使用SSE,Neon,OpenCL或OpenGL实现Gemm.
最后
-
欢迎关注我和BBuf及公众号的小伙伴们一块维护的一个深度学习框架Msnhnet: https://github.com/msnh2012/Msnhnet
推荐阅读
-
多平台轻量级PyTorch模型推理框架MsnhNet -
Pytorch转Msnhnet模型思路分享 -
视觉算法工业部署及优化学习路线分享 -
基于how-to-optimize-gemm初探矩阵乘法优化 -
详解Im2Col+Pack+Sgemm策略更好的优化卷积运算 -
Im2Col+GEMM的改进方法MEC,一种更加高效的卷积计算策略
欢迎关注GiantPandaCV, 在这里你将看到独家的深度学习分享,坚持原创,每天分享我们学习到的新鲜知识。( • ̀ω•́ )✧
有对文章相关的问题,或者想要加入交流群,欢迎添加BBuf微信:
为了方便读者获取资料以及我们公众号的作者发布一些Github工程的更新,我们成立了一个QQ群,二维码如下,感兴趣可以加入。
本文分享自微信公众号 - GiantPandaCV(BBuf233)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Screen To Gif 2.28.1 发布,动画录制软件
Screen to Gif 是一款方便好用的小软件,可以用来快速录制屏幕上的指定区域,将其直接保存为 GIF 动画文件。 目前,Screen To Gif 2.28.1已完成发布,这是一个 bug 修复版本。具体更新内容如下: Bug 修复 打开编辑器窗口会导致一些用户崩溃 不遵守gifs 和 apngs 的循环设置 上传预设面板没有遵循应用程序的主题 More info 已知的问题 更新说明:https://github.com/NickeManarin/ScreenToGif/releases/tag/2.28.1
- 下一篇
PcapXray —— 网络取证工具
PcapXray 是一个网络取证工具,它可以捕获网络数据包,并可视化为包括设备标识的网络图,并突出显示重要的通信和文件操作。 给定一个 Pcap 文件,PcapXray 可以绘制出一个网络图,显示网络中的主机、网络流量,突出显示重要流量和 Tor 流量以及潜在的恶意流量,包括通信中涉及的数据。 支持的组件: 网络图 设备/流量细节展示与分析 恶意流量识别 Tor 流量支持 GUI,可以上传 Pcap 文件并显示网络图 特性: 结构清晰的代码流 考虑内存,数据库不用JSON,而是用SQLite 或其它优秀的数据库 前端使用基于 Web 的平台,如 Django 应用稳定 支持许多协议
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS8编译安装MySQL8.0.19
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Mario游戏-低调大师作品
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果