สร้างอินเทอร์เฟซของโมเดลโดยใช้ข้อมูลเมตา

เมื่อใช้ข้อมูลเมตา LiteRT นักพัฒนาซอฟต์แวร์สามารถสร้าง โค้ด Wrapper เพื่อเปิดใช้การผสานรวมบน Android สำหรับนักพัฒนาซอฟต์แวร์ส่วนใหญ่ อินเทอร์เฟซแบบกราฟิกของการเชื่อมโยงโมเดล ML สำหรับ Android Studio คือ ใช้งานง่ายที่สุด ถ้าคุณต้องการปรับแต่งเพิ่มเติมหรือกำลังใช้บรรทัดคำสั่ง โค้ดเจนของ LiteRT พร้อมให้ใช้งานด้วยเช่นกัน

ใช้การเชื่อมโยงโมเดล ML ของ Android Studio

สำหรับโมเดล LiteRT ที่เพิ่มประสิทธิภาพด้วยข้อมูลเมตา นักพัฒนาซอฟต์แวร์สามารถใช้ Android Studio ML Model Binding เพื่อกำหนดค่า การตั้งค่าสำหรับโปรเจ็กต์และสร้างคลาส Wrapper ตามโมเดล ข้อมูลเมตา โค้ด Wrapper ทำให้ไม่จำเป็นต้องโต้ตอบกับโค้ดโดยตรง ByteBuffer แต่นักพัฒนาแอปสามารถโต้ตอบกับโมเดล LiteRT ได้ กับออบเจ็กต์ที่พิมพ์ เช่น Bitmap และ Rect

นำเข้าโมเดล LiteRT ใน Android Studio

  1. คลิกขวาบนโมดูลที่คุณต้องการใช้โมเดล TFLite หรือคลิก File จากนั้นจ่าย New > Other LiteRT Model

  2. เลือกตำแหน่งของไฟล์ TFLite โปรดทราบว่าเครื่องมือจะ กำหนดค่าทรัพยากร Dependency ของโมดูลในนามของคุณด้วยการเชื่อมโยงโมเดล ML และ ระบบจะแทรกทรัพยากร Dependency ทั้งหมดลงในโมดูล Android โดยอัตโนมัติ build.gradle ไฟล์

    ไม่บังคับ: เลือกช่องทำเครื่องหมายที่ 2 สำหรับนำเข้า TensorFlow GPU หากคุณ ต้องการใช้การเร่งการประมวลผล GPU

  3. คลิก Finish

  4. หน้าจอต่อไปนี้จะปรากฏขึ้นหลังจากที่นำเข้าสำเร็จแล้ว ในการเริ่มดำเนินการ โดยใช้โมเดล ให้เลือก 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 'com.google.ai.edge.litert:litert-gpu:2.3.0'
    }

ขั้นตอนที่ 2 ตรวจจับว่า GPU ที่ทำงานอยู่ในอุปกรณ์เข้ากันได้กับ TensorFlow GPU หรือไม่ หากไม่เรียกใช้โมเดลโดยใช้เทรด CPU หลายรายการ

Kotlin

    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
      

Java

    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
      

สร้างอินเทอร์เฟซโมเดลด้วยโปรแกรมสร้างโค้ด LiteRT

สำหรับโมเดล LiteRT ที่ปรับปรุงด้วยข้อมูลเมตา นักพัฒนาซอฟต์แวร์สามารถใช้โปรแกรมสร้างโค้ด LiteRT Wrapper สำหรับ Android เพื่อสร้าง โค้ด Wrapper เฉพาะแพลตฟอร์ม โค้ด Wrapper ทำให้ไม่จำเป็นต้องโต้ตอบ ด้วย ByteBuffer โดยตรง แต่นักพัฒนาซอฟต์แวร์จะโต้ตอบกับ TensorFlow แทนได้ โมเดล Lite ที่มีออบเจ็กต์ที่พิมพ์ เช่น Bitmap และ Rect

ประโยชน์ที่ได้จากเครื่องมือสร้างโค้ดจะขึ้นอยู่กับความสมบูรณ์ของ รายการข้อมูลเมตาของโมเดล LiteRT โปรดดูส่วน<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 หรือรีโมตอื่น สภาพแวดล้อมโดยตรง การซิปผลลัพธ์ในรูปแบบไฟล์ซิปและดาวน์โหลด ลงในโปรเจ็กต์ 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: นําเข้าโค้ดที่สร้างขึ้น

แตกไฟล์ ZIP ของโค้ดที่สร้างขึ้นมาไว้ในโครงสร้างไดเรกทอรี หากจำเป็น รากของ โค้ดที่สร้างขึ้นจะถือว่าเป็น SRC_ROOT

เปิดโปรเจ็กต์ Android Studio ที่คุณต้องการใช้ LiteRT สร้างแบบจำลองและนำเข้าโมดูลที่สร้างขึ้นด้วยคำสั่ง ไฟล์ -> ใหม่ -> นำเข้าโมดูล -> เลือก SRC_ROOT

หากใช้ตัวอย่างข้างต้น ไดเรกทอรีและโมดูลที่นำเข้าจะมีชื่อว่า classify_wrapper

ขั้นตอนที่ 2: อัปเดตไฟล์ build.gradle ของแอป

ในโมดูลแอปที่จะใช้โมดูลไลบรารีที่สร้างขึ้น

ในส่วน Android ให้เพิ่มข้อมูลต่อไปนี้

aaptOptions {
   noCompress "tflite"
}

ในส่วนทรัพยากร Dependency ให้เพิ่มข้อมูลดังนี้

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();
}

การเร่งการอนุมานโมเดล

โค้ดที่สร้างขึ้นช่วยให้นักพัฒนาแอปเร่งความเร็วโค้ด ผ่านการใช้ตัวแทนและจำนวนของ ชุดข้อความ สามารถตั้งค่าเหล่านี้เมื่อเริ่มต้นออบเจ็กต์โมเดล โดยใช้เวลา 3 ส่วน ได้แก่

  • Context: บริบทจากกิจกรรมหรือบริการของ Android
  • (ไม่บังคับ) Device: ตัวแทนการเร่งความเร็ว TFLite ดังตัวอย่างต่อไปนี้ GPUDelegate
  • (ไม่บังคับ) numThreads: จำนวนเทรดที่ใช้เรียกใช้โมเดล - ค่าเริ่มต้นคือ 1

ตัวอย่างเช่น หากต้องการใช้การมอบสิทธิ์ GPU และเทรดสูงสุด 3 เทรด คุณสามารถเริ่มต้น โมเดลแบบนี้

try {
    myImageClassifier = new MyClassifierModel(this, Model.Device.GPU, 3);
} catch (IOException io){
    // Error reading the model
}

การแก้ปัญหา

หากได้รับ "java.io.FileNotFoundException: ไฟล์นี้ไม่สามารถเปิดเป็น file descriptor; ก็อาจได้รับการบีบอัด" เกิดข้อผิดพลาด ให้แทรกบรรทัดต่อไปนี้ ในส่วน Android ของโมดูลแอปที่จะใช้โมดูลไลบรารี

aaptOptions {
   noCompress "tflite"
}