Nesne algılama, Nesne algılama

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

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 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ı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ıç ​​nesnesi algılama modelimizi ve beraberindeki etiketleri indirebilirsiniz.

Meta Veri 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:

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

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

iOS

Modeli TensorFlow Lite Yorumlayıcı 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üm, TensorFlow Nesne Algılama API'sinden TensorFlow Lite'a dönüştürülen Tek Çekim Dedektör modellerinin imzasını açıklar.

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, temsil ettikleri meyvenin sınıfını (örneğin bir elma, muz veya çilek) belirten bir etiketle birlikte ç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 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ğerindeki (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.

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

Çıkış İmzası

Model, 0-4 indekslerine eşlenen dört dizi çıkarır. 0, 1 ve 2 dizileri, her dizide her nesneye karşılık gelen bir öğeyle, N 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, iç diziler [üst, sol, alt, sağ] biçimindeki sınırlayıcı kutuları temsil eder.
1 sınıflar Her biri etiketler dosyasındaki bir sınıf etiketinin indeksini gösteren N tamsayı dizisi (kayan nokta değerleri olarak çıktı)
2 Skorlar Bir sınıfın algılanma olasılığını temsil eden 0 ile 1 arasında N kayan nokta değeri dizisi
3 Algılama sayısı N'nin tamsayı değeri

Örneğin, bir modelin elmaları, muzları ve çileği algılamak için eğitildiğini hayal edin. Bir görüntü sağlandığında, belirli sayıda algılama sonucu verir - bu örnekte, 5.

Sınıf Puan 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. Skor, 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 emindir.

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

Sınıf Puan 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 değeri, yanlış pozitifler (yanlış tanımlanmış nesneler veya görüntüde yanlış bir şekilde nesne olarak tanımlanan alanlar) veya yanlış negatifler (gerçek nesneler) konusunda daha rahat olup olmadığınızı temel almalıdır. öz 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 şekilde "kişi" olarak tanımlanmıştır. Bu, uygun bir sınır seçilerek göz ardı edilebilecek bir yanlış pozitif örneğidir. Bu durumda, 0,6'lık (veya %60) bir kesme, yanlış pozitifi rahatlı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ürür. Sağlanan başlangıç ​​modeli için numaralar aşağıdaki gibi sıralanmıştır:

[ tepe, ayrıldı, alt, Sağ ]

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

Performans karşılaştırmaları

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 29 ms*
iPhone XS (iOS 12.4.1) 7.6ms 11 ms**

* 4 iplik 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 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 ziplerinin çoğu bir model.tflite dosyası içerir. Eğer yoksa, bu talimatlar kullanılarak bir TensorFlow Lite düz arabelleği oluşturulabilir. TF2 Object Detection Zoo'daki SSD modelleri de buradaki yönergeler kullanılarak TensorFlow Lite'a dönüştürülebilir. Algılama modellerinin doğrudan TensorFlow Lite Dönüştürücü kullanılarak dönüştürülemeyeceğini unutmamak önemlidir, çünkü bunlar mobil uyumlu bir kaynak model oluşturmaya yönelik bir ara adım gerektirir. Yukarıda bağlantılı komut dosyaları bu adımı gerçekleştirir.

TF1 ve TF2 dışa aktarma komut dosyalarının her ikisi de daha fazla sayıda çıktı nesnesi 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ıyla birlikte --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ğeriyle ölçülür) ve gecikme özellikleriyle birlikte gelir. 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'sunda çıkarım yapmak için idealdir.

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

Modellere özel veriler üzerinde ince ayar yapma

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

Orijinal kümede olmayan sınıfları tanımak için bir modeli yeniden eğitmek için 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 modelinin eğitim sürecini basitleştiren TensorFlow Lite Model Maker kitaplığını kullanmaktır. Gerekli eğitim verilerinin miktarını ve süresini azaltmak için aktarım öğrenimini kullanır. Ayrıca, önceden eğitilmiş bir modelde birkaç örnekle ince ayar yapma örneği olarak Az-adım algılama Colab'dan da öğrenebilirsiniz.

Daha büyük veri kümeleriyle ince ayar yapmak için, TensorFlow Object Detection API ile kendi modellerinizi eğitmek için bu kılavuzlara göz atın: TF1 , TF2 . Eğitildikten sonra, buradaki talimatlarla TFLite dostu bir formata dönüştürülebilirler: TF1 , TF2