相關(guān)論文
論文打包下載 - 提取碼:0822:https://pan.baidu.com/s/1WDXf-erVIPWxmoJRVX3_XA?pwd=0822
2009.PP-OCR: A Practical Ultra Lightweight OCR System
2109.PP-OCRv2: Bag of Tricks for Ultra Lightweight OCR System
2206.PP-OCRv3: More Attempts for the Improvement of Ultra Lightweight OCR System
2308.PP-OCRv4
:目前代碼已發(fā)布(2023.08.07),但技術(shù)報告未更新
工程代碼: github_PaddleOCR_2.7 | 國內(nèi)gitee_PaddleOCR
概述
中文模型尺寸僅為3.5M
,能識別6622個漢字 。識別63個字母數(shù)字符號的模型,僅為2.8M
一、PP-OCRv1 模型結(jié)構(gòu)
圖中的模型大小是關(guān)于中英文
識別的。對于字母數(shù)字符號識別( alphanumeric symbols recognition),文本識別的模型大小為1.6M~0.9M。其余的模型的大小相同
主要流程為: DB文字檢測 + 方向分類+CRNN字符識別
其中文本檢測
算法選用可微二值化算法 DB,使用 97K圖片訓(xùn)練文本識別
算法選用CRNN,使用1700萬張圖片的圖片訓(xùn)練 ,PPOCRv3采用的是 SVTR
文本方向分類
器 MobileNetv3, 在檢測和識別模塊之間添加,以應(yīng)對不同方向的文本識別。(60萬+圖片訓(xùn)練)
下圖黑色的文字表示改進結(jié)構(gòu)或者策略
模型模塊意義說明
├── transforms # 網(wǎng)絡(luò)的圖像變換模塊
├── backbones # 網(wǎng)絡(luò)的特征提取模塊
├── necks # 網(wǎng)絡(luò)的特征增強模塊
└── heads # 網(wǎng)絡(luò)的輸出模塊
二、改進策略(壓縮模型大小、調(diào)高精度與泛化)
目標檢測模型優(yōu)化
1. 文字檢測的骨干網(wǎng)絡(luò)(backgone)輕量化
使用MobileNet或者ShuffleNet系列作為 light backbone
2. 文字檢測頭(head)的輕量化,
采用FPN的類似結(jié)構(gòu),融合不同尺度的特征層為了方便合并不同分辨率的特征映射,通常使用1×1卷積法
將特征映射減少到相同數(shù)量的通道數(shù),本文從256減少到了96,
3. 去除了SE
( squeeze-and-excitation)模塊 (在骨干網(wǎng)絡(luò)MobileNetv3中)
如圖7所示,SE塊顯式地建模通道之間的相互依賴(inter-dependencies)關(guān)系,并自適應(yīng)地重新校準通道方向的特性響應(yīng)。由于SE塊可以明顯地提高視覺任務(wù)的準確性,因此MobileNetV3
的搜索空間中包含了它們,并且許多SE塊都在MobileNetV3架構(gòu)中。然而,當輸入分辨率很大時
,如640×640,很難估計使用SE塊的逐通道特征響應(yīng)(channel-wise feature responses
)。精度的提高很有限,但時間成本很高。當從主干上將SE塊移除
時,模型尺寸從4.1M減小到2.5M,但精度沒有影響。
4. 余弦學(xué)習(xí)率衰減 (Cosine Learning Rate Decay) :
在訓(xùn)練的早期階段,權(quán)值處于隨機初始化狀態(tài),因此我們可以設(shè)置一個相對較大的學(xué)習(xí)速率,以便更快地收斂(convergence)。在訓(xùn)練的后期階段,權(quán)值接近于最優(yōu)值,因此應(yīng)該使用相對較小的學(xué)習(xí)率。(雖然使用較低的學(xué)習(xí)速率可以確保你不會錯過任何局部最小值,但這也意味著收斂速度很慢。)
5. 學(xué)習(xí)率預(yù)熱(Learning Rate Warm-up)
論文建議 :1812.Bag of Tricks for Image Classification with Convolutional Neural Networks (基于卷積神經(jīng)網(wǎng)絡(luò)的圖像分類的各種技巧)warm-up
采用以較低學(xué)習(xí)率(例如0)逐漸增大至較高學(xué)習(xí)率的方式實現(xiàn)網(wǎng)絡(luò)訓(xùn)練的“熱身”階段(一般2-5epochs),隨著訓(xùn)練的進行學(xué)習(xí)率慢慢變大,到一定程度后就可以設(shè)置的預(yù)設(shè)的學(xué)習(xí)率進行訓(xùn)練了(因為在訓(xùn)練過程開始時,使用太大的學(xué)習(xí)率可能會導(dǎo)致數(shù)值不穩(wěn)定(numerical instability),建議使用較小的學(xué)習(xí)率,這樣就可以提高網(wǎng)絡(luò)的準確率)
擴展閱讀:學(xué)習(xí)率預(yù)熱和學(xué)習(xí)率衰減
6. FPGM 剪枝
(Pruner)?
使用FPGM,在原始模型中找到不重要的子網(wǎng)絡(luò)( sub-network)。
該方法以幾何中值(geometric median)為準則,并將卷積層中的每個濾波器作為歐氏空間中( Euclidean space)的一個點。然后計算這些點的幾何中值,去掉具有相似值的濾波器,如圖所示
PP-OCR 根據(jù)論文 1608.Pruning filters for efficient convnets 計算每層的剪枝靈敏度(pruning sensitivity),然后用來評估每層的冗余度(redundancy)。
方向分類的優(yōu)化方法
7. 方向分類骨架 MobileNetV3 small x0.35 輕量
8. 數(shù)據(jù)增強方法
旋轉(zhuǎn)(rotation),透視失真(perspective distortion),運動模糊(motion blur)和高斯噪聲。這些過程被簡稱為BDA(基礎(chǔ)數(shù)據(jù)增強 Base Data Augmentation)。隨機增強效果最好。最后,我們在方向分類的訓(xùn)練圖像中添加了BDA和隨機增強(RandAugment):
9. 增加輸入圖像的分辨率
Input Resolution
在以往的大多數(shù)文本識別方法中,歸一化圖像的高度和寬度分別設(shè)置為32和100。而在PP-OCR中,高度和寬度分別設(shè)置為48和192,以提高方向分類器的精度。
10. PACT 量化 (quantization)?
量化可以使神經(jīng)網(wǎng)絡(luò)模型具有更低的延遲(latency)、更小的體積(volume)和更低的計算功耗(consumption)
P ACT(準參數(shù)化剪切激活
, Arameterized Clipping acTivation)是一種新的在線量化方法,可以提前從激活中去除一些異常值 . 為了適應(yīng)新結(jié)構(gòu),本文進行了改進。
文字識別優(yōu)化
11. 識別主干網(wǎng)絡(luò) MobileNetV3 small x0.5
改為MobileNetV3 small x1.0 模型也不錯,只增加2M的大小
12. 數(shù)據(jù)增強 TIA
2003. Joint Data Augmentation and Network Optimization for Text Recognition
13. Feature Map Resolution
為了適應(yīng)多語言識別
(multilingual recognition),特別是中文識別 ,CRNN輸入的高度和寬度被設(shè)置為32和320。,所以,原始的MobileNetV3的步伐
(stride)就不適合用于文本識別了
除了第一個采樣特征圖之外,我們將向下采樣特征圖的步幅從(2、2)修改為(2、1)。為了保持更多的垂直信息,我們進一步修改了第二個向下采樣特征圖的步幅,從(2,1)到(1,1)。因此,第二個向下采樣特征圖s2的步幅極大地影響了整個特征圖的分辨率和文本識別器的精度。在PP-OCR中,s2被設(shè)置為(1,1),以獲得更好的經(jīng)驗性能。
table from : Searching for mobilenetv3
14. 正則化參數(shù) Regularization Parameters
為了防止過擬合(在訓(xùn)練集上效果好,測試集效果一般),權(quán)重衰減
(weight decay)是避免過擬合的一種廣泛使用的方法之一。在最終的損失函數(shù)之后,將l2正則化(L2衰減 (decay))添加到損失函數(shù)中。在l2正則化的幫助下,網(wǎng)絡(luò)的權(quán)值傾向于選擇一個較小的值,最后整個網(wǎng)絡(luò)中的參數(shù)趨于0,從而相應(yīng)地提高了模型的泛化性能(generalization)。對于文本識別,l2衰減對識別精度有很大的影響。
15. 輕量化
一個全連接層(full connection)用于將序列特征編碼到普通的預(yù)測字符中。序列特征的維度
( dimension of the sequence features) 對文本識別器的模型大小有影響,
特別是對于超過詞庫6千+以上的中文識別。
同時,并不是說維數(shù)越高,序列特征的表示能力就越強。在PP-OCR中,序列特征的維數(shù)被經(jīng)驗設(shè)置為48
16. 預(yù)訓(xùn)練模型
如果訓(xùn)練數(shù)據(jù)較少,則對現(xiàn)有的網(wǎng)絡(luò)進行微調(diào),并在ImageNet等大數(shù)據(jù)集上進行訓(xùn)練,以實現(xiàn)快速收斂和更好的精度。在圖像分類和目標檢測中的遷移學(xué)習(xí)結(jié)果表明,上述策略是有效的
在真實的場景中,用于文本識別的數(shù)據(jù)往往是有限的。如果用數(shù)千萬個樣本進行訓(xùn)練,即使是合成的
,上述模型也可以顯著提高精度
17.-19 文字識別與圖片檢測相似的方法
PACT Quantization 和 cosine-learning decay 衰減 以及 Learning Rate Warm-up 學(xué)習(xí)率熱啟動
三、原始文本檢測算法DB
基于可微二值化的實時場景文字檢測 1911.Real-time Scene Text Detection with Differentiable Binarization
3.1 DB算法概述
基于分割
的方法在文本檢測中非常流行,因為分割結(jié)果可以更準確地描述各種形狀的場景文本。
From: DBNet閱讀筆記 - 周軍的文章 - 知乎
在基于分割的文本檢測網(wǎng)絡(luò)中,最終的二值化map都是使用的固定閾值來獲取,并且閾值不同對性能影響較大。本文中,對每一個像素點進行自適應(yīng)二值化
,二值化閾值由網(wǎng)絡(luò)學(xué)習(xí)
得到,徹底將二值化這一步驟加入到網(wǎng)絡(luò)里一起訓(xùn)練,這樣最終的輸出圖對于閾值就會非常魯棒。probability map, 代表像素點是文本的概率
threshold map, 每個像素點的閾值
binary map, 自適應(yīng)二值化后得到的映射圖
可學(xué)習(xí)的二值化公式(其實就是一個帶系數(shù)的sigmoid):
使用DB模塊之后,二值化操作就變成了可微的,可以加到網(wǎng)絡(luò)里一起訓(xùn)練。
Pi,j表示概率圖上的
Ti,j是從網(wǎng)絡(luò)中學(xué)習(xí)的自適應(yīng)閾值映射
3.2 DB在paddleocr調(diào)參說明
其中,DB算法相關(guān)參數(shù)如下
參數(shù)名稱 | 類型 | 默認值 | 含義 |
---|---|---|---|
det_db_thresh | float | 0.3 | DB輸出的概率圖中,得分大于該閾值的像素點才會被認為是文字像素點 |
det_db_box_thresh | float | 0.6 | 檢測結(jié)果邊框內(nèi),所有像素點的平均得分大于該閾值時,該結(jié)果會被認為是文字區(qū)域 |
det_db_unclip_ratio | float | 1.5 |
Vatti clipping 算法的擴張系數(shù),使用該方法對文字區(qū)域進行擴張 |
max_batch_size | int | 10 | 預(yù)測的batch size |
use_dilation | bool | False | 是否對分割結(jié)果進行膨脹以獲取更優(yōu)檢測效果 |
det_db_score_mode | str | “fast” | DB的檢測結(jié)果得分計算方法,支持fast 和slow ,fast 是根據(jù)polygon的外接矩形邊框內(nèi)的所有像素計算平均得分,slow 是根據(jù)原始polygon內(nèi)的所有像素計算平均得分,計算速度相對較慢一些,但是更加準確一些。 |
四、文本識別算法 (CRNN , SVTR)
4.1 CRNN
(老,V1-V2使用):
一種基于圖像的序列識別的端到端可訓(xùn)練神經(jīng)網(wǎng)絡(luò) 及 其在場景文本識別中的應(yīng)用
1507.An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition
結(jié)構(gòu)如下,先卷積,后使用LSTM處理
4.2 SVTR
(基于transformer的文本識別模型)
2205.SVTR: Scene Text Recognition with a Single Visual Model (單個視覺模型)
SVTR不再采用RNN結(jié)構(gòu),通過引入Transformers結(jié)構(gòu)更加有效地挖掘文本行圖像的上下文信息,從而提升文本識別能力。
不同結(jié)構(gòu)的識別模塊對比
五、實驗
5.1 實驗數(shù)據(jù)集
*PP-OCRv1-v4的結(jié)構(gòu)變化
一、PP-OCRV1
要由DB文本檢測、檢測框矯正和CRNN文本識別三部分組成。
最終得到整體大小為3.5M的超輕量中英文OCR和2.8M的英文數(shù)字OCR。更多細節(jié)請參考PP-OCRv1技術(shù)方案
該系統(tǒng)從骨干網(wǎng)絡(luò)選擇和調(diào)整、預(yù)測頭部的設(shè)計、數(shù)據(jù)增強、學(xué)習(xí)率變換策略、正則化參數(shù)選擇、預(yù)訓(xùn)練模型使用以及模型自動裁剪量化
8個方面,采用19個有效策略,對各個模塊的模型進行效果調(diào)優(yōu)和瘦身,
其中FPGM裁剪器和PACT量化的實現(xiàn)可以參考PaddleSlim。
二、PP-OCRv2
(紅色框
)表示較于v1的改變,綠色框 表示v1已經(jīng)具有的結(jié)構(gòu)
5大改進
PP-OCRv2在PP-OCR的基礎(chǔ)上,進一步在5個方面重點優(yōu)化,
檢測模型采用CML協(xié)同互學(xué)習(xí)知識蒸餾
策略
CopyPaste數(shù)據(jù)增廣策略;
識別模型
采用 LCNet 輕量級骨干
網(wǎng)絡(luò)、
UDML 改進知識蒸餾策略
Enhanced CTC loss損失函數(shù)改進(如上圖紅框所示),
進一步在推理速度和預(yù)測效果上取得明顯提升。更多細節(jié)請參考PP-OCRv2技術(shù)報告。
三、PP-OCRv3
(紅色框
)表示較于v2的改變,綠色 表示v2已經(jīng)具有的結(jié)構(gòu)
中文場景,相對于PP-OCRv2中文模型提升超5%;
英文數(shù)字場景,相比于PP-OCRv2英文模型提升11%;
多語言場景,優(yōu)化80+語種識別效果,平均準確率提升超5%。
PP-OCRv3 九大改進
從算法改進思路上看,分別針對檢測和識別模型,進行了共9個方面的改進:
PP-OCRv3的識別模塊是基于文本識別算法SVTR
優(yōu)化。
SVTR不再采用RNN結(jié)構(gòu),通過引入Transformers結(jié)構(gòu)更加有效地挖掘文本行圖像的上下文信息,從而提升文本識別能力。
直接將PP-OCRv2的識別模型,替換成SVTR_Tiny,識別準確率從74.8%提升到80.1%(+5.3%),但是預(yù)測速度慢了將近11倍,CPU上預(yù)測一條文本行,將近100ms
2205.SVTR: Scene Text Recognition with a Single Visual Model
檢測模塊:
LK-PAN:大感受野的PAN結(jié)構(gòu);DML
:教師模型互學(xué)習(xí)策略;
RSE-FPN:殘差注意力機制的FPN結(jié)構(gòu);
識別模塊:
SVTR_LCNet:輕量級文本識別網(wǎng)絡(luò);
GTC:Attention指導(dǎo)CTC訓(xùn)練策略;
TextConAug:挖掘文字上下文信息的數(shù)據(jù)增廣策略;
TextRotNet:自監(jiān)督的預(yù)訓(xùn)練模型;
UDML:聯(lián)合互學(xué)習(xí)策略;
UIM:無標注數(shù)據(jù)挖掘方案。 從效果上看,速度可比情況下,多種場景精度均有大幅提升:
四、PP-OCRv4 (目前效果最好2023.08.07更新)
(紅色框
)表示較于v3的改變,綠色 表示v3已經(jīng)具有的結(jié)構(gòu)
從效果上看,速度可比情況下:
中文場景,相對于PP-OCRv3中文模型提升超4%
;
英文數(shù)字場景,相比于PP-OCRv3英文模型提升6%;
多語言場景,優(yōu)化80個語種識別效果,平均準確率提升超8%。
PPOCRv4的10大算法改進
從算法改進思路上看,分別針對檢測和識別模型,進行了共的改進:
檢測模塊:
LCNetV3
:精度更高的骨干網(wǎng)絡(luò)
PFHead:并行head分支融合結(jié)構(gòu)
DSR: 訓(xùn)練中動態(tài)增加shrink ratioCML
:添加Student和Teacher網(wǎng)絡(luò)輸出的KL div loss
識別模塊:SVTR_LCNetV3
:精度更高的骨干網(wǎng)絡(luò)
Lite-Neck:精簡的Neck結(jié)構(gòu)
GTC-NRTR:穩(wěn)定的Attention指導(dǎo)分支
Multi-Scale:多尺度訓(xùn)練策略
DF: 數(shù)據(jù)挖掘方案
DKD :DKD蒸餾策略文章來源:http://www.zghlxwxcb.cn/news/detail-649981.html
附錄2 代碼使用
環(huán)境安裝參考:
paddlepaddle深度學(xué)習(xí)框架: https://www.paddlepaddle.org.cn/
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6/doc/doc_ch/quickstart.md
代碼文章來源地址http://www.zghlxwxcb.cn/news/detail-649981.html
from paddleocr import PaddleOCR, draw_ocr
# Paddleocr目前支持的多語言語種可以通過修改lang參數(shù)進行切換
# 例如`ch`, `en`, `fr`, `german`, `korean`, `japan`
ocr = PaddleOCR(use_angle_cls=True, lang="ch") # need to run only once to download and load model into memory
img_path = './imgs/11.jpg'
result = ocr.ocr(img_path, cls=True)
for idx in range(len(result)):
res = result[idx]
for line in res:
print(line)
# 顯示結(jié)果
# 如果本地沒有simfang.ttf,可以在doc/fonts目錄下下載
from PIL import Image
result = result[0]
image = Image.open(img_path).convert('RGB')
boxes = [line[0] for line in result]
txts = [line[1][0] for line in result]
scores = [line[1][1] for line in result]
im_show = draw_ocr(image, boxes, txts, scores, font_path='doc/fonts/simfang.ttf')
im_show = Image.fromarray(im_show)
im_show.save('result.jpg')
到了這里,關(guān)于【論文簡介】PP-OCRv1-v4中文字符識別論文概述的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!