Loading

Alison's New App is now available on iOS and Android! Download Now

Study Reminders
Support
Text Version

Set your study reminders

We will email you at these times to remind you to study.
  • Monday

    -

    7am

    +

    Tuesday

    -

    7am

    +

    Wednesday

    -

    7am

    +

    Thursday

    -

    7am

    +

    Friday

    -

    7am

    +

    Saturday

    -

    7am

    +

    Sunday

    -

    7am

    +

Abbiamo iniziato questa settimana parlando di spigoli. Poi siamo passati dai bordi ai bari agli angoli, poi abbiamo parlato di alcune varietà di rilevatori d'angolo e abbiamo parlato di un importante rilevatore d'angolo chiamato sift, parlato del descrittore di funzionalità di come descriverebbe il vostro angolo come un vettore. E poi nell'ultima lezione abbiamo parlato anche della segmentazione delle immagini. Ora, si parlerà anche di altri tipi di spazi caratterizzanti che le persone lavoravano nella visione del computer, prima che il deep learning entrasse nella foto. Questo sarà il fulcro di questa lezione. Una delle altre rappresentazioni importanti che si sviluppò era conosciuta come contesto di forma. Il contesto di forma era quello di prendere un pixel e posizionarsi e ottenere una rappresentazione logarica del quartiere intorno al pixel usando questo tipo di rappresentazione. Questo tipo di rappresentazione. Così definiamo un sistema di coordinate in due dimensioni, che è parametrizzato dalla distanza logaritmica dall'origine, ovvero il pixel al quale si cerca di ottenere la rappresentazione oltre che l'angolo. Quindi per ogni punto che si considera, si conterebbe il numero di punti in ogni vassoio di tronco - polare intorno a quel particolare pixel. Così si farebbe, quindi se questa rappresentazione logarica si vede che ci sono forse qualcosa come uno, due, tre e quattro regioni in termini di distanza angolare in termini di distanza di log e poi di 12 bidoni in termini di angolazioni stesse. Così, come potete vedere, c'è più precisione per i punti vicini, molto simile al kernel gaussiano, dove si dà più pesantezza ai punti vicini, e poi più flessibilità per i punti più lontani su quel pixel dove stiamo valutando la rappresentazione. In qualche misura questo metodo, questa rappresentazione è la traduzione e la scala invariante, a seconda delle dimensioni del quartiere che si prende. (2.53) Studiamo questo in un po' più di dettaglio. Quindi consideriamo due immagini diverse. Quindi, ora, se si considera questo pixel, ci sono se ora si può vedere con attenzione, questo è un cerchio, questo è un triangolo e questo è un rhombus. Quindi, se potete vedere qui potete trovare la prima è la rappresentazione del cerchio, la seconda è la rappresentazione del rhombus e la terza è la rappresentazione del triangolo. Come sono arrivate queste rappresentazioni? Ci sono cinque bidoni in termini di log R della distanza radiale di log e 12 bins in termini di tuo θ o dei tuoi angoli intorno al centro. Quindi, possiamo vedere qui che il cerchio e il rhombus hanno rappresentazioni molto simili quindi si potrebbe considerare questi due punti come punti di corrispondenza tra queste due rappresentazioni o queste due immagini di A. E quando diciamo che due punti sono in corrispondenza? Diciamo che due punti sono in corrispondenza se minimizzano un valore di Cij dove Cij, i e j essendo due pixel che si sta provando a misurare e Cij = 2 1 secondi K k= 1 h (k) + h (k) i j (h (k)) i j 2 e h (k)) e sono le posizioni istogram nell'ith, intorno all'ith pixel e nella io h (k) j rappresentazione intorno al jth pixel, h è l'istogramma del numero di pixel in ognuno di quei piedini intorno all'ith pixel e h similmente per il jima pixel. corrisponderebbe a j h (k) i il conteggio in uno di quei bidoni e quello che è piccolo k o maiuscola K, il capital K è il numero totale di bidoni, a destra. Quindi per h (k) sarebbe il conteggio in uno di quei bidoni. i Quindi, quando Cij si sarebbe minimizzato quando il numeratore è zero o gli istogrammi esattamente corrispondono o quando gli istogrammi sono abbastanza vicini l'uno all'altro, si assicurerebbe che questi valori si rivelino bassi. Il denominatore assicura che si stia considerando anche il numero di pixel considerati mentre valutarlo, molto simile a come abbiamo parlato di un taglio normalizzato e min - cut il denominatore aiuta a normalizzarsi in base al numero di pixel che stai considerando per i tuoi studi. (5.31) Così una volta che si ottengono questi punti di corrispondenza tra due immagini in base alla rappresentazione, si potrebbe quindi fare uno ad uno corrispondente sequenzialmente tra questi punti tra questi punti di corrispondenza e quando una distanza è inferiore a una soglia questo tipo di approccio è stato usato per verificare una corrispondenza di forma, non solo un match point, ma le forme corrispondenti tra due immagini diverse. Questo è il motivo per cui si chiamava contesto di forma. (5.58) Un altro spazio di feature o metodo importante che è stato proposto è noto come MSER o le regioni estreme più stabili. Questo era un metodo per il rilevamento dei blob basato sulla segmentazione a cascata. Così, abbiamo appena visto la segmentazione delle immagini nella lezione precedente utilizzando uno di quei metodi, ovvero la semplice segmentazione a cascata che metodo viene utilizzato per arrivare con un metodo per le regioni esterne MSER o massimamente stabili. E come funziona questo? Si identificano le regioni in un'immagine che rimane quasi la stessa che si mantiene variando una soglia. (6.42) Proviamo a descrivere questo. Quindi si avrebbe idealmente spazzare la soglia di un'intensità che va dal bianco al nero, o dal nero al bianco, e in ogni passo, si è semplicemente sgranati in base a quel particolare valore di intensità. Quindi se hai un'intensità di 75, tutto sopra che è bianco e tutto sotto che è nero una semplice operazione di sfinitura. Poi estrarre componenti connessi all'interno di quell' immagine sfumata e i descrittori della regione finale servono come caratteristiche. (7.12) Vediamo questo più chiaramente con alcune illustrazioni. Allora diciamo che iniziamo a sfondare le immagini su un determinato livello di intensità g, quindi il che significa che hai considerato una soglia g, e tutto quello sopra che è considerato bianco, e tutto sotto che è considerato nero. Quindi la tua soglia di legame di soglia, la tua immagine, basata sulla soglia g. Chiaramente, quando si soglia, si va a vedere comparire un branco di balle o raccolte di pixel. Saranno regioni coesi che appaiono insieme quando si soglia. Così e mentre si aumenta il valore o diminuiscono il valore di g qualunque esso sia. In questo caso, se si dice diminuire il valore di g, le regioni più nuove inizierebbero a comparire. Se si diminuiscono il valore di g si sta ora dando una soglia inferiore per considerare che le regioni siano bianche e il resto di loro sia nero, quindi ci sarebbero più regioni che iniziano a comparire con valori di pixel bianchi nell'immagine sfumata. E se si aumenta g, le cose inizierebbero a coalescare, e queste regioni che si sviluppano man mano che si mantengono i valori di g possono essere raffigurate in un albero come struttura. È molto simile alla fusione di regione e le regioni che si divigono, mentre si riduce g alcune regioni possono unire mentre si aumentano le regioni g possono dividersi in base ai loro valori di intensità. (8.36) Così ora, cosa fare con questo? Così le regioni a un determinato livello g sono denotate come R1 ad g Rn, diciamo che ci sono piccole in regioni, ognuna corrispondente a una determinata soglia g. g Dove la cardinalità di R denota il numero totale di pixel in una di quelle regioni, io g Ri g poi definiamo una quantità ψ, che è data da. Rj e Rk sono genitori e | R | i g | R | − | R | j gitti G + IVA di Ri di quella regione corrispondente a soglie leggermente diverse, g minus delta e g plus delta. Proviamo a studiare questo un po' più con attenzione. Ricordate, ancora, che R è una delle regioni i g che state valutando al valore soglia g. Ora, se si sottrae un po' di valore g meno delta, allora si otterrebbe una regione madre che è forse più grande di Ri. Ricordate quando si sottrae la soglia, la regione si otterrebbe, la regione bianca si farebbe probabilmente più grande. Così si potrebbe avere una regione madre Rk, definita a g meno delta. E a g plus delta quando si aumenta la soglia la regione può diventare più piccola, la regione bianca potrebbe diventare più piccola, si va a definire che da bambino e che è definita da Rk. E se questa quantità ψ, che è la differenza tra Rj e Rk è al di sotto di una soglia definita dall'utente, si chiamerebbero quelle regioni ad essere massimamente stabili, le regioni estreme. Ricorda, se è più piccolo di una soglia, significa semplicemente che non c'è quasi alcun cambiamento tra il genitore e il bambino. Se c'è molto cambiamento, allora probabilmente è necessario espandersi un po' più in là prima di definirlo una regione stabile o un'estremità. (11.02) Ecco un'illustrazione visiva. Quindi, questa è l'immagine in ingresso, come potete vedere ha in esso alcuni caratteri. E quando si imposta la soglia per essere 75, ipotizzando di nuovo che si utilizzano 8 per rappresentare pixel così il valore è compreso tra 0 e 255 si vedono le regioni non molto chiaramente definite, ma quando si va ad g è uguale a 105, si vedono regioni che si stanno leggermente più ben definite. E si può vedere che a 135 ci sono pochi cambiamenti, ma non molto a 165 cambiamenti molto minori non molto più, a 195 anni, quasi nessun cambiamento, a 225 cose di nuovo iniziano ad andare di nero perché la soglia è molto alta. Così si potrebbe ora rappresentare che come un albero, dove si inizia con una regione, quella regione diventa due regioni a livello g è pari a 105 e la regione 2 diventa regione 4 e la regione 8, a livello g è pari a 135, e così via per costruire il resto dell'albero. Finalmente, finalmente, come potete vedere a livello g è uguale a 195 avete due regioni, una con la k, e l'altra con un r, che è ciò che si sta inizialmente cercando. Così questo ti dà un modo di separare le diverse regioni. Quindi questo non è esattamente un rilevatore d'angolo, ma un altro metodo per separare le regioni. (12 29) Così un altro modo, abbiamo detto che potrebbe essere usato anche come rivelatore di blob, ed ecco un esempio per fare il rilevamento blob usando le regioni singole più stabili. Così considerando questa immagine di ingresso se si passa da bianco a nero o nero a bianco la top due righe raffigura quando si va dal bianco al nero, e il fondo due righe raffigura quando si va dal nero al bianco. Se si va dal bianco al nero, si inizia con una soglia elevata e poi si diminuiscono le soglie in più regioni in nero che si presentano, si diminuiscono le soglie più regioni in nero che si presentano e la regione inizia a fondersi e si è finalmente partiti come, anche mentre si cambia la soglia quando le regioni non cambiano, si sa che in realtà è uno stabile rappresentazione blob della tua immagine originale. Ricordati, quando lo vedi dal nero al bianco, lo guarrete in termini di fusione. Quindi si va a dire che quando è nero, in sostanza, non c'è nessuna regione e si aumenta leggermente alcune regioni che iniziano a mostrarsi, e man mano che si continua ad aumentare la soglia in questo modo, per poi andare fino alla terza fila, si possono vedere regioni più stabili che si presentano mentre si va avanti. Questo è quindi un altro approccio per scoprire blobi o regioni in un'immagine chiamata immagini estreme più stabili. (13.48) Un altro metodo famoso probabilmente è già stato esposto a questo quando abbiamo parlato di sift, ma questo metodo è stato anche sviluppato in modo indipendente per essere in grado di rilevare gli esseri umani in immagine è noto come istogrammi di gradienti orientati o popolarmente noti come hog o HOG. Così questo originariamente era stato proposto in una carta che veniva utilizzata per il rilevamento umano in diversi tipi di immagini. Quindi, diciamo che hai avuto una porzione di immagine o un'immagine contenente un umano, quindi in ogni luogo in cui la finestra è applicata si compatte sfumature. Ricordate, le sfumature di calcolo sono semplicemente un rilevatore di bordo qualunque sia il rivelatore e volete scegliere. E poi si divide l'intera immagine sfumata in una griglia uniformemente distanziata. E poi per ogni 2 cross 2 di blocco in questa griglia si calcola i tuoi orientamenti delle sfumature, molto simile a come ne abbiamo parlato per il sift avresti detto più orientamenti. Diciamo che definirete 8 diversi orientamenti che vedete quanti pixel in quel blocco avevano orientazioni di sfumature in certi bidoni e vi imbattiamo per ottenere un istogramma per ogni blocco da 2 cross 2. E fai questo sovrapposizione di 2 blocchi di 2 incrociati, che ti dà gli istogrammi che vedi su questa immagine su ogni centro di griglia. Così potete vedere qui che ognuno di questi, ognuno di questi è solo un modo diverso di disegnare un istogramma. Ricordate, ancora, se ricordate, una cosa del genere era solo un altro modo di disegnare un istogramma con 8 bidoni in 8 direzioni in cui la lunghezza della freccia denota il conteggio delle frequenze in ognuno di quei bidoni. Questo è solo un altro modo di rappresentare che o questo potrebbe essere un altro modo di rappresentare orientamenti di gradimento nell'ottenere l'istogramma. Così l'istogramma di sfumature orientate si mostrava molto efficace per rilevare gli esseri umani in un'immagine a metà degli anni ' 2000s. (16.00) E questo è stato migliorato anche per dare quello che è noto come piramidale HOG, un hog di PHOG, dove in ogni, ad ogni passo, hai diviso l'immagine in parti e costruito una rappresentazione di HOG per ogni parte singolarmente, e poi concatenata, tutti a formare una rappresentazione. Come si fa? Si divide un'immagine in 2 x celle ad ogni livello di permesso l. Quindi, se io fossi l 2 l 1, lo divideresti in due incroci, l'intera immagine in 2 x 2 celle, 4 celle o se fossi 2 lo divideresti in 4 croce 4 croce così su e così via. Ora per ognuna di queste cellule si estrae i descrittori HOG solo il modo in cui abbiamo parlato sulla slide precedente e poi concatenate gli HOGs a diversi livelli piramidali per dare un intero istogramma di gradiente di gradimento orientato. Così come potete vedere, questo può essere fatto in diversi modi, si otterrebbe un istogramma di gradienti orientati per ogni cellula e concatenare tutti e poi si otterrebbe un istogramma di gradienti orientati a l è uguale a 0, l è uguale a 1 e si può concatenare tutto questo anche per ottenere la vostra rappresentazione finale. Così questo metodo è stato mostrato per catturare relazioni spaziali tra diciamo oggetti un po' meglio di HOG, che non lo fa a livello piramidale. (17.33) Un altro metodo popolare, ampiamente utilizzato per le immagini del viso in particolari volti umani, era conosciuto come pattern binari locali. I pattern binari locali hanno avuto un'idea interessante dove regalare un'immagine per ogni pixel che prendi, ad esempio, un quartiere 3 cross 3 intorno a un pixel, quindi questo è il logo IIT Hyderabad. Quindi si considera un pixel e un quartiere di 3 cross 3 intorno al pixel scrivono i valori di intensità di quei pixel. Ora, rispetto al pixel centrale si decide se ognuno degli altri pixel intorno fosse inferiore o superiore. Se fosse inferiore, si imposterebbe un 0, se uguale o superiore, è possibile impostarlo su 1, che ora ti dà uno schema binario intorno al pixel centrale. Una volta che si definisce una rappresentazione canonica, il che significa che si dice che inizierò al top a sinistra, per poi passare in modo circolare, è possibile definire una rappresentazione binaria per questo pixel particolare. Quindi ancora una volta, lo ripeterò. Si definisce così una rappresentazione binaria basata su come ogni pixel è correlato ai pixel centrali in densità. Quindi ora, questo valore è ora di 15 in decimale e si sostituisce quel valore di pixel con 15, altri valori intorno sarebbero similari ottenuti facendo un LBP posizionato a quel pixel particolare e così via. Ora, cosa si fa con questa nuova rappresentazione LBP? (19.14) Prima di andare lì, puoi anche definire quartieri in più modi. Abbiamo detto che avresti preso un 3 per 3 di quartiere e prenota subito i 8 pixel che potrebbero non essere sempre il caso, puoi variare due diversi parametri qui, puoi definire il tuo raggio r puoi anche definire il numero di vicini P. Così puoi avere un raggio particolare in cui vuoi calcolare il tuo pattern binario locale con quello potrebbe non essere il vicino immediato. Può essere un raggio di quattro, cinque pixel intorno al pixel centrale. E puoi anche definire quanti vicini vuoi in quel raggio. Così si potrebbe definire p è uguale a 8, il numero dei vicini è di 8 e r è uguale a 2, come si può vedere, questo è l'esempio che si vede su questa particolare immagine. Allo stesso modo, si potrebbe avere un quartiere più vicino, r è pari a 1, ma il numero di vicini per essere uguale p è pari a 8. Allo stesso modo, potresti avere un r è uguale a 2, potresti aumentare il numero di vicini e farlo p è uguale a 12 e a r è uguale a 3 in più, potresti avere ancora 12 vicini di casa. Una volta definiti i vicini, se questi vicini risiedono tra due pixel, è possibile utilizzare l'interpolazione bilineare per ottenere quei valori. Quindi una volta definiti R e P, in base a quei valori, si otterrebbe uno schema binario intorno al pixel centrale. Lo scrivi in modo circolare come un numero binario, convertirlo in decimale e sostituire il pixel centrale con quel particolare valore. Che cosa fai con quello? (20.51) Così una volta ottenuto un risultato LBP, che è la tua intensità LBP per ogni pixel, ricordati il precedente processo di cui abbiamo parlato nella slide precedente ti dà un decimale per ogni pixel intorno al quale hai considerato il quartiere. Così si potrebbe ora costruire una simile immagine per ogni pixel, si potrebbe ripetere la stessa cosa e costruire un'immagine così LBP. Una volta che si fa questo, si divide il risultato LBP in regioni o griglie e ancora una volta si può ottenere un istogramma di ogni regione, il numero di pixel in ogni regione in questo specifico caso e concatenare tutti ad essere in grado di ottenere un'unica rappresentazione per la regione o un'intera immagine. In questo caso non stiamo considerando le sfumature che è semplicemente l'istogramma, ma si potrebbe anche migliorare LBP per considerare sfumature in ogni cella, così via e così via. Ci sono stati diversi miglioramenti di LBP o pattern binari locali che hanno considerato questi tipi di variazioni. (21.54) Così ecco un rapido riassunto di vari rivelatori di funzionalità. Ne abbiamo visti alcuni. Potremmo non avere la possibilità di vederli tutti, ma siete i benvenuti a guardare la fonte di questo particolare tavolo per capire più funzioni, ma potete visualizzare tutte le caratteristiche in termini di se sono rilevatori d'angolo, rivelatori blob o aiutano a trovare regioni se sono invarianti di rotazione, invarianti di scala, invarianti affini. Quanto ripetibili si ricordano, la ripetibilità consiste nel garantire che se hai trovato un pixel particolare per essere un angolo, in un'immagine particolare, se hai la stessa immagine presa da un angolo diverso, in un'altra foto o stessa scena scattata come una foto in un altro angolo che l'angolo dovrebbe anche essere rilevato come un angolo nella seconda immagine. Questa è nota come ripetibilità. Quanto è buona la precisione di localizzazione? Ricordate, abbiamo parlato di precisione di localizzazione anche per il rilevatore di bordo canny dove abbiamo detto, è il punto esattamente dove dovrebbe essere o è a pochi pixel lontano dall'angolo effettivo che conosciamo. Quanto è robusta il metodo al rumore e quanto è veloce il metodo? Si tratta quindi di vari parametri in cui, utilizzando il quale si può valutare la bontà dei metodi che abbiamo discusso finora. Così il rilevatore d'angolo di Harris, prendiamoci alcuni di loro e basta superarli. L'Harris è un rilevatore d'angolo, è invariante di rotazione, come abbiamo visto non necessariamente scala o invariante, come abbiamo già visto. È abbastanza ripetibile, è ragionevolmente buono con la localizzazione, la precisione, la robustezza, nonché l'efficienza. Prendiamo un altro. Consideriamo SURF, che è un miglioramento rispetto a SIFT che abbiamo visto un paio di lezioni indietro, che è un rilevatore d'angolo o un rilevatore di blob, può essere usato in entrambi i modi. È invariante di rotazione, e invariante di scala che è lo scopo di sift e SURF per essere invarianti di scala. È in nome del sift stesso. Ed è anche abbastanza ripetibile abbastanza accurato in termini di localizzazione, robustezza ed è estremamente efficiente. Sappiamo di aver visto che SURF è quasi tre volte più veloce di sift. Così si può analogamente guardare a dire MSER, che è quello che abbiamo appena visto qualche slide fa è un rilevatore di regione, che è ragionevolmente rotazione invariante, invariante scala e invariante affine ed è anche ripetibile, accurato in termini di localizzazione, robustezza ed efficienza. Maggiori dettagli su altri rivelatori di funzionalità, guardate questo nei riferimenti, e potete guardare la carta per ottenere un'indagine più dettagliata su altri estrattori di feature. (24:43) Perché non stiamo discutendo ognuno di questi è quello di cui parleremo prossimamente, ovvero tante rappresentazioni di immagini che si usavano nell'era dell'apprendimento pre - profondo, non più rilevanti a causa del successo di deep lguadagna nelle funzioni di estrazione che sono estremamente buone per vari compiti di visione del computer. Ricordate quando abbiamo parlato della storia del deep learning, abbiamo detto che a metà degli anni ' 1960s Marvin Minsky ha iniziato con un progetto estivo per poter risolvere il problema della visione dei computer, ma molti decenni dopo l'apprendimento profondo sono stati in grado di fare in modo significativo quel progresso in questo momento.