2019文字識(shí)別方法總結(jié)
共 2039字,需瀏覽 5分鐘
·
2022-02-09 17:36
總結(jié)文字識(shí)別領(lǐng)域三大方法:
1. CTC
2. Attention
3. ACE(后起之秀,出自華南理工大學(xué),速度更快,存儲(chǔ)更小,數(shù)量級(jí)的提升)
主要從三方面比較了這三種文字識(shí)別算法
l 參數(shù)量(Para)
l 運(yùn)行內(nèi)存(Mem)
l 推理速度(Speed)
基于文本內(nèi)容的不同,可以分為長(zhǎng)文本識(shí)別和短文本識(shí)別;
基于語(yǔ)言符號(hào)個(gè)數(shù)的不同,又可以少類別(比如英文+數(shù)字36個(gè)字符)和多類別(中文>5000個(gè)字符);
注意:ACE其實(shí)更像是CTC的優(yōu)化版,變種;這兩者可以說(shuō)都是不需要額外的參數(shù)的(相比較Attention而言)
從Para來(lái)說(shuō), Attention需要額外的計(jì)算參數(shù); CTC和ACE都是不需要的
從Mem來(lái)說(shuō),CTC和ACE計(jì)算需要的內(nèi)存很少,這里指的都是推理的時(shí)候;CTC和ACE都需要做解碼操作,而解碼的復(fù)雜度和序列長(zhǎng)度、字符個(gè)數(shù)呈正相關(guān)。那為何ACE需要的內(nèi)存更少,而且?guī)缀跏巧倭艘粋€(gè)數(shù)量級(jí)(5~10倍)留待看了論文之后,再做分析; 總之,ACE > CTC > Attention.
從Time來(lái)說(shuō),CTC和ACE的運(yùn)行時(shí)間明顯少很多。官方說(shuō)法,Attention比CTC慢5~20倍;而ACE比CTC快了約30倍;為何ACE會(huì)這么快, 后面再分析. 而ACE的推理時(shí)間,幾乎可以忽略不計(jì),這個(gè)就是質(zhì)的飛躍了。
同時(shí)橫向比較下: 推理時(shí)的文本長(zhǎng)度沒(méi)法確定,可以認(rèn)為都是一樣的。當(dāng)然各個(gè)語(yǔ)種,其實(shí)文本的平均長(zhǎng)度是不一樣的。字符數(shù)量,從37類(其實(shí)就是英文+數(shù)字, 26+10+1), 到7357,其實(shí)就是中文。說(shuō)白了,做中文識(shí)別和做英文識(shí)別,會(huì)有些許差異。
CTC,隨著字符集的擴(kuò)大,所需內(nèi)存和推理時(shí)間,都隨著增大,約為o(n)的關(guān)系;如果你只考慮greedy decoding的方法,就可以輕易得到這個(gè)結(jié)論。推理時(shí)間約為o(logn)的關(guān)系。
CTC典型的操作,1. 取概率最大;2.去重,去fi; 求最大可以采用歸并,所以是o(logn)復(fù)雜度。
Attention呢; 是端到端的方法,直接從網(wǎng)絡(luò)輸出結(jié)果;所以是可以完全再GPU上執(zhí)行的。由于每個(gè)字符的輸出依賴于前一個(gè)字符作為輸入,所以 1. 推理的時(shí)候沒(méi)辦法并行;2. 如果有一個(gè)錯(cuò)了,那么后面也會(huì)錯(cuò)得比較離譜;隨著字符集的增大, 顯存占用會(huì)明顯提升,但推理時(shí)間并沒(méi)有什么變化? 我覺(jué)得可能是因?yàn)镚PU的并行計(jì)算, 雖然要算的輸出量增大了,權(quán)重矩陣也變大了,但GPU高度并行化,并沒(méi)有帶來(lái)太多的時(shí)間消耗。 另外一點(diǎn),attention一定要把上一次的輸出,作為下一個(gè)字符預(yù)測(cè)的輸入嗎??答案是不一定(就和CTC一樣,如果你加入了這個(gè)機(jī)制,相當(dāng)于引入了一個(gè)語(yǔ)言模型。理論上效果會(huì)有一定提升。
綜合來(lái)看,ACE簡(jiǎn)直是大殺器,各方面全面碾壓,那么他是如何做的呢?!
看了全文,非常不錯(cuò)的工作。提出了一個(gè)新的loss計(jì)算方法: Aggregation cross-entropy. 更多像是針對(duì)CTC Loss計(jì)算的一個(gè)優(yōu)化方案。 CTC loss計(jì)算非常麻煩,耗內(nèi)存,消耗時(shí)間;ACE就是把每一個(gè)時(shí)間片t預(yù)測(cè)的概率,進(jìn)行聚合(其實(shí)就是累加), 然后歸一化(除以序列長(zhǎng)度T). 與 truth中每個(gè)元素出現(xiàn)的次數(shù)歸一化值,做交叉熵。
實(shí)驗(yàn)證明,交叉熵比L2效果好不止一星半點(diǎn)!
這是一個(gè)通用的序列識(shí)別loss函數(shù),所以用在很多上面,常見(jiàn)的文本識(shí)別,手寫(xiě)漢字識(shí)別,物體個(gè)數(shù),語(yǔ)音識(shí)別可以嗎?理論上我覺(jué)得也可以。
啟發(fā):
1. 在大量樣本的情況下,最后比較一些簡(jiǎn)單的統(tǒng)計(jì)指標(biāo)是可行的。因?yàn)榉匠潭嗔耍s束多了之后,就可以計(jì)算出每個(gè)未知量的值。舉例:
當(dāng)你知道 x+y=2; 2 *x + y= 3之后,你就可以得到x =1,y=1; 如果再給你兩個(gè)方程,即使沒(méi)有真解,你也可以得到使得方程基本正確(MSE loss最?。┑慕谱罴阎怠?/p>
2. 貌似只能用在分類(多物體,多類別),或者個(gè)數(shù)統(tǒng)計(jì)上。能做回歸嗎? 能,但貌似時(shí)間和內(nèi)存消耗的優(yōu)勢(shì)不明顯。
3. 還有哪些簡(jiǎn)單的統(tǒng)計(jì)指標(biāo): 數(shù)個(gè)數(shù)實(shí)在是太秒了! 啟發(fā),分段統(tǒng)計(jì)? 比如將圖片切分成上下或者左右兩部分,分別求出統(tǒng)計(jì)值,會(huì)不會(huì)使得監(jiān)督更強(qiáng),效果更好呢??!!
Aggregation Cross-EntropyPS: OCR由于應(yīng)用價(jià)值及商業(yè)變現(xiàn)的原因,一直以來(lái)開(kāi)源的repo比較少。2020年以來(lái),開(kāi)源建設(shè)這塊逐漸有了起色,其中PaddleOCR以國(guó)產(chǎn)框架paddle為基礎(chǔ)、開(kāi)源發(fā)布了多種文字檢測(cè)(EAST, DB)、文字識(shí)別算法(CRNN、RARE), 包括百度自研的性能極佳的文字檢測(cè)算法SAST 和文字識(shí)別算法SRN, 輔以用戶友好、易于上手的文檔說(shuō)明,而深受開(kāi)發(fā)者青睞,目前star數(shù)已經(jīng)突破8000,直逼10000 star. 對(duì)OCR感興趣的小伙伴、OCR研究人員、從業(yè)人員不容錯(cuò)過(guò)
https://github.com/PaddlePaddle/PaddleOCR