创建 IConvolutionLayer 之后记得设置步长和零填充

error as follows:

[06/17/2021-11:30:13] [E] [TRT] (Unnamed Layer* 88) [ElementWise]: elementwise inputs must have same dimensions or follow broadcast rules (input dimensions were [256,56,56] and [256,54,54]).

Cause:

Forgot to set stride and padding after IConvolutionLayer creation. The default stride(0,0) and padding(1,1) of IConvolutionLayer can be found in 'NvInfer.h':

    TRT_DEPRECATED virtual DimsHW getStride() const TRTNOEXCEPT = 0;

    //!
    //! rief Set the padding of the convolution.
    //!
    //! The input will be zero-padded by this number of elements in the height and width directions.
    //! Padding is symmetric.
    //!
    //! Default: (0,0)

    TRT_DEPRECATED virtual DimsHW getPadding() const TRTNOEXCEPT = 0;

    //!
    //! rief Set the number of groups for a convolution.
    //!
    //! The input tensor channels are  divided into p nbGroups groups, and a convolution is executed for each group,
    //! using a filter per group. The results of the group convolutions are concatenated to form the output.
    //!
    //! 
ote When using groups in int8 mode, the size of the groups (i.e. the channel count divided by the group
    //! count) must be a multiple of 4 for both input and output.
    //!
    //! Default: 1

Solution: set stride and padding

    IConvolutionLayer* cmap_att = network->addConvolutionNd(*cmap_up_3->getOutput(0), 256, DimsHW{3,3}, weightMap["1.cmap_att.weight"], weightMap["1.cmap_att.bias"]);
    cmap_att->setStrideNd(DimsHW{1,1});
    cmap_att->setPaddingNd(DimsHW{1,1});

Others: how to show output dimension of each layer when defining Network in TensorRT using C++ API

    std::cout << "cmap_up_3_dimMAX:" << cmap_up_3->getOutput(0)->getDimensions().nbDims << std::endl; // 3
    std::cout << "cmap_up_3_dim0:" << cmap_up_3->getOutput(0)->getDimensions().d[0] << std::endl;
    std::cout << "cmap_up_3_dim1:" << cmap_up_3->getOutput(0)->getDimensions().d[1] << std::endl;
    std::cout << "cmap_up_3_dim2:" << cmap_up_3->getOutput(0)->getDimensions().d[2] << std::endl;
原文地址:https://www.cnblogs.com/mrlonely2018/p/14892795.html