![]() | ![]() | ![]() | ![]() |
Bu CoLab notebook, kullanmak öğreneceksiniz TensorFlow Lite Modeli Üretici bir mobil cihazda, resimlerdeki salata saptayabilen özel bir nesne algılama modelini eğitmek için kütüphane.
Model Maker kütüphane kullanımları özel bir veri kümesini kullanarak bir TensorFlow Lite modeli eğitim sürecini kolaylaştırmak için öğrenme aktarırlar. Bir TensorFlow Lite modelini kendi özel veri kümenizle yeniden eğitmek, gereken eğitim verisi miktarını azaltır ve eğitim süresini kısaltır.
Sen oluşturuldu kamuya açık Salatalar veri kümesi, kullanacağız Açık Görüntüler veri kümesi V4 .
Veri kümesindeki her görüntü, aşağıdaki sınıflardan biri olarak etiketlenmiş nesneleri içerir:
- İyi pişmiş
- Peynir
- salata
- Deniz ürünleri
- Domates
Veri kümesi, nesnenin etiketiyle birlikte her nesnenin nerede bulunduğunu belirten sınırlayıcı kutuları içerir.
İşte veri kümesinden bir örnek resim:
Önkoşullar
Gerekli paketleri kurun
Dan Modeli Üretici paketinin dahil gerekli paketleri, yükleyerek başlayın GitHub repo ve değerlendirme için kullanacağız pycocotools kütüphanede.
pip install -q --use-deprecated=legacy-resolver tflite-model-maker
pip install -q pycocotools
Gerekli paketleri içe aktarın.
import numpy as np
import os
from tflite_model_maker.config import QuantizationConfig
from tflite_model_maker.config import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import object_detector
import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')
from absl import logging
logging.set_verbosity(logging.ERROR)
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/pkg_resources/__init__.py:119: PkgResourcesDeprecationWarning: 0.18ubuntu0.18.04.1 is an invalid version and will not be supported in a future release PkgResourcesDeprecationWarning, /tmpfs/src/tf_docs_env/lib/python3.7/site-packages/numba/core/errors.py:154: UserWarning: Insufficiently recent colorama version found. Numba requires colorama >= 0.3.9 warnings.warn(msg)
Veri kümesini hazırlayın
Burada AutoML aynı veri kümesini kullanacağız hızlı başlangıç .
: Mevcuttur veri kümesi Salatalar gs://cloud-ml-data/img/openimage/csv/salads_ml_use.csv
.
Eğitim için 175 resim, doğrulama için 25 resim ve test için 25 resim içerir. : Veri kümesi beş sınıfları vardır Salad
, Seafood
, Tomato
, Baked goods
, Cheese
.
Veri kümesi CSV biçiminde sağlanır:
TRAINING,gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg,Salad,0.0,0.0954,,,0.977,0.957,,
VALIDATION,gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg,Seafood,0.0154,0.1538,,,1.0,0.802,,
TEST,gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg,Tomato,0.0,0.655,,,0.231,0.839,,
- Her satır, daha büyük bir görüntünün içinde yerelleştirilmiş bir nesneye karşılık gelir ve her nesne özel olarak test, eğitim veya doğrulama verileri olarak belirlenir. Bu not defterinin ilerleyen aşamalarında bunun ne anlama geldiği hakkında daha fazla bilgi edineceksiniz.
- Buraya eklenen üç satır mevcut aynı görüntünün içinde bulunan üç farklı nesneleri göstermek
gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg
. - Her satır farklı bir etiket vardır:
Salad
,Seafood
,Tomato
vb - Sol üst ve sağ alt köşeler kullanılarak her görüntü için sınırlayıcı kutular belirlenir.
İşte bu üç satırın bir görselleştirmesi:
Kendi CSV dosyası ve geçerli bir veri kümesi oluşturmak için minimum gereksinimleri nasıl hazırlanacağı hakkında daha fazla bilgi edinmek istiyorsanız, bkz hazırlama eğitim veri Daha fazla detay için rehber.
Google Cloud yeni iseniz, merak edebilir gs://
URL araçları. Onlar saklanan dosyaların URL'lerdir Google Bulut Depolama (GCS). Eğer GCS halka dosyalarınızı yapmak veya Eğer müşterinize kimliğini , Model Maker benzer yerel dosyalara bu dosyaları okuyabilir.
Ancak, Model Maker'ı kullanmak için resimlerinizi Google Cloud'da tutmanız gerekmez. CSV dosyanızda yerel bir yol kullanabilirsiniz ve Model Maker sadece çalışacaktır.
Hızlı başlangıç
Bir nesne algılama modelini eğitmek için altı adım vardır:
Adım 1. Bir nesne algılama modeli mimarisi seçin.
Bu öğretici, EfficientDet-Lite0 modelini kullanır. EfficientDet-Lite [0-4] elde mobil / IOT uygun nesne algılama modelleri ailesidir EfficientDet mimari.
İşte her bir EfficientDet-Lite modelinin birbirine göre performansı.
Model mimarisi | Boyut(MB)* | Gecikme(ms)** | Ortalama Hassasiyet*** |
---|---|---|---|
EfficientDet-Lite0 | 4.4 | 37 | %25.69 |
EfficientDet-Lite1 | 5.8 | 49 | %30.55 |
EfficientDet-Lite2 | 7.2 | 69 | %33.97 |
EfficientDet-Lite3 | 11.4 | 116 | 37.70% |
EfficientDet-Lite4 | 19.9 | 260 | %41.96 |
* Tamsayılı nicelenmiş modellerin boyutu.
** Gecikme, CPU'da 4 iş parçacığı kullanılarak Pixel 4'te ölçülmüştür.
*** Ortalama Hassasiyet, COCO 2017 doğrulama veri setindeki mAP'dir (ortalama Ortalama Hassasiyet).
spec = model_spec.get('efficientdet_lite0')
Adım 2. Veri kümesini yükleyin.
Model Maker, girdi verilerini CSV formatında alacaktır. Kullanım object_detector.DataLoader.from_csv
veri kümesini yüklemek ve eğitim, doğrulama ve test görüntüleri bölünmeleri yöntemi.
- Eğitim görüntüleri: Bu görüntüler, salata bileşenlerini tanımak için nesne algılama modelini eğitmek için kullanılır.
- Doğrulama görüntüleri: Bunlar, eğitim sürecinde modelin görmediği görüntülerdir. Kaçınmak, eğitim biteceği siz karar için kullanırız aşırı oturma .
- Test görüntüleri: Bu görüntüler, nihai model performansını değerlendirmek için kullanılır.
CSV dosyasını doğrudan Google Cloud Storage'dan yükleyebilirsiniz, ancak Model Maker'ı kullanmak için resimlerinizi Google Cloud'da tutmanız gerekmez. Bilgisayarınızda yerel bir CSV dosyası belirtebilirsiniz ve Model Maker gayet iyi çalışacaktır.
train_data, validation_data, test_data = object_detector.DataLoader.from_csv('gs://cloud-ml-data/img/openimage/csv/salads_ml_use.csv')
Adım 3. TensorFlow modelini eğitim verileriyle eğitin.
- EfficientDet-Lite0 modeli kullanır
epochs = 50
o eğitim veri kümesi içinden 50 kez gidecek araçlar, varsayılan olarak,. Eğitim sırasında doğrulama doğruluğuna bakabilir ve fazla takmayı önlemek için erken durabilirsiniz. - Set
batch_size = 8
burada çok bunu eğitim veri kümesi içinde 175 görüntülere geçmesi 21 adımlar atması olduğunu göreceksiniz. - Set
train_whole_model=True
sadece doğruluğunu geliştirmek için kafa tabakasını eğitim yerine ince ayar için tüm modeli. Takas, modeli eğitmenin daha uzun sürebilmesidir.
model = object_detector.create(train_data, model_spec=spec, batch_size=8, train_whole_model=True, validation_data=validation_data)
Epoch 1/50 21/21 [==============================] - 48s 455ms/step - det_loss: 1.7625 - cls_loss: 1.1351 - box_loss: 0.0125 - reg_l2_loss: 0.0635 - loss: 1.8260 - learning_rate: 0.0090 - gradient_norm: 0.7406 - val_det_loss: 1.6586 - val_cls_loss: 1.1076 - val_box_loss: 0.0110 - val_reg_l2_loss: 0.0635 - val_loss: 1.7221 Epoch 2/50 21/21 [==============================] - 9s 452ms/step - det_loss: 1.6224 - cls_loss: 1.0936 - box_loss: 0.0106 - reg_l2_loss: 0.0635 - loss: 1.6860 - learning_rate: 0.0100 - gradient_norm: 0.8392 - val_det_loss: 1.5282 - val_cls_loss: 1.0231 - val_box_loss: 0.0101 - val_reg_l2_loss: 0.0635 - val_loss: 1.5917 Epoch 3/50 21/21 [==============================] - 11s 566ms/step - det_loss: 1.4834 - cls_loss: 1.0031 - box_loss: 0.0096 - reg_l2_loss: 0.0635 - loss: 1.5469 - learning_rate: 0.0099 - gradient_norm: 1.4031 - val_det_loss: 1.7022 - val_cls_loss: 1.2259 - val_box_loss: 0.0095 - val_reg_l2_loss: 0.0636 - val_loss: 1.7657 Epoch 4/50 21/21 [==============================] - 11s 541ms/step - det_loss: 1.2898 - cls_loss: 0.8467 - box_loss: 0.0089 - reg_l2_loss: 0.0636 - loss: 1.3534 - learning_rate: 0.0099 - gradient_norm: 1.8163 - val_det_loss: 1.5550 - val_cls_loss: 1.1171 - val_box_loss: 0.0088 - val_reg_l2_loss: 0.0636 - val_loss: 1.6185 Epoch 5/50 21/21 [==============================] - 20s 970ms/step - det_loss: 1.1272 - cls_loss: 0.7315 - box_loss: 0.0079 - reg_l2_loss: 0.0636 - loss: 1.1908 - learning_rate: 0.0098 - gradient_norm: 1.7106 - val_det_loss: 1.4876 - val_cls_loss: 1.0551 - val_box_loss: 0.0087 - val_reg_l2_loss: 0.0636 - val_loss: 1.5512 Epoch 6/50 21/21 [==============================] - 7s 364ms/step - det_loss: 1.0534 - cls_loss: 0.6823 - box_loss: 0.0074 - reg_l2_loss: 0.0636 - loss: 1.1170 - learning_rate: 0.0097 - gradient_norm: 1.8554 - val_det_loss: 1.1807 - val_cls_loss: 0.7640 - val_box_loss: 0.0083 - val_reg_l2_loss: 0.0636 - val_loss: 1.2443 Epoch 7/50 21/21 [==============================] - 12s 602ms/step - det_loss: 1.0153 - cls_loss: 0.6592 - box_loss: 0.0071 - reg_l2_loss: 0.0636 - loss: 1.0789 - learning_rate: 0.0096 - gradient_norm: 1.8227 - val_det_loss: 1.0752 - val_cls_loss: 0.6828 - val_box_loss: 0.0078 - val_reg_l2_loss: 0.0636 - val_loss: 1.1388 Epoch 8/50 21/21 [==============================] - 11s 519ms/step - det_loss: 0.9751 - cls_loss: 0.6304 - box_loss: 0.0069 - reg_l2_loss: 0.0636 - loss: 1.0387 - learning_rate: 0.0094 - gradient_norm: 1.7939 - val_det_loss: 1.0385 - val_cls_loss: 0.6612 - val_box_loss: 0.0075 - val_reg_l2_loss: 0.0636 - val_loss: 1.1021 Epoch 9/50 21/21 [==============================] - 12s 601ms/step - det_loss: 0.8982 - cls_loss: 0.5847 - box_loss: 0.0063 - reg_l2_loss: 0.0636 - loss: 0.9618 - learning_rate: 0.0093 - gradient_norm: 1.8244 - val_det_loss: 1.0142 - val_cls_loss: 0.6526 - val_box_loss: 0.0072 - val_reg_l2_loss: 0.0636 - val_loss: 1.0778 Epoch 10/50 21/21 [==============================] - 14s 691ms/step - det_loss: 0.9462 - cls_loss: 0.5986 - box_loss: 0.0070 - reg_l2_loss: 0.0636 - loss: 1.0098 - learning_rate: 0.0091 - gradient_norm: 1.9298 - val_det_loss: 0.9879 - val_cls_loss: 0.6335 - val_box_loss: 0.0071 - val_reg_l2_loss: 0.0636 - val_loss: 1.0515 Epoch 11/50 21/21 [==============================] - 11s 519ms/step - det_loss: 0.8871 - cls_loss: 0.5824 - box_loss: 0.0061 - reg_l2_loss: 0.0636 - loss: 0.9507 - learning_rate: 0.0089 - gradient_norm: 1.9898 - val_det_loss: 1.0021 - val_cls_loss: 0.6509 - val_box_loss: 0.0070 - val_reg_l2_loss: 0.0636 - val_loss: 1.0658 Epoch 12/50 21/21 [==============================] - 11s 549ms/step - det_loss: 0.8640 - cls_loss: 0.5624 - box_loss: 0.0060 - reg_l2_loss: 0.0636 - loss: 0.9277 - learning_rate: 0.0087 - gradient_norm: 1.9360 - val_det_loss: 1.0265 - val_cls_loss: 0.6728 - val_box_loss: 0.0071 - val_reg_l2_loss: 0.0636 - val_loss: 1.0901 Epoch 13/50 21/21 [==============================] - 11s 523ms/step - det_loss: 0.8405 - cls_loss: 0.5484 - box_loss: 0.0058 - reg_l2_loss: 0.0636 - loss: 0.9042 - learning_rate: 0.0085 - gradient_norm: 2.1855 - val_det_loss: 1.0291 - val_cls_loss: 0.6903 - val_box_loss: 0.0068 - val_reg_l2_loss: 0.0636 - val_loss: 1.0927 Epoch 14/50 21/21 [==============================] - 12s 572ms/step - det_loss: 0.8082 - cls_loss: 0.5297 - box_loss: 0.0056 - reg_l2_loss: 0.0636 - loss: 0.8718 - learning_rate: 0.0082 - gradient_norm: 1.9138 - val_det_loss: 0.9104 - val_cls_loss: 0.5838 - val_box_loss: 0.0065 - val_reg_l2_loss: 0.0636 - val_loss: 0.9740 Epoch 15/50 21/21 [==============================] - 14s 696ms/step - det_loss: 0.8106 - cls_loss: 0.5221 - box_loss: 0.0058 - reg_l2_loss: 0.0636 - loss: 0.8743 - learning_rate: 0.0080 - gradient_norm: 2.0386 - val_det_loss: 0.9510 - val_cls_loss: 0.6047 - val_box_loss: 0.0069 - val_reg_l2_loss: 0.0636 - val_loss: 1.0146 Epoch 16/50 21/21 [==============================] - 10s 474ms/step - det_loss: 0.7988 - cls_loss: 0.5177 - box_loss: 0.0056 - reg_l2_loss: 0.0636 - loss: 0.8624 - learning_rate: 0.0077 - gradient_norm: 2.1009 - val_det_loss: 0.9642 - val_cls_loss: 0.6307 - val_box_loss: 0.0067 - val_reg_l2_loss: 0.0637 - val_loss: 1.0278 Epoch 17/50 21/21 [==============================] - 12s 601ms/step - det_loss: 0.8057 - cls_loss: 0.5239 - box_loss: 0.0056 - reg_l2_loss: 0.0637 - loss: 0.8694 - learning_rate: 0.0075 - gradient_norm: 2.1718 - val_det_loss: 0.9152 - val_cls_loss: 0.5938 - val_box_loss: 0.0064 - val_reg_l2_loss: 0.0637 - val_loss: 0.9789 Epoch 18/50 21/21 [==============================] - 12s 609ms/step - det_loss: 0.7801 - cls_loss: 0.4993 - box_loss: 0.0056 - reg_l2_loss: 0.0637 - loss: 0.8437 - learning_rate: 0.0072 - gradient_norm: 2.1518 - val_det_loss: 0.9262 - val_cls_loss: 0.5967 - val_box_loss: 0.0066 - val_reg_l2_loss: 0.0637 - val_loss: 0.9899 Epoch 19/50 21/21 [==============================] - 12s 614ms/step - det_loss: 0.7595 - cls_loss: 0.4977 - box_loss: 0.0052 - reg_l2_loss: 0.0637 - loss: 0.8232 - learning_rate: 0.0069 - gradient_norm: 2.3707 - val_det_loss: 0.8870 - val_cls_loss: 0.5698 - val_box_loss: 0.0063 - val_reg_l2_loss: 0.0637 - val_loss: 0.9506 Epoch 20/50 21/21 [==============================] - 13s 632ms/step - det_loss: 0.7826 - cls_loss: 0.5115 - box_loss: 0.0054 - reg_l2_loss: 0.0637 - loss: 0.8463 - learning_rate: 0.0066 - gradient_norm: 2.4091 - val_det_loss: 0.8975 - val_cls_loss: 0.5811 - val_box_loss: 0.0063 - val_reg_l2_loss: 0.0637 - val_loss: 0.9611 Epoch 21/50 21/21 [==============================] - 9s 454ms/step - det_loss: 0.7434 - cls_loss: 0.4903 - box_loss: 0.0051 - reg_l2_loss: 0.0637 - loss: 0.8070 - learning_rate: 0.0063 - gradient_norm: 2.3592 - val_det_loss: 0.8526 - val_cls_loss: 0.5450 - val_box_loss: 0.0062 - val_reg_l2_loss: 0.0637 - val_loss: 0.9163 Epoch 22/50 21/21 [==============================] - 12s 600ms/step - det_loss: 0.7349 - cls_loss: 0.4803 - box_loss: 0.0051 - reg_l2_loss: 0.0637 - loss: 0.7986 - learning_rate: 0.0060 - gradient_norm: 2.3296 - val_det_loss: 0.8977 - val_cls_loss: 0.5602 - val_box_loss: 0.0068 - val_reg_l2_loss: 0.0637 - val_loss: 0.9614 Epoch 23/50 21/21 [==============================] - 12s 591ms/step - det_loss: 0.7190 - cls_loss: 0.4670 - box_loss: 0.0050 - reg_l2_loss: 0.0637 - loss: 0.7826 - learning_rate: 0.0056 - gradient_norm: 2.2218 - val_det_loss: 0.8986 - val_cls_loss: 0.5744 - val_box_loss: 0.0065 - val_reg_l2_loss: 0.0637 - val_loss: 0.9623 Epoch 24/50 21/21 [==============================] - 11s 553ms/step - det_loss: 0.7025 - cls_loss: 0.4588 - box_loss: 0.0049 - reg_l2_loss: 0.0637 - loss: 0.7661 - learning_rate: 0.0053 - gradient_norm: 2.4710 - val_det_loss: 0.8835 - val_cls_loss: 0.5701 - val_box_loss: 0.0063 - val_reg_l2_loss: 0.0637 - val_loss: 0.9472 Epoch 25/50 21/21 [==============================] - 14s 700ms/step - det_loss: 0.7462 - cls_loss: 0.4776 - box_loss: 0.0054 - reg_l2_loss: 0.0637 - loss: 0.8099 - learning_rate: 0.0050 - gradient_norm: 2.5728 - val_det_loss: 0.8594 - val_cls_loss: 0.5605 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.9231 Epoch 26/50 21/21 [==============================] - 10s 482ms/step - det_loss: 0.7219 - cls_loss: 0.4731 - box_loss: 0.0050 - reg_l2_loss: 0.0637 - loss: 0.7856 - learning_rate: 0.0047 - gradient_norm: 2.4891 - val_det_loss: 0.8701 - val_cls_loss: 0.5630 - val_box_loss: 0.0061 - val_reg_l2_loss: 0.0637 - val_loss: 0.9338 Epoch 27/50 21/21 [==============================] - 11s 543ms/step - det_loss: 0.6914 - cls_loss: 0.4505 - box_loss: 0.0048 - reg_l2_loss: 0.0637 - loss: 0.7551 - learning_rate: 0.0044 - gradient_norm: 2.3125 - val_det_loss: 0.8986 - val_cls_loss: 0.5850 - val_box_loss: 0.0063 - val_reg_l2_loss: 0.0637 - val_loss: 0.9623 Epoch 28/50 21/21 [==============================] - 13s 630ms/step - det_loss: 0.7018 - cls_loss: 0.4516 - box_loss: 0.0050 - reg_l2_loss: 0.0637 - loss: 0.7655 - learning_rate: 0.0040 - gradient_norm: 2.7033 - val_det_loss: 0.8693 - val_cls_loss: 0.5590 - val_box_loss: 0.0062 - val_reg_l2_loss: 0.0637 - val_loss: 0.9330 Epoch 29/50 21/21 [==============================] - 11s 529ms/step - det_loss: 0.6712 - cls_loss: 0.4463 - box_loss: 0.0045 - reg_l2_loss: 0.0637 - loss: 0.7349 - learning_rate: 0.0037 - gradient_norm: 2.3739 - val_det_loss: 0.8901 - val_cls_loss: 0.5790 - val_box_loss: 0.0062 - val_reg_l2_loss: 0.0637 - val_loss: 0.9538 Epoch 30/50 21/21 [==============================] - 15s 735ms/step - det_loss: 0.6619 - cls_loss: 0.4346 - box_loss: 0.0045 - reg_l2_loss: 0.0637 - loss: 0.7256 - learning_rate: 0.0034 - gradient_norm: 2.3940 - val_det_loss: 0.8855 - val_cls_loss: 0.5565 - val_box_loss: 0.0066 - val_reg_l2_loss: 0.0637 - val_loss: 0.9492 Epoch 31/50 21/21 [==============================] - 10s 499ms/step - det_loss: 0.6752 - cls_loss: 0.4406 - box_loss: 0.0047 - reg_l2_loss: 0.0637 - loss: 0.7389 - learning_rate: 0.0031 - gradient_norm: 2.6153 - val_det_loss: 0.8728 - val_cls_loss: 0.5536 - val_box_loss: 0.0064 - val_reg_l2_loss: 0.0637 - val_loss: 0.9365 Epoch 32/50 21/21 [==============================] - 11s 547ms/step - det_loss: 0.6605 - cls_loss: 0.4393 - box_loss: 0.0044 - reg_l2_loss: 0.0637 - loss: 0.7242 - learning_rate: 0.0028 - gradient_norm: 2.2926 - val_det_loss: 0.8503 - val_cls_loss: 0.5434 - val_box_loss: 0.0061 - val_reg_l2_loss: 0.0637 - val_loss: 0.9140 Epoch 33/50 21/21 [==============================] - 12s 573ms/step - det_loss: 0.6700 - cls_loss: 0.4388 - box_loss: 0.0046 - reg_l2_loss: 0.0637 - loss: 0.7337 - learning_rate: 0.0025 - gradient_norm: 2.4563 - val_det_loss: 0.8520 - val_cls_loss: 0.5442 - val_box_loss: 0.0062 - val_reg_l2_loss: 0.0637 - val_loss: 0.9157 Epoch 34/50 21/21 [==============================] - 12s 596ms/step - det_loss: 0.6754 - cls_loss: 0.4314 - box_loss: 0.0049 - reg_l2_loss: 0.0637 - loss: 0.7391 - learning_rate: 0.0023 - gradient_norm: 2.5527 - val_det_loss: 0.8223 - val_cls_loss: 0.5216 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.8860 Epoch 35/50 21/21 [==============================] - 13s 623ms/step - det_loss: 0.6499 - cls_loss: 0.4243 - box_loss: 0.0045 - reg_l2_loss: 0.0637 - loss: 0.7136 - learning_rate: 0.0020 - gradient_norm: 2.3485 - val_det_loss: 0.8405 - val_cls_loss: 0.5408 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.9042 Epoch 36/50 21/21 [==============================] - 12s 574ms/step - det_loss: 0.6290 - cls_loss: 0.4186 - box_loss: 0.0042 - reg_l2_loss: 0.0637 - loss: 0.6927 - learning_rate: 0.0018 - gradient_norm: 2.3488 - val_det_loss: 0.8436 - val_cls_loss: 0.5452 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.9073 Epoch 37/50 21/21 [==============================] - 13s 631ms/step - det_loss: 0.6446 - cls_loss: 0.4157 - box_loss: 0.0046 - reg_l2_loss: 0.0637 - loss: 0.7083 - learning_rate: 0.0015 - gradient_norm: 2.3455 - val_det_loss: 0.8361 - val_cls_loss: 0.5410 - val_box_loss: 0.0059 - val_reg_l2_loss: 0.0637 - val_loss: 0.8998 Epoch 38/50 21/21 [==============================] - 12s 595ms/step - det_loss: 0.6640 - cls_loss: 0.4317 - box_loss: 0.0046 - reg_l2_loss: 0.0637 - loss: 0.7277 - learning_rate: 0.0013 - gradient_norm: 2.5982 - val_det_loss: 0.8390 - val_cls_loss: 0.5402 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.9027 Epoch 39/50 21/21 [==============================] - 13s 623ms/step - det_loss: 0.6280 - cls_loss: 0.4117 - box_loss: 0.0043 - reg_l2_loss: 0.0637 - loss: 0.6916 - learning_rate: 0.0011 - gradient_norm: 2.3441 - val_det_loss: 0.8396 - val_cls_loss: 0.5415 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.9033 Epoch 40/50 21/21 [==============================] - 15s 721ms/step - det_loss: 0.6398 - cls_loss: 0.4240 - box_loss: 0.0043 - reg_l2_loss: 0.0637 - loss: 0.7035 - learning_rate: 9.0029e-04 - gradient_norm: 2.6224 - val_det_loss: 0.8326 - val_cls_loss: 0.5328 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.8963 Epoch 41/50 21/21 [==============================] - 10s 484ms/step - det_loss: 0.6361 - cls_loss: 0.4179 - box_loss: 0.0044 - reg_l2_loss: 0.0637 - loss: 0.6998 - learning_rate: 7.2543e-04 - gradient_norm: 2.4665 - val_det_loss: 0.8264 - val_cls_loss: 0.5282 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.8901 Epoch 42/50 21/21 [==============================] - 13s 654ms/step - det_loss: 0.6565 - cls_loss: 0.4141 - box_loss: 0.0048 - reg_l2_loss: 0.0637 - loss: 0.7202 - learning_rate: 5.6814e-04 - gradient_norm: 2.5693 - val_det_loss: 0.8190 - val_cls_loss: 0.5205 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.8827 Epoch 43/50 21/21 [==============================] - 12s 577ms/step - det_loss: 0.6390 - cls_loss: 0.4156 - box_loss: 0.0045 - reg_l2_loss: 0.0637 - loss: 0.7027 - learning_rate: 4.2906e-04 - gradient_norm: 2.6238 - val_det_loss: 0.8214 - val_cls_loss: 0.5218 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.8851 Epoch 44/50 21/21 [==============================] - 11s 543ms/step - det_loss: 0.6325 - cls_loss: 0.4210 - box_loss: 0.0042 - reg_l2_loss: 0.0637 - loss: 0.6962 - learning_rate: 3.0876e-04 - gradient_norm: 2.5348 - val_det_loss: 0.8233 - val_cls_loss: 0.5214 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.8870 Epoch 45/50 21/21 [==============================] - 14s 712ms/step - det_loss: 0.6318 - cls_loss: 0.4115 - box_loss: 0.0044 - reg_l2_loss: 0.0637 - loss: 0.6955 - learning_rate: 2.0774e-04 - gradient_norm: 2.3124 - val_det_loss: 0.8264 - val_cls_loss: 0.5243 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.8901 Epoch 46/50 21/21 [==============================] - 11s 518ms/step - det_loss: 0.6508 - cls_loss: 0.4240 - box_loss: 0.0045 - reg_l2_loss: 0.0637 - loss: 0.7145 - learning_rate: 1.2641e-04 - gradient_norm: 2.5532 - val_det_loss: 0.8275 - val_cls_loss: 0.5252 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.8912 Epoch 47/50 21/21 [==============================] - 13s 630ms/step - det_loss: 0.6284 - cls_loss: 0.4146 - box_loss: 0.0043 - reg_l2_loss: 0.0637 - loss: 0.6921 - learning_rate: 6.5107e-05 - gradient_norm: 2.5420 - val_det_loss: 0.8269 - val_cls_loss: 0.5248 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.8906 Epoch 48/50 21/21 [==============================] - 11s 539ms/step - det_loss: 0.6273 - cls_loss: 0.4124 - box_loss: 0.0043 - reg_l2_loss: 0.0637 - loss: 0.6910 - learning_rate: 2.4083e-05 - gradient_norm: 2.4386 - val_det_loss: 0.8249 - val_cls_loss: 0.5233 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.8886 Epoch 49/50 21/21 [==============================] - 13s 627ms/step - det_loss: 0.6412 - cls_loss: 0.4040 - box_loss: 0.0047 - reg_l2_loss: 0.0637 - loss: 0.7049 - learning_rate: 3.5074e-06 - gradient_norm: 2.4736 - val_det_loss: 0.8231 - val_cls_loss: 0.5223 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.8868 Epoch 50/50 21/21 [==============================] - 15s 721ms/step - det_loss: 0.6425 - cls_loss: 0.4205 - box_loss: 0.0044 - reg_l2_loss: 0.0637 - loss: 0.7062 - learning_rate: 3.4629e-06 - gradient_norm: 2.4394 - val_det_loss: 0.8218 - val_cls_loss: 0.5215 - val_box_loss: 0.0060 - val_reg_l2_loss: 0.0637 - val_loss: 0.8855
Adım 4. Modeli test verileriyle değerlendirin.
Eğitim veri kümesindeki görüntüleri kullanarak nesne algılama modelini eğittikten sonra, modelin daha önce hiç görmediği yeni verilere karşı nasıl performans gösterdiğini değerlendirmek için test veri kümesindeki kalan 25 görüntüyü kullanın.
Varsayılan toplu iş boyutu 64 olduğundan, test veri kümesindeki 25 görüntünün üzerinden geçmek 1 adım alacaktır.
Değerlendirme ölçütleri ile aynıdır COCO .
model.evaluate(test_data)
1/1 [==============================] - 7s 7s/step {'AP': 0.23457745, 'AP50': 0.38357082, 'AP75': 0.25038385, 'APs': -1.0, 'APm': 0.43640736, 'APl': 0.234312, 'ARmax1': 0.1664717, 'ARmax10': 0.33019942, 'ARmax100': 0.37375557, 'ARs': -1.0, 'ARm': 0.5416667, 'ARl': 0.37200606, 'AP_/Baked Goods': 0.07057314, 'AP_/Salad': 0.53682375, 'AP_/Cheese': 0.20270571, 'AP_/Seafood': 0.08837805, 'AP_/Tomato': 0.2744066}
Adım 5. TensorFlow Lite modeli olarak dışa aktarın.
Nicelenmiş modeli dışa aktarmak istediğiniz klasörü belirterek eğitilmiş nesne algılama modelini TensorFlow Lite formatına aktarın. Varsayılan eğitim sonrası niceleme tekniği, tam tamsayı nicemlemedir.
model.export(export_dir='.')
2021-12-02 12:28:49.181926: W tensorflow/python/util/util.cc:368] Sets are not currently considered sequences, but this may change in the future, so consider avoiding using them. 2021-12-02 12:29:09.650356: W tensorflow/core/common_runtime/graph_constructor.cc:803] Node 'resample_p7/PartitionedCall' has 1 outputs but the _output_shapes attribute specifies shapes for 3 outputs. Output shapes may be inaccurate. 2021-12-02 12:29:20.773150: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:363] Ignored output_format. 2021-12-02 12:29:20.773204: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:366] Ignored drop_control_dependency. 2021-12-02 12:29:20.773213: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:372] Ignored change_concat_input_ranges. fully_quantize: 0, inference_type: 6, input_inference_type: 3, output_inference_type: 0
Adım 6. TensorFlow Lite modelini değerlendirin.
TFLite'a dışa aktarırken model doğruluğunu birkaç faktör etkileyebilir:
- Quantization bazı doğruluk damla pahasına 4 kat modeli boyutu küçülen yardımcı olur.
- Orijinal TensorFlow modeli kullanır başına sınıfında olmayan max baskılama (NMS) post-processing için, TFLite modeli çok daha hızlı ancak daha az kesin sonuç küresel NMS kullanır iken. Keras, maksimum 100 algılama çıktısı verirken tflite maksimum 25 algılama çıktısı verir.
Bu nedenle, dışa aktarılan TFLite modelini değerlendirmeniz ve doğruluğunu orijinal TensorFlow modeliyle karşılaştırmanız gerekir.
model.evaluate_tflite('model.tflite', test_data)
25/25 [==============================] - 60s 2s/step {'AP': 0.22160971, 'AP50': 0.36216733, 'AP75': 0.24560829, 'APs': -1.0, 'APm': 0.52389216, 'APl': 0.21991307, 'ARmax1': 0.16296011, 'ARmax10': 0.2850546, 'ARmax100': 0.29889038, 'ARs': -1.0, 'ARm': 0.6166667, 'ARl': 0.29492828, 'AP_/Baked Goods': 0.06930693, 'AP_/Salad': 0.5064266, 'AP_/Cheese': 0.1904948, 'AP_/Seafood': 0.074257426, 'AP_/Tomato': 0.26756287}
Colab'ın sol kenar çubuğunu kullanarak TensorFlow Lite model dosyasını indirebilirsiniz. Sağ tıklayın model.tflite
dosyası ve seçim Download
yerel bilgisayarınıza indirmek için.
Bu model, bir Android veya kullanan bir iOS uygulaması entegre edilebilir ObjectDetector API arasında TensorFlow Lite Görev Kütüphanesi .
Bkz TFLite Nesne Algılama örnek uygulamasını modeli bir çalışma uygulamasında nasıl kullanıldığı hakkında daha fazla ayrıntı için.
(İsteğe bağlı) TFLite modelini resminizde test edin
Eğitimli TFLite modelini internetten görüntüleri kullanarak test edebilirsiniz.
- Değiştir
INPUT_IMAGE_URL
istediğiniz giriş görüntü ile aşağıda. - Ayarlayın
DETECTION_THRESHOLD
modelinin hassasiyetini değiştirmek için. Daha düşük bir eşik, modelin daha fazla nesne alacağı, ancak daha fazla yanlış algılama olacağı anlamına gelir. Bu arada, daha yüksek bir eşik, modelin yalnızca güvenle algıladığı nesneleri alacağı anlamına gelir.
Modeli şu anda Python'da çalıştırmak için bazı ortak kodlar gerektirse de, modeli bir mobil uygulamaya entegre etmek yalnızca birkaç satır kod gerektirir.
Eğitilmiş TFLite modelini yükleyin ve bazı görselleştirme işlevlerini tanımlayın
import cv2
from PIL import Image
model_path = 'model.tflite'
# Load the labels into a list
classes = ['???'] * model.model_spec.config.num_classes
label_map = model.model_spec.config.label_map
for label_id, label_name in label_map.as_dict().items():
classes[label_id-1] = label_name
# Define a list of colors for visualization
COLORS = np.random.randint(0, 255, size=(len(classes), 3), dtype=np.uint8)
def preprocess_image(image_path, input_size):
"""Preprocess the input image to feed to the TFLite model"""
img = tf.io.read_file(image_path)
img = tf.io.decode_image(img, channels=3)
img = tf.image.convert_image_dtype(img, tf.uint8)
original_image = img
resized_img = tf.image.resize(img, input_size)
resized_img = resized_img[tf.newaxis, :]
resized_img = tf.cast(resized_img, dtype=tf.uint8)
return resized_img, original_image
def detect_objects(interpreter, image, threshold):
"""Returns a list of detection results, each a dictionary of object info."""
signature_fn = interpreter.get_signature_runner()
# Feed the input image to the model
output = signature_fn(images=image)
# Get all outputs from the model
count = int(np.squeeze(output['output_0']))
scores = np.squeeze(output['output_1'])
classes = np.squeeze(output['output_2'])
boxes = np.squeeze(output['output_3'])
results = []
for i in range(count):
if scores[i] >= threshold:
result = {
'bounding_box': boxes[i],
'class_id': classes[i],
'score': scores[i]
}
results.append(result)
return results
def run_odt_and_draw_results(image_path, interpreter, threshold=0.5):
"""Run object detection on the input image and draw the detection results"""
# Load the input shape required by the model
_, input_height, input_width, _ = interpreter.get_input_details()[0]['shape']
# Load the input image and preprocess it
preprocessed_image, original_image = preprocess_image(
image_path,
(input_height, input_width)
)
# Run object detection on the input image
results = detect_objects(interpreter, preprocessed_image, threshold=threshold)
# Plot the detection results on the input image
original_image_np = original_image.numpy().astype(np.uint8)
for obj in results:
# Convert the object bounding box from relative coordinates to absolute
# coordinates based on the original image resolution
ymin, xmin, ymax, xmax = obj['bounding_box']
xmin = int(xmin * original_image_np.shape[1])
xmax = int(xmax * original_image_np.shape[1])
ymin = int(ymin * original_image_np.shape[0])
ymax = int(ymax * original_image_np.shape[0])
# Find the class index of the current object
class_id = int(obj['class_id'])
# Draw the bounding box and label on the image
color = [int(c) for c in COLORS[class_id]]
cv2.rectangle(original_image_np, (xmin, ymin), (xmax, ymax), color, 2)
# Make adjustments to make the label visible for all objects
y = ymin - 15 if ymin - 15 > 15 else ymin + 15
label = "{}: {:.0f}%".format(classes[class_id], obj['score'] * 100)
cv2.putText(original_image_np, label, (xmin, y),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)
# Return the final image
original_uint8 = original_image_np.astype(np.uint8)
return original_uint8
Nesne algılamayı çalıştırın ve algılama sonuçlarını gösterin
INPUT_IMAGE_URL = "https://storage.googleapis.com/cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg"
DETECTION_THRESHOLD = 0.3
TEMP_FILE = '/tmp/image.png'
!wget -q -O $TEMP_FILE $INPUT_IMAGE_URL
im = Image.open(TEMP_FILE)
im.thumbnail((512, 512), Image.ANTIALIAS)
im.save(TEMP_FILE, 'PNG')
# Load the TFLite model
interpreter = tf.lite.Interpreter(model_path=model_path)
interpreter.allocate_tensors()
# Run inference and draw detection result on the local copy of the original file
detection_result_image = run_odt_and_draw_results(
TEMP_FILE,
interpreter,
threshold=DETECTION_THRESHOLD
)
# Show the detection result
Image.fromarray(detection_result_image)
(İsteğe bağlı) Edge TPU için Derleme
Şimdi bir kuvantalaması EfficientDet Lite modeli olduğunu, derlemek ve bir karşı dağıtmak mümkündür Mercan EdgeTPU .
Adım 1. EdgeTPU Derleyicisini Kurun
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
sudo apt-get update
sudo apt-get install edgetpu-compiler
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 2537 100 2537 0 0 130k 0 --:--:-- --:--:-- --:--:-- 130k OK deb https://packages.cloud.google.com/apt coral-edgetpu-stable main Hit:1 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic InRelease Hit:2 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic-updates InRelease Hit:3 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic-backports InRelease Hit:4 https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/amd64 InRelease Get:5 https://nvidia.github.io/nvidia-container-runtime/ubuntu18.04/amd64 InRelease [1481 B] Get:6 https://nvidia.github.io/nvidia-docker/ubuntu18.04/amd64 InRelease [1474 B] Ign:7 http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 InRelease Hit:8 http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 Release Get:9 http://packages.cloud.google.com/apt google-cloud-logging-wheezy InRelease [5483 B] Hit:10 http://archive.canonical.com/ubuntu bionic InRelease Hit:11 http://security.ubuntu.com/ubuntu bionic-security InRelease Get:13 https://packages.cloud.google.com/apt coral-edgetpu-stable InRelease [6722 B] Get:14 https://packages.cloud.google.com/apt eip-cloud-bionic InRelease [5419 B] Ign:15 https://packages.cloud.google.com/apt coral-edgetpu-stable/main amd64 Packages Get:15 https://packages.cloud.google.com/apt coral-edgetpu-stable/main amd64 Packages [2327 B] Fetched 22.9 kB in 1s (18.7 kB/s) The following packages were automatically installed and are no longer required: linux-gcp-5.4-headers-5.4.0-1040 linux-gcp-5.4-headers-5.4.0-1043 linux-gcp-5.4-headers-5.4.0-1044 linux-gcp-5.4-headers-5.4.0-1049 linux-headers-5.4.0-1049-gcp linux-image-5.4.0-1049-gcp linux-modules-5.4.0-1044-gcp linux-modules-5.4.0-1049-gcp linux-modules-extra-5.4.0-1049-gcp Use 'sudo apt autoremove' to remove them. The following NEW packages will be installed: edgetpu-compiler 0 upgraded, 1 newly installed, 0 to remove and 119 not upgraded. Need to get 7913 kB of archives. After this operation, 31.2 MB of additional disk space will be used. Get:1 https://packages.cloud.google.com/apt coral-edgetpu-stable/main amd64 edgetpu-compiler amd64 16.0 [7913 kB] Fetched 7913 kB in 1s (11.2 MB/s) Selecting previously unselected package edgetpu-compiler. (Reading database ... 283192 files and directories currently installed.) Preparing to unpack .../edgetpu-compiler_16.0_amd64.deb ... Unpacking edgetpu-compiler (16.0) ... Setting up edgetpu-compiler (16.0) ... Processing triggers for libc-bin (2.27-3ubuntu1.2) ...
Adım 2. Edge TPU'larının sayısını seçin, Derleyin
EdgeTPU modeli parametrelerinin (önbelleğe alma için SRAM 8MB sahiptir fazla bilgiye ). Bu, 8MB'den büyük modeller için, model parametrelerinin aktarılması için çıkarım süresinin artacağı anlamına gelir. Bunu önlemek için bir yoldur Modeli Pipelining özel bir EdgeTPU olabilir segmentler halinde bölme modeli -. Bu, gecikmeyi önemli ölçüde artırabilir.
Aşağıdaki tablo, kullanılacak Edge TPU'larının sayısı için bir referans olarak kullanılabilir - ara tensörler çip üzerindeki belleğe sığamayacağından daha büyük modeller tek bir TPU için derlenmez.
Model mimarisi | Minimum TPU'lar | Önerilen TPU'lar |
---|---|---|
EfficientDet-Lite0 | 1 | 1 |
EfficientDet-Lite1 | 1 | 1 |
EfficientDet-Lite2 | 1 | 2 |
EfficientDet-Lite3 | 2 | 2 |
EfficientDet-Lite4 | 2 | 3 |
NUMBER_OF_TPUS = 1
!edgetpu_compiler model.tflite --num_segments=$NUMBER_OF_TPUS
Edge TPU Compiler version 16.0.384591198 Started a compilation timeout timer of 180 seconds. Model compiled successfully in 4410 ms. Input model: model.tflite Input size: 4.24MiB Output model: model_edgetpu.tflite Output size: 5.61MiB On-chip memory used for caching model parameters: 4.24MiB On-chip memory remaining for caching model parameters: 3.27MiB Off-chip memory used for streaming uncached model parameters: 0.00B Number of Edge TPU subgraphs: 1 Total number of operations: 267 Operation log: model_edgetpu.log Model successfully compiled but not all operations are supported by the Edge TPU. A percentage of the model will instead run on the CPU, which is slower. If possible, consider updating your model to use only operations supported by the Edge TPU. For details, visit g.co/coral/model-reqs. Number of operations that will run on Edge TPU: 264 Number of operations that will run on CPU: 3 See the operation log file for individual operation details. Compilation child process completed within timeout period. Compilation succeeded!
Adım 3. İndirin, Modeli Çalıştırın
Derlenen model(ler) ile artık nesne tespiti için EdgeTPU(lar) üzerinde çalıştırılabilirler. İlk olarak, Colab'ın sol kenar çubuğunu kullanarak derlenmiş TensorFlow Lite model dosyasını indirin. Sağ tıklayın model_edgetpu.tflite
dosyası ve seçim Download
yerel bilgisayarınıza indirmek için.
Artık modeli tercih ettiğiniz şekilde çalıştırabilirsiniz. Algılama örnekleri şunları içerir:
Gelişmiş Kullanım
Bu bölüm, modelin ayarlanması ve eğitim hiperparametreleri gibi ileri düzey kullanım konularını kapsar.
Veri kümesini yükleyin
Kendi verilerinizi yükleyin
Bu eğitimde çalışmak için kendi veri kümenizi yükleyebilirsiniz. Colab'da sol kenar çubuğunu kullanarak veri kümenizi yükleyin.
Eğer buluta veri kümesi yüklemek istemiyorsanız, ayrıca lokal olarak takip ederek kütüphane çalıştırabilirsiniz kılavuzu .
Verilerinizi farklı bir veri biçimiyle yükleyin
Modeli Üretici kütüphanesi aynı zamanda destekler object_detector.DataLoader.from_pascal_voc
yük verilerine yöntem PASCAL VOC biçimi. makesense.ai ve LabelImg resimde açıklama ve PASCAL VOC veri formatında XML dosyaları olarak ek açıklamaları kaydedebilir araçlardır:
object_detector.DataLoader.from_pascal_voc(image_dir, annotations_dir, label_map={1: "person", 2: "notperson"})
EfficientDet modeli hiper parametrelerini özelleştirin
Ayarlayabileceğiniz model ve eğitim hattı parametreleri şunlardır:
-
model_dir
: konum modeli denetim noktası dosyaları kaydetmek için. Ayarlanmazsa, geçici bir dizin kullanılacaktır. -
steps_per_execution
: Eğitim yürütme başına adımların sayısı. -
moving_average_decay
: Float. Eğitilmiş parametrelerin hareketli ortalamalarını korumak için kullanılacak bozulma. -
var_freeze_expr
: değişkenlerin önek adını eşleştirmek için düzenli ifade eğitim sırasında aynı kalan hangi araçlar dondurulacak. Daha spesifik, kullanımre.match(var_freeze_expr, variable_name)
değişkenleri eşleştirmek için kod temeli dondurulacak. -
tflite_max_detections
: varsayılan olarak tamsayı, 25. TFLite modelinde maksimum çıktı algılama sayısı. -
strategy
: Bir dize belirten hangi dağıtım stratejisini kullanımına. Kabul edilen değerler "tpu", "gpus", Yoktur. tpu', TPUStrategy kullanmak anlamına gelir. 'gpus', çoklu gpus için MirroredStrategy kullanmak anlamına gelir. Hiçbiri ise, OneDeviceStrategy ile TF varsayılanını kullanın. -
tpu
: Bulut TPU eğitimi için kullanılacak. Bu, Cloud TPU oluşturulurken kullanılan ad veya bir grpc://ip.address.of.tpu:8470 url'si olmalıdır. -
use_xla
: Kullanım XLA bile strateji TPU değildir. Strateji tpu ise, her zaman XLA kullanın ve bu bayrağın hiçbir etkisi yoktur. -
profile
: profil modunu etkinleştirin. -
debug
: ayıklama modunu etkinleştirin.
Ayarlanabilir Diğer parametreler gösterilmektedir hparams_config.py .
Örneğin, ayarlayabilirsiniz var_freeze_expr='efficientnet'
adıyla değişkenleri önek donar hangi efficientnet
(varsayılan '(efficientnet|fpn_cells|resample_p6)'
). Bu, modelin eğitilemez değişkenleri dondurmasına ve eğitim yoluyla değerlerini aynı tutmasına olanak tanır.
spec = model_spec.get('efficientdet_lite0')
spec.config.var_freeze_expr = 'efficientnet'
Model Mimarisini Değiştirin
Sen değiştirerek modeli mimarisini değiştirebilir model_spec
. Örneğin, değiştirmek model_spec
EfficientDet-Lite4 modeline.
spec = model_spec.get('efficientdet_lite4')
Eğitim hiper parametrelerini ayarlayın
create
fonksiyonu Modeli Üretici kütüphane kullandığı modelleri oluşturmak için o sürücü fonksiyonudur. model_spec
parametre modeli özelliklerini tanımlar. object_detector.EfficientDetSpec
sınıfı şu anda desteklenmektedir. create
aşağıdaki adımlardan fonksiyonu olarak aşağıdakileri içermesidir:
- Uygun nesne tespiti için bir model oluşturur
model_spec
. - Modeli eğitir. Varsayılan çağlardan ve varsayılan parti boyutu tarafından belirlenir
epochs
vebatch_size
değişkenlermodel_spec
nesne. Sen ayar da yapabilirsiniz gibi eğitim hyperparametersepochs
vebatch_size
modeli doğruluğunu etkileyebilir. Örneğin,
-
epochs
: Tamsayı, varsayılan olarak 50. Daha fazla çağ daha iyi doğruluk sağlayabilir, ancak fazla uydurmaya neden olabilir. -
batch_size
: Tamsayı, 64 varsayılan olarak. Bir eğitim adımında kullanılacak örnek sayısı. -
train_whole_model
: varsayılan olarak False Boolean. Doğruysa, tüm modeli eğitin. Aksi takdirde, sadece eşleşmeyen katmanları eğitmekvar_freeze_expr
.
Örneğin, daha az dönem ve sadece kafa katmanı ile antrenman yapabilirsiniz. Daha iyi sonuçlar için dönem sayısını artırabilirsiniz.
model = object_detector.create(train_data, model_spec=spec, epochs=10, validation_data=validation_data)
Farklı biçimlerde dışa aktarma
Dışa aktarma biçimleri aşağıdakilerden biri veya bir listesi olabilir:
Varsayılan olarak, modelin içeren tek TensorFlow Lite model dosyası ihraç meta Sonradan bir Cihazdaki ML uygulamasında kullanabilmesi. Etiket dosyası meta verilere gömülüdür.
Birçok cihaz üstü ML uygulamasında model boyutu önemli bir faktördür. Bu nedenle, modeli daha küçük ve potansiyel olarak daha hızlı çalıştırmak için nicelleştirmeniz önerilir. EfficientDet-Lite modellerinde olduğu gibi, modeli varsayılan olarak nicelemek için tam tamsayı nicemleme kullanılır. Bakınız Sonrası eğitim Nicemlemenin Daha fazla ayrıntı için.
model.export(export_dir='.')
Daha iyi incelemek için modelle ilgili diğer dosyaları da dışa aktarmayı seçebilirsiniz. Örneğin, hem kaydedilen modeli hem de etiket dosyasını aşağıdaki gibi dışa aktarın:
model.export(export_dir='.', export_format=[ExportFormat.SAVED_MODEL, ExportFormat.LABEL])
TensorFlow Lite modelinde eğitim sonrası nicelemeyi özelleştirin
Sonrası eğitim niceleme Ayrıca, CPU ve donanım hızlandırıcı çıkarım hızı arttırırken model doğruluğunun küçük bir bozulma ile, model boyutu ve çıkarım gecikmeyi azaltmak bir dönüşüm bir tekniktir. Bu nedenle, modeli optimize etmek için yaygın olarak kullanılır.
Model Maker kitaplığı, modeli dışa aktarırken varsayılan bir eğitim sonrası niceleme tekniği uygular. Eğer eğitim sonrası nicemlemesini özelleştirmek istiyorsanız, Model Maker kullanarak birden eğitim sonrası nicemleme seçeneklerini desteklemektedir QuantizationConfig sıra. Örnek olarak float16 nicelemeyi alalım. İlk olarak, niceleme yapılandırmasını tanımlayın.
config = QuantizationConfig.for_float16()
Ardından TensorFlow Lite modelini bu konfigürasyonla dışa aktarıyoruz.
model.export(export_dir='.', tflite_filename='model_fp16.tflite', quantization_config=config)
Daha fazla oku
Bizim okuyabilir nesne algılama teknik ayrıntılarını öğrenmek için örnek. Daha fazla bilgi için lütfen şu adrese bakın:
- TensorFlow Lite Modeli Üretici kılavuzu ve API başvuru .
- Görev Kütüphanesi: ObjectDetector dağıtımı için.
- Uçtan uca referans uygulamalar: Android , iOS ve Ahududu PI .