AUTOMATYKA 2011 Tom 15 Zeszyt 3 Magdalena Szymczyk*, Piotr Szymczyk* Mo liwoœæ zastosowania GPU do przetwarzania obrazów dla celów analizy sceny** 1. Wprowadzenie Aplikacje stosowane do przetwarzania obrazu i sygna³u wideo oraz grafiki staj¹ siê du ym i coraz wa niejszym obszarem zastosowañ wspó³czesnych komputerów. Wspó³czesne mikroprocesory ogólnego zastosowania (CPU Central Processing Unit) nie spe³niaj¹ jednak wysokich wymagañ wydajnoœciowych zwi¹zanych z tego typu aplikacjami. W odró nieniu od CPU specjalizowane procesory dostarczaj¹ jednak e odpowiedni¹ elastycznoœæ i programowalnoœæ niezbêdn¹ do zaimplementowania odpowiednich architektur oraz modeli programistycznych spe³niaj¹cych ich wymagania. Jednym z mo liwych rozwi¹zañ jest zastosowanie nowoczesnych kart graficznych GPU (Graphics Processing Unit). Celem artyku³u jest ogólne przedstawienie architektury GPU, zapoznanie ze sposobem implementacji aplikacji na tego typu procesorach oraz analiza mo liwoœci wykorzystania ich do tworzenia efektywnych aplikacji zwi¹zanych z przetwarzaniem obrazów. 2. CPU kontra GPU Czêstotliwoœæ pracy CPU jest obecnie ograniczana poprzez w³asnoœci fizyczne materia³ów, z których zosta³ wykonany, a tak e przez wysoki stopieñ zu ycia energii. W g³ównej mierze coraz to lepsze wydajnoœci tego typu procesorów uzyskuje siê dziêki stosowaniu coraz to wiêkszej liczby rdzeni, przy czym nale y pamiêtaæ, e s¹ to procesory ukierunkowane na wykonywanie aplikacji najczêœciej stosowanych przez zwyk³ych u ytkowników (typu edytory tekstu, przeszukiwarki internetowe itp.). Zastosowanie wielu rdzeni w CPU daje mo liwoœæ wykonywania procesów równolegle na podstawie modelu przetwarzania równoleg³ego typu MIMD (Multiple Instructions/Multiple Data) wed³ug taksonomii Flynna. * AGH Akademia Górniczo-Hutnicza, Wydzia³ Elektrotechniki, Automatyki, Informatyki i Elektroniki, Katedra Automatyki, al. A. Mickiewicza 30, 30-059 Kraków ** Projekt z Ministerstwa Nauki i Szkolnictwa Wy szego nr 0128/R/t00/2010/12 271
272 Magdalena Szymczyk, Piotr Szymczyk Zatem ka dy z rdzeni pracuje niezale nie od pozosta³ych, wykonuj¹c ró ne instrukcje dla ró nych procesów. Cech¹ charakterystyczn¹ pamiêci w procesorach ogólnego przeznaczenia jest swobodny dostêp do niej. CPU jest tak zaprojektowane, e wykonuje na swych rdzeniach pojedynczy w¹tek z³o ony z pojedynczych instrukcji maksymalnie szybko, natomiast GPU jest tak opracowane, aby wykonywaæ szybko wiele równoleg³ych w¹tków. Oczywiœcie projektanci CPU staraj¹ siê spe³niæ tak e wymaganie wykonywania wielu instrukcji równolegle, maksymalizuj¹c efektywnoœæ przy u yciu superskalarnego wykonywania instrukcji, a tak e korzystaj¹c z wykonywania instrukcji typu out-of-order. Jednak e wykonywanie równoleg³e w¹tków instrukcji na CPU ma pewne podstawowe ograniczenia i zwiêkszanie liczby elementów wykonawczych nie daje proporcjonalnego wzrostu wydajnoœci procesora. Uk³ady NVIDIA czy AMD (g³ówni producenci kart graficznych) zbudowane s¹ przy u yciu architektury multiprocesorowej o 8 10 rdzeniach i setkach ALU, tysi¹cach rejestrów i pamiêciach wspó³dzielonych [12]. Ka da karta graficzna ma bardzo szybk¹ pamiêæ globaln¹, która jest dostêpna dla wszystkich multiprocesorów, pamiêæ lokaln¹ dla ka dego multiprocesora oraz specjalne pamiêci dla sta³ych. GPU jest ukierunkowana na wykonywanie instrukcji równolegle. Na pocz¹tek otrzymuje ona zbiory wielok¹tów, które nastêpnie poddawane s¹ wielu transformacjom i niezbêdnym operacjom w celu uzyskania z kolei zbioru pikseli. Operacje na wielok¹tach i pikselach wykonywane s¹ równolegle i niezale nie. Z powodu równoleg³ej organizacji architektury GPU dane do uk³adów wykonawczych s¹ dostarczane z tak¹ sam¹ ³atwoœci¹ jak dla pojedynczego w¹tku dla CPU. Szczególnie widoczne s¹ ró nice w dostêpie do pamiêci pomiêdzy tymi uk³adami. Wynika to z charakteru danych, na których zazwyczaj pracuje GPU. Teksele tekstury nie s¹ potrzebne pojedynczo, stanowi¹ one pewn¹ zwart¹ ca³oœæ, zazwyczaj powierzchniê, zatem na pewno zostan¹ w najbli szej przysz³oœci pobrane teksele bêd¹ce w s¹siedztwie pierwszego. Ta sama zasada dotyczy pikseli przy zapisie do pamiêci, gdy do bufora ramki zostanie wpisany jeden, to na pewno po pewnej liczbie cykli do niej zostan¹ wpisane piksele s¹siednie. GPU w odró nieniu od CPU nie potrzebuj¹ du ych pamiêci typu cache. Wiele procesorów typu CPU nie ma wbudowanych sterowników pamiêci, a GPU maj¹ wiele takich uk³adów. Karty graficzne u ywaj¹ du o szybszych pamiêci (charakteryzuj¹cych siê du ¹ przepustowoœci¹) w celu sprawnego dostarczenia ogromnych strumieni danych, co jest niezwykle istotne z punktu widzenia przetwarzania równoleg³ego. Procesory ogólnego przeznaczenia w du ej mierze wykorzystuj¹ swój obszar matrycy z tranzystorami do realizacji buforów instrukcji, sprzêtowego przewidywania rozga³êzieñ czy te ogromnych rozmiarów pamiêci cache. Takie rozwi¹zania s¹ potrzebne do przyspieszenia wykonywania kilku strumieni instrukcji. W przypadku GPU jest inaczej, tranzystory s¹ wykorzystywane do budowy tablic uk³adów wykonawczych, ekspedytorów instrukcji, ma³ych pamiêci dzielonych i sterowników pamiêci dla wielu kana³ów. Te rozwi¹zania nie powoduj¹ przyspieszenia wykonania poszczególnych strumieni instrukcji, daj¹ natomiast mo liwoœæ przetwarzania setek tysiêcy w¹tków równolegle przy wymaganiu wysokiej przepustowoœci pamiêci. Szczególnym aspektem odró niaj¹cym CPU od GPU jest sposób wykonywania operacji wielow¹tkowych.
Mo liwoœæ zastosowania GPU do przetwarzania obrazów dla celów analizy sceny 273 Specyfika pracy GPU wynika w g³ównej mierze z budowy pamiêci typu cache. Ró nice projektowe pomiêdzy budow¹ CPU a GPU pokazano na rysunku 1. W CPU zadaniem tej pamiêci jest ukrycie d³ugich czasów dostêpów do danych, w przypadku karty graficznej cache oraz pamiêæ wspó³dzielona u ywana jest do zwiêkszenia przepustowoœci pamiêci. Gdy GPU czeka na dane dla konkretnego w¹tku, wykonuje on wówczas inny w¹tek bez opóÿnieñ. Jest to mo liwe, gdy w uk³adach tych w odró nieniu od CPU, koszt prze³¹czenia siê na inny w¹tek to mniej ni jeden cykl, a w procesorach ogólnego przeznaczenia setki cykli zegarowych. Ogólnie rzecz ujmuj¹c, nowoczesne CPU pracuj¹, opieraj¹c siê na architekturze równoleg³ej typu SIMD (Single Instruction Multiple Data) na jednostkach wektorowych wykorzystywanych do obs³ugi instrukcji typu SSE2 i SSE3, natomiast GPU na architekturze SIMT (Single Instruction Multiple Threads) do przetwarzania skalarnych w¹tków. Karty graficznie s¹ wykorzystywane w obliczeniach równoleg³ych, które s¹ przeprowadzane na ogromnych zbiorach danych i na tych danych wykonywane s¹ te same matematyczne operacje. Najlepsze wyniki s¹ otrzymywane przy wysokiej wartoœci ilorazu liczby operacji arytmetycznych do liczby odwo³añ do pamiêci. Istotnym aspektem tego typu aplikacji jest tak e ma³a liczba instrukcji rozga³êziaj¹cych. Cechy aplikacji na GPU powoduj¹, e zanika potrzeba stosowania rozbudowanych pamiêci typu cache. Rys. 1. Ró nice projektowe pomiêdzy budow¹ CPU a GPU [12]
274 Magdalena Szymczyk, Piotr Szymczyk 3. Wykorzystanie GPU do obliczeñ równoleg³ych Mikroprocesory oparte na jednej jednostce centralnej, których przyk³adami mog¹ byæ Operon firmy AMD czy te Pentium Intela, charakteryzuj¹ siê wysokim przyrostem wydajnoœci wraz ze znacznym zmniejszeniem kosztów produkcji w ostatnich dwóch dekadach. Jednak e od 2003 roku mo na zauwa yæ wyraÿny spadek wydajnoœci, ze wzglêdu na du e zapotrzebowanie na energiê zasilania oraz du e straty spowodowane wydzielaniem energii cieplnej. Ma to wp³yw na czêstotliwoœæ pracy procesora, jej przyrost jest ograniczany tymi zjawiskami. W celu ratowania sytuacji producenci procesorów przerzucili siê na produkcjê uk³adów zawieraj¹cych wiele procesorów, tzw. rdzeni, w celu zapewnienia wzrostu mocy przetwarzania aplikacji. Ta operacja mia³a ogromny wp³yw na œrodowisko projektantów oprogramowania. Dotychczas aplikacje w wiêkszoœci pisane by³y na architekturê von Neumanna, w której programy realizowane s¹ krok po kroku sekwencyjnie. Je eli taki sekwencyjny program zostanie uruchomiony na jednym z rdzeni, to jego czas wykonania nie skróci siê ju znacznie, jeœli nie zostan¹ wprowadzone pewne innowacje technologiczne. Sposobem na zwiêkszenie wydajnoœci jest zastosowanie programowania równoleg³ego w nowych generacjach mikroprocesorów. Programowanie równoleg³e nie jest pojêciem nowym. By³o i jest ono stosowane przez dziesiêciolecia w oprogramowaniu komputerów drogich i o du ej skali. Jednak e tylko pewna czêœæ programistów potrafi pisaæ tego typu aplikacje. Z pojawieniem siê procesorów nowego typu programiœci musz¹ podj¹æ siê nowego wyzwania opracowywania nowych równoleg³ych aplikacji na nowe procesory. Od 2003 rozwój mikroprocesorów podzieli³ siê na dwie linie, jedn¹ z nich jest linia procesorów wielordzeniowych (multicore), pocz¹wszy od dwurdzeniowych, aktualnie na czterech skoñczywszy. Drug¹ jest linia many-core, która szczególnie ukierunkowana jest na przepustowoœæ wykonania aplikacji równoleg³ych. Procesory te maj¹ du ¹ liczbê rdzeni, przy czym ich liczba podwaja siê ka dego roku. Przyk³adem mo e byæ karta graficzna Ge- Force GTX 280 NVIDIA z 240 rdzeniami. GPU w porównaniu z CPU wykazuj¹ od 2003 sta³y, du o wiêkszy wzrost wydajnoœci w wykonywaniu operacji zmiennoprzecinkowych, osi¹gaj¹c w 2009 wartoœæ 10 do 1, na rysunku 2 mo na zauwa yæ tê tendencjê. G³ównym zadaniem kart graficznych jest ich wykorzystanie do celów renderyzacji grafiki 3D, ale ju bardzo wczeœnie próbowano wykorzystaæ je do innych typów aplikacji. Pocz¹tki by³y trudne i wymaga³y od programistów doskona³ej znajomoœci architektury GPU, znajomoœci problematyki grafiki 3D, co w znacznym stopniu ogranicza³o wykorzystanie tych kart. Wraz z rozwojem i udoskonalaniem potoku renderyzacji realizowanym na kartach graficznych mo liwe stawa³o siê tworzenie coraz to bardziej zaawansowanych aplikacji z dziedziny przetwarzania obrazów czy te systemów wizyjnych jak wykrywanie krawêdzi, okreœlanie podobieñstwa obrazów, detekcja cech obrazu, filtrowanie, a tak e tworzenie obrazów panoramicznych. Pierwszym doœæ popularnym kompilatorem do celów GPGPU by³ BrookGPU [8] przystosowany do tworzenia aplikacji niegraficznych na GPU. Z grupy projektantów tego
Mo liwoœæ zastosowania GPU do przetwarzania obrazów dla celów analizy sceny 275 oprogramowania wydzieli³y siê osoby, które przy³¹czy³y siê do NVIDIA w celu tworzenia zintegrowanej architektury daj¹cej mo liwoœæ programowania równoleg³ego na GPU osobom nieznaj¹cym graficznego API. Tak pojawi³a siê technologia CUDA (Computed Unified Device Architecture). Rys. 2. Porównanie wydajnoœci przetwarzania operacji zmiennoprzecinkowych przez procesory CPU i GPU [12] 4. Ogólne spojrzenie na architekturê NVIDIA CUDA NVIDIA projektuj¹c now¹ generacjê kart graficznych opartych na DirectX 10, zapocz¹tkowa³a mo liwoœæ wykorzystania GPU przez programistów w podobny sposób jak standardowe procesory ogólnego przeznaczenia. U ytkownicy mog¹ od tej pory deklarowaæ równoleg³oœæ danych w swoich aplikacjach. Procesory NVIDIA mo na traktowaæ jako wysoko wydajne procesory przetwarzaj¹ce dane zmiennoprzecinkowe jak i ca³kowite w równoleg³y sposób dla wspomagania logicznego potoku graficznego. Linia Tesla GPU, rozpoczynaj¹ca siê od GeForce 8800GTX poprzez póÿniejsze G92 i GT200 zosta³a wzbogacona w porównaniu ze swoimi poprzednikami o procesory cieniuj¹ce (shader), które sta³y siê w pe³ni programowalne z du ¹ pamiêci¹ dla instrukcji, cachem dla nich oraz logicznym uk³adem przetwarzania rozga³êzieñ. Dodatkowo wzbogacono zbiór instrukcji o instrukcje dostêpu swobodnego do pamiêci (zapis i odczyt), aby upodobniæ styl programowania do jêzyka C. Aplikacje niegraficzne dosta³y mo liwoœæ wykorzystania bardziej ogólnego modelu programowania opartego na w¹tkach, barierach synchronizacji i operacjach atomowych w celu wykonywania i zarz¹dzania wysoko równoleg³ymi programami.
276 Magdalena Szymczyk, Piotr Szymczyk Kompilator CUDA C/C++, biblioteki oraz oprogramowanie do uruchamiania zosta³ zaprojektowany w celu prostego dostêpu przez programistów do potencja³u oferowanego przez architekturê Tesla. Programy uruchamiane na nowoczesnych GPU, zarówno te graficzne jak i aplikacje CUDA, korzystaj¹ z mo liwoœci wykorzystania masowej, drobnoziarnistej równoleg³oœci opartej na danych, przy czym jest to oprogramowanie transparentne i skalowalne. Na rysunku 3 pokazano nowoczesn¹ kartê graficzn¹ GPU realizuj¹c¹ architekturê CUDA. Rys. 3. Architektura nowoczesnej karty graficznej GPU realizuj¹cej architekturê CUDA [12] Model programowania CUDA zbudowany jest z hosta, który zazwyczaj jest jednostk¹ CPU (wykonuj¹c¹ program szeregowo lub równolegle, ale w stopniu doœæ ograniczonym) i wielu urz¹dzeñ (devices) zbudowanych z masowo-równoleg³ych procesorów wyposa onych w du ¹ liczbê arytmetycznych jednostek wykonawczych. Kod programu (a w³aœciwie zbiór funkcji opartych na równoleg³oœci danych) uruchamiany jest na GPU i oznaczony poprzez s³owo kluczowe kernel. Funkcje kernel uruchamiaj¹ ogromn¹ liczbê w¹tków w celu wykorzystania równoleg³oœci danych. Wa n¹ informacj¹ jest to, e w¹tki te ró ni¹ siê od w¹tków uruchamianych na CPU, s¹ one l ejszego typu (prze³adowanie takiego w¹tku trwa kilka cykli pracy procesora w odró nieniu od tysiêcy cykli dla procesora CPU). Wykonanie typowego programu CUDA przedstawione jest na rysunku 4. Wykonanie rozpoczyna siê na hoœcie (CPU), a nastêpnie wywo³ywane s¹ funkcje kernela. Wszystkie w¹tki uruchamiane
Mo liwoœæ zastosowania GPU do przetwarzania obrazów dla celów analizy sceny 277 przez kernel s¹ okreœlane wspólna nazw¹ grid. Gdy w¹tki danego kernela zakoñcz¹ swoje dzia³anie, grid jest zamykany i sterowanie programem powraca na host, gdzie ewentualnie wywo³ywany jest nastêpny kernel. Rys. 4. Wykonanie programu na GPU [6] 5. Zalety i ograniczenia technologii CUDA do wykonywania aplikacji typu GPGPU CUDA ma wiele zalet w porównaniu z tradycyjnym oprogramowaniem ogólnego zastosowania na GPU przy u yciu graficznego API: tzw. scattered reads jedna operacja czytania danych powoduje zapis do wielu miejsc w pamiêci; pamiêæ wspó³dzielona CUDA udostêpnia szybk¹ pamiêæ wspó³dzielon¹ pomiêdzy w¹tkami (do 48 kb na multiprocesor) i mo e ona s³u yæ jako zarz¹dzany przez u ytkownika cache o du ej przepustowoœci; szybsze operacje transferu danych z i do GPU; pe³ne wspomaganie operacji ca³kowitoliczbowych oraz bitowych.
278 Magdalena Szymczyk, Piotr Szymczyk G³ówne ograniczenia CUDA: CUDA pozbawiona jest mo liwoœci wywo³ywania funkcji rekurencyjnych oraz korzystania ze wskaÿników, renderowanie tekstury nie jest mo liwe, podwójna precyzja dostêpna jest dla CUDA 1.3 i powy ej, z pewnymi zmianami w stosunku do standardu IEEE 754, transfer informacji pomiêdzy CPU a GPU mo e byæ w¹skim gard³em aplikacji, w¹tki powinny byæ wykonywane w grupach co najmniej 32-elementowych dla lepszej efektywnoœci, model SIMD wykonania programu doœæ ogranicza zadania z wewnêtrzn¹ dywergencj¹, w odró nieniu do OpenCL, CUDA dostêpna jest tylko dla NVIDIA (GeForce8, Quadro i Tesla). 6. Wykorzystanie CUDA do systemów wizyjnych Systemy wizyjne w ostatnim dziesiêcioleciu sta³y siê integralnym elementem aplikacji stosowanych w medycynie, transporcie i ochronie. Algorytmy z zakresu systemów wizyjnych zawieraj¹ w sobie algorytmy z zakresu wielu dyscyplin naukowych (statystyka, optyka, sztuczna inteligencja, przetwarzanie obiektów, rozpoznawanie obrazów, teoria grafów). Algorytmy tego typu charakteryzuj¹ siê ogromn¹ intensywnoœci¹ obliczeñ i w zasadzie uruchamianie ich na tradycyjnych CPU spotka³o siê ju z barier¹ ich mo liwoœci. Wspó³czesne systemy wizyjne nak³adaj¹ na tego typu aplikacje wymaganie wykonania w czasie rzeczywistym, a to mo e zostaæ zrealizowane przy u yciu procesorów równoleg³ych. Aktualnie tak¹ mo liwoœæ daj¹ tanie i ³atwo dostêpne karty graficzne GPU przy wykorzystaniu miêdzy innymi jêzyka programowania CUDA. Wykonywanie takich programów na procesorach GPU przy u yciu wysokowydajnych algorytmów równoleg³ych daje efekty nieosi¹galne dotychczas. Szczególnie istotnym aspektem w opracowywaniu systemów wizyjnych uruchamianych w czasie rzeczywistym jest teraz opracowanie nowych algorytmów równoleg³ych doskonale wykorzystuj¹cych potencja³ nowoczesnych GPU (architektura Tesla). Ta dyscyplina jest obecnie obszarem wzmo onej pracy naukowców w celu opracowania wysoko wydajnego opartego o GPU oprogramowania dla systemów wizyjnych. Ogólnie rzecz bior¹c, algorytmy systemów wizyjnych przetwarzaj¹ niezale nie ogromne iloœci pikseli oraz pewnych struktur dla których wykorzystanie modelu programowania równoleg³ego typu SIMT doskonale siê sprawdza. W dalszej czêœci przedstawione zostan¹ prace zwi¹zane z pewnymi wybranymi algorytmami wykorzystywanymi w przetwarzaniu obrazów na GPU i przedstawione zostan¹ pewne wytyczne dotycz¹ce sposobu ich projektowania wynikaj¹ce z tych badañ.
Mo liwoœæ zastosowania GPU do przetwarzania obrazów dla celów analizy sceny 279 7. Modu³ OpenCV CUDA OpenCV jest aktualnie rozwijan¹ doœæ intensywnie bibliotek¹ graficzn¹ u³atwiaj¹c¹ implementacje z³o onych systemów wizyjnych typu open-source [12]. W 2010 NVIDIA oficjalnie og³osi³a wsparcie dla tej biblioteki. Dotychczas czêœæ algorytmów zosta³a zaimportowana do CUDA: HOG, SURF, konwersja kolorów, rozmycie gaussowskie. Kod jest aktualnie rozwijalny i cechuje siê pewn¹ niestabilnoœci¹ czêsto raportowan¹ przez u ytkowników. Jednak e uda³o siê ju przeprowadziæ pewne testy i okreœliæ wp³yw wykorzystania GPU dla istniej¹cego ju, jednak e zorientowanego na CPU oprogramowania. 8. Biblioteka NVIDIA NPP Biblioteka ta jest tworzona przez NVIDIA [5] i zawiera w sobie funkcje korzystaj¹ce z technologii CUDA w celu przyspieszenia obliczeñ. Pocz¹tkowo by³a ona ukierunkowana na przetwarzanie obrazów i jest ona intensywnie wykorzystywana przez projektantów tego typu aplikacji. Z czasem zosta³a poszerzona o inne trudne obliczeniowo zadania w ró nych obszarach zastosowañ. Biblioteka NPP jest pisana w sposób elastyczny, nie trac¹c przy tym na swych wysokich mo liwoœciach wydajnoœciowych. Mo e ona zostaæ u yta jako niezale na osobna biblioteka dodana do aplikacji w celu przyspieszenia ich pracy na GPU przy minimalnym wysi³ku programisty. Drugie rozwi¹zanie to w³¹czenie funkcji tej biblioteki w kod programu w celu stworzenia efektywnego kodu pracuj¹cego na GPU. Wybrane funkcje do przetwarzania obrazu to: wymiana danych i ich inicjalizacja (set, convert, transpose, swapchannels, copyconstborder, copy), operacje arytmetyczne i logiczne (add, sub, mul, div, absdiff), progowanie oraz porównywanie, konwersja kolorów, funkcje filtruj¹ce, transformacje geometryczne, funkcje statystyczne, algorytmy Haar, Canny. Bibliotek¹ wspó³pracuj¹c¹ z NPP jest biblioteka CUVI Lib realizuj¹ca bardziej z³o one algorytmy z przeznaczeniem do systemów wizyjnych. 9. Konwersja kolorów oraz rozmycie gaussowskie Algorytmy te nale ¹ do czêsto wykorzystywanych operacji na obrazach (retusz, korekcja koloru). Algorytmy te na CUDA zaimplementowali T. Lengyel, J. Gedarovich i inni [13]. Wykonano testy konwersji kolorów oraz rozmycia gaussowskiego na karcie graficznej NVIDIA GeForce 9800 GT przy u yciu obrazu o rozdzielczoœci 1280 1024 pikseli oraz na CPU Intel CORE 2 6400 2,13 GHz. Testy wykaza³y, e algorytm istniej¹cy
280 Magdalena Szymczyk, Piotr Szymczyk zaimportowany do CUDA wykonuje siê 2,7 razy szybciej, przy czym wiêkszoœæ czasu zosta³a wykorzystana na przesy³anie danych pomiêdzy CPU a kart¹. Wnioski, jakie wynikaj¹ z tych badañ s¹ takie, e algorytmy te osi¹gaj¹ lepsze przyspieszenie przy du ych obrazach, gdzie czas obliczeñ jest znacz¹cy w porównaniu z czasem transferu. Wynika to z d³ugiego czasu dostêpu do pamiêci globalnej multiprocesora (oko³o 500 cykli zegara) zatem operacje czytania i pisania do niej s¹ bardzo kosztowne. Czas ten mo e zostaæ zniwelowany przez wykonanie ogromnej liczby niezale nych obliczeñ zmiennoprzecinkowych. 10. HOG Detekcja osób jest doœæ istotnym zadaniem wspó³czesnych systemów ochrony. Algorytm HoG zaprezentowany przez Dalala i Triggsa [3] oblicza histogram lokalnie znormalizowanych gradientów kierunku przy u yciu bloków 16 16 pikseli (reprezentacja okna detekcji). Fakt, e okno to rozci¹ga siê przez ten obraz we wszystkich mo liwych skalach obrazu, powoduje, e to podejœcie staje siê raczej trudne do wykorzystania przez systemy czasu rzeczywistego (systemy wspomagania kierowania samochodem, œledzenia czy te nadzoru). Jedn¹ z najwa niejszych prac w detekcji obiektów ostatniego dziesiêciolecia jest kaskadowy detektor, który wykonali Viola i Jones [15]. Jest to algorytm odporny na b³êdy i oprócz tego wykazuje du o lepsze przyspieszenie (oko³o jednego rzêdu wartoœci) w porównaniu z podobnymi pracami. Ich praca oparta jest miêdzy innymi o specjaln¹ strukturê integral image, która powoduje, e obliczenie cech jest zwi¹zane z operacj¹ sumowania pikseli obrazu w pewnych regionach. Operacje te dobrze siê paralelizuj¹, gdy zawieraj¹ w sobie miêdzy innymi ³atwe do zrównoleglenia operacje sumowania. Wyniki z pracy Berkina Bilgica [2] wykazuj¹ przyspieszenie równe oko³o 3 w porównaniu z aplikacjami na CPU. Algorytm ten jest kluczowym elementem algorytmu do szybkiej detekcji osób, zatem zaimplementowanie w postaci równoleg³ej pozosta³ej czêœci detektora jest obiecuj¹ce. Berkin Bilgic w swej pracy raportuje przyspieszenie ponaddziesiêciokrotne dla tego algorytmu. Zatem te rozwi¹zania zbli aj¹ nas do wykorzystania kaskadowych detektorów w systemach z wysokimi wymaganiami czasowymi jakimi s¹ systemy czasu rzeczywistego. Testy przeprowadzone przez T. Lengyel, J. Gedarovich i innych [13] potwierdzi³y, e algorytm ten jest bardzo dobrym kandydatem na algorytm równoleg³y wykonywany na GPU. 11. Viola-Jones na GPU Testy przeprowadzone w 2009 przez studentów Harvarda [4] przy u yciu funkcji z biblioteki OpenCV oraz CUDA 2.0 dla tej aplikacji przy wykorzystaniu sprzêtu CPU Intel 32-bitowy Core-2 (2,13 GHz) 1 GB RAM oraz GPU 512 MB NVIDIA GeForce 9800GT wykaza³y osi¹gniêcie dwukrotnego przyspieszenia.
Mo liwoœæ zastosowania GPU do przetwarzania obrazów dla celów analizy sceny 281 12. Implementacja algorytmu SURF na GPU Aktualnie prowadzone s¹ przez autorów intensywne prace nad implementacj¹ algorytmu SURF [1] na GPU przy u yciu pakietu CUDA. Wstêpne wyniki uzyskane z przeprowadzonych testów wykazuj¹, e czas przetwarzania algorytmu równoleg³ego wykazuje niewielk¹ zale noœæ od liczby punktów charakterystycznych. W zwi¹zku z tym istnieje du y potencja³ zastosowania GPU dla tego typu algorytmu. Szczegó³owe wyniki prowadzonych prac zostan¹ opublikowane w najbli szym czasie. 13. Podsumowanie GPU dostarczaj¹ pewne rozwi¹zania technologiczne u³atwiaj¹ce przetwarzanie multimedialnych aplikacji na GPU. Do takich mo liwoœci mo na zaliczyæ w zakresie tekstury: cache tekstury, interpolacjê dwuliniow¹ wykonywan¹ sprzêtowo, konwersjê danych, dostêpnoœæ tekstury po wielu kana³ach, wielowymiarowoœæ, nieomal optymaln¹ wydajnoœæ przy dostêpie do lokalnych danych 2D. CUDA daje mo liwoœæ bardzo szybkiego dostêpu do pamiêci dzielonej, w której mo na umieœciæ fragment obrazu i dzieliæ piksele pomiêdzy w¹tkami. Wykorzystanie potencja³u GPU do systemów wizyjnych jest bardzo obiecuj¹c¹ technologi¹. W celu wydajnego wykorzystania kart graficznych do tego celu koniecznym jest opracowanie algorytmów równoleg³ych wykorzystuj¹cych specyfikê ich pracy jak te dalsza praca nad bibliotek¹ OpenCV dla GPU. Problemem jest tutaj te czas przesy³ania danych pomiêdzy hostem a kart¹, ale przy dzisiejszym rozwoju algorytmów koduj¹cych i dekoduj¹cych obrazy, to w¹skie gard³o mo e zostaæ usuniête. Literatura [1] Bay H., Ess A., Tuytelaars T., Van Gool L., SURF:Speeded Up Robust Features. Computer Vision and Image Understanding (CVIU), vol. 110, No. 3, 2008, 346 359. [2] Bilgic B., Fast Human Detection with Cascaded Ensembles. S.M. thesis, Massachusetts Institute of Technology, Department of Electrical Engineering and Computer Science, February 2010. [3] Dalal N., Triggs B., Histograms of Oriented Gradients for Human Detection. http://lear.inrialpes.fr. [4] Hsiao C.H., Dai A., Face detection on CUDA. 2009, http://cs264.org. [5] http://developer.nvidia.com/npp. [6] http://en.wikipedia.org/wiki/cuda. [7] http://ixbtlabs.com/articles3/video/cuda-1-p1.html. [8] http://ixbtlabs.com/articles3/video/cuda-1-p2.html. [9] http://ixbtlabs.com/articles3/video/cuda-1-p3.html. [10] http://ixbtlabs.com/articles3/video/cuda-1-p4.html.
282 Magdalena Szymczyk, Piotr Szymczyk [11] http://ixbtlabs.com/articles3/video/cuda-1-p5.html. [12] Kirk D.B., Hwu W.W., Programming Massively Parallel Processors. Morgan Kaufmann, Elsevier, 2010. [13] Lengyel T.K., Gedarovich J., Cusano A., Peters T.J., GPU Vision: Accelerating Computer Vision algorithms with Graphics Processing Unit. University of Connecticut, 2011. [14] Park I.K., Singhal N., Lee M.H., Cho S., Efficient design and implementation of visual computing algorithms on tha GPU. ICIP 2009. [15] Viola P., Jones M., Robust Real-time Object Detection. Second International Workshop on Statistical and Computational Theories of Vision Modeling, Learning, Computing, and Sampling, Vancouver, Canada, 2001.