論文題目:Learning Shape-Aware Embedding for Scene Text Detection
香港中文大學和騰訊優圖共同發表在2019CVPR
論文地址:jiaya.me/papers/textdetection_cvpr19.pdf
貢獻
提出了Shape-Aware Loss,可以很好的分割相鄰的文本實例並且可以檢測很大很長的文本實例(將圖像像素映射到嵌入特徵空間中,在該空間中,屬於同一文本實例的像素會更加接近彼此,反之不同文本實例的像素將會遠離彼此)。
提出了一種新的文本檢測流程,可以檢測任意形狀的文本實例。
在三個有代表性的場景文本數據集(ICDAR15,,MSRA-TD500,and CTW1500)上表現優異。
網絡結構
首先,給定輸入圖像,從ResNet50的中間層提取特徵;接下來,有兩個特徵合併模塊(鏡像對稱的FPN),在每個特徵合併模塊中,使用類似於 PANet 中的自適應特徵池的特徵合併策略通過上採樣和像素相加的方式去結合從不同層提取的特徵。這兩個分離的特徵合併模塊通過共享權重形成了一組獨立但互補的分支。一個分支產生嵌入映射(Embedding Map),在每個像素處有8通道嵌入特徵用於區分文本實例,另一個分支生成用於分割的兩個文本前景掩模(Center Map 和 Full Map)。最後,對嵌入特徵和兩個文本前景掩模進行處理獲得最終預測的文本框。
嵌入形狀感知(Shape-Aware Embedding)
爲什麼要使用嵌入形狀感知?
相比與通用的目標檢測,文本檢測更難根據邊界確定兩個挨的很近的文本實例;
文本行的寬高比變化太大,如整張圖像從單個文字到整個文本行。
嵌入分支接收來自一個特徵合併模塊的特徵,以及由 x 和 y 座標表示的另外的2通道位置信息。 我們將特徵合併模塊的特徵與位置信息相結合,並將它們分別傳遞給三個連續的3×3卷積層,分別具有32,16和8個輸出通道。 最終輸出是每個像素的8通道嵌入特徵。
損失函數(SA Loss)
方差損失和距離損失(應該可以說是類內間距和類外間距):
L v a r ( I j ) = 1 N j ∑ i = 1 N j m a x ( W S c a l e ( j ) ∗ ∣ μ j − x i ∣ − η , 0 )
L_{var}(I_j) = \frac{1}{N_j}\sum_{i=1}^{N_j}max(W_{Scale_{(j)}} * |\mu_j - x_i| - \eta, 0)
L v a r ( I j ) = N j 1 i = 1 ∑ N j m a x ( W S c a l e ( j ) ∗ ∣ μ j − x i ∣ − η , 0 )
L d i s t ( I j , I k ) = m a x ( γ − W D i s t ( j , k ) ∗ ∣ μ j − μ k ∣ , 0 )
L_{dist}(I_j, I_k) = max(\gamma - W_{Dist_(j, k)} * |\mu_j - \mu_k|, 0)
L d i s t ( I j , I k ) = m a x ( γ − W D i s t ( j , k ) ∗ ∣ μ j − μ k ∣ , 0 )
μ j \mu_j μ j 和 μ k \mu_k μ k 分別是文本實例 I j I_j I j 和 I k I_k I k 的平均嵌入。x i x_i x i 是像素 i i i 的嵌入特徵,N j N_j N j 是在 I j I_j I j 中的像素的數量。η \eta η 和 γ \gamma γ 代表方差損失和距離損失的邊際,分別爲 0.5 0.5 0 . 5 和 1.5 1.5 1 . 5 。
其中 W S c a l e ( j ) W_{Scale_{(j)}} W S c a l e ( j ) 和 W D i s t ( j , k ) W_{Dist_{(j, k)}} W D i s t ( j , k ) 是平衡權重,爲了適應各種文字形狀和鄰接。
W S c a l e ( j ) = e m a x s i d e ( j ) 2 m a x ( h , w )
W_{Scale{(j)}} = e^{\frac{max_{side(j)}}{2max(h,w)}}
W S c a l e ( j ) = e 2 m a x ( h , w ) m a x s i d e ( j )
W D i s t ( j , k ) = ( 1 − 20 e − m i n ( D i s t a n c e j , k ) m a x ( h , w ) ∗ 10 )
W_{Dist_{(j,k)}} = (1 - 20e^{-\frac{min(Distance_{j,k})}{max(h,w)} * 10})
W D i s t ( j , k ) = ( 1 − 2 0 e − m a x ( h , w ) m i n ( D i s t a n c e j , k ) ∗ 1 0 )
m a x ( h , w ) max(h,w) m a x ( h , w ) 是輸入圖像的較長邊。m a x s i d e ( j ) max_{side(j)} m a x s i d e ( j ) 對於四邊形文本是長邊的長度,對於彎曲文本(帶有多邊形註釋)是多邊形頂點之間的最長距離。m i n ( D i s t a n c e j , k ) min(Distance_{j,k}) m i n ( D i s t a n c e j , k ) 是文本實例 I j I_j I j 和 I k I_k I k 之間的最短距離。其中 W S a c l e ( j ) ∈ ( 1 , 1.65 ) W_{Sacle_{(j)}} \in (1, 1.65) W S a c l e ( j ) ∈ ( 1 , 1 . 6 5 ) ,W D i s t ( j , k ) W_{Dist_{(j,k)}} W D i s t ( j , k ) 的範圍大致在 ( 0.63 , 1 ) (0.63, 1) ( 0 . 6 3 , 1 ) 之間,W D i s t ( j , k ) W_{Dist_{(j,k)}} W D i s t ( j , k ) 的縮放比例和 W S c a l e ( j ) W_{Scale_{(j)}} W S c a l e ( j ) 相當以平衡他們對梯度的影響。
W S c a l e ( j ) W_{Scale_{(j)}} W S c a l e ( j ) 與文本實例 I j I_j I j 的尺度成比例,大的 W S c a l e ( j ) W_{Scale_{(j)}} W S c a l e ( j ) 使得 L v a r ( I j ) L_{var}(I_j) L v a r ( I j ) 變得重要,這會帶來強大的力量把像素之間的距離拉近(pulling) ,以至於有較小的 L v a r ( I j ) L_{var}(I_j) L v a r ( I j ) 。 W D i s t ( j , k ) W_{Dist_{(j, k)}} W D i s t ( j , k ) 與文本實例 I j I_j I j 和 I k I_k I k 中最短的距離成比例,這會有額外的力量把兩個離得近的文本實例給推開(pushing) ,距離變遠。與 W S c a l e ( j ) W_{Scale_{(j)}} W S c a l e ( j ) 相反,一個小的 W D i s t ( j , k ) W_{Dist_{(j, k)}} W D i s t ( j , k ) (在 I j I_j I j 和 I k I_k I k 之間的短距離)會讓 L D i s t ( I j , I k ) L_{Dist}(I_j, I_k) L D i s t ( I j , I k ) 變大。
一張圖像有 N N N 個文本實例的話,最終的 SA Loss 可以寫成:
L S A = 1 N ∑ j = 1 N L v a r ( I j ) + 1 N ( N − 1 ) ∑ j = 1 N ∑ k = 1 , k ≠ j N L d i s t ( I j , I k )
L_{SA} = \frac{1}{N}\sum_{j=1}^N L_{var}(I_j) + \frac{1}{N(N-1)\sum_{j=1}^N\sum_{k=1,k\neq j}^N L_{dist}(I_j, I_k)}
L S A = N 1 j = 1 ∑ N L v a r ( I j ) + N ( N − 1 ) ∑ j = 1 N ∑ k = 1 , k ̸ = j N L d i s t ( I j , I k ) 1
SA Loss包含兩個權重,它們根據尺度和鄰接調節拉和推的力量。利用這兩個權重,即使兩個很近的文本實例(只有一兩個像素的距離),聚集大的長的文本實例和分割比較近的文本實例也變得更加容易了。
分割掩碼(Segmentation Masks)
分割分支通過對先前模塊生成的特徵使用兩個單獨的 3x3 卷積運算,生成兩個一維通道的分割圖:Full Map和Center Map。儘管兩個分割圖都表明像素是屬於背景還是文本,但他們用於不同的目的。Full Map顯示文本的整體位置和分佈,Center Map僅捕獲每個文本的中線區域,允許分離空間上緊密的文本實例,併爲稍後的像素聚類提供合理的起點。
損失函數 :
Full Map 和 Center Map都是通過最小化 Dice Loss來訓練的:
L D = 1 − D ( P , Q )
L_D = 1 - D(P, Q)
L D = 1 − D ( P , Q )
其中,P P P 和 Q Q Q 分別代表預測(Prediction)和真值(Ground Truth),D ( , ) D(,) D ( , ) 是 Dice 係數,表示爲:
D ( P , Q ) = 2 ∗ ∑ x , y P x , y Q x , y ∑ x , y P x , y 2 + ∑ x , y Q x , y 2
D(P, Q) = \frac{2 * \sum_{x, y}P_{x,y}Q_{x,y}}{\sum_{x,y}P_{x,y}^2 + \sum_{x,y}Q_{x,y}^2}
D ( P , Q ) = ∑ x , y P x , y 2 + ∑ x , y Q x , y 2 2 ∗ ∑ x , y P x , y Q x , y
最終損失是兩個map的加權組合,λ ∈ ( 0 , 1 ) \lambda \in (0,1) λ ∈ ( 0 , 1 ) :
L S e q = λ L C e n t e r M a p + ( 1 − λ ) L F u l l M a p
L_{Seq} = \lambda L_{CenterMap} + (1-\lambda)L_{FullMap}
L S e q = λ L C e n t e r M a p + ( 1 − λ ) L F u l l M a p
在論文中設置 λ = 0.5 \lambda = 0.5 λ = 0 . 5 ,給兩個map相同的權重。注意,Center Map 的文本實例是從Full Map的文本實例中按比例 γ \gamma γ 縮小而來的,一般 γ = 0.7 \gamma = 0.7 γ = 0 . 7 ,這和 EAST 是相同的。在Full Map中的文本實例不通過縮小去減少搜索空間,確保在有效的文本區域內執行後續聚類。
整體損失函數
L = L S A + L S e g
L = L_{SA} + L_{Seg}
L = L S A + L S e g
聚類處理
首先使用DBSCAN來獲得兩組聚類(來自Full Map的 C F i C_{F_i} C F i 和來自Center Map的 C C i = ∪ j c i j C_{C_i} = \cup_j c_{ij} C C i = ∪ j c i j )。然後通過以下邏輯將 C F i C_{F_i} C F i 內部和 C C i C_{C_i} C C i 外部的每個像素分配給最近的集羣 c i j ∈ C C i c_{ij} \in C_{C_i} c i j ∈ C C i 。將分配給了 c i j c_{ij} c i j 的像素表示爲p c i j p_{c_{ij}} p c i j ,如果這個像素和一個集羣 c i j ∈ C C i c_{ij} \in C_{C_i} c i j ∈ C C i 的最小嵌入距離比閾值 σ \sigma σ 還要小,則這個像素被分配到最近的集羣 c i j c_{ij} c i j 作爲 p c i j p_{c_{ij}} p c i j 的一部分;否則這個像素就被忽視了(就是基於像素嵌入和屬於Center Map的每個集羣 c i j c_{ij} c i j 的像素的平均嵌入之間的距離來分配每個像素(c i j ∈ C C i ∈ C F i c_{ij} \in C_{C_i} \in C_{F_i} c i j ∈ C C i ∈ C F i ))。在處理完集羣 C F i C_{F_i} C F i 中的所有像素之後,一個新的集羣 c i j ′ = c i j ∪ p c i j c_{ij}' = c_{ij} \cup p_{c_{ij}} c i j ′ = c i j ∪ p c i j 就形成了。對其他的中心集羣 c i j c_{i j} c i j 不斷的循環這個操作直到處理完所有的中心集羣。
最後,對於每個新集羣 c i j ′ c_{ij}' c i j ′ ,生成相應的最小邊界框作爲輸出。
實現細節
主幹網絡 ResNet50(在ImageNet上預訓練),對於每一個分支,在ResNet50的四個特徵圖(Max Pooling後)上使用四個具有128個輸出通道 inception 模塊。
使用數據增強。首先隨機的將輸入圖像的長邊縮放到 640 到 2560 之間,然後隨機旋轉,顛倒和翻轉,最後從旋轉後的圖像中隨機剪切 640 × 640 640 × 640 6 4 0 × 6 4 0 的區域作爲訓練圖像。包括 BN(Batch Normalization)和 OHEM(正樣本和負樣本比例爲 1 : 3 1:3 1 : 3 )。全部的模塊都在數據集 SynthText 上使用初始學習率 1 e − 4 1e-4 1 e − 4 做預訓練。
有5個超參數 。用來測量 Embedding Map 上的嵌入距離的閾值 σ \sigma σ 和 τ \tau τ , 並在後處理中分別從分割圖像中獲取確定的像素。用於NMS的 I o U IoU I o U 閾值 δ \delta δ 和用於DBSCAN的 e p s eps e p s 和 M i n S a m p l e s MinSamples M i n S a m p l e s 。論文中,σ = 1.0 , τ = 0.7 , δ = 0.5 \sigma = 1.0, \tau = 0.7, \delta = 0.5 σ = 1 . 0 , τ = 0 . 7 , δ = 0 . 5 ,並且 ( e p s , M i n S a m p l e s ) (eps, MinSamples) ( e p s , M i n S a m p l e s ) 在Full Map上聚類時是 ( 5 , 8 ) (5,8) ( 5 , 8 ) ,在Center Map上聚類時是 ( 1 , 3 ) (1,3) ( 1 , 3 ) 。
接下來論文比較了論文方法和其他的文本檢測方法;Shape-Aware Loss的優點(與Dice Loss比較);爲什麼不直接在嵌入空間中使用聚類;網絡設計的優點(Full Map和Center Map的重要性以及雙分支網絡的優點)等等。【懶,就不具體寫了】
讀完之後還有一些部分不太清楚(可能文章沒有詳細描述或者自己沒有理解清楚):
最後的三個Map的輸入是對稱的 FPN 輸出的哪個Feature Map,還是最後把FPN所有的Feature Map合併在一起作爲輸入?
在實現細節裏,在ResNet50的四個特徵圖上使用四個具有128輸出通道的inception模塊是怎麼使用的?
在輸出Embedding Map時,是將分支出來的Feature Map和位置信息結合起來的,是怎麼結合的?位置信息又是怎麼表示的(文本框和非文本框)?
或許可以看看 Semi-convolutional Operators for Instance Segmentation 這篇文章,我還沒看,這裏有關於這篇文章的理解
5個超參數有一個 τ \tau τ 是哪裏的,在論文了沒有找到。。。
如有大神,望可以交流交流,解決我的疑惑。