Come risolvere l'etichettatura binaria con il taglio del grafico?

3

Molti riferimenti bibliografici suggeriscono che il problema di etichettatura binaria può essere convertito in un problema di taglio del grafico e risolto con l'algoritmo massimo di flusso / taglio minimo. Sto cercando di capire la formulazione fornita in presentazione di Xiaowei Zhou della riduzione.

Il problema dell'etichettatura binaria consiste nel partizionare n elementi (qui segmenti delle regioni sovrapposte di due immagini) in due insiemi disgiunti in un modo che riduce al minimo una funzione energetica. Possiamo indicare la partizione come vettore (x_1, ..., x_n) i cui elementi sono 0 o 1 ; abbiamo anche funzioni di fitness per articolo D_i ; e definiamo una funzione di transizione per-item-pair V_{i,j} che penalizza le discontinuità. Quindi la funzione energetica è data da

E(x_1, ..., x_n) = SUM_p D_p(x_p) + SUM_{p,q} V_{p,q}(x_p, x_q)

Nel mio caso particolare ho 32 segmenti, quindi ci sono 2 ^ 32 possibili vettori da valutare. Potrei valutare E per ciascuna combinazione, eseguendo 2 ^ 32 valutazioni, e quindi ottenere l'energia minima e la combinazione che la raggiunge. Questo è ciò che suggerisce il mio intuito. Ma questo non è pratico, perché la complessità è esponenziale.

Quindi voglio usare l'approccio del taglio grafico, ma non capisco come formulare il grafico. I 32 segmenti sono i nodi del grafico, ma quale sarebbe il peso dei bordi? E quale sarebbe la capacità?

    
posta Rifat Rousseau 26.09.2013 - 18:16
fonte

1 risposta

3

Ho intenzione di provare questo dai primi principi basati sulla mia comprensione dai documenti che ho letto. Attenzione: ho lasciato un falso avvio.

Fase di inizializzazione 1

Ai tuoi 32 nodi di nodi aggiungiamo un nodo sorgente S e un nodo sink T . Quindi miriamo a costruire cose tali che un taglio che partiziona i nodi in insiemi disgiunti, uno contenente S e l'altro contenente T , abbia una capacità pari all'energia della partizione corrispondente.

Quindi iniziamo aggiungendo i bordi da S a ogni segmento p con capacità D_p(1) (questi bordi vengono tagliati se i segmenti sono nella metà di T ) e da ogni segmento% da% a p con capacità T (questi bordi vengono tagliati se i segmenti si trovano nella metà di D_p(0) ).

Fase di inizializzazione 2

Quindi eseguiamo un ciclo attraverso il% non trascurabile di% co_de aggiornando il sottografo generato da S , V_{p,q} , S e p . Aggiungiamo un margine q e un margine T , e aggiorniamo anche le capacità di p->q , q->p , S->p , S->q . Il nostro obiettivo è di rendere questi aggiornamenti in modo tale che ogni taglio abbia un aumento della capacità totale di p->T per i corrispondenti valori di q->T , V_{p,q}(x_p, x_q) . Disegniamo una tabella del bordi tagliati da ciascuno dei quattro casi:

x_p  x_q  Edges cut
 0    0   p->T, q->T
 0    1   p->T, S->q, p->q, (q->p)
 1    0   S->p, q->T, (p->q), q->p
 1    1   S->p, S->q

(I bordi tra parentesi sono i bordi posteriori e quindi non influenzano la capacità del taglio).

I valori dei delta

Quindi se la capacità cambia del nostro aggiornamento è x_p deriviamo le equazioni simultanee

       c_pT        + c_qT               = V_{p,q}(0,0)
       c_pT + c_Sq        + c_pq        = V_{p,q}(0,1)
c_Sp               + c_qT        + c_qp = V_{p,q}(1,0)
c_Sp        + c_Sq                      = V_{p,q}(1,1)

Questo è sottodeterminato. L'approccio semplice sembra essere quello di impostare x_q ed eliminare efficacemente i bordi tra i vicini. Tuttavia, questo è ovviamente singolare. Il prossimo approccio facile è impostare c_{vertex,vertex} . Quindi otteniamo:

c_Sq = V_{p,q}(1,1)
c_qT = V_{p,q}(0,0)
c_pq = V_{p,q}(0,1) - V_{p,q}(1,1)
c_qp = V_{p,q}(1,0) - V_{p,q}(0,0)

ottimizzazione

Abbiamo finito?

L'obiettivo era quello di ottenere il taglio uguale all'energia. Vogliamo ridurre al minimo l'energia, il che significa trovare un taglio minimo e siamo assolutamente d'accordo, purché tutte le variazioni di capacità sopra riportate siano non negative. Per qualsiasi ragionevole funzione di penalizzazione della transizione possiamo aspettarci che una transizione sia penalizzata più di una non transizione, quindi va bene.

Tuttavia, vi è una piccola ottimizzazione che richiede l'approccio standard. Se assicuriamo che ogni taglio aggiunga lo stesso valore costante c_pq = c_qp = 0 all'energia, allora non cambia quale input fornisce la soluzione minima. Quindi possiamo aggiungere c_Sp = c_pT = 0 alle nostre equazioni simultanee e ottenere

       c_pT        + c_qT               = K + V_{p,q}(0,0)
       c_pT + c_Sq        + c_pq        = K + V_{p,q}(0,1)
c_Sp               + c_qT        + c_qp = K + V_{p,q}(1,0)
c_Sp        + c_Sq                      = K + V_{p,q}(1,1)

Ora, l'approccio standard a un determinato sistema è di impostare K , riducendo a

       c_qT        - K' = V_{p,q}(0,0)
            + c_pq - K' = V_{p,q}(0,1)
c_Sp + c_qT        - K' = V_{p,q}(1,0)
c_Sp               - K' = V_{p,q}(1,1)

con soluzione

K'   = V_{p,q}(1,0) - V_{p,q}(0,0) - V_{p,q}(1,1)
c_Sp = V_{p,q}(1,0) - V_{p,q}(0,0)
c_qT = V_{p,q}(1,0) - V_{p,q}(1,1)
c_pq = V_{p,q}(0,1) + V_{p,q}(1,0) - V_{p,q}(0,0) - V_{p,q}(1,1)

Questo richiede solo un margine aggiuntivo tra K e c_Sq = c_qp = c_pT = 0 , che darà una piccola ottimizzazione nell'impostazione e nel calcolo del flusso del grafico. Ovviamente, induce dei vincoli di disuguaglianza leggermente diversi sui valori che p può assumere.

Mettere tutto insieme

Per ogni q , aggiungiamo gli spigoli

S->p with weight D_p(1) + SUM_q (V_{p,q}(1,0) - V_{p,q}(0,0))
p->T with weight D_p(0) + SUM_q (V_{q,p}(1,0) - V_{q,p}(1,1))

Per ogni V_{p,q} aggiungiamo il bordo

p->q with weight V_{p,q}(0,1) + V_{p,q}(1,0) - V_{p,q}(0,0) - V_{p,q}(1,1)
    
risposta data 27.09.2013 - 01:29
fonte

Leggi altre domande sui tag