เนื่องจากไลบรารีตัวดำเนินการในตัว TensorFlow Lite รองรับตัวดำเนินการ TensorFlow ในจำนวนจำกัดเท่านั้น จึงไม่ใช่ทุกรุ่นที่จะแปลงได้ สำหรับรายละเอียด โปรดดูที่ ความเข้ากันได้ของผู้ให้บริการ
หากต้องการอนุญาตการแปลง ผู้ใช้สามารถเปิดใช้ การดำเนินการ TensorFlow บางอย่าง ในโมเดล TensorFlow Lite ได้ อย่างไรก็ตาม การเรียกใช้โมเดล TensorFlow Lite ด้วยการดำเนินการของ TensorFlow จำเป็นต้องดึงรันไทม์ TensorFlow หลัก ซึ่งจะเพิ่มขนาดไบนารีของล่าม TensorFlow Lite สำหรับ Android คุณสามารถหลีกเลี่ยงปัญหานี้ได้โดยเลือกสร้างเฉพาะตัวเลือก Tensorflow ที่จำเป็นเท่านั้น สำหรับรายละเอียด โปรดดูที่ การลดขนาดไบนารี
เอกสารนี้สรุปวิธี การแปลง และ เรียกใช้ โมเดล TensorFlow Lite ที่มีการดำเนินการของ TensorFlow บนแพลตฟอร์มที่คุณเลือก นอกจากนี้ยังกล่าวถึง เมตริกประสิทธิภาพและขนาด และ ข้อจำกัดที่ทราบ ด้วย
แปลงโมเดล
ตัวอย่างต่อไปนี้แสดงวิธีสร้างโมเดล TensorFlow Lite ด้วยตัวเลือก TensorFlow
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)
เรียกใช้การอนุมาน
เมื่อใช้โมเดล TensorFlow Lite ที่ได้รับการแปลงโดยรองรับตัวเลือก TensorFlow ops ไคลเอ็นต์ยังต้องใช้รันไทม์ TensorFlow Lite ที่มีไลบรารีที่จำเป็นของ ops TensorFlow
ระบบปฏิบัติการ Android
หากต้องการลดขนาดไบนารี โปรดสร้างไฟล์ AAR ที่คุณกำหนดเองตามคำแนะนำใน ส่วนถัดไป หากขนาดไบนารี่ไม่เป็นข้อกังวลมากนัก เราขอแนะนำให้ใช้ AAR ที่สร้างไว้ล่วงหน้าพร้อมกับ TensorFlow ops ที่โฮสต์ที่ MavenCentral
คุณสามารถระบุสิ่งนี้ในการพึ่งพา build.gradle
ของคุณโดยเพิ่มไว้ข้าง TensorFlow Lite AAR มาตรฐานดังนี้:
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'
}
หากต้องการใช้สแนปชอตตอนกลางคืน ตรวจสอบให้แน่ใจว่าคุณได้เพิ่ม ที่เก็บสแนปชอต Sonatype แล้ว
เมื่อคุณเพิ่มการขึ้นต่อกันแล้ว ควรติดตั้งตัวแทนที่จำเป็นสำหรับการจัดการการดำเนินการ TensorFlow ของกราฟสำหรับกราฟที่ต้องการโดยอัตโนมัติ
android {
defaultConfig {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
การสร้าง AAR ของ Android
สำหรับการลดขนาดไบนารี่หรือกรณีขั้นสูงอื่นๆ คุณสามารถสร้างไลบรารีด้วยตนเองได้ สมมติว่า สภาพแวดล้อมการสร้าง TensorFlow Lite ใช้งานได้ ให้สร้าง Android AAR ด้วยตัวเลือก TensorFlow ที่เลือกดังนี้:
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
สิ่งนี้จะสร้างไฟล์ AAR bazel-bin/tmp/tensorflow-lite.aar
สำหรับ TensorFlow Lite ในตัวและการดำเนินการที่กำหนดเอง และสร้างไฟล์ AAR bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar
สำหรับ TensorFlow ops หากคุณไม่มีสภาพแวดล้อมบิลด์ที่ใช้งานได้ คุณสามารถ สร้างไฟล์ด้านบนด้วย docker ได้
จากที่นั่น คุณสามารถนำเข้าไฟล์ AAR ไปยังโปรเจ็กต์ของคุณได้โดยตรง หรือเผยแพร่ไฟล์ AAR แบบกำหนดเองไปยังพื้นที่เก็บข้อมูล Maven ในเครื่องของคุณ:
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
สุดท้ายนี้ ใน build.gradle
ของแอป ตรวจสอบให้แน่ใจว่าคุณมีการพึ่งพา mavenLocal()
และแทนที่การพึ่งพา TensorFlow Lite มาตรฐานด้วยอันที่รองรับตัวเลือก TensorFlow ที่เลือก:
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'
}
ไอโอเอส
การใช้ CocoaPods
TensorFlow Lite นำเสนอตัวเลือก TF ops CocoaPods ที่สร้างไว้ล่วงหน้าทุกคืนสำหรับ arm64
ซึ่งคุณสามารถวางใจได้ควบคู่ไปกับ TensorFlowLiteSwift
หรือ TensorFlowLiteObjC
CocoaPods
# In your Podfile target:
pod 'TensorFlowLiteSwift' # or 'TensorFlowLiteObjC'
pod 'TensorFlowLiteSelectTfOps', '~> 0.0.1-nightly'
หลังจากรัน pod install
คุณจะต้องจัดเตรียมแฟล็กตัวเชื่อมโยงเพิ่มเติมเพื่อบังคับให้โหลดเฟรมเวิร์ก TF ops ที่เลือกลงในโปรเจ็กต์ของคุณ ในโปรเจ็กต์ Xcode ของคุณ ไปที่ Build Settings
-> Other Linker Flags
และเพิ่ม:
สำหรับเวอร์ชัน >= 2.9.0:
-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.xcframework/ios-arm64/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps
สำหรับเวอร์ชัน < 2.9.0:
-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps
จากนั้นคุณควรจะสามารถเรียกใช้โมเดลใดๆ ที่แปลงด้วย SELECT_TF_OPS
ในแอป iOS ของคุณได้ ตัวอย่างเช่น คุณสามารถแก้ไข แอป Image Classification iOS เพื่อทดสอบคุณสมบัติ TF ops ที่เลือกได้
- แทนที่ไฟล์โมเดลด้วยไฟล์ที่แปลงโดยเปิดใช้งาน
SELECT_TF_OPS
- เพิ่มการพึ่งพา
TensorFlowLiteSelectTfOps
ให้กับPodfile
ตามคำแนะนำ - เพิ่มแฟล็กลิงก์เกอร์เพิ่มเติมตามด้านบน
- เรียกใช้แอปตัวอย่างและดูว่าโมเดลทำงานถูกต้องหรือไม่
ใช้ Bazel + Xcode
TensorFlow Lite พร้อมตัวเลือก TensorFlow สำหรับ iOS สามารถสร้างได้โดยใช้ Bazel ขั้นแรก ทำตาม คำแนะนำในการสร้าง iOS เพื่อกำหนดค่าพื้นที่ทำงาน Bazel และไฟล์ .bazelrc
อย่างถูกต้อง
เมื่อคุณกำหนดค่าพื้นที่ทำงานโดยเปิดใช้งานการรองรับ iOS แล้ว คุณสามารถใช้คำสั่งต่อไปนี้เพื่อสร้างเฟรมเวิร์กเสริม TF ops ที่เลือกได้ ซึ่งสามารถเพิ่มไว้ด้านบนของ TensorFlowLiteC.framework
ปกติ โปรดทราบว่าไม่สามารถสร้างเฟรมเวิร์ก TF ops ที่เลือกสำหรับสถาปัตยกรรม i386
ได้ ดังนั้นคุณต้องระบุรายการสถาปัตยกรรมเป้าหมายอย่างชัดเจน ยกเว้น i386
bazel build -c opt --config=ios --ios_multi_cpus=arm64,x86_64 \
//tensorflow/lite/ios:TensorFlowLiteSelectTfOps_framework
สิ่งนี้จะสร้างเฟรมเวิร์กภายใต้ไดเร็กทอรี bazel-bin/tensorflow/lite/ios/
คุณสามารถเพิ่มเฟรมเวิร์กใหม่นี้ให้กับโปรเจ็กต์ Xcode ของคุณได้โดยทำตามขั้นตอนที่คล้ายกันซึ่งอธิบายไว้ในส่วน การตั้งค่าโปรเจ็กต์ Xcode ในคู่มือการสร้าง iOS
หลังจากเพิ่มเฟรมเวิร์กลงในโปรเจ็กต์แอปของคุณแล้ว ควรระบุแฟล็กตัวเชื่อมโยงเพิ่มเติมในโปรเจ็กต์แอปของคุณเพื่อบังคับให้โหลดเฟรมเวิร์ก TF ops ที่เลือก ในโปรเจ็กต์ Xcode ของคุณ ไปที่ Build Settings
-> Other Linker Flags
และเพิ่ม:
-force_load <path/to/your/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps>
ซี/ซี++
หากคุณใช้ Bazel หรือ CMake เพื่อสร้างล่าม TensorFlow Lite คุณสามารถเปิดใช้งานผู้รับมอบสิทธิ์ Flex ได้โดยลิงก์ไลบรารีที่แชร์ของผู้รับมอบสิทธิ์ TensorFlow Lite Flex คุณสามารถสร้างมันด้วย Bazel ตามคำสั่งต่อไปนี้
bazel build -c opt --config=monolithic tensorflow/lite/delegates/flex:tensorflowlite_flex
คำสั่งนี้สร้างไลบรารีที่แบ่งใช้ต่อไปนี้ใน bazel-bin/tensorflow/lite/delegates/flex
แพลตฟอร์ม | ชื่อห้องสมุด |
---|---|
ลินุกซ์ | libtensorflowlite_flex.so |
ระบบปฏิบัติการ macOS | libtensorflowlite_flex.dylib |
หน้าต่าง | tensorflowlite_flex.dll |
โปรดทราบว่า TfLiteDelegate
ที่จำเป็นจะถูกติดตั้งโดยอัตโนมัติเมื่อสร้างล่ามที่รันไทม์ตราบเท่าที่มีการเชื่อมโยงไลบรารีที่ใช้ร่วมกัน ไม่จำเป็นต้องติดตั้งอินสแตนซ์ของผู้รับมอบสิทธิ์อย่างชัดเจน เนื่องจากโดยปกติแล้วจะต้องใช้กับผู้รับมอบสิทธิ์ประเภทอื่น
หลาม
TensorFlow Lite พร้อมตัวเลือก TensorFlow จะถูกติดตั้งโดยอัตโนมัติพร้อมกับ แพ็คเกจ TensorFlow pip คุณยังสามารถเลือกติดตั้งเฉพาะ แพ็คเกจ pip ของ TensorFlow Lite Interpreter ได้อีกด้วย
เมตริก
ผลงาน
เมื่อใช้ผสมระหว่างตัวเลือกทั้งในตัวและตัวเลือก TensorFlow การเพิ่มประสิทธิภาพ TensorFlow Lite เดียวกันทั้งหมดและตัวเลือกในตัวที่ได้รับการปรับปรุงให้เหมาะสมจะพร้อมใช้งานและใช้ได้กับรุ่นที่แปลงแล้ว
ตารางต่อไปนี้อธิบายเวลาเฉลี่ยที่ใช้ในการอนุมานบน MobileNet บน Pixel 2 เวลาที่แสดงเป็นค่าเฉลี่ย 100 รัน เป้าหมายเหล่านี้ถูกสร้างขึ้นสำหรับ Android โดยใช้แฟล็ก: --config=android_arm64 -c opt
สร้าง | เวลา (มิลลิวินาที) |
---|---|
ตัวเลือกในตัวเท่านั้น ( TFLITE_BUILTIN ) | 260.7 |
ใช้เฉพาะ TF ops ( SELECT_TF_OPS ) | 264.5 |
ขนาดไบนารี
ตารางต่อไปนี้อธิบายขนาดไบนารีของ TensorFlow Lite สำหรับแต่ละบิลด์ เป้าหมายเหล่านี้ถูกสร้างขึ้นสำหรับ Android โดยใช้ --config=android_arm -c opt
สร้าง | ขนาดไบนารี C++ | ขนาดเอพีเค Android |
---|---|---|
Ops ในตัวเท่านั้น | 796 KB | 561 KB |
การดำเนินการในตัว + การดำเนินการ TF | 23.0 ลบ | 8.0 ลบ |
การดำเนินการในตัว + การดำเนินการ TF (1) | 4.1 ลบ | 1.8 ลบ |
(1) ไลบรารีเหล่านี้ได้รับการออกแบบมาโดยเฉพาะสำหรับ รุ่น i3d-kinetics-400 พร้อมด้วย ops ในตัว TFLite 8 ตัวและ ops Tensorflow 3 ตัว สำหรับรายละเอียดเพิ่มเติม โปรดดูส่วน การลดขนาดไบนารี TensorFlow Lite
ข้อจำกัดที่ทราบ
- ประเภทที่ไม่รองรับ: การดำเนินการของ TensorFlow บางอย่างอาจไม่รองรับประเภทอินพุต/เอาท์พุตครบชุดที่โดยทั่วไปจะมีให้ใน TensorFlow
อัพเดท
- เวอร์ชัน 2.6
- การสนับสนุนสำหรับตัวดำเนินการตามคุณลักษณะ GraphDef และการเริ่มต้นทรัพยากร HashTable ได้รับการปรับปรุงแล้ว
- เวอร์ชัน 2.5
- คุณสามารถใช้การเพิ่มประสิทธิภาพที่เรียกว่า ปริมาณหลังการฝึกอบรมได้
- เวอร์ชัน 2.4
- ความเข้ากันได้กับผู้ได้รับมอบหมายที่เร่งด้วยฮาร์ดแวร์ได้รับการปรับปรุง