Görüntü işleme için hangi CPU veya FPGA daha uygundur?

Görüntü sistemleri en yeni nesil çok çekirdekli CPU'ları ve güçlü FPGA'ları giderek daha fazla entegre ettikçe, görüntü sistemi tasarımcılarının bu işleme unsurlarını kullanmanın faydalarını, kazançlarını ve kayıplarını anlamaları gerekir. Sadece doğru algoritmaları doğru donanım üzerinde çalıştırmaları gerekmiyor, aynı zamanda tasarımlarının temeli olarak hangi mimarilerin en uygun olduğunu anlamaları gerekiyor.

Satır içi işleme ve birlikte işleme

Hangi tür algoritmanın hangi işleme elemanı için en uygun olduğunu araştırmadan önce, her uygulama için en uygun mimari tipini anlamalısınız. CPU ve FPGA tabanlı heterojen bir mimariye sahip bir görüntü sistemi geliştirirken, iki ana kullanım durumunun dikkate alınması gerekir: gömülü işleme ve birlikte işleme.

FPGA birlikte işleme ise, FPGA ve CPU birlikte çalışacak ve işlem yükünü paylaşacaktır. Bu mimari, en çok GigE Vision ve USB3 Vision kameralarda kullanılır, çünkü edinme mantığı en iyi CPU üzerinde uygulanır:

CPU'yu bir görüntüyü yakalamak için kullanabilir ve ardından FPGA'nın filtreleme veya renk düzlemi çıkarma gibi işlemleri gerçekleştirebilmesi için bunu doğrudan bellek erişimi (DMA) yoluyla FPGA'ya gönderebilirsiniz. Ardından, optik karakter tanıma (OCR) veya desen eşleştirme gibi daha gelişmiş işlemler için görüntüyü CPU'ya geri gönderebilirsiniz.

Bazı durumlarda, tüm işleme adımlarını FPGA üzerinde uygulayabilir ve yalnızca işleme sonuçlarını CPU'ya geri gönderebilirsiniz. Bu, CPU'nun hareket kontrolü, ağ iletişimi ve görüntü görüntüleme gibi diğer işlemler için daha fazla kaynak kullanmasına izin verir.

FPGA birlikte işlemede, görüntü CPU tarafından toplanır ve DMA aracılığıyla FPGA'ya gönderilir ve ardından görüntü FPGA tarafından işlenir.

Gömülü FPGA işleme mimarisinde, kamera arayüzünü doğrudan FPGA'nın pinlerine bağlayabilirsiniz, böylece pikseller doğrudan kameradan FPGA'ya gönderilebilir. Bu mimari genellikle Camera Link kameralarıyla kullanılır, çünkü edinim mantığının FPGA üzerindeki dijital devreler kullanılarak uygulanması kolaydır. Bu mimarinin iki ana faydası vardır:

İlk olarak, birlikte işlemede olduğu gibi, FPGA üzerinde ön işleme işlevleri gerçekleştirirken, işin bir kısmını CPU'dan FPGA'ya aktarmak için gömülü işleme kullanılabilir. Örneğin, CPU'ya piksel göndermeden önce, FPGA üzerinde filtreleme veya eşik işleme gibi yüksek hızlı ön işleme gerçekleştirilebilir. Bu aynı zamanda CPU'nun işlemesi gereken veri miktarını da azaltır, çünkü CPU üzerindeki mantık sadece ilgilenilen bölgenin piksellerini yakalamaya ihtiyaç duyar ve bu da sonuçta tüm sistemin verimini artırır.

Bu mimarinin ikinci yararı, yüksek hızlı kontrol işlemlerinin CPU kullanılmadan doğrudan FPGA'da gerçekleştirilebilmesidir. FPGA'lar kontrol uygulamaları için idealdir çünkü çok hızlı ve yüksek oranda belirlenmiş döngü hızları sağlayabilir. Bir örnek, FPGA'nın aktüatöre pulslar gönderdiği ve puls aktüatörden geçtiğinde aktüatörün parçaları reddedeceği veya sıralayacağı yüksek hızlı sınıflandırmadır.

Gömülü FPGA işleme mimarisinde, kamera arayüzünü doğrudan FPGA'nın pinlerine bağlayabilirsiniz, böylece pikseller doğrudan kameradan FPGA'ya gönderilebilir.

CPU ve FPGA görüntü algoritmaları

Heterojen bir görüntü sistemi oluşturmanın farklı yolları hakkında temel bir anlayışa sahip olduktan sonra, FPGA'larda çalışan en iyi algoritmalara bir göz atabilirsiniz. Öncelikle CPU ve FPGA'nın çalışma prensibini anlamalısınız. Bu kavramı açıklamak için, teorik bir algoritmanın görüntü üzerinde dört farklı işlem gerçekleştirebileceğini varsayıyoruz ve ardından bu dört işlemin CPU ve FPGA'ya yerleştirildiğinde nasıl çalıştığına bakıyoruz:

CPU, işlemleri sırayla yürütür, bu nedenle ikinci işlem başlatılmadan önce ilk işlem tüm görüntü üzerinde çalışmalıdır. Bu örnekte, algoritmadaki her adımın CPU'da çalışması 6ms sürdüğü varsayılmıştır; bu nedenle, toplam işlem süresi 24ms'dir.

Şimdi aynı algoritmayı FPGA'da çalıştırmayı düşünün. FPGA doğası gereği büyük ölçüde paralel olduğundan, algoritmadaki dört işlem aynı anda görüntüdeki farklı piksellerde çalışabilir. Bu, ilk işlenen pikseli almak için yalnızca 2ms ve tüm görüntüyü işlemek için 4ms sürdüğü anlamına gelir, yani toplam işlem süresi 6ms'dir. Bu, CPU'nun yürütme hızından çok daha hızlıdır.

FPGA birlikte işleme mimarisi kullanılsa ve görüntü CPU'ya aktarılsa bile, tüm işlem süresi (aktarım süresi dahil) yalnızca CPU'nun kullanılmasından çok daha kısadır.

Şimdi, parçacık sayımı için gerekli görüntü gibi gerçek bir örneği düşünün.

Görüntüyü netleştirmek için önce bir evrişim filtresi uygulamanız gerekir.

Ardından, ikili bir görüntü oluşturmak için görüntüyü eşik boyunca çalıştırın. Bu yalnızca görüntüdeki veri miktarını 8 bit monokromdan ikiliye dönüştürerek azaltmakla kalmaz, aynı zamanda görüntüyü ikili morfoloji uygulamaları için hazırlar.

Son adım, kapatma işlevini uygulamak için morfolojiyi kullanmaktır. Bu, ikili parçacıklardaki tüm delikleri kaldıracaktır.

Yukarıdaki algoritma yalnızca CPU üzerinde yürütülürse, tüm görüntünün evrişim adımı, eşik adımı başlamadan önce tamamlanmalıdır. NI'nin LabVIEW için Vision Geliştirme Modülünü ve Xilinx Zynq-7020 tamamen programlanabilir SoC tabanlı cRIO-9068 CompactRIO denetleyicisini kullanırken, yukarıdaki algoritmayı yürütmek için gereken süre 166,7 ms'dir.

Bununla birlikte, aynı algoritmayı FPGA'da çalıştırırsanız, her adımı paralel olarak yürütebilirsiniz. Aynı algoritmayı FPGA'da çalıştırmak yalnızca 8ms sürer. 8ms sürenin, görüntüyü CPU'dan FPGA'ya göndermek için DMA aktarım süresini ve algoritmanın tamamlanma süresini içerdiğini unutmayın. Bazı uygulamalarda, işlenen görüntünün uygulamanın diğer bölümleri tarafından kullanılmak üzere CPU'ya geri gönderilmesi gerekebilir. Bu sefer eklerseniz, tüm sürecin yalnızca 8,5 ms'ye ihtiyacı vardır. Genel olarak, FPGA bu algoritmayı CPU'dan 20 kat daha hızlı yürütür.

Görme algoritmasını çalıştırmak için FPGA ortak işleme mimarisini kullanarak, performans aynı algoritmayı yalnızca CPU ile çalıştırmaktan 20 kat daha yüksektir.

Öyleyse neden her algoritmayı FPGA'da çalıştırmıyorsunuz?

FPGA'lar görsel işlemeye CPU'lardan daha elverişli olsa da, bu avantajlardan yararlanmak için belirli ödünleşmeler yapılmalıdır. Örneğin, CPU ve FPGA'nın orijinal saat frekansını düşünün. FPGA'nın saat frekansı 100 ~ 200MHz mertebesindedir. Açıktır ki, FPGA'nın saat frekansı CPU'nun saat frekansından daha düşüktür ve CPU kolayca 3GHz veya daha yüksek bir frekansta çalışabilir. Bu nedenle, bir uygulama yinelemeli olarak çalıştırılması gereken bir görüntü işleme algoritması gerektiriyorsa ve FPGA'nın paralelliğinden yararlanamıyorsa, CPU onu daha hızlı işleyebilir.

Yukarıda tartışılan örnek algoritma, 20 kat hız artışı elde etmek için FPGA üzerinde çalıştırılabilir. Algoritmadaki her işleme adımı, aynı anda tek tek pikseller veya bir grup piksel üzerinde çalışır, böylece algoritma, görüntüleri işlemek için FPGA'nın paralel avantajlarını kullanabilir. Bununla birlikte, algoritma, örüntü eşleştirme ve OCR gibi tüm görüntünün anında analiz edilmesini gerektiren işleme adımlarını kullanıyorsa, FPGA'ların avantajları marjinaldir. Bunun nedeni, işleme adımlarının paralelleştirilmesinin olmaması ve görüntüler ile şablonlar arasında karşılaştırma ve analiz için büyük miktarda belleğe ihtiyaç duyulmasıdır. FPGA'lar dahili ve harici belleğe doğrudan erişebilse de, normal koşullar altında FPGA için kullanılabilir bellek miktarı, CPU için mevcut olan miktardan veya bu işleme işlemleri için gereken miktardan çok daha azdır.

Programlama karmaşıklığının üstesinden gelin

FPGA'lerin görüntü işleme için avantajları, uygulamaya özel algoritmalar, gecikme veya titreşim gereksinimleri, G / Ç senkronizasyonu ve güç tüketimi gibi faktörler dahil olmak üzere her uygulamanın gereksinimlerine bağlıdır. Genellikle, FPGA ve CPU'nun ilgili avantajlarından tam olarak yararlanabilen ve performans, maliyet ve güvenilirlik açısından rekabet avantajlarına sahip olan FPGA ve CPU ile bir mimari kullanın. Bununla birlikte, FPGA tabanlı görüntü sistemlerinin karşılaştığı en büyük zorluklardan biri, FPGA'lerin programlama karmaşıklığının üstesinden gelmektir. Görsel algoritma geliştirme, esasen yinelemeli bir süreçtir. Herhangi bir görevi tamamlamak için birden fazla yöntem denemelisiniz. Çoğu durumda, belirlenmesi gereken, hangi yöntemin uygulanabilir olduğu değil, hangi yöntemin en iyisi olduğudur ve "en iyi yöntemin" yargısı uygulamadan uygulamaya değişir. Örneğin, bazı uygulamalar için hız esastır; diğer uygulamalar için doğruluk daha önemlidir. En azından, belirli bir uygulama için en iyi yöntemi bulmak için birkaç farklı yöntemi denemeniz gerekir.

Verimliliği en üst düzeye çıkarmak için, hangi işleme platformu kullanılırsa kullanılsın, algoritma hakkında geri bildirim ve kıyaslama bilgilerinin derhal alınması gerekir. Yinelemeli keşif yöntemlerini kullanırken, algoritma sonuçlarını gerçek zamanlı olarak görüntülemek çok zaman kazandıracaktır. Doğru eşik nedir? İkili morfolojik filtre tarafından uzaklaştırılan parçacıklar ne kadar büyük veya küçüktür? Hangi görüntü ön işleme algoritması ve algoritma parametreleri görüntüyü en iyi şekilde temizleyebilir? Bunlar, görme algoritmaları geliştirirken sık karşılaşılan problemlerdir ve anahtar, bunların değiştirilip değiştirilemeyeceğidir ve sonuçları hızlı bir şekilde görüp görememesidir. Bununla birlikte, geleneksel FPGA geliştirme yöntemleri, algoritmanın her tasarım değişikliği arasında gereken derleme süresi nedeniyle yeniliği yavaşlatabilir. Bunun üstesinden gelmenin bir yolu, aynı ortamda CPU ve FPGA'yı FPGA derlemesine takılıp kalmadan geliştirmenize izin veren bir algoritma geliştirme aracı kullanmaktır. NI Vision Assistant, görüntü sistemi tasarımınızı basitleştirmenize yardımcı olmak için bir CPU veya FPGA üzerine yerleştirilen algoritmalar geliştirmek için kullanılan bir algoritma mühendisliği aracıdır. Hedef donanımda derlemeden ve çalıştırmadan önce algoritmaları test etmek için Vision Assistant'ı da kullanabilirsiniz ve aynı zamanda işlem hacmi ve kaynak kullanım bilgilerine kolayca erişebilirsiniz.

Entegre karşılaştırmalı FPGA donanımında algoritmalar geliştirmek için konfigürasyona dayalı araçlar kullanmak, kod derlemeyi bekleme süresini azaltabilir ve böylece geliştirme hızını artırabilir.

Peki, görüntü işleme, CPU veya FPGA için kimin daha uygun olduğunu düşünürken? Cevap, duruma bağlı." Tasarıma en uygun işleme unsurlarını kullanmak için uygulamanın hedeflerini anlamanız gerekir. Ancak, uygulama ne olursa olsun, CPU veya FPGA tabanlı mimari ve onun içsel avantajları, makine görüşü uygulamalarının performansını bir düzeyde artırabilir.

Kaynak: FPGA Evi

"Game of the Brave: Game Edition" ilk fragmanı yayınlandı 11.15
önceki
"Justin" "Paylaş" 190527 Justin pirinç duvar kağıdı altı kare ızgara tuzlu ve tatlı olabilir
Sonraki
Ayrılmamıza şaşmamalı! Paris, Herrera'ya haftalık 300.000 maaş teklif etti, Manchester United eşleşmek istemedi!
Japonya'nın Haziran ayı yeni mobil oyunu "The Ultimate Tsunten Tower" en son gelişmeleri duyurdu
Hema sebze pazarı sebze pazarından ne kadar uzakta?
"Van Helsing'in Tuhaf Macerası" Steam Özel 19 yuan, tüm seriler memnun
Efsane geri dönüyor! Chelsea, Sarri'yi kovmak ve Lampard'ı antrenöre davet etmek istiyor!
Eski şeyler satan bir dükkan, çok vurgulanmış
Grafik Hayali ve gerçek bilim ve mühendislik mezuniyet tez savunması
"Burst 2" resmi olarak 9.24'te yayınlandı Farklı bir mecha soul benzeri oyun deneyimi
Glazer, Woodward ile hayal kırıklığına uğradı! Suo Shuai'nin performansı geleceğini belirleyecek!
Guangzhou'daki 20 alışveriş merkezindeki en son marka değişiklikleriyle ilgili bir anket
Doğru mu yoksa kasıtlı olarak beyaza mı yazılmış? (Var olmayan Lenovo 5G oylama etkinliğinin şifresini çözün)
Microsoft Xbox, parfüm + duş jelini piyasaya sürdü! Doğal nane / narenciye kokusu
To Top