卷积的权重(Weight/Kernel/Filter)数据格式采用HWIO/OHWI,还是其他……

田海立@CSDN  2020-10-26

卷积的权重(Weight/Kernel/Filter)的数据格式一般不同于Tensor或Activation数据,有其特定的排布方式。但是这深入到平台(训练和/或推理)内部的机制了,一般大众的使用者不会关心,所以这部分信息很少。本文给出一些指引,实际用到时可以利用《图解NCHW与NHWC数据格式》里的分析方法再去具体理解。

 

一、基本概念

权重/卷积核/过滤器(Weight/Kernel/Filter)中有下面维度:

  • I - Input Channels输入通道
  • H - Filter Height卷积核高度
  • W - Filter Width卷积核宽度
  • O - Output Channels输出通道

 

二、常用权重格式

2.1 TensorFlow

TensorFlow的卷积conv2d的权重格式是HWIO,也就在tf.nn.conv2d里filters定义的:

TF里权重的数据格式是HWIO [Kernel Height, Kernel Width, Input Channels, Output Channels]

 

2.2 TensorFlow Lite

TFLite里conv2d卷积权重的格式是OHWI [Output Channels, Kernel Height, Kernel Width, Input Channels]。

在由TensorFlow模型转换为TFLite模型的过程中,权重也会转换,其实也就是Tensor的Transpose操作。

这部分由TFLite Converter(TOCO)来完成。因为是在Runtime执行前做,不会有online的转换,这个过程不会影响运行时的性能。

 

2.3 TVM

TVM因为要以主流ML框架支持的模型格式做前端(Frontend)支持,所以,TVM有很多这方面的考虑,也有很多有意义的讨论。

可以参考:

TVM对于NCHW的数据格式,Kernel采用OIHW;对于NHWC数据格式,Kernel采用HWIO。

所以,

  • 对于TensorFlow,数据是NHWC格式,Kernel是HWIO格式,TVM完全支持这种情况;
  • 对于TFLite,数据也是NHWC,Kernle却是OHWI,需要把Kernel转换为HWIO;
  • 对于ACL(Arm Compute Library),作为一个Codegen情况较复杂,这里就不展开说了。

 

三、其他话题

1. 以上所述一般针对conv2d的卷积核,depthwise convolution会有所不同。

2. 牵涉格式转换时,这里指的是Transpose操作。Transpose牵涉数据搬移,会耗时,放在Runtime执行前的模型转换(或编译)过程去做,不要影响运行时的性能。

3. HWIO和OHWI的可视化直观展示可以参考《图解NCHW与NHWC数据格式》以及《NCHW与NHWC数据格式之外之nChw8c》里画3-D图,然后再扩充一维到4-D。

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值