การใช้ ข้อมูลเมตาของ TensorFlow Lite นักพัฒนาสามารถสร้างโค้ด Wrapper เพื่อเปิดใช้การผสานรวมบน Android สำหรับนักพัฒนาส่วนใหญ่ อินเทอร์เฟซแบบกราฟิกของ Android Studio ML Model Binding นั้นใช้งานง่ายที่สุด หากคุณต้องการการปรับแต่งเพิ่มเติมหรือใช้เครื่องมือบรรทัดคำสั่ง TensorFlow Lite Codegen ก็พร้อมใช้งานเช่นกัน
ใช้การเชื่อมโยงโมเดล Android Studio ML
สำหรับโมเดล TensorFlow Lite ที่ปรับปรุงด้วย ข้อมูลเมตา นักพัฒนาสามารถใช้ Android Studio ML Model Binding เพื่อกำหนดการตั้งค่าสำหรับโปรเจ็กต์โดยอัตโนมัติ และสร้างคลาส Wrapper ตามข้อมูลเมตาของโมเดล รหัสตัวตัดไม่จำเป็นต้องโต้ตอบกับ ByteBuffer
โดยตรง นักพัฒนาสามารถโต้ตอบกับโมเดล TensorFlow Lite กับวัตถุที่พิมพ์ เช่น Bitmap
และ Rect
แทน
นำเข้าโมเดล TensorFlow Lite ใน Android Studio
คลิกขวาที่โมดูลที่คุณต้องการใช้โมเดล TFLite หรือคลิกที่
File
จากนั้นคลิกNew
>Other
>TensorFlow Lite Model
เลือกตำแหน่งของไฟล์ TFLite ของคุณ โปรดทราบว่าเครื่องมือจะกำหนดค่าการพึ่งพาของโมดูลในนามของคุณด้วยการผูกโมเดล ML และการขึ้นต่อกันทั้งหมดจะถูกแทรกลงในไฟล์
build.gradle
ของโมดูล Android ของคุณโดยอัตโนมัติทางเลือก: เลือกช่องทำเครื่องหมายที่สองสำหรับการนำเข้า TensorFlow GPU หากคุณต้องการใช้การเร่งความเร็ว GPU
คลิก
Finish
หน้าจอต่อไปนี้จะปรากฏขึ้นหลังจากการนำเข้าสำเร็จ หากต้องการเริ่มใช้โมเดล ให้เลือก Kotlin หรือ Java คัดลอกและวางโค้ดใต้ส่วน
Sample Code
คุณสามารถกลับมาที่หน้าจอนี้ได้โดยดับเบิลคลิกโมเดล TFLite ใต้ไดเร็กทอรีml
ใน Android Studio
การเร่งการอนุมานแบบจำลอง
ML Model Binding มอบวิธีการสำหรับนักพัฒนาในการเร่งโค้ดของตนผ่านการใช้ผู้รับมอบสิทธิ์และจำนวนเธรด
ขั้นตอนที่ 1 ตรวจสอบไฟล์โมดูล build.gradle
ว่ามีการขึ้นต่อกันต่อไปนี้:
dependencies {
...
// TFLite GPU delegate 2.3.0 or above is required.
implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'
}
ขั้นตอนที่ 2 ตรวจสอบว่า GPU ที่ทำงานบนอุปกรณ์เข้ากันได้กับตัวแทน TensorFlow GPU หรือไม่ หากไม่ได้รันโมเดลโดยใช้เธรด CPU หลายเธรด:
คอตลิน
import org.tensorflow.lite.gpu.CompatibilityList import org.tensorflow.lite.gpu.GpuDelegate val compatList = CompatibilityList() val options = if(compatList.isDelegateSupportedOnThisDevice) { // if the device has a supported GPU, add the GPU delegate Model.Options.Builder().setDevice(Model.Device.GPU).build() } else { // if the GPU is not supported, run on 4 threads Model.Options.Builder().setNumThreads(4).build() } // Initialize the model as usual feeding in the options object val myModel = MyModel.newInstance(context, options) // Run inference per sample code
ชวา
import org.tensorflow.lite.support.model.Model import org.tensorflow.lite.gpu.CompatibilityList; import org.tensorflow.lite.gpu.GpuDelegate; // Initialize interpreter with GPU delegate Model.Options options; CompatibilityList compatList = CompatibilityList(); if(compatList.isDelegateSupportedOnThisDevice()){ // if the device has a supported GPU, add the GPU delegate options = Model.Options.Builder().setDevice(Model.Device.GPU).build(); } else { // if the GPU is not supported, run on 4 threads options = Model.Options.Builder().setNumThreads(4).build(); } MyModel myModel = new MyModel.newInstance(context, options); // Run inference per sample code
สร้างอินเทอร์เฟซโมเดลด้วยตัวสร้างโค้ด TensorFlow Lite
สำหรับโมเดล TensorFlow Lite ที่ปรับปรุงด้วย ข้อมูลเม ตา นักพัฒนาสามารถใช้ตัวสร้างโค้ด Wrapper ของ Android TensorFlow Lite เพื่อสร้างโค้ด Wrapper เฉพาะแพลตฟอร์มได้ รหัสตัวตัดไม่จำเป็นต้องโต้ตอบกับ ByteBuffer
โดยตรง นักพัฒนาสามารถโต้ตอบกับโมเดล TensorFlow Lite กับวัตถุที่พิมพ์ เช่น Bitmap
และ Rect
แทน
ประโยชน์ของตัวสร้างโค้ดขึ้นอยู่กับความสมบูรณ์ของการป้อนข้อมูลเมตาของโมเดล TensorFlow Lite โปรดดูส่วน <Codegen usage>
ใต้ฟิลด์ที่เกี่ยวข้องใน metadata_schema.fbs เพื่อดูว่าเครื่องมือโค้ดเจนแยกวิเคราะห์แต่ละฟิลด์อย่างไร
สร้างรหัส wrapper
คุณจะต้องติดตั้งเครื่องมือต่อไปนี้ในเทอร์มินัลของคุณ:
pip install tflite-support
เมื่อเสร็จแล้ว สามารถใช้ตัวสร้างโค้ดได้โดยใช้ไวยากรณ์ต่อไปนี้:
tflite_codegen --model=./model_with_metadata/mobilenet_v1_0.75_160_quantized.tflite \
--package_name=org.tensorflow.lite.classify \
--model_class_name=MyClassifierModel \
--destination=./classify_wrapper
รหัสผลลัพธ์จะอยู่ในไดเร็กทอรีปลายทาง หากคุณใช้ Google Colab หรือสภาพแวดล้อมระยะไกลอื่นๆ มันอาจจะง่ายกว่าในการซิปผลลัพธ์เป็นไฟล์ zip และดาวน์โหลดลงในโปรเจ็กต์ Android Studio ของคุณ:
# Zip up the generated code
!zip -r classify_wrapper.zip classify_wrapper/
# Download the archive
from google.colab import files
files.download('classify_wrapper.zip')
การใช้รหัสที่สร้างขึ้น
ขั้นตอนที่ 1: นำเข้าโค้ดที่สร้างขึ้น
คลายซิปโค้ดที่สร้างขึ้นหากจำเป็นลงในโครงสร้างไดเร็กทอรี รากของโค้ดที่สร้างขึ้นจะถือว่าเป็น SRC_ROOT
เปิดโครงการ Android Studio ที่คุณต้องการใช้โมเดล TensorFlow lite และนำเข้าโมดูลที่สร้างขึ้นโดย: และไฟล์ -> ใหม่ -> นำเข้าโมดูล -> เลือก SRC_ROOT
จากตัวอย่างข้างต้น ไดเร็กทอรีและโมดูลที่นำเข้าจะถูกเรียกว่า classify_wrapper
ขั้นตอนที่ 2: อัปเดตไฟล์ build.gradle
ของแอป
ในโมดูลแอปที่จะใช้โมดูลไลบรารีที่สร้างขึ้น:
ในส่วน android ให้เพิ่มสิ่งต่อไปนี้:
aaptOptions {
noCompress "tflite"
}
ภายใต้ส่วนการขึ้นต่อกัน ให้เพิ่มสิ่งต่อไปนี้:
implementation project(":classify_wrapper")
ขั้นตอนที่ 3: การใช้แบบจำลอง
// 1. Initialize the model
MyClassifierModel myImageClassifier = null;
try {
myImageClassifier = new MyClassifierModel(this);
} catch (IOException io){
// Error reading the model
}
if(null != myImageClassifier) {
// 2. Set the input with a Bitmap called inputBitmap
MyClassifierModel.Inputs inputs = myImageClassifier.createInputs();
inputs.loadImage(inputBitmap));
// 3. Run the model
MyClassifierModel.Outputs outputs = myImageClassifier.run(inputs);
// 4. Retrieve the result
Map<String, Float> labeledProbability = outputs.getProbability();
}
การเร่งการอนุมานแบบจำลอง
โค้ดที่สร้างขึ้นเป็นช่องทางสำหรับนักพัฒนาในการเร่งโค้ดของตนผ่านการใช้ ผู้รับมอบสิทธิ์ และจำนวนเธรด สิ่งเหล่านี้สามารถตั้งค่าได้เมื่อเริ่มต้นวัตถุโมเดลเนื่องจากต้องใช้พารามิเตอร์สามตัว:
-
Context
: บริบทจากกิจกรรมหรือบริการ Android - (ทางเลือก)
Device
: ผู้แทนการเร่งความเร็ว TFLite เช่น GPUDelegate หรือ NNAPIDelegate - (ทางเลือก)
numThreads
: จำนวนเธรดที่ใช้ในการรันโมเดล - ค่าเริ่มต้นคือหนึ่ง
ตัวอย่างเช่น หากต้องการใช้ผู้รับมอบสิทธิ์ NNAPI และเธรดสูงสุดสามเธรด คุณสามารถเตรียมใช้งานโมเดลได้ดังนี้:
try {
myImageClassifier = new MyClassifierModel(this, Model.Device.NNAPI, 3);
} catch (IOException io){
// Error reading the model
}
การแก้ไขปัญหา
หากคุณได้รับ 'java.io.FileNotFoundException: ไฟล์นี้ไม่สามารถเปิดเป็นตัวอธิบายไฟล์ได้ อาจเป็นข้อผิดพลาดของการบีบอัด ให้แทรกบรรทัดต่อไปนี้ใต้ส่วน android ของโมดูลแอปที่จะใช้โมดูลไลบรารี:
aaptOptions {
noCompress "tflite"
}