代碼位址:FOTS.PyTorch
1. 概述
導讀:考慮到現有的文本檢測與識别是單獨分開的方法,文章提出了将兩者結合實作端到端訓練的網絡FOTS(Fast Oriented Text Spotting)。這兩個任務通過權值共享方式減少了重複計算特征的時間消耗,由于文本位置存在的任意性,對此文章提出了RoIRotate方法将文本區域檢測與文本識别關聯起來(擷取對識别有效的特征區域友善文本識别)。并且通過這兩個任務組合起來優化能夠使得特征更加泛化,也使得網絡的性能表現更加優秀。其在ICDAR資料集上超過之前最好的方法5個點,并且處理的幀率為22.6FPS。
下圖1中展示了文章提出的方法與傳統上檢測識别相分離方法的對比,可以看出檢測識别相結合的方式更加快速。

文章的主要貢獻:
- 1)文章提出一種端到端的快速任性朝向文本檢測架構,通過權值共享在隻增加少量計算量的情況下實作文本檢測與文本内容識别,達到了22FPS;
- 2)引入RoIRotate操作将文本對應的特征區域與識别相關聯;
- 3)在現有的ICDAR2015、ICDAR2017 MLT與ICDAR2013資料集上表現除了優異的性能;
2. 方法設計
2.1 模型的結構
文章提出的FOTS方法其整體結構如圖2所示:
其中主幹網絡文章中采用的是ResNet-50的結構,并使用類似U型的FPN網絡結構将特征分辨率擴充到輸入圖像的 1 4 \frac{1}{4} 41,增加對于小目标的檢測(但是目标尺寸多樣變化,大小差異20倍呢?)。其結構見圖3所示:
在文本去被檢測出來之後,使用RoIRotate方法将文本區域變換到固定高度(長度等比)的特征圖上,送入由CNN與LSTM組成的識别網絡中去,識别網絡的詳細結構見表1所示:
2.2 文本檢測分支
使用U型連接配接的網絡結構将特征圖增加到原始輸入的 1 4 \frac{1}{4} 41,之後對文本區域的預測采用的是6個channel的組合實作的。第一個channel用于預測文本的機率,後面接着的4個channel預測該點到文本區域上下左右四個邊界的距離,最後的一個channel自然就是預測文本的旋轉角度了。同時文章還采用了OHEM的方法,提升對于困難樣本的預測準确度,同時也平衡了訓練樣本,文中提到使用OHEM在ICDAR 2015上提上了2個點。
對于這個分支的損失函數,采用的是分類損失加上邊界框回歸損失的形式的。對于分類損失是在OHEM結果 Ω \Omega Ω上使用交叉熵進行的,其表達形式為:
L c l s = 1 ∣ Ω ∣ ∑ x ∈ Ω H ( p x , p x ∗ ) L_{cls}=\frac{1}{|\Omega|}\sum_{x\in \Omega}H(p_x,p_x^*) Lcls=∣Ω∣1x∈Ω∑H(px,px∗)
對于邊界框回歸使用IoU損失加上旋轉角度損失的形式實作,其定義為:
L r e g = 1 ∣ Ω ∣ ∑ x ∈ Ω I o U ( R x , R x ∗ ) + λ θ ( 1 − c o s ( θ x , θ x ∗ ) ) L_{reg}=\frac{1}{|\Omega|}\sum_{x\in \Omega}IoU(R_x,R_x^*)+\lambda_{\theta}(1-cos(\theta_x, \theta_x^*)) Lreg=∣Ω∣1x∈Ω∑IoU(Rx,Rx∗)+λθ(1−cos(θx,θx∗))
最後,将這兩部分的損失函數權重調和起來得到最後的損失函數表達( λ = 1 \lambda=1 λ=1):
L d e t e c t = L c l s + λ r e g L r e g L_{detect}=L_{cls}+\lambda_{reg}L_{reg} Ldetect=Lcls+λregLreg
2.3 RoIRotate
RoIRotate其實就是将文本區域變換到相同高度,寬度等比縮放的區域内,目的就是為了友善識别,其過程見圖4所示:
對于旋轉文本的處理就要說一下RRPN中RRoI Pooling了,它是使用max-pooling操作将旋轉的區域固定到一個尺寸上去,文章中則是使用了雙線性插值的方式,進而避免了量化與采樣帶來的損失,并且使得長寬比例相同,進而避免了畸形的情況。
這裡對于文本區域的校正操作使用到了GT或是檢測結果的參數 ( t , b , l , r , θ ) (t,b,l,r,\theta) (t,b,l,r,θ),分别代表與四個邊界的距離與角度,因而變換的關系與得到的變換矩陣M可以描述為:
2.4 文本識别分支
在文本區域被矯正出來之後就是送入到熟悉的CRNN網絡結構中去了,對于一個文本區域識别的條件機率可以表示為:
p ( y ∗ ∣ x ) = ∑ π ∈ b − 1 ( y ∗ ) p ( π ∣ x ) p(y^*|x)=\sum_{\pi \in b^{-1}(y^*)p(\pi |x)} p(y∗∣x)=π∈b−1(y∗)p(π∣x)∑
對于一張圖中識别損失函數的定義表示為:
L r e c o g = − 1 N ∑ n = 1 N l o g p ( y n ∗ ∣ x ) L_{recog}=-\frac{1}{N}\sum_{n=1}^{N}logp(y_n^*|x) Lrecog=−N1n=1∑Nlogp(yn∗∣x)
整個網絡的損失函數表示為( λ = 1 \lambda=1 λ=1):
L = L d e t e c t + λ r e c o g L r e c o g L=L_{detect}+\lambda_{recog}L_{recog} L=Ldetect+λrecogLrecog
3. 實驗結果
其中,Our Detection:文章的檢測分支結果;FOTS:标準實作和測試版本;FOTS RT:ResNet-34的backbone,1280*720的輸入;FOTS MS:多尺度測試;