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;
}