PP-OCR::一種實用的超輕量OCR系統(論文解析)
1、PP-OCR作者
作者是來自百度研究院的各位大佬:
Yuning Du, Chenxia Li, Ruoyu Guo, Xiaoting Yin, Weiwei Liu, Jun Zhou, Yifan Bai, Zilin Yu, Yehua Yang, Qingqing Dang, Haoshuang Wang
2、摘要
光學字符識別(OCR)系統已廣泛應用於辦公自動化、工廠自動化、在線教育、地圖制作等各種應用場合,但由於文本形式的多樣性和計算效率的要求,OCR仍然是一個具有挑戰性的課題。本文提出了一種實用的超輕量OCR系統,即PP-OCR。PP-OCR的整體模型大小僅為3.5M用於識別6622個漢字和2.8M用於識別63個字母數字符號。我們引入一系列策略來增強模型能力或減小模型尺寸。並用實際數據進行了相應的消融實驗。同時,發布了幾種預訓練的中英文識別模型,包括文本檢測器(使用97K圖像)、方向分類器(使用600K圖像)和文本識別器(使用1790萬圖像)。此外,本文提出的PP-OCR算法在法語、韓語、日語和德語等語言識別任務中也得到了驗證。上述所有模型都是開源的,代碼可以在GitHub存儲庫中找到,即:https://github.com/paddle/paddocr。
3、增強、剪枝策略
3.1 文本檢測
在本節中,將詳細介紹六種增強文本檢測器的模型能力或減小模型大小的策略。
3.1.1 Light Backbone
backbone 的大小對文本檢測器的模型大小有顯著影響。因此,在構建超輕量化模型時,應選擇輕骨架。隨着圖像分類技術的發展,MobileNetV1、MobileNetV2、MobileNetV3和ShuffleNetV2系列通常被用作輕主干。每個系列有不同的規模。下圖提供了20種backbone的性能表現:(https://github.com/PaddlePaddle/PaddleClas/)

這里的MobileNetV3在推理時間和精度上都有較好的表現,百度選擇了 MobileNetV3_large_x0.5,作為精度和效率的權衡。順便說一句,Padderclas提供了多達24個系列的圖像分類網絡結構和訓練配置,122個模型的預訓練權重及其評估指標,如ResNet、ResNet_vd、SERes-NeXt、Res2Net、Res2Net vd、DPN、DenseNet、EfficientNet、Exception、HRNet等。
3.1.2 Light Head
文本檢測器的頭部類似於FPN(Lin et al.2017)在目標檢測中的架構(使用了DB模塊),融合了不同尺度的特征圖,證明了對小文本區域檢測的效果。為了便於合並不同分辨率的特征映射,通常采用1×1卷積將特征映射縮小到相同的通道數(使用inner_channels作為short)。該概率圖和閾值圖由融合后的特征圖和卷積生成,卷積也與上述inner_channels相關。因此,inner_channels對模型尺寸有很大的影響。當inner_channels從256減少到96時,模型尺寸從7M減少到4.1M,但精度略有下降。
3.1.3 Remove SE
SE是 squeeze-and-excitation的縮寫(Hu、Shen和Sun,2018)。SE塊對通道間的依賴關系進行顯式建模,並自適應地重新校准通道特征響應。因為SE塊可以明顯提高視覺任務的准確率,MobileNetV3的搜索空間中包含了SE塊,並且有大量的SE塊在MobileNetV3體系結構中。然而,當輸入分辨率較大時,如640×640時,很難用SE塊估計通道特征響應。精度提高有限,但時間成本很高。當從主干中刪除SE塊時,模型尺寸從4.1M減小到2.5M,但精度沒有影響。
3.1.4 CLRD 余弦學習率衰減🌟
學習速率是控制學習速度的超參數。學習率越低,損失值變化越慢。雖然使用較低的學習率可以確保不會錯過任何局部極小值,但這也意味着收斂速度較慢。在訓練的早期階段,權值處於隨機初始化狀態,因此可以設置一個相對較大的學習速率來加快收斂速度。在訓練的后期,權重接近最優值,因此應該使用相對較小的學習率。余弦學習率衰減已成為提高模型精度的首選學習率縮減策略。在整個訓練過程中,余弦學習速率衰減保持了較大的學習速率,因此其收斂速度較慢,但最終的收斂精度較好。下圖是其函數曲線:

3.1.5 Learning Rate Warm-up 學習率預熱🌟
論文(He et al.2019a)表明,使用學習率預熱操作有助於提高圖像分類的准確性。在訓練過程開始時,使用過大的學習率可能會導致數值不穩定,建議使用較小的學習率。當訓練過程穩定時,使用初始學習率。對於文本檢測,實驗表明該策略也是有效的。
此時的學習率函數曲線應該是從0增長到設置的初始值,然后使用CLRD.
3.1.6 FPGM Pruner : FPGM 裁剪🌟
剪枝是提高神經網絡模型推理效率的另一種方法。為了避免模型剪枝導致的模型性能下降,我們使用FPGM(He et al.2019b)在原始模型中尋找不重要的子網絡。FPGM以幾何中值為准則,將卷積層中的每個濾波器看作歐氏空間中的一個點。然后計算這些點的幾何中值,用類似的值重新移動過濾器,如下圖所示。每層的壓縮比對於修剪模型也很重要。統一修剪每一層通常會導致顯著的性能下降。在PP-OCR中,根據(Li et al.2016)中的方法計算每層的修剪靈敏度,然后用於評估每層的冗余度。
FPGM論文:https://arxiv.org/pdf/1811.00250.pdf 🌟
FPGM項目地址:https://github.com/he-y/filter-pruning-geometric-median 🌟
PFEC論文:https://arxiv.org/abs/1608.08710 🌟

關於FPGM裁剪策略可以參考文章:FPGM 裁剪。
3.2 方向分類
3.2.1 Light Backbone
我們還采用了與文本檢測器相同的MobileNetV3作為方向分類器的backbone。因為這個任務相對簡單,所以我們使用MobileNetV3_small_ x0.35從經驗上平衡准確性和效率。當使用更大的backbone時,精確度不會提高更多。
3.2.2 Data Augmentation
例如旋轉、透視失真、運動模糊和高斯噪聲。這些過程簡稱為BDA(basedataaugmentation)。它們被隨機添加到訓練圖像中。實驗表明,BDA對方向分類器的訓練也有一定的幫助。除BDA外,最近還提出了一些新的數據增強操作,以提高圖像分類的效果。
- AutoAugment:https://arxiv.org/pdf/1805.09501v3.pdf
參考資料:https://blog.csdn.net/rainy0103/article/details/95180460
-
RandAugment:https://arxiv.org/abs/1909.13719
參考資料:https://blog.csdn.net/qq_42738654/article/details/103631455
-
CutOut:https://arxiv.org/abs/1708.04552v2
參考資料:https://blog.csdn.net/mingqi1996/article/details/96129374
-
RandErasing:https://arxiv.org/abs/1708.04896
參考資料:https://blog.csdn.net/xuluohongshang/article/details/79000951
-
HideAnd-Seek:https://arxiv.org/abs/1704.04232
參考資料:https://blog.csdn.net/qq_40760171/article/details/102722856
-
GridMask:https://arxiv.org/abs/2001.04086
參考資料:https://github.com/Jia-Research-Lab/GridMask
https://zhuanlan.zhihu.com/p/103992528?utm_source=zhihu&utm_medium=social&utm_oi=1126834861566304256
-
Mixup:https://arxiv.org/pdf/1710.09412.pdf
參考資料:https://zhuanlan.zhihu.com/p/139398593
https://blog.csdn.net/ellin_young/article/details/81142168
-
Cutmix:https://arxiv.org/pdf/1905.04899.pdf
參考資料:https://github.com/clovaai/CutMix-PyTorch
https://www.cnblogs.com/monologuesmw/p/12932407.html
https://zhuanlan.zhihu.com/p/104992391?utm_source=wechat_session
但實驗表明,除了隨機增強和隨機刪除外,大多數算法都不適用於方向分類器的訓練。RandAugment效果最好。最后,我們將BDA和RandAugment添加到方向分類的訓練圖像中。
3.2.3 Input Resolution 輸入分辨率
通常,當歸一化圖像的輸入分辨率增加時,精度也將提高。由於方向分類器的主干很輕,適當提高分辨率不會導致計算時間明顯提高。在以往的大多數文本識別方法中,歸一化圖像的高度和寬度分別設置為32和100。然而,在PP-OCR中,高度和寬度分別設置為48和192,以提高方向分類器的精度。
3.2.4 PACT 參數裁剪激活
PACT是一個在線量化方法,它提前從激活中刪除一些異常值。剔除異常值后,模型可以學習到更合適的量化尺度。PACT對激活進行預處理的公式如下:
基於ReLU函數對普通PACT方法的激活值進行預處理。所有大於某個閾值的激活值都將被截斷。然而,MobileNetV3中的激活函數不僅是ReLU,而且是 Hard Swish。使用普通的PACT量化會導致更高的量化損耗。因此,我們修改了激活預處理公式如下,以減少量化損失。
采用改進的PACT量化方法對方向分類器模型進行量化。另外,在PACT參數中加入系數為0.001的L2正則化,提高了模型的魯棒性。
上述FPGM剪枝器和PACT量化的實現是基於PaddleSlim1的。是一個用於模型壓縮的工具箱。它包含了剪枝、不動點量化、知識提煉、超參數搜索、神經結構搜索等一系列壓縮策略。
3.3 文本識別
3.3.1 Light Backbone
MobileNetV3_small_x0.5
MobileNetV3_small_x1.0 模型增加了2M,性能提升明顯。
3.3.2 Data Augmentation數據擴充
除BDA之外,還有以下策略:
-
TIA:
論文link:https://arxiv.org/abs/2003.06606
首先,在圖像上初始化一組基准點。然后隨機移動這些點,通過幾何變換生成一個新的圖像。在PP-OCR中,我們將BDA和TIA加入到文本識別的訓練圖像中。

3.3.3 CLRD 余弦學習率衰減(同上)
3.3.4 特征圖分辨率
為了適應多語種識別,特別是中文識別,在PPOCR中,CRNN輸入的高度和寬度設置為32和320。因此,原始MobileNetV3的步幅不適合於文本識別。為了保留更多的水平信息,我們將下采樣特征圖的步長從(2,2)改為(2,1)。為了保留更多的垂直信息,我們進一步將二次下采樣特征圖的步長從(2,1)修改為(1,1)。
因此,第二下采樣特征圖s2的步長對整個特征圖的分辨率和文本識別器的精度有很大的影響。在PP-OCR中,s2被設置為(1,1),以在經驗上獲得更好的性能。

3.3.5 正則化參數 權值衰減 L2范數
文本識別中,L2正則對結果的影響非常大!
3.3.6 學習率預熱 Learning Rate Warm-up
同文本檢測
3.3.7 Light Head
采用全連接層對序列特征進行編碼,將序列特征編碼為普通序列中的預測字符。序列特征的維數對文本識別器的模型尺寸有很大的影響,特別是對於字符數超過6000的中文識別。同時,並不是維數越高,序列特征表示能力越強。在PP-OCR中,序列特征的維數根據經驗設置為48。
3.3.8 預訓練模型
如果訓練數據較少,則對在ImageNet等大數據集上訓練的現有網絡進行微調,以實現快速收斂和更好的精度。在圖像分類和目標檢測中的傳遞學習實驗表明了上述策略的有效性。在真實場景中,用於文本識別的數據往往是有限的。如果用上千萬個樣本訓練模型,即使是合成的模型,也能顯著提高精度。通過實驗驗證了該策略的有效性。
3.3.9 PACT量化
我們采用方向分類的類似量化方案來減小文本識別器的模型尺寸,只是跳過了LSTM層。由於LSTM量化的復雜性,這些層目前不會被量化。
4、實驗
對於文本檢測,有97k個訓練圖像和500個驗證圖像。在訓練圖像中,68K幅圖像是真實的場景圖像,這些圖像來自一些公共數據集和百度圖像搜索。使用的公共數據集包括LSVT(Sun等人,2019)、RCTW-17(Shi等人,2017)、MTWI 2018(He和Yang,2018)、CASIA-10K(He等人,2018)、SROIE(Huang等人,2019)、MLT 2019(Nayef等人,2019)、BDI(Karatzas等人,2011)、MSRA-TD500(Yao等人,2012)和CCPD 2019(Xu等人,2018)。百度圖像搜索的訓練圖像大多是文檔文本圖像。剩下的29K合成圖像主要集中在長文本、多方向文本和表格文本的場景中。所有的驗證圖像都來自真實場景。
對於方向分類,有600k訓練圖像和310K驗證圖像。在訓練圖像中,100K圖像是真實場景圖像,來自公共數據集(LSVT、RCTW-17、MTWI 2018)。它們是水平文本,糾正和裁剪圖像的基本事實。剩下的500K合成圖像主要集中在反轉文本上。我們使用垂直字體合成一些文本圖像,然后水平旋轉它們。所有的驗證圖像都來自真實場景。
對於文本識別,有17.9M的訓練圖像和18.7K的驗證圖像。在訓練圖像中,有190萬張是真實場景圖像,這些圖像來自一些公共數據集和百度圖像搜索。使用的公共數據集包括LSVT、RCTW-17、MTWI 2018和CCPD 2019。其余16M合成圖像主要集中在不同背景的場景、平移、旋轉、透視變換、線條干擾、噪聲、垂直文本等。合成圖像的語料庫來源於真實場景圖像。所有的驗證圖像也都來自真實場景。
為了快速進行消融實驗並選擇合適的策略,我們從真實場景訓練圖像中選取4k圖像進行文本檢測,從真實場景訓練圖像中選取300k圖像進行文本識別。
此外,我們收集了300張不同實際應用場景的圖像,對整個OCR系統進行評估,包括合同樣本、車牌、銘牌、火車票、測試單、表格、證書、街景圖像。
此外,為了驗證所提出的PP-OCR在其他語言中的應用,我們還收集了一些用於字母數字符號識別、法語識別、韓語識別、日語識別和德語識別的語料庫。
合成文本行圖像進行文本識別。一些用於字母數字符號識別的圖像來自公共數據集ST(Gupta、Vedaldi和Zisserman 2016)和SRN(Yu等人,2020)。表2顯示了統計數據。由於用於文本檢測的MLT 2019包括多語言圖像,因此用於中文和英文識別的文本檢測器也可以支持多語言文本檢測。由於數據有限,我們還沒有找到合適的數據來訓練多語種方向分類器。
用於文本檢測和文本識別的數據合成工具是從文本呈現(Sanster 2018)修改而來的。
Implementation Details
我們使用Adam優化器訓練所有模型,並采用余弦學習率衰減作為學習率調度。不同任務的初始學習率、批量大小和階段數見下表。在得到訓練后的模型時,可以使用FPGM剪枝和PACT量化進一步縮小模型尺寸,將上述模型作為預訓練模型。FPGM剪枝機和PACT量化的訓練過程與以前的相似。

在推理階段,用HMean來評價文本檢測器的性能。准確度用於評估方向分類器或文本識別器的性能。Fscore用於評估OCR系統的性能。為了計算F值,一個正確的文本識別結果應該是准確的位置和相同的文本。GPU推斷時間在單個T4 GPU上進行測試。CPU推斷時間在Intel(R)Xeon(R)Gold 6148上進行了測試。我們使用Snapdragon 855(SD 855)來評估量化模型的推理時間。
4.1 文本檢測


4.2 方向分類



4.4 文本識別






完!