Do thư viện toán tử dựng sẵn TensorFlow Lite chỉ hỗ trợ một số lượng hạn chế toán tử TensorFlow nên không phải mọi mô hình đều có thể chuyển đổi. Để biết chi tiết, hãy tham khảo khả năng tương thích của nhà điều hành .
Để cho phép chuyển đổi, người dùng có thể cho phép sử dụng một số op TensorFlow nhất định trong mô hình TensorFlow Lite của họ. Tuy nhiên, việc chạy các mô hình TensorFlow Lite với các op của TensorFlow yêu cầu kéo vào thời gian chạy TensorFlow cốt lõi, điều này làm tăng kích thước nhị phân của trình thông dịch TensorFlow Lite. Đối với Android, bạn có thể tránh điều này bằng cách chỉ xây dựng có chọn lọc các op Tensorflow bắt buộc. Để biết chi tiết, hãy tham khảo giảm kích thước nhị phân .
Tài liệu này phác thảo cách chuyển đổi và chạy mô hình TensorFlow Lite có chứa các hoạt động của TensorFlow trên nền tảng bạn chọn. Nó cũng thảo luận về các số liệu về hiệu suất và kích thước cũng như các giới hạn đã biết .
Chuyển đổi một mô hình
Ví dụ sau đây cho thấy cách tạo mô hình TensorFlow Lite với các op TensorFlow được chọn.
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.target_spec.supported_ops = [
tf.lite.OpsSet.TFLITE_BUILTINS, # enable TensorFlow Lite ops.
tf.lite.OpsSet.SELECT_TF_OPS # enable TensorFlow ops.
]
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)
Chạy suy luận
Khi sử dụng mô hình TensorFlow Lite đã được chuyển đổi với sự hỗ trợ cho các hoạt động TensorFlow chọn lọc, khách hàng cũng phải sử dụng thời gian chạy TensorFlow Lite bao gồm thư viện các hoạt động TensorFlow cần thiết.
AAR Android
Để giảm kích thước nhị phân, vui lòng tạo các tệp AAR tùy chỉnh của riêng bạn như được hướng dẫn trong phần tiếp theo . Nếu kích thước nhị phân không phải là vấn đề đáng lo ngại, thì chúng tôi khuyên bạn nên sử dụng AAR dựng sẵn với các hoạt động của TensorFlow được lưu trữ tại MavenCentral .
Bạn có thể chỉ định điều này trong phần phụ thuộc build.gradle
của mình bằng cách thêm nó cùng với TensorFlow Lite AAR tiêu chuẩn như sau:
dependencies {
implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
// This dependency adds the necessary TF op support.
implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.0.0-nightly-SNAPSHOT'
}
Để sử dụng ảnh chụp nhanh hàng đêm, hãy đảm bảo rằng bạn đã thêm kho lưu trữ ảnh chụp nhanh Sonatype .
Khi bạn đã thêm phần phụ thuộc, đại biểu cần thiết để xử lý các hoạt động TensorFlow của biểu đồ sẽ được cài đặt tự động cho các biểu đồ yêu cầu chúng.
android {
defaultConfig {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
Xây dựng Android AAR
Để giảm kích thước nhị phân hoặc các trường hợp nâng cao khác, bạn cũng có thể tạo thư viện theo cách thủ công. Giả sử môi trường xây dựng TensorFlow Lite đang hoạt động , hãy xây dựng Android AAR với các hoạt động TensorFlow đã chọn như sau:
sh tensorflow/lite/tools/build_aar.sh \
--input_models=/a/b/model_one.tflite,/c/d/model_two.tflite \
--target_archs=x86,x86_64,arm64-v8a,armeabi-v7a
Thao tác này sẽ tạo tệp AAR bazel-bin/tmp/tensorflow-lite.aar
cho các hoạt động tùy chỉnh và tích hợp sẵn của TensorFlow Lite; và tạo tệp AAR bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar
cho các hoạt động của TensorFlow. Nếu bạn không có môi trường xây dựng đang hoạt động, Bạn cũng có thể tạo các tệp ở trên bằng docker .
Từ đó, bạn có thể nhập trực tiếp tệp AAR vào dự án của mình hoặc xuất bản tệp AAR tùy chỉnh lên kho lưu trữ Maven cục bộ của mình:
mvn install:install-file \
-Dfile=bazel-bin/tmp/tensorflow-lite.aar \
-DgroupId=org.tensorflow \
-DartifactId=tensorflow-lite -Dversion=0.1.100 -Dpackaging=aar
mvn install:install-file \
-Dfile=bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar \
-DgroupId=org.tensorflow \
-DartifactId=tensorflow-lite-select-tf-ops -Dversion=0.1.100 -Dpackaging=aar
Cuối cùng, trong build.gradle
của ứng dụng, đảm bảo bạn có phần phụ thuộc mavenLocal()
và thay thế phần phụ thuộc TensorFlow Lite tiêu chuẩn bằng phần phụ thuộc có hỗ trợ cho các hoạt động TensorFlow đã chọn:
allprojects {
repositories {
mavenCentral()
maven { // Only for snapshot artifacts
name 'ossrh-snapshot'
url 'https://oss.sonatype.org/content/repositories/snapshots'
}
mavenLocal()
}
}
dependencies {
implementation 'org.tensorflow:tensorflow-lite:0.1.100'
implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.1.100'
}
iOS
Sử dụng CocoaPods
TensorFlow Lite cung cấp các hoạt động TF chọn lọc dựng sẵn hàng đêm CocoaPods cho arm64
mà bạn có thể tin cậy cùng với TensorFlowLiteSwift
hoặc TensorFlowLiteObjC
CocoaPods.
# In your Podfile target:
pod 'TensorFlowLiteSwift' # or 'TensorFlowLiteObjC'
pod 'TensorFlowLiteSelectTfOps', '~> 0.0.1-nightly'
Sau khi chạy pod install
, bạn cần cung cấp một cờ liên kết bổ sung để buộc tải khung hoạt động TF đã chọn vào dự án của bạn. Trong dự án Xcode của bạn, hãy đi tới Build Settings
-> Other Linker Flags
và thêm:
Đối với các phiên bản >= 2.9.0:
-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.xcframework/ios-arm64/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps
Đối với các phiên bản <2.9.0:
-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps
Sau đó, bạn có thể chạy bất kỳ mô hình nào được chuyển đổi bằng SELECT_TF_OPS
trong ứng dụng iOS của mình. Ví dụ: bạn có thể sửa đổi ứng dụng iOS Phân loại hình ảnh để kiểm tra tính năng hoạt động TF đã chọn.
- Thay thế tệp mô hình bằng tệp được chuyển đổi có bật
SELECT_TF_OPS
. - Thêm phần phụ thuộc
TensorFlowLiteSelectTfOps
vàoPodfile
theo hướng dẫn. - Thêm cờ liên kết bổ sung như trên.
- Chạy ứng dụng ví dụ và xem mô hình có hoạt động chính xác không.
Sử dụng Bazel + Xcode
TensorFlow Lite với các tùy chọn TensorFlow chọn lọc dành cho iOS có thể được xây dựng bằng Bazel. Trước tiên, hãy làm theo hướng dẫn bản dựng iOS để định cấu hình chính xác không gian làm việc Bazel và tệp .bazelrc
của bạn.
Khi bạn đã định cấu hình không gian làm việc với hỗ trợ iOS được bật, bạn có thể sử dụng lệnh sau để xây dựng khung bổ trợ hoạt động TF đã chọn, khung này có thể được thêm vào bên trên TensorFlowLiteC.framework
thông thường. Lưu ý rằng khung hoạt động TF đã chọn không thể được xây dựng cho kiến trúc i386
, vì vậy bạn cần cung cấp rõ ràng danh sách các kiến trúc đích ngoại trừ i386
.
bazel build -c opt --config=ios --ios_multi_cpus=arm64,x86_64 \
//tensorflow/lite/ios:TensorFlowLiteSelectTfOps_framework
Điều này sẽ tạo khung trong thư mục bazel-bin/tensorflow/lite/ios/
. Bạn có thể thêm khung mới này vào dự án Xcode của mình bằng cách làm theo các bước tương tự được mô tả trong phần cài đặt dự án Xcode trong hướng dẫn xây dựng iOS.
Sau khi thêm khung vào dự án ứng dụng của bạn, một cờ liên kết bổ sung phải được chỉ định trong dự án ứng dụng của bạn để buộc tải khung hoạt động TF đã chọn. Trong dự án Xcode của bạn, hãy đi tới Build Settings
-> Other Linker Flags
và thêm:
-force_load <path/to/your/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps>
C/C++
Nếu bạn đang sử dụng Bazel hoặc CMake để xây dựng trình thông dịch TensorFlow Lite, thì bạn có thể bật ủy nhiệm Flex bằng cách liên kết thư viện chia sẻ đại biểu TensorFlow Lite Flex. Bạn có thể xây dựng nó với Bazel như lệnh sau.
bazel build -c opt --config=monolithic tensorflow/lite/delegates/flex:tensorflowlite_flex
Lệnh này tạo thư viện dùng chung sau trong bazel-bin/tensorflow/lite/delegates/flex
.
Nền tảng | tên thư viện |
---|---|
Linux | libtensorflowlite_flex.so |
hệ điều hành Mac | libtensorflowlite_flex.dylib |
các cửa sổ | tensorflowlite_flex.dll |
Lưu ý rằng TfLiteDelegate
cần thiết sẽ được cài đặt tự động khi tạo trình thông dịch trong thời gian chạy miễn là thư viện dùng chung được liên kết. Không cần thiết phải cài đặt rõ ràng phiên bản đại biểu như thường được yêu cầu với các loại đại biểu khác.
con trăn
TensorFlow Lite với các tùy chọn TensorFlow đã chọn sẽ được cài đặt tự động với gói pip TensorFlow . Bạn cũng có thể chọn chỉ cài đặt gói pip Phiên dịch TensorFlow Lite .
số liệu
Hiệu suất
Khi sử dụng kết hợp cả hai ops dựng sẵn và chọn lọc của TensorFlow, tất cả các tối ưu hóa TensorFlow Lite giống nhau và ops dựng sẵn được tối ưu hóa sẽ khả dụng và có thể sử dụng được với mô hình đã chuyển đổi.
Bảng sau đây mô tả thời gian trung bình cần thiết để chạy suy luận trên MobileNet trên Pixel 2. Thời gian được liệt kê là trung bình của 100 lần chạy. Các mục tiêu này được tạo cho Android bằng các cờ: --config=android_arm64 -c opt
.
Xây dựng | Thời gian (mili giây) |
---|---|
Chỉ các hoạt động tích hợp sẵn ( TFLITE_BUILTIN ) | 260,7 |
Chỉ sử dụng các hoạt động TF ( SELECT_TF_OPS ) | 264,5 |
kích thước nhị phân
Bảng sau đây mô tả kích thước nhị phân của TensorFlow Lite cho mỗi bản dựng. Các mục tiêu này được tạo cho Android bằng cách sử dụng --config=android_arm -c opt
.
Xây dựng | Kích thước nhị phân C++ | Kích thước APK Android |
---|---|---|
Chỉ các hoạt động tích hợp sẵn | 796 KB | 561 KB |
Hoạt động tích hợp + hoạt động TF | 23,0 MB | 8,0 MB |
Hoạt động tích hợp + hoạt động TF (1) | 4,1 MB | 1,8 MB |
(1) Các thư viện này được xây dựng có chọn lọc cho mô hình i3d-kinetic-400 với 8 op nội trang TFLite và 3 op Tensorflow. Để biết thêm chi tiết, vui lòng xem phần Giảm kích thước nhị phân TensorFlow Lite .
hạn chế đã biết
- Các loại không được hỗ trợ: Một số op TensorFlow nhất định có thể không hỗ trợ tập hợp đầy đủ các loại đầu vào/đầu ra thường có sẵn trong TensorFlow.
cập nhật
- Phiên bản 2.6
- Hỗ trợ cho các toán tử dựa trên thuộc tính GraphDef và khởi tạo tài nguyên HashTable đã được cải thiện.
- Phiên bản 2.5
- Bạn có thể áp dụng một tối ưu hóa được gọi là lượng tử hóa sau đào tạo
- Phiên bản 2.4
- Khả năng tương thích với các đại biểu tăng tốc phần cứng đã được cải thiện