in mlmodel/src/Utils.cpp [711:769]
bool CoreML::isIOS12NeuralNetworkLayer(const Specification::NeuralNetworkLayer& layer) {
// Return True if the NN layer is from the set exposed in iOS 12
switch (layer.layer_case()) {
case Specification::NeuralNetworkLayer::LayerCase::kConvolution:
return (layer.input().size() == 1);
case Specification::NeuralNetworkLayer::LayerCase::kInnerProduct:
return !layer.innerproduct().int8dynamicquantize();
case Specification::NeuralNetworkLayer::LayerCase::kBatchnorm:
case Specification::NeuralNetworkLayer::LayerCase::kActivation:
case Specification::NeuralNetworkLayer::LayerCase::kPooling:
case Specification::NeuralNetworkLayer::LayerCase::kPadding:
case Specification::NeuralNetworkLayer::LayerCase::kConcat:
case Specification::NeuralNetworkLayer::LayerCase::kLrn:
case Specification::NeuralNetworkLayer::LayerCase::kSoftmax:
case Specification::NeuralNetworkLayer::LayerCase::kSplit:
case Specification::NeuralNetworkLayer::LayerCase::kAdd:
case Specification::NeuralNetworkLayer::LayerCase::kMultiply:
case Specification::NeuralNetworkLayer::LayerCase::kUnary:
case Specification::NeuralNetworkLayer::LayerCase::kUpsample:
if (layer.upsample().linearupsamplemode() != Specification::UpsampleLayerParams_LinearUpsampleMode_DEFAULT) {
return false;
}
if (layer.upsample().fractionalscalingfactor_size() > 0) {
return false;
}
case Specification::NeuralNetworkLayer::LayerCase::kBias:
case Specification::NeuralNetworkLayer::LayerCase::kL2Normalize:
case Specification::NeuralNetworkLayer::LayerCase::kReshape:
case Specification::NeuralNetworkLayer::LayerCase::kFlatten:
case Specification::NeuralNetworkLayer::LayerCase::kPermute:
case Specification::NeuralNetworkLayer::LayerCase::kReduce:
case Specification::NeuralNetworkLayer::LayerCase::kLoadConstant:
case Specification::NeuralNetworkLayer::LayerCase::kScale:
case Specification::NeuralNetworkLayer::LayerCase::kSimpleRecurrent:
case Specification::NeuralNetworkLayer::LayerCase::kGru:
case Specification::NeuralNetworkLayer::LayerCase::kUniDirectionalLSTM:
case Specification::NeuralNetworkLayer::LayerCase::kBiDirectionalLSTM:
case Specification::NeuralNetworkLayer::LayerCase::kCrop:
case Specification::NeuralNetworkLayer::LayerCase::kAverage:
case Specification::NeuralNetworkLayer::LayerCase::kMax:
case Specification::NeuralNetworkLayer::LayerCase::kMin:
case Specification::NeuralNetworkLayer::LayerCase::kDot:
case Specification::NeuralNetworkLayer::LayerCase::kMvn:
case Specification::NeuralNetworkLayer::LayerCase::kEmbedding:
case Specification::NeuralNetworkLayer::LayerCase::kSequenceRepeat:
case Specification::NeuralNetworkLayer::LayerCase::kReorganizeData:
if (layer.reorganizedata().mode() == Specification::ReorganizeDataLayerParams::PIXEL_SHUFFLE) {
return false;
}
case Specification::NeuralNetworkLayer::LayerCase::kSlice:
case Specification::NeuralNetworkLayer::LayerCase::kCustom:
case Specification::NeuralNetworkLayer::kResizeBilinear:
case Specification::NeuralNetworkLayer::kCropResize:
return true;
default:
return false;
}
}