Graph cut

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

Graph cut è un metodo di ottimizzazione applicabile a un'ampia famiglia di funzioni di variabili discrete, che deve il suo nome al fatto di essere basato sulla teoria delle reti di flusso. Grazie al teorema del flusso massimo e taglio minimo, determinare il taglio minimo su un grafo rappresentante una rete di flusso è equivalente a calcolare il flusso massimo sulla rete stessa. Data una funzione pseudo-booleana, se è possibile costruire una rete di flusso tale che per ogni possibile taglio il valore del flusso tagliato corrisponda a un assegnamento di variabili alla funzione e viceversa, è possibile trovare il minimo globale della funzione in tempo polinomiale calcolando un taglio minimo del grafo che rappresenta tale rete di flusso.

Non tutte le funzioni pseudo-booleane sono rappresentabili tramite una rete di flusso, e la ricerca del minimo globale nel caso generale è un problema NP-hard. Esistono condizioni sufficienti che caratterizzano famiglie di funzioni ottimizzabili tramite graph cut in tempo polinomiale, come ad esempio le funzioni quadratiche submodulari. È possibile estendere il metodo a funzioni a variabili discrete con più di due valori tramite algoritmi iterativi approssimati, con forti garanzie di ottimalità del risultato, che calcolano un taglio minimo a ogni iterazione.

L'ottimizzazione tramite graph cut è uno strumento utile per l'inferenza su modelli grafici, ad esempio campi di Markov casuali e campi condizionali casuali, e ha applicazioni in molti problemi di analisi digitale delle immagini e visione artificiale come segmentazione,[1][2] eliminazione del rumore,[3] registratura[4][5] e stereo matching.[6][7]

Rappresentabilità[modifica | modifica wikitesto]

Una funzione pseudo-booleana è detta rappresentabile tramite un grafo se esiste un grafo a pesi non negativi con nodi terminali sorgente e pozzo e un sottinsieme di vertici tale che, per ogni tupla di valori assegnati alle variabili, è uguale (a meno di una costante) al valore del flusso determinato da un taglio minimo del grafo tale che se e se .[8]

È possibile classificare le funzioni pseudo-booleane in base al loro ordine, determinato dal numero massimo di variabili contenute in un singolo termine. Tutte le funzioni di primo ordine sono sempre rappresentabili. Le funzioni quadratiche, che hanno forma

sono rappresentabili se e solo se soddisfano una condizione detta di submodularità, ovvero se per ogni termine della parte quadratica si verifica che

Le funzioni cubiche, che hanno forma

sono rappresentabili se e solo se sono regolari, ovvero tutte le possibili proiezioni in due variabili della funzione (ottenute fissando una delle tre variabili) sono submodulari. Per funzioni di ordine superiore, la regolarità è una condizione necessaria per la rappresentabilità.[8]

Costruzione del grafo[modifica | modifica wikitesto]

La costruzione del grafo di una funzione rappresentabile è semplificata dal fatto che la somma di due funzioni rappresentabili e è a sua volta rappresentabile, e il corrispondente grafo è dato dall'unione dei rispettivi grafi e . Tale teorema consente di costruire grafi separati per ogni termine, che possono essere uniti per ottenere il grafo dell'intera funzione.[8]

Il grafo associato ad una funzione quadratica a variabili contiene nodi, due dei quali rappresentano la sorgente e il pozzo, e i restanti rappresentano le variabili. Per funzioni di ordine superiore, il grafo contiene nodi ausiliari che permettono di rappresentare interazioni di ordine più elevato.

Termini unari[modifica | modifica wikitesto]

Un termine unario dipendente da una sola variabile può essere rappresentato da un grafo con un nodo non terminale e un arco con peso se , o con peso se .[8]

Termini binari[modifica | modifica wikitesto]

Esempio di grafo rappresentante un termine quadratico nel caso in cui e .

Un termine quadratico (o binario) può essere rappresentato da un grafo contenente due nodi non terminali e . Il termine può essere riscritto equivalentemente come

con

In questa espressione, il primo termine è una costante e non è rappresentato da alcun vertice, i due termini successivi dipendono da una variabile e sono dunque rappresentati da un arco, nella maniera descritta in precedenza per i termini unari, infine il quarto termine è rappresentato da un arco con peso (la condizione di submodularità garantisce che il peso sia non negativo).[8]

Termini ternari[modifica | modifica wikitesto]

Un termine cubico (o ternario) può essere rappresentato da un grafo con quattro nodi non terminali, tre dei quali , e sono associati alle tre variabili, con l'aggiunta di un quarto nodo ausiliario .[9] Un generico termine ternario può essere riscritto come somma di una costante, tre termini unari, tre termini binari e un termine ternario in forma semplificata. Si possono verificare due casi diversi a seconda del segno della quantità . Se si ha

Esempio di grafo rappresentante il termine ternario nel caso in cui (sinistra) e (destra).

con

Se la costruzione è analoga ma le variabili assumeranno valore opposto. Se la funzione di partenza è regolare allora tutte le sue proiezioni in due variabili sono submodulari, garantendo che , e siano positivi e che dunque tutti i termini che compongono la nuova rappresentazione siano submodulari.

In questa decomposizione, i termini costante, unari e binari possono essere rappresentati come visto in precedenza. Se l'ultimo termine ternario può essere rappresentato da un grafo con quattro archi , , , tutti con peso , mentre se il termine può essere rappresentato da quattro archi , , , con peso .[8]

Calcolo del taglio minimo[modifica | modifica wikitesto]

Una volta costruito il grafo rappresentante una funzione pseudo-booleana, è possibile calcolare il taglio minimo usando uno tra i vari algoritmi per reti di flusso, come quelli di Ford-Fulkerson, Edmonds-Karp o Boykov-Kolmogorov. Il risultato è una partizione del grafo in due componenti connesse e tali che e , e il minimo globale della funzione è raggiunto quando per ogni tale che il corrispondente nodo , e per ogni tale che il corrispondente nodo .

Algoritmi di flusso massimo come quello di Boykov-Kolmogorov sono molto efficienti in pratica per il calcolo del taglio minimo in maniera sequenziale, ma hanno lo svantaggio di non essere facilmente parallelizzabili, fatto che impedisce di sfruttare l'inerente parallelismo dell'hardware moderno e ne limita l'uso in applicazioni di calcolo distribuito. Diversi algoritmi paralleli per il calcolo del flusso massimo sono stati sviluppati, tra i quali push-relabel[10] e jump-flood,[1] che possono anche trarre vantaggio dell'accelerazione hardware in implementazioni GPGPU.[1][11][12]

Funzioni di variabili discrete con più di due valori[modifica | modifica wikitesto]

La costruzione precedente permette l'ottimizzazione globale di funzioni pseudo-booleane, ma è possibile estendere l'ottimizzazione graph cut a funzioni quadratiche di variabili discrete con un numero finito di valori nella forma

con e . La funzione rappresenta il contributo unario delle singole variabili (spesso riferito come data term), mentre la funzione rappresenta l'interazione binaria fra le variabili (smoothness term). In generale, l'ottimizzazione globale di tali funzioni è un problema NP-hard, e metodi di ottimizzazione stocastica come ad esempio simulated annealing sono sensibili a minimi locali e in pratica possono generare risultati arbitrariamente sub-ottimali.[13] Tramite graph cut è possibile costruire algoritmi di move-making che consentono di ottenere in tempo polinomiale un minimo locale con forti proprietà di ottimalità per un'ampia famiglia di funzioni quadratiche di interesse pratico (nel caso l'interazione binaria sia una metrica o semimetrica), tale che il valore della funzione nella soluzione si trova entro un fattore noto dal minimo globale.[14]

Data una funzione con , e un certo assegnamento di valori alle variabili, è possibile associare ogni assegnamento con una partizione dell'insieme delle variabili, tale che . Dati due diversi assegnamenti di variabili e e un valore , una mossa che trasforma in è detta -expansion se e . Data una coppia di valori e , una mossa è detta -swap se . Intuitivamente, una mossa di -expansion a partire da consiste nell'assegnare il valore ad alcune variabili che hanno un valore differente in . Una mossa di -swap consiste nell'assegnare ad alcune variabili che in hanno valore e viceversa.

Ad ogni iterazione, l'algoritmo di -expansion calcola, per ogni possibile valore , il minimo della funzione fra tutti gli assegnamenti che possono essere ottenuti tramite una mossa di -expansion a partire dalla soluzione corrente , e lo assegna come nuovo valore della soluzione.



while :
    
    foreach :
        
        if :
            
            

L'algoritmo di -swap è simile, ma cerca il minimo tra tutti gli assegnamenti ottenibili tramite una mossa di -swap a partire da .



while :
    
    foreach :
        
        if :
            
            

In entrambi i casi, il problema di minimizzazione contenuto nel ciclo più interno può essere risolto esattamente ed efficientement tramite graph cut. Entrambi gli algoritmi terminano certamente in un numero finito di iterazioni, ed in pratica il numero di iterazioni è piccolo e la maggior parte del miglioramento della soluzione avviene alla prima iterazione. Gli algoritmi possono produrre risultati diversi a seconda del valore iniziale assegnato alla soluzione, ma in pratica sono robusti rispetto all'inizializzazione e partire da una soluzione iniziale con tutte le variabili assegnate ad uno stesso valore arbitrario è generalmente sufficiente per ottenere buoni risultati.[14]

La soluzione prodotta da tali algoritmi non è necessariamente un punto di ottimo globale, ma ha comunque forti garanzie di ottimalità. Se è una metrica e è una soluzione generata dall'algoritmo di -expansion, oppure se è una semimetrica e è una soluzione generata dall'algoritmo di -swap, allora si trova entro un fattore noto e costante dal minimo globale :[14]

Funzioni non submodulari[modifica | modifica wikitesto]

Lo stesso argomento in dettaglio: Quadratic pseudo-Boolean optimisation.

In generale, il problema di minimizzare una funzione pseudo-booleana non submodulare è NP-hard e non può sempre essere risolto in tempo polinomiale con un semplice graph cut. L'approccio pratico più semplice è quello di approssimare la funzione obiettivo con una funzione simile ma submodulare, ad esempio troncando tutti i termini non submodulari o sostituendoli con espressioni simili ma submodulari. Tuttavia, tale approccio produce in genere risultati sub-ottimali, la cui qualità è accettabile solo se il numero di termini non submodulari è relativamente piccolo.[15]

Nel caso di funzioni non-submodulari quadratiche, è possibile ottenere in tempo polinomiale una soluzione parziale tramite algoritmi come QPBO.[15] Funzioni di ordine superiore possono essere ridotte in tempo polinomiale in forma quadratica ottimizzabile tramite QPBO.[16]

Funzioni di ordine superiore[modifica | modifica wikitesto]

Molti risultati sono concentrati sull'ottimizzazione di funzioni quadratiche, che sono state studiate e caratterizzate in maniera approfondita, ma condizioni più generali sono state sviluppate anche per funzioni di ordine superiore. Mentre infatti le funzioni quadratiche permettono di modellare efficacemente molti problemi, sono tuttavia limitate dal fatto di poter esprimere solo interazioni binarie tra le variabili. La possibilità di integrare interazioni di ordine superiore in un modello in alcuni contesti permette di catturare più efficacemente la natura del problema e fornisce risultati di qualità più elevata. Un esempio sono applicazioni di elaborazione digitale delle immagini, dove ogni variabile rappresenta un pixel o voxel dell'immagine e interazioni di ordine superiore possono catturare ad esempio informazioni sulle texture, che sarebbero difficili o impossibili da incorporare in un modello espresso da una funzione quadratica.[17]

Condizioni sufficienti analoghe alla submodularità sono state studiate per caratterizzare funzioni pseudo-booleane di ordine superiore che possono essere ottimizzate in tempo polinomiale,[18] ed esistono estensioni degli algoritmi di -expansion e -swap per alcune famiglie di funzioni di ordine superiore.[17] Il problema è comunque NP-hard nel caso generale, e metodi approssimati sono stati sviluppati per l'ottimizzazione efficiente di funzioni che non soddisfano tali condizioni.[18][19]

Note[modifica | modifica wikitesto]

  1. ^ a b c Peng et al., pp. 655-666.
  2. ^ Rother et al., pp. 309-314.
  3. ^ Lombaert e Cheriet, pp. 264-268.
  4. ^ So et al., pp. 2450-2467.
  5. ^ Tang e Chung, pp. 916-924.
  6. ^ Kim et al., pp. 1033-1040.
  7. ^ Hong e Chen, pp. 74-81.
  8. ^ a b c d e f Kolmogorov e Zabin, pp. 1645-1656.
  9. ^ L'aggiunta di un nodo ausiliario è necessaria, in quanto un grafo senza nodi ausiliari può rappresentare solo interazioni binarie tra le variabili.
  10. ^ Goldberg e Tarjan, pp. 921-940.
  11. ^ Vineet e Narayanan, pp. 1-8.
  12. ^ Stich.
  13. ^ Algoritmi come simulated annealing hanno forti proprietà di convergenza teoriche per scheduling della temperatura all'infinito. Tali scheduling non sono tuttavia fattibili in pratica.
  14. ^ a b c Boykov et al., pp. 1222-1239.
  15. ^ a b Kolmogorov e Rother, pp. 1274-1279.
  16. ^ Ishikawa, pp. 1362-1369.
  17. ^ a b Kohli et al. (2009), pp. 1645-1656.
  18. ^ a b Freedman e Drineas, pp. 939-946.
  19. ^ Kohli et al. (2008), pp. 1-9.

Bibliografia[modifica | modifica wikitesto]

  • Yuri Boykov, Olga Veksler e Ramin Zabih, Fast approximate energy minimization via graph cuts, in IEEE Transactions on pattern analysis and machine intelligence, vol. 23, n. 11, IEEE, 2001, pp. 1222–1239.
  • Daniel Freedman e Petros Drineas, Energy minimization via graph cuts: Settling what is possible, IEEE Computer Society Conference on Computer Vision and Pattern Recognition, vol. 2, 2005.
  • Andrew V Goldberg e Robert E Tarjan, A new approach to the maximum-flow problem, in Journal of the ACM (JACM), vol. 35, n. 4, ACM, 1988, pp. 921–940.
  • Hiroshi Ishikawa, Higher-Order Clique Reduction Without Auxiliary Variables, IEEE Conference on Computer Vision and Pattern Recognition, IEEE, 2014.
  • Li Hong e George Chen, Segment-based stereo matching using graph cuts, Proceedings of the 2004 IEEE Computer Society Conference on Computer Vision and Pattern Recognition, vol. 1, 2004.
  • Pushmeet Kohli, M. Pawan Kumar e Philip H.S. Torr, P3 & Beyond: Move Making Algorithms for Solving Higher Order Functions, in IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 31, n. 9, IEEE, 2009.
  • Junhwan Kim, Vladimir Kolmogorov e Ramin Zabih, Visual correspondence using energy minimization and mutual information, Proceedings of the Ninth IEEE International Conference on Computer Vision, 2003.
  • Pushmeet Kohli, Lubor Ladicky e PHS Torr, Graph cuts for minimizing robust higher order potentials, Technical report, Oxford Brookes University, 2008.
  • Vladimir Kolmogorov e Carsten Rother, Minimizing Nonsubmodular Functions: A Review, in IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 29, n. 7, IEEE, luglio 2007.
  • Vladimir Kolmogorov e Ramin Zabin, What energy functions can be minimized via graph cuts?, in IEEE transactions on pattern analysis and machine intelligence, vol. 26, n. 2, IEEE, 2004.
  • Herve Lombaert e Farida Cheriet, Simultaneous image de-noising and registration using graph cuts: Application to corrupted medical images, 11th International Conference on Information Science, Signal Processing and their Applications, 2012.
  • Yi Peng, Li Chen, Fang-Xin Ou-Yang, Wei Chen e Jun-Hai Yong, JF-Cut: a parallel graph cut approach for large-scale image and video, in IEEE Transactions on Image Processing, vol. 24, n. 2, IEEE, 2015, pp. 655–666.
  • Carsten Rother, Vladimir Kolmogorov e Andrew Blake, Grabcut: Interactive foreground extraction using iterated graph cuts, ACM transactions on graphics, vol. 23, 2004.
  • Ronald WK So, Tommy WH Tang e Albert CS Chung, Non-rigid image registration of brain magnetic resonance images using graph-cuts, in Pattern Recognition, vol. 44, n. 10-11, Elsevier, 2011, pp. 2450–2467.
  • Timo Stich, Graph Cuts with CUDA (PDF), GPU Technology Conference, 2009.
  • Tommy WH Tang e Albert CS Chung, Non-rigid image registration using graph-cuts, International Conference on Medical Image Computing and Computer-Assisted Intervention, 2007.
  • Vibhav Vineet e PJ Narayanan, CUDA cuts: Fast graph cuts on the GPU, IEEE Computer Society Conference on Computer Vision and Pattern Recognition Workshops, 2008.

Collegamenti esterni[modifica | modifica wikitesto]

  • Implementazione in C++ di diversi algoritmi di ottimizzazione graph cut, a cura di Vladimir Kolmogorov.
  • GCO, libreria di ottimizzazione graph cut a cura di Olga Veksler e Andrew Delong.
  Portale Matematica: accedi alle voci di Wikipedia che trattano di matematica