Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Nesne algılama

Bir görüntü veya bir video akışı verildiğinde, bir nesne algılama modeli, bilinen bir nesne kümesinden hangisinin mevcut olabileceğini belirleyebilir ve görüntü içindeki konumları hakkında bilgi sağlayabilir.

Örneğin, örnek uygulamanın bu ekran görüntüsü, iki nesnenin nasıl tanındığını ve konumlarının nasıl açıklandığını gösterir:

Android örneğinin ekran görüntüsü

Başlamak

Bir mobil uygulamada nesne algılamayı nasıl kullanacağınızı öğrenmek için Örnek uygulamaları ve kılavuzları inceleyin .

Android veya iOS dışında bir platform kullanıyorsanız veya TensorFlow Lite API'lerine aşina iseniz, başlangıç ​​nesne algılama modelimizi ve beraberindeki etiketleri indirebilirsiniz.

Metadata ile başlangıç ​​modelini indirin

Meta Veriler ve ilişkili alanlar hakkında daha fazla bilgi için (örneğin: labels.txt ) labels.txt meta verileri okuma

Kendi göreviniz için özel bir algılama modeli eğitmek istiyorsanız, bkz. Model özelleştirme .

Aşağıdaki kullanım durumları için farklı bir model türü kullanmalısınız:

  • Görüntünün büyük olasılıkla hangi tek etiketi temsil ettiğini tahmin etme ( görüntü sınıflandırmasına bakın)
  • Bir görüntünün kompozisyonunu tahmin etme, örneğin konuya karşı arka plan ( bölümlemeye bakın)

Örnek uygulamalar ve kılavuzlar

TensorFlow Lite'ta yeniyseniz ve Android veya iOS ile çalışıyorsanız, başlamanıza yardımcı olabilecek aşağıdaki örnek uygulamaları incelemenizi öneririz.

Android

Nesne algılama modellerini yalnızca birkaç kod satırında entegre etmek için TensorFlow Lite Görev Kitaplığı'ndaki kullanıma hazır API'den yararlanabilirsiniz. Ayrıca TensorFlow Lite Interpreter Java API kullanarak kendi özel çıkarım ardışık düzeninizi de oluşturabilirsiniz.

Aşağıdaki Android örneği, sırasıyla lib_task_api ve lib_interpreter olarak her iki yöntemin uygulamasını göstermektedir.

Android örneğini görüntüleyin

iOS

Modeli TensorFlow Lite Interpreter Swift API'sini kullanarak entegre edebilirsiniz. Aşağıdaki iOS örneğine bakın.

İOS örneğini görüntüleyin

Model Açıklaması

Bu bölümde, TensorFlow Nesne Algılama API'sinden TensorFlow Lite'a dönüştürülen Tek Atışlı Dedektör modellerinin imzası açıklanmaktadır.

Bir nesne algılama modeli, birden çok nesne sınıfının varlığını ve konumunu algılamak için eğitilir. Örneğin, bir model çeşitli meyve parçalarını içeren görüntülerle birlikte temsil ettikleri meyve sınıfını (örneğin bir elma, bir muz veya bir çilek) belirten bir etiket ve her bir nesnenin nerede göründüğünü belirten verilerle eğitilebilir. görüntü.

Modele sonradan bir görüntü sağlandığında, algıladığı nesnelerin bir listesini, her nesneyi içeren bir sınırlayıcı kutunun konumunu ve algılamanın doğru olduğuna dair güveni gösteren bir puan verir.

Giriş İmzası

Model, girdi olarak bir görüntü alır.

Beklenen görüntünün piksel başına üç kanal (kırmızı, mavi ve yeşil) ile 300x300 piksel olduğunu varsayalım. Bu, modele 270.000 bayt değerinde (300x300x3) düzleştirilmiş bir arabellek olarak beslenmelidir. Model nicelleştirilmişse , her bir değer, 0 ile 255 arasında bir değeri temsil eden tek bir bayt olmalıdır.

Bu ön işlemenin Android'de nasıl yapılacağını anlamak için örnek uygulama kodumuza göz atabilirsiniz.

Çıktı İmzası

Model, 0-4 indislerine eşlenmiş dört dizi çıkarır. 0, 1 ve 2 dizileri, her dizideki bir öğenin her nesneye karşılık geldiği N algılanan nesneyi açıklar.

Dizin İsim Açıklama
0 Konumlar Çok boyutlu dizi [N] [4] kayan nokta değerleri 0 ile 1 arasında, iç diziler [üst, sol, alt, sağ] biçiminde sınırlayıcı kutuları temsil ediyor
1 Sınıflar N tamsayı dizisi (kayan nokta değerleri olarak çıktı) her biri etiketler dosyasından bir sınıf etiketinin dizinini gösterir
2 Skorlar 0 ile 1 arasında, bir sınıfın tespit edilme olasılığını temsil eden N kayan nokta değerleri dizisi
3 Tespit sayısı N'nin tamsayı değeri

Örneğin, elmaları, muzları ve çilekleri tespit etmek için eğitilmiş bir model hayal edin. Bir görüntü sağlandığında, belirli sayıda algılama sonucunu verir - bu örnekte, 5.

Sınıf Puan yer
elma 0.92 [18, 21, 57, 63]
Muz 0.88 [100, 30, 180, 150]
çilek 0.87 [7, 82, 89, 163]
Muz 0.23 [42, 66, 57, 83]
elma 0.11 [6, 42, 31, 58]

Güven puanı

Bu sonuçları yorumlamak için, tespit edilen her nesnenin puanına ve konumuna bakabiliriz. Puan, nesnenin gerçekten algılandığına dair güveni gösteren 0 ile 1 arasında bir sayıdır. Sayı 1'e ne kadar yakınsa, model o kadar kendinden emin olur.

Uygulamanıza bağlı olarak, altında tespit sonuçlarını atacağınız bir kesme eşiğine karar verebilirsiniz. Mevcut örnek için, makul bir kesme 0.5 puandır (tespitin geçerli olduğuna dair% 50 olasılık anlamına gelir). Bu durumda, dizideki son iki nesne göz ardı edilir çünkü bu güven puanları 0,5'in altındadır:

Sınıf Puan yer
elma 0.92 [18, 21, 57, 63]
Muz 0.88 [100, 30, 180, 150]
çilek 0.87 [7, 82, 89, 163]
Muz 0.23 [42, 66, 57, 83]
elma 0.11 [6, 42, 31, 58]

Kullandığınız sınır, yanlış pozitiflerle (yanlış olarak tanımlanan nesneler veya görüntünün yanlışlıkla nesne olarak tanımlanmayan alanları) veya yanlış negatiflerle (gerçek nesneler olan gerçek nesneler) daha rahat olup olmadığınıza bağlı olmalıdır. güvenleri düşük olduğu için kaçırıldı).

Örneğin, aşağıdaki görüntüde, bir armut (modelin algılamak üzere eğitildiği bir nesne değildir) yanlış bir "kişi" olarak tanımlanmıştır. Bu, uygun bir kesme noktası seçilerek göz ardı edilebilecek bir yanlış pozitif örneğidir. Bu durumda, 0,6 (veya% 60) kesme, yanlış pozitifliği rahatça dışlayacaktır.

Yanlış pozitif gösteren Android örneğinin ekran görüntüsü

yer

Tespit edilen her nesne için, model, konumunu çevreleyen sınırlayıcı bir dikdörtgeni temsil eden dört sayı dizisi döndürecektir. Sağlanan başlangıç ​​modeli için numaralar aşağıdaki şekilde sıralanmıştır:

[ üst, ayrıldı, alt, sağ ]

Üst değer, dikdörtgenin üst kenarının görüntünün üst kenarına olan mesafesini piksel cinsinden temsil eder. Sol değer, sol kenarın giriş görüntüsünün solundan mesafesini temsil eder. Diğer değerler, benzer şekilde alt ve sağ kenarları temsil eder.

Performans testleri

Başlangıç ​​modelimiz için performans karşılaştırma numaraları , burada açıklanan araçla oluşturulur.

Model adı Model boyutu cihaz GPU İşlemci
COCO SSD MobileNet v1 27 Mb Pixel 3 (Android 10) 22 ms 46 ms *
Pixel 4 (Android 10) 20 ms 29 ms *
iPhone XS (iOS 12.4.1) 7,6 ms 11 ms **

* 4 iplik kullanıldı.

** En iyi performans sonucu için iPhone'da kullanılan 2 iş parçacığı.

Model Özelleştirme

Önceden eğitilmiş modeller

Çeşitli gecikme ve hassaslık özelliklerine sahip mobil cihazlar için optimize edilmiş algılama modelleri Algılama Hayvanat Bahçesi'nde bulunabilir . Her biri aşağıdaki bölümlerde açıklanan giriş ve çıkış imzalarını takip eder.

İndirme model.tflite çoğu bir model.tflite dosyası içerir. Eğer yoksa, bu talimatlar kullanılarak bir TensorFlow Lite düz arabellek oluşturulabilir. Dan SSD modelleri TF2 Nesne Algılama Zoo da yönergeleri kullanarak TensorFlow Lite dönüştürülebilir burada . Algılama modellerinin doğrudan TensorFlow Lite Converter kullanılarak dönüştürülemeyeceğine dikkat etmek önemlidir, çünkü mobil uyumlu bir kaynak modeli oluşturmak için bir ara adım gerektirir. Yukarıda bağlanan komut dosyaları bu adımı gerçekleştirir.

Hem TF1 hem de TF2 dışa aktarma komut dosyalarının daha fazla sayıda çıktı nesnesini veya daha yavaş, daha doğru son işlemeyi etkinleştirebilen parametreleri vardır. Desteklenen argümanların kapsamlı bir listesini görmek için lütfen --help kullanın.

Şu anda, cihaz üzerinde çıkarım yalnızca SSD modelleriyle optimize edilmiştir. CenterNet ve EfficientDet gibi diğer mimariler için daha iyi destek araştırılmaktadır.

Özelleştirmek için bir model nasıl seçilir?

Her model kendi hassasiyeti (mAP değeri ile ölçülür) ve gecikme özellikleri ile birlikte gelir. Kullanım durumunuz ve amaçlanan donanımınız için en iyi şekilde çalışan bir model seçmelisiniz. Örneğin Edge TPU modelleri, Google'ın Pixel 4'teki Edge TPU'sunda çıkarım yapmak için idealdir.

Modelleri değerlendirmek ve mevcut olan en verimli seçeneği seçmek için karşılaştırma aracımızı kullanabilirsiniz.

Özel verilerde ince ayar modelleri

Sağladığımız önceden eğitilmiş modeller, 90 sınıf nesneyi algılayacak şekilde eğitilmiştir. Sınıfların tam listesi için model meta verilerindeki etiketler dosyasına bakın.

Orijinal sette olmayan sınıfları tanımak için bir modeli yeniden eğitmek için transfer öğrenimi olarak bilinen bir tekniği kullanabilirsiniz. Örneğin, orijinal eğitim verilerinde yalnızca bir sebze olmasına rağmen modeli birden çok sebze türünü tespit edecek şekilde yeniden eğitebilirsiniz. Bunu yapmak için, eğitmek istediğiniz her yeni etiket için bir dizi eğitim görüntüsüne ihtiyacınız olacak. Lütfen birkaç örnekle önceden eğitilmiş bir modelin ince ayarının bir örneği olarak Az atış algılama Colab'ımıza bakın.

Daha büyük veri kümelerinde ince ayar yapmak için, kendi modellerinizi TensorFlow Nesne Algılama API'si: TF1 , TF2 ile eğitmek için bu kılavuzlara bir göz atın. Eğitildikten sonra, buradaki talimatlarla TFLite uyumlu bir biçime dönüştürülebilirler: TF1 , TF2