Yaya sayma algoritması


12

Şu anda bir yaya karşı projesi geliştiriyorum (Linux'ta OpenCV + QT kullanarak). Yaklaşım hakkındaki fikrim:

  1. Çekim Çerçeveleri
  2. Arka Plan Çıkarma Yap
  3. net sesler (aşındırmak, genişletmek)
  4. lekeleri bul (cvBlobslib) - ön plan nesneleri
  5. Her blob için ROI'yi ayarlayın ve bu bloblarda yayaları (detMultiScale ile LBP) arayın (daha iyi performans için)
  6. Bulunan her yaya için iç içe bir üst gövde araması yapın (Emin değilim) (daha iyi güvenilirlik)
  7. Devam eden karelerde aynı yaya bulunursa (belki 3-4 kare) - camshift'e bu alanı ekleyin ve yaya olarak takip edin
  8. Camshift izlenen alanları sonraki kareler için damla algılamasından hariç tutma
  9. Bir yaya bir satır artış numarasını geçerse

Doğru yolda olup olmadığımı kontrol etmek istiyorum. Yaklaşımımı nasıl geliştireceğime dair herhangi bir öneriniz var mı? Birisi benzer bir şey üzerinde çalıştıysa, bu sorunla ilgili faydalı ipuçlarını, kaynakları (ve eleştirileri) takdir ediyorum.


5
Sorunuzu yeniden ifade etmek ve OpenCV parçalarını dışarıda bırakmak isteyebilirsiniz. Daha çok kavramsal soru gibi ifade edin (yaya sayımı ve takibi için algoritma).
Geerten

2
Yaklaşımınız makul görünüyor, ilgili akademik literatürü aradınız mı? Bu size en son teknoloji hakkında bir fikir vermelidir. Arka plan çıkarma zor olabilir, çevresel etkiler ve gölgeler bir sorun olabilir.
geometrikal

Yanıtlar:


8

Bu yaklaşımla ilgili bir takım olası sorunları görebiliyorum. Burada yaşadığım tecrübeden, yaya sayım sistemini çok benzer bir yaklaşımla geliştirmekten söz ediyorum, bu yüzden cesaret kırıcı olmak istemiyorum. Aksine, doğru ve sağlam bir sistem oluşturmak için üstesinden gelmeniz gereken olası engeller konusunda sizi uyarmak istiyorum.

İlk olarak, arka plan çıkarma , ilgilenilen nesnelerin her zaman hareket edeceğini ve saymakla ilgilenmediğiniz nesnelerin tamamen hareketsiz kalacağını varsayar. Tabii ki, senaryonuzda durum bu olabilir, ancak yine de çok sınırlayıcı bir varsayımdır. Ayrıca arka plan çıkarımının aydınlatmadaki değişikliklere çok duyarlı olduğunu gördüm (geometrikal'e katılıyorum).

Yapım karşı dikkatli olun = Bir insan bir damla olduğu varsayımını , kendi çevre iyi kontrol edildiğini düşünseniz bile. İnsanlara karşılık gelen lekelerin hareket etmedikleri veya çok küçük oldukları için fark edilmeden çok sık oldu, bu nedenle erozyon veya bazı eşik kriterleri ile silindiler (ve inan bana, " her şeyi çalışana kadar eşikleri ayarlayın "tuzak. Çalışmıyor;)). Tek bir damla, birlikte yürüyen iki kişiye veya bir tür bagaj taşıyan tek bir kişiye karşılık gelebilir. Ya da bir köpek. Bu yüzden lekeler hakkında akıllı varsayımlar yapmayın.

Neyse ki, LBP'leri kişi tespiti için kullandığınızdan bahsettiğinizden, yukarıdaki paragrafta hata yapmamanın doğru yolunda olduğunuzu düşünüyorum. Yine de özellikle LBP'lerin etkinliği hakkında yorum yapamam. Ayrıca HOG'un (gradyanların histogramı) insanların tespitinde en son teknoloji ürünü bir yöntem olduğunu okudum, bkz . İnsan Tespiti için Yönlendirilmiş Degradelerin Histogramları .

Son sancı Camshift kullanmakla ilgili . Renk histogramlarına dayanır, bu nedenle, izleme penceresi yeterince büyük olduğu ve oklüzyon veya ani değişiklikler olmadığı sürece, renkle ayırt edilmesi kolay tek bir nesneyi izlerken güzel çalışır. Ancak, çok benzer renk açıklamalarına sahip olabilecek ve birbirine çok yakın hareket edecek birden fazla hedefi izlemeniz gerektiğinde, bir şekilde birden fazla hipotezi sürdürmenize izin veren bir algoritma olmadan yapamazsınız. Bu bir partikül filtresi veya MCMCDA (Markov Zinciri Monte Carlo Veri Derneği) gibi bir çerçeve olabilir, bkz . Çok Hedefli İzleme için Markov Zinciri Monte Carlo Veri Birliği). Birden çok nesneyi izlerken Meanshift'i tek başına kullanma deneyimim, izleme ile gerçekleşmemesi gereken her şeydir: parkuru kaybetmek, hedefleri karıştırmak, arka planda sabitlemek vb. Birden fazla nesne izleme ve veri ilişkilendirme sorunu hakkında biraz okuyun, bu Sonuçta birden fazla kişiyi saymanın kalbi ("olabilir" diyorum çünkü hedefiniz takip etmiyor sayılıyor, bu yüzden izlemeden geçerli olan akıllı bir yaklaşım olasılığını tamamen atmıyorum ...)

Son tavsiyem: belirli bir yaklaşımla yapabileceğiniz çok şey var ve daha iyi performans elde etmek için daha ince şeylere ihtiyacınız olacak (bu yüzden user36624 ile bu konuda katılmıyorum). Bu, algoritmanızın bir parçasını daha güçlü bir şeyle değiştirmek veya mimariyi tamamen değiştirmek anlamına gelebilir. Tabii ki, hangi süslü şeylerin sizin için gerçekten yararlı olduğunu bilmelisiniz. Sorunu ilkeli bir şekilde çözmeye çalışan yayınlar var, diğerleri ise belirli bir veri kümesi için bir algoritma buluyor ve sizden soruna gerçekten uygun olmayan bir sınıflandırıcıyı eğitmenizi bekliyor. birkaç eşiği de ayarlayın. İnsanlar sayma olduğudevam eden araştırmalar, bu yüzden işlerin kolayca gelmesini beklemeyin. Yeteneğinizin biraz ötesinde olan şeyleri öğrenmek için çaba gösterin ve ardından tekrar tekrar yapın ...

Herhangi bir çözüm sunmadığımı ve bunun yerine sadece yaklaşımınızdaki (hepsi kendi deneyimlerimden gelen) kusurları işaret ettiğimi kabul ediyorum. İlham almak için, yakın zamanda yapılan bazı araştırmaları okumanızı tavsiye ederim, örneğin Gerçek Zamanlı İzleme Videosu'nda Kararlı Çok Hedefli İzleme . İyi şanslar!


9

Bence sorduğunuz şey yaya algoritmanızın fizibilitesi hakkında.

Bu tür problemler için iki genel strateji vardır:

  1. (aşağıdan yukarıya) Her çerçevede sadece yayaları algıladığınız saf bir algılama sorunu olarak düşünün. Bunları algıladıktan sonra, a) sayılarını bir çerçevede saymak oldukça kolaydır; ve b) herhangi birini ardışık çerçevelerde izlemek de kolaydır. Bu nedenle, her şeyi çözersiniz.

  2. (yukarıdan aşağıya) Bunu, ardışık çerçevelerdeki bir YG'nin eylemlerine göre yaya olup olmadığını tespit ettiğiniz bir eylem tanıma sorunu olarak düşünün. Bu sorunu çözdükten sonra, algılama ve izleme sorunlarını aynı anda çözersiniz.

Sezgisel algoritmanız ilk kategoridedir. Seni caydırmak istemiyorum, ama yayaların nasıl tespit edileceği. Çünkü gerçek veriler düşündüğünüzden daha karmaşık olabilir. Örneğin, bu, çerçeveleri yayalarla dolu olabilecek ve böylece arka planı kaldırmak veya lekeleri tespit etmek için bir metro kameraysa hiç yardımcı olmaz. Bu durumda, sorunu çözmek için yüz algılama ve yüz tanıma algoritmaları kullanmak daha makul olabilir, çünkü bir yüz bulursanız bir yaya bulursunuz. Öte yandan, bir yaya tanımınıza bağlı olarak, bir çerçevede ortaya çıkan herkesin bir yaya olarak ele alınması gerektiği doğru olabilir. Bu durumda, davranışlarını temel alarak bir yayayı açıkça tanımlayabileceğiniz eylem tanıma algoritmalarını (ikinci kategori) kullanmak makul olabilir.

Deneyimlerime dayalı bazı ipuçları:

  1. Bildiklerinizi ve kolayca neleri alabileceğinizi öğrenin. Donot, bir şey için zaman harcamak süslü ama sahip olmadığınız birçok arka plan gerektirir. Güven bana, tüm bu algoritmalar bazı durumlarda iyi, bazılarında kötü olacaktır. Bu nedenle, ilk şey, ne kadar iyi veya kötü olursa olsun, bir şeyin işe yaramasını sağlamaktır.

  2. Verileriniz hakkında daha fazla bilgi edinin ve ardından yönteminizi belirleyin. Bir sorun hakkında genel bir açıklama çoğu durumda yetersizdir.

  3. Fikrinizi göstermek istiyorsanız, MATLAB'ı kullanmak ve bir prototip oluşturmak daha iyidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.