nesne algılama

Bir görüntü veya video akışı göz önüne alındığında, bir nesne algılama modeli, bilinen nesnelerden hangisinin mevcut olabileceğini belirleyebilir ve bunların 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ına nasıl açıklama eklendiğini gösterir:

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

Başlamak

Bir mobil uygulamada nesne algılamanın nasıl kullanılacağını öğrenmek için Örnek uygulamaları ve kılavuzları inceleyin.

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

Meta Veriler içeren başlangıç ​​modelini indirin

Meta Veriler ve ilişkili alanlar (örneğin: labels.txt ) hakkında daha fazla bilgi için bkz . Modellerden 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ı türde bir model kullanmalısınız:

  • Görselin büyük olasılıkla hangi etiketi temsil ettiğini tahmin etme (bkz. görsel sınıflandırması )
  • Bir görüntünün kompozisyonunu tahmin etme (örneğin, konu ve arka plan) (bkz. segmentasyon )

Ö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ç satır kodla entegre etmek için TensorFlow Lite Görev Kitaplığı'ndaki kullanıma hazır API'den yararlanabilirsiniz. TensorFlow Lite Interpreter Java API'sini kullanarak kendi özel çıkarım işlem hattınızı da oluşturabilirsiniz.

Aşağıdaki Android örneği, sırasıyla Görev kitaplığı ve yorumlayıcı API'sini kullanan her iki yöntemin uygulamasını gösterir.

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

iOS

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

iOS örneğini görüntüle

Model Açıklaması

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

Bir nesne algılama modeli, birden fazla 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örsellerin yanı sıra bunların temsil ettiği meyvenin sınıfını belirten bir etiket (örneğin bir elma, bir muz veya bir çilek) ve her bir nesnenin meyvenin içinde nerede göründüğünü belirten verilerle eğitilebilir. görüntü.

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

Giriş İmzası

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

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

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

Çıkış İmzası

Model, 0-4 endekslerine eşlenen dört dizi üretir. Diziler 0, 1 ve 2, her dizideki bir öğenin her nesneye karşılık geldiği N algılanan nesneyi tanımlar.

Dizin İsim Tanım
0 Konumlar 0 ile 1 arasındaki [N] [4] kayan nokta değerlerinden oluşan çok boyutlu dizi; iç diziler [üst, sol, alt, sağ] formundaki sınırlayıcı kutuları temsil eder
1 Sınıflar Her biri etiketler dosyasındaki bir sınıf etiketinin dizinini gösteren N tamsayı dizisi (kayan nokta değerleri olarak çıktı)
2 Puanlar Bir sınıfın tespit edilme olasılığını temsil eden, 0 ile 1 arasında N kayan nokta değeri dizisi
3 Tespit sayısı N'nin tamsayı değeri

Örneğin, bir modelin elma, muz ve çilekleri tespit edecek şekilde eğitildiğini düşünün. Bir görüntü sağlandığında, belirli sayıda algılama sonucunun çıktısını verecektir (bu örnekte 5).

Sınıf Gol Konum
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 tespit edildiğine dair güveni gösteren 0 ile 1 arasında bir sayıdır. Sayı 1'e ne kadar yakınsa model o kadar güvenilir demektir.

Uygulamanıza bağlı olarak, altında tespit sonuçlarını atacağınız bir kesme eşiğine karar verebilirsiniz. Mevcut örnekte, makul bir kesme noktası 0,5'lik bir puandır (bu, tespitin geçerli olma ihtimalinin %50 olduğu 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 Gol Konum
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 kesme, yanlış pozitifler (yanlış tanımlanan nesneler veya nesne olmadıkları halde yanlışlıkla nesne olarak tanımlanan görüntü alanları) veya yanlış negatifler (yanlış olarak tanımlanan orijinal nesneler) konusunda daha rahat olup olmadığınıza bağlı olmalıdır. öz güvenlerinin düşük olması nedeniyle kaçırılmıştır).

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

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

Konum

Algılanan her nesne için model, konumunu çevreleyen sınırlayıcı bir dikdörtgeni temsil eden dört sayıdan oluşan bir dizi döndürecektir. Sunulan başlangıç ​​modeli için numaralar şu şekilde sıralanmıştır:

[ tepe, sol, alt, Sağ ]

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

Performans kıyaslamaları

Başlangıç ​​modelimize ilişkin performans kıyaslama numaraları, burada açıklanan araçla oluşturulur.

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

* 4 konu kullanıldı.

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

Modeli Özelleştirme

Önceden eğitilmiş modeller

Çeşitli gecikme ve hassasiyet ö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.

İndirilen ziplerin çoğu bir model.tflite dosyası içerir. Eğer böyle bir tane yoksa, bu talimatlar kullanılarak bir TensorFlow Lite düz tampon oluşturulabilir. TF2 Nesne Algılama Hayvanat Bahçesi'ndeki SSD modelleri de buradaki talimatlar kullanılarak TensorFlow Lite'a dönüştürülebilir. Algılama modellerinin, mobil uyumlu bir kaynak modeli oluşturmanın bir ara adımını gerektirmesi nedeniyle doğrudan TensorFlow Lite Converter kullanılarak dönüştürülemeyeceğini unutmamak önemlidir. Yukarıda bağlantısı verilen komut dosyaları bu adımı gerçekleştirir.

Hem TF1 hem de TF2 dışa aktarma komut dosyaları, daha fazla sayıda çıktı nesnesini veya daha yavaş, daha doğru sonradan işlemeyi etkinleştirebilen parametrelere sahiptir. Desteklenen bağımsız değişkenlerin kapsamlı bir listesini görmek için lütfen komut dosyalarında --help kullanın.

Şu anda cihaz içi çıkarım yalnızca SSD modelleriyle optimize edilmektedir. CenterNet ve EfficientDet gibi diğer mimariler için daha iyi destek araştırılıyor.

Özelleştirilecek bir model nasıl seçilir?

Her model kendi hassasiyetine (mAP değeriyle ölçülür) ve gecikme özelliklerine sahiptir. Kullanım durumunuza ve amaçlanan donanıma en uygun modeli seçmelisiniz. Örneğin Edge TPU modelleri, Google'ın Pixel 4'teki Edge TPU'su hakkında çıkarım yapmak için idealdir.

Modelleri değerlendirmek ve mevcut en verimli seçeneği seçmek için kıyaslama aracımızı kullanabilirsiniz.

Özel verilerde modellere ince ayar yapma

Sağladığımız önceden eğitilmiş modeller, 90 nesne sınıfını tespit edecek ş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ıyacak şekilde bir modeli yeniden eğitmek için transfer öğrenme olarak bilinen bir tekniği kullanabilirsiniz. Örneğin, orijinal eğitim verilerinde yalnızca bir sebze olmasına rağmen modeli birden fazla 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örseline ihtiyacınız olacak. Önerilen yol, birkaç satır kodla özel veri kümesi kullanarak bir TensorFlow Lite modelinin eğitilme sürecini basitleştiren TensorFlow Lite Model Maker kitaplığının kullanılmasıdır. Gerekli eğitim verisi miktarını ve süresini azaltmak için transfer öğrenmeyi kullanır. Ayrıca birkaç örnekle önceden eğitilmiş bir modele ince ayar yapma örneği olarak Az sayıda atış tespiti Colab'dan da bilgi alabilirsiniz.

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