Bangun TensorFlow Lite untuk iOS

Dokumen ini menjelaskan cara membuat pustaka iOS TensorFlow Lite sendiri. Biasanya, Anda tidak perlu membuat pustaka iOS TensorFlow Lite secara lokal. Jika Anda hanya ingin menggunakannya, cara termudah adalah menggunakan TensorFlow Lite CocoaPods yang dirilis secara stabil atau rilis malam. Lihat mulai cepat iOS untuk detail lebih lanjut tentang cara menggunakannya dalam proyek iOS Anda.

Membangun secara lokal

Dalam beberapa kasus, Anda mungkin ingin menggunakan versi lokal TensorFlow Lite, misalnya saat Anda ingin membuat perubahan lokal pada TensorFlow Lite dan menguji perubahan tersebut di aplikasi iOS atau Anda lebih suka menggunakan kerangka kerja statis dibandingkan kerangka dinamis yang kami sediakan. Untuk membuat framework iOS universal untuk TensorFlow Lite secara lokal, Anda perlu membuatnya menggunakan Bazel di mesin macOS.

Instal Xcode

Jika Anda belum melakukannya, Anda perlu menginstal Xcode 8 atau lebih baru dan alat-alatnya menggunakan xcode-select :

xcode-select --install

Jika ini adalah instalasi baru, Anda harus menerima perjanjian lisensi untuk semua pengguna dengan perintah berikut:

sudo xcodebuild -license accept

Instal Bazel

Bazel adalah sistem build utama untuk TensorFlow. Instal Bazel sesuai petunjuk di situs web Bazel . Pastikan untuk memilih versi antara _TF_MIN_BAZEL_VERSION dan _TF_MAX_BAZEL_VERSION dalam file configure.py di root repositori tensorflow .

Konfigurasikan WORKSPACE dan .bazelrc

Jalankan skrip ./configure di direktori root checkout TensorFlow, dan jawab "Ya" saat skrip menanyakan apakah Anda ingin membuat TensorFlow dengan dukungan iOS.

Setelah Bazel dikonfigurasi dengan benar dengan dukungan iOS, Anda dapat membangun framework TensorFlowLiteC dengan perintah berikut.

bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
  //tensorflow/lite/ios:TensorFlowLiteC_framework

Perintah ini akan menghasilkan file TensorFlowLiteC_framework.zip di direktori bazel-bin/tensorflow/lite/ios/ di bawah direktori root TensorFlow Anda. Secara default, kerangka kerja yang dihasilkan berisi biner "gemuk", berisi armv7, arm64, dan x86_64 (tetapi tidak ada i386). Untuk melihat daftar lengkap flag build yang digunakan saat Anda menentukan --config=ios_fat , lihat bagian konfigurasi iOS di file .bazelrc .

Membangun kerangka kerja statis TensorFlowLiteC

Secara default, kami hanya mendistribusikan kerangka dinamis melalui Cocoapods. Jika ingin menggunakan framework statis, Anda dapat membuat framework statis TensorFlowLiteC dengan perintah berikut:

bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
  //tensorflow/lite/ios:TensorFlowLiteC_static_framework

Perintah ini akan menghasilkan file bernama TensorFlowLiteC_static_framework.zip di bawah direktori bazel-bin/tensorflow/lite/ios/ di bawah direktori root TensorFlow Anda. Kerangka kerja statis ini dapat digunakan dengan cara yang sama seperti kerangka dinamis.

Membangun kerangka kerja TFLite secara selektif

Anda dapat membangun kerangka kerja yang lebih kecil yang hanya menargetkan sekumpulan model menggunakan build selektif, yang akan melewatkan operasi yang tidak digunakan dalam kumpulan model Anda dan hanya menyertakan kernel operasi yang diperlukan untuk menjalankan kumpulan model tertentu. Perintahnya adalah sebagai berikut:

bash tensorflow/lite/ios/build_frameworks.sh \
  --input_models=model1.tflite,model2.tflite \
  --target_archs=x86_64,armv7,arm64

Perintah di atas akan menghasilkan framework statis bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip untuk operasi bawaan dan kustom TensorFlow Lite; dan secara opsional, buat kerangka kerja statis bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip jika model Anda berisi operasi Select TensorFlow. Perhatikan bahwa tanda --target_archs dapat digunakan untuk menentukan arsitektur penerapan Anda.

Gunakan dalam aplikasi Anda sendiri

Pengembang CocoaPods

Ada tiga CocoaPod untuk TensorFlow Lite:

  • TensorFlowLiteSwift : Menyediakan API Swift untuk TensorFlow Lite.
  • TensorFlowLiteObjC : Menyediakan API Objective-C untuk TensorFlow Lite.
  • TensorFlowLiteC : Pod dasar umum, yang menyematkan runtime inti TensorFlow Lite dan mengekspos API C dasar yang digunakan oleh dua pod di atas. Tidak dimaksudkan untuk langsung digunakan oleh pengguna.

Sebagai developer, Anda harus memilih pod TensorFlowLiteSwift atau TensorFlowLiteObjC berdasarkan bahasa penulisan aplikasi Anda, namun tidak keduanya. Langkah-langkah sebenarnya untuk menggunakan build lokal TensorFlow Lite berbeda-beda, bergantung pada bagian mana yang ingin Anda build.

Menggunakan API Swift atau Objective-C lokal

Jika Anda menggunakan CocoaPods, dan hanya ingin menguji beberapa perubahan lokal pada Swift API atau Objective-C API TensorFlow Lite, ikuti langkah-langkah di sini.

  1. Buat perubahan pada API Swift atau Objective-C di checkout tensorflow Anda.

  2. Buka file TensorFlowLite(Swift|ObjC).podspec , dan perbarui baris ini:
    s.dependency 'TensorFlowLiteC', "#{s.version}"
    menjadi:
    s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
    Hal ini untuk memastikan bahwa Anda membuat API Swift atau Objective-C menggunakan versi terbaru TensorFlowLiteC API yang tersedia setiap malam (dibuat setiap malam antara pukul 01.00-04.00 Waktu Pasifik) dan bukan versi stabil, yang mungkin sudah ketinggalan jaman dibandingkan dengan tensorflow lokal Anda Periksa. Alternatifnya, Anda dapat memilih untuk memublikasikan TensorFlowLiteC versi Anda sendiri dan menggunakan versi tersebut (lihat bagian Menggunakan inti TensorFlow Lite lokal di bawah).

  3. Di Podfile proyek iOS Anda, ubah ketergantungan sebagai berikut untuk menunjuk ke jalur lokal ke direktori root tensorflow Anda.
    Untuk Swift:
    pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
    Untuk Objective-C:
    pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'

  4. Perbarui instalasi pod Anda dari direktori root proyek iOS Anda.
    $ pod update

  5. Buka kembali ruang kerja yang dihasilkan ( <project>.xcworkspace ) dan bangun kembali aplikasi Anda dalam Xcode.

Menggunakan inti TensorFlow Lite lokal

Anda dapat menyiapkan repositori spesifikasi CocoaPods pribadi, dan memublikasikan framework TensorFlowLiteC kustom Anda ke repo pribadi Anda. Anda dapat menyalin file podspec ini dan mengubah beberapa nilai:

  ...
  s.version      = <your_desired_version_tag>
  ...
  # Note the `///`, two from the `file://` and one from the `/path`.
  s.source       = { :http => "file:///path/to/TensorFlowLiteC_framework.zip" }
  ...
  s.vendored_frameworks = 'TensorFlowLiteC.framework'
  ...

Setelah membuat file TensorFlowLiteC.podspec Anda sendiri, Anda dapat mengikuti petunjuk penggunaan CocoaPods pribadi untuk menggunakannya dalam proyek Anda sendiri. Anda juga dapat memodifikasi TensorFlowLite(Swift|ObjC).podspec agar menunjuk ke pod TensorFlowLiteC kustom Anda dan menggunakan pod Swift atau Objective-C dalam proyek aplikasi Anda.

Pengembang Bazel

Jika Anda menggunakan Bazel sebagai alat pembangunan utama, Anda cukup menambahkan ketergantungan TensorFlowLite ke target Anda di file BUILD Anda.

Untuk Swift:

swift_library(
  deps = [
      "//tensorflow/lite/swift:TensorFlowLite",
  ],
)

Untuk Objective-C:

objc_library(
  deps = [
      "//tensorflow/lite/objc:TensorFlowLite",
  ],
)

Saat Anda membuat proyek aplikasi, perubahan apa pun pada pustaka TensorFlow Lite akan diambil dan dimasukkan ke dalam aplikasi Anda.

Ubah pengaturan proyek Xcode secara langsung

Sangat disarankan untuk menggunakan CocoaPods atau Bazel untuk menambahkan ketergantungan TensorFlow Lite ke dalam proyek Anda. Jika Anda masih ingin menambahkan framework TensorFlowLiteC secara manual, Anda harus menambahkan framework TensorFlowLiteC sebagai framework tersemat ke project aplikasi Anda. Buka zip TensorFlowLiteC_framework.zip yang dihasilkan dari build di atas untuk mendapatkan direktori TensorFlowLiteC.framework . Direktori ini adalah kerangka kerja sebenarnya yang dapat dipahami oleh Xcode.

Setelah menyiapkan TensorFlowLiteC.framework , pertama-tama Anda perlu menambahkannya sebagai biner tersemat ke target aplikasi Anda. Bagian pengaturan proyek yang tepat untuk ini mungkin berbeda tergantung pada versi Xcode Anda.

  • Xcode 11: Buka tab 'Umum' pada editor proyek untuk target aplikasi Anda, dan tambahkan TensorFlowLiteC.framework di bagian 'Kerangka, Pustaka, dan Konten Tersemat'.
  • Xcode 10 dan yang lebih lama: Buka tab 'Umum' pada editor proyek untuk target aplikasi Anda, dan tambahkan TensorFlowLiteC.framework di bawah 'Binari Tersemat'. Kerangka kerja ini juga harus ditambahkan secara otomatis di bagian 'Kerangka Kerja dan Perpustakaan Tertaut'.

Saat Anda menambahkan kerangka kerja sebagai biner tertanam, Xcode juga akan memperbarui entri 'Jalur Pencarian Kerangka' di bawah tab 'Pengaturan Bangun' untuk menyertakan direktori induk kerangka kerja Anda. Jika hal ini tidak terjadi secara otomatis, Anda harus menambahkan direktori induk dari direktori TensorFlowLiteC.framework secara manual.

Setelah kedua pengaturan ini selesai, Anda seharusnya dapat mengimpor dan memanggil C API TensorFlow Lite, yang ditentukan oleh file header di direktori TensorFlowLiteC.framework/Headers .