文字識別技術(shù)在內(nèi)容安全中的應用

導讀:文字在日常生活中發(fā)揮著重要的作用,甚至在考古發(fā)現(xiàn)中文字也作為識別文明的重要標志。特別是在當前短視頻和內(nèi)容爆炸的時代,文字廣泛應用于人們觀點的表達和傳播以及商品營銷等各個領域。這些內(nèi)容中肯定會存在一些不良的行為。而內(nèi)容安全是基于AI技術(shù),從中識別出不良的信息,凈化網(wǎng)絡環(huán)境。本文的主題為文字識別技術(shù)在內(nèi)容安全場景應用實踐,主要內(nèi)容包括:①?內(nèi)容風險舉例;②?防控基本流程;③?主流算法;④?部署優(yōu)化。
01
內(nèi)容風險舉例
常見的圖片文字內(nèi)容違規(guī)風險舉例:
圖片中的文字違規(guī)風險主要分為:涉黃、涉暴、涉政、低俗、廣告等幾個大類。- 涉黃主要是一些小卡片、小電影、常見聊天場景中的違規(guī)內(nèi)容以及打印違規(guī)圖片等一些場景。涉暴場景主要涉及到一些集會、游行、武裝力量等場景的文字描述或者是一些武器的販賣信息。涉政場景主要涉及一些反動、分裂、搞獨立或者是一些不友好媒體的出版物,同時也會存在一些辱罵、抹黑、調(diào)侃領導人或者革命英烈的現(xiàn)象。低俗場景主要是賭毒相關(guān),比如賭場、棋牌這樣的一些場景,包括一些違法商品的售賣、導流的現(xiàn)象。
- 上述場景中的涉黃、涉暴、涉證、低俗等涉及到違反國家法律法規(guī)或者違反社會公序良俗。
- 廣告場景主要涉及平臺內(nèi)容生態(tài)治理,雖然不會違反社會法律法規(guī),但是在內(nèi)容生態(tài)治理上發(fā)揮著重要的作用。例如微信號、QQ號、手機號以及它們常見的變體、拼音首字母縮寫、變異的同音字等。還有短視頻、圖片內(nèi)容中存在的水印信息,這些水印存在著導流情況,特別是在競爭激烈的平臺生態(tài)中,不希望平臺中出現(xiàn)競爭對手的導流信息;
- 廣告法中規(guī)定的限制詞,比如第一,百分之百等這一類的詞,也會存在違反廣告法的現(xiàn)象。
02
防控基本流程
1.?針對圖片文字違規(guī)風險的基本防控流程

- 內(nèi)容輸入:主要以圖片輸入為主,針對視頻輸入可以通過截幀、關(guān)鍵幀算法等方式轉(zhuǎn)化為圖像,然后輸入到識別系統(tǒng)。
- 文字識別:文字識別子系統(tǒng)包括文字檢測、字條矯正、文字識別等子模塊,用于提取出文字信息,這些文字信息會輸入到后續(xù)的文本安全算法模型中,進行處理。
- 文本模型:包括常規(guī)的一些NLP算法和比較豐富的關(guān)鍵詞規(guī)則庫。關(guān)鍵詞庫實現(xiàn)分級、詞庫分類存儲。
- 風險決策:文本模型輸出的結(jié)果最終會通過綜合判斷的方式做出風險決策。包含正常、涉證、涉黃、暴恐、廣告、違禁等分類。
2.?文字識別階段細分流程

- 文字檢測模塊:輸入是原始圖像,通過檢測環(huán)節(jié)定位出圖像中文字的具體位置,產(chǎn)生出字條。
- 字體矯正模塊:識別出的字條,通過字體矯正模塊,方向調(diào)整,最終以水平方式展現(xiàn)。
- 文字識別模塊:接收到矯正后的字條之后,通過識別,最終將圖像翻譯成一段具體的文本內(nèi)容。
03
主流算法
文字定位、文本識別的主流算法介紹:
1.?文本定位主要算法梳理
目前主流的文本定位算法分為兩大類:基于回歸的算法和基于分割的算法。基于回歸的算法:借鑒通用目標檢測的一些方案,通過網(wǎng)絡直接回歸計算出文本行的包圍框信息。主要算法:CTPN、SegLink、Textboxes/Testboxes 、EAST、LOMO、SAST、CRAFT等。- 優(yōu)點:規(guī)則形狀的文本效果較好。
- 缺點:不規(guī)則的文本,特別是長文本效果較差。例子:1、上圖中使用回歸的方案對于長文問兩端的定位不是特別準確,對后續(xù)的識別會造成較大的影響。2、使用回歸方案對于曲線文本、不規(guī)則的文本識別都會存在一些問題。
- 優(yōu)點:適用于各種形狀的文本,整體的檢測效果較好。
- 缺點:后處理耗時大(由于模型輸出的是概率圖,通過概率圖計算出每一個文本框的耗時比較長)、無法處理重疊文本。
2.?文本定位算法BDNet簡介
DBNet發(fā)表于AAAI 2020,核心思想是對后處理流程的速度進行優(yōu)化,簡化了文本檢測方案的流程,在檢測速度上得到了一個比較大的提升,在定位效果和速度上實現(xiàn)了一個比較好的權(quán)衡。DBNet整體的結(jié)構(gòu),網(wǎng)絡的Backbone部分是一個標準的FCN結(jié)構(gòu)。從上到下逐層的一個下采樣,然后進行逐層的上采樣,融合不同尺度的特征,結(jié)合多尺度的特征,做一個CON-CAT,輸出一個預測的概率圖,這些流程和常用的分割算法大致相同。分割得到概率圖之后,之前的方式是做一個標準二值化的操作,然后得到一些聯(lián)通域,再對這些連通域做一些形狀的處理,得到最終的文本框,這里也會涉及到多個文本框合并的問題;DBNet創(chuàng)新之處在于引入了一個threshold map的分支,通過一個預測threshold實現(xiàn)了一個自適應閾值的二值化過程。之前標準的二值化過程為全圖采樣同一個二值化閾值,這樣會造成對不同區(qū)域的魯棒性不是特別好,對后續(xù)的定位精度產(chǎn)生影響。DBNet中引入一個可微分的二值化算子(類似于sigmod函數(shù))進行一個二值化計算過程,同時對概率圖、threshold map、近似的二值化圖進行有監(jiān)督的學習,最終得到一個比較好的文字邊界識別效果。論文中也進行了一些實驗,發(fā)現(xiàn)在推理階段可以直接去掉threshold map這條分支,直接通過一個標準的二值化操作,就可以得到一個比較好的效果。這是因為有監(jiān)督的信息加入之后使得概率圖中文字邊界更加清晰,文字區(qū)域的概率值變高,非文字區(qū)域的概率值變低。總結(jié):目前DBNet是業(yè)界主流的一個方案,主要還是在性能和效果上進行整體權(quán)衡之后,識別效果比較好。3.?文字識別基本流程
首先是圖像進入圖像矯正模塊進行處理,輸出的圖像再輸入到視覺特征提取模塊得到一些視覺feature,后續(xù)會結(jié)合一些序列特征,最終通過預測模塊輸出結(jié)果。文字識別算法目前主流的方案包括CRNN、STATR-NET、RARE、AttentionOCR等,當前比較通用的方案還是以CRNN為主,主要是通過綜合性能和推理速度權(quán)衡之后,從中選出的最佳方案。文本識別算法的輸入為歸一化之后的文本詞條,通過文本識別整個流程之后,輸出就是具體的文字信息。4.?文字識別主流算法CRNN
CRNN 模型是通過CNN RNN CTC 三個模型組合,把文本識別看成一個圖像序列的預測。CRNN模型的優(yōu)點:- 通過引入RNN模型增強序列特征的表達能力。
- 引入CTC識別模塊簡化預測流程。
- 進入CRNN時代之后,文字識別從單詞的預測變?yōu)槲谋拘械念A測,實現(xiàn)預測流程的簡化,同時文字識別模型的標注成本得到了極大的降低。
部署優(yōu)化
生產(chǎn)環(huán)境具體部署過程中的加速優(yōu)化實踐,識別效果舉例。1.?性能優(yōu)化
將整個文字識別流程進行模塊化分,對每個模塊進行耗時統(tǒng)計,找出耗時的性能瓶頸,明確優(yōu)化的目標,對性價比較高的模塊進行針對性的優(yōu)化。文字識別模型作為微服務,整體對外提供能力,整體劃分為CPU計算、GPU計算。CPU計算主要包括文本預處理、后處理操作以及實例矯正模塊;GPU處理主要負責模型具體推理工作。通過在對收集的數(shù)據(jù)集上進行耗時統(tǒng)計分布測試,通過統(tǒng)計發(fā)現(xiàn)識別模型和檢測模型的推理耗時是整個OCR的主要耗時,同時圖像解碼和檢測模型的預處理也占用8%左右的耗時,其他環(huán)節(jié)的整體耗時比較少,因此我們把優(yōu)化的重點放在耗時較高的這幾個方向。2.?性能優(yōu)化方法梳理
通過性能耗時整體分析,梳理了整體的優(yōu)化手段,優(yōu)化策略:算的少(減少計算量),算的快(同樣計算量情況下,算的更快,加快計算效率)。主要的優(yōu)化手段,分為三大部分:CPU計算、GPU計算、系統(tǒng)優(yōu)化。CPU 圖像解碼,通過大量的調(diào)研和比較,發(fā)現(xiàn)opencv的圖像解碼庫的特點是更加傾向于利用多線程的并行能力,對于CPU的低級指令相對較弱,同時在圖像解碼的過程中加入了一些額外的校驗操作,導致整體的解碼過程變慢;在通過調(diào)研和比較之后,選用了Pillow的一個分支,Pillow-SIMD作為我們的主要圖像解碼庫。CPU 預處理優(yōu)化,主要是對輸入圖像的縮放,歸一化操作進行優(yōu)化。基于SIMD的圖像編解碼庫本身也會在圖片預處理,尤其是在一些大圖縮放上有一些優(yōu)化,另外將一些預處理的歸一化過程(減均值、除方差等)合并到網(wǎng)絡模型的第一個卷積上,類似于BN的一個合并操作,減少CPU上的一些耗時。GPU模型簡化壓縮優(yōu)化。我們對模型的backbone和 neck部分進行一些通道數(shù)量的壓縮優(yōu)化,在保證性能沒有太多降低的情況下,提高優(yōu)化推理的速度。借鑒了業(yè)界比較通用的TensorRT推理引擎,TensorRT會做很多模型融合的操作,除了做一些通用的BN融合之外還會做一些更深層次的融合,如卷積,bias,relu操作等都可以合并到同一個OP中執(zhí)行, 因為對于一些簡單的操作,它的一個內(nèi)存提取耗時與計算的耗時是相當?shù)模钥梢园阉鼈兒喜⒌骄矸e結(jié)果存儲之前這樣的一個過程當中,減少一次顯存的訪問。TensorRT會根據(jù)當前部署的硬件資源去選擇最合適的OP實現(xiàn)方式,從而最大效率的利用顯卡的硬件資源。TensorRT提供的低精度推理方案,F(xiàn)p16和Int8來一步加速模型的效果。低精度推理對原始結(jié)果也會有一定的影響,所以需要在效果和速度上進行具體的實驗,進行權(quán)衡。系統(tǒng)優(yōu)化,模型輸入分辨率的調(diào)整,這個需要結(jié)合整體的一個性能進行調(diào)整,檢測階段和識別階段的輸入都可以進行相應的分辨率調(diào)整;圖片當中經(jīng)常會出現(xiàn)多條文本行,使用多batch方案提高整張圖片整體的推理效率。同時我們在優(yōu)化過程中發(fā)現(xiàn),GPU的整體利用率可以通過多實例的方案得到進一步的提升。3.?識別效果舉例
05
問答環(huán)節(jié)
Q:橫豎排的文字識別有什么區(qū)別?A:橫豎排的文字在排列上有一些差異,我們模型也會通過數(shù)據(jù)增強的方式來對模型識別能力進行補充;有幾種情況,一種是文字旋轉(zhuǎn)型的豎排,可以通過字條矯正的方式,把它變成橫向的文字排列;另外一種就是圖像中的文字本身排列就是豎向的,因為目前很多文字識別模塊都是通過生成數(shù)據(jù)來進行訓練的,所以針對豎排文字識別可以通過一些針對性的數(shù)據(jù)生成,相當于對文字進行一個90度的旋轉(zhuǎn)形成豎排文字來進行訓練,來補充模型的能力。Q:手寫體的識別對比于印刷體的識別,需要額外的做哪些工作?A:我們目前主要是通過數(shù)據(jù)增強的方式來進行手寫體的支持,主要還是通過數(shù)據(jù)的方式來進行模型能力的提升,現(xiàn)在都是進行一個統(tǒng)一的處理,印刷體和手寫體在識別流程上是一致的。在進行數(shù)據(jù)生成的時,首先需要真實場景下的一些手寫體的數(shù)據(jù),另外還需要一些類手寫體的一些字體,通過借鑒這些實現(xiàn)內(nèi)容的自動生成。Q:在系統(tǒng)的調(diào)優(yōu)階段對于batch size的優(yōu)化,詳細介紹下A:圖片當中通常會出現(xiàn)多條文本,此時對于文字識別模型,我們可以選擇同時輸入6條、8條或者更多的Batch Size實現(xiàn)一個批次的預測,這樣對于系統(tǒng)整體的吞吐率會有一個提升。由于多行文本中的每一個詞條的尺寸可能不一樣,我們需要做一個padding,把它們拼接成相同的長度。Q:數(shù)據(jù)集是自己做的嗎?A:數(shù)據(jù)集是自己做的,因為現(xiàn)在整體上來說,文字識別領域中業(yè)界公開的數(shù)據(jù)集還是比較小,包括像一些知名的比賽中,整體的數(shù)據(jù)量都不是特別多。所以我們肯定要基于一些業(yè)務場景做一些數(shù)據(jù)的收集,但文字識別階段,目前主要的方案還是通過數(shù)據(jù)生成的方式,來擴充模型的訓練樣本。Q:OCR未來的發(fā)展方向OCR未來的發(fā)展方向我覺得還是在當前的一些識別難點上,像現(xiàn)在比較關(guān)注的任意形狀的文本行識別,曲線文本,印章等這種大家比較關(guān)注的一些點。另外我覺得數(shù)據(jù)集的生成,或者是模擬真實場景的數(shù)據(jù)生成這種在工程實踐上也是有比較實際的意義。尤其是對于一些復雜背景,包括風格遷移的一些方案。Q:手寫體識別有什么好的方法?手寫體有一些背景,比如春聯(lián),繁體字對于這種識別有沒有什么好的辦法?A:由于我們目前是采用的是自然場景下的文字識別技術(shù),它本身就支持一些復雜背景的方案,它跟傳統(tǒng)的文檔類的OCR或者是一些票據(jù)、證件類的OCR相比,本身會對復雜背景會有一些魯棒性;復雜背景會增加識別的難度,模型現(xiàn)階段對于背景的魯棒性還是比較高的,像有一些銀行卡的識別,銀行卡本身背景也有一些比較復的圖案同時還有壓印、突起,光照影響等,像這種識別其實都是有比較好的方案。但是如果你的場景越固定,我們通過數(shù)據(jù)的支持,它的整體的識別效果就會越好。Q:對于手寫公式的識別A:手寫公式應該跟手寫體差不多,因為它整體的符號數(shù)還是比較限定的,是一個相對較小的集合。主要難度應該和手寫體字的難度是一樣的,手寫的潦草度和印刷體的一個差異。如果連筆太多的化,也可能存在一個比較大的識別難度。今天的分享就到這里,謝謝大家。分享嘉賓:





