作為深度學(xué)習(xí)在OCR領(lǐng)域的應(yīng)用探索,我們微信模式識別中心與騰訊視頻合作完成了視頻字幕的自動(dòng)識別。在此記錄若干實(shí)踐經(jīng)驗(yàn),與大家分享探討。 研究背景 隨著便攜式拍攝設(shè)備的普及以及自媒體、網(wǎng)絡(luò)直播平臺(tái)的興起,數(shù)字視頻迎來了爆炸式的增長。視頻的有效編目和檢索成為迫在眉睫的需求。然而,視頻來源多種多樣,很多并不具備規(guī)范化的描述信息(比如字幕文件)?;诩兇獾?span>圖像識別技術(shù)理解視頻內(nèi)容需要跨越 圖像到語義理解的鴻溝,目前的技術(shù)尚不完善。另一方面,視頻中的字幕往往攜帶了非常精準(zhǔn)關(guān)鍵的描述信息,從識別字幕的角度去理解視頻內(nèi)容成為了相對可行的途徑。 識別字幕文本通常需要兩個(gè)步驟 字幕定位 文本識別 字幕定位 | 即找出字幕在視頻幀中所處的位置,通常字幕呈水平或豎直排列,定位的結(jié)果可以采用最小外接框來表示,如圖1所示。 字幕文本識別 | 即通過提取字幕區(qū)域的圖像特征,識別其中的文字,最終輸出文本串。 圖1:視頻字幕識別的一般流程 技術(shù)路線 字幕定位 字幕定位需要區(qū)分字幕區(qū)域和背景區(qū)域,有效的區(qū)分特征包括以下幾點(diǎn): ① 字幕的顏色、字體較為規(guī)整,且與背景有較為明顯的顏色差異; ② 字幕區(qū)域的筆畫豐富,角點(diǎn)和邊緣特征比較明顯; ③ 字幕中字符間距固定,排版多沿水平或豎直方向; ④同一視頻中字幕出現(xiàn)的位置較為固定,且同一段字幕一般會(huì)停留若干秒的時(shí)間。 這其中,前三點(diǎn)是字幕外觀特征,第四點(diǎn)是時(shí)間冗余性的特征。利用這些特征,一種可行的字幕定位方案如下: 圖2:基于邊緣密度的字幕定位 首先 | 對于視頻幀灰度圖像進(jìn)行邊緣檢測,得到邊緣圖。 然后 | 在邊緣圖上分別進(jìn)行水平和豎直方向的投影分析,通過投影直方圖的分布,大致確定字幕的候選區(qū)域。如果存在多個(gè)候選區(qū)域,則根據(jù)字幕區(qū)域的尺寸和寬高比范圍濾除不合理的檢測結(jié)果。 最后 | 通過多幀檢測結(jié)果對比融合,進(jìn)一步去除不穩(wěn)定的檢測區(qū)域。這樣,基本可以得到可信的檢測結(jié)果。 在某些復(fù)雜場景下,上述方法檢測的區(qū)域可能會(huì)存在字幕邊界檢測不準(zhǔn)的情況,尤其是垂直與字幕方向的兩端邊界。這時(shí),可以進(jìn)一步借助連通域分析的方法,求出字幕所在行區(qū)域的連通域,通過連通域的顏色、排列規(guī)整性來微調(diào)檢測結(jié)果。 字幕文本識別 字幕文本識別通常采用的方法是首先根據(jù)行區(qū)域內(nèi)的灰度直方圖投影,切分單字區(qū)域,然后針對每個(gè)單字區(qū)域進(jìn)行灰度圖像歸一化、提取梯度特征、多模版匹配和MCE(最小分類誤差)分類。然而這種傳統(tǒng)的基于特征工程的分類識別方法難以應(yīng)對背景紋理復(fù)雜,以及視頻本身的噪聲和低分辨率等問題。 一種改進(jìn)的思路是采用基于深度學(xué)習(xí)的端到端的串識別方案:CRNN (Convolutional Recurrent Neural Network)。其方法流程如圖3所示: 圖3:CRNN實(shí)現(xiàn)end-to-end word recognition 首先 | 輸入高度固定、寬度不限的單詞圖像(無需單字區(qū)域信息),在訓(xùn)練過程中,將圖像統(tǒng)一歸一化到32*100; 然后 | 通過CNN層提取圖像特征,利用Map-to-Sequence形成特征向量,輸出為的feature map。這里,和與輸入圖像的尺寸成比例相關(guān)。論文中,feature map的尺寸為:。這相當(dāng)于對圖像進(jìn)行了過切分,將其劃分為26個(gè)條狀區(qū)域,每個(gè)區(qū)域用512維的特征來表示。其中,26被認(rèn)為是英文單詞的長度上限。值得一提的是,由于卷積性質(zhì),這里的條狀區(qū)域是“軟邊界”且存在交疊的,其寬度對應(yīng)最后一層卷積的感受野。 接著 | 通過RNN層提取條狀區(qū)域的上下文特征,得到類別概率分布。這里采用的是雙層雙向的LSTM,LSTM的單元個(gè)數(shù)與一致。RNN的輸出為的概率矩陣,其中,對應(yīng)于類別個(gè)數(shù),考慮26個(gè)英文字母+10個(gè)數(shù)字+1個(gè)負(fù)類(對應(yīng)于字母之間的模糊地帶),類別個(gè)數(shù)取37即可。 最后 | 通過CTC層將概率矩陣轉(zhuǎn)化為對應(yīng)某個(gè)字符串的概率輸出。CTC層本身沒有參數(shù),它利用一種前向后向算法求解最優(yōu)的label序列,使得理論上龐大的窮舉計(jì)算成為可能。 從上面的分析可以看出,CRNN的亮點(diǎn)主要在于:將切分和識別合并為一個(gè)模塊,避免了誤差累積;可以端到端訓(xùn)練。在我們前期的實(shí)踐中,發(fā)現(xiàn)其性能比傳統(tǒng)方法的確有明顯提升,主要表現(xiàn)為對于藝術(shù)字體、手寫字體等切分困難情況優(yōu)異的識別性能。 但是,針對實(shí)際應(yīng)用場景的分析讓我們最終放棄了這個(gè)方案,原因有二: 時(shí)效 | 基于我們在英文單詞上面的實(shí)驗(yàn)對比,CRNN的耗時(shí)約為傳統(tǒng)方法的2~3倍,不能滿足視頻處理的實(shí)時(shí)性要求; 性能 | CRNN擅長處理難以切分的字符串,而字幕文本間距和字體均較為規(guī)整,很少出現(xiàn)字間粘連的情況,所以并不能體現(xiàn)CRNN的優(yōu)勢。 綜上考慮,我們最終采用筆畫響應(yīng)加投影統(tǒng)計(jì)方法進(jìn)行切分,而在單字識別環(huán)節(jié)采用CNN,提升復(fù)雜場景下的識別性能。下面簡單介紹該流程: 切分環(huán)節(jié)包括三個(gè)步驟: ① 求取字幕區(qū)域圖像的筆畫響應(yīng)圖; ② 統(tǒng)計(jì)筆畫響應(yīng)圖水平方向的灰度投影直方圖; ③ 根據(jù)字幕區(qū)域的高度預(yù)估單個(gè)字符的寬度,并以此為依據(jù),在投影直方圖上尋找一系列最優(yōu)切點(diǎn)。 圖4:字幕區(qū)域的切分 切分環(huán)節(jié)給出了單個(gè)字符區(qū)域,針對該區(qū)域,采用CNN模型提取特征來進(jìn)行單字識別。這里需要考慮兩點(diǎn): 模型選擇 | 經(jīng)過實(shí)驗(yàn),包含3~5層卷積-池化單元的簡單CNN模型即可將傳統(tǒng)識別方法的性能 提高10個(gè)百分點(diǎn)左右。當(dāng)然,層次更深的網(wǎng)絡(luò),如resnet,會(huì)進(jìn)一步提升性能。實(shí)用場景下,模型選擇需要根據(jù)需求在速度和性能之間進(jìn)行權(quán)衡。 數(shù)據(jù)來源 | 基于深度學(xué)習(xí)的方法,性能關(guān)鍵在于海量可靠的訓(xùn)練樣本集。在訓(xùn)練過程中,我們采用的樣本集在百萬量級,而這些樣本僅靠人工搜集和標(biāo)注顯然是不現(xiàn)實(shí)的。所以,在深度學(xué)習(xí)的多次應(yīng)用中,我們均采用了合成樣本訓(xùn)練,實(shí)際樣本驗(yàn)證的模式,并證明了其可行性。 以合成字幕文本為例:我們通過分析字幕文件的格式,將待生成的文本寫入字幕文件,通過播放視頻時(shí)自動(dòng)載入字幕,將文字疊加到視頻上面。這樣,可以同時(shí)完成數(shù)據(jù)的生成和標(biāo)注。我們還根據(jù)需要定制了不同字體,添加了陰影、模糊等附加效果。這樣,理論上我們就可以得到無限多的合成樣本了。 圖5:字幕文字樣本的合成 雖然識別模塊的性能強(qiáng)悍,但是對于形似字難免仍然存在識別錯(cuò)誤的情況。這時(shí)就要發(fā)揮語言模型的威力了。語言模型又稱為n-gram模型,通過統(tǒng)計(jì)詞庫中字的同現(xiàn)概率,可以確定哪個(gè)字序列出現(xiàn)的可能性更大。N-gram中的n代表統(tǒng)計(jì)的詞(字)序列的長度,n越大,模型越復(fù)雜。在字幕識別系統(tǒng)中,我們用了最簡單的2-gram模型,將最終的識別正確率又提升了2個(gè)百分點(diǎn)。 圖6:基于語言模型的結(jié)果校正 小結(jié) 我們采用上述系統(tǒng)在實(shí)際視頻樣本上進(jìn)行測試,單字識別準(zhǔn)確率達(dá)到99%,CPU上單字識別耗時(shí)2ms,基本達(dá)到實(shí)用需求。作為對于深度學(xué)習(xí)方法應(yīng)用在實(shí)際業(yè)務(wù)中的一次粗淺嘗試,我們有兩點(diǎn)心得: ① 關(guān)于方法選擇,要從問題出發(fā),具體分析難點(diǎn)在哪里,選擇最簡單有效的方法,避免貪大求新,本末倒置; ② 關(guān)于數(shù)據(jù)合成,合成數(shù)據(jù)用于訓(xùn)練,實(shí)際數(shù)據(jù)用于微調(diào)和測試,可謂是訓(xùn)練深度學(xué)習(xí)網(wǎng)絡(luò)性價(jià)比最高的方式。當(dāng)然,不需要考慮時(shí)間人力消耗的土豪隨意。在操作過程中,一定要注意保持合成樣本和實(shí)際樣本盡量相似,可以采用多次驗(yàn)證調(diào)整,選擇最佳的合成方法。 本文作者 | 麻文華 騰訊高級工程師 編輯 | Coding小妹 歡迎有興趣的小伙伴微信關(guān)注“騰訊課堂”(微信號:tencent-class)收獲更多福利~ |
|