Chọn toán tử TensorFlow

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Vì thư viện toán tử nội trang TensorFlow Lite chỉ hỗ trợ một số giới hạn toán tử TensorFlow, 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 các 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 hoạt động TensorFlow yêu cầu ké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ỉ tạo một cách chọn lọc các hoạt động 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 đổichạy mô hình TensorFlow Lite chứa các hoạt động TensorFlow trên nền tảng bạn chọn. Nó cũng thảo luận về các chỉ số hiệu suất và kích thước cũng như các hạn chế đã 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 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 với sự hỗ trợ cho các hoạt động TensorFlow được chọn, 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ầ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 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à mối quan tâm đáng kể, chúng tôi khuyên bạn nên sử dụng AAR được tạo sẵn với 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 .

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 đồ thị sẽ được tự động cài đặt cho các đồ thị 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ể 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 Android AAR với các hoạt động TensorFlow được 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à cài sẵn TensorFlow Lite; và tạo tệp AAR bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar cho hoạt động TensorFlow. Nếu bạn không có môi trường xây dựng làm việc, Bạn cũng có thể tạo các tệp ở trên bằng docker .

Từ đó, bạn có thể nhập các tệp AAR trực tiếp vào dự án của mình hoặc xuất bản các tệp AAR tùy chỉnh vào 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ợ các hoạt động TensorFlow được 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 lựa chọn hàng đêm CocoaPods được tạo sẵn cho arm64 , mà bạn có thể phụ thuộc vào 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ờ trình liên kết bổ sung để buộc tải khung hoạt động TF đã chọn vào dự án của mình. Trong dự án Xcode của bạn, đ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 sẽ 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à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 hay không.

Sử dụng Bazel + Xcode

TensorFlow Lite với một số hoạt động TensorFlow dành cho iOS có thể được xây dựng bằng cách sử dụ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.

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ợ TF hoạt động được chọn, có thể được thêm vào trên khung TensorFlowLiteC.framework thông thường. Lưu ý rằng khung hoạt động TF được 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 mục tiêu ngoại trừ i386 .

bazel build -c opt --config=ios --ios_multi_cpus=arm64,x86_64 \
  //tensorflow/lite/ios:TensorFlowLiteSelectTfOps_framework

Thao tác này sẽ tạo khung trong thư mục bazel-bin/tensorflow/lite/ios/ . Bạn có thể thêm khuôn khổ 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ờ trình liên kết bổ sung sẽ đượ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, đ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, bạn có thể kích hoạt trình ủy quyền Flex bằng cách liên kết thư viện được chia sẻ dành cho đại biểu TensorFlow Lite Flex. Bạn có thể xây dựng nó bằng 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 được chia sẻ 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 được chia sẻ được liên kết. Không cần thiết phải cài đặt phiên bản ủy quyền một cách rõ ràng như thường được yêu cầu với các loại ủy quyền khác.

Python

TensorFlow Lite với các hoạt động TensorFlow được 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 TensorFlow Lite Interpreter .

Số liệu

Màn biểu diễn

Khi sử dụng kết hợp cả hoạt động nội trang và chọn hoạt động TensorFlow, tất cả các tối ưu hóa TensorFlow Lite giống nhau và hoạt động nội trang đượ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 thực hiện để 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á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 ( TFLITE_BUILTIN ) 260,7
Chỉ sử dụng TF ops ( 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 C ++ Kích thước nhị phân Kích thước APK Android
Chỉ các hoạt động tích hợp 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 nội trang 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 có thể không hỗ trợ toàn bộ 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
  • Phiên bản 2.4
    • Khả năng tương thích với các đại biểu được tăng tốc phần cứng đã được cải thiện