Detection of characteristic points on X-ray images using deep learning techniques
Full text
(2) DETEKCIJA KARAKTERISTIČNIH TOČK NA RENTGENSKIH POSNETKIH GLAVE S POMOČJO TEHNIK GLOBOKEGA UČENJA Magistrsko delo. Študent(ka): Študijski program: Smer: Mentor(ica): Somentor(ica): Lektor(ica):. Gašper Sedej Študijski program 2. stopnje Računalništvo in informacijske tehnologije Izr. prof. dr. Božidar Potočnik Martin Šavc Mateja Javeršek, mag. slovenistike in južne slavistike. II.
(3) ZAHVALA Zahvaljujem se mentorju in somentorju za vso pomoč in predloge pri opravljanju magistrskega dela. Posebej se zahvaljujem ženi Mariji, hčerki Viti in sinu Adamu za ves čas, ki ga nisem mogel preživeti z vami, temveč sem se ukvarjal z zaključkom študija.. III.
(4) Detekcija karakterističnih točk na rentgenskih posnetkih glave s pomočjo tehnik globokega učenja Ključne besede: globoko učenje, nevronske mreže, kefalometrija, razpoznavanje vzorcev, optimizacija, paralelno izvajanje UDK:. 004.89:004.932.72'1(043.2). Povzetek V tem magistrskem delu smo se ukvarjali s sistemom za detekcijo karakterističnih točk na slikovnih podatkih. Izdelali smo splošen sistem za avtomatsko zaznavanje karakterističnih točk, ki smo ga prilagodili za kefalometrične točke na rentgenskih slikah. Kot detektor smo uporabili obstoječo globoko nevronsko mrežo SegNet, ki je namenjena segmentiranju slik. To mrežo smo modificirali za iskanje karakterističnih točk. Novo mrežo smo poimenovali KeypointNet. Izdelali smo tudi sistem za označevanje točk na slikah. Detektor smo učili z učno množico. Na testni množici smo izvedli detekcijo in izmerili napako, ki jo definiramo kot evklidsko razdaljo med napovedano in označeno točko. Testirali smo tudi nabor krmilnih hiperparametrov pri zagonu učenja. Sistem smo testirali na množici 124 kefalometričnih slik velikosti 480 × 360 pikslov, in sicer za nabor 10 izbranih točk. Na vseh slikah smo označili te točke. Slike smo razdelili v učno in testno množico v razmerju približno 75 % in 25 %. Testirali smo 16 naborov hiperparametrov. Za vsak nabor smo izvedli 5 ponovitev učenja. Povprečna napaka v položaju točke na testni množici je bila 2,7 piksla. Testirali smo tudi vpliv dveh hiperparametrov za nadzor učenja. Testi so pokazali, da rahel odklon od priporočenih vrednosti za ta dva hiperparametra nima signifikantnega vpliva na končni rezultat. Dobljeni rezultati so zelo spodbudni. Razvili smo torej napreden sistem na osnovi globokega učenja, ki uspešno detektira karakteristične točke na slikah.. IV.
(5) Detection of characteristic points on X-ray images using deep learning techniques Key words: deep learning, neural networks, cephalometry, pattern recognition, optimization, parallel execution UDK:. 004.89:004.932.72'1(043.2). Abstract In this master thesis we were dealing with a system for detecting characteristic points on image data. We have created a general system for automatic detection of characteristic points, which we have adapted for cephalometric points in X-ray images. As a detector we used the existing deep neural network SegNet, which is used for image segmentation. We modified this network to detect characteristic points. We named the new network KeypointNet. We also created a system for labeling points in the images. The detector was trained using a training set. The detection was performed on the test set and an error was calculated, which is defined as the euclidean distance between the predicted and the labeled point. We also tested the set of control hyperparameters when starting the learning process. The system was tested on a set of 124 cephalometric images of 480 × 360 pixels, for a set of 10 selected points. We've tagged these points on all the images. The images were divided into a learning and test set in a ratio of approximately 75% and 25%. We tested 16 sets of hyperparameters. For each set we performed 5 repetitions of learning. The average error in the point position on the test set was 2.7 pixels. We also tested the influence of two hyperparameters for learning control. The tests showed that a slight deviation from the recommended values for these two hyperparameters does not have a significant effect on the final result. The results obtained are very encouraging. Therefore we have developed an advanced system based on deep learning, which successfully detects characteristic points in the images.. V.
(6) Slovarček pojmov Slovarček pojmov, uporabljenih v magistrskem delu. Ogrodje Caffe Ogrodje oz. knjižnica Caffe za globoke nevronske mreže, primarno za slikovne podatke. Arhitektura nevronske mreže Arhitektura oz model nenaučene nevronske mreže, zapisana v datoteki net.prototxt. SegNet Arhitektura nevronske mreže za namen segmentacije slik. Uporablja Ogrodje Caffe in doda nove sloje, kot so »dense image data«, prirejeni združevalni (angl. pooling), nadvzorčenje (angl. upsample). KeypointNet Naša modifikacija arhitekture SegNet – spremenjeni vhodni in izhodni sloji. Datoteka net.prototxt Datoteka, v kateri je v tekstovni obliki zapisana arhitektura nevronske mreže. V njej se nahajajo sloji, ki so zapisani v obliki »Google Protocol Buffers«. Datoteka solver.prototxt Datoteka, ki vsebuje konfiguracijo za zagon nevronske mreže in hiperparametre za krmiljenje (optimizacijo) učenja. Izguba (loss) Sekundarni izhod faze naprej v fazi učenja nevronske mreže. »Klasična« izguba, ki v arhitekturi KeypointNet pomeni navzkrižno entropijo med dvema slikama (ne pove evklidske napake (razdalje)). Labela Sivinska slika s črnim ozadjem in belo označeno točko, kjer se točka na sliki nahaja. Točka je izrisana z Gaussovim jedrom. V nasprotju s »klasično« labelo, kjer število pomeni označeno klasifikacijo podatka. Napoved (predikcija) Izhod oz. rezultat nevronske mreže glede na dane vhodne podatke. V primeru KeypointNet gre za napoved labele (iz nje se dobi lokacija točke). Napaka Evklidova razdalja med točko iz labele in točko iz napovedi. V obeh slikah se kot točka vzame lokacija z maksimalno sivino. Izvajanje mreže (angl. inference) Samo korak naprej, ki ga uporabljamo za dobivanje napovedi, iz katerih lahko izračunamo napako napovedi. V angleščini srečamo izraze »inference« oz. »deploy« verzija mreže. Faza naprej oz. posredovanje naprej (angl. forward inference) Računanje signalov od vhoda proti izhodu. Rezultat faze naprej je napoved enega podatka (slika). Faza nazaj oz. vzvratno učenje (angl. backward learning) Popravljanje uteži nevronske mreže glede na napoved in labelo. (Prenos gradientov napake od izhoda nazaj v smeri proti vhodu in popravljanje uteži.) Datoteka .caffemodel Izhodna datoteka učenja nevronske mreže z ogrodjem Caffe. V njej so uteži slojev nevronske mreže zapisane v binarni obliki. Iteracija En korak, ki je sestavljen iz faze naprej in faze nazaj.. VI.
(7) Evklidska razdalja Metrika za izračun napake. Izračuna se kot razdalja med labelo in napovedjo. Popolnoma konvolucijska mreža (angl. Fully Convolutional Network) Nevronska mreža, ki je zgrajena samo iz konvolucijskih slojev. Kodirnik Podkorak napovedi arhitekture SegNet v prvi polovici mreže, sestavljen iz slojev konvolucije, ReLU in združevanja (angl. pooling). Dekodirnik Podkorak napovedi v drugi korak arhitekture SegNet, sestavljen iz slojev nadvzorčenje (angl. upsample), konvolucije in ReLU. Ukazni način (Caffe) Uporaba ogrodja Caffe iz ukazne vrstice brez možnosti vmesne interakcije. Običajno uporabljen za učenje. Interaktivni način (Caffe) Uporaba ogrodja Caffe znotraj programskega jezika, običajno za namen analize naučene nevronske mreže.. VII.
(8) Kazalo vsebine 1 Uvod....................................................................................................................................1 1.1 Definicija problema.....................................................................................................1 1.2 Kefalometrija...............................................................................................................2 1.3 Kefalometrična analiza................................................................................................2 1.4 Pregled sorodnih del....................................................................................................4 1.5 Cilji in teze magistrskega dela.....................................................................................5 1.6 Struktura dela..............................................................................................................6 2 Tehnike globokega učenja in konvolucijske nevronske mreže...........................................7 2.1 Osnovni pojmi o umetnih nevronskih mrežah.............................................................7 2.2 Ogrodje Caffe............................................................................................................10 2.2.1 Vmesnik.............................................................................................................10 2.2.2 Arhitektura mreže »net« (prototxt)....................................................................11 2.2.3 Nastavitev učenja...............................................................................................12 2.2.4 Hiperparametri...................................................................................................13 2.2.5 Najpogosteje uporabljeni sloji...........................................................................14 2.2.6 Naučena mreža...................................................................................................19 2.2.7 Primer zagona učenja (LeNET).........................................................................19 2.3 Arhitektura SegNet....................................................................................................20 2.3.1 Vhodni sloj (DenseImageData)..........................................................................20 2.3.2 Prirejeni združevalni sloj...................................................................................21 2.3.3 Sloj nadvzorčenja...............................................................................................21 2.3.4 Faza kodiranja-dekodiranja................................................................................22 3 Arhitektura KeypointNet...................................................................................................23 3.1 Modificirani vhodni sloj............................................................................................23 3.2 Izhod napovedi..........................................................................................................24 3.3 Izhod učne faze..........................................................................................................25 4 Eksperimentalno okolje.....................................................................................................27 4.1 Poenotenje formatov..................................................................................................27 4.2 Označevanje podatkov...............................................................................................28 4.3 Predobdelava podatkov..............................................................................................31 4.3.1 Skaliranje slik.....................................................................................................31 4.3.2 Skaliranje točk...................................................................................................31 4.3.3 Generiranje label................................................................................................31 4.3.4 Izdelava učne in testne množice........................................................................32 4.3.5 Pisanje podatkov v bazo LMDB........................................................................32 4.4 Učenje nevronske mreže............................................................................................34 4.4.1 Namestitev ogrodja Caffe..................................................................................34 4.4.2 Priprava modificirane arhitekture SegNet (prototxt).........................................34 4.4.3 Priprava nastavitvene datoteke »solver«............................................................36 4.4.4 Zagon učenja......................................................................................................37 4.5 Interpretacija rezultatov.............................................................................................37 4.5.1 Implementacijske podrobnosti...........................................................................38 4.6 Optimizacija hiperparametrov...................................................................................40 4.6.1 Porazdeljen zagon..............................................................................................40 5 Rezultati.............................................................................................................................42 5.1 Metrike za merjenje uspešnosti.................................................................................42 VIII.
(9) 5.2 Kvalitativni rezultati..................................................................................................43 5.2.1 Prikaz grafov izgube skozi postopek učenja......................................................43 5.2.2 Prikaz naučenih točk skozi iteracije...................................................................46 5.2.3 Grafična predstavitev točk na testni sliki...........................................................48 5.2.4 Prikaz različnega grupiranja..............................................................................50 5.3 Kvantitativni rezultati................................................................................................52 6 Diskusija............................................................................................................................57 7 Sklep..................................................................................................................................59 7.1 Potrditev oziroma zavračanje teze in hipotez............................................................59 7.2 Smernice za prihodnje delo.......................................................................................61 VIRI IN LITERATURA.......................................................................................................62. IX.
(10) Kazalo slik Slika 1: Lateralni radiogram glave v naravni poziciji (vir: [6])............................................3 Slika 2: Slika kefalometrične analize s sledjo (levo) in kefalometričnimi točkami na kefalogramu (desno) (vir: [8])................................................................................................4 Slika 3: Slika umetnega nevrona...........................................................................................8 Slika 4: Slika večplastnega perceptrona (vir: [16])...............................................................8 Slika 5: Metoda gradientnega sestopa. Cilj učenja je doseči minimum napake....................9 Slika 6: Primer majhne nevronske mreže v tekstovni (levo) in grafični obliki (desno)......12 Slika 7: Primer delovanja vizualne nevronske mreže (vir: [31]).........................................15 Slika 8: Shema delovanja združevalnega sloja [33]............................................................17 Slika 9: Shema arhitekture SegNet (vir: [36]).....................................................................20 Slika 10: Sloj nadvzorčenja, ki sprejme max-pooling indices (vir: [12])...........................22 Slika 11: Shema delovanja kodiranja-dekodiranja..............................................................22 Slika 12: Arhitektura SegNet: Vhodna slika (levo) in njena labela (desno) [36]................23 Slika 13: Arhitektura KeypointNet: vhodna slika (levo) in 10 točk kot pomanjšane labelne slike (desno).........................................................................................................................24 Slika 14: Graf sigmoidne funkcije [37]...............................................................................25 Slika 15: Različne vhodne slike. Od leve proti desni: dobra slika, slika z manjkajočim zadnjim delom lobanje, pretemna slika in presvetljena slika...............................................27 Slika 16: Izbrane točke na kompozitni sliki........................................................................29 Slika 17: Prikaz 10 označenih točk na rentgenski sliki po postopku ročnega označevanja. Točke so med seboj povezane s črto zaradi lažje orientacije in vizualizacije......................30 Slika 18: Primer generiranja label: slika z dodanim črnim robom na desni strani (levo), sredina: tri labele za tri različne karakteristične točke (sredina), in originalna slika z dodanimi labelami (desno)...................................................................................................32 Slika 19: Grafični prikaz začetnega dela naše arhitekture KeypointNet.............................36 Slika 20: Grafični prikaz zadnjega dela naše arhitekture KeypointNet..............................36 Slika 21: Graf izgube pri učenju s parametri γ = 0,9 in moment = 0,8. Z rdečo barvo je prikazana izguba, izračunana na učni množici; z modro pa izguba, izračunana nad testnimi podatki. Os x predstavlja številko iteracije, os y pa izgubo po logaritemski skali...............44 Slika 22: Približan pogled po osi y s slike 21......................................................................44 Slika 23: Graf izgube izračunan na testnih podatkih (slikah). Učenje smo izvedli s parametri γ = 0,9 in moment = 0,8. Vsaka barva pomeni eno od 24 testnih slik. Os x predstavlja številko testne iteracije, os y pa izgubo po logaritemski skali. Ojačana slika je predstavljena s točkami rjave barve. Učnih iteracij je manj kot testnih, saj se zgodi ena testna na vsakih 5 učnih........................................................................................................45 Slika 24: Primer grafa izgube, kjer je bilo učenje neuspešno.............................................46 Slika 25: Prikaz učenja nevronske mreže skozi učne iteracije............................................47 Slika 26: Prikaz devet parov labelnih točk in napovedi ter napake napovedi na izbrani testni sliki. Zgornja slika v paru prikazuje labelo, spodnja pa napoved...............................49 Slika 27: Graf prikaza napak za 15 različnih kombinacij hiperparametrov (vertikalno) proti 10 različnim kefalometričnim točkam (horizontalno). Napaka je izrisana po osi x in osi y za dane podatke....................................................................................................................50 Slika 28: Graf prikaza osamelcev napak za 5 različnih ponovitev učenja (vertikalno) proti 10 različnim kefalometričnim točkam (horizontalno). Napaka je izrisana po osi x in osi y za dane podatke....................................................................................................................51 X.
(11) Slika 29: Graf povprečne napake (v pikslih) pri določanju položaja karakterističnih točk z različnimi kombinacijami hiperparametrov..........................................................................53 Slika 30: Graf standardnega odklona napake (v pikslih) pri določanju položaja karakterističnih točk z različnimi kombinacijami hiperparametrov.....................................54 Slika 31: Graf mediane (v pikslih) pri določanju 10 karakterističnih točk za različne kombinacije hiperparametrov pri 5 ponovitvah učenja........................................................55 Slika 32: Različne metrike (povprečje, standardni odklon in mediana) napak v pikslih za karakteristične točke od 1 do 10...........................................................................................56 Slika 33: Rezultat primerjave rezultatov s Friedmanovim testom za 16 kombinacij hiperaparametrov. Na y osi je rang. Krogec označuje povprečen rang. Morda barva označuje najboljšega, zelena tiste, kjer razlika ni statistično različna, rdeča barva pa tiste, kjer je različna......................................................................................................................60. XI.
(12) Uvod. 1. 1 Uvod 1.1 Definicija problema V tem magistrskem delu smo preučili možnost uporabe tehnik globokega učenja za detekcijo karakterističnih točk na rentgenskih slikah. Poudarek je na detekciji točk brez domensko specifičnega znanja, kar pomeni, da je postopek prenosljiv na druga področja. Konkreten problem, ki ga v delu želimo rešiti, je detekcija izbranih kefalometričnih točk na rentgenskem posnetku človeške glave. Takšne točke najpogosteje uporabljamo na področju ortodontije za diagnoze, načrtovanje zdravljenja in evaluacijo sprememb med zdravljenjem. Umetne nevronske mreže so oblika strojnega učenja, ki posnema delovanje živčnega sistema. Mreže, razdeljene po slojih, so sestavljene iz osnovnih elementov, ki jim pravimo umetni nevroni. Strojno učenje je sposobnost računalniškega sistema, da pridobi znanje iz množice podatkov, in sicer brez pisanja specifične kode za dani problem. Vrsta umetnih nevronskih mrež, imenovana globoke nevronske mreže, se od običajnih nevronskih mrež razlikuje po večjem številu slojev. Takšna zasnova omogoča kompleksnejše učenje, hkrati pa veča potrebo po večji procesni moči. Tradicionalna računalniška arhitektura je manj primerna za takšne mreže. Majhno število procesorskih jeder in počasno vodilo med procesorjem in pomnilnikom sta ozki grli za preproste operacije nad množicami podatkov v fazi učenja. V zadnjih nekaj letih je uporaba grafičnih kartic za globoko učenje nekoliko omilila ta problem. Konvolucijske nevronske mreže so poseben tip globokih nevronskih mrež s poudarjeno uporabo konvolucijskih slojev. Navdih za konvolucijske mreže je delovanje vizualnega korteksa v možganih. Najpogosteje se uporabljajo za razpoznavanje objektov na slikah in video posnetkih (angl. image and video recognition), kot sistemi za priporočanje (angl. recommender systems) in za obdelovanje naravnega jezika (angl. natural language processing)..
(13) Uvod. 2. 1.2 Kefalometrija Kefalometrija (angl. cephalometry) je veda, ki se ukvarja z merjenjem človeške glave, običajno na radiogramskih (rentgenskih) slikah. Najpogosteje se jo uporablja pri dentalni medicini in ustni kirurgiji. Kefalometrične točke (angl. cephalometric landmarks) so točke, ki se uporabljajo pri kefalometrični analizi in se jih določi na podlagi rentgenskih slik. Točke se nahajajo na različnih delih kosti in mehkega tkiva, najpogosteje tam, kjer se stikajo črte, robovi ali kotički ploskev. Ena izmed prvih uporab kefalometrije je bila pri analizi starodavnih človeških trupel najdenih v Evropi [1]. Kasneje je kefalometrična analiza dobila še druge aplikacije, in sicer: •. ortodontija: merjenje razdalj med zobmi, čeljustjo in dlesnijo za načrtovanje zdravljenja [2];. •. dentalna medicina: načrtovanje operacij [2];. •. ginekologija: merjenje velikosti glave otroka v maternici na podlagi ultrazvočnih slik, izdelava 3D slike otroka [3];. •. forenzika: analiza služi kot pomoč pri preiskavah [4].. 1.3 Kefalometrična analiza V tem magistrskem delu se bomo omejili na kefalometrične analize na področju ortodontije in dentalne medicine. Kefalometrična analiza bo za nas pomenila analizo dentalnega in skeletnega razmerja v človeški glavi. Takšne analize uporabljajo zobozdravniki, ortodonti in oralni kirurgi za načrtovanje posegov. Rezultat analize so točke (oz. mejniki) oz. razdalje med njimi za diagnozo abnormalnih delov pred, med in po posegu ter za meritev uspešnosti zdravljenja. Naravna pozicija glave (angl. natural head position) [5] je pozicija glave, ki omogoča ponovljivost pri kefalometričnemu zajemu slike. Pacient ima glavo postavljeno tako, da je ploskev obraza poravnana navpično, oči pa gledajo naprej. Ta standard, ki se uporablja še danes, omogoča primerjavo različnih analiz..
(14) Uvod. 3. Slika 1: Lateralni radiogram glave v naravni poziciji (vir: [6]). Kefalometrični radiogram (slika 1) je rentgenska slika, izdelana s kefalometrično napravo, nameščeno na višino glave. Prvi kefalometer je bil izdelan leta 1931 v ZDA [7]. Kefalometrična analiza določa standard, s katerim lahko primerjamo slike, narejene iz različnega časovnega obdobja in različnih kefalometričnih naprav. Lateralni kefalogram je rentgenska slika glave »s strani«. Radiogram je postavljen na eni strani glave, film pa na drugi strani. Druga pozicija je posteroanteriorni kefalogram. Film se nahaja za glavo, radiogram pa pred obrazom. V naši raziskavi uporabljamo slike lateralnega kefalograma. Kefalometrična sled (angl. tracing) je tehnika risanja črt na svoj sloj, preko rentgenske slike. Namen je iskanje anatomskih struktur kostnega in mehkega tkiva. Korak, ki sledi sledenju, je določanje kefalometričnih točk (slika 2). Točke se določijo pri spojih črt, osi, vektorjev, kotov in ravnin..
(15) Uvod. 4. Slika 2: Slika kefalometrične analize s sledjo (levo) in kefalometričnimi točkami na kefalogramu (desno) (vir: [8]). Računalniška kefalometrija je analiza, ki se izvaja s pomočjo računalniških algoritmov. Z njimi je mogoče deloma ali popolno avtomatsko izvajati analizo s kefalometrično sledjo in poiskati kefalometrične točke. Namen je olajšati sicer zamudno in zahtevno delo radiologov ter odpraviti človeški faktor, saj vsak radiolog nekoliko drugače detektira točke. S tem želimo zmanjšati variabilnost med opazovalci (angl. inter-observer variability).. 1.4 Pregled sorodnih del Za računalniško analizo kefalometričnih točk obstaja več algoritmov. V tem podpoglavju si bomo pogledali nekaj najsodobnejših (angl. state-of-the-art) metod, ki se ukvarjajo z računalniško kefalometrično analizo. Avtor Wang s sodelavci [9] opisuje izdelavo seta podatkov za primerjavo kefalometričnih algoritmov. Set je sestavljen iz 400 rentgenskih slik, vsaka slika pa vsebuje po 19 kefalometričnih točk. Ta set sta označila dva strokovnjaka s področja kefalometrične analize. Za primerjavo med različnimi algoritmi uporablja različno velika območja med označeno in napovedano točko (angl. precision range). Ta območja so 2,0 mm, 2,5 mm, 3,0 mm in 4,0 mm oddaljena do označene točke. Članek vsebuje tudi primerjavo nekaj obstoječih algoritmov..
(16) Uvod. 5. Avtorica Linder [10] opisuje postopek določitve točk s pomočjo več korakov. Sistem FALA (angl. Fully Automatic Landmark Annotation) vsebuje strojno učenje. S tehniko »Random Forrest regression-voting« določijo pozicijo, velikost in orientacijo lobanje. Ta korak napravi sistem robusten na variabilnost pri zajemu slik. Sledi korak »Constrained Local Model framework« za določanje 19 kefalometričnih točk. Glede na metriko iz primerjalnega članka [9], v območju 2,0 mm do označene točke, algoritem doseže 84,70 % natančnost. Avtor Arik [11] za detekcijo točk uporabi tehnike globokega učenja in konvolucijskih mrež. Algoritem razreže sliko v regije kandidatke, ki se nato pošljejo v naučeno konvolucijsko mrežo, ta pa vrne verjetnost za določeno kefalometrično točko. Ustrezne točke se izberejo s pomočjo tehnike »Shape model based reinforcement«. Glede na metriko iz primerjalnega članka [9], v območju 2,0 mm do označene točke, algoritem doseže 76 % natančnost.. 1.5 Cilji in teze magistrskega dela Namen magistrskega dela je izdelati sistem za avtomatsko detekcijo karakterističnih točk na rentgenskih slikah. Kot detektor bomo modificirali obstoječo arhitekturo globoke nevronske mreže za segmentacijo SegNet [12] in jo prilagodili za namen detekcije. Predvidoma bomo izbrali 10 točk, ki se uporabljajo za kefalometrično analizo. Po začetni fazi učenja in analizi rezultatov bomo postopek poizkušali izboljšati z optimizacijo nekaterih hiperparametrov nevronske mreže. Pričakujemo, da bo napaka napovedi v povprečju manjša od 5 slikovnih točk. Postavljamo naslednjo tezo: Konvolucijsko nevronsko mrežo je mogoče brez optimizacije hiperparametrov naučiti detekcije izbranih karakterističnih točk na sliki, pri čemer bo napaka pri detektiranju položaja karakteristične točke manjša od 5 pikslov. Tezo razgradimo v dve hipotezi: Hipoteza 1: Konvolucijsko nevronsko mrežo je mogoče naučiti napovedovanja karakterističnih točk z napako, ki je v povprečju manjša od 5 slikovnih elementov pri vhodni sliki z ločljivostjo 480 × 360 slikovnih elementov. Hipoteza 2: Optimizacija hiperparametrov ne vpliva statistično značilno na končno napako napovedovanja položaja karakteristične točke..
(17) Uvod. 6. 1.6 Struktura dela Struktura magistrskega dela je sledeča. V poglavju 2 si bomo pogledali obstoječe tehnike globokega učenja in predstavili orodja, ki smo jih uporabili med raziskovanjem. Poglavje 3 opisuje jedro tega magistrskega dela. Gre za razvoj konvolucijske nevronske mreže, namenjene detektiranju karakterističnih točk. Dejansko smo modificirali obstoječo mrežo SegNet v novo arhitekturo, ki smo jo poimenovali KeypointNet. Eksperimentalno okolje opišemo v poglavju 4. V njem si bomo pogledali celoten proces od obdelave slik do zaganjanja nevronskih mrež. V 5. poglavju bomo predstavili rezultate, nato pa v poglavju 6 napravili diskusijo. V zadnjem, sklepnem, poglavju bomo preverili postavljeno tezo in hipotezi, predstavili pa bomo tudi smernice za prihodnje delo..
(18) Tehnike globokega učenja in konvolucijske nevronske mreže. 7. 2 Tehnike globokega učenja in konvolucijske nevronske mreže V tem poglavju bomo pogledali osnovne pojme, ki so potrebni za razumevanje magistrskega dela. Najprej bomo naredili hiter pregled področja strojnega učenja ter nato opisali zelo priljubljeno ogrodje za učenje globokih nevronskih mrež, imenovano Caffe. Pogledali si bomo arhitekturo SegNet, namenjeno segmentaciji slik. V naslednjem poglavju pa bomo opisali naše modifikacije arhitekture, imenovane KeypointNet, za namen iskanja karakterističnih točk na slikah.. 2.1 Osnovni pojmi o umetnih nevronskih mrežah Že od same ideje o programirljivih računalnikih, tj. sto let pred izdelavo prvega računalnika, so se ljudje spraševali, ali bodo stroji postali inteligentni [13]. Danes je umetna inteligenca široko področje z veliko praktičnimi aplikacijami in intenzivno raziskovalno področje. Veliko začetnih uspehov umetne inteligence je bilo znotraj kontroliranega in formalnega okolja. Eden takih primerov je IBM-ov sistem za igranje šaha, imenovan Deep Blue, ki je leta 1997 premagal šahovskega šampiona Kasparova [14]. Igra šaha je zelo enostavno okolje z omejenimi figurami, premiki in kratkim seznamom formalnih pravil, ki ga je mogoče trdo kodirati v sistem [15]. Glavna pomanjkljivost takšnih (trdo kodiranih) sistemov je količina časa in truda, ki ga morajo razvijalci vložiti v iskanje in pripravo pravil, s katerimi sistem pride do odločitve. Takšen sistem je tudi precej težko prilagoditi za druge podobne probleme. Algoritmi strojnega učenja poskušajo namesto tega sami določiti pravila znotraj splošnega modela odločanja na podlagi videnih primerov. Preprosta primera strojnega učenja bi bila linearna regresija in naivni Bayesov pristop. Ena izmed tehnik strojnega učenja so tudi umetne nevronske mreže. V nadaljevanju magistrskega dela se bomo posvetili tej tehniki, saj je to temeljno orodje, s katerim smo delali raziskave v okviru magistrskega dela. Umetna nevronska mreža je sestavljena iz več osnovnih elementov, imenovanih umetni nevroni. Primer umetnega nevrona (slika 3) je TLU (angl. Threshold Logic Unit). Vsak vhod ima svojo utež, s katero se množi. Obtežene vrednosti se seštejejo. Vsota se poda.
(19) Tehnike globokega učenja in konvolucijske nevronske mreže. 8. aktivacijski funkciji, ki jo pretvori v aktivacijo. Z umetnim nevronom lahko rešujemo le linearne probleme. Če problem ni linearen, povežemo več enot v kompleksnejšo mrežo. x0 w0 x1. w1. x2. w2 w3. x3. ... xn. aktivacijska funkcija. ∑. v aktivacija. y izhod. wn uteži. vhodi. Slika 3: Slika umetnega nevrona. MLU (angl. Multi Layer Perceptron) je oblika nevronske mreže in vsebuje množico nevronov v več plasteh (slika 4). Poznamo izhodne in skrite plasti. Če ima mreža več skritih plasti, govorimo o globokih nevronskih mrežah in globokem učenju.. Slika 4: Slika večplastnega perceptrona (vir: [16]) Aktivacija v nevronski mreži predstavlja nelinearno funkcijo. Brez aktivacijskih slojev bi še tako globoko in kompleksno mrežo lahko zamenjali z enim samim nevronom (to sledi iz lastnosti linearnih sistemov). Na tem mestu lahko omenimo še to, da v teoriji vsak nevron vsebuje aktivacijsko funkcijo. Vhod v aktivacijsko funkcijo je obtežen vhod v umetni nevron, vendar je v večini programskih knjižnic zaradi večje fleksibilnosti aktivacija ločena od nevrona in implementirana kot lastna plast oz. sloj. Taka implementacija je uporabljena tudi v našem magistrskem delu..
(20) Tehnike globokega učenja in konvolucijske nevronske mreže. 9. Klasifikacijo z nevronsko mrežo običajno implementirano tako, da vsakemu razredu dodelimo en izhod v izhodnem sloju. V času klasifikacije določimo za vhod tisti razred, katerega izhod je imel največjo vrednost. Učenje nevronske mreže je postopek prilagajanja uteži nevronov z namenom doseganja pravilne relacije med vhodnimi podatki in izhodom nevronske mreže. Proces učenja poteka z optimizacijo uteži glede na napako, ki se izračuna kot neka funkcija razlike med trenutnim in pričakovanim izhodom nevronske mreže. V koraku faze naprej (angl. feedforward) se glede na vhodne podatke in trenutnih uteži v nevronski mreži izračuna rezultat – napoved. V koraku faze nazaj (angl. back-propagation) se najprej izračuna razlika med napovedjo in pričakovanim rezultatom. Ta se nato uporabi kot osnova za optimizacijo uteži. Napaka se običajno izračuna s pomočjo regresijske funkcije (angl. logistic cost regression). Kombinaciji obeh faz pravimo iteracija. Po eni definiciji epoha pomeni, da smo celotno učno množico v fazi učenja uporabili enkrat (vsak učni vzorec enkrat). Za nadzor učenja skrbi učni algoritem, ki spreminja parametre kot so hitrost učenja, glede na iteracijo in uspešnost mreže. Pogosto uporabljen učni algoritem je metoda stohastičnega gradientnega sestopa (angl. Stohastic Gradient Descent, slika 5), ki mrežo optimizira po metodi gradientnega sestopa. Napaka E. Stare uteži w ( t- 1) w( t ) Nove uteži. Uteži w. Slika 5: Metoda gradientnega sestopa. Cilj učenja je doseči minimum napake..
(21) Tehnike globokega učenja in konvolucijske nevronske mreže. 10. 2.2 Ogrodje Caffe Ogrodje Caffe [17] je trenutno eno izmed bolj popularnih ogrodij za razvoj, učenje in izvajanje globokih nevronskih mrež. Najpogosteje se ga uporablja za klasifikacijo in segmentacijo slik, podpira pa tudi druge tipe podatkov. Caffe ni edino ogrodje za nevronske mreže. Zelo priljubljen je tudi Tensorflow [18], kjer nevronsko mrežo predstavimo s tenzorji in z operacijami nad njimi. Theano [19] je knjižnica za Python, ki je implementirana s pomočjo Numpy. MatConvNet [20] je odprtokodna knjižnica za jezik MATLAB. Med novejšimi knjižnicami najdemo tudi MXNet [21], ki je razširljiva in primerna za računanje v oblaku, ima podporo za množico programskih jezikov. Za uporabo ogrodja Caffe smo se odločili na podlagi velike količine obstoječih učnih materialov, izdelanih arhitektur za različne namene ter obstoječih naučenih modelov, imenovanih Caffe Model ZOO [22]. Med priljubljene arhitekture spadajo prepoznavanje z roko napisanih števil (LeNET MNIST [23]) detekcija in lokaliziranje objektov na sliki (RCNN [24]), ter segmentacija objektov na sliki (SegNet [12]). Prav slednjega smo modificirali za namen detekcije kefalometričnih točk. Glavni lastnosti ogrodja Caffe sta modularnost in možnost učenja ter izvajanja tudi na grafičnih karticah. Vsak sloj nevronske mreže je svoj modul, ki se lahko izvaja tako na centralni procesni enoti (CPE) kot na procesorju grafične kartice (GPE). Za hitro izvajanje na grafični kartici mora imeti vsak sloj posebno implementacijo v programskem jeziku CUDA. Nedavno je začelo tudi podjetje AMD nuditi podporo za učenje na svojih grafičnih karticah [25], vendar je treba vse obstoječe CUDA-implementacije pretvoriti v jezik »hip«. Tako obstaja verzija »hipCaffe«. Tudi podjetje Intel ima namensko prirejeno različico ogrodja [26] (Intel MKL), ki je namenjeno poganjanju na večjedrnih procesorjih Xeon in Phi. Caffe je napisan v jeziku C++ in nudi podporo za Python in MATLAB, lahko pa se ga uporablja tudi v ukaznem načinu. Vsa izvorna koda je na voljo na spletni strani github [17]. 2.2.1 Vmesnik V interaktivnem načinu dela z ogrodjem Caffe z uporabo programskega jezika (Python ali MATLAB) programsko nastavimo parametre ter učimo. Vsak korak (iteracija) učenja je mogoče nadzirati – zagon in zaključek. Faza naprej in faza nazaj se kličeta s funkcijskim.
(22) Tehnike globokega učenja in konvolucijske nevronske mreže. 11. klicem, ki v času izvajanja faze blokira interaktivni način. Po zaključku faze lahko ponovno dostopamo do celotnega stanja nevronske mreže. Možno je preveriti (in spremeniti) tako vrednosti uteži po slojih, kot same vrednosti podatkov (»blobs«) po slojih. To je zelo koristno v fazi razvoja in testiranja arhitekture, saj omogoča natančen vpogled v aktivnosti nevronov glede na vhodne podatke. Ukazni način je primeren za učenje že izdelane arhitekture nevronske mreže. Caffe se zažene kot ukazni program »caffe« in dodatnimi zastavicami in parametri. Za običajno učenje potrebuje zastavico »train« in datoteko z nastavitvami imenovano »solver«. Ta poleg ostalih nastavitev vsebuje tudi nastavitev »net«, tj. lokacijo tekstovne datoteke »prototxt«, ki predstavlja arhitekturo mreže. 2.2.2 Arhitektura mreže »net« (prototxt) Ogrodje Caffe predstavi arhitekturo nevronske mreže »Net« v obliki tekstovne datoteke »prototxt«. »Protocol buffers« je razvilo podjetje Google z namenom serializacije strukturiranih podatkov, neodvisno od jezika in platforme. Datoteka nekoliko spominja na poenostavljeni format XML in json [27]. Datoteka se začne s poljubnim imenom mreže, sledijo pa sloji. Vsak sloj ima običajne lastnosti, kot so ime, tip ter vhodi (»bottom«) in izhodi (»top«) sloja. Vhodom in izhodom sloja v angleščini pravimo »blobs«. Možnih je več vhodov in izhodov, ki se v konfiguracijo zapišejo sekvenčno. Vhodni sloj (»data layer«) ima običajno dva izhoda: podatke in pričakovan izhod (labela). Vsak sloj lahko ima še dodatne gnezdene lastnosti. Seznam in opis standardnih slojev je mogoče dobiti v dokumentaciji »layer catalogue« [28]. Poleg standardnih lahko implementiramo tudi lastne sloje. Spodaj vidimo primer zelo majhne, dvoslojne mreže [29]. Na levi strani je tekstovni »prototxt« zapis, na desni pa grafična predstavitev slojev in povezav med njimi. Vhodni podatki (mnist) imajo 2 izhoda: podatke (»data«) in labele. Podatke sprejme sloj notranji produkt (označeno z ip, kar pomeni »inner product«). Zadnji sloj je sloj »loss«, ki izvede funkcijo softmax med podatki in labelami ter na izhod poda izgubo (angl. loss). Prenos podatkov med sloji je preko oznak »top« in »bottom«. Ker gre za organizacijo od spodaj navzgor, se vhodi imenujejo »bottom«, izhodi pa »top«..
(23) Tehnike globokega učenja in konvolucijske nevronske mreže. 12. name: "LogReg" layer { name: "mnist" type: "Data" top: "data" top: "label" data_param { source: "input_leveldb" batch_size: 64 } } layer { name: "ip" type: "InnerProduct" bottom: "data" top: "ip" inner_product_param { num_output: 2 } } layer { name: "loss" type: "SoftmaxWithLoss" bottom: "ip" bottom: "label" top: "loss" }. Slika 6: Primer majhne nevronske mreže v tekstovni (levo) in grafični obliki (desno).. 2.2.3 Nastavitev učenja Ogrodje Caffe ima dve vrsti parametrov. To so parametri ukaznega orodja »caffe« in parametri za konfiguracijo in nadzor učenja oz. izvajanja, zapisani v tekstovni datoteki »solver.prototxt«. Ukazno orodje »caffe« ima na voljo nekaj ukazov, kot so možnost preizkusa zmogljivosti (angl. benchmark), testiranja modela in prikaz naprav GPE. Najpomembnejša možnost je učenje (angl. train) nevronske mreže. Na voljo je še nekaj zastavic, s katerimi nastavimo ostale parametre. Zastavica -gpu sporoča, da želimo učiti na grafični kartici, -solver skupaj s potjo do datoteke »solver« prebere datoteko nastavitev, -snapshot skupaj z datoteko ».shapshot« sprejme predhodno naučene uteži za nadaljevanje učenja, weights pa skupaj z ».caffemodel« uteži nudi možnost finega uglaševanja (angl. fine tuning). »Solver« je tekstovna datoteka, namenjena nastavitvi in nadzoru izvajanja nevronske mreže [30]. Na voljo je več vrst »solver« algoritmov, katerih glavna naloga je optimizacija, tj. minimizacija izgube (angl. loss). Najpogosteje se uporablja stohastični gradientni sestop.
(24) Tehnike globokega učenja in konvolucijske nevronske mreže. 13. (angl. Stohastic Gradient Descent, SGD). V datoteki je mogoče nastaviti večje število parametrov, najpomembnejši pa so: •. net: lokacija arhitekture nevronske mreže (model) – datoteka .prototxt;. •. max_iter: maksimalno število iteracij – končni pogoj učenja;. •. solver_mode: izbira strojne opreme, bodisi CPE ali GPE;. •. gamma: vrednost parametra gamma, med 0 in 1 (več v podpoglavju 2.2.4);. •. momentum: vrednost parametra momentum, med 0 in 1 (več v podpoglavju 2.2.4);. •. shapshot: interval, kako pogosto se shranjujejo uteži;. •. snapshot_prefix: lokacija in predpona datoteke z utežmi;. •. display: interval, kako pogosto se izpiše vmesni rezultat (izguba);. •. test_interval: število učnih iteracij med validacijsko iteracijo;. •. test_iter: število validacijskih iteracij v testni fazi (»mini-batch«);. •. lr_policy: način učenja, privzeto po koraku (»step);. •. stepsize: interval, ko se bo izvedel naslednji korak;. •. base_lr: parameter »learning rate«, med 0 in 1.. 2.2.4 Hiperparametri V tem podpoglavju si bomo natančneje pogledali, kako poteka učenje nevronske mreže ter hiperparametra gama in moment. γ – gama Iz opisa parametrov v dokumentaciji Ogrodja Caffe razberemo, da parameter γ vpliva na razmerje med trenutnim korakom in hitrostjo učenja α. Običajno želimo, da se hitrost učenja manjša s številom izvedenih korakov učenja. Razmerje opisuje enačba (1):. α =base_lr∗γ floor (iter/ step). Parametri: •. α: trenutna hitrost učenja;. •. base_lr: začetna hitrost učenja, fiksni parameter [privzeta vrednost: 0,1];. •. γ: hiperparameter za nadzor hitrosti učenja [privzeta vrednost: 0,8];. •. floor: funkcija zaokroževanja navzdol;. •. iter: trenutna iteracija;. (1).
(25) Tehnike globokega učenja in konvolucijske nevronske mreže •. 14. step: količina iteracij za izvajanje, ki predstavlja en korak [privzeta vrednost: 500].. Moment Dokumentacija opisuje parameter moment (angl. momentum, μ) kot utež prejšnje posodobitve [30]. Učni algoritem SGD v ogrodju Caffe izračuna posodobitev uteži W kot linearno kombinacijo negativnega gradienta ∇L(W) in vrednosti prejšnje posodobitve, pomnožene s parametrom μ. Izračuna se preko enačb (2) in (3).. V t +1=μ V t −α ∇ L(W t ). (2). W t +1=W t +V t +1. (3). Parametri: • t: indeks iteracije; •. Vt: sprememba uteži v koraku t;. •. μ: vrednost momenta;. •. α: hitrost učenja;. •. Wt: vrednosti uteži v koraku i;. •. ∇L(Wt): gradientni vektor v koraku t.. 2.2.5 Najpogosteje uporabljeni sloji Konvolucijski sloj Konvolucijski sloj je najosnovnejši gradnik konvolucijskih nevronskih mrež. Glavna funkcija konvolucije je filtriranje vhodnih slik oz. podatkov iz prejšnjih slojev. Delovanje sloja posnema matematično operacijo konvolucije. Ta sprejme dve funkciji, f in g, ter ustvari tretjo funkcijo, ki je kompozicija vhodnih dveh. Pri signalih se konvolucija uporablja za aplikacijo filtrov s končnim impulznim odzivom (FIR), na slikah pa je poznana kot lokalni operator. Konvolucijski sloj se uporablja na slikovnih podatkih, saj posnema delovanje vizualnega korteksa v možganih [23]..
(26) Tehnike globokega učenja in konvolucijske nevronske mreže. 15. Sloj ni polno povezan, ampak ima manjše število prostih parametrov, ki se v obliki okenske funkcije sprehajajo po slikah. Na posamezno konvolucijsko jedro gledamo kot na družino nevronov, ki na različnih lokacijah slike izvajajo isto operacijo. Vhod sloja nevronov sprejme podatke iz prejšnjega sloja, izvede operacijo ter obdelane podatke poda na izhod naslednjemu sloju. Na primer, če smo nevronsko mrežo učili za detekcijo obrazov, potem imajo filtri v prvem sloju funkcijo detektorja robov. V naslednjem sloju se iz črt »sestavijo« oblike, ki se v kasnejših slojih združijo v dele obraza. Primer takšnega delovanja prikazuje slika 7.. [31]. Slika 7: Primer delovanja vizualne nevronske mreže (vir: [31]). Konvolucijski sloj ima naslednje lastnosti. Število vhodov določa velikost posameznega konvolucijskega jedra oz. velikost filtra, število izhodov pa število konvolucijskih jeder. Nastaviti je treba tudi korak premika (angl. stride) in velikost dodatnega roba okoli slike (angl. padding). Konvolucijski sloj se pogosto uporablja z aktivacijskim slojem ReLU in združevalnim slojem (angl. pooling). Parametri sloja: •. num_output: število izhodov oz. število konvulucijskih jeder,. •. kernel_size: velikost jedra (velikost okna);.
(27) Tehnike globokega učenja in konvolucijske nevronske mreže •. pad: velikost roba okoli slike;. •. stride: korak premika okna;. •. weight_filter: inicializacija uteži.. 16. Sloj ReLU Aktivacijski sloj ReLU (angl. Rectified Linear Unit) opravlja vlogo nelinearne prenosne funkcije [32]. Namesto ReLU se lahko uporabi tudi druge funkcije, kot sta sigmoidna funkcija ali hiperbolični tangens. ReLU je pri učenju bistveno hitrejši, brez večjih izgub v natančnosti. Ta sloj nima nobenih posebnih parametrov. Enačba za aktivacijo ReLU je sledeča: f (x)=max(0 , x) , kjer x običajno pomeni obtežen vhod v nevron.. (4). Združevalni sloj (angl. pooling) Pri opisu sloja konvolucije smo pogledali primer slike, robov, likov in delov obraza (slika 7). Tipično sliko sestavlja veliko število pikslov, manjše število robov in še manjše število sestavljenih oblik. Konvolucijski sloj zaradi več različnih filtrov tipično veča število kanalov, zato se lahko količina podatkov v nevronski mreži skokovito veča. Za zmanjšanje števila podatkov se uporablja tehnika podvzorčenja (angl. downsampling). Tipično obravnavamo 4 sosednje elemente na sliki, izberemo pa največjo vrednost in jo pošljemo na izhod. Izhod sloja je tako slika, velikosti ene četrtine vhodne slike. Takšnemu postopku rečemo maksimalno združevanje (angl. max pooling). Delovanje prikazuje slika 8.. [33].
(28) Tehnike globokega učenja in konvolucijske nevronske mreže. 17. Slika 8: Shema delovanja združevalnega sloja [33]. Poleg zmanjševanja količine podatkov, združevanje pomaga pri translacijski invarianci. Podvzorčenje z izbiranjem maksimalnih vrednost omogoča določanje pomembnih delov v soseščini. Parametri sloja: • • •. kernel_size: velikost okna za podvzorčenje; pool: način izbire elementa – način »MAX« izbere največji element; stride: korak premika okna.. Aktivacijski sloj Softmax Softmax je oblika matematične logistične funkcije. Le-ta preslika vrednosti vektorja z intervala realnih števil na območje med 0 in 1. Seštevek preslikanih vrednosti pa je enak 1. Glavna prednost funkcije softmax, v primerjavi z drugimi logističnimi funkcijami, je delovanje z več dimenzijami in upoštevanje negativnih števil ter zvezna odvedljivost. Slednja lastnost je pomembna pri optimizaciji na osnovi gradientov. V nevronskih mrežah, namenjenih za klasifikacijo, se sloj Softmax uporablja kot izhodni aktivacijski sloj. V spodnjem delu sta zapisani matematična enačba funkcije softmax (enačba 5) in implementacija v jeziku Python (koda 1)..
(29) Tehnike globokega učenja in konvolucijske nevronske mreže. σ :ℝ K →[0,1]K z e σ ( z) j= K for j=1, ..., K z ∑e. 18. j. k. (5). k=1. z=[z_1, z_2, ... z_K]. def softmax(z, axis=-1): return np.exp(z)/np.sum(np.exp(z),axis, keepdims=True). Koda 1: Večdimenzionalna implementacija funkcije softmax. Sloj SoftmaxWithLoss Ta sloj je neposredno povezan z aktivacijskim slojem Softmax. Odgovoren je za izračun napake predikcije mreže. Zaradi izboljšanja numerične stabilnosti sta v njem združena sloj Softmax in sloj Multinomial Logistic Loss. Izhod je »loss«, na katerega lahko v primeru klasifikacije gledamo kot izguba pri napovedi. Vhoda v sloj sta dva vektorja (ali matriki), in sicer izračunan softmax nad podatki iz prejšnjega sloja in pričakovana labela (učni podatek). Med njima izračunamo razliko in ta vrednost se upošteva za učenje, tj. za spreminjanje uteži na drugih slojih. Sloj InnerProduct Sloj InnerProduct, poznan tudi kot polno povezan sloj (angl. fully-connected), izračuna notranji produkt vhodov in učljivih uteži. Izhod sloja je enodimenzionalni vektor z določljivim številom elementov – številom izhodnih kanalov sloja. Sloj se zelo pogosto uporablja za klasifikacijo, in sicer kot zadnji sloj pred slojem Softmax. Sloj Accuracy Sloj izračuna mero natančnosti med izhodom mreže in pričakovanim izhodom. Natančnost se izračunana kot število pravilno klasificiranih primerov deljeno z vsemi primeri. S pomočjo te metrike pogosto primerjamo druge razvrščevalne algoritme. Ogrodje Caffe omogoča izračun tako splošne (skupne) natančnosti kot natančnosti za posamezen razred..
(30) Tehnike globokega učenja in konvolucijske nevronske mreže. 19. 2.2.6 Naučena mreža Rezultati učenja nevronske mreže so uteži nevronske mreže. Ogrodje Caffe uteži shrani v datoteko s končnico ».caffemodel«, v kateri se nahajajo serializirane binarne vrednosti uteži vsakega posameznega sloja. Poleg »caffemodel« se shrani še datoteka s končnico ».solverstate«, ki omogoča nadaljevanje učenja iste nevronske mreže. Uteži kasneje uporabimo za izvajanje nevronske mreže. Iste naučene uteži lahko uporabimo tudi za inicializacijo pri učenju drugačnih nevronskih mrež, ki rešujejo sorodne probleme. Za takšno učenje uporabljamo izraz prenosno učenje (angl. transfer learning). Za ogrodje Caffe je na voljo več naučenih mrež na spletni strani Caffe Model ZOO [22]. 2.2.7 Primer zagona učenja (LeNET) V podpoglavju 4.5 bomo opisali učenje naše mreže, zato bomo v tem podpoglavju pokazali preprost primer učenja mreže LeNET [34]. Ta pionirska konvolucijska mreža je namenjena razpoznavanju rokopisa števk. Na voljo je baza MNIST [35], ki vsebuje 60.000 učnih in 10.000 testnih sličic, z roko napisanih števk, velikosti 28 × 28 slikovnih elementov. Najprej potrebujemo izvedljiv program »caffe«, ki ga prevedemo iz izvorne kode. Sličice MNIST s priloženimi orodji preoblikujemo v bazi LMDB (»Lightning Memory-Mapped Database«), in sicer v učno bazo mnist_train_lmdb in v testno bazo mnist_test_lmdb. Nato pripravimo arhitekturo mreže po vzoru LeNET in jo zapišemo v datoteko lenet_train_test.prototxt.. Arhitektura. vsebuje. dva. konvolucijska. sloja,. vsakemu. konvolucijskemu sloju sledi sloj Pooling, na koncu pa sta še dva polno povezana sloja ter sloj Softmax za ocenitev verjetnosti desetih števk. Potrebujemo še datoteko z nastavitvami – tj. »solver«, ki ga poimenujemo kot lenet_solver.prototxt. V njej so zapisani parametri, potrebni za izvajanje nevronske mreže, kot so število testnih iteracij, moment, gama, končno število iteracij itd. Učenje nevronske mreže zaženemo kot: $ caffe train –solver lenet_solver.prototxt. Med učenjem se vsakih 100 iteracij izpiše izguba nad učnimi podatki, vsakih 500 iteracij pa še izguba nad nevidenimi testnimi podatki..
(31) Tehnike globokega učenja in konvolucijske nevronske mreže Učenje. se. zaključi. po. 10.000.. iteraciji,. kot. rezultat. 20 pa. dobimo. datoteko. lenet_10000.caffemodel.. 2.3 Arhitektura SegNet SegNet [12] je arhitektura globoke konvolucijske nevronske mreže za ogrodje Caffe, namenjena segmentaciji posameznih pikslov na sliki (angl. pixel-wise segmentation). Je globoka, popolnoma konvolucijska (angl. fully convolutional) nevronska mreža, razdeljena v dva dela: kodirnik (angl. encoder) in dekodirnik (angl. decoder).. Slika 9: Shema arhitekture SegNet (vir: [36]) Na sliki 9 je predstavljena arhitektura »segnet-basic«, ki ima štiri nivoje globine. Leva polovica, kodirnik, predstavlja izdvajanje nizko ločljivostnega zemljevida značilnic (angl. low resolution feature map). Ta del je sestavljen iz slojev konvolucije, ReLU in združevanja. Desni del predstavlja dekodirnik, ki preslika nizko ločljivostne značilnice v značilnice izvorne ločljivosti. Te značilnice predstavljajo labele (razrede) segmentov za posamezni piksel. V tem delu so uporabljeni naslednji sloji: nadvzorčenje (angl. upsample), konvolucijski in Softmax. V nadaljevanju si bomo pogledali posebnosti, ki jih najdemo v arhitekturi SegNet in niso prisotne v običajnem ogrodju Caffe. 2.3.1 Vhodni sloj (DenseImageData) Projekt SegNet implementira lasten vhodni sloj, imenovan DenseImageData. Običajni vhodni sloj, ki je priložen ogrodju Caffe, »ImageData« prebere tekstovno datoteko, v kateri so napisane absolutne poti do slik in njihove labele. SegNet pa kot temeljno resnico potrebuje segmentirano sliko, kjer je na lokacijah pikslov zapisan indeks segmenta..
(32) Tehnike globokega učenja in konvolucijske nevronske mreže. 21. Sloj ravno tako sprejme tekstovno datoteko, kjer so po vrsticah zapisani pari lokacij slike in segmentacijski rezultat, labela. Segmentirana labela je enake dimenzije kot vhodna slika, le da ima namesto pikslov numerične vrednosti razredov. V priloženem primeru je 11 razredov – 10 za nas zanimivih razredov in 11. razred, ki predstavlja vse ostalo. Izhodni podatek sloja sta torej dve sliki – podatek in njena »labelna slika«. 2.3.2 Prirejeni združevalni sloj Glavna naloga združevalnega sloja (angl. pooling) je zmanjšanje velikosti posamezne slike (posameznega kanala) in izbiranje značilnic (angl. feature). Je filter, ki zmanjša velikost slike na eno četrtino, izbira pa po pravilu maksimalne vrednosti (angl. max-pooling). V primeru SegNet-a so izhodi, poleg pomanjšane slike še lokacije značilnic (angl. maxpooling indices), ki so bile izbrane. Te lokacije uporabi sloj nadvzorčenje na istem nivoju pri dekodirniku. 2.3.3 Sloj nadvzorčenja Funkcija sloja nadvzorčenje (angl. upsample) je obratna funkciji združevalnega sloja. Sloj vhodno plast poveča za faktor 4. Poleg vhodne slike sloj nadvzorčenja sprejme še lokacije značilnic iz združevalnega sloja na istem nivoju (slika 10). Glede na to lokacijo znotraj polja 2 × 2 vpiše vrednost iz vhoda. Rezultati so redki zemljevidi značilnic (angl. sparse feature maps), ki jih naslednji konvolucijski sloj spremeni v goste zemljevide značilnic (angl. dense feature maps). S tem trikom SegNet zmanjša število učnih parametrov, kar pomeni hitrejše in manj pomnilniško zahtevno učenje ter z majhnimi izgubami v smislu natančnosti pri načinu »inference«..
(33) Tehnike globokega učenja in konvolucijske nevronske mreže. 22. Slika 10: Sloj nadvzorčenja, ki sprejme max-pooling indices (vir: [12]). 2.3.4 Faza kodiranja-dekodiranja Celotno shemo delovanja ene faze kodiranja-dekodiranja vidimo na sliki 11. conv3 (Convolution) kernel size: 7 stride: 1 pad: 3. 64. conv3. pool3 (MAX Pooling) kernel size: 2 stride: 2 pad: 0 relu3 (ReLU). pool3. pool3_mask. upsample3 (Upsample). upsample3. conv_decode3 (Convolution) kernel size: 7 stride: 1 pad: 3. Slika 11: Shema delovanja kodiranja-dekodiranja Na sliki je prikazano delovanje na tretjem nivoju globine arhitekture »segnet-basic«. Na levi strani vidimo konvolucijski sloj conv3, ki mu sledi prirejen združevalni sloj pool3. Ta ima dva izhoda, in sicer primarni, podatkovni izhod (pool3 v sivem šestkotniku), ki gre v nadaljnjo obdelavo (nivo globine 4), ter izhod pool3_mask, ki vsebuje prej omenjene indekse sloja Max-Pooling. Slednji so povezani s tretjim nivojem kodiranja, slojem upsample3. Ta poleg indeksov sloja Max-Pooling sprejme še podatke iz prejšnjega, globljega nivoja. Izhodni podatki gredo na sloj conv_decode3, ki izvaja funkcijo dekonvolucije..
(34) Arhitektura KeypointNet. 23. 3 Arhitektura KeypointNet V tem poglavju si bomo pogledali naše modifikacije, ki smo jih vnesli v arhitekturo SegNet za namen detektiranja karakterističnih točk. Našo modificirano arhitekturo smo poimenovali KeypointNet. Ker je cilj iskanje karakterističnih točk, in ne segmentacija, smo arhitekturo SegNet nekoliko spremenili. Ohranili smo veliki sredinski del mreže – sloje kodirnika in dekodirnika, zamenjali pa smo vhodne in izhodne sloje. V nadaljevanju si bomo pogledali te modificirane sloje.. 3.1 Modificirani vhodni sloj Pri vhodu je bistvena razlika v primerjavi z arhitekturo SegNet (glej podpoglavje 2.3), saj namesto ene slike z labelami (slika 12), kjer številke pomenijo razred pripadajočemu pikslu, uporabljamo več slik. Za vsako karakteristično točko uporabimo svojo labelno sliko, ki vsebuje Gaussovo jedro, poravnano z želeno lokacijo točke (slika 13). V nadaljevanju bomo pri uporabi izraza labela mislili na sliko s točko.. Slika 12: Arhitektura SegNet: Vhodna slika (levo) in njena labela (desno) [36].
(35) Arhitektura KeypointNet. 24. Slika 13: Arhitektura KeypointNet: vhodna slika (levo) in 10 točk kot pomanjšane labelne slike (desno) Za uporabo Gaussovega jedra smo se odločili zaradi človeškega faktorja oz. napak, ki jih označevalec dela pri označevanju točk. Na ne dovolj natančno označenih slikah je pravilna lokacija še vedno označena z neničelno vrednostjo, čeprav ne sovpada z maksimumom jedra. Glede na kefalometrični atlas [8] se v klinični praksi dovoljuje napaka v položaju točke, ki je manjša od 2 mm. Na primerno kalibriranih slikah bi velikost Gaussovega jedra odražala to napako. Za eno vhodno rentgensko sivinsko sliko imamo tako N label. V praktičnem delu našega magistrskega dela smo detektirali 10 karakterističnih točk, in sicer 5 točk mehkega tkiva in 5 točk kostnega tkiva. Ker slikovni formati ne podpirajo enajst slojev (slika in 10 label), smo uporabili sloj »Data«, ki kot zaledje (angl. backend) uporablja podatkovno bazo LMDB. Pretvorba slik in label je opisana v podpoglavju 4.1.. 3.2 Izhod napovedi Izhod arhitekture SegNet določa, s kakšno verjetnostjo posamezen piksel pripada različnim razredom. Cilj našega magistrskega dela pa je ugotoviti, kateri piksel najbolje opisuje izbrano karakteristično točko. Aktivacijsko funkcijo softmax smo zamenjali s sigmoidno tudi zato, ker zanjo obstaja še izgubna varianta sloja (SoftmaxWithLoss). Ta izračuna izgubo med labelo in njeno napovedjo. Tako kot funkcija softmax je tudi sigmoidna funkcija logistična. Funkcija preslika poljubno realno število v realno število med 0 in 1. Rezultat funkcije softmax je odvisen od vhoda in.
(36) Arhitektura KeypointNet. 25. ostalih izhodov (skupni seštevek je 1), medtem ko je pri sigmoidni funkciji vsak izhod neodvisen. Graf funkcije prikazuje slika 13.. Slika 14: Graf sigmoidne funkcije [37] Cilj predikcije oz. faze naprej je dobiti neke vrste verjetnostno sliko za vsako točko (v matematičnem smislu ne gre za čisto verjetnostno funkcijo, saj seštevek na posamezni lokaciji piksla ni 1), pri čemer bo ustrezna pozicija imela največjo verjetnost. Vsaka karakteristična točka ima svoj izhod, ki je sivinska slika, podobna vhodni labeli. Vrednost se izračuna po sledeči enačbi: S( x)=. 1 . 1+e− x. (6). Matematični zapis sigmoidne funkcije 6 in Python implementacija (koda 2). def sigmoid(x): return np.power(1+np.exp(-x), -1). Koda 2: Python implementacija sigmoidne funkcije. 3.3 Izhod učne faze Tako kot SegNet tudi naša modifikacija uporablja navzkrižno entropijo (angl. sigmoid cross entropy). Razlika je pri uporabi, in sicer v naši arhitekturi naredimo navzkrižno entropijo med dvema slikama ter uporabimo sigmoidno funkcijo. Rezultat navzkrižne entropije meri »nepodobnost« med dvema slikama (minimizacijska funkcija). Le-ta izračuna izgubo med vsemi pari label in napovedmi, ter uporabi to vrednost za vzvratno učenje nevronske mreže (angl. back-propagation)..
(37) Arhitektura KeypointNet. 26. Izguba ne pove veliko o dejanski napaki detekcije točke, saj je treba iz napovedi dobiti še lokacijo maksimalne vrednosti. Napaka se namreč izračuna kot evklidska razdalja med točko iz napovedi in točko iz labele. Postopek pridobivanja točke si bomo pogledali v podpoglavjih 4.5 in 5.2..
(38) Eksperimentalno okolje. 27. 4 Eksperimentalno okolje V tem poglavju bomo predstavili eksperiment, ki nam bo služil kot orodje za dokazovanje oz. zavračanje teze in hipotez magistrske naloge. Kot primer karakterističnih točk smo vzeli kefalometrične točke na lateralnem kefalogramu. Za detektor smo izbrali obstoječo arhitekturo globokega učenja SegNet in jo modificirali v našo arhitekturo KeypointNet. V naslednjih podpoglavjih si bomo podrobneje pogledali korake našega eksperimenta. Najprej bomo opisali slike, ki jih imamo na voljo. Sledi opis pretvorbe v enotni format. Na slikah je treba ročno označiti kefalometrične točke. Naslednji korak je pretvorba slik in označenih točk v obliko, ki jo bere nevronska mreža. Nato bomo predstavili zagon učenja nevronske mreže na oddaljenem strežniku s hitrimi grafičnimi karticami. Naučeno mrežo je potrebno testirati. Kot zadnji del eksperimenta si bomo pogledali še poskus optimizacije hiperparametrov nevronske mreže.. 4.1 Poenotenje formatov Pri pregledu 124 unikatnih slik s kefalometrične naprave smo ugotovili, da je na vseh slikah zajet lateralni kefalogram, vendar se slike bistveno razlikujejo med seboj (slika 15). Ugotavljamo, da so bile nekatere slike zajete z različnimi napravami, spet druge pa z isto napravo, a z različnimi nastavitvami. Opažamo še, da se na nekaterih slikah ne vidijo temni detajli, nekje svetli detajli, nekatere slike pa ne zajemajo celotne glave (manjka del zatilja). Odločili smo se za uporabo vseh podatkov, tudi tistih nekoliko slabših, saj smo želeli uporabiti čim več podatkov za učenje in na ta način povečati odpornost mreže na slabše vhode v nevronsko mrežo.. Slika 15: Različne vhodne slike. Od leve proti desni: dobra slika, slika z manjkajočim zadnjim delom lobanje, pretemna slika in presvetljena slika..
(39) Eksperimentalno okolje. 28. Te slike so bile tudi v različnih formatih, kot so: jpg, png, tiff, in dcm (dicom). Da bi poenotili format in ohranili podatke, smo se odločili za format png, saj omogoča različne bitne globine. Podatki so v 8-bitni »BYTE« ali v 16-bitni »FLOAT« globini. Pri pretvorbi formatov jpg, png in tiff v png smo uporabili orodje »convert« iz paketa ImageMagick. Za pretvorbo smo uporabili naslednje ukaze (koda 3): ls | grep -i jpg$ | while IFS= read -r FILENAME; do convert "${FILENAME}" "${FILENAME%.*}.png"; done ls | grep -i pnm$ | while IFS= read -r FILENAME; do convert "${FILENAME}" "${FILENAME%.*}.png"; done ls | grep -i tif$ | while IFS= read -r FILENAME; do convert "${FILENAME}" "${FILENAME%.*}.png"; done. Koda 3: Pretvorba različnih slikovnih formatov v format png. Format dicom smo v png pretvorili v dveh korakih. Orodje »dcmj2pnm« iz paketa »DCMTK« omogoča pretvorbo dcm formata v pnm. V drugem koraku pa spet uporabimo »convert« za pretvorbo iz formata pnm v png (koda 4). ls | grep -i dcm$ | while IFS= read -r FILENAME; do dcmj2pnm "${FILENAME}" "${FILENAME%.*}.pnm"; done ls | grep -i pnm$ | while IFS= read -r FILENAME; do convert "${FILENAME}" "${FILENAME%.*}.png"; done. Koda 4: Pretvorba formata dicom v png v dveh korakih.. 4.2 Označevanje podatkov V tem podpoglavju si bomo podrobneje pogledali označevanje (labeliranje) podatkov. Rentgenske slike, ki smo jih imeli na voljo, niso bile označene, zato smo kefalometrične točke označili sami. Kot glavni vir znanja o kefalometričnih točkah smo uporabili atlas kefalometričnih točk [8]. Izmed vseh točk, ki so opisane v tem atlasu, smo se odločili, da za naše eksperimentalno delo izberemo 10 točk: 5 točk mehkega in 5 točk kostnega tkiva. Za izbiro posameznih točk smo se odločili po lastni presoji, saj nismo imeli na voljo eksperta iz domenskega področja (ortodont). Treba je poudariti, da se potek naše raziskave in obdelovalni koraki ne bi razlikovali v ničemer od trenutne sheme, četudi bi nam pomagal slike označevati ekspert. Le položaj oznak bi bil seveda popolnoma pravilen. Z našo raziskavo želimo zgolj potrditi pravilnost zasnove oz. koncepta (angl. proof of concept). Odločili smo se za naslednje točke kostnega tkiva. Uporabljamo angleško-latinske izraze. V oklepaju je zapisan končni vrstni red točk, kakor je urejen v podatkih za obdelavo. Izbor točk kostnega tkiva:.
(40) Eksperimentalno okolje. 29. 1. Nasion – presek med čelnico in nosno kostjo (točka št. 2); 2. Porion – točka na lobanji nad ušesnim kanalom (točka št. 9); 3. Opisthion – točka v spodnjem delu zatilja (točka št. 10); 4. Incision superius incisalis – točka na spodnjem delu zoba sekalnika (točka št. 6); 5. Gnathion – točka na kostnem delu brade (točka št. 8). Izbor točk mehkega tkiva: 1. Soft tissue Glabella – točka na kožnem tkivu med obrvmi (točka št. 1); 2. Soft tissue Nasion – točka na kožnem tkivu preseka med čelnico in nosno kostjo (točka št. 3); 3. Point ’T’ – točka »T« je na vrhu nosu (točka št. 4); 4. Labrale superius – najbolj sprednja točka zgornje ustnice (točka št. 5); 5. Soft tissue gnathion – točka na sredini med sprednjim in spodnjim delom brade na mehkem tkivu (točka št. 7).. Slika 16: Izbrane točke na kompozitni sliki Slika 16 prikazuje izbrane točke mehkega tkiva (»mehko 1« do »mehko 5«) in kostnega tkiva (»trdo 1« do »trdo 5«). Slika je sestavljena iz več slik iz atlasa [8], tako da so prikazane vse nam pomembne točke..
(41) Eksperimentalno okolje. 30. Za označevanje točk na slikah smo izdelali grafično aplikacijo s pomočjo knjižnice za izris grafov matplotlib [38]. Programski jezik Python in matematična knjižnica numpy skupaj z grafično knjižnico matplotlib ustvarjata Matlab-u podobno okolje. Aplikacija izbrano sliko prikaže preko celotnega zaslona. Tako označevalec vidi največ detajlov slike hkrati in začne s sekvenčnim označevanjem 10 točk v predvidenem vrstnem redu. Ob pritisku na levi miškin gumb se točka shrani in prikaže preko slike. Če se označevalec zmoti, lahko zadnjo točko odstrani s sredinskim gumbom (kolešček) in jo nato še enkrat označi. Nekatere točke so lahko izven slike ali pa zaradi premočne oz. prešibke osvetlitve niso vidne. Take točke se označi z desnim miškinim gumbom, tako da imamo tudi podatek o »nevidnih točkah«. Točke so med seboj povezane s črto, da je vidno sosledje točk. Vrstni red označevanja poteka v smeri urinega kazalca, in sicer od zgornjih točk na čelu, preko brade do zatilja, kakor prikazuje slika 17. Tak vrstni del je označen tudi v zgornjem opisu točk (številke zapisane v oklepaju).. Slika 17: Prikaz 10 označenih točk na rentgenski sliki po postopku ročnega označevanja. Točke so med seboj povezane s črto zaradi lažje orientacije in vizualizacije.. V ozadju se točke shranjujejo v vektor orodja numpy [39], in sicer gre za koordinate slike, kjer je bil miškin gumb. »Nevidna točka« je označena kot (0,0) in se kasneje ročno.
(42) Eksperimentalno okolje. 31. obravnava kot posebni primer. Izhod programa je tekstovna datoteka z istim imenom kot slika in dodatno končnico .txt. V datoteki so po vrsticah ločene točke, z vejico pa koordinati X in Y. Poleg seznama hranimo še sliko v formatu png končne risalne površine aplikacije za morebitni poznejši pregled označevanja (slika 17).. 4.3 Predobdelava podatkov V tem podpoglavju si bomo pogledali nadaljnje korake pri pripravi podatkov za učenje z nevronsko mrežo. Slike smo najprej spremenili v fiksno velikost 480 × 360 slikovnih elementov. Ravno tako moramo ustrezno preslikati označene točke, ki jih nato izrišemo z Gaussovimi jedri. Za vsako točko naredimo svojo sliko, tj. labelo (za nas labela pomeni sliko z oznakami). Slike in njihove labele nato zapakiramo v podatkovno bazo, iz katere bere nevronska mreža. 4.3.1 Skaliranje slik Arhitektura uporabljene nevronske mreže pričakuje vhodne slike ločljivosti 480 × 360 pikslov, naše slike pa so bistveno večje in različnih ločljivosti. Slike imajo tudi različna razmerja med višino in širino. Prvi korak pri skaliranju je sprememba razmerja stranic slike. Vsekakor ne želimo spremeniti razmerja stranic, saj bi s tem pokvarili vsebino. Ne želimo niti odrezati dela slike, saj bi na tak način lahko izgubili katero izmed točk na sliki. Sliki se najprej doda črn rob, tako da le-ta dobi ustrezno razmerje. Sledi zmanjšanje velikosti slike. Pri tem smo uporabili metodo transform.resize iz paketa skimage [40]. Ta omogoča pomanjšanje slike brez spremembe razmerja stranic. 4.3.2 Skaliranje točk Poleg skaliranja slik smo skalirali tudi položaje točk. Slednje smo preprosto množili s skalirnim faktorjem in dobili pozicije, ki ustrezajo točkam na pomanjšani sliki. 4.3.3 Generiranje label Da bi odpravili potencialno napako označevalca pri označevanju in naučili mrežo detektirati tudi sosednje točke, vse z namenom povečanja robustnosti naše rešitve, bomo uporabili naslednji postopek. Vsaka karakteristična točka bo predstavljena s svojo sliko, imenovano labela. Na lokaciji, kjer je vnesel oznako označevalec, bo vrednost enaka 1, z oddaljenostjo pa bo ta vrednost padala. Na te vrednosti lahko na nek način gledamo kot na kvazi verjetnost, da je točka ustrezna. Za gladilno funkcijo smo uporabili Gaussov filter. V.
(43) Eksperimentalno okolje. 32. središče maske, velikosti 31 × 31 pikslov, vstavimo vrednost 1, nato pa masko gladimo s funkcijo ndimage.filters.gaussian_filter (sigma je 4) iz orodja scipy [41]. Zaradi glajenja z Gaussovim filtrom se vrednost v središču maske zmanjša, zato sliko normaliziramo in tako dobimo v središču spet vrednost 1. Masko nato vstavimo v prazno labelo s središčem na poziciji ustrezne karakteristične (v našem primeru kefalometrične) točke. Če je točka blizu roba slike, masko ustrezno odrežemo z uporabo funkcije pad. Rezultat tega postopka je 10 različnih label za posamezno sliko. Na koncu generiramo še vhodno sliko z dodanimi vsemi labelami za ročni pregled pravilnosti. Primer vhodne slike in generiranih točk prikazuje slika 18.. Slika 18: Primer generiranja label: slika z dodanim črnim robom na desni strani (levo), sredina: tri labele za tri različne karakteristične točke (sredina), in originalna slika z dodanimi labelami (desno).. 4.3.4 Izdelava učne in testne množice Za ocenjevanje uspešnosti učenja umetne inteligence (v našem primeru nevronskih mrež) moramo podatke razdeliti v učno in testno množico. Z učno množico učimo nevronsko mrežo, s testno pa ocenimo kakovost naučene nevronske mreže. V učno množico smo dali 100 slik, v testno pa 24 slik. Slednje smo naključno razdelili s pomočjo funkcije np.random.permutation iz orodja numpy [39]. Omenimo še, da smo slike razdelili samo enkrat (in ne ob vsakem zagonu). Na ta način smo obdržali konsistenco (tj. vrstni red) podatkov, kar je bilo ključno za poznejši poskus optimizacije hiperparametrov. Že v podpoglavju 4.1 smo omenili, da so bile slike različnih tipov naključno pomešane. Tudi vrstni red slik znotraj obeh množic je bil naključen, saj uporabljeni sloj za branje bere podatke sekvenčno. 4.3.5 Pisanje podatkov v bazo LMDB Naši učni podatki predstavljajo sivinsko sliko rentgenskega posnetka in 10 labelnih sivinskih slik, tj. ena labela za vsako kefalometrično točko. Standardni slikovni formati podpirajo 3 kanale (npr. format JPEG kanale R, G in B) ali kvečjemu 4 (npr. format PNG.
Outline
Related documents
Kayıhan, G., Comparison of Physical Fitness Levels of Cadets of Ankara Police College [“Ankara Polis Koleji Öğrencilerinin Fiziksel Uygunluk
Mortality prediction in patients with severe septic shock: a pilot study using a target metabolomics approach.. A metabonomic approach to early prognostic evaluation of experimental
The functional landscape of outsourcing relationship governance consists of seven broad categories Performance management Contract management Contracts administration Sourcing
Specifically, we expect to replicate, for empathic accuracy in the patient’s pain severity and interference, the correlations between certain personality traits (i.e., agreeableness
The risk measures were found for the Stockholm stock exchange index (OMX30S), the Copenhagen stock exchange (OMXC20), the Helsinki stock exchange (OMXH25), the Deutscher
a frame, a stock receptacle with a screen~ therein, a diaphragm mounted in said recep tacle, an apertured pneumatic cylinder com municating with the space underneath said
Various studies are available on Pakistan, which estimated return to education with respect to school attainment (continues variable) and different levels of education
The relationship of return on the stock over the predicted adjustment period to the change in transaction costs (bid-ask spread, brokerage fees and STT), average market