Nesne algılama, Nesne algılama

Bir görüntü veya video akışı verildiğinde, bir nesne algılama modeli, bilinen bir nesne kümesinden 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ı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 zaten aşina iseniz, başlangıç ​​nesne algılama modelimizi ve beraberindeki etiketleri indirebilirsiniz.

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

Meta veriler ve ilişkili alanlar hakkında daha fazla bilgi için (örneğin: labels.txt ) 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:

Ö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ı keşfetmenizi öneririz.

Android

Nesne algılama modellerini yalnızca birkaç kod satırında entegre etmek için TensorFlow Lite Task Library'deki kullanıma hazır API'den yararlanabilirsiniz. TensorFlow Lite Interpreter Java API'yi kullanarak kendi özel çıkarım işlem hattınızı da oluşturabilirsiniz.

Aşağıdaki Android örneği, sırasıyla Task library ve tercüman API'sini kullanan her iki yöntem için uygulamayı gösterir.

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

iOS

TensorFlow Lite Tercüman Swift API'sini kullanarak modeli entegre edebilirsiniz. Aşağıdaki iOS örneğine bakın.

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

Model Açıklaması

Bu bölümde , TensorFlow Object Detection API'den TensorFlow Lite'a dönüştürülen Single-Shot Detector modellerinin imzası açıklanmaktadır.

Bir nesne algılama modeli, birden çok nesne sınıfının varlığını ve konumunu algılamak üzere eğitilir. Örneğin, bir model, temsil ettikleri meyvenin sınıfını belirten bir etiketle (ör. elma, muz veya çilek) çeşitli meyve parçalarını içeren görüntülerle ve her nesnenin 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ı bir 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 300x300 piksel olduğunu ve piksel başına üç kanal (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 nicelleştirilmişse , her 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ıldığını anlamak için örnek uygulama kodumuza göz atabilirsiniz.

Çıktı İmzası

Model, 0-4 endeksleriyle eşlenen dört dizi çıkarır. 0, 1 ve 2 dizileri, her nesneye karşılık gelen her bir dizide bir öğe ile N adet algılanan nesneyi tanımlar.

dizin İsim Tanım
0 konumlar 0 ile 1 arasında [N][4] kayan nokta değerlerinin çok boyutlu dizisi, [üst, sol, alt, sağ] biçiminde sınırlayıcı kutuları temsil eden iç diziler
1 sınıflar Her biri etiketler dosyasından bir sınıf etiketinin dizinini gösteren N tam sayı dizisi (kayan nokta değerleri olarak çıktı)
2 Puanlar Bir sınıfın algılanma 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, elmaları, muzları ve çilekleri algılamak üzere eğitilmiş bir model hayal edin. Bir görüntü sağlandığında, belirli sayıda algılama sonucu verir - 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 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 güvenlidir.

Uygulamanıza bağlı olarak, altına inildiğinde tespit sonuçlarını iptal edeceğiniz bir eşik eşik belirleyebilirsiniz. Mevcut örnek için, mantıklı bir kesme 0,5'lik bir puandır (tespitin geçerli olması için %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 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ımlanmış nesneler veya nesne olmadığı halde yanlışlıkla nesne olarak tanımlanan görüntü alanları) veya yanlış negatifler (gerçek nesneler) konusunda daha rahat olup olmadığına bağlı olmalıdır. öz güvenleri düşük olduğu için kaçırdılar).

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

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ürür. Sağlanan marş modeli için numaralar şu şekilde sıralanmıştır:

[ tepe, sol, alt, Sağ ]

En yüksek değer, dikdörtgenin üst kenarının görüntünün üstünden piksel cinsinden uzaklığını 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 kriterleri

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

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

* 4 adet ip kullanılmıştır.

** 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 kesinlik ö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 zip'lerinin çoğu bir model.tflite dosyası içerir. Eğer yoksa, bu talimatlar kullanılarak bir TensorFlow Lite düz tampon oluşturulabilir. TF2 Object Detection Zoo'daki SSD modelleri de buradaki talimatlar kullanılarak TensorFlow Lite'a dönüştürülebilir. Mobil uyumlu bir kaynak modeli oluşturmak için bir ara adım gerektirdiğinden, algılama modellerinin doğrudan TensorFlow Lite Converter kullanılarak dönüştürülemeyeceğini not etmek önemlidir. Yukarıda bağlantısı verilen komut dosyaları bu adımı gerçekleştirir.

Hem TF1 hem de TF2 dışa aktarma betikleri, 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 betiklerle --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ılıyor.

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

Her model kendi kesinliği (mAP değeri ile ölçülür) ve gecikme özellikleriyle 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 en verimli seçeneği seçmek için kıyaslama aracımızı kullanabilirsiniz.

Modellerde özel veriler üzerinde ince ayar yapma

Sağladığımız önceden eğitilmiş modeller, 90 nesne sınıfını algılamak üzere 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 üzere transfer öğrenimi olarak bilinen bir teknik kullanabilirsiniz. Örneğin, orijinal eğitim verilerinde yalnızca bir sebze olmasına rağmen, birden çok sebze türünü algılamak için modeli 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. Önerilen yol, birkaç satır kodla özel veri kümesi kullanarak bir TensorFlow Lite modelini eğitme sürecini basitleştiren TensorFlow Lite Model Maker kitaplığını kullanmaktır. Gerekli eğitim verisi miktarını ve süresini azaltmak için transfer öğrenimini kullanır. Önceden eğitilmiş bir modelde birkaç örnekle ince ayar yapma örneği olarak Az atış algılama Colab'den de öğrenebilirsiniz.

Daha büyük veri kümeleriyle ince ayar yapmak için, TensorFlow Nesne Algılama API'si ile kendi modellerinizi eğitmek için ş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