Resim sınıflandırıcınız için özel bir model oluşturma

1. Başlamadan önce

Önceki codelab'de, Android ve iOS için birkaç yüz görüntü sınıfını tanıyan temel bir görüntü etiketleme modeli kullanan bir uygulama oluşturmuştunuz. Bir çiçeğin resmini taç yapraklar, çiçek, bitki ve gökyüzü gibi çok genel bir şekilde değerlendirdi.

Örneğin, uygulamayı belirli çiçekleri, papatyaları veya gülleri tanıyacak şekilde güncellemek için, tanımak istediğiniz her çiçek türünden çok sayıda örnekle eğitilmiş özel bir modele ihtiyacınız vardır.

Ön koşullar

  • Bu öğrenme rotasındaki önceki Codelab.

Neler geliştirip öğreneceksiniz?

  • TensorFlow Lite Model Maker kullanarak Resim Sınıflandırıcı özel modelini eğitme.

Gerekenler

  • Belirli bir donanım gerekmez. Tarayıcıda Google Colab kullanılarak tüm işlemler tamamlanabilir.

2. Başlayın

Uygulanacak tüm kodlar sizin için hazırlanmıştır ve Google Colab'i kullanarak yürütmek üzere buradan yararlanabilirsiniz. Google Colab'e erişiminiz yoksa depoyu klonlayıp ImageClassificationMobile->colab dizininde bulunan CustomImageClassifierModel.ipynb adlı not defterini kullanabilirsiniz.

Belirli çiçeklere ilişkin çok sayıda örneğiniz varsa bir modeli TensorFlow Lite Model maker ile eğiterek bu çiçekleri tanımak nispeten kolay olacaktır.

Bunu yapmanın en kolay yolu, resimleri içeren, dizinlere ayrılmış bir .zip veya .tgz dosyası oluşturmaktır. Örneğin, papatya, karahindiba, gül, ayçiçeği ve lale resimlerini kullanıyorsanız bu resimleri şu şekilde dizinler halinde organize edebilirsiniz:

4ee12554e75b103f.png

Zip dosyasını sıkıştırıp bir sunucuda barındırın, böylece modelleri bu araçla eğitebilirsiniz. Bu laboratuvarın geri kalanında sizin için hazırlanan bir uygulamayı kullanacaksınız.

Bu laboratuvarda, modeli eğitmek için Google Colab'i kullandığınız varsayılır. Colab'i colab.research.google.com adresinde bulabilirsiniz. Başka bir ortam kullanıyorsanız TensorFlow da dahil olmak üzere çok sayıda bağımlılık yüklemeniz gerekebilir.

3. Bağımlıları yükleme ve içe aktarma

  1. TensorFlow Lite Model Maker'ı yükleyin. Bunu pip yükleme ile yapabilirsiniz. &> /dev/null yalnızca çıkışı bastırır. Model Maker, hemen alakalı olmayan birçok öğe üretir. Elinizdeki göreve odaklanabilmeniz için azaltıldı.
# Install Model maker
!pip install -q tflite-model-maker &> /dev/null
  1. 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 sıra, modelinizi oluşturmaya geldi.

4. Verilerinizi İndirme ve Hazırlama

Resimleriniz klasörler halinde organize edilmişse ve bu klasörler sıkıştırılmışsa; zip dosyasını indirip sıkıştırılmış olarak açarsanız resimleriniz, bulundukları klasöre göre otomatik olarak etiketlenir. Bu dizine data_path olarak referans verilir.

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 nöral ağ modeline yüklenebilir. Bunun için klasöre işaret etmeniz yeterlidir.

Modelleri makine öğrenimiyle eğitmenin önemli unsurlarından biri, verilerinizin tümünü eğitim için kullanmamaktır. Biraz basılı tutarak modeli daha önce görmediği verilerle test edin. Bu işlemi, ImageClassifierDataLoader alanından alınan veri kümesinin bölme yöntemi ile kolayca yapabilirsiniz. Ona 0, 9 yazarak% 90'ını eğitim verileriniz, %10'unu ise test verileriniz 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 bu verileri kullanarak bir model oluşturabilirsiniz.

5. Resim Sınıflandırıcı Modelini Oluşturma

Model Maker, nöral ağı tasarlamaya ilişkin birçok ayrıntıyı soyutladığından, ağ tasarımıyla ve kıvrımlar, yoğun, belirsizlik, düzleştirme, kayıp işlevleri ve optimize ediciler gibi konularla uğraşmak zorunda kalmazsınız. Varsayılan bir model için, sağlanan verilerle nöral ağı eğiterek tek bir kod satırı kullanarak model oluşturabilirsiniz:

model = image_classifier.create(train_data)

Bu komut dosyasını çalıştırdığınızda aşağıdakine benzer 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üm, model mimarinizi gösterir. Model Maker'ın perde arkasında yaptığı şey Öğrenimi Aktar. Bu işlem,başlangıç noktası olarak mevcut bir modelin kullanıldığı modeldir. Modelin, resimlerin nasıl oluşturulduğuna dair öğrendiklerini alıp bunları 5 çiçeğin anlaşılmasına uygulamak için de kullanabilirsiniz. Bunu, şu ilk satırda görebilirsiniz:

hub_keras_layer_v1v2_2 (HubK (None, 1280)              3413024

Buradaki kilit nokta, bu modelin TensorFlow Hub'dan geldiğini gösteren "Hub" kelimesi. TensorFlow Lite Model Maker varsayılan olarak "MobileNet" adlı bir model kullanır 1000 resim türünü tanıyacak şekilde tasarlanmıştır. Buradaki mantık, modelin "özellikleri" öğrenerek kullandığı metodolojinin ayırt etmek için tekrar kullanılabilir. Aynı "özellikler" 5 çiçek sınıfımızla eşleştirilebiliyor. Böylece, bunların sıfırdan öğrenilmesi gerekmiyor.

Model 5 dönemden geçti. Burada 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. 5 dönem boyunca, yaklaşık 1 dakika içinde eğitim verileri% 93, 85 oranında doğruydu. 5 sınıf olduğu düşünüldüğünde, rastgele bir tahmin% 20 doğru olacaktır. (Ayrıca bir "kayıp" numarası da bildirir, ancak şimdilik bu sayıyı güvenli bir şekilde göz ardı edebilirsiniz.)

Daha önce verileri eğitim ve test verilerine böldünüz. Böylece, ağın daha önce görmediği veriler üzerindeki performansına ilişkin bir ölçüm elde edebilirsiniz. Bu, test verilerinde model.evaluate kullanarak ağın gerçek dünyada nasıl performans gösterebileceğine dair daha iyi bir göstergedir:

loss, accuracy = model.evaluate(test_data)

Bu komut şuna benzer bir çıktı verir:

12/12 [===] - 5s 115ms/step - loss: 0.6622 - accuracy: 0.8801

Bu bilgilerin doğruluğuna dikkat edin. Bu oran %88,01'dir.Yani gerçek dünyada varsayılan model kullanılırken bu doğruluk düzeyi beklenmelidir. Bu, yaklaşık bir dakika boyunca eğittiğiniz varsayılan model için fena değil. Elbette modeli iyileştirmek için birçok ince ayar yapabilirsiniz ve bu başlı başına bir bilimdir.

6. Modeli Dışa Aktarma

Model eğitildi. Bir sonraki adım, modeli bir mobil uygulamanın kullanabileceği .tflite biçiminde dışa aktarmaktır. Model oluşturucu, kullanabileceğiniz kolay bir dışa aktarma yöntemi sağlar. Çıkışın yapılacağı dizini belirtmeniz yeterlidir.

Kod:

model.export(export_dir='/mm_flowers')

Bunu Google Colab'de çalıştırıyorsanız ekranın solundaki klasör simgesini tıklayarak modeli görebilirsiniz:

cc5b9988775633b4.png

Burada geçerli dizinin bir listesini görürsünüz. "Yukarı" taşımak için belirtilen düğmeyi kullanın dizin:

51e6ac47c992142a.png

Kodunuzda, mm_flowers dizinine dışa aktarmayı belirttiğiniz kod. Bu dosyayı açtığınızda "model.tflite" adlı bir dosya göreceksiniz. Bu, eğitilmiş modelinizdir.

57bad87f294fd189.png

Dosyayı seçtiğinizde sağda 3 nokta pop-up'ını görürsünüz. İçerik menüsünü görmek için bunları tıklayın. Ardından, modeli buradan indirebilirsiniz.

aee14ad10c4a8a1a.png

Birkaç saniye sonra modeliniz, indirilenler klasörünüze indirilir.

7. Tebrikler

Artık bu uygulamayı mobil uygulamanıza entegre etmeye hazırsınız. Bu işlemi bir sonraki laboratuvarda yapacaksınız.