200 likes | 411 Views
Vzporedna izvedba algoritmov računalniškega vida. Vsebina. Računalniški vid Houghova transformacija Vzporedna izvedba Houghove transformacije Vzporedni računalnik (BEOWULF gruča) Porazdeljen procesni prostor (BPROC) Porazdeljeno računanje Houghove transformacije. d 2. . d 3. d 1.
E N D
Vzporedna izvedba algoritmov računalniškega vida janez.pers@fe.uni-lj.si
Vsebina • Računalniški vid • Houghova transformacija • Vzporedna izvedba Houghove transformacije • Vzporedni računalnik (BEOWULF gruča) • Porazdeljen procesni prostor (BPROC) • Porazdeljeno računanje Houghove transformacije
d2 d3 d1 Računalniški vid • Cilj: simbolični opis slike. • Definicija “opisa” je odvisna od namena uporabe.
Predobdelava slike • Cilj: Izboljšanje kvalitete. • Primer: filtriranje šuma.
Obdelava slike • Cilj: zmanjšanje količine informacije. • Primeri: iskanje robov, binarizacija.
Iskanje simboličnega opisa • Cilj: izračun parametrov elementov na sliki, ki so osnova za meritve. • Primer: robovi - premice.
Houghova transformacija • Ideja: poskusimo poiskati *vse* možne premice, ki se lahko pojavijo na določeni sliki. • “Brute force” metoda, računska zahtevnost je temu primerna: • 512*512 slikovnih elementov • Pri zahtevani natančnosti 1 stopinje lahko skozi vsak element potegnemo 180 premic. • Preizkušamo torej 512*512*180 = 47,185,920 (47 miljonov!) hipotez. • Prednost: ne rabimo vnaprejšnjega znanja o sliki.
Houghova transformacija • Izvedba: vzpostavimo polje akumulatorjev, v katerem zbiramo “glasove” za posamezno kombinacijo parametrov k in n premice y=kx+npri tistih točkah, ki imajo vrednost 1. • Primer: (narišemo le 4 premice/točko) y • V tem primeru je največ glasov dobila premicay=2 (k=0,n=2), saj samo ta poteka skozi vse točke z vrednostjo 1. x
Houghova transformacija • Problem: kako zapisati navpične in vodoravne premice v parametričnem prostoru? • Izberemo zapis r=xcos()+ysin() • Glede na zahtevano natančnost za r in izberemo dimenzije polja akumulatorjev (v našem primeru kar 512*512) • Preiščemo vso sliko in v akumulatorje sproti prištevamo sivinske vrednosti slikovnih točk za vse možne r in. • Poiščemo maksimume v polju akumulatorjev, njihove pozicije nam dajo r in premic.
Zaporedna izvedba HT • Algoritem/računanje:for (y=0; y<512; y++){ for (x=0; x<512; x++) { for ( = min; < max; ++) { r=x*cos()+y*sin(); akum[r][]=akum[r][]+slika[x][y]; }; };};
Zaporedna izvedba HT • Program za HT presnamite iz http://vision.fe.uni-lj.si/classes/VS/hough • Odpakirajte: tar -zxvf hough.tar.gz • Prevedite: gcc houghseq.c -o houghseq -lm • Poženite: ./houghseq demo.pgm seq.pgm • Datoteke: • houghseq.c - glavni del programa • hough.c - izračun transformacije • pgmio.c - branje/pisanje PGM datotek • *.pgm - demo slike, pogledate jih z xloadimage slika.pgm
Vzporedna izvedba HT • Ideja: vsoto v akumulatorju lahko računamo v poljubnem zaporedju. • Vhodno sliko razdelimo na pasove (na primer y=0..127, y=128..255, itd.) • Izvedemo transformacijo vsakega dela slike posebej v ločeno polje akumulatorjev (ki je še vedno dimenzij 512*512!) • Na koncu delne akumulatorje (delne vsote) seštejemo v glavni akumulator. • To je primer vhodne podatkovne dekompozicije.
Vzporedna izvedba HT • Algoritem/računanje v vsakem procesu:for (y=y1; y<y2; y++){ for (x=0; x<512; x++) { for ( = min; < max; ++) { r=x*cos()+y*sin(); akum[r][]=akum[r][]+slika[x][y]; }; };};
Vzporedna izvedba HT • Potrebna je komunikacija med procesi: • Deljen pomnilnik preko katerega procesi-otroci prenesejo delne rezultate (svoja polja akumulatorjev) roditelju. • Niz semaforjev za nadzor dostopa do deljenega pomnilnika. • Prevedite: gcc houghpar.c -o houghpar -lm • Poženite: ./houghpar demo.pgm par.pgm • Je takšna izvedba transformacije hitrejša? • Zakaj?
Vzporedni računalnik • 1994, Thomas Sterling & Don Becker • vzdevek BEOWULF • 16 računalnikov 486 DX4 • Vsak računalnik predstavlja “vozlišče” (node) • Multiračunalniški sistem • Krajevno porazdeljen pomnilnik • Povezava prek krajevnega omrežja • Beowulf je le oznaka za takšen sistem, način realizacije ni standardiziran. • Dva glavna problema sta: • Upravljanje procesov • Komunikacija med procesi
Upravljanje procesov • Enostavni, vendar nepraktični načini • rlogin + školjka na vsakem od računalnikov • rexec (remote exec) • Pomanjkljivosti: • Program mora biti prisoten na vsakem od računalnikov-vozlišč. • Uporabniki morajo imeti uporabniška imena na vsakem od vozlišč. • Procesi niso v sorodu. • Težavna administracija, nepregledno izvajanje programov.
Upravljanje procesov • Beowulf Distributed Process Space (BPROC) • Porazdeljen procesni prostor • Procese je možno med delovanjem (!) premikati med računalniki. • PID procesov so navzven enaki ne glede na katerem računalniku se izvajajo. • Procesi so prisotni v tabeli procesov glavnega računalnika, tudi če se izvajajo drugje. • Minimalne prilagoditve vzporednih programov. • Bproc zajema: • Obsežne popravke jedra (kernel) • module sistemskega jedra • bproc demone (bpslave, bpmaster).
HT na Beowulf računalniku • Minimalne spremembe paralelne verzije programa houghpar.c: • #include<sys/bproc.h> • bproc_move(številka_vozlišča) po izvedenem klicu fork(), preden se začne računanje • bproc_move(-1) po izvedenem računanju, pred začetkom sinhronizacije podatkov. • Pomembno: procesi ne morejo komunicirati na standardne načine (deljen pomnilnik, semaforji, cevi…) dokler se ne vrnejo na isti fizični računalnik (bproc_move(-1))!
HT na Beowulf računalniku • Oglejte si houghpar_beo.c in nastavite številke vozlišč pri bproc_move()! • Prevedite:gcc houghpar_beo.c -o houghpar_beo -lm -lbproc • Poženite: ./houghpar_beo demo.pgm beo.pgm • Z ostalimi se dogovorite da eksperimentov ne boste pognali vsi naenkrat! • Opazujte procese z orodjem top/ktop • zaseden pomnilnik, proc. čas, itd. Kaj opazite? • Poglejte, kako so vaši procesi vidni na tujih računalnikih.
V razmislek • Je takšen program hitrejši? Zakaj? • Zakaj nas ni nikoli zanimala sinhronizacija dostopa do vhodnih podatkov? • Od kje zakasnitev pred začetkom računanja? • Kaj se takrat dogaja? • Bi bilo smiselno program drobiti na še večje število procesov (npr. 64)? Zakaj ? • Oglejte si sliko akumulatorja (izhodne .pgm datoteke) in najdite maksimume. Koliko jih je?