ERK'2020, Portorož, 340-343 340 ˇ Stetje objektov na slikah z uporabo genetskega algoritma Gregor Babnik, Luka ˇ Sajn Univerza v Ljubljani Fakulteta za raˇ cunalniˇ stvo in informatiko E-poˇ sta: gregor.babnik@student.uni-lj.si, luka.sajn@fri.uni-lj.si Counting objects in images using a genetic algorithm The work deals with the automatic counting of objects in images. A genetic algorithm is used as a learning method to find appropriate operations used to process the images. The success of an individual solution is measured as a difference between the number of counted objects and the real object count. ARes algorithm is used to adjust the resolution of input images. The image processing part is implemented using two libraries TensorFlow and OpenCV . The work is tested against various sets of images in different domains. 1 Uvod Naˇ se delo [1] obravnava implementacijo samodejnega ˇ stetja objektov na slikah. Obstaja veliko domen, ki imajo mnoˇ zico slik, te pa vsebujejo veliko koliˇ cino doloˇ cenih objektov. Primeri so lahko slike celic, insektov, rastlin, zrn in podobno. Roˇ cno ˇ stetje vsega tega je lahko zelo zamudno. Cilj je bil implementirati program, ki se bo z uporabo manjˇ se, uˇ cne mnoˇ zice slik iz neke specifiˇ cne do- mene nauˇ cil oziroma poiskal reˇ sitev za avtomatsko ˇ stetje objektov na vseh slikah v tej domeni. Iskanje reˇ sitev na podlagi uˇ cne mnoˇ zice je potekalo z uporabo genetskega algoritma. Uˇ cna mnoˇ zica slik je bila procesirana z zapore- dnimi operacijami, te naj bi ustvarjal genetski algoritem in jih nato postopoma izboljˇ seval. Program smo implementi- rali v programskem jeziku Python, z uporabo programskih knjiˇ znic TensorFlow in OpenCV , ki sta bili uporabljeni za obdelavo in procesiranje slik. Program naj bi poiskal potrebne operacije in prav tako parametre teh operacij samodejno. Uspeˇ snost naˇ sega programa smo testirali na slikah iz veˇ c domen po naraˇ sˇ cajoˇ ci kompleksnosti. 2 Implementacija Celotni program smo napisali v programskem jeziku Py- thon. Za uporabo Pythona smo se odloˇ cili, ker ga hkrati podpirata TensorFlow in OpenCV . Naˇ s program se deli na tri glavne dele: prvi del opravlja predprocesiranje, torej pripravo vhodnih slik na procesiranje, drugi del programa izvaja genetski algoritem in raz- vija nove osebke reˇ sitev, tretji del, ki sprejme novonastali osebek in po inˇ stru- kcijah, vsebovanih v osebku, obdela mnoˇ zico slik in tako ovrednoti podani osebek. Ovrednoteni osebek je nato ali vstavljen v populacijo ali zavrˇ zen, ˇ ce je slabˇ si od vseh, ki so trenutno v populaciji. Tretji del programa je torej evalvacija osebkov, ki se zgodi v treh fazah: procesiranje z operacijami TensorFlow, procesiranje z operacijami OpenCV in nato ˇ se ˇ stetje. 2.1 Predprocesiranje Preden program lahko zaˇ cne obdelavo slik, kot mu na- rekuje genetski algoritem, je treba te slike primerno pri- praviti. Vhodne slike so lahko razliˇ cnih oblik in velikosti. Prav tako so slike obiˇ cajno barvne, naˇ s algoritem pa obrav- nava slike v sivinah. 2.1.1 Pretvorba v sivine Prvi korak je sprememba vseh slik v sive. Najprej se slike iz RGB-barvnega prostora konvertirajo v barvni pro- stor CIELAB [6]. Prednost CIELAB je namreˇ c njegova komponenta L, ki se nanaˇ sa na lightness oz. osvetljenost. Konvertiranje prek vrednosti osvetlitve prinaˇ sa najboljˇ se rezultate pri aplikacijah raˇ cunalniˇ skega vida [3]. 2.1.2 Izenaˇ cevanje slik Ko so slike v sivinah, preidemo na drugi korak predproce- siranja. Zagotoviti je treba, da se uporabi celoten razpon sivin, ki so na voljo, oziroma izenaˇ cevanje histograma si- vin posamezne slike. Ker obiˇ cajno izenaˇ cevanje ne dosega dovolj dobrih rezultatov, uporabimo namenski algoritem CLAHE [7], ki moˇ cno izboljˇ sa kontrast in vidne podrob- nosti na slikah. V primerjavi z obiˇ cajnim izenaˇ cevanjem, ki deluje globalno, CLAHE izenaˇ cuje vrednosti sivin lo- kalno v obsegu 8 8 slikovnih toˇ ck in obenem omeji nastanek ˇ sumov, ki se utegnejo pojaviti ob tem. 2.1.3 Nastavitev loˇ cljivosti - ARes Tretji korak predprocesiranja je nastavitev vseh slik na sku- pno velikost in izbiranje primerne loˇ cljivosti. Ta postopek opravimo z algoritmom ARes [8]. Algoritem ARes poiˇ sˇ ce primerne loˇ cljivosti, ki so niˇ zje od zaˇ cetne. Pridobljena niˇ zja resolucija nam omogoˇ ca hitrejˇ se procesiranje slik. Prav tako niˇ zje loˇ cljivosti potrebujejo manj grafiˇ cnega pomnilnika, ki pa je omejen. 341 Primerna loˇ cljivost se smatra za loˇ cljivost, ki je manjˇ sa ali enaka zaˇ cetni in pri tem ohrani oziroma izboljˇ sa ka- kovosti reˇ sitve. Zmanjˇ sana primerna resolucija lahko pri- pomore k izboljˇ sanju reˇ sitve (slika 1) tako, da odstrani nepotrebne in moteˇ ce podrobnosti slike. Slika 1: Graf kakovosti reˇ sitve v odvisnosti loˇ cljivosti slik najde- nih z algoritmom ARes. Primer ˇ stetja celic. [1] 2.2 Implementacija genetskega algoritma pri naˇ sem programu Genetski algoritem deluje na populaciji osebkov, ki jo upravlja in nad njo izvaja selekcijo in kriˇ zanje, ti pa pri- peljeta do novega osebka. Novonastali osebek se nato ˇ se mutira. 2.2.1 Opis in zgradba osebka Osebek vsebuje zapis oziroma navodila, katere operacije izvesti nad tenzorjem slik v naˇ sem programu. Osebek je sestavljen iz dveh delov, vsak del pa vsebuje zaporedje doloˇ cenih operacij. V prvem delu so operacije, ki so implementirane v TensorFlowu. V drugem pa je zaporedje operacij, ki so implementirane v OpenCV . 2.2.2 Kriterijska funkcija Kriterijska funkcija doloˇ ca kvantitativni kriterij uspeˇ snosti osebkov. Zmoˇ znost pridobitve dobrih rezultatov pri ge- netskem algoritmu je zelo odvisna od kakovosti kriterij- ske funkcije. Kriterijska funkcija usmerja iskanje genet- skega algoritma po prostoru in tako moˇ cno vpliva na kon- vergenco populacije. Pri uporabljeni kriterijski funkciji (enaˇ cba 1),x i predstavlja resniˇ cno vrednost,y i pa prido- bljeno vrednost. Vsako posamezno odstopanjex i ody i se potencira, saj tako kaznujemo osebke, ki so dobri le v povpreˇ cju, obenem pa vsebujejo posamezne zelo nadpov- preˇ cno slabe rezultate. f(X)= 1 n n X i=1 100 (x i y i ) x i e (1) 2.2.3 Postopek kriˇ zanja osebkov Kriˇ zanje osebkov deluje v dveh nivojih. Na prvem deluje na nivoju vseh operacij, na drugem pa na nivoju genov posamezne operacije. Kriˇ zanje na nivoju vseh operacij v osebku uporablja dve razliˇ cni strategiji: enostavno enotno kriˇ zanje in kriˇ zanje z ujemanjem zaporedja. Enostavno enotno kriˇ zanje (uniform crossover) Pri enostavnem enotnem kriˇ zanju se novi osebek sestavlja tako, da se istoleˇ zeˇ ce operacije starˇ sev zaporedno kriˇ zajo druge z drugo. Kriˇ zanje z ujemanjem zaporedja Kriˇ zanje z ujema- njem zaporedja (slika 2) v nasprotju z enostavnim eno- tnim kriˇ zanjem upoˇ steva tipe operacij in poskuˇ sa ohraniti obstojeˇ ce zaporedje, vsebovano v obeh starˇ sih, pri novem osebku. Kriˇ zanje z ujemanjem omogoˇ ci prenos moˇ zne do- bre podreˇ sitve v novi osebek, kjer je podreˇ sitev daljˇ sa od posamezne operacije in je pravzaprav zaporedje operacij. Cilj kriˇ zanja z ujemanjem je hitrejˇ se konvergiranje genet- skega algoritma k reˇ sitvi. Algoritem z ujemanjem zapo- redja je predstavljen s psevdokodo (algoritem 1). Kriˇ zanje parametrov operacij se zgodi le pri istoleˇ znih operacijah istega tipa. Novi parameter se doloˇ ci z nakljuˇ cnim izbo- rom enega izmed parametrov starˇ sev. Verjetnost, kateri parameter bo izbran, doloˇ cimo z vhodnim parametrom programa paramter crossover weight. ˇ Ce istoleˇ zni ope- raciji nista istega tipa, se parametri prepiˇ sejo le iz tistega starˇ sa, ki je istega tipa kot otrok. ˇ Ce se tip otroka razlikuje od obeh starˇ sev, se parametri nakljuˇ cno generirajo. Algoritem 1 Najdi podobno zaporedje indexA 0 indexB 0 for all operationA2parentA do if indexB length(parentB) then indexB 0 end if while indexB