Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Greške
  • Metode segmentacije slike. Prikaz rezultata pomoću slike u boji

Metode segmentacije slike. Prikaz rezultata pomoću slike u boji

Pragovanje je vjerovatno najjednostavniji metod segmentacije i privukao je veliku pažnju profesionalaca. Metoda je fokusirana na obradu slike, čija se pojedinačna homogena područja razlikuju po prosječnoj svjetlini. Najjednostavniji i ujedno često korišten tip segmentacije je binarna segmentacija, kada postoje samo dvije vrste homogenih područja. U ovom slučaju, transformacija svake tačke izvorne slike u izlaznu se izvodi prema pravilu:

(7.1)

gdje je jedini parametar obrade koji se zove prag. Nivoi izlazne svjetline i, mogu biti proizvoljni, obavljaju samo funkcije oznaka, uz pomoć kojih se vrši obilježavanje rezultirajuće karte - dodjeljivanje njenih tačaka klasama ili, respektivno. Ako se rezultirajući proizvod priprema za vizualnu percepciju, tada njihove vrijednosti često odgovaraju razinama crne i bijele. Ako postoji više od dvije klase, tada se tokom postavljanja praga mora postaviti porodica pragova koja odvaja svjetlinu različitih klasa jedna od druge.

Centralno pitanje segmentacije pragova je definicija pragova, što bi trebalo da se uradi automatski. Metode za automatsko otkrivanje praga koje se trenutno koriste detaljno su opisane u pregledu. Raznolikost metoda je veoma velika, ali se uglavnom zasnivaju na analizi histograma originalne slike.

Neka je histogram originalne digitalne slike. Pretpostavimo da je njegov raspon svjetline u rasponu od 0 (nivo crne boje) do 255 (nivo bijele boje). Početna ideja histogramske metode za određivanje praga bila je zasnovana na pretpostavci da su distribucije vjerojatnosti za svaku klasu unimodalne (sadrže jedan vrh), a točke granica koje razdvajaju područja različitih klasa na slici su male. Ove pretpostavke treba ispuniti histogramom, koji ima multimodalni karakter. Pojedinačni modovi odgovaraju različitim klasama, a doline koje ih razdvajaju odgovaraju graničnim regijama, koje su male po broju tačaka uključenih u njih. Pragovi segmentacije se nalaze prema položaju udubljenja. Rice. 7.1 ilustruje gore navedeno u odnosu na slučaj dvije klase. U stvarnosti, izuzetno je rijetko koristiti tako jednostavna razmatranja za odabir praga. Činjenica je da su stvarni histogrami obično jako uvučeni, što je ilustrovano na slici 7.2, rezultat eksperimenta. Ovo služi kao prva prepreka za određivanje minimalnih bodova. Druga prepreka je to što su granice između homogenih područja na slici zamagljene, zbog čega se povećava nivo histograma u onim njegovim dijelovima koji predstavljaju tačke granice. Očigledno, to dovodi do smanjenja padova u histogramu ili čak do njihovog nestanka.

Slika 7.1 Za odabir praga binarne segmentacije

Jedan od efikasnih načina za prevazilaženje ovih poteškoća je određivanje praga na osnovu tzv. diskriminantnog kriterijuma. Razmotrimo ovaj pristup u odnosu na dvije klase, jer generalizacija na slučaj većeg broja klasa nije fundamentalni problem. Dakle, pretpostavljamo da je distribucija izgrađena za sliku koja sadrži dvije vrste područja, a postoji optimalna granica koja ih u određenom smislu razdvaja na najbolji način. Da bismo odredili optimalni prag, konstruišemo diskriminantnu funkciju, čiji argument ima značenje probnog praga. Njegova vrijednost koja maksimizira funkciju je optimalni prag. Razmotrimo konstrukciju diskriminantne funkcije.

Neka je hipotetička vrijednost praga koja dijeli distribuciju u dvije klase. U ovom slučaju obično ne igra veliku ulogu u tome kojoj od klasa će se dodijeliti tačke slike sa svjetlinom, zbog malog broja graničnih tačaka koje razdvajaju područja različitih klasa. Vjerovatnoća da slučajna tačka u okviru pripada klasi je

(7.2)

Slično, vjerovatnoća njegove pripadnosti nekoj klasi određena je formulom

(7.3)

štaviše, zbog normalizacije distribucije vjerovatnoće, jednakost

Nadalje, pretpostavljamo da područje distribucije, ograničeno tačkom, opisuje dio slike koji pripada i područje, - u vlasništvu. Ovo nam omogućava da uvedemo u razmatranje dvije distribucije i, koje odgovaraju i, konstruiramo ih iz distribucije koristeći izraze:

Ovdje je dijeljenje vjerovatnoćama normalizacija uvedenih uslovnih raspodjela.

Za ovako formirane distribucije vjerovatnoće mogu se pronaći momenti. Izrazi za matematička očekivanja i imaju oblik

(7.4)

gdje - nenormalizovano matematičko očekivanje za, je matematičko očekivanje za cijeli okvir.

Slično, dnevna varijansa cijelog okvira određena je izrazom

(7.6)

Da bismo konstruirali diskriminantnu funkciju, dodatno uvodimo još jedan energetski parametar, koji se zove međuklasna varijansa:

Bezdimenzionalna diskriminantna funkcija je definirana izrazom

(7.8)

Optimalnim, kao što je gore navedeno, smatra se prag koji ispunjava zahtjev

(7.9)

Objasnimo značenje kriterija (7.9). Imenilac u izrazu (7.8) je varijansa čitavog okvira i, prema tome, ne zavisi od vrednosti probnog praga koji deli sliku na klase. Dakle, maksimalna tačka izraza (7.8) poklapa se sa maksimalnom tačkom brojila, tj. je određena prirodom zavisnosti međuklasne varijanse (7.7) o pragu. Kako teži nuli, vjerovatnoća, kao što slijedi iz (7.2), također teži nuli. Pošto cijela slika pripada klasi, postoji tendencija. Posljedično, oba člana u (7.7) postaju jednaka nuli. Isto se primećuje i kod druge ekstremne vrednosti praga = 255. Zbog nenegativnosti veličina uključenih u (7.7) i (7.9), te jednakosti funkcije nuli na rubovima domene definicije, unutar ovog domena postoji maksimum čija se apscisa uzima kao optimalni prag. Treba napomenuti kvalitativnu prirodu ovih razmatranja. Detaljnije studije pokazuju, na primjer, da prilikom obrade nekih slika diskriminantna funkcija ima nekoliko maksimuma čak i ako na slici postoje samo dvije klase. To se posebno manifestira kada su ukupne površine parcela koje zauzimaju klase i značajno različite. Stoga je problem u općem slučaju donekle kompliciran potrebom da se odredi apsolutni maksimum funkcije.

Sa računske tačke gledišta, da bi se algoritam izvršio, potrebno je pronaći matematičko očekivanje i varijansu za cijelu sliku. Nadalje, za svaku vrijednost, vjerovatnoće i se određuju korištenjem (7.2) i (7.3) (ili uslova normalizacije), kao i matematičkih očekivanja klasa i korištenjem relacija (7.4), (7.5). Vrijednosti pronađene na ovaj način omogućavaju određivanje vrijednosti.

Količina izračunavanja može se smanjiti izvođenjem nekih transformacija formule (7.7) za međuklasnu varijansu. Koristeći formule (7.2) ... (7.5), lako je dobiti relaciju za matematička očekivanja:

(7.11)

Izražavajući količinu iz (7.10) i zamijenivši je u (7.11), konačno nalazimo:

(7.12)

Relacija (7.12), koja se koristi kao radna, uključuje samo dvije veličine - vjerovatnoću i nenormalizovano matematičko očekivanje, što značajno smanjuje količinu proračuna u automatskoj potrazi za optimalnim pragom.

Na sl. 7.2 prikazuje eksperimentalne rezultate koji ilustruju opisanu metodu automatske binarne segmentacije. Na slici 7.2, a prikazana je aerofotografija dijela "Polje" zemljine površine, a na slici 7.2, b prikazan je rezultat njegove binarne segmentacije, izvršene na osnovu automatskog određivanja praga diskriminantnom metodom. Histogram distribucije originalne slike prikazan je na slici 7.2, c, a diskriminantna funkcija izračunata iz dobijenog histograma prikazana je na sl. 7.2, d. Jaka nepravilnost histograma, koja generiše veliki broj minimuma, isključuje mogućnost direktnog određivanja jedinog informacionog minimuma koji razdvaja klase jedne od drugih. Funkcija je mnogo glatkija i, štaviše, u ovom slučaju, unimodalna, što čini određivanje praga vrlo jednostavnim zadatkom. Optimalni prag na kojem se dobija segmentirana slika je = 100. Rezultati pokazuju da opisana metoda pronalaženja praga, kao razvoj histogramskog pristupa, ima snažan efekat izglađivanja u odnosu na robusnost samog histograma.

Dotaknimo se pitanja segmentacije praga nestacionarnih slika. Ako se prosječna svjetlina promijeni unutar kadra, tada bi se trebali mijenjati i pragovi segmentacije. Često u tim slučajevima pribjegavaju podjelu kadra na odvojene oblasti, unutar kojih se promjene prosječne svjetline mogu zanemariti. Ovo omogućava primjenu principa definicije praga unutar pojedinačnih regija, pogodnih za rad sa stacionarnim slikama. U obrađenoj slici, u ovom slučaju, uočavaju se područja na koja je originalna slika podijeljena, granice između područja su jasno vidljive. Ovo je značajan nedostatak metode.

Mukotrpniji, ali i efikasniji je postupak koji koristi klizni prozor, u kojem se svaka nova pozicija radnog područja razlikuje od prethodne samo za jedan korak duž reda ili kolone. Optimalni prag pronađen na svakom koraku se odnosi na centralnu tačku trenutnog regiona. Dakle, ovom metodom, prag se mijenja u svakoj tački kadra, a ove promjene imaju karakter uporediv sa prirodom nestacionarnosti same slike. Procedura obrade, naravno, postaje mnogo komplikovanija.

Kompromis je postupak u kojem se umjesto kliznog prozora s jednim korakom koristi prozor "skakanje", koji pomiče nekoliko koraka u svakoj fazi obrade. U "nedostajućim" točkama okvira, prag se može odrediti pomoću interpolacije (često se koristi najjednostavnija linearna interpolacija) prema pronađenim vrijednostima u najbližim tačkama.

Slika 7.2 Primjer binarne segmentacije sa automatskom detekcijom praga

Procjena efikasnosti segmentacije praga na Sl. 7.2, b, treba napomenuti da ova metoda omogućava da se dobije određena ideja o prirodi homogenih područja koja čine posmatrani okvir. Istovremeno, očigledna je njena suštinska nesavršenost, uzrokovana jednotačnošću donetih odluka. Stoga ćemo se u narednim odeljcima obratiti statističkim metodama koje nam omogućavaju da tokom segmentacije uzmemo u obzir geometrijska svojstva regiona – veličinu, konfiguraciju itd. Odmah napominjemo da su odgovarajuće geometrijske karakteristike specificirane u ovom slučaju vlastitim vjerojatnosnim modelima i to najčešće u implicitnom obliku.

Prag je jedan od glavnih metoda segmentacije slike zbog svojih intuitivnih svojstava. Ova metoda je fokusirana na obradu slike, čija pojedinačna homogena područja karakterizira srednja svjetlina. Najčešći metod segmentacije praga je binarna segmentacija, odnosno kada na raspolaganju imamo dvije vrste homogenih područja.

U ovom slučaju, slika se obrađuje piksel po piksel i konverzija svakog piksela ulazne slike u izlaznu se određuje iz omjera:

gdje je parametar obrade, koji se naziva prag, i nivoi izlazne svjetline. Obrada po pikselima, čija pozicija na slici ne igra nikakvu ulogu, naziva se obrada tačke. Nivoi i igraju ulogu etiketa. Po njima se određuje kojoj vrsti datu tačku treba pripisati: H0 ili H1. Ili kažu da se H0 sastoji od pozadinskih tačaka, a H1 od tačaka interesa. Tipično, nivoi i odgovaraju bijelim i crnim nivoima. Klase H1 (aka klasa od interesa) ćemo nazvati klasom objekta, a klasu H0 klasom pozadine.

Naravno, segmentacija ne može biti samo binarna, iu ovom slučaju postoji više od dvije postojeće klase. Ova vrsta segmentacije se naziva višeslojnom. Dobijena slika nije binarna, već se sastoji od segmenata različite svjetline. Formalno, ova operacija se može napisati na sljedeći način:

gdje je broj nivoa, a su klase slika. U tom slučaju, za svaku od klasa mora se postaviti odgovarajući prag, koji bi ove klase odvajao jednu od druge. Binarne slike je lakše pohraniti i njima manipulirati od slika koje imaju mnogo nivoa svjetline.

Najteži dio postavljanja praga je sam proces postavljanja praga. Prag se često piše kao funkcija oblika:

gdje je slika, i neka je karakteristika tačke slike, na primjer, prosječna svjetlina u susjedstvu sa središtem u ovoj tački.

Ako vrijednost praga ovisi samo o, odnosno ista za sve točke slike, onda se takav prag naziva globalnim. Ako prag ovisi o prostornim koordinatama, tada se takav prag naziva lokalnim. Ako zavisi od karakteristike, onda se takav prag naziva adaptivan. Dakle, obrada se smatra globalnom ako se odnosi na cijelu sliku u cjelini, a lokalnom ako se odnosi na neko odabrano područje.

Pored gore navedenih razlika algoritama, postoji mnogo više metoda. Mnogi od njih su samo skup drugih, ali većina njih, na ovaj ili onaj način, temelji se na analizi histograma originalne slike, međutim, postoje i fundamentalno različiti pristupi koji ne utječu na analizu histograma. u njihovom direktnom obliku ili prelaze sa njih na analizu nekih drugih funkcija.

Segmentacija slika sa U-Netom u praksi

Uvod

U ovom postu na blogu ćemo pogledati kako Unet radi, kako ga implementirati i koji podaci su potrebni za njegovu obuku. Da bismo to učinili, razmotrit ćemo:

  1. kao izvor inspiracije.
  2. Pytorchkao alat za realizaciju naše ideje.
  3. Kaggle takmičenje kao mjesto gdje možemo testirati naše hipoteze na stvarnim podacima.

Članak nećemo pratiti 100%, ali ćemo pokušati implementirati njegovu suštinu, prilagoditi ga našim potrebama.

Prezentacija problema

U ovom zadatku dobijamo sliku automobila i njegovu binarnu masku (koja lokalizira poziciju automobila na slici). Želimo da napravimo model koji će moći da odvoji automobil od pozadine sa preciznošću piksel po piksel od preko 99%.

Da bismo razumjeli šta želimo, gif slika je ispod:

Slika lijevo je originalna slika, a desno maska ​​koja će biti primijenjena na sliku. Koristit ćemo Unet neuronsku mrežu koja će naučiti da automatski kreira masku.

  1. Unošenjem slika automobila u neuronsku mrežu.
  2. Korištenje funkcije gubitka, uspoređivanje izlaza neuronske mreže s odgovarajućim maskama i vraćanje greške mreži kako bi se otkrilo gdje mreža nije u redu.

Struktura koda

Kod je pojednostavljen što je više moguće da bi se razumjelo kako funkcionira. Glavni kod je u ovoj datoteci main.py , analizirajmo red po red.

Šifra

Proći ćemo kroz kod u main.py i kroz članak. Ne brinite o detaljima skrivenim u drugim projektnim datotekama, mi ćemo vam pokazati one koje su vam potrebne po potrebi.

Počnimo od početka:

def main (): # Hiperparametri input_img_resize = (572, 572) # Promena veličine ulaznih slika neuronske mreže output_img_resize = (388, 388) # Promjena veličine izlaznih slika neuronske mreže batch_size = 3 epohe = 50 prag = 0,5 validation_size = 0,2 sample_size = Ništa # - Opcioni parametri threads = cpu_count () use_cuda = torch.cuda.is_available () script_dir = os.path.dirname abspath_ (os.path.__file). ) # Povratni pozivi za obuku tb_viz_cb = TensorboardVisualizerCallback (os.path.join (skript_dir, "../logs / tb_viz")) tb_logs_cb = TensorboardLoggerCallback (os.path.join (script/log_dir, "..b saver) model (..b saver) os.path.join (skript_dir, "../ izlaz / modeli / model_" + helpers.get_model_timestamp ()), verbose = Tačno)

U prvom dijelu definirate svoje hiperparametre, možete ih podesiti kako vam odgovara, na primjer ovisno o vašoj GPU memoriji. Optimalni parametri definirati neke korisne parametre i povratni pozivi. TensorboardVisualizerCallback je klasa u koju će pohranjivati ​​predviđanja tensorboard u svakoj eri trenažnog procesa, TensorboardLoggerCallback će pohraniti vrijednosti funkcija gubitka i "preciznosti" piksel po piksel tensorboard... I na kraju ModelSaverCallback će sačuvati vaš model nakon završetka obuke.

# Preuzmite skupove podataka ds_fetcher = DatasetFetcher () ds_fetcher. download_dataset ()

Ovaj odjeljak automatski učitava i izdvaja skup podataka iz Kaggle-a. Imajte na umu da da bi ovaj dio koda uspješno funkcionisao, morate imati Kaggle nalog sa login-om i lozinkom, koji se moraju staviti u varijable okruženja. KAGGLE_USER i KAGGLE_PASSWD prije pokretanja skripte. Također je potrebno prihvatiti pravila takmičenja prije postavljanja podataka. Ovo se može uraditi u karticipreuzimanje podataka o konkurenciji

# Dobijte putanju do datoteka za neuronsku mrežu X_train, y_train, X_valid, y_valid = ds_fetcher.get_train_files (sample_size = sample_size, validation_size = validation_size) full_x_test = ds_fetcher.get_test_files (os_test_backfiles) (osple_backfiles join) (osple_fetcher) (Prethodno_fetcher) script_dir, "../ output / submit.csv.gz"), origin_img_size, prag)

Ova linija definiše povratni poziv funkcija za test (ili predviđanje). Ona će spremiti predviđanja u datoteku gzip svaki put kada se proizvodi nova serija predviđanja. Dakle, predviđanja neće biti pohranjena u memoriji, jer su vrlo velika.

Nakon završetka procesa predviđanja, možete poslati primljenu datoteku submit.csv.gz iz izlaznog foldera u Kaggle.

# - Definirajte našu arhitekturu neuronske mreže# Originalni papir ima 1 ulazni kanal, u našem slučaju imamo 3 (RGB) net = unet_origin. UNetOriginal ((3, * img_resize)) klasifikator = nn. klasifikator. CarvanaClassifier (neto, epohe) optimizator = optim. SGD (neto. Parametri (), lr = 0,01, momentum = 0,99) train_ds = TrainImageDataset (X_train, y_train, input_img_resize, output_img_resize, X_transform = aug.augment_img), train_loader = DataLoader, batch_loader = DataLoader, batch_sam ) valid_ds = TrainImageDataset (X_valid, y_valid, input_img_resize, output_img_resize, threshold = threshold) valid_loader = DataLoader (valid_ds, batch_size, sampler = SequentialSampler (valid_ds), num_

štampa ( "Obuka na () uzorcima i validacija na () uzorcima"... format (len (train_loader. dataset), len (valid_loader. dataset))) # Obučite klasifikator klasifikatora. train (train_loader, valid_loader, epohe, callbacks =)

test_ds = TestImageDataset (full_x_test, img_resize) test_loader = DataLoader (test_ds, batch_size, sampler = SequentialSampler (test_ds), num_workers = threads, pin_memory = use_cuda) # Predvidi i sačuvaj klasifikator. predvidi (test_loader, povratni pozivi =) pred_saver_cb. close_saver ()

Konačno, radimo isto kao gore, ali za predviđanje. Zovemo naše pred_saver_cb.close_saver () da obrišete i zatvorite datoteku koja sadrži predviđanja.

Implementacija arhitekture neuronske mreže

Unet članak predstavlja pristup segmentaciji medicinskih slika. Međutim, pokazalo se da se ovaj pristup može koristiti i za druge zadatke segmentacije. Uključujući i onu na kojoj ćemo sada raditi.

Prije nego što krenete naprijed, morate pročitati cijeli članak barem jednom. Ne brinite ako nemate potpuno razumijevanje matematike, možete preskočiti ovaj odjeljak kao i poglavlje Eksperimentiranje. Naš cilj je da dobijemo širu sliku.

Svrha originalnog članka je drugačija od naše, morat ćemo neke dijelove prilagoditi prema našim potrebama.

U vrijeme pisanja rada nedostajale su 2 stvari koje su sada potrebne za ubrzavanje konvergencije neuronske mreže:

  1. BatchNorm.
  2. Moćni GPU-ovi.

Prvi je izmišljen samo 3 mjeseca prije Unet, i vjerovatno je prerano za autore Unet dodao je u svoj članak.

Izlaziti s BatchNorm koristi se skoro svuda. Možete ga se riješiti u kodu ako želite ocijeniti članak 100%, ali možda nećete doživjeti da se web konvergira.

Što se tiče GPU-a, članak kaže:

Da bismo smanjili troškove i maksimalno iskoristili GPU memoriju, dajemo prednost velikim ulaznim pločicama u odnosu na veliku veličinu serije i stoga smanjujemo seriju na jednu sliku

Koristili su GPU sa 6 GB RAM-a, ali sada GPU ima više memorije za smještaj slika u jednoj seriji. Trenutna serija od tri radi za GPU u GPU-u sa 8 GB RAM-a. Ako nemate takvu video karticu, pokušajte smanjiti seriju na 2 ili 1.

Što se tiče metoda augmentacije (tj. izobličenja originalne slike prema nekom obrascu) razmatrane u članku, koristit ćemo različite od onih opisanih u članku, budući da se naše slike jako razlikuju od biomedicinskih slika.

Sada krenimo od samog početka dizajniranjem arhitekture neuronske mreže:

Ovako izgleda Unet. Možete pronaći ekvivalentnu implementaciju Pytorch u modulu nn.unet_origin.py.

Sve klase u ovoj datoteci imaju najmanje 2 metode:

  • __u tome __ ()gdje ćemo inicijalizirati naše slojeve neuronske mreže;
  • naprijed ()što je metoda koja se poziva kada neuronska mreža primi ulaz.

Pogledajmo detalje implementacije:

  • ConvBnRelu je blok koji sadrži Conv2D, BatchNorm i Relu operacije. Umjesto da ih kucamo 3 za svaki stek kodera (grupa operacija nadole) i stekove dekodera (grupa operacija gore), mi ih grupišemo u ovaj objekat i ponovo ga koristimo po potrebi.
  • StackEncoder enkapsulira cijeli "sklad" operacija dolje, uključujući operacije ConvBnRelu i MaxPool ispod:



Pratimo povlačenje posljednje operacije ConvBnRelu v x_trace i vratite ga jer ćemo konkatenirati ovaj izlaz koristeći stekove dekodera.

  • StackDecoder je isto što i StackEncoder, ali za operacije dekodiranja okružene crvenom bojom:



Imajte na umu da uzima u obzir operaciju trim/konkatenacije (okružena narandžastom bojom) prenošenjem u down_tensor, koji nije ništa drugo do x_trace tenzor koji vraća naš StackEncoder .

  • UNetOriginal tu se dešava magija. Ovo je naša neuronska mreža koja će prikupiti sve male cigle iznad. Metode u tome i naprijed su zaista zeznuti, dodaju gomilu StackEncoder , središnji dio i na kraju nekoliko StackDecoder ... Tada dobijamo izlaz StackDecoder , dodajte mu konvoluciju 1x1 prema članku, ali umjesto da definiramo dva filtera kao izlaz, definiramo samo 1, što će zapravo biti naše predviđanje maske u sivim tonovima. Zatim "smanjujemo" naš izlaz da uklonimo veličinu kanala (samo 1, tako da ga ne moramo pohraniti).

Ako želite razumjeti više detalja o svakom bloku, postavite tačku prekida za otklanjanje grešaka u metodu naprijed svake klase da biste detaljno pregledali objekte. Također možete odštampati oblik vaših izlaznih tenzora između slojeva štampanjem ( x.veličina () ).

Trening neuronske mreže

  1. Funkcija gubitka

Sada u stvarni svijet. Prema članku:

Funkcija energije se izračunava pomoću soft-max-a u pikselima preko konačne mape karakteristika u kombinaciji sa funkcijom gubitka unakrsne entropije.

Činjenica je da u našem slučaju želimo da koristimo koeficijent kocke kao funkciju gubitka umjesto onoga što nazivaju "energetskom funkcijom" jer je ovo metrika koja se koristiKaggle takmičenje koji je definisan:

Xje naše predviđanje i Y- ispravno označena maska ​​na trenutnom objektu. X | znači kardinalnost skupa X(broj elemenata u ovom skupu) i ∩ za presjek između X i Y.

Kod za koeficijent kockice možete pronaći u nn.losses.SoftDiceLoss .

klasa SoftDiceLoss (nn.Module): def __init __ (self, težina = nema, veličina_prosjek = istina): super (SoftDiceLoss, self) .__ init __ () def naprijed (self, logits, ciljevi): glatko = 1 num = targets.size (0) probs = F.sigmoid (logiti) m1 = probs.view (broj, - 1) m2 = targets.view (broj, - 1) raskrsnica = (m1 * m2) rezultat = 2. * (presjek.zbir (1) + glatko) / (m1.zbir (1) + m2.zbir (1) + glatko) rezultat = 1 - rezultat.zbir () / broj povratnih rezultata

Razlog zašto je raskrsnica implementirana kao množenje, a kardinalnost kao suma () on osa 1 (zbir tri kanala) je da su predviđanja i cilj one-hot encoded vektori.

Na primjer, pretpostavimo da je predviđanje u pikselu (0, 0) 0,567, a cilj 1, dobićemo 0,567 * 1 = 0,567. Ako je cilj 0, dobijamo 0 na toj poziciji piksela.

Također smo koristili glatki faktor 1 za propagaciju unazad. Ako je predviđanje težak prag od 0 i 1, teško ga je proširiti nazad gubitak kocke.

Zatim uspoređujemo gubitak kocke sa unakrsnom entropijom da dobijemo našu funkciju ukupnog gubitka, koju možete pronaći u metodi _kriterijum od nn.Classifier.CarvanaClassifier ... Prema originalnom članku, oni također koriste mapu težine u funkciji gubitka unakrsne entropije kako bi dali nekoliko piksela više greške tokom treninga. U našem slučaju, nama tako nešto ne treba, pa samo koristimo unakrsnu entropiju bez ikakve mape težine.

2. Optimizator

Pošto se ne bavimo biomedicinskim slikama, koristit ćemo svoje augmentacije ... Kod se može naći u img.augmentation.augment_img... Tamo radimo nasumično pomicanje, rotaciju, okretanje i skaliranje.

Trening neuronske mreže

Sada možete početi učiti. Kako napredujete kroz svaku epohu, moći ćete vizualizirati predviđanja vašeg modela na skupu za validaciju.

Da biste to učinili, morate trčati Tensorboard u folderu logs koristeći naredbu:

Tensorboard --logdir =. / Dnevnici

Primjer onoga što možete vidjeti u Tensorboard nakon epohe 1:

Vođena segmentacija sliva

Često se pri analizi slika javlja problem podjele piksela slike u grupe prema nekim kriterijima. Ovaj proces podjele u grupe naziva se segmentacija. Najpoznatije su dvije vrste segmentacije - segmentacija svjetline za binarne slike i segmentacija koordinata boja za slike u boji. Metode segmentacije se mogu smatrati formalizacijom koncepta razlikovanja objekta od pozadine ili pojmova povezanih s gradijentom svjetline. Algoritme segmentacije karakterišu neki parametri pouzdanosti i pouzdanosti obrade. One zavise od toga koliko su u potpunosti uzete u obzir dodatne karakteristike raspodjele svjetline u područjima objekata ili pozadine, broj padova svjetline, oblik objekata itd.

Postoje mnoge slike koje sadrže testni objekt s dovoljno ujednačenom svjetlinom na pozadini različite svjetline. Primjeri uključuju rukom pisani tekst, niz medicinskih slika itd. Ako se svjetlina točaka objekta naglo razlikuje od svjetline tačaka pozadine, tada rješenje problema postavljanja praga nije težak zadatak. U praksi to nije tako jednostavno, jer je slika koja se proučava izložena šumu i na njoj su dozvoljene neke varijacije u vrijednostima svjetline. Postoji nekoliko analitičkih pristupa pragu osvetljenosti. Jedna metoda je postavljanje praga na takav nivo da je ukupan zbir elemenata osvjetljenja ispod praga u skladu sa prethodnim vjerovatnoćama ovih vrijednosti osvjetljenja.

Slični pristupi se mogu koristiti za obradu slika u boji i multispektralnih slika. Postoji i takva vrsta segmentacije kao što je segmentacija kontura. Vrlo često analiza slike uključuje takve operacije kao što je dobivanje vanjske konture slika objekata i snimanje koordinata tačaka ove konture. Postoje tri glavna pristupa predstavljanju granica objekta: uklapanje krive, praćenje konture i povezivanje ivica. Radi kompletnosti, treba napomenuti da postoji i segmentacija teksture i segmentacije oblika.

Najjednostavniji tip segmentacije je segmentacija praga. Našao je vrlo široku primjenu u robotici. To je zbog činjenice da u ovom području slike objekata koji se proučavaju, uglavnom, imaju prilično ujednačenu strukturu i njihova pozadina se oštro razlikuje. Ali osim toga, za pouzdanu obradu, morate znati da se slika sastoji od jednog objekta i pozadine, čija je svjetlina u strogo poznatim rasponima i ne sijeku se.

Razvoj tehnologija obrade slike doveo je do pojave novih pristupa rješavanju problema segmentacije slike i njihove primjene u rješavanju mnogih praktičnih problema.

U ovom radu ćemo razmotriti relativno nov pristup rješavanju problema segmentacije slike – metodu vododjelnice. Hajde da ukratko objasnimo naziv ove metode i šta je njena suština.

Predlaže se da se slika smatra nekom vrstom mape područja, gdje vrijednosti svjetline predstavljaju vrijednosti visina u odnosu na određeni nivo. Ako se ovo područje napuni vodom, tada se formiraju bazeni. Daljnjim punjenjem vodom ovi bazeni se kombinuju. Spojevi ovih slivova su označeni kao razvodne linije.

Odvajanje dodirnih objekata na slici jedan je od važnih zadataka obrade slike. Za rješavanje ovog problema često se koristi tzv. Prilikom transformacije pomoću ove metode, trebate odrediti "slivove" i "vodne linije" na slici obradom lokalnih područja ovisno o njihovim karakteristikama svjetline.

Metoda markera vododjelnice jedna je od najefikasnijih metoda segmentacije slike. Prilikom implementacije ove metode izvode se sljedeće osnovne procedure:

    Izračunava se funkcija segmentacije. Primjenjuje se na slike na kojima se objekti nalaze u tamnim područjima i teško ih je vidjeti.

    Izračunajte markere prednjeg plana za slike. Oni se izračunavaju na osnovu analize povezanosti piksela svakog objekta.

    Proračun pozadinskih markera. To su pikseli koji nisu dio objekata.

    Modifikacija funkcije segmentacije na osnovu vrijednosti položaja markera pozadine i markera prednjeg plana.

    Proračuni zasnovani na modificiranoj funkciji segmentacije.

U ovom primjeru, najčešće korištene značajke alata za obradu slika su fspecial, imfilter, watershed, label2rgb, imopen, imclose, imreconstruct, imcomplement, imregionalmax, bwareaopen, graythresh i imposemin.

  • Korak 1: Pročitajte sliku u boji i pretvorite je u sivilo.
  • Korak 2: Korištenje vrijednosti gradijenta kao funkcije segmentacije.
  • Korak 3: Označavanje objekata u prednjem planu.
  • Korak 4: Izračunajte oznake pozadine.
  • Korak 6: Vizualizacija rezultata obrade.

Korak 1: Pročitajte sliku u boji i pretvorite je u sivilo.

Čitanje podataka iz datoteke pears.png rgb = imread ("pears.png"); i predstavljaju ih kao sliku u sivim tonovima. I = rgb2siva (rgb); imshow (I) text (732,501, "...", ... "FontSize", 7, "HorizontalAlignment", "right")

Korak 2: Korištenje vrijednosti gradijenta kao funkcije segmentacije.

Sobel operator, funkcija imfiltera i drugi proračuni se koriste za izračunavanje vrijednosti gradijenta. Gradijent ima veliku vrijednost na granicama objekata i malu (u većini slučajeva) izvan granica objekata.

Hy = fspecial ("sobel"); hx = hy "; Iy = imfilter (double (I), hy," replicate "); Ix = imfilter (double (I), hx," replicate "); gradmag = sqrt (Ix. ^ 2 + Iy. ^ 2 ); slika, imshow (gradmag,), naslov ("vrijednost gradijenta")

Dakle, nakon izračunavanja vrijednosti gradijenta, može se pristupiti segmentaciji slike koristeći razmatranu metodu razvodnice markera.

L = sliv (gradmag); Lrgb = label2rgb (L); slika, prikaz (Lrgb), naslov ("Lrgb")

Međutim, bez dodatnih proračuna, takva će segmentacija biti površna.

Korak 3: Označavanje objekata u prednjem planu.

Za označavanje objekata u prednjem planu mogu se koristiti različite procedure. U ovom primjeru će se koristiti morfološke tehnike koje se nazivaju "otkrivanje restauracijom" i "zatvaranje restauracijom". Ove operacije vam omogućuju analizu unutrašnjeg područja slikovnih objekata pomoću funkcije imregionalmax.

Kao što je već spomenuto, prilikom označavanja objekata u prvom planu koriste se i morfološke operacije. Razmotrimo neke od njih i uporedimo. Prvo, implementirajmo operaciju proširenja koristeći imopen funkciju.

Se = strel ("disk", 20); Io = imopen (I, se); slika, prikaz (Io), naslov ("Io")

Ie = imerode (I, se); Iobr = imrekonstruisati (Ie, I); slika, prikaz (Iobr), naslov ("Iobr")

Naknadne morfološke operacije otvaranja i zatvaranja rezultirat će pomicanjem tamnih mrlja i formiranjem markera. Analizirajmo operacije morfološkog zatvaranja. Da bismo to učinili, prvo koristimo funkciju imclose:

Ioc = zatvoreno (Io, se); slika, prikaz (IOC), naslov ("Ioc")

Iobrd = imdilat (Iobr, se); Iobrcbr = imrekonstrukt (imkomplement (Iobrd), dopuna (Iobr)); Iobrcbr = dopuna (Iobrcbr); slika, prikaz (Iobrcbr), naslov ("Iobrcbr")

Komparativna vizuelna analiza Iobrcbr i Ioc pokazuje da je prikazana rekonstrukcija zasnovana na morfološkim operacijama otvaranja i zatvaranja efikasnija u poređenju sa standardnim operacijama otvaranja i zatvaranja. Izračunajmo lokalne maksimume Iobrcbr i dobijemo markere prednjeg plana.

Fgm = imregionalmax (Iobrcbr); slika, imshow (fgm), naslov ("fgm")

Postavite markere prednjeg plana na originalnu sliku.

I2 = I; I2 (fgm) = 255; slika, imshow (I2), naslov ("fgm prekriven originalnom slikom")

Imajte na umu da u ovom slučaju neki skriveni ili zatvoreni objekti slike nisu označeni. Ovo svojstvo utiče na formiranje rezultata i mnogi takvi objekti slike neće biti obrađeni sa tačke gledišta segmentacije. Dakle, markeri prednjeg plana prikazuju samo granice većine objekata. Granice prikazane na ovaj način se dalje obrađuju. Konkretno, to mogu biti morfološke operacije.

Se2 = strel (jedinice (5, 5)); fgm2 = zatvoreno (fgm, se2); fgm3 = imerode (fgm2, se2);

Kao rezultat ove operacije, pojedinačni izolirani pikseli slike nestaju. Također možete koristiti bwareaopen funkciju, koja vam omogućava da uklonite određeni broj piksela.

Fgm4 = bwareaopen (fgm3, 20); I3 = I; I3 (fgm4) = 255; slika, imshow (I3) naslov ("fgm4 prekriven originalnom slikom")

Korak 4: Izračunajte oznake pozadine.

Sada izvršimo operaciju označavanja pozadine. Na slici Iobrcbr, tamni pikseli se odnose na pozadinu. Stoga se može primijeniti operacija praga slike.

Bw = im2bw (Iobrcbr, graythresh (Iobrcbr)); figura, slika (bw), naslov ("bw")

Pozadinski pikseli su tamni, ali ne možete samo morfološki manipulirati markerima pozadine i dobiti granice objekata koje segmentiramo. Želimo da "razrijedimo" pozadinu na način da dobijemo pravi kostur slike ili takozvani prednji plan slike u polutonu. Ovo se izračunava korištenjem pristupa slivovima i mjerenja udaljenosti (do linija sliva).

D = bwdist (bw); DL = sliv (D); bgm = DL == 0; slika, imshow (bgm), naslov ("bgm")

Korak 5: Proračun metodom markerskog sliva na osnovu modificirane funkcije segmentacije.

Imimposemin se može koristiti za preciziranje lokalnih minimuma na slici. Na osnovu toga, imimposemin također može podesiti vrijednosti gradijenta na slici i tako precizirati položaj markera prednjeg plana i pozadine.

Gradmag2 = imimposemin (gradmag, bgm | fgm4);

Konačno, izvodi se operacija segmentacije zasnovana na vododjelu.

L = sliv (gradmag2);

Korak 6: Vizualizacija rezultata obrade.

Hajde da prikažemo superponirane markere prednjeg plana, markere pozadine i ivice segmentiranih objekata na originalnoj slici.

I4 = I; I4 (imdilat (L == 0, jedinice (3, 3)) | bgm | fgm4) = 255; slika, imshow (I4) naslov ("Markeri i granice objekata prekrivene originalnom slikom")

Kao rezultat ovog prikaza, možete vizualno analizirati lokaciju markera prednjeg plana i pozadine.

Također je zanimljivo prikazati rezultate obrade pomoću slike u boji. Matrica generirana funkcijama vododjelnice i bwlabel može se pretvoriti u sliku prave boje pomoću funkcije label2rgb.

Lrgb = label2rgb (L, "jet", "w", "promiješaj"); slika, imshow (Lrgb) naslov ("Lrgb")

Također možete koristiti polutransparentni način za preklapanje pseudo matrice boja naljepnica preko originalne slike.

Slika, imshow (I), držite himage = imshow (Lrgb); set (himage, "AlphaData", 0,3); naslov ("Lrgb superponiran na originalnu sliku u poluprozirnom načinu")

Članak opisuje proučavanje metoda segmentacije slike na različitim primjerima. Cilj istraživanja je otkriti prednosti i nedostatke nekih od poznatih metoda.


Metode o kojima će biti riječi u ovom članku:

  1. Metoda uzgoja regiona;
  2. Metoda vododjelnice;
  3. Normalna metoda rezanja.

Istraživanje metoda segmentacije na slikama modela

Istraživanje o tehnikama segmentacije prvobitno je provedeno na modelima slika. Kao modeli korišteno je devet vrsta slika.




Rezultati istraživanja su pokazali:

  • Metoda uzgojnih regija lokalizira defekte teksture, koji se oštro razlikuju od pozadine, a nastaju rotacijom i promjenom svjetline teksture;
  • Metoda uzgoja regija u različitom stupnju lokalizira defekte pod različitim uglovima rotacije teksture;
  • Razmatrana metoda segmentacije sliva u svom izvornom obliku ne omogućava lokalizaciju teksturnih nedostataka;
  • Metoda normalnih presjeka dobro lokalizira prisutnost teksture koja se razlikuje od pozadine, ali ne ističe promjenu svjetline i rotacije teksture.

Istraživanje metoda segmentacije na slikama objekata

Za proučavanje metoda segmentacije pripremljena je baza podataka slika različitih objekata. Dobijene slike su segmentirane različitim metodama, čiji je rezultat prikazan na slikama u tabeli.


Originalna slika Metoda uzgojnih regija Normalna metoda rezanja Metoda vododjelnice

Rezultati:

  • Metoda rastućih regiona ne obezbeđuje lokalizaciju segmenata na slikama objekata;
  • Razmatrane metode razvodnih i normalnih presjeka u svom izvornom obliku ne omogućavaju lokalizaciju prikazanih objekata;
  • Metoda normalnih presjeka omogućava lokalizaciju objekata na slikama objekata.

rezultate

Rezultati studije:

  • Metoda rastućih regiona ne obezbeđuje lokalizaciju segmenata kako na slikama modela tako i na slikama objekta, a takođe obezbeđuje lokalizaciju elemenata drumske saobraćajne infrastrukture.
  • Razmatrane metode razvodnih i normalnih presjeka u svom izvornom obliku ne pružaju u potpunosti lokalizaciju prikazanih objekata.
  • Metoda normalnih presjeka omogućava lokalizaciju objekata kako na slikama modela tako i na slikama objekata, a također omogućava lokalizaciju elemenata cestovne prometne infrastrukture.
  • Metoda uzgojnih regija i metoda normalnih rezova može se preporučiti za upotrebu u automatizovanim sistemima vizuelne kontrole.

Top srodni članci