Bantuan melindungi Great Barrier Reef dengan TensorFlow pada Kaggle Bergabung Tantangan

Bangun TensorFlow Lite untuk iOS

Dokumen ini menjelaskan cara membuat library TensorFlow Lite iOS Anda sendiri. Biasanya, Anda tidak perlu membuat library iOS TensorFlow Lite secara lokal. Jika Anda hanya ingin menggunakannya, cara termudah adalah menggunakan rilis TensorFlow Lite CocoaPods yang stabil atau dirilis setiap malam. Lihat iOS QuickStart untuk rincian lebih lanjut tentang bagaimana untuk menggunakannya dalam proyek-proyek iOS Anda.

Membangun secara lokal

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

Instal Xcode

Jika Anda belum melakukannya, Anda akan perlu menginstal Xcode 8 atau kemudian dan alat menggunakan xcode-select :

xcode-select --install

Jika ini adalah pemasangan 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 website Bazel . Pastikan untuk memilih versi antara _TF_MIN_BAZEL_VERSION dan _TF_MAX_BAZEL_VERSION di configure.py berkas pada akar tensorflow repositori.

Konfigurasi WORKSPACE dan .bazelrc

Jalankan ./configure skrip di direktori checkout akar TensorFlow, dan jawabannya "Ya" ketika script menanyakan apakah Anda ingin membangun TensorFlow dengan dukungan iOS.

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

bazel build --config=ios_fat -c opt \
  //tensorflow/lite/ios:TensorFlowLiteC_framework

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

Bangun kerangka kerja statis TensorFlowLiteC

Secara default, kami hanya mendistribusikan kerangka kerja dinamis melalui Cocoapods. Jika Anda ingin menggunakan kerangka statis sebagai gantinya, Anda dapat membangun TensorFlowLiteC kerangka statis dengan perintah berikut:

bazel build --config=ios_fat -c opt \
  //tensorflow/lite/ios:TensorFlowLiteC_static_framework

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

Secara selektif membangun kerangka kerja TFLite

Anda dapat membuat kerangka kerja yang lebih kecil yang hanya menargetkan sekumpulan model menggunakan build selektif, yang akan melewati operasi yang tidak digunakan dalam set model Anda dan hanya menyertakan kernel op yang diperlukan untuk menjalankan set model yang diberikan. 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 kerangka statis bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip untuk TensorFlow Lite built-in dan adat ops; dan opsional, menghasilkan kerangka statis bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip jika model Anda mengandung Pilih TensorFlow ops. Perhatikan bahwa --target_archs bendera dapat digunakan untuk menentukan arsitektur penyebaran Anda.

Gunakan di aplikasi Anda sendiri

Pengembang CocoaPods

Ada tiga CocoaPods untuk TensorFlow Lite:

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

Sebagai pengembang, Anda harus memilih salah TensorFlowLiteSwift atau TensorFlowLiteObjC pod berdasarkan bahasa yang aplikasi Anda ditulis, tapi tidak keduanya. Langkah-langkah yang tepat untuk menggunakan build lokal TensorFlow Lite berbeda-beda, bergantung pada bagian persis mana yang ingin Anda buat.

Menggunakan API Swift atau Objective-C lokal

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

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

  2. Buka TensorFlowLite(Swift|ObjC).podspec file, dan memperbarui baris ini:
    s.dependency 'TensorFlowLiteC', "#{s.version}"
    menjadi:
    s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
    Hal ini untuk memastikan bahwa Anda sedang membangun Anda Swift atau Objective-C API terhadap versi malam terbaru yang tersedia dari TensorFlowLiteC API (dibangun setiap malam antara 1-4AM Waktu Pasifik) daripada versi stabil, yang mungkin sudah ketinggalan zaman dibandingkan dengan lokal Anda tensorflow Periksa. Atau, Anda bisa memilih untuk menerbitkan versi Anda sendiri TensorFlowLiteC dan menggunakan versi itu (lihat Menggunakan inti TensorFlow Lite lokal bagian bawah).

  3. Dalam Podfile proyek iOS Anda, mengubah ketergantungan sebagai berikut untuk menunjuk ke jalan lokal untuk Anda tensorflow direktori root.
    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. Membuka kembali ruang kerja yang dihasilkan ( <project>.xcworkspace ) dan membangun kembali aplikasi Anda dalam Xcode.

Menggunakan inti TensorFlow Lite lokal

Anda dapat mengatur CocoaPods swasta spesifikasi repositori, dan mempublikasikan kustom Anda TensorFlowLiteC kerangka kerja untuk repo pribadi Anda. Anda dapat menyalin ini berkas podspec dan memodifikasi beberapa nilai-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 Anda sendiri TensorFlowLiteC.podspec file, Anda dapat mengikuti petunjuk tentang cara menggunakan CocoaPods swasta untuk menggunakannya dalam proyek Anda sendiri. Anda juga dapat memodifikasi TensorFlowLite(Swift|ObjC).podspec ke titik untuk Anda kustom TensorFlowLiteC pod dan digunakan baik Swift atau Objective-C pod dalam proyek aplikasi Anda.

Pengembang Bazel

Jika Anda menggunakan Bazel sebagai alat membangun utama, Anda bisa menambahkan TensorFlowLite ketergantungan dengan target Anda di Anda BUILD berkas.

Untuk Swift:

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

Untuk Objective-C:

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

Saat Anda membangun proyek aplikasi, setiap perubahan pada library 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 TensorFlowLiteC kerangka manual, Anda harus menambahkan TensorFlowLiteC kerangka sebagai kerangka tertanam untuk proyek aplikasi Anda. Unzip TensorFlowLiteC_framework.zip dihasilkan dari membangun di atas untuk mendapatkan TensorFlowLiteC.framework direktori. Direktori ini adalah kerangka kerja aktual yang dapat dipahami Xcode.

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

  • Xcode 11: Pergi ke tab 'General' dari editor proyek untuk target aplikasi, dan menambahkan TensorFlowLiteC.framework bawah 'Frameworks, Perpustakaan, dan Embedded Konten' bagian.
  • Xcode 10 dan di bawah: Pergi ke tab 'General' dari editor proyek untuk target aplikasi, dan menambahkan TensorFlowLiteC.framework bawah 'Tertanam Binari'. Kerangka kerja juga harus ditambahkan secara otomatis di bawah bagian 'Kerangka dan Pustaka Tertaut'.

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

Setelah dua pengaturan ini selesai, Anda harus dapat mengimpor dan memanggil TensorFlow Lite C API, yang didefinisikan oleh file header di bawah TensorFlowLiteC.framework/Headers direktori.