NHWC与NCHW

http://blog.youkuaiyun.com/jningwei/article/details/78156011

区别

NHWC

[batch, in_height, in_width, in_channels]

NCHW

[batch, in_channels, in_height, in_width]

转换

NHWC –> NCHW:

import tensorflow as tf

x = tf.reshape(tf.range(24), [1, 3, 4, 2])
out = tf.transpose(x, [0, 3, 1, 2])

print x.shape
print out.shape
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
(1, 3, 4, 2)
(1, 2, 3, 4)
 
  • 1
  • 2

NCHW –> NHWC:

import tensorflow as tf

x = tf.reshape(tf.range(24), [1, 2, 3, 4])
out = tf.transpose(x, [0, 2, 3, 1])

print x.shape
print out.shape
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
(1, 2, 3, 4)
(1, 3, 4, 2)
### ONNX 模型对 NCHWNHWC 数据格式的支持情况 ONNX(Open Neural Network Exchange)作为一种开放式的神经网络交换格式,旨在使不同框架之间的模型换变得简单高效。对于数据布局的选择上,ONNX 同样支持常见的两种维度顺序:NCHWNHWC。 #### NCHW 格式下的支持状况 当采用 NCHW (batch, channels, height, width) 布局时,在许多深度学习库中被广泛接受并优化过,尤其是在 PyTorch 和 Caffe 中,默认情况下即为此种形式[^2]。因此,如果原始训练是在这些平台上完成的话,则可以直接导出至 ONNX 而无需额外调整输入输出张量结构;而对于 OpenVINO 这样的高性能推理引擎来说,同样能够很好地处理此类格式的数据流[^1]。 #### NHWC 格式下的支持状况 相比之下,虽然 TensorFlow 默认采用了 NHWC (batch, height, width, channels),但在 GPU 上也可以通过配置参数启用 NCHW 方式以获得更好的性能表现[^3]。值得注意的是,尽管如此,为了兼容性和跨平台移植性的考虑,ONNX Runtime 及其生态体系内依然提供了针对 NHWC 的良好支持机制——这意味着无论开发者倾向于哪种内存存储模式,都能够找到合适的解决方案来进行高效的前向传播计算[^4]。 #### 实际应用中的注意事项 考虑到实际应用场景可能涉及多种硬件加速器以及不同的前端后端组合方式,建议在具体项目实施之前仔细查阅目标部署环境的相关文档说明,并根据实际情况做出合理选择。此外,由于某些特定操作节点可能会受到所选格式的影响而表现出差异化的执行效率,故而在构建或迁移模型过程中应当充分测试各种可能性,从而确保最终产品达到预期效果[^5]。 ```python import onnxruntime as ort import numpy as np # 创建一个随机输入样本用于演示 input_data = np.random.randn(1, 3, 224, 224).astype(np.float32) # 加载预训练好的 ONNX 模型文件 session = ort.InferenceSession("model.onnx") # 获取模型输入名称列表 input_name = session.get_inputs()[0].name # 执行推理过程 output = session.run(None, {input_name: input_data}) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值