【问题标题】:Upsampling Tensor for TensorRTTensorRT 的上采样张量
【发布时间】:2020-01-03 13:39:47
【问题描述】:

tensorflow模型转成TensorRT,Tensorflow的ResizeArea(图中upsample)需要实现plugin。

所以 ResizeArea 是在 CUDA 中实现的。 我的 TensorRT 输入是 NCHW 格式。

uff_path = model_to_uff(model_path)
parser.register_input(ModelData.INPUT_NAME, (3, height, width), trt.UffInputOrder.NCHW)
parser.register_output(ModelData.OUTPUT_NAME)
parser.parse(uff_path, network)

所以我的 CUDA 代码实现了 NCHW 重采样。 我想确保我的重采样格式正确。

方法_1

NCHW resizearea(4 次上采样)样本。

channel_1      channel_2        channel_3
3,1,2,0,       0,4,3,1,         2,0,2,3,
3,0,1,2,       0,1,2,1,         2,0,4,2,
4,1,2,2,       1,3,2,4,         2,3,4,2,

channel_1                         channel_2                         channel_3  
3,3,3,3,1,1,1,1,2,2,2,2,0,0,0,0,  0,0,0,0,4,4,4,4,3,3,3,3,1,1,1,1,  2,2,2,2,0,0,0,0,2,2,2,2,3,3,3,3,
3,3,3,3,1,1,1,1,2,2,2,2,0,0,0,0,  0,0,0,0,4,4,4,4,3,3,3,3,1,1,1,1,  2,2,2,2,0,0,0,0,2,2,2,2,3,3,3,3,
3,3,3,3,1,1,1,1,2,2,2,2,0,0,0,0,  0,0,0,0,4,4,4,4,3,3,3,3,1,1,1,1,  2,2,2,2,0,0,0,0,2,2,2,2,3,3,3,3,
3,3,3,3,1,1,1,1,2,2,2,2,0,0,0,0,  0,0,0,0,4,4,4,4,3,3,3,3,1,1,1,1,  2,2,2,2,0,0,0,0,2,2,2,2,3,3,3,3,
3,3,3,3,0,0,0,0,1,1,1,1,2,2,2,2,  0,0,0,0,1,1,1,1,2,2,2,2,1,1,1,1,  2,2,2,2,0,0,0,0,4,4,4,4,2,2,2,2,
3,3,3,3,0,0,0,0,1,1,1,1,2,2,2,2,  0,0,0,0,1,1,1,1,2,2,2,2,1,1,1,1,  2,2,2,2,0,0,0,0,4,4,4,4,2,2,2,2,
3,3,3,3,0,0,0,0,1,1,1,1,2,2,2,2,  0,0,0,0,1,1,1,1,2,2,2,2,1,1,1,1,  2,2,2,2,0,0,0,0,4,4,4,4,2,2,2,2,
3,3,3,3,0,0,0,0,1,1,1,1,2,2,2,2,  0,0,0,0,1,1,1,1,2,2,2,2,1,1,1,1,  2,2,2,2,0,0,0,0,4,4,4,4,2,2,2,2,
4,4,4,4,1,1,1,1,2,2,2,2,2,2,2,2,  1,1,1,1,3,3,3,3,2,2,2,2,4,4,4,4,  2,2,2,2,3,3,3,3,4,4,4,4,2,2,2,2,
4,4,4,4,1,1,1,1,2,2,2,2,2,2,2,2,  1,1,1,1,3,3,3,3,2,2,2,2,4,4,4,4,  2,2,2,2,3,3,3,3,4,4,4,4,2,2,2,2,
4,4,4,4,1,1,1,1,2,2,2,2,2,2,2,2,  1,1,1,1,3,3,3,3,2,2,2,2,4,4,4,4,  2,2,2,2,3,3,3,3,4,4,4,4,2,2,2,2,
4,4,4,4,1,1,1,1,2,2,2,2,2,2,2,2,  1,1,1,1,3,3,3,3,2,2,2,2,4,4,4,4,  2,2,2,2,3,3,3,3,4,4,4,4,2,2,2,2,

对每个像素进行 4 次上采样(例如,第一个像素 3 在水平和垂直方向上进行 4 次上采样)。这被认为是 NCHW 格式上采样。

方法_2

另一种实现方式是 NHWC 格式的上采样。

3 通道数据 (83,86,77) 水平和垂直上采样。

Method_1 是正确的 NCHW 上采样方式吗?

【问题讨论】:

    标签: tensorflow tensorrt


    【解决方案1】:

    看来方法 1 没问题,因为 TensorRT 需要 CHW,如 the docs 中所说,NHWC 是 TF 格式,您是否考虑在插件层中使用 AlignCorners?另请注意,调整大小是最近的邻居,在 pytorch 中我使用 onnx-trt 进行双线性插值,这给出了更好的结果(在分割的情况下,也许你的情况 nn 是好的)。

    【讨论】:

      【解决方案2】:

      过了一段时间。问题解决了。 TensorRT 以 NCHW 格式工作。 Tensorflow 模型采用 NHWC 格式。所以在我的插件中,需要以 NCHW 格式进行上采样,但输出需要更改为 NHWC 格式,以便它可以连接到下一个 Tensorflow 操作。

      【讨论】:

        猜你喜欢
        • 2018-03-20
        • 1970-01-01
        • 1970-01-01
        • 2019-09-17
        • 1970-01-01
        • 2019-01-06
        • 1970-01-01
        • 1970-01-01
        • 2019-11-26
        相关资源
        最近更新 更多