鏡像添加宋體_鏡像添加宋體

©作者 | Hanbo Cheng

單位 | NJUST

研究方向 | 場景文字檢測

鏡像添加宋體_深度學習_02

論文標題:

GLASS: Global to Local Attention for Scene-Text Spotting

鏡像添加宋體_機器學習_03

Abstract

本篇文章針對端到端的 Scene-Text Spotting 任務,提出裏一個新穎的 Module :GLASS (Global-to-Local Attention mechaniSm for text Spotting)。這個模塊結合了 image 中的 global feature(大尺度,低分辨率)和 local feature(小尺度,高分辨率)對任務進行端到端的訓練。同時文章還提出了一個新的基於旋轉的損失函數,優化了模型對旋轉字體的識別。通過實驗,該模塊和損失函數可以顯著增加現有模型的 performance。

文章試圖解決什麼問題?

端到端的 Scene-Text Spotting 的一個主要挑戰是文字尺度的變化(large text/ small text),以及文字存在旋轉角度。

文章主要的貢獻

  • 提出了新穎的 GLASS 模塊,在極端尺度變化的情況下增強了模型的性能;
  • 設計了一個週期的,針對旋轉的損失函數(具體是正弦函數的形式),增強了模型對於任意旋轉角度的 scene text 的 Spotting 性能;
  • 在幾個數據集上 ICDAR 2015, Total-Text, TextOCR,Rotated ICDAR 2013上取得了 SOTA 的結果;
  • 將 GLASS 模塊應用到現成的 Scene Text Spotting 框架上,使得這些模型的性能得到了提升(説明來 GLASS 的泛用性)。

鏡像添加宋體_鏡像添加宋體_04

Methodology

論文中的模型結構如下:

鏡像添加宋體_python_05

2.1 GLASS

GLASS 主要針對的分支是 recognition branch,這裏是 GLASS 中的運算示意圖:

鏡像添加宋體_python_06

首先關於 Global feature 和 Local feature 從何而來?也就是 , 。

  • Global 特徵來自 detection 分支(具體是 FPN feature),具體特徵的採樣範圍仍然受 bbox 限制,但通過 FPN 各級採樣,其感知域比 local feature 要大
  • Local 特徵來自於 detection 分支生成的 bbox,因為只有一個選框,所以分辨率更高(主要針對小尺度 text)。

2.2 Global和local的融合

● first

鏡像添加宋體_機器學習_07

用文字概括一下:原本 , 的大小都是 ,現在將他們的 Channel 分成 k 等分,,再將他們以上述的形式 concat 起來, 最終變成 channel 為 的向量(共WH)。

● second

這一部分將簡單的 concat 深度的 fuse:

鏡像添加宋體_python_08

其中 是一個可學習的向量, 將 tesor reshape 成 的形式。

這一步相當於通過注意力機制得到一個初步融合的特徵 。

● third

這一步:

鏡像添加宋體_深度學習_09

其中 是一個可學習的向量,實際上就是一個 1*1 的卷積, 是批標準化。

2.3 Orientation Prediction

本文針對一個 bbox 設置了 5 個描述參數,2 個描述中心座標,2個用於描述 H,W,1 個用於描述旋轉角度,整個 bbox 的 loss function:

鏡像添加宋體_人工智能_10

這個損失函數,針對前四個參數採用了 L1 norm,針對角度,設計了一個基於正弦函數的 loss,不難看出有這樣的特性,偏移 k*180 的 loss=0,並且這一部分是可以求導的。同時滿足了合理性和可導。

2.4 Global to Local End-to-End Text Spotting(模型總述)

整個模型的 backbone 是 ResNet50 和 FPN。 通過是哦那個 Rotated-RoIAlign,在 FPN 的各個層級上採樣得到。對於 先對輸入圖像做 Rotated-RoIAlign,再使用 ResNet34 抽取特徵得到。使用上述的 GLASS 得到融合特徵 用它完成 text 的 recognition。關於 mask branch,僅僅採用了 global feature(這一點和 Mask R-CNN 的處理基本一致,應該不是文章的重點)

模型的總體優化目標:

  • :選框 loss
  • :mask loss,和 mask R-CNN 一致
  • :recognition loss

鏡像添加宋體_python_11

Experiment

文章在幾個 benchmark 上測試了方法的表現,並且和 SOTA 模型做了比較。同時,文章也嘗試將 GLASS 融合進了兩個較為常見的 E2E,Scene-text spotting  網絡(Mask TextSpotter v3, ABCnet v2),並測試了融合後的性能。此外又做了一些消融實驗。

3.1 Comparison with SOTA

鏡像添加宋體_機器學習_12

針對不同的文字旋轉角,和別的模型對比 performance,可以看出 GLASS 能很好的應對旋轉過的文字。

鏡像添加宋體_人工智能_13

3.2 Incorporating GLASS into other methods

可以看出,加入了 GLASS 之後,其他模型在 Total-Text 和 ICDAR2015 數據集上都有提升,儘管處理速度些許變慢。

鏡像添加宋體_機器學習_14

3.3 消融實驗

關於是否使用 Global 和 Local feature,以及是否 fuse 它們,和以什麼樣的方式 fuse 做了消融實驗。可以看出採用全局和局部特徵+ GLASS 融合,可以取得最好的表現。

鏡像添加宋體_鏡像添加宋體_15

鏡像添加宋體_機器學習_16

針對 bbox 的損失函數做了消融實驗,主要是是否用基於正弦的方式計算角度的 loss,還是説使用 L1norm。可以看出基於正弦函數的方法明顯更優。

鏡像添加宋體_深度學習_17

GLASS 對於識別不同尺度文字的影響,可以看出增加了 GLASS 以後,對於各種尺度的文字識別,performance 都有提升。

鏡像添加宋體_python_18

鏡像添加宋體_人工智能_19

僅僅針對 recognition branch 做的消融實驗,這裏使用 ground truth bbox,消除 detection branch 的影響。可以看出 GLASS 對於 recognition 有提升。

鏡像添加宋體_python_20

鏡像添加宋體_機器學習_21

Rethink

1. 本文針對尺度不同,以及旋轉角的問題做了一些特化的設計,並取得了不錯的效果。這裏提到的使用 FPN 提取 Global 特徵(low resolution),使用直接的 feature map 提取 local 特徵,再將兩組特徵加以融合的方法十分值得學習。再以後遇到 scale 方面的問題,或許可以採用類似的思路。

2. 文章結尾提到:在一些場景文字,各個字符間隔較大時,以及遇到一些不規則的字體時,模型會出現誤判,這也是未來的一個努力方向。

鏡像添加宋體_機器學習_22

一些誤判樣例:

  • 針對第一個問題:我認為主要還是尺度的問題,以及卷積感知域的問題。字符本身的尺度相較於單詞的尺度太小。或許可以採用類似 ViT 的一些方法(讓我想到了 SwinSpotter 那篇文章),利用 transformer 可以將兩個較遠的像素點產生聯繫的特性處理這個問題。但這個問題顯然更加複雜,因為兩個相隔較遠的字符,去判斷他們屬於一個 word,似乎需要一些先驗知識的支持。
  • 關於不規則字體:之前讀過一篇基於知識圖譜,通過 scene-text 完成 img captioning 任務的文章(knowledge Mining with SceneText for Fine-Grained Recognition),或許圖片也可以反作用於文字,比如説這個 Flower(第二行第三個),似乎根據圖片可以做一些 inference。