1. Pengantar
TensorFlow adalah framework machine learning serbaguna. TensorFlow dapat digunakan di mana saja, mulai dari melatih model besar di berbagai cluster di cloud, hingga menjalankan model secara lokal pada sistem tersemat seperti ponsel Anda.
Codelab ini menggunakan TensorFlow Lite untuk menjalankan model pengenalan citra di perangkat iOS.
Yang Akan Anda Pelajari
- Cara mengoptimalkan model menggunakan konverter TFLite.
- Cara menjalankannya di aplikasi iOS siap pakai menggunakan penerjemah TFLite.
Yang akan Anda buat
Aplikasi kamera sederhana yang menjalankan program pengenalan gambar TensorFlow untuk mengidentifikasi bunga.
Prasyarat
Jika menjalankan codelab ini di hardware Anda sendiri, pastikan Anda telah menginstal berikut ini:
- Xcode 10 atau yang lebih tinggi
- CocoaPods 1.8.0 atau yang lebih tinggi
Lisensi: Gratis digunakan
2. Melatih pengenal bunga menggunakan Colab
Codelab ini akan menggunakan Colaboratory dan Xcode.
Buka Colab yang menggunakan TensorFlow Lite Model Maker untuk melatih pengklasifikasi agar mengenali bunga menggunakan pemelajaran transfer dan mengekspor model TFLite untuk digunakan di aplikasi seluler.
3. Menyiapkan direktori kerja
Meng-clone repositori Git
Perintah berikut akan meng-clone repositori Git yang berisi file yang diperlukan untuk codelab ini:
git clone https://github.com/tensorflow/examples.git
Sekarang, masukkan cd
ke root project Xcode dari clone yang baru saja Anda buat. Di situlah Anda akan bekerja selama sisa codelab ini:
cd examples/lite/examples/image_classification/ios
4. Menyiapkan aplikasi iOS
Menginstal Dependensi
Dengan menggunakan CocoaPods, instal dependensi aplikasi iOS (termasuk TensorFlow Lite). Setelah perintah instal selesai, buka ImageClassification.xcworkspace
untuk membuka project di Xcode.
pod install --repo-update open ImageClassification.xcworkspace
5. Menjalankan pengujian aplikasi
Untuk menggunakan kamera, aplikasi harus dijalankan di perangkat sebenarnya karena Simulator iOS tidak memiliki akses ke kamera Mac Anda. Untuk membangun aplikasi di perangkat iOS, Anda harus terdaftar di Apple Developer Program atau memiliki akses ke perangkat yang telah disediakan orang lain untuk Anda.
Jika ingin menjalankan codelab ini di simulator, Anda harus menyalin gambar ke pasteboard dari Safari di simulator itu sendiri. Berikut adalah langkah-langkah untuk memproses gambar di simulator:
- Bangun aplikasi ke target simulator pilihan Anda.
- Dalam simulator iOS, tekan Cmd+Shift+H untuk meminimalkan aplikasi.
- Ketuk Safari di bagian bawah layar utama dan telusuri gambar.
- Di hasil penelusuran Google Gambar, ketuk hasil dan tekan lama gambar. Pada dialog yang muncul, pilih "Salin".
- Kembali ke aplikasi TFL Classify. Gambar yang disalin akan otomatis ditampilkan bersama dengan hasil inferensi. Jika tidak, pastikan Anda menyalin data gambar itu sendiri dan bukan URL ke gambar.
Menguji Build dan menginstal aplikasi
Sebelum melakukan perubahan apa pun pada aplikasi, mari jalankan versi yang disertakan dengan repositori. Pilih perangkat iOS Anda dari menu dropdown di kiri atas:
Kemudian, tekan Cmd+R atau tekan tombol Putar di Xcode untuk membangun aplikasi di perangkat Anda. Aplikasi akan diluncurkan secara otomatis setelah diinstal ke perangkat Anda.
Versi aplikasi ini menggunakan MobileNet standar, yang dilatih sebelumnya dengan 1.000 kategori ImageNet. Ini akan terlihat seperti berikut:
6. Menjalankan aplikasi yang disesuaikan
Penyiapan aplikasi default mengklasifikasikan gambar ke salah satu dari 1.000 class ImageNet, menggunakan MobileNet standar.
Sekarang, mari kita modifikasi aplikasi sehingga aplikasi akan menggunakan model yang telah dilatih ulang untuk kategori gambar kustom yang dilatih di Colab.
7. Mengonversi aplikasi untuk menjalankan model Anda
Menambahkan file model Anda ke project
Resource model project berada di ImageClassification > Model
pada navigator project Xcode. Untuk menggantinya, hapus terlebih dahulu dua file yang ada di grup Model
. Saat diminta, pilih "Move to Trash":
Kemudian, tarik file model.tflite
dan labels.txt
yang Anda download dari Colab ke grup Model. Saat diminta, pastikan Copy items if needed
dan Add to targets
dipilih.
Mengubah kode aplikasi
Agar aplikasi berfungsi, kita perlu mengupdate jalur logika pemuatan model agar mengarah ke model baru yang kita tambahkan.
Buka ModelDataHandler.swift (jalur navigator Xcode: ImageClassification -> ModelDataHandler -> ModelDataHandler.swift) dan Ubah line 36 menjadi
// before static let modelInfo: FileInfo = (name: "mobilenet_quant_v1_224", extension: "tflite") // after static let modelInfo: FileInfo = (name: "model", extension: "tflite")
Pastikan untuk menyimpan semua perubahan.
8. Menjalankan aplikasi yang disesuaikan
Tekan Cmd+B atau tekan tombol Putar di Xcode untuk membuat aplikasi di perangkat Anda. Setelah aplikasi diluncurkan, maka akan terlihat seperti ini:
Anda dapat menahan tombol daya dan tombol naikkan volume secara bersamaan untuk mengambil screenshot.
Sekarang coba telusuri bunga di web, arahkan kamera ke layar komputer, dan lihat apakah gambar-gambar tersebut telah diklasifikasikan dengan benar.
Atau minta teman untuk memotret Anda dan mencari tahu jenis TensorFlow Anda
.
9. Bagaimana cara kerjanya?
Setelah aplikasi berjalan, mari kita lihat kode khusus TensorFlow Lite.
TensorFlowLiteSwift
Aplikasi ini menggunakan library TensorFlowLite Swift melalui CocoaPods. Library Swift adalah wrapper tipis di atas TFLite C API, yang merupakan wrapper library TFLite C++.
Baris berikut dalam file Podfile modul mengambil versi terbaru repositori spesifikasi CocoaPods global pod terbaru ke dalam project.
target 'ImageClassification' do
use_frameworks!
# Pods for ImageClassification
pod 'TensorFlowLiteSwift'
end
Menggunakan TensorFlow Lite Swift API
Semua kode yang berinteraksi dengan TensorFlow Lite terdapat di ModelDataHandler.swift.
Penyiapan
Blok minat pertama adalah penginisialisasi untuk ModelDataHandler
:
/// A failable initializer for `ModelDataHandler`. A new instance is created if the model and
/// labels files are successfully loaded from the app's main bundle. Default `threadCount` is 1.
init?(modelFileInfo: FileInfo, labelsFileInfo: FileInfo, threadCount: Int = 1) {
let modelFilename = modelFileInfo.name
// Construct the path to the model file.
guard let modelPath = Bundle.main.path(
forResource: modelFilename,
ofType: modelFileInfo.extension
) else {
print("Failed to load the model file with name: \(modelFilename).")
return nil
}
// Specify the options for the `Interpreter`.
self.threadCount = threadCount
var options = InterpreterOptions()
options.threadCount = threadCount
do {
// Create the `Interpreter`.
interpreter = try Interpreter(modelPath: modelPath, options: options)
// Allocate memory for the model's input `Tensor`s.
try interpreter.allocateTensors()
} catch let error {
print("Failed to create the interpreter with error: \(error.localizedDescription)")
return nil
}
// Load the classes listed in the labels file.
loadLabels(fileInfo: labelsFileInfo)
}
Ada beberapa baris yang harus dibahas secara lebih rinci.
Baris berikut akan membuat juru bahasa TFLite:
interpreter = try Interpreter(modelPath: modelPath, options: options)
Interpreter bertanggung jawab untuk meneruskan input data mentah melalui grafik TensorFlow. Kita meneruskan jalur ke penafsir ke model pada disk, lalu penafsir memuatnya sebagai FlatBufferModel.
Baris terakhir memuat daftar label:
loadLabels(fileInfo: labelsFileInfo)
Semua ini dilakukan adalah memuat {i>string<i} dari file teks ke dalam memori.
Menjalankan model
Blok minat kedua adalah metode runModel
. Fungsi ini mengambil CVPixelBuffer
sebagai input, menjalankan penafsir, dan menampilkan teks yang akan dicetak di aplikasi.
try interpreter.copy(rgbData, toInputAt: 0)
// ...
try interpreter.invoke()
// ...
outputTensor = try interpreter.output(at: 0)
10. Apa Langkah Selanjutnya?
Berikut beberapa link untuk informasi lebih lanjut:
- Pelajari TFLite lebih lanjut dari dokumen di tensorflow.org dan repositori sumber.
- Coba beberapa model TFLite yang telah dilatih sebelumnya, termasuk detektor frasa pengaktif ucapan dan versi smart reply di perangkat.
- Pelajari lebih lanjut TensorFlow secara umum dengan dokumen memulai kami.