Görüntü sınıflandırma, bir görüntünün neyi temsil ettiğini tanımlamak için makine öğreniminin yaygın bir kullanımıdır. Örneğin, belirli bir resimde ne tür bir hayvanın göründüğünü bilmek isteyebiliriz. Bir görüntünün neyi temsil ettiğini tahmin etme görevine görüntü sınıflandırma denir. Bir görüntü sınıflandırıcı, çeşitli görüntü sınıflarını tanıyacak şekilde eğitilir. Örneğin bir model, üç farklı hayvan türünü temsil eden fotoğrafları tanıyacak şekilde eğitilebilir: tavşanlar, hamsterler ve köpekler. Görüntü sınıflandırıcılar hakkında daha fazla bilgi için görüntü sınıflandırmasına genel bakış bölümüne bakın.
Özel görüntü sınıflandırıcılarınızı veya önceden eğitilmiş görüntü sınıflandırıcılarınızı mobil uygulamalarınıza dağıtmak için Görev Kitaplığı ImageClassifier
API'sini kullanın.
ImageClassifier API'nin temel özellikleri
Döndürme, yeniden boyutlandırma ve renk alanı dönüştürme dahil olmak üzere giriş görüntüsü işleme.
Giriş görüntüsünün ilgi alanı.
Harita yerel ayarını etiketleyin.
Sonuçları filtrelemek için puan eşiği.
Top-k sınıflandırma sonuçları.
İzin verilenler listesini ve reddedilenler listesini etiketleyin.
Desteklenen görüntü sınıflandırıcı modelleri
Aşağıdaki modellerin ImageClassifier
API ile uyumlu olduğu garanti edilir.
Görüntü Sınıflandırması için TensorFlow Lite Model Maker tarafından oluşturulan modeller.
TensorFlow Hub'da önceden eğitilmiş görüntü sınıflandırma modelleri .
AutoML Vision Edge Görüntü Sınıflandırması tarafından oluşturulan modeller.
Model uyumluluk gereksinimlerini karşılayan özel modeller.
Java'da çıkarımı çalıştırma
ImageClassifier
bir Android uygulamasında nasıl kullanılacağına ilişkin bir örnek için Görüntü Sınıflandırması referans uygulamasına bakın.
Adım 1: Gradle bağımlılığını ve diğer ayarları içe aktarın
.tflite
model dosyasını, modelin çalıştırılacağı Android modülünün asset dizinine kopyalayın. Dosyanın sıkıştırılmaması gerektiğini belirtin ve TensorFlow Lite kitaplığını modülün build.gradle
dosyasına ekleyin:
android {
// Other settings
// Specify tflite file should not be compressed for the app apk
aaptOptions {
noCompress "tflite"
}
}
dependencies {
// Other dependencies
// Import the Task Vision Library dependency (NNAPI is included)
implementation 'org.tensorflow:tensorflow-lite-task-vision'
// Import the GPU delegate plugin Library for GPU inference
implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin'
}
Adım 2: Modelin kullanılması
// Initialization
ImageClassifierOptions options =
ImageClassifierOptions.builder()
.setBaseOptions(BaseOptions.builder().useGpu().build())
.setMaxResults(1)
.build();
ImageClassifier imageClassifier =
ImageClassifier.createFromFileAndOptions(
context, modelFile, options);
// Run inference
List<Classifications> results = imageClassifier.classify(image);
ImageClassifier
yapılandırmaya yönelik daha fazla seçenek için kaynak koduna ve javadoc'a bakın.
İOS'ta çıkarımı çalıştırma
1. Adım: Bağımlılıkları yükleyin
Görev Kitaplığı, CocoaPod'lar kullanılarak kurulumu destekler. Sisteminizde CocoaPods'un kurulu olduğundan emin olun. Talimatlar için lütfen CocoaPods kurulum kılavuzuna bakın.
Bir Xcode projesine bölme eklemeyle ilgili ayrıntılar için lütfen CocoaPods kılavuzuna bakın.
TensorFlowLiteTaskVision
bölmesini Pod dosyasına ekleyin.
target 'MyAppWithTaskAPI' do
use_frameworks!
pod 'TensorFlowLiteTaskVision'
end
Çıkarım için kullanacağınız .tflite
modelinin uygulama paketinizde mevcut olduğundan emin olun.
Adım 2: Modelin kullanılması
Süratli
// Imports
import TensorFlowLiteTaskVision
// Initialization
guard let modelPath = Bundle.main.path(forResource: "birds_V1",
ofType: "tflite") else { return }
let options = ImageClassifierOptions(modelPath: modelPath)
// Configure any additional options:
// options.classificationOptions.maxResults = 3
let classifier = try ImageClassifier.classifier(options: options)
// Convert the input image to MLImage.
// There are other sources for MLImage. For more details, please see:
// https://developers.google.com/ml-kit/reference/ios/mlimage/api/reference/Classes/GMLImage
guard let image = UIImage (named: "sparrow.jpg"), let mlImage = MLImage(image: image) else { return }
// Run inference
let classificationResults = try classifier.classify(mlImage: mlImage)
Hedef C
// Imports
#import <TensorFlowLiteTaskVision/TensorFlowLiteTaskVision.h>
// Initialization
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"birds_V1" ofType:@"tflite"];
TFLImageClassifierOptions *options =
[[TFLImageClassifierOptions alloc] initWithModelPath:modelPath];
// Configure any additional options:
// options.classificationOptions.maxResults = 3;
TFLImageClassifier *classifier = [TFLImageClassifier imageClassifierWithOptions:options
error:nil];
// Convert the input image to MLImage.
UIImage *image = [UIImage imageNamed:@"sparrow.jpg"];
// There are other sources for GMLImage. For more details, please see:
// https://developers.google.com/ml-kit/reference/ios/mlimage/api/reference/Classes/GMLImage
GMLImage *gmlImage = [[GMLImage alloc] initWithImage:image];
// Run inference
TFLClassificationResult *classificationResult =
[classifier classifyWithGMLImage:gmlImage error:nil];
TFLImageClassifier
yapılandırmaya yönelik daha fazla seçenek için kaynak koduna bakın.
Python'da çıkarımı çalıştırma
Adım 1: pip paketini yükleyin
pip install tflite-support
Adım 2: Modelin kullanılması
# Imports
from tflite_support.task import vision
from tflite_support.task import core
from tflite_support.task import processor
# Initialization
base_options = core.BaseOptions(file_name=model_path)
classification_options = processor.ClassificationOptions(max_results=2)
options = vision.ImageClassifierOptions(base_options=base_options, classification_options=classification_options)
classifier = vision.ImageClassifier.create_from_options(options)
# Alternatively, you can create an image classifier in the following manner:
# classifier = vision.ImageClassifier.create_from_file(model_path)
# Run inference
image = vision.TensorImage.create_from_file(image_path)
classification_result = classifier.classify(image)
ImageClassifier
yapılandırmaya yönelik daha fazla seçenek için kaynak koduna bakın.
Çıkarımı C++'da çalıştırma
// Initialization
ImageClassifierOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_path);
std::unique_ptr<ImageClassifier> image_classifier = ImageClassifier::CreateFromOptions(options).value();
// Create input frame_buffer from your inputs, `image_data` and `image_dimension`.
// See more information here: tensorflow_lite_support/cc/task/vision/utils/frame_buffer_common_utils.h
std::unique_ptr<FrameBuffer> frame_buffer = CreateFromRgbRawBuffer(
image_data, image_dimension);
// Run inference
const ClassificationResult result = image_classifier->Classify(*frame_buffer).value();
ImageClassifier
yapılandırmaya yönelik daha fazla seçenek için kaynak koduna bakın.
Örnek sonuçlar
Burada bir kuş sınıflandırıcının sınıflandırma sonuçlarına bir örnek verilmiştir.
Results:
Rank #0:
index : 671
score : 0.91406
class name : /m/01bwb9
display name: Passer domesticus
Rank #1:
index : 670
score : 0.00391
class name : /m/01bwbt
display name: Passer montanus
Rank #2:
index : 495
score : 0.00391
class name : /m/0bwm6m
display name: Passer italiae
ImageClassifier için basit CLI demo aracını kendi modeliniz ve test verilerinizle deneyin.
Model uyumluluk gereksinimleri
ImageClassifier
API, zorunlu TFLite Model Meta Verilerine sahip bir TFLite modeli beklemektedir. TensorFlow Lite Meta Veri Yazarı API'sini kullanarak görüntü sınıflandırıcıları için meta veriler oluşturma örneklerine bakın.
Uyumlu görüntü sınıflandırıcı modelleri aşağıdaki gereksinimleri karşılamalıdır:
Giriş görüntüsü tensörü (kTfLiteUInt8/kTfLiteFloat32)
- boyut görüntü girişi
[batch x height x width x channels]
. - toplu çıkarım desteklenmiyor (
batch
1 olması gerekiyor). - yalnızca RGB girişleri desteklenir (
channels
3 olması gerekir). - tür kTfLiteFloat32 ise, giriş normalleştirmesi için normalizationOptions'ın meta verilere eklenmesi gerekir.
- boyut görüntü girişi
Çıkış puanı tensörü (kTfLiteUInt8/kTfLiteFloat32)
-
N
sınıfı ve 2 veya 4 boyutlu, yani[1 x N]
veya[1 x 1 x 1 x N]
- her satırda bir etiket içeren, TENSOR_AXIS_LABELS tipinde AssociatedFile-s olarak isteğe bağlı (ancak önerilen) etiket eşlemeleri. Örnek etiket dosyasına bakın. Bu türden ilk AssociatedFile (varsa), sonuçların
label
alanını (C++'daclass_name
olarak adlandırılır) doldurmak için kullanılır.display_name
alanı, yerel ayarı, oluşturma zamanında kullanılanImageClassifierOptions
display_names_locale
alanıyla eşleşen AssociatedFile'dan (varsa) doldurulur (varsayılan olarak "en", yani İngilizce). Bunlardan hiçbiri mevcut değilse sadece sonuçlarınindex
alanı doldurulacaktır.
-