LiteRT meta verileri, model açıklamaları için bir standart sunar. İlgili içeriği oluşturmak için kullanılan üst veriler, modelin ne yaptığı ve modelin nasıl çalıştığı hakkında önemli bir bilgi kaynağıdır. giriş / çıkış bilgileri. Meta veri şunları içerir:
- insanlar tarafından okunabilecek parçalar - modelin kullanımıyla ilgili en iyi uygulamayı ifade eden ve
- kod oluşturucular tarafından yararlanılabilen, makine tarafından okunabilir parçalar (örneğin, LiteRT Android kodu oluşturma aracı ve Android Studio ML Binding özelliği hakkında daha fazla bilgi edinin.
Kaggle'da yayınlanan tüm görüntü modelleri Modeller meta verilerdir.
Meta veri biçimine sahip model
Model meta verileri şurada tanımlanır:
metadata_schema.fbs
CANNOT TRANSLATE
FlatBuffer
dosyası olarak kaydedebilirsiniz. Şekil 1'de gösterildiği gibi,
meta veriler
TFLite modelinin alanı
şema,
"TFLITE_METADATA"
adının altında. Bazı modeller ilişkili dosyalarla gelebilir,
sınıflandırma etiketi,
dosyaları ile kullanılabilir.
Bu dosyalar, ZIP biçiminde bir orijinal model dosyasının sonuna eklenir
ZipFile "append" komutunu kullanarak
mod ('a'
modu). TFLite
Çevirmen, yeni dosya biçimini öncekiyle aynı şekilde kullanabilir. Paketi inceleyin
ilgili dosyalara bakın.
Meta verileri doldurma, görselleştirme ve okuma ile ilgili aşağıdaki talimata bakın.
Meta veri araçlarını ayarlayın
Modelinize meta veri eklemeden önce bir Python programlama dili kullanmanız gerekir nasıl yararlanabileceğinize bakalım. Bu videoda, bunu buradan ayarlayabilirsiniz.
Python programlama ortamını kurduktan sonra ek araçlar:
pip install tflite-support
LiteRT meta veri araçları, Python 3'ü destekler.
Flatbuffers Python API kullanarak meta veri ekleme
Model meta verilerinin şema:
- Model bilgileri - Modelin genel açıklaması ve öğelerin
lisans şartları gibi. Görüntüleyin
ModelMetadata.
- Giriş bilgileri - Girişlerin ve ön işlemenin açıklaması
gereken veri türlerini öğreneceğiz. Görüntüleyin
SubGraphMetadata.input_tensor_metadata.
- Çıkış bilgileri: Sonucun açıklaması ve etiketlerle eşleme gibi işlemler gerekir. Görüntüleyin SubGraphMetadata.output_tensor_metadata.
- Giriş bilgileri - Girişlerin ve ön işlemenin açıklaması
gereken veri türlerini öğreneceğiz. Görüntüleyin
SubGraphMetadata.input_tensor_metadata.
LiteRT şu anda yalnızca tek bir alt grafiği desteklediğinden
LiteRT kodu oluşturma aracı
ve Android Studio ML Binding
özellik
yerine ModelMetadata.name
ve ModelMetadata.description
kullanılacak
SubGraphMetadata.name
ve SubGraphMetadata.description
, görüntülenirken
meta verileri ve kod oluşturma sürecini
göz önünde bulundurun.
Desteklenen Giriş / Çıkış türleri
Giriş ve çıkış için LiteRT meta verileri, belirli bir giriş ve çıkış türlerini dikkate alması gerekir. Ne olduğu veya giriş ve çıkış türleri şunları içerdiği sürece model işlevsel olarak yapar: TensorFlow tarafından desteklenmektedir. Basit meta veri:
- Özellik: İmzalanmamış tam sayılar veya kayan noktalı sayılardır.
- Resim - Meta veriler şu anda RGB ve gri tonlamalı resimleri desteklemektedir.
- Sınırlayıcı kutu - Dikdörtgen şekilli sınırlayıcı kutular. Şema, çeşitli numaralandırma şemaları.
İlgili dosyaları paketleyin
LiteRT modelleri farklı ilişkili dosyalarla gelebilir. Örneğin, doğal dil modelleri genellikle kelime parçalarını kelime ile eşleyen kelime bilgisi dosyalarına sahiptir Kimlikler; sınıflandırma modelleri, nesne kategorilerini belirten etiket dosyalarına sahip olabilir. İlişkili dosyalar (varsa) olmadan model düzgün çalışmaz.
İlişkili dosyalar artık meta veriler aracılığıyla modelle paketlenebilir
Python kitaplığı. Yeni LiteRT modeli, aşağıdakileri içeren bir ZIP dosyası haline gelir:
hem model hem de ilişkili dosyalar. Sık kullanılan bir ZIP dosyasında açılabilir
araçlar. Bu yeni model biçimi, aynı dosya uzantısını (.tflite
) kullanmaya devam ediyor. Google
mevcut TFLite çerçevesi ve Çevirmeni ile uyumludur. Paket meta verileri" bölümünü inceleyin
ve ilişkili dosyaları da
modelini inceleyin.
İlişkili dosya bilgileri meta verilere kaydedilebilir. Şuna bağlı olarak:
dosya türü ve dosyanın eklendiği yeri (ör. ModelMetadata
,
SubGraphMetadata
ve TensorMetadata
), LiRT Android kodu
oluşturma aracı, ilgili öncesi/sonrası uygulayabilir
otomatik olarak nesneye işlenir. <Codegen kullanımı> şunun bölümü:
her bir ortak dosya
tür
inceleyebilirsiniz.
Normalleştirme ve niceleme parametreleri
Normalleştirme, makine öğreniminde yaygın olarak kullanılan bir veri ön işleme tekniğidir. İlgili içeriği oluşturmak için kullanılan normalleştirmenin amacı değerleri ortak bir ölçekte değiştirmektir. ve değer aralıklarındaki farklılıkları bozabilir.
Model niceleme, ağırlıkların daha düşük kesinlikte temsil edilmesine olanak tanıyan ve isteğe bağlı olarak hem depolama hem de hesaplama için etkinleştirme.
Ön işleme ve işleme sonrası, normalleştirme ve nicelik açısından birbirinden bağımsız iki adımdır. Sorunla ilgili ayrıntılar aşağıda belirtilmiştir.
Normalleştirme | Nicelendirme | |
---|---|---|
. Örnek parametre değerleri giriş resmi Kayan reklam ve nicel modelleri, tıklayın. |
Kaydırma modeli: - ortalama: 127,5 - std: 127.5 Nitelik modeli: - ortalama: 127,5 - std: 127,5 |
Kaydırma modeli: - sıfır Nokta: 0 - ölçek: 1,0 Nitelik modeli: - sıfır Nokta: 128,0 - ölçek:0,0078125f |
. . . . Ne zaman çağrılmalı? |
. . Girişler: Giriş ise veriler normalleştirildiği zaman ve ürün ekipleri çıkarım ihtiyaçları verileri normalleştirilecek buna göre hazırlar. . Çıkışlar: çıktı verilerin kullanımı normalleştirilmiş olmasıdır. |
Kaydırma modelleri şunları yapar:
ölçmeye gerek yoktur. . Nitelikli model veya gerekmeyebilir öncesi/sonrası nicelleştirme işleniyor. Duruma göre değişken veri türüne göre giriş/çıkış tensörleridir. . - kayan noktalı tensörler: hayır öncesi/sonrası nicelleştirme biraz zaman alabilir. Quant op ve dequant op modelimiz, grafiğe dönüştürülebilir. . - int8/uint8 tensörleri: ve projenin devam edebilir. |
. . Formül |
. . normalleştirilmiş_giriş = (giriş - ortalama) / std |
Girişler için miktar belirleme:
q = f / ölçek + zeroPoint Şu kadar süreyle bölün: çıkışlar: f = (q - sıfır Nokta) * ölçek |
. parametreler |
Model oluşturucu tarafından dolduruldu
ve modelde depolanır
meta verileri
NormalizationOptions . |
Otomatik olarak doldurulan: TFLite dönüştürücü ve tflite modelinde saklanıyor dosyası olarak kaydedebilirsiniz. |
Nasıl edinilir? ne olacak? | Video reklamlar,
MetadataExtractor API'si
[2]
|
TFLite aracılığıyla
Tensor API [1] veya
aracılığıyla
MetadataExtractor API'sı
[2] |
Bolluk ve nicelik hesaplama model aynı değer nedir? | Evet, kayan ve miktar modellerin de aynı Normalleştirme parametreler | Hayır, kayan model ölçmeye gerek yoktur. |
TFLite Kodu oluşturma aracı veya Android Studio ML bağlaması otomatik olarak oluşturmak nasıl yardımcı oluyor? | . Evet |
. Evet |
[1] LiteRT Java
API
ve LiteRT C++
API.
.
[2] Meta veri ayıklayıcı kitaplığı
uint8 modelleri için görüntü verileri işlenirken normalleştirme ve niceleme, bazen atlanır. Piksel değerleri [0, 255]. Ancak genel olarak, verileri her zaman normalleştirme ve niceleme parametrelerinden yararlanabilirsiniz.
Örnekler
Farklı veri grupları için meta verilerin nasıl doldurulması gerektiğine dair farklı model türlerini görebilirsiniz:
Görüntü sınıflandırma
Komut dosyasını indirin burada gibi bir şablon oluşturarak meta verileri mobilenet_v1_0.75_160_quantized.tflite. Komut dosyasını şu şekilde çalıştırın:
python ./metadata_writer_for_image_classifier.py \
--model_file=./model_without_metadata/mobilenet_v1_0.75_160_quantized.tflite \
--label_file=./model_without_metadata/labels.txt \
--export_directory=model_with_metadata
Diğer görüntü sınıflandırma modellerinin meta verilerini doldurmak için model özelliklerini ekleyin. beğeni bu yazıya dökülür. Bu kılavuzun geri kalanında, teşhis yanıtlarınız doğrultusunda kullanabilirsiniz.
Resim sınıflandırma örneğini ayrıntılı olarak inceleme
Model bilgileri
Meta veri, yeni bir model bilgisi oluşturarak başlar:
from tflite_support import flatbuffers
from tflite_support import metadata as _metadata
from tflite_support import metadata_schema_py_generated as _metadata_fb
""" ... """
"""Creates the metadata for an image classifier."""
# Creates model info.
model_meta = _metadata_fb.ModelMetadataT()
model_meta.name = "MobileNetV1 image classifier"
model_meta.description = ("Identify the most prominent object in the "
"image from a set of 1,001 categories such as "
"trees, animals, food, vehicles, person etc.")
model_meta.version = "v1"
model_meta.author = "TensorFlow"
model_meta.license = ("Apache License. Version 2.0 "
"http://www.apache.org/licenses/LICENSE-2.0.")
Giriş / çıkış bilgileri
Bu bölümde, modelinizin giriş ve çıkış imzasının nasıl açıklanacağı gösterilmektedir. Bu meta veriler, otomatik kod oluşturucular tarafından unutmayın. Bir tensör hakkında giriş veya çıkış bilgileri oluşturmak için:
# Creates input info.
input_meta = _metadata_fb.TensorMetadataT()
# Creates output info.
output_meta = _metadata_fb.TensorMetadataT()
Resim girişi
Resim, makine öğreniminde yaygın olarak kullanılan bir giriş türüdür. LiteRT meta verileri renk alanı ve ön işleme bilgileri gibi bilgileri [örneğin, yapabilirsiniz. Resmin boyutu manuel spesifikasyon gerektirmez. çünkü zaten girdi tensörünün şekliyle sağlandığından ve türetmektir.
input_meta.name = "image"
input_meta.description = (
"Input image to be classified. The expected image is {0} x {1}, with "
"three channels (red, blue, and green) per pixel. Each value in the "
"tensor is a single byte between 0 and 255.".format(160, 160))
input_meta.content = _metadata_fb.ContentT()
input_meta.content.contentProperties = _metadata_fb.ImagePropertiesT()
input_meta.content.contentProperties.colorSpace = (
_metadata_fb.ColorSpaceType.RGB)
input_meta.content.contentPropertiesType = (
_metadata_fb.ContentProperties.ImageProperties)
input_normalization = _metadata_fb.ProcessUnitT()
input_normalization.optionsType = (
_metadata_fb.ProcessUnitOptions.NormalizationOptions)
input_normalization.options = _metadata_fb.NormalizationOptionsT()
input_normalization.options.mean = [127.5]
input_normalization.options.std = [127.5]
input_meta.processUnits = [input_normalization]
input_stats = _metadata_fb.StatsT()
input_stats.max = [255]
input_stats.min = [0]
input_meta.stats = input_stats
Etiket çıkışı
Etiket, ilişkili bir dosya kullanılarak çıkış tensörüyle eşlenebilir.
TENSOR_AXIS_LABELS
# Creates output info.
output_meta = _metadata_fb.TensorMetadataT()
output_meta.name = "probability"
output_meta.description = "Probabilities of the 1001 labels respectively."
output_meta.content = _metadata_fb.ContentT()
output_meta.content.content_properties = _metadata_fb.FeaturePropertiesT()
output_meta.content.contentPropertiesType = (
_metadata_fb.ContentProperties.FeatureProperties)
output_stats = _metadata_fb.StatsT()
output_stats.max = [1.0]
output_stats.min = [0.0]
output_meta.stats = output_stats
label_file = _metadata_fb.AssociatedFileT()
label_file.name = os.path.basename("your_path_to_label_file")
label_file.description = "Labels for objects that the model can recognize."
label_file.type = _metadata_fb.AssociatedFileType.TENSOR_AXIS_LABELS
output_meta.associatedFiles = [label_file]
Meta veri Flatbuffers oluşturma
Aşağıdaki kod, model bilgilerini giriş ve çıkışla birleştirir bilgi:
# Creates subgraph info.
subgraph = _metadata_fb.SubGraphMetadataT()
subgraph.inputTensorMetadata = [input_meta]
subgraph.outputTensorMetadata = [output_meta]
model_meta.subgraphMetadata = [subgraph]
b = flatbuffers.Builder(0)
b.Finish(
model_meta.Pack(b),
_metadata.MetadataPopulator.METADATA_FILE_IDENTIFIER)
metadata_buf = b.Output()
Meta verileri ve ilişkili dosyaları modele paketleyin
Meta veri Sabit Arabellekleri oluşturulduktan sonra, meta veriler ve etiket dosyası
TFLite dosyasına populate
yöntemiyle yazılır:
populator = _metadata.MetadataPopulator.with_model_file(model_file)
populator.load_metadata_buffer(metadata_buf)
populator.load_associated_files(["your_path_to_label_file"])
populator.populate()
Model içine istediğiniz sayıda ilişkilendirilmiş dosyayı
load_associated_files
Ancak, en azından bu dosyaları paketlemek
bunu her zaman açık bir şekilde
yapabilirsiniz. Bu örnekte, etiket dosyasını paketleme
zorunlu.
Meta verileri görselleştirme
Netron kullanarak
veya bir LiteRT modelindeki meta verileri json biçiminde okuyabilirsiniz
biçimi için MetadataDisplayer
kullanın:
displayer = _metadata.MetadataDisplayer.with_model_file(export_model_path)
export_json_file = os.path.join(FLAGS.export_directory,
os.path.splitext(model_basename)[0] + ".json")
json_file = displayer.get_metadata_json()
# Optional: write out the metadata as a json file
with open(export_json_file, "w") as f:
f.write(json_file)
Android Studio, Android Studio ML üzerinden meta verilerin görüntülenmesini de destekler. Bağlama özelliği kullanıma sunduk.
Meta veri sürümü oluşturma
Meta veriler şema sürümü, hem Anlamsal sürüm oluşturma numarası ile oluşturulur. Bu numara da şema dosyasını ve Flatbuffers dosya kimliğinin hangi gerçek sürüm uyumluluğu.
Anlamsal sürüm numarası
Meta veri şeması sürümü, Anlamsal sürüm oluşturma
numara,
MAJOR.MINOR.PATCH gibi. Şema değişikliklerini kurallara göre izler
burada bulabilirsiniz.
alanları
1.0.0
sürümünden sonra eklendi.
Flatbuffers dosya kimliği
Anlamsal sürüm oluşturma, kurallara uyduğu takdirde uyumluluğu garanti eder, ancak gerçek uyumsuzluğu ima etmez. MAJOR numarasını yukarı çekerken, geriye dönük uyumluluğun bozulduğu anlamına gelmez. Bu nedenle, Flatbuffers dosyasını kullanarak kimlik, file_identifier, özelliğini kullanın. Dosya tanımlayıcısı: olması gerekir. Belirli bir meta veri şemasına sabitlenmiş olup kullanıcılar tarafından değiştirilebilir. Meta veri şemasının geriye dönük uyumluluğu bir nedenden dolayı bozulması gerekiyorsa file_identifier, örneğin, "M001"den "M002"ye değiştirin. File_identifier'nın çok daha az değiştirilmesi bekleniyor meta veriler_version'dan daha sık kullanılır.
Gerekli minimum meta veri ayrıştırıcı sürümü
Gerekli minimum meta veri ayrıştırıcısı
sürüm
meta veri ayrıştırıcısının (Flatbuffers tarafından oluşturulan kod)
Flatbuffers meta verisinin tamamını okuyabilir. Bu sürüm fiilen
doldurulan tüm alanların sürümleri arasındaki en büyük sürüm numarası ve
dosya tanımlayıcısının belirttiği en küçük uyumlu sürümü kullanın. Minimum
gereken meta veri ayrıştırıcı sürümü, Search Ads 360'ta bulunan
Meta veriler bir TFLite modeline doldurulduğunda MetadataPopulator
. Bkz.
meta veri ayıklayıcıyı kullanabilirsiniz.
gerekli en düşük meta veri ayrıştırıcı sürümünün kullanılması gerekir.
Modellerden meta verileri okuma
Meta Veri Ayıklayıcı kitaplığı, meta verileri okumak ve yeni verilere erişmek için farklı platformlardaki bir modelden alınmış ilişkili dosyaları (Java için sürüm ve C++ sürümünü indirin. Diğer dillerde kendi meta veri ayıklayıcı aracınızı Düz arabellek kitaplığı.
Java'da meta verileri okuma
Android uygulamanızda Meta Veri Ayıklayıcı kitaplığını kullanmak için
Barındırılan LiteRT Meta Veri AAR'si
MavenCentral.
MetadataExtractor
sınıfını ve FlatBuffers Java'yı içerir.
meta veriler için bağlamalar
şema
ve model
şeması.
Bunu build.gradle
bağımlılıklarınızda aşağıdaki şekilde belirtebilirsiniz:
dependencies {
implementation 'org.tensorflow:tensorflow-lite-metadata:0.1.0'
}
Gecelik anlık görüntüleri kullanmak için Sonatype anlık görüntüsü eklediğinizden emin olun depo.
Bir MetadataExtractor
nesnesini, işaret eden ByteBuffer
ile başlatabilirsiniz
açıklama:
public MetadataExtractor(ByteBuffer buffer);
ByteBuffer
, tüm ömrü boyunca değişmeden kalmalıdır.
MetadataExtractor
nesne algılandı. Flatbuffers dosyası yüklenirken başlatma işlemi başarısız olabilir
model meta verileri tanımlayıcısı, meta veri ayrıştırıcının tanımlayıcısıyla eşleşmiyor. Görüntüleyin
meta veri sürümünü oluşturma başlıklı makaleyi inceleyin.
Meta veri ayıklayıcı, eşleşen dosya tanımlayıcıları olduğunda ve geriye dönük uyumluluk mekanizmasını destekler. Ancak, gelecekteki alanlar Şemalar, eski meta veri ayıklayıcılar tarafından çıkarılamaz. Gereken minimum meta verinin ayrıştırıcı sürümünü meta verileri okuyabilen meta veri ayrıştırıcının minimum sürümünü belirtir Düz tamponlar dolu. Minimum değerin geçerli olmadığını doğrulamak için aşağıdaki yöntemi kullanabilirsiniz: gerekli ayrıştırıcı sürümü koşulu karşılandı:
public final boolean isMinimumParserVersionSatisfied();
Meta verileri olmayan bir modelin geçirilmesine izin verilir. Ancak,
okuması çalışma zamanı hatalarına neden olur. Bir modelin
hasMetadata
yöntemini çağırarak meta verileri:
public boolean hasMetadata();
MetadataExtractor
, aşağıdakileri elde etmeniz için kullanışlı işlevler sunar:
giriş/çıkış tensörleri meta verilerdir. Örneğin,
public int getInputTensorCount();
public TensorMetadata getInputTensorMetadata(int inputIndex);
public QuantizationParams getInputTensorQuantizationParams(int inputIndex);
public int[] getInputTensorShape(int inputIndex);
public int getoutputTensorCount();
public TensorMetadata getoutputTensorMetadata(int inputIndex);
public QuantizationParams getoutputTensorQuantizationParams(int inputIndex);
public int[] getoutputTensorShape(int inputIndex);
LiteRT modeli
şema
birden çok alt grafiği desteklese de, TFLite Çevirmeni şu anda yalnızca bir
görebilirsiniz. Bu nedenle MetadataExtractor
, giriş olarak alt grafik dizinini atlar
bağımsız değişkeninin yöntemlerine eklenmesi gerekir.
Modellerden ilişkili dosyaları okuma
Meta veriler ve ilişkili dosyalar içeren LiteRT modeli aslında yaygın olarak kullanılan zip araçlarıyla açılabilen bir ZIP dosyası yükleyin. Örneğin, mobilenet_v1_0.75_160_quantized ve modeldeki etiket dosyasını aşağıdaki gibi çıkarın:
$ unzip mobilenet_v1_0.75_160_quantized_1_metadata_1.tflite
Archive: mobilenet_v1_0.75_160_quantized_1_metadata_1.tflite
extracting: labels.txt
İlişkili dosyaları Meta Veri Ayıklayıcı kitaplığı aracılığıyla da okuyabilirsiniz.
Java'da, dosya adını MetadataExtractor.getAssociatedFile
bölümüne iletin
yöntem:
public InputStream getAssociatedFile(String fileName);
Benzer şekilde, C++ ürününde bu yöntem şu yöntemle yapılabilir:
ModelMetadataExtractor::GetAssociatedFile
:
tflite::support::StatusOr<absl::string_view> GetAssociatedFile(
const std::string& filename) const;