7.2. Što je strojno učenje promijenilo

Modul image nosi šačicu naslijeđenih metoda detekcije – find_features() za detekciju lica putem Haar-kaskade, find_eye() za fiksni pronalazač zjenica, find_hog() za sažetke smjera gradijenta, te putanje find_keypoints() i find_lbp() za proizvoljne ključne točke. Sve one i dalje rade; sve ih je nadmašio cjevovod strojnog učenja.

7.2.1. Klasična podjela: ručno osmišljeni sažeci, naučene odluke

Klasični cjevovod strojnog vida bio je dvostupanjska stvar. Prvi korak pretvarao je sirove piksele u kompaktan skup brojeva odabranih da sažmu ono što se nalazi na slici – ne same vrijednosti piksela, nego kraći opis toga koji su se uzorci pojavili i gdje. Drugi korak uzeo je taj sažetak i donio odluku: lice ili ne, ovaj objekt ili onaj, isti cilj ili drugačiji.

Podjela je bila važna jer su dva koraka imala različite autore. Prvi korak napisao je čovjek. Netko je sjeo i odlučio da je razlika u svjetlini između dva određena pravokutnika dobar sažetak područja oka, da je dominantni smjer ruba u svakoj ćeliji rešetke dobar sažetak obrisa stojeće osobe, da je svijetlo-ili-tamni uzorak oko svakog piksela dobar sažetak lokalne teksture. Svaki od tih izbora bio je ručno napisani algoritam – napisan, ispravljen i objavljen. Gore navedene naslijeđene metode bile su sve sažeci ove vrste koji su postali standardni alati:

  • find_features() sažima prozor slike zbrajanjem svjetline unutar nekoliko pravokutnika i usporedbom zbrojeva. Rasporedi pravokutnika odabrani su jer ljudska lica pokazuju pouzdane kontraste svijetlog naspram tamnog: obrve naspram obraza, očne duplje naspram čela, nos naspram okolne kože.

  • find_hog() sažima sliku prolaskom kroz rešetku malih ćelija i bilježenjem koji smjer ruba prevladava u svakoj ćeliji. Rešetka je odabrana jer obris stojeće osobe proizvodi prepoznatljiv uzorak smjerova rubova bez obzira na odjeću ili osvjetljenje.

  • find_lbp() sažima susjedstvo svakog piksela kodiranjem koji su od okolnih piksela svjetliji, a koji tamniji. Kodiranje je odabrano jer ti uzorci svjetlije / tamnije od hvataju teksturu površine neovisno o ukupnom osvjetljenju.

  • find_keypoints() pronalazi kutne točke na slici i opisuje područje oko svakog kuta na način koji ostaje isti kada se kut zarotira. Shema kuta-i-rotacije odabrana je jer se isti kutovi ponovno pojavljuju kada se prizor promatra iz drugog kuta.

Nakon što je sažetak bio ručno napisan, mali korak učenja na vrhu njega mogao je kombinirati brojeve u odluku. Algoritam za detekciju lica pričvrstio je korak učenja na sažetak razlike pravokutnika, trenirajući ga na označenim slikama lica i ne-lica da nauči koje kombinacije razlika signaliziraju lice. Sažetak smjera rubova ulazio je u korak učenja treniran na označenim slikama osoba i ne-osoba. Deskriptori kutova ulazili su u korak podudaranja koji je naučio koliku težinu dati svakom kutu. Svaki od ovih drugih koraka jest algoritam učenja – malen po modernim standardima, ali algoritam učenja.

Podjela doprinosa je ono što je bilo važno. Čovjek je doprinio sažetak. Stroj je naučio kombinaciju. Dodavanje novog cilja značilo je pisanje novog sažetka.

7.2.2. Što su neuronske mreže promijenile

Neuronska mreža briše podjelu. Prvi slojevi mreže obavljaju posao sažimanja koji su nekoć obavljali ručno napisani algoritmi – detektiranje rubova, kutova, orijentiranih traka, tekstura, upravo onih stvari za čije je detektiranje svaka od gore navedenih naslijeđenih metoda bila ugođena – ali nisu ručno napisani. Oni se uče iz istih podataka za treniranje iz kojih se uči i korak odluke, u jednom prolazu treniranja koji prilagođava obje polovice mreže odjednom. Dublji slojevi obavljaju kombiniranje koje je nekoć obavljao mali korak učenja na vrhu ručno napisanih sažetaka, također naučeno, u istom prolazu.

Promjena u tome tko što osmišljava je potpuna:

  • Čovjek osmišljava ulaz – snimljene sličice zadane veličine i formata.

  • Čovjek osmišljava izlaz – raspored rezultirajućeg tenzora (jedna ocjena po razredu za klasifikaciju, popis okvira za detekciju, rešetka ključnih točaka za orijentire).

  • Čovjek dostavlja označene podatke za treniranje – dovoljno primjera cilja i dovoljno primjera ne-ciljeva da proces treniranja ima iz čega učiti.

Sve između ulaza i izlaza generira proces treniranja. Nema zasebnog koraka pisanja sažetaka. Rani slojevi se ustale u detektore rubova i tekstura ne zato što ih je netko tako napisao, nego zato što su detekcija rubova i tekstura ono što čini da se predikcije mreže podudaraju s oznakama. Dublji slojevi se ustale u detektore oblika i objekata iz istog razloga. Obje polovice treniraju se zajedno, što omogućuje da sažeci koje svaki sloj proizvodi budu upravo oni sažeci koji su sljedećem sloju potrebni – a ne generički kakvima se ručno napisani cjevovod morao zadovoljiti.

7.2.3. Slaganje s modulom image

Cjevovodi neuronskih mreža i dalje snimaju kroz iste API-je senzora, crtaju rezultate kroz iste primitive draw_rectangle() i draw_circle() te ograničavaju rad kroz iste (x, y, w, h) ROI-jeve. Tipičan cjevovod snimi sličicu, neobavezno pronađe grubi cilj klasičnim detektorom poput find_blobs() i predaje njegov granični okvir zaključivanju kao ROI, izvodi zaključivanje i upisuje vraćene detekcije natrag u izvornu sličicu. Klasični primitivi su podloga; mreža je novi korak u sredini.