1. Giriş
TensorFlow çok amaçlı bir makine öğrenimi çerçevesidir. TensorFlow, buluttaki kümeler genelinde büyük modelleri eğitmekten telefonunuz gibi yerleşik bir sistemde modelleri yerel olarak çalıştırmaya kadar her yerde kullanılabilir.
Bu codelab'de, iOS cihazda görüntü tanıma modeli çalıştırmak için TensorFlow Lite kullanılır.
Öğrenecekleriniz
- TFLite dönüştürücüyü kullanarak modelinizi optimize etme
- TFLite yorumlayıcısını kullanarak önceden hazırlanmış bir iOS uygulamasında çalıştırma.
Oluşturacağınız nedir?
Çiçekleri tanımlamak için TensorFlow görüntü tanıma programı çalıştıran basit bir kamera uygulaması.
Ön koşullar
Bu codelab'i kendi donanımınızda yapıyorsanız lütfen aşağıdakilerin yüklü olduğundan emin olun:
- Xcode 10 veya sonraki sürümler
- CocoaPods 1.8.0 veya sonraki sürümler
Lisans: Ücretsiz kullanım
2. Colab'i kullanarak bir çiçek figürü eğitin
Bu codelab'de Colaboratory ve Xcode kullanılacaktır.
Aktarımla öğrenme yöntemini kullanarak çiçekleri tanımak ve mobil uygulamada kullanılacak bir TFLite modelini dışa aktarmak için bir sınıflandırıcıyı eğitmek için TensorFlow Lite Model Maker'ı kullanan Colab'ı açın.
3. Çalışma dizinini ayarlama
Git deposunu klonlama
Aşağıdaki komut, bu codelab için gerekli olan dosyaları içeren Git deposunu klonlar:
git clone https://github.com/tensorflow/examples.git
Şimdi, az önce oluşturduğunuz klonun Xcode proje köküne cd
ekleyin. Bu codelab'in geri kalan kısmı için şurada çalışırsınız:
cd examples/lite/examples/image_classification/ios
4. iOS uygulamasını kurma
Bağımlılıkları Yükleme
CocoaPods'u kullanarak iOS uygulamasının bağımlılıklarını (TensorFlow Lite dahil) yükleyin. Yükleme komutu tamamlandıktan sonra projeyi Xcode'da açmak için ImageClassification.xcworkspace
dosyasını açın.
pod install --repo-update open ImageClassification.xcworkspace
5. Uygulamayı test etme
iOS Simülatörü'nün Mac'inizin kamerasına erişimi olmadığından, kamerayı kullanmak için uygulamanın gerçek bir cihazda çalıştırılması gerekir. iOS cihaz derlemek için Apple Geliştirici Programı'na kayıtlı olmanız veya başka birinin sizin için temel hazırlığını yaptığı bir cihaza erişiminiz olması gerekir.
Simülatörde bu codelab'i çalıştırmak istiyorsanız simülatörün kendisinde Safari'den yapıştırma panosuna görüntü kopyalamanız gerekir. Simülasyon aracında görüntü işleme adımları şunlardır:
- Uygulamayı, seçtiğiniz bir simülatör hedefi için derleyin.
- iOS simülatöründe uygulamayı küçültmek için Cmd+Üst Karakter+H tuşlarına basın.
- Ana ekranın alt kısmındaki Safari'ye dokunun ve bir resim arayın.
- Google Görsel arama sonuçlarında bir sonuca dokunun ve resme uzun basın. Açılan iletişim kutusunda "Kopyala"yı seçin.
- TFL Classify uygulamasına dönün. Kopyalanan resim, çıkarım sonuçlarıyla birlikte otomatik olarak gösterilir. Görünmüyorsa resmin URL'sini değil, resim verilerini kopyaladığınızdan emin olun.
Uygulamayı test etme ve yükleme
Uygulamada herhangi bir değişiklik yapmadan önce depoyla birlikte gönderilen sürümü çalıştıralım. Sol üstteki açılır menüden iOS cihazınızı seçin:
Ardından uygulamayı cihazınızda oluşturmak için Cmd+R tuşlarına basın veya Xcode'da Oynat düğmesine basın. Uygulama, cihazınıza yüklendikten sonra otomatik olarak başlar.
Uygulamanın bu sürümü, 1.000 ImageNet kategorisinde önceden eğitilmiş standart MobileNet'i kullanır. Şuna benzer bir görünümde olacaktır:
6. Özelleştirilmiş uygulamayı çalıştırın
Varsayılan uygulama kurulumu, standart MobileNet'i kullanarak resimleri 1.000 ImageNet sınıfından birinde sınıflandırır.
Şimdi uygulamayı, Colab'de eğitilen özel resim kategorilerimiz için yeniden eğitilen modelimizi kullanacak şekilde değiştirelim.
7. Uygulamayı, modelinizi çalıştıracak şekilde dönüştürme
Model dosyalarınızı projeye ekleyin
Projenin model kaynakları, Xcode proje gezgininde ImageClassification > Model
konumunda bulunur. Bunları değiştirmek için önce Model
grubundaki mevcut iki dosyayı silin. İstendiğinde "Çöp kutusuna taşı"yı seçin:
Ardından, Colab'den indirdiğiniz model.tflite
ve labels.txt
dosyalarını Model grubuna sürükleyin. İstendiğinde hem Copy items if needed
hem de Add to targets
öğesinin seçili olduğundan emin olun.
Uygulamanın kodunu değiştirme
Uygulamamızın çalışmasını sağlamak için model yükleme mantığının yolunu, eklediğimiz yeni modele işaret edecek şekilde güncellememiz gerekiyor.
ModelDataHandler.swift dosyasını açın (Xcode gezgin yolu: ImageClassification -> ModelDataHandler -> ModelDataHandler.swift) ve 36. satırı
// before static let modelInfo: FileInfo = (name: "mobilenet_quant_v1_224", extension: "tflite") // after static let modelInfo: FileInfo = (name: "model", extension: "tflite")
Tüm değişiklikleri kaydettiğinizden emin olun.
8. Özelleştirilmiş uygulamayı çalıştırın
Uygulamayı cihazınızda oluşturmak için Cmd+B tuşlarına basın veya Xcode'da Oynat düğmesine basın. Uygulama başlatıldıktan sonra şu şekilde görünmelidir:
Ekran görüntüsü almak için güç ve sesi artırma düğmelerini aynı anda basılı tutabilirsiniz.
Şimdi web'de çiçek araması yapmayı deneyin, kamerayı bilgisayar ekranına doğrultun ve bu resimlerin doğru şekilde sınıflandırılıp sınıflandırılmadığını kontrol edin.
Ya da bir arkadaşınızdan fotoğrafınızı çekmesini isteyin ve ne tür bir TensorFlow kullanıcısı olduğunuzu öğrenin
!
9. İşleyiş şekli
Artık uygulama çalıştığına göre, TensorFlow Lite'a özgü koda bakalım.
TensorFlowLiteSwift
Bu uygulama, CocoaPods aracılığıyla TensorFlowLite Swift kitaplığını kullanır. Swift kitaplığı, kendisi de TFLite C++ kitaplığının sarmalayıcısı olan TFLite C API üzerinde ince bir sarmalayıcıdır.
Modülün Podfile dosyasında yer alan aşağıdaki satırlar, kapsül global CocoaPods spesifikasyon deposunun en yeni sürümünü projeye çeker.
target 'ImageClassification' do
use_frameworks!
# Pods for ImageClassification
pod 'TensorFlowLiteSwift'
end
TensorFlow Lite Swift API'yi kullanma
TensorFlow Lite ile etkileşimde bulunan kodun tamamı ModelDataHandler.swift içinde bulunur.
Kurulum
İlgilenilen ilk blok, ModelDataHandler
için başlatıcıdır:
/// 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)
}
Daha ayrıntılı olarak ele alınması gereken birkaç satır var.
Aşağıdaki satır TFLite çevirmenini oluşturur:
interpreter = try Interpreter(modelPath: modelPath, options: options)
Yorumlayıcı, ham veri girişlerini TensorFlow grafiği üzerinden iletmekten sorumludur. Çevirmene disk üzerindeki modelimize giden yolu iletiriz ve çevirmen bunu bir FlatBufferModel olarak yükler.
Son satır etiket listesini yükler:
loadLabels(fileInfo: labelsFileInfo)
Bu işlem, dizeleri bir metin dosyasından belleğe yüklemektir.
Modeli çalıştırma
İlgilenilen ikinci blok runModel
yöntemidir. Giriş olarak bir CVPixelBuffer
alır, çevirmeni çalıştırır ve uygulamada yazdırılacak metni döndürür.
try interpreter.copy(rgbData, toInputAt: 0)
// ...
try interpreter.invoke()
// ...
outputTensor = try interpreter.output(at: 0)
10. Sıradaki adım:
Daha fazla bilgi edinmek için aşağıdaki bağlantılardan yararlanabilirsiniz:
- TFLite hakkında daha fazla bilgiyi tensorflow.org ve kaynak depo adresindeki belgelerden edinebilirsiniz.
- Konuşma özel kelime dedektörü ve cihaz üzerinde akıllı yanıt sürümü gibi diğer TFLite önceden eğitilmiş modelleri deneyin.
- Başlarken belgelerimizle genel olarak TensorFlow hakkında daha fazla bilgi edinin.