TensorFlow Lite Core ML temsilcisi, TensorFlow Lite modellerinin Core ML çerçevesinde çalıştırılmasını sağlar ve bu da iOS cihazlarda daha hızlı model çıkarımı sağlar.
Desteklenen iOS sürümleri ve cihazlar:
- iOS 12 ve üstü. Eski iOS sürümlerinde, Core ML temsilcisi otomatik olarak CPU'ya geri döner.
- Varsayılan olarak Core ML temsilcisi, daha hızlı çıkarım için Neural Engine'i kullanmak için yalnızca A12 SoC ve sonraki sürümleri (iPhone Xs ve sonraki sürümleri) olan cihazlarda etkinleştirilecektir. Core ML temsilcisini eski cihazlarda da kullanmak istiyorsanız lütfen en iyi uygulamalara bakın
Desteklenen modeller
Core ML temsilcisi şu anda kayan (FP32 ve FP16) modelleri desteklemektedir.
Core ML temsilcisini kendi modelinizde denemek
Core ML temsilcisi, TensorFlow lite CocoaPods'un gece sürümüne zaten dahil edilmiştir. Core ML temsilcisini kullanmak için TensorFlow lite pod'unuzu CoreML
dosyanıza Podfile
alt spesifikasyonunu içerecek şekilde değiştirin.
target 'YourProjectName'
pod 'TensorFlowLiteSwift/CoreML', '~> 2.4.0' # Or TensorFlowLiteObjC/CoreML
VEYA
# Particularily useful when you also want to include 'Metal' subspec.
target 'YourProjectName'
pod 'TensorFlowLiteSwift', '~> 2.4.0', :subspecs => ['CoreML']
Süratli
let coreMLDelegate = CoreMLDelegate() var interpreter: Interpreter // Core ML delegate will only be created for devices with Neural Engine if coreMLDelegate != nil { interpreter = try Interpreter(modelPath: modelPath, delegates: [coreMLDelegate!]) } else { interpreter = try Interpreter(modelPath: modelPath) }
Amaç-C
// Import module when using CocoaPods with module support @import TFLTensorFlowLite; // Or import following headers manually # import "tensorflow/lite/objc/apis/TFLCoreMLDelegate.h" # import "tensorflow/lite/objc/apis/TFLTensorFlowLite.h" // Initialize Core ML delegate TFLCoreMLDelegate* coreMLDelegate = [[TFLCoreMLDelegate alloc] init]; // Initialize interpreter with model path and Core ML delegate TFLInterpreterOptions* options = [[TFLInterpreterOptions alloc] init]; NSError* error = nil; TFLInterpreter* interpreter = [[TFLInterpreter alloc] initWithModelPath:modelPath options:options delegates:@[ coreMLDelegate ] error:&error]; if (error != nil) { /* Error handling... */ } if (![interpreter allocateTensorsWithError:&error]) { /* Error handling... */ } if (error != nil) { /* Error handling... */ } // Run inference ...
C (2.3.0'a kadar)
#include "tensorflow/lite/delegates/coreml/coreml_delegate.h" // Initialize interpreter with model TfLiteModel* model = TfLiteModelCreateFromFile(model_path); // 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 ... /* ... */ // Dispose resources when it is no longer used. // Add following code to the section where you dispose of the delegate // (e.g. `dealloc` of class). TfLiteInterpreterDelete(interpreter); TfLiteCoreMlDelegateDelete(delegate); TfLiteModelDelete(model);
En iyi uygulamalar
Neural Engine olmayan cihazlarda Core ML temsilcisini kullanma
Varsayılan olarak, Core ML temsilcisi yalnızca cihazda Neural Engine varsa oluşturulur ve temsilci oluşturulmazsa null
döndürür. Core ML temsilcisini diğer ortamlarda (örneğin, simülatör) çalıştırmak istiyorsanız, .all
temsilci oluştururken bir seçenek olarak .all iletin. C++ (ve Objective-C) üzerinde TfLiteCoreMlDelegateAllDevices
. Aşağıdaki örnek bunun nasıl yapılacağını gösterir:
Süratli
var options = CoreMLDelegate.Options() options.enabledDevices = .all let coreMLDelegate = CoreMLDelegate(options: options)! let interpreter = try Interpreter(modelPath: modelPath, delegates: [coreMLDelegate])
Amaç-C
TFLCoreMLDelegateOptions* coreMLOptions = [[TFLCoreMLDelegateOptions alloc] init]; coreMLOptions.enabledDevices = TFLCoreMLDelegateEnabledDevicesAll; TFLCoreMLDelegate* coreMLDelegate = [[TFLCoreMLDelegate alloc] initWithOptions:coreMLOptions]; // Initialize interpreter with delegate
C
TfLiteCoreMlDelegateOptions options; options.enabled_devices = TfLiteCoreMlDelegateAllDevices; TfLiteDelegate* delegate = TfLiteCoreMlDelegateCreate(&options); // Initialize interpreter with delegate
Metal(GPU) temsilcisini yedek olarak kullanma.
Core ML temsilcisi oluşturulmadığında, alternatif olarak performans avantajları elde etmek için Metal temsilcisini kullanmaya devam edebilirsiniz. Aşağıdaki örnek bunun nasıl yapılacağını gösterir:
Süratli
var delegate = CoreMLDelegate() if delegate == nil { delegate = MetalDelegate() // Add Metal delegate options if necessary. } let interpreter = try Interpreter(modelPath: modelPath, delegates: [delegate!])
Amaç-C
TFLDelegate* delegate = [[TFLCoreMLDelegate alloc] init]; if (!delegate) { // Add Metal delegate options if necessary delegate = [[TFLMetalDelegate alloc] init]; } // Initialize interpreter with delegate
C
TfLiteCoreMlDelegateOptions options = {}; delegate = TfLiteCoreMlDelegateCreate(&options); if (delegate == NULL) { // Add Metal delegate options if necessary delegate = TFLGpuDelegateCreate(NULL); } // Initialize interpreter with delegate
Temsilci oluşturma mantığı, Neural Engine kullanılabilirliğini belirlemek için cihazın makine kimliğini (ör. iPhone11,1) okur. Daha fazla ayrıntı için koda bakın. Alternatif olarak, DeviceKit gibi diğer kitaplıkları kullanarak kendi reddetme listesi aygıtlarınızı uygulayabilirsiniz.
Eski Core ML sürümünü kullanma
iOS 13, Core ML 3'ü desteklese de, Core ML 2 model belirtimi ile dönüştürüldüğünde model daha iyi çalışabilir. Hedef dönüştürme sürümü varsayılan olarak en son sürüme ayarlanmıştır, ancak bunu temsilci seçeneğinde coreMLVersion
(Swift'te, coreml_version
C API'de) eski sürüme ayarlayarak değiştirebilirsiniz.
Desteklenen işlemler
Aşağıdaki işlemler Core ML temsilcisi tarafından desteklenir.
- Ekle
- Yalnızca belirli şekiller yayınlanabilir. Core ML tensör düzeninde, aşağıdaki tensör şekilleri yayınlanabilir.
[B, C, H, W]
,[B, C, 1, 1]
,[B, 1, H, W]
,[B, 1, 1, 1]
.
- Yalnızca belirli şekiller yayınlanabilir. Core ML tensör düzeninde, aşağıdaki tensör şekilleri yayınlanabilir.
- OrtalamaHavuz2D
- concat
- Birleştirme kanal ekseni boyunca yapılmalıdır.
- Dönş2D
- Ağırlıklar ve bias sabit olmalıdır.
- DerinlikDönüş2D
- Ağırlıklar ve bias sabit olmalıdır.
- FullyConnected (diğer adıyla Yoğun veya İç Ürün)
- Ağırlıklar ve sapma (varsa) sabit olmalıdır.
- Yalnızca tek partili durumu destekler. Giriş boyutları, son boyut hariç 1 olmalıdır.
- sert
- Lojistik (aka Sigmoid)
- MaxPool2D
- MirrorPad
- Yalnızca
REFLECT
modlu 4D giriş desteklenir. Dolgu sabit olmalıdır ve yalnızca H ve W boyutları için izin verilir.
- Yalnızca
- Mul
- Yalnızca belirli şekiller yayınlanabilir. Core ML tensör düzeninde, aşağıdaki tensör şekilleri yayınlanabilir.
[B, C, H, W]
,[B, C, 1, 1]
,[B, 1, H, W]
,[B, 1, 1, 1]
.
- Yalnızca belirli şekiller yayınlanabilir. Core ML tensör düzeninde, aşağıdaki tensör şekilleri yayınlanabilir.
- Pad ve PadV2
- Yalnızca 4D girişi desteklenir. Dolgu sabit olmalıdır ve yalnızca H ve W boyutları için izin verilir.
- Relu
- ReluN1To1
- Relu6
- yeniden şekillendir
- Yalnızca hedef Core ML sürümü 2 olduğunda desteklenir, Core ML 3 hedeflenirken desteklenmez.
- Yeniden BoyutlandırBilinear
- SoftMax
- Tan
- TranspozeDönüşüm
- Ağırlıklar sabit olmalıdır.
Geri bildirim
Sorunlar için lütfen yeniden oluşturmak için gerekli tüm ayrıntıları içeren bir GitHub sorunu oluşturun.
SSS
- Bir grafik desteklenmeyen işlemler içeriyorsa CoreML temsilcisi CPU'ya geri dönüşü destekler mi?
- Evet
- CoreML temsilcisi iOS Simulator'da çalışır mı?
- Evet. Kitaplık, bir simülatör üzerinde çalışabilmesi için x86 ve x86_64 hedeflerini içerir, ancak CPU üzerinde performans artışı görmezsiniz.
- TensorFlow Lite ve CoreML temsilcisi MacOS'u destekliyor mu?
- TensorFlow Lite yalnızca iOS'ta test edilir, ancak MacOS'ta test edilmez.
- Özel TF Lite işlemleri destekleniyor mu?
- Hayır, CoreML temsilcisi özel işlemleri desteklemez ve CPU'ya geri döner.
API'ler
- Core ML temsilcisi Swift API'si
- Core ML temsilcisi C API'si
- Bu, Objective-C kodları için kullanılabilir. ~~~