diff --git a/tensorflow/lite/g3doc/performance/coreml_delegate.md b/tensorflow/lite/g3doc/performance/coreml_delegate.md index 2803b080a13..8d588fb1b1e 100644 --- a/tensorflow/lite/g3doc/performance/coreml_delegate.md +++ b/tensorflow/lite/g3doc/performance/coreml_delegate.md @@ -69,35 +69,42 @@ The Core ML delegate uses C API for Objective-C codes. #### Step 1. Include `coreml_delegate.h`. -```objectivec +```c #include "tensorflow/lite/experimental/delegates/coreml/coreml_delegate.h" ``` #### Step 2. Create a delegate and initialize a TensorFlow Lite Interpreter -After initializing the interpreter, call `interpreter->ModifyGraphWithDelegate` -with initialized Core ML delegate to apply the delegate. +After initializing the interpreter options, call +`TfLiteInterpreterOptionsAddDelegate` with initialized Core ML delegate to apply +the delegate. Then initialize the interpreter with the created option. -```objectivec -// initializer interpreter with model. -tflite::InterpreterBuilder(*model, resolver)(&interpreter); +```c +// Initialize interpreter with model +TfLiteModel* model = TfLiteModelCreateFromFile(model_path); -// Add following section to use the Core ML delegate. -TfLiteCoreMlDelegateOptions options = {}; -delegate = TfLiteCoreMlDelegateCreate(&options); -if (delegate != nullptr) { - interpreter->ModifyGraphWithDelegate(delegate); -} -// ... +// Initialize interpreter with Core ML delegate +TfLiteInterpreterOptions* options = TfLiteInterpreterOptionsCreate(); +TfLiteDelegate* delegate = TfLiteCoreMlDelegateCreate(NULL); // default config +TfLiteInterpreterOptionsAddDelegate(options, delegate); +TfLiteInterpreterOptionsDelete(options); + +TfLiteInterpreter* interpreter = TfLiteInterpreterCreate(model, options); + +TfLiteInterpreterAllocateTensors(interpreter); + +// Run inference ... ``` -#### Step 3. Dispose the delegate when it is no longer used. +#### Step 3. Dispose resources when it is no longer used. Add this code to the section where you dispose of the delegate (e.g. `dealloc` of class). -```objectivec +```c +TfLiteInterpreterDelete(interpreter); TfLiteCoreMlDelegateDelete(delegate); +TfLiteModelDelete(model); ``` ## Best practices @@ -116,17 +123,17 @@ pass `TfLiteCoreMlDelegateAllDevices`. Following example shows how to do this: var options = CoreMLDelegate.Options() options.enabledDevices = .all let coreMLDelegate = CoreMLDelegate(options: options)! -let interpreter: try Interpreter(modelPath: modelPath, - delegates: [coreMLDelegate]) +let interpreter = try Interpreter(modelPath: modelPath, + delegates: [coreMLDelegate]) ``` #### Objective-C -```objectivec +```c TfLiteCoreMlDelegateOptions options; options.enabled_devices = TfLiteCoreMlDelegateAllDevices; -delegate = TfLiteCoreMlDelegateCreate(&options); -interpreter->ModifyGraphWithDelegate(delegate); +TfLiteDelegate* delegate = TfLiteCoreMlDelegateCreate(&options); +// Initialize interpreter with delegate ``` ### Using Metal(GPU) delegate as a fallback. @@ -149,14 +156,14 @@ let interpreter = try Interpreter(modelPath: modelPath, #### Objective-C -```objectivec +```c TfLiteCoreMlDelegateOptions options = {}; delegate = TfLiteCoreMlDelegateCreate(&options); -if (delegate == nullptr) { +if (delegate == NULL) { // Add Metal delegate options if necessary - delegate = TFLGpuDelegateCreate(nullptr); + delegate = TFLGpuDelegateCreate(NULL); } -interpreter->ModifyGraphWithDelegate(delegate); +// Initialize interpreter with delegate ``` The delegate creation logic reads device's machine id (e.g. iPhone11,1) to