Chọn toán tử TensorFlow

Vì 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 được. Để 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ố hoạt động 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 hoạt động của TensorFlow yêu cầu phải 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 hoạt động Tensorflow cần thiết. Để 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 đổichạy mô hình TensorFlow Lite 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 hiệu suất và kích thước cũng như những hạn chế đã biết .

Chuyển đổi mô hình

Ví dụ sau đây cho thấy cách tạo mô hình TensorFlow Lite với các hoạt động 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 để hỗ trợ cho các hoạt động TensorFlow chọn lọc, máy khách cũng phải sử dụng thời gian chạy TensorFlow Lite bao gồm thư viện cần thiết của các hoạt động TensorFlow.

Android AAR

Để giảm kích thước nhị phân, vui lòng tạo tệp AAR tùy chỉnh của riêng bạn theo hướng dẫn trong phần tiếp theo . Nếu kích thước nhị phân không phải là mối quan tâm đáng kể, 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 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 .

Sau 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 AAR Android

Để 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ể xây dựng 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 AAR Android với các hoạt động chọn lọc của TensorFlow 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 hoạt động, Bạn cũng có thể xây dựng các tệp ở trên bằng docker .

Từ đó, bạn có thể nhập tệp AAR trực tiếp 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 bạn:

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, hãy đả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 lọc:

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 hàng đêm CocoaPods dành 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 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 phiên bản >= 2.9.0:

-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.xcframework/ios-arm64/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps

Đối với 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 lọc.

  • 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ào Podfile theo hướng dẫn.
  • Thêm cờ liên kết bổ sung như trên.
  • Chạy ứng dụng mẫu 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 hoạt động TensorFlow dành cho iOS chọn lọc có thể được xây dựng bằng Bazel. Trước tiên, hãy làm theo hướng dẫn xây 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.

Sau khi đã định cấu hình không gian làm việc có bật hỗ trợ iOS, bạn có thể sử dụng lệnh sau để xây dựng khung bổ trợ TF ops chọn lọc, có thể được thêm vào bên trên TensorFlowLiteC.framework thông thường. Lưu ý rằng không thể xây dựng khung hoạt động TF chọn lọc 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 ra 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, 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 đang sử dụng Bazel hoặc CMake để xây dựng trình thông dịch TensorFlow Lite, bạn có thể bật ủy quyền 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ó bằng Bazel bằng 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 ủy nhiệm như yêu cầu thông thường với các loại ủy nhiệm khác.

Python

TensorFlow Lite với các hoạt động TensorFlow chọn lọc 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ả các hoạt động dựng sẵn và chọn lọc của TensorFlow, tất cả các tối ưu hóa TensorFlow Lite tương tự và các hoạt động dựng sẵn được tối ưu hóa sẽ có sẵn và có thể sử dụng được với mô hình được chuyển đổi.

Bảng sau đây mô tả thời gian trung bình để chạy suy luận trên MobileNet trên Pixel 2. Thời gian được liệt kê là trung bình 100 lần chạy. Các mục tiêu này được xây dựng cho Android bằng cách sử dụng 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 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 xây dựng 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-kinetics-400 với 8 hoạt động tích hợp TFLite và 3 hoạt động 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 .

Những hạn chế đã biết

  • Các loại không được hỗ trợ: Một số hoạt động TensorFlow nhất định có thể không hỗ trợ toàn bộ các loại đầu vào/đầu ra thường có 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
  • 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