mirror of
https://github.com/opencv/opencv.git
synced 2024-12-15 01:39:10 +08:00
a40ceff215
Modified TFLite parser for the new dnn engine #26330 The new dnn graph is creating just by defining input and output names of each layer. Some TFLite layers has fused activation, which doesn't have layer name and input and output names. Also some layers require additional preprocessing layers (e.g. NHWC -> NCHW). All these layers should be added to the graph with some unique layer and input and output names. I solve this problem by adding additionalPreLayer and additionalPostLayer layers. If a layer has a fused activation, I add additionalPostLayer and change input and output names this way: **original**: conv_relu(conv123, conv123_input, conv123_output) **new**: conv(conv123, conv123_input, conv123_output_additional_post_layer) + relu(conv123_relu, conv1_output_additional_post_layer, conv123_output) If a layer has additional preprocessing layer, I change input and output names this way: **original**: permute_reshape(reshape345, reshape345_input, reshape345_output) **new**: permute(reshape345_permute, reshape345_input, reshape345_input_additional_pre_layer) + reshape(reshape345, reshape345_input_additional_pre_layer, reshape345_output) ### Pull Request Readiness Checklist See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request - [x] I agree to contribute to the project under Apache 2 License. - [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV - [x] The PR is proposed to the proper branch - [ ] There is a reference to the original bug report and related work - [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable Patch to opencv_extra has the same branch name. - [x] The feature is well documented and sample code can be built with the project CMake
50 lines
3.4 KiB
JSON
50 lines
3.4 KiB
JSON
{
|
|
"func_arg_fix" : {
|
|
"Dnn": {
|
|
"(Net*)readNetFromCaffe:(NSString*)prototxt caffeModel:(NSString*)caffeModel" : { "readNetFromCaffe" : {"name" : "readNetFromCaffeFile"} },
|
|
"(Net*)readNetFromCaffe:(ByteVector*)bufferProto bufferModel:(ByteVector*)bufferModel" : { "readNetFromCaffe" : {"name" : "readNetFromCaffeBuffer"} },
|
|
"(Net*)readNetFromDarknet:(NSString*)cfgFile darknetModel:(NSString*)darknetModel" : { "readNetFromDarknet" : {"name" : "readNetFromDarknetFile"} },
|
|
"(Net*)readNetFromDarknet:(ByteVector*)bufferCfg bufferModel:(ByteVector*)bufferModel" : { "readNetFromDarknet" : {"name" : "readNetFromDarknetBuffer"} },
|
|
"(Net*)readNetFromONNX:(NSString*)onnxFile engine:(int)engine" : { "readNetFromONNX" : {"name" : "readNetFromONNXFile"} },
|
|
"(Net*)readNetFromONNX:(ByteVector*)buffer engine:(int)engine" : { "readNetFromONNX" : {"name" : "readNetFromONNXBuffer"} },
|
|
"(Net*)readNetFromTensorflow:(NSString*)model config:(NSString*)config" : { "readNetFromTensorflow" : {"name" : "readNetFromTensorflowFile"} },
|
|
"(Net*)readNetFromTensorflow:(ByteVector*)bufferModel bufferConfig:(ByteVector*)bufferConfig" : { "readNetFromTensorflow" : {"name" : "readNetFromTensorflowBuffer"} },
|
|
"(Net*)readNetFromTFLite:(NSString*)model engine:(int)engine" : { "readNetFromTFLite" : {"name" : "readNetFromTFLiteFile"} },
|
|
"(Net*)readNetFromTFLite:(ByteVector*)buffer engine:(int)engine" : { "readNetFromTFLite" : {"name" : "readNetFromTFLiteBuffer"} }
|
|
},
|
|
"Net": {
|
|
"(void)forward:(NSMutableArray<Mat*>*)outputBlobs outputName:(NSString*)outputName" : { "forward" : {"name" : "forwardOutputBlobs"} },
|
|
"(void)forward:(NSMutableArray<Mat*>*)outputBlobs outBlobNames:(NSArray<NSString*>*)outBlobNames" : { "forward" : {"name" : "forwardOutputBlobs"} },
|
|
"(void)forwardAndRetrieve:(NSMutableArray<NSMutableArray<Mat*>*>*)outputBlobs outBlobNames:(NSArray<NSString*>*)outBlobNames" : { "forward" : {"swift_name" : "forwardAndRetrieve"} },
|
|
"(Layer*)getLayer:(NSString*)layerName" : { "getLayer" : {"name" : "getLayerByName"} },
|
|
"(Layer*)getLayer:(DictValue*)layerId" : { "getLayer" : {"name" : "getLayerByDictValue"} },
|
|
"(Mat*)getParam:(NSString*)layerName numParam:(int)numParam" : { "getParam" : {"name" : "getParamByName"} },
|
|
"(void)setParam:(NSString*)layerName numParam:(int)numParam blob:(Mat*)blob" : { "setParam" : {"name" : "setParamByName"} }
|
|
}
|
|
},
|
|
"type_dict": {
|
|
"MatShape": {
|
|
"objc_type": "IntVector*",
|
|
"to_cpp": "cv::MatShape(%(n)s.nativeRef)",
|
|
"from_cpp": "[IntVector fromNative:(std::vector<int>)%(n)s]"
|
|
},
|
|
"vector_MatShape": {
|
|
"objc_type": "IntVector*",
|
|
"to_cpp": "cv::MatShape(%(n)s.nativeRef)",
|
|
"from_cpp": "[IntVector fromNative:(std::vector<int>)%(n)s]",
|
|
"v_type": "MatShape"
|
|
},
|
|
"vector_vector_MatShape": {
|
|
"objc_type": "IntVector*",
|
|
"to_cpp": "cv::MatShape(%(n)s.nativeRef)",
|
|
"from_cpp": "[IntVector fromNative:(std::vector<int>)%(n)s]",
|
|
"v_v_type": "MatShape"
|
|
},
|
|
"LayerId": {
|
|
"objc_type": "DictValue*",
|
|
"to_cpp": "*(cv::dnn::DictValue*)(%(n)s.nativePtr)",
|
|
"from_cpp": "[DictValue fromNative:%(n)s]"
|
|
}
|
|
}
|
|
}
|