Upload
nitmk
View
957
Download
0
Embed Size (px)
Citation preview
Maximum Flows by Incremental Breadth–First Search
Introduction
• 最大フローの計算
– 典型的な最適化問題
– いろんなところで使われている
• 最小カット
– コンピュータビジョン(Graph cuts)では重要なツール
• Segmentation
• Stereo
• Multiview reconstruction
Graph cuts
• 画像に対応するグリッドグラフ
– s,tは全頂点と接続
• BKアルゴリズム
– Boykov & Kolmogorov
– 実用的に高速だが…
– 多項式時間での上界は知られていない
指数時間かかるような例は知られていないが ビジョン以外のグラフでは実用的ではない
Theoretical point of view
• augmenting path
– Ford-Fulkerson
– Edmonds-Karp
• network simplex
• blocking flow (Dinic)
• push-relabel Fast!
Practical point of view
• blocking flow (Dinic)
• push-relabel
• visionのグラフでは
– BKが実用的
汎用に高速
In this paper…
• BK + shortest augmentation path
– blocking flow (Dinic)とよく似たアルゴリズム
• 補助ネットワークの構築がボトルネック
– Incremental mannerにより低コストで 補助ネットワークを構築
• BKのように両方向から構築
Incremental Breadth First Search (IBFS)
Definitions and Notation
• 割愛
– 必要ならばその都度定義
BKアルゴリズム
– Growth
– Augment
– Adoption
s t
BKアルゴリズム - growth
s t
BKアルゴリズム - growth
s t
BKアルゴリズム - growth
s t
BKアルゴリズム - growth
s t
BKアルゴリズム - augment
s t
BKアルゴリズム - augment
s t
飽和
orphans
BKアルゴリズム - adoption
s t v
u v
Orphan頂点v の親を探す
vと接続する残余容量が正の辺(u,v)
BKアルゴリズム - adoption
s t v
u v
Orphan頂点v の親を探す
vと接続する残余容量が正の辺(u,v)
親が見つかった!! 親が見つからなかった
Free頂点になる
BKアルゴリズム
• augmenting pathの一種
– 見つかるパスは最短ではない
– 多項式時間での上界は不明
IBFS overview
• 探索木S,Tを幅優先木として保持
– s,tからの距離をDs, Dt
– 探索木Sの頂点のsからの距離はDs以下
≃ 木の高さ
s t
𝐷𝑠 = 𝐷𝑡=2
𝐿 = 𝐷𝑠 + 𝐷𝑡 + 1 augmenting pathの長さの下界
各頂点の取りうる値
• S-vertex
• T-vertex
• S-orphan
• T-orphan
• N-vertex
s t
IBFS overview
• 𝑑𝑠(𝑣) : 頂点𝑣 ∈ 𝑆 のラベル
• 𝑑𝑡(𝑣) : 頂点𝑣 ∈ 𝑇 のラベル
s t
2sd1sd
1td2td
IBFS overview
• ラベルの有効性
– 残余辺(𝑢, 𝑣)について𝑑𝑠 𝑣 ≤ 𝑑𝑠 𝑢 + 1
– T側は対称
• 𝑎𝑑𝑚𝑖𝑠𝑠𝑖𝑏𝑙𝑒 𝑎𝑟𝑐 (𝑢, 𝑣)
– S側 : 残余辺(𝑢, 𝑣)について𝑑𝑠 𝑢 = 𝑑𝑠 𝑣 − 1
– T側 : 残余辺(𝑢, 𝑣)について𝑑𝑠 𝑣 = 𝑑𝑠 𝑢 − 1
1sd 2sd
IBFS : Initially
• 𝑆 = 𝑠 , 𝑇 = 𝑡
• 𝑎𝑐𝑡𝑖𝑣𝑒 𝑙𝑖𝑠𝑡 = 𝑠, 𝑡
• 𝑑𝑠 𝑠 = 𝑑𝑡 𝑣 = 0
• 𝐷𝑠 = 𝐷𝑡 = 0
• 探索木Sを成長させると仮定
s t
IBFS : growth
• 探索木Sを1段階成長させる
• 𝑑𝑠 𝑣 = 𝐷𝑠 の頂点𝑣をすべてactiveに
s t
2sd1sd
2sD a
a
a
a
IBFS : growth
• active頂点𝑣を選択して残余辺 𝑣, 𝑤 を調べる
– 頂点𝑤がN-vertexなら
• 𝑝 𝑤 = 𝑣
• 𝑑𝑠 𝑤 = 𝐷𝑠 + 1
s t a
a
a
a
v w
w
2sd
2sD
1sd 3sd
IBFS : growth
• active頂点𝑣を選択して残余辺 𝑣, 𝑤 を調べる
– 頂点𝑤がT-vertexなら
• augmentationへ
s t a
a
a
a
w v
2sd
2sD
1sd
IBFS : augmentation
• BKと同じ
– 見つかったパスにフローを流す
• 最短s-tパスが見つかる(あとあと証明)
s t a
a
a
a
w v
IBFS : adoption
• bridge(𝑣, 𝑤)以外の辺が飽和
– orphanが誕生
• orphanの親を探す
s t
a w v
IBFS : adoption
• orphan頂点𝑣の親を探す
– 𝑑𝑠 𝑢 = 𝑑𝑠 𝑣 − 1となる残余辺(𝑢, 𝑣)を探す
• 𝑝 𝑣 = 𝑢
• 𝑣をS-vertexに
u
v
1sd 2sd
orphan
𝒗は同じラベルをもつ S-vertexになる
IBFS : adoption
• orphan-relabel
– 残余辺(𝑢, 𝑣)の中で𝑑𝑠 𝑢 が一番小さい頂点𝑢を探す
• そんな𝑢が存在しない or 𝑑𝑠(𝑢) > 𝐷𝑠
– 𝑣をN-vertexにして𝑣の子をS-orphanに
– 𝑝 𝑣 = 𝑢, 𝑑𝑠 𝑣 = 𝑑𝑠 𝑢 + 1
– 𝑣をS-vertexに, 𝑣の子をS-orphanに
v orphan
orphan
6sd
3sd
8sd
4sd
親としてorphanを選んでもいい?
𝒅𝒔(𝒗)をなるべく小さく = s-vパスの長さをなるべく短く
IBFS
• ループが終了したとき、ラベル𝐷𝑠 + 1をもつ頂点が…
– 存在する
• 𝐷𝑠 += 1 して次のループへ
– 存在しない
• 終わり
For efficiency
• 𝑐𝑢𝑟𝑟𝑒𝑛𝑡 𝑎𝑟𝑐
– どの辺までscanしたかを記憶
• ラベルが変わったとき
• N-vertexが木に加えられたとき
v
Scan済み
current arc こっからscan
先頭に戻す
CORRECTNESS AND RUNNING TIME
4.1
Sを成長させたと仮定
Lemma 1
• (𝑢, 𝑣)が残余辺ならば…
1. 𝑢 ∈ 𝑆, 𝑑𝑠 𝑢 ≤ 𝐷𝑠 𝑎𝑛𝑑 𝑣 ∉ 𝑆 → 𝑢はactiveなS-vertex
2. 𝑣 ∈ 𝑇, 𝑢 ∉ 𝑇 → 𝑑𝑡 𝑣 = 𝐷𝑡
3. 𝐷𝑠の増加後に𝑢 ∈ 𝑆 𝑎𝑛𝑑 𝑣 ∉ 𝑆 → 𝑑𝑠 𝑢 = 𝐷𝑠
s t a
a
a
a
a
2sd
2sD
1sd
Lemma1 証明 : 帰納法
• 最初のループ(基底)
– 成り立つ
• 一つ前のループで成り立ってると仮定
– 次のループの初期状態では
• 𝑑𝑠 𝑢 = 𝐷𝑠となる頂点𝑢をすべてactiveにする
– ラベルを変えてないので(2)(3)は成り立つ
– (1)も成り立つ
Lemma1 証明 : 帰納法
• Growth step on 𝑢 without augmentation
– 頂点𝑢はinactiveに
– 残余辺(𝑢, 𝑣)をすべてscan & 全ての𝑣をS-vertexに
– Tには何も影響がない
(1)は成り立つ
(2)は成り立つ u
Lemma1 証明 : 帰納法
• Augmentation Step
– (𝑢, 𝑣)が飽和
– augmentにより新たな残余辺 𝑢, 𝑣 , 𝑢 ∈ 𝑆が誕生する可能性
• (𝑢, 𝑣)が飽和してるときに(𝑣, 𝑢)にフローを流した
– 𝑣 = 𝑝(𝑢)
• 𝑢 ∈ 𝑆なら当然v ∈ 𝑆でないと
– 逆(対称)の議論をすれば
• 新たに誕生した残余辺について(2)は適用できない(𝑢, 𝑣 ∈ 𝑇)
(1)は適用できない
Lemma1は適用できなくなる
s
v
u
Lemma1 証明 : 帰納法
• Orphan-relabel(adoption) step
– 頂点𝑣が𝑆から消えることも…
• 𝑢 ∈ 𝑆, 𝑑𝑠(𝑢) ≤ 𝐷𝑠となる残余辺(𝑢, 𝑣)が存在すれば
– Orphan-relabelにより𝑣はS-vertex
• 逆(対称)の議論により
(1)は成り立つ
(2)は成り立つ
Lemma1 証明 : 帰納法
• There are no active vertex
– 𝑢 ∈ 𝑆, 𝑣 ∉ 𝑆となる残余辺(𝑢, 𝑣)は…
• 𝑑𝑠(𝑢) > 𝐷𝑠のときだけ(𝑑𝑠 𝑢 = 𝐷𝑠 + 1)
– 木を1段階成長させる
• 𝐷𝑠 + +
• 𝑑𝑠 𝑢 = 𝐷𝑠
(3)は成り立つ
Lemma2
1. 頂点𝑢 ∈ 𝑆 ∪ 𝑇は有効なラベル𝑑𝑠, 𝑑𝑡をもつ
2. ・各頂点𝑢 ∈ 𝑆について、𝑢の𝑐𝑢𝑟𝑟𝑒𝑛𝑡 𝑎𝑟𝑐は 𝑢へ入る最初の𝑎𝑑𝑚𝑖𝑠𝑠𝑖𝑏𝑙𝑒 𝑎𝑟𝑐に等しいか先行する ・各頂点𝑢 ∈ 𝑇について、𝑢の𝑐𝑢𝑟𝑟𝑒𝑛𝑡 𝑎𝑟𝑐は 𝑢から出る最初の𝑎𝑑𝑚𝑖𝑠𝑠𝑖𝑏𝑙𝑒 𝑎𝑟𝑐に等しいか先行する
3. ・ 𝑢 ∈ 𝑆なら(𝑝 𝑢 , 𝑢)は𝑎𝑑𝑚𝑖𝑠𝑠𝑖𝑏𝑙𝑒
・ 𝑢 ∈ 𝑇なら 𝑢, 𝑝 𝑢 は𝑎𝑑𝑚𝑖𝑠𝑠𝑖𝑏𝑙𝑒
4. 各頂点𝑣について、ラベル𝑑𝑠 𝑣 , 𝑑𝑡 𝑣 は減少しない
Lemma2 証明
• 最初のループ(基底)
– 成り立つ
• 一つ前のループで成り立ってると仮定
– 次のループを考える
Lemma2 証明
• Growth step on 𝑢 that add a new vertex 𝑣 to 𝑆
– 𝑑𝑠 𝑣 = 𝑑𝑠 𝑢 + 1 = 𝐷𝑠 + 1
– 各残余辺 𝑤, 𝑣 , 𝑤 ∈ 𝑆について
• Lemma1(1)より𝑤は𝑎𝑐𝑡𝑖𝑣𝑒
• Activeな頂点のラベルは𝐷𝑠
– 𝑣の𝑐𝑢𝑟𝑟𝑒𝑛𝑡 𝑎𝑟𝑐は𝑣の最初の辺
(3),(4)は成り立つ
1)()( vdDwd sss
(1)は成り立つ
(2)は成り立つ
highest possible label
v w
w
u
Lemma2 証明
• Augmentation step
– ラベルを変えない
– 𝑝 𝑢 , 𝑢 にフローを流すと新たな残余辺(𝑢, 𝑝 𝑢 )が誕生
• 帰納法の仮定(3)より 𝑝 𝑢 , 𝑢 は𝑎𝑑𝑚𝑖𝑠𝑠𝑖𝑏𝑙𝑒
– (𝑢, 𝑝 𝑢 )は𝑎𝑑𝑚𝑖𝑠𝑠𝑖𝑏𝑙𝑒になりえない
• 𝑑𝑠 𝑝 𝑢 = 𝑑𝑠 𝑢 − 1
– 𝑝 𝑢 , 𝑢 にフローを流して飽和させた
• 𝑎𝑑𝑚𝑖𝑠𝑠𝑖𝑏𝑙𝑒でなくなる
– 𝑢は𝑜𝑟𝑝ℎ𝑎𝑛になる
(4)は成り立つ
(2)は成り立つ
(1)は成り立つ
(3)は適用不可
Lemma2 証明
• Adoption step on 𝑣
– 最初のscanではラベルを変えない
– 𝑐𝑢𝑟𝑟𝑒𝑛𝑡 𝑎𝑟𝑐からはじめる
• 帰納法の仮定(2)より最初の𝑎𝑑𝑚𝑖𝑠𝑠𝑖𝑏𝑙𝑒 𝑎𝑟𝑐 (𝑡𝑜 𝑣)が見つかる
• 𝑣の親がみつかったとき
– 𝑝 𝑣 , 𝑣 は𝑎𝑑𝑚𝑖𝑠𝑠𝑖𝑏𝑙𝑒
– 𝑣の𝑐𝑢𝑟𝑟𝑒𝑛𝑡 𝑎𝑟𝑐は最初の𝑎𝑑𝑚𝑖𝑠𝑠𝑖𝑏𝑙𝑒 𝑎𝑟𝑐
(1)(4)は成り立つ
(2)(3)は成り立つ
Lemma2 証明
• Orphan-relabel
– 残余辺(𝑢, 𝑣)の中で𝑑𝑠(𝑢)が最小となる𝑢を探す
• ラベルは有効
• 𝑝 𝑣 , 𝑣 は𝑎𝑑𝑚𝑖𝑠𝑠𝑖𝑏𝑙𝑒
• 𝑣の𝑐𝑢𝑟𝑟𝑒𝑛𝑡 𝑎𝑟𝑐は最初の𝑎𝑑𝑚𝑖𝑠𝑠𝑖𝑏𝑙𝑒 𝑎𝑟𝑐
– 帰納法の仮定(1)より
• ラベルの有効性により頂点のラベルは減少しない
(1)(2)(3)は成り立つ
(4)は成り立つ
correctness
• 𝑎𝑐𝑡𝑖𝑣𝑒頂点がなくなって木を成長させたとき
– ラベル𝐷𝑠 + 1をもつ頂点が存在しないとき
– Lemma1-(3?)により頂点𝑢 ∈ 𝑆, 𝑣 ∉ 𝑆の間に 残余辺(𝑢, 𝑣)は存在しない
• そのときのフロー = 最大フロー
ふたつの補題
• Lemma3
– In growth step…
• 各頂点𝑣 ∈ 𝑆について、𝑠-𝑣パスは最短パス
• 各頂点𝑣 ∈ 𝑇について、𝑣-𝑡パスは最短パス
• Lemma4
– 𝐿 = 𝐷𝑠 + 𝐷𝑡 + 1は𝑎𝑢𝑔𝑚𝑒𝑛𝑡𝑖𝑛𝑔 𝑝𝑎𝑡ℎの長さの下界
– アルゴリズムは常に最短パスに沿ってフローを流す
Lemma5
• 𝑜𝑟𝑝ℎ𝑎𝑛-𝑟𝑒𝑙𝑎𝑏𝑒𝑙によりラベルは増加する
Lemma5 : 証明
• 𝑜𝑟𝑝ℎ𝑎𝑛 𝑣 ∈ 𝑆の𝑜𝑟𝑝ℎ𝑎𝑛-𝑟𝑒𝑙𝑎𝑏𝑒𝑙を考える
– 𝑈 = {𝑢|𝑢 ∈ 𝑆, 𝑢, 𝑣 が残余辺}
– Lemma2-(2)より 𝑣の𝑐𝑢𝑟𝑟𝑒𝑛𝑡 𝑎𝑟𝑐は𝑎𝑑𝑚𝑖𝑠𝑠𝑖𝑏𝑙𝑒 𝑎𝑟𝑐に先行か等しい
– 𝑜𝑟𝑝ℎ𝑎𝑛-𝑟𝑒𝑙𝑎𝑏𝑒𝑙をしてるってことは…
• 最初のscanで𝑎𝑑𝑚𝑖𝑠𝑠𝑖𝑏𝑙𝑒 𝑎𝑟𝑐を見つけられなかった
• 𝑣への𝑎𝑑𝑚𝑖𝑠𝑠𝑖𝑏𝑙𝑒 𝑎𝑟𝑐が存在しない
Lemma5 : 証明
• Lemma2-(1)よりラベルは有効
– 各頂点𝑢 ∈ 𝑈について𝑑𝑠 𝑢 ≥ 𝑑𝑠 𝑣 − 1
– 𝑑𝑠 𝑢 ≥ 𝑑𝑠 𝑣
• 𝑜𝑟𝑝ℎ𝑎𝑛-𝑟𝑒𝑙𝑎𝑏𝑒𝑙により𝑣の親が見つかれば…
– 𝑑𝑠′ 𝑣 = 𝑑𝑠 𝑢 + 1 > 𝑑𝑠 𝑣
𝒂𝒅𝒎𝒊𝒔𝒔𝒊𝒃𝒍𝒆 𝒂𝒓𝒄が存在しないので
Lemma5 : 証明
• 𝑜𝑟𝑝ℎ𝑎𝑛-𝑟𝑒𝑙𝑎𝑏𝑒𝑙により𝑣が𝑆から取り除かれた(N-vertex)
– 𝑑𝑠′ 𝑣 : そのときのラベル
– 𝑣はのちのち𝑤 ∈ 𝑆の𝑔𝑟𝑜𝑤𝑡ℎにより𝑆に再度取り込まれるかも
• 𝑤 ∈ 𝑈ならLemma2より𝑑𝑠(𝑤)は減少しないので
– 𝑣が𝑆に再度取り込まれたときは𝑑𝑠 𝑣 > 𝑑𝑠′ 𝑣
• 𝑤 ∉ 𝑈のとき
– (𝑤, 𝑣)は𝑣が𝑆から取り除かれたあとに残余辺になった
– 𝑣, 𝑤 , 𝑣 ∉ 𝑆にフローを流した
• 𝑤 ∉ 𝑆のときだけ
– Wもある時点でSから取り除かれ再度Sに取り込まれた
• 𝑑𝑠 𝑤 = 𝐷𝑠 + 1 ≥ 𝑑𝑠′(𝑣)
– Lemma2より𝑑𝑠(𝑤)は減少しないので
• 𝑑𝑠 𝑣 = 𝑑𝑠 𝑤 + 1 ≥ 𝑑𝑠′ 𝑣 + 1
Lemma6 : IBFSの計算量
• IBFS runs in 𝑂 𝑛2𝑚 time
Lemma6 : 証明
• 3つのoperation
– Growth step with augmentation
– Growth step without augmentation
– Adoption step
Lemma6 : 証明
• Growth step on 𝑣 without augmentation
– 𝑣のすべての辺をscanすれば𝑣は𝑖𝑛𝑎𝑐𝑡𝑖𝑣𝑒になる
– ラベルが変われば(増えれば)𝑣は再度𝑎𝑐𝑡𝑖𝑣𝑒になる
– 1ラベルにつき𝑑𝑒𝑔𝑟𝑒𝑒(𝑣)の辺をscanする
– 異なるラベルの数はn-1
)())1()(deg( nmOnvreeOv
Lemma6 : 証明
• Adoption step on 𝑣
– Lemma5とLemma2-(4)により
• 𝑜𝑟𝑝ℎ𝑎𝑛-𝑟𝑒𝑙𝑎𝑏𝑒𝑙後にラベルは増加し、その後も減少しない
– 1ラベルにつき各辺(𝑣, 𝑤)を2回scan
• 𝑂𝑟𝑝ℎ𝑎𝑛-𝑠𝑐𝑎𝑛
• 𝑜𝑟𝑝ℎ𝑎𝑛-𝑟𝑒𝑙𝑎𝑏𝑒𝑙
– 異なるラベルの数はn-1
)(nmO
Lemma6 : 証明
• Growth step on 𝑣 with augmentation
– Find s-t path
– Run augment
– 𝑇へのパスを見つけるために𝑣から出る辺をscan
• 前回augmentに使った辺を覚えておけば 辺のscanは1ラベルにつき1回
)(nmOwithoutのとき同様に 𝑣
前回のaugmentに使った
こっからscan
Lemma6 : 証明
• Growth step on 𝑣 with augmentation
– Augmentationの実行
• 1回のaugmentationは𝑂(𝑛)
– 𝑣が𝑎𝑐𝑡𝑖𝑣𝑒な間は
• (𝑣, 𝑤)が再度飽和することはない
– 1ラベルにつき 𝑣, 𝑤 の飽和は1回
– 異なるラベルの数はn-1
– 𝑇へのパスを見つけるために𝑣から出る辺をscanも含むので
)(nmO
)( 2mnO
VARIANTS OF IBFS
5
Variants of IBFS
• 2つのバージョンを簡単に紹介
– Blocking flow version
– Delayed version
– 事前実験によると
• 定数ファクターが大きくて通常versionよりやや遅い
• 理論的観点では興味深い
• より詳細な実験・評価をする価値はある
• Growth stepのはじめに
– 𝑏𝑙𝑜𝑐𝑘𝑖𝑛𝑔 𝑓𝑙𝑜𝑤を得られる補助ネットワークを構築可能
• 𝑣, 𝑤が同じ木に属する𝑎𝑑𝑚𝑖𝑠𝑠𝑖𝑏𝑙𝑒 𝑎𝑟𝑐 (𝑣, 𝑤)
• 残余辺 𝑣, 𝑤 𝑣 ∈ 𝑆, 𝑤 ∈ 𝑇
– 𝑜𝑟𝑝ℎ𝑎𝑛-𝑟𝑒𝑙𝑎𝑏𝑒𝑙を遅らせることで𝑏𝑙𝑜𝑐𝑘𝑖𝑛𝑔 𝑓𝑙𝑜𝑤アルゴリズム
• 𝑜𝑟𝑝ℎ𝑎𝑛になったら同じレベルの頂点との接続を試みる
– ラベル(s/tからの距離)は増加
• 失敗したら𝑜𝑟𝑝ℎ𝑎𝑛になる(𝑟𝑒𝑙𝑎𝑏𝑒𝑙をしない)
• growth/augmentのあとに𝑜𝑟𝑝ℎ𝑎𝑛-𝑟𝑒𝑙𝑎𝑏𝑒𝑙を実行
Blocking flow version
によって誘導されるグラフ
Delayed version
• IBFSでは有益な情報を無視している
– 例えば 𝐷𝑠 = 𝐷𝑡 = 10, 𝐿 = 21のとき
• 𝑑𝑠 𝑣 = 2の頂点𝑣 ∈ 𝑆について
• 𝑣から𝑡への距離の下界は19(21 − 2)
• 𝑜𝑟𝑝ℎ𝑎𝑛-𝑟𝑒𝑙𝑎𝑏𝑒𝑙により𝑑𝑠 𝑣 = 5となった
• 𝑣からのみ到達可能な頂点も無視される
L=5+19=24になるまで 𝒗の処理を遅らせる
IBFSと比べて複雑だがよりよい状態遷移が起こるかも
EXPERIMENTAL RESULTS
6
Implementation Details
• S,Tを同時に成長させる
– 見つかるaugmenting pathが最短でなくなることも (shortest+1)
– S内でのs-vパス, T内でのw-tパスは共に最短
• 解析は有効
– 実験したらこの方がすこし速かった
• Low-levelな最適化をいくつか行った
– 公平を期すためBKにも同じ最適化を施した(UBK)
• BKより20%ほど速くなった
result Augmenting pathの長さの総和
Growth stepでの 辺をscanした回数
Orphanが 辺をscanした回数
rootまでを Traverseした回数
全体的にIBFSの方が少し高速
IBFSはロバスト
Concluding Remarks
• Incremental BFSを提案
– BKよりロバストで実用的
• Aroraらが新たなpush-relabelアルゴリズムを提案
– Voronoi push-relabel (2010, ECCV)
– 多項式時間アルゴリズムでBKよりも優れている
– コードが公開されてないので直接比較出来なかったが…
• IBFSよりも高速?
• Delayed versionは研究する必要がある