static FormatSetType _getFormatType()

in tools/converter/source/optimizer/postconvert/AddTensorFormatConverter.cpp [27:123]


static FormatSetType _getFormatType(const OpT* op, MNN_DATA_FORMAT originFormat) {
    switch (op->type) {
        // NC4HW4 Ops with multi-input
        case MNN::OpType_SeqLen2Spatial:
        case MNN::OpType_FmhaV2:
        case MNN::OpType_Convolution:
        case MNN::OpType_Convolution3D:
        case MNN::OpType_ConvolutionDepthwise:
        case MNN::OpType_Deconvolution:
        case MNN::OpType_DeconvolutionDepthwise:
        case MNN::OpType_GridSample:
        case MNN::OpType_PReLU:
        case MNN::OpType_Dilation2D:
            return NC4HW4_SINGLE;
        case MNN::OpType_ConvInt8:
        case MNN::OpType_Pooling:
        case MNN::OpType_Pooling3D:
        case MNN::OpType_ROIPooling:
        case MNN::OpType_ROIAlign:
        case MNN::OpType_Resize:
        case MNN::OpType_SpatialProduct:
        case MNN::OpType_Proposal:
        case MNN::OpType_PriorBox:
        case MNN::OpType_DetectionOutput:
        case MNN::OpType_LRN:
        case MNN::OpType_Interp:
        case MNN::OpType_Crop:
        case MNN::OpType_Scale:
        case MNN::OpType_TfQuantizedConv2D:
        case MNN::OpType_QuantizedDepthwiseConv2D:
        case MNN::OpType_BatchNorm:
        case MNN::OpType_InstanceNorm:
        case MNN::OpType_Moments:
        case MNN::OpType_QuantizedAvgPool:
        case MNN::OpType_QuantizedAdd:
        case MNN::OpType_Int8ToFloat:
        case MNN::OpType_FloatToInt8:
        case MNN::OpType_DepthwiseConvInt8:
        case MNN::OpType_Interp3D:
            return NC4HW4_SINGLE;
        case MNN::OpType_ReLU:
        case MNN::OpType_ReLU6:
        case MNN::OpType_Permute:
        case MNN::OpType_Selu:
        case MNN::OpType_Sigmoid:
        case MNN::OpType_Cast:
        case MNN::OpType_BatchToSpaceND:
        case MNN::OpType_SpaceToBatchND:
        case MNN::OpType_TanH:
        case MNN::OpType_Padding:
        case MNN::OpType_ELU:
        case MNN::OpType_Dropout:
        case MNN::OpType_UnaryOp:
        case MNN::OpType_DepthToSpace:
        case MNN::OpType_SpaceToDepth:
            return COMPABILIT_SINGLE;
        case MNN::OpType_Reshape:
        {
            if (op->main.type == OpParameter_Reshape && op->main.AsReshape()->dims.size() == 4) {
                return COMPABILIT_SINGLE;
            }
            break;
        }
        case MNN::OpType_Slice:
        case MNN::OpType_Concat:
        case MNN::OpType_Eltwise:
            return COMPABILIT_FULL;
        default:
            break;
    }
    if (MNN_DATA_FORMAT_NCHW == originFormat) {
        switch (op->type) {
            case MNN::OpType_Transpose:
            case MNN::OpType_StridedSlice:
            case MNN::OpType_SliceTf:
            case MNN::OpType_Unsqueeze:
            case MNN::OpType_Squeeze:
            case MNN::OpType_Crop:
            case MNN::OpType_Tile:
            case MNN::OpType_Reshape:
            case MNN::OpType_Fill:
            case MNN::OpType_BroadcastTo:
            case MNN::OpType_Padding:
            case MNN::OpType_Flatten:
            case MNN::OpType_ExpandDims:
            case MNN::OpType_ReverseSequence:
                return COMPABILIT_SINGLE;
            case MNN::OpType_Pack:
            case MNN::OpType_Unpack:
            case MNN::OpType_BinaryOp:
                return COMPABILIT_FULL;
            default:
                break;
        }
    }
    return ORIGIN;
}