1. Başlamadan önce
Önceki codelab'de, birkaç yüz görüntü sınıfını tanıyan temel bir görüntü etiketleme modeli kullanan Android ve iOS uygulaması oluşturmuştunuz. Bir çiçeğin fotoğrafını çok genel bir şekilde tanıyarak taç yaprak, çiçek, bitki ve gökyüzü olarak algıladı.
Uygulamayı belirli çiçekleri (ör. papatyalar veya güller) tanıyacak şekilde güncellemek için, tanımak istediğiniz her çiçek türüne ait çok sayıda örnekle eğitilmiş özel bir model kullanmanız gerekir.
Ön koşullar
- Bu öğrenme rotasındaki önceki Codelab.
Neler oluşturacak ve öğreneceksiniz?
- TensorFlow Lite Model Maker'ı kullanarak özel bir görüntü sınıflandırıcı modeli eğitme
İhtiyacınız olanlar
- Özel bir donanım gerekmez. Her şey tarayıcıda Google Colab kullanılarak tamamlanabilir.
2. Başlayın
Takip etmeniz için gereken tüm kodlar sizin için hazırlanmıştır ve Google Colab kullanılarak yürütülebilir. Buradan erişebilirsiniz. Google Colab'e erişiminiz yoksa depoyu klonlayabilir ve ImageClassificationMobile->colab dizininde bulunan CustomImageClassifierModel.ipynb adlı not defterini kullanabilirsiniz.
Belirli çiçeklerle ilgili çok sayıda örneğiniz varsa TensorFlow Lite Model Maker ile bu çiçekleri tanıyacak bir model eğitmek nispeten kolaydır.
Bunu yapmanın en kolay yolu, resimleri içeren bir .zip veya .tgz dosyası oluşturmaktır. Resimler, dizinler halinde sıralanır. Örneğin, papatya, karahindiba, gül, ayçiçeği ve lale resimleri kullanıyorsanız bunları aşağıdaki gibi dizinler halinde düzenleyebilirsiniz:

Bu dosyayı sıkıştırıp bir sunucuda barındırdığınızda modelleri bu dosyayla eğitebilirsiniz. Bu laboratuvarın geri kalanında sizin için hazırlanmış birini kullanacaksınız.
Bu laboratuvarda, modeli eğitmek için Google Colab'i kullandığınız varsayılacaktır. Colab'i colab.research.google.com adresinde bulabilirsiniz. Başka bir ortam kullanıyorsanız TensorFlow da dahil olmak üzere birçok bağımlılığı yüklemeniz gerekebilir.
3. Bağımlılıkları yükleme ve içe aktarma
- TensorFlow Lite Model Maker'ı yükleyin. Bu işlemi pip install komutuyla yapabilirsiniz. Sondaki &> /dev/null yalnızca çıkışı bastırır. Model Maker, hemen alakalı olmayan çok sayıda şey çıkarıyor. Eldeki göreve odaklanabilmeniz için bu bildirimler devre dışı bırakıldı.
# Install Model maker
!pip install -q tflite-model-maker &> /dev/null
- Ardından, kullanmanız gereken kitaplıkları içe aktarmanız ve TensorFlow 2.x kullandığınızdan emin olmanız gerekir:
# Imports and check that we are using TF2.x
import numpy as np
import os
from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import image_classifier
from tflite_model_maker.image_classifier import DataLoader
import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')
Ortam hazır olduğuna göre artık modelinizi oluşturmaya başlayabilirsiniz.
4. Verilerinizi İndirme ve Hazırlama
Resimleriniz klasörler halinde düzenlenmişse ve bu klasörler sıkıştırılmışsa, zip dosyasını indirip açtığınızda resimleriniz bulundukları klasöre göre otomatik olarak etiketlenir. Bu dizin, data_path olarak referans verilecek.
data_path = tf.keras.utils.get_file(
'flower_photos',
'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
untar=True)
Bu veri yolu daha sonra TensorFlow Lite Model Maker'ın ImageClassifierDataLoader sınıfıyla eğitim için bir sinir ağı modeline yüklenebilir. Kamerayı klasöre doğru tutmanız yeterlidir.
Makine öğrenimiyle modelleri eğitirken önemli bir nokta, verilerinizin tümünü eğitim için kullanmamaktır. Modeli daha önce görmediği verilerle test etmek için biraz bekleyin. Bu işlem, ImageClassifierDataLoader'dan dönen veri kümesinin bölme yöntemiyle kolayca yapılabilir. 0, 9 değerini ileterek verilerin% 90'ını eğitim verisi, %10'unu ise test verisi olarak alırsınız:
data = DataLoader.from_folder(data_path)
train_data, test_data = data.split(0.9)
Verileriniz hazır olduğuna göre artık bunları kullanarak bir model oluşturabilirsiniz.
5. Görüntü sınıflandırıcı modelini oluşturma
Model Maker, sinir ağının tasarlanmasıyla ilgili birçok ayrıntıyı soyutlar. Böylece ağ tasarımı, evrişimler, yoğun, relu, düzleştirme, kayıp işlevleri ve optimize ediciler gibi konularla uğraşmanız gerekmez. Varsayılan bir model için, sağlanan verilerle bir sinir ağı eğiterek model oluşturmak üzere tek bir kod satırı kullanabilirsiniz:
model = image_classifier.create(train_data)
Bu komutu çalıştırdığınızda aşağıdaki gibi bir çıkış görürsünüz:
Model: "sequential_2"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
hub_keras_layer_v1v2_2 (HubK (None, 1280) 3413024
_________________________________________________________________
dropout_2 (Dropout) (None, 1280) 0
_________________________________________________________________
dense_2 (Dense) (None, 5) 6405
=================================================================
Total params: 3,419,429
Trainable params: 6,405
Non-trainable params: 3,413,024
_________________________________________________________________
None
Epoch 1/5
103/103 [===] - 15s 129ms/step - loss: 1.1169 - accuracy: 0.6181
Epoch 2/5
103/103 [===] - 13s 126ms/step - loss: 0.6595 - accuracy: 0.8911
Epoch 3/5
103/103 [===] - 13s 127ms/step - loss: 0.6239 - accuracy: 0.9133
Epoch 4/5
103/103 [===] - 13s 128ms/step - loss: 0.5994 - accuracy: 0.9287
Epoch 5/5
103/103 [===] - 13s 126ms/step - loss: 0.5836 - accuracy: 0.9385
İlk bölümde model mimariniz gösterilir. Model Oluşturucu'nun arka planda yaptığı işleme Transfer Öğrenimi adı verilir. Bu işlemde,başlangıç noktası olarak mevcut ve önceden eğitilmiş bir model kullanılır. Bu modelin, resimlerin nasıl oluşturulduğu hakkında öğrendikleri alınır ve bu 5 çiçeği anlamak için uygulanır. Bu bilgiyi, şu metnin yer aldığı ilk satırda görebilirsiniz:
hub_keras_layer_v1v2_2 (HubK (None, 1280) 3413024
Buradaki anahtar kelime "Hub". Bu kelime, modelin TensorFlow Hub'dan geldiğini gösteriyor. TensorFlow Lite Model Maker, varsayılan olarak 1.000 tür görüntüyü tanımak için tasarlanmış "MobileNet" adlı bir modeli kullanır. Buradaki mantık, 1.000 sınıfı ayırt etmek için "özellikleri" öğrenerek kullandığı metodolojinin yeniden kullanılabileceğidir. Aynı "özellikler" 5 çiçek sınıfımızla eşlenebilir. Bu nedenle, sıfırdan öğrenilmeleri gerekmez.
Model, 5 dönemden geçti. Dönem, nöral ağın görüntüleri etiketleriyle eşleştirmeye çalıştığı tam bir eğitim döngüsüdür. Yaklaşık 1 dakika içinde 5 dönemden geçtiğinde eğitim verilerinde% 93,85 doğruluk oranına ulaştı. 5 sınıf olduğu göz önüne alındığında, rastgele bir tahminin doğruluk oranı% 20 olur. Bu da ilerleme kaydettiğiniz anlamına gelir. (Ayrıca bir "kayıp" sayısı da bildirilir ancak bunu şimdilik güvenle yoksayabilirsiniz.)
Daha önce verileri eğitim ve test verileri olarak ayırdınız. Böylece, ağın daha önce görmediği veriler üzerindeki performansını ölçebilirsiniz. Bu, test verilerinde model.evaluate kullanılarak gerçek dünyada nasıl performans gösterebileceğine dair daha iyi bir göstergedir:
loss, accuracy = model.evaluate(test_data)
Bu işlem sonucunda aşağıdaki gibi bir çıktı elde edilir:
12/12 [===] - 5s 115ms/step - loss: 0.6622 - accuracy: 0.8801
Buradaki doğruluk değerine dikkat edin. Bu oran %88,01'dir.Dolayısıyla, gerçek dünyada varsayılan model kullanıldığında bu doğruluk düzeyi beklenmelidir. Bu, yaklaşık bir dakikada eğittiğiniz varsayılan model için kötü bir sonuç değil. Elbette modeli iyileştirmek için birçok ince ayar yapabilirsiniz. Bu da başlı başına bir bilimdir.
6. Modeli dışa aktarma
Model eğitildiğine göre bir sonraki adım, modeli mobil uygulamanın kullanabileceği .tflite biçiminde dışa aktarmaktır. Model Oluşturucu, kullanabileceğiniz kolay bir dışa aktarma yöntemi sunar. Çıkış yapılacak dizini belirtmeniz yeterlidir.
Kod:
model.export(export_dir='/mm_flowers')
Bu kodu Google Colab'de çalıştırıyorsanız ekranın sol tarafındaki klasör simgesini tıklayarak modeli görebilirsiniz:

Buradan geçerli dizinin listesini alırsınız. Bir dizini "yukarı" taşımak için belirtilen düğmeyi kullanın:

Kodunuzda mm_flowers dizinine aktarma işlemi belirtmişsiniz. Bu dosyayı açtığınızda "model.tflite" adlı bir dosya görürsünüz. Bu, eğitilmiş modelinizdir.

Dosyayı seçtiğinizde sağ tarafta 3 nokta görünür. Bağlam menüsü açmak için bunları tıklayın. Modeli buradan indirebilirsiniz.

Birkaç dakika sonra modeliniz indirilenler klasörünüze indirilir.
7. Tebrikler
Artık mobil uygulamanıza entegre etmeye hazırsınız. Bu işlemi bir sonraki laboratuvarda yapacaksınız.