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:
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:
- Görüntünün en olası 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 özneye karşı arka plan (bkz. bölümlendirme )
Ö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.
iOS
Modeli TensorFlow Lite Yorumlayıcı Swift API'sini kullanarak entegre edebilirsiniz. Aşağıdaki iOS örneğine bakın.
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.
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