OCR 技術在愛奇藝的應用實踐及演進
隨着人工智能的熱度上升,圖像識別這一細分領域也漸漸被人們所關注。在很多公司的業務中,有很多需要對圖片進行識別的需求。爲了幫助業務實現對這些圖片、文檔的識別和結構化,業界進行了一系列的實踐和探索,最終確定了一些可行的方法,總結了在實踐過程中可能遇到的問題和難點。
爲了更好地瞭解 OCR 技術在愛奇藝的應用實踐,最近,InfoQ“大咖說” 欄目邀請愛奇藝智能平臺部助理研究員——Harlon 進行了一場直播分享,結合目前的業務需求,爲我們陳述了愛奇藝在探索 OCR 技術發展過程中遇到的痛點和難點,以及識別技術的一些細節,以下是採訪實錄。
嘉賓:Harlon
InfoQ:您好,非常開心有機會採訪您,您方便簡單介紹下過去幾年 OCR 技術的整體發展嗎?大致可以從哪幾個維度來看?
Harlon:隨着互聯網的發展和智能設備的普及,圖像以及視頻的產生速度大大加快,圖像文字中包含的豐富的語義信息,也在人機交互中扮演着重要角色,從圖像中提取文字的技術,也就是 OCR 技術得到了越來越多的關注。隨着深度學習的發展,OCR 技術從基於傳統的圖像處理和機器學習轉到了以深度學習爲主,其主要包含如下兩個步驟:
一是文字檢測,用於檢測圖像中的文字位置,一般以矩形或四邊形來表示,區別於常規的物體檢測,文本行具有長短不一、長寬比例範圍大,而且方向性較強的特點,也較易受到複雜背景的影響;
二是文字識別,輸入是文本檢測得到的文本行圖像,輸出爲圖像對應的文本信息。傳統的文字識別方法可以分爲字符分割和單字符識別兩個步驟,現在的文本識別算法大都是基於序列到序列的網絡,一個網絡裏面可以同時進行分割和識別,這樣做的好處是大大減少了數據標註量。另外,由於同時訓練分割和識別算法,算法性能也得到了大幅提升,我們可以從以下幾個方面來看 OCR 技術的發展:
首先是文字檢測部分,借鑑物體檢測技術的發展,文字檢測技術也從檢測單行、較規則的文字發展到了檢測任意方向文本,典型算法包括:CTPN、EAST、PMTD、DB 等;文字檢測的方法主要分爲基於檢測框和基於 Mask 兩個大類,基於檢測框的文本檢測,其思路是先利用若干 Anchor 產生大量候選文本框,再經過 NMS 得到最終結果;基於 Mask 的文本檢測,其思路是通過分割網絡進行像素級別的語義分割,再通過後處理得到文本框,由於後處理比較複雜,這個步驟會直接影響基於 Mask 文本檢測算法的性能。
其次是文字識別,主要有兩類方法:一種是基於 CTC 的 CRNN;另一種是基於注意力機制的編碼器 - 解碼器結構,兩類方法的流程非常相似,主要包括圖像預處理、特徵提取、序列建模、字符預測四個流程。
具體來說,CRNN 採用的是 CNN 加 RNN 的結構來提取基本特徵,損失函數採用 CTC loss,CTC 最早應用在語音識別中,能夠在不分割輸入數據的條件下解決序列的預測問題,也就是輸入一串語音信號,不需要做分割就可以直接輸出語音信號對應的文本,CTC 最大的特點是輸入和輸出都是一個序列,移植到 OCR 領域以後,基於 CTC 的 CRNN 算法也取得了很好的效果。至於注意力機制模型,主要是編碼器 - 解碼器結構,文字識別算法解決的核心問題是將長度不匹配的圖像特徵和文本序列對應起來,編碼器 - 解碼器這種結構非常適用於解決這個問題,加入 Attention 模塊以後,可以自動尋找到需要預測的文本區域,將注意力集中在圖像中需要識別的字符附近,顯著提升模型準確性。
然後是端到端 OCR,上面講到的文本檢測和文本識別都是串行流程,也就是文本檢測完畢以後再進行文本識別。不同於這兩個步驟分開進行的模式,端到端 OCR 是將文本檢測和文本識別聯合起來訓練,共享特徵提取網絡,然後在訓練階段輸入訓練圖像,以及對應的文本框信息和文本內容,損失函數定義爲文本檢測和文本識別誤差的加權和,通過這種方式希望能達到聯合優化的目的,預測階段相當於少了一次特徵提取的操作,預測階段的資源開銷也會更少。從實際效果來看,由於兩個任務也就是檢測和識別的特性不同,整個端到端算法的訓練收斂難度會比較大。
最後就是基於 OCR 的信息提取技術,傳統的 OCR 技術只解決了從圖像中提取文字的需求,但是類似票據識別等場景,除了識別文字外,也需要識別文字之間的關係,判斷哪些文字屬於預打印的內容,哪些文字屬於填寫的內容,只有掌握了文字之間的對應關係,後續的業務才能順利開展,這種基於 OCR 的信息提取技術對 OCR 的業務應用起到了很大的推動作用,近年來的研究也是比較多的。
InfoQ:您方便聊聊目前 OCR 技術在工業界的主流應用有哪些?技術層面還存在哪些瓶頸?
Harlon:OCR 在工業界一直有很多應用場景,最著名的例子就是 LeCun 爲美國郵政系統設計的支票號碼識別算法,這個數據集後面演化成了 MNIST 公開數據集,可以說這是所有深度學習人員接觸到的最早示例,基本上所有框架都會拿該數據集作爲最初的學習。
早期,由於算法性能受限,OCR 主要是應用在特定場景下的文字識別,比如車牌識別、掃描文檔識別以及銀行卡卡號識別。整體來說場景是可控的,輸入的圖像質量相對來說也比較好。隨着硬件條件的提升以及算法的發展,現在的 OCR 技術越來越多被應用於像網絡圖片文字識別、自然場景文字識別等通用領域。
現在,OCR 技術在業界有了很多應用,包括在線視頻、在線教育以及智能交通分析等多個領域,只不過應用點可能並不相同,在線教育最核心的應用點是拍照搜題,拍照搜題的核心是需要 OCR 識別用戶算法的題目;對於在線視頻,因爲影視劇的視頻較多,需要識別視頻裏面的文字信息,提供給業務做應用。現在的 OCR 技術主要是根據具體任務設計的專用算法,對不同語種或者不同類型的文字識別效果差異很大,所以提升 OCR 技術的通用能力以及泛化能力是一個需要探索的問題。另外,像小樣本或者無監督條件下的 OCR 算法現在的研究也比較少。最後,利用 NLP 以及單字符標註信息提升 OCR 算法的整體性能也是一個沒有完全解決的問題。
InfoQ:過去一年,OCR 領域也出現了不少開源項目,對開發者選型而言,您認爲可以從哪幾個層面考慮?
Harlon:事實上,深度學習本身就有很多框架可以選擇,比如 PyTorch、Tensorflow 還有最近開源的 Paddle OCR。在 OCR 領域,同樣有很多開源項目可以選擇。對開發者而言,需要從自身需求出發進行選型,如果是科研目的,那麼 PyTorch、Tensorflow 更加適合,二者提供了衆多基礎模塊,還有很多項目及實踐經驗可以參考,便於大家復現論文,實踐新的思路;如果是其他目的,我覺得可以考慮 Paddle OCR 框架,因爲其提供了一整套 OCR 工具庫,比如仿真數據生成、模型訓練、測試以及模型調優等,包括最近又開源了一些 OCR 標註工具,提供了部署服務相關的接口,Paddle OCR 提供了很多經典算法的開源模型,工程人員可以快速實驗各種模型,並用自己的數據微調模型,非常利於模型快速選型。
另外,我覺得 Paddle OCR 框架還有兩個比較好的地方:一是該項目由百度開源,對中國的開發人員來說,直接用中文溝通更加便利;二是 Paddle OCR 有專門的人員負責更新文檔和代碼,用微信羣進行溝通,我覺得對於專業的 OCR 人員來說,這是一個不錯的選擇。
最後,不同的 OCR 模型有不同的特點,就選型而言,開發者需要明確分析自己的任務特點,只有搞清楚業務特點,才能找到最合適的算法。
InfoQ:Paddle OCR 也是一個非常輕量級的框架,實現這樣一個框架的難度大概是什麼?
Harlon:從算法角度來說,如果要實現一個輕量級的框架有很多手段,比如選擇一些輕量化的模型,另外可能針對模型裏面的具體層調小參數或者進行量化,這樣或許可以很輕易的得到一個輕量化的模型,但是怎麼讓輕量化的模型達到比較好的效果是一條比較漫長的道路。
InfoQ:您方便介紹下愛奇藝內部主要有哪些場景應用到了 OCR 技術?用來解決哪些問題?
Harlon:OCR 技術在愛奇藝內部得到了非常廣泛的應用,對愛奇藝來說,影視劇是核心資產,但視頻屬於非結構化數據,不利於應用,如何更好地利用視頻?爲此,我們上線了智能臺詞分析功能,該功能以 OCR 爲基礎,可以實時提取影視劇、綜藝等節目中的臺詞信息。
智能臺詞分析用於提取影視劇視頻中的臺詞信息。同時,會利用 NLP 算法處理識別出來的臺詞,將用戶可能感興趣的信息提取出來作爲標籤數據,這些標籤數據可以和其他視頻信息構成視頻的原始數據,然後提供給搜索或者推薦業務使用。
與此同時,我們還在擴大臺詞智能分析的業務範圍,比如提供曲目板識別,廣告權益識別、片尾檢測等功能。另外一個應用場景就是視頻文本 OCR,主要用於識別視頻中出現的英文、數字、繁體中文、簡體中文等文本,算法可以很好的適配複雜背景,精準識別視頻畫面中出現的關鍵文字,爲視頻分析提供更多數據。
除了上述兩大應用外,我們還有一些專用 OCR,用於識別身份證、銀行卡以及新聞標題等,這些 OCR 構成了我們的基本算法,被廣泛應用於各個業務,既能提高員工效率,也可以改善用戶體驗。
InfoQ:您方便聊聊愛奇藝是什麼時候開始打造 OCR 技術體系的?到現在經過了哪些階段,有哪些重要的時間節點?每個階段主要用於解決哪些問題?
Harlon:事實上,OCR 算法一直是愛奇藝算法體系中的重要一環,主要經歷了三個發展階段:第一個階段是基礎階段,主要完善 OCR 算法對基礎業務的支持,比如圖文分析、智能臺詞分析、新聞拆條等,這個階段我們開發了多種 OCR 基礎算法,提高編輯人員的效率。重要的時間點是 2017 年,這一年,我們結合愛奇藝自身影視劇庫存量較大的特點推出了業內第一個臺詞搜劇功能,實現的主要功能是用戶可輸入感興趣的臺詞信息搜索對應的視頻點位,該功能的推出極大豐富了用戶體驗,同時讓視頻搜索更加便捷。
第二個階段是發展階段,主要優化算法速度。隨着 OCR 業務的發展,我們整個後臺需要處理的視頻和圖像數據量成倍增長,OCR 算法開始出現瓶頸,主要體現在隨着數據量的增加,硬件資源消耗巨大,這個階段基於成本等各方考量,我們使用了多種方法優化算法性能,包括替換輕量化網絡、採用新的模型等,讓算法運行速度更快,資源消耗量更少;工程層面,我們同樣做了很多優化,包括優化算法的處理流程,合併冗餘步驟,加入更多進程...... 通過一系列優化,智能臺詞分析的性能大大提升,40 分鐘的影視劇視頻只需要 5 分鐘就可以完成臺詞識別,這個速度還是比較可觀的,同時大大降低了對硬件的依賴程度。
最後一個階段是優化階段,我們從各方面優化算法的性能指標,並且擴大應用範圍。橫向來看,我們擴大業務的支持範圍,挖掘更多業務的使用點,比如將智能臺詞分析服務從僅識別影視劇擴展到識別綜藝節目等。從實踐來看,這個階段爲業務方帶來了更多便利。
縱向來看,隨着場景的擴大以及業務的增長,算法需要更強的泛化能力,因爲業務增長以後,算法看到的數據類型越來越多樣,如果泛化性能不強,有可能就會出現很多 Bad Case。因此,我們後續開發了很多輔助算法,包括語種分類算法、豎向文字識別算法等,通過此豐富了整個 OCR 算法矩陣,並將相關算法集成到了愛奇藝的奇觀中,可以解決用戶不同層次獲取信息的需求,歡迎大家體驗。
InfoQ:在這個過程中,愛奇藝主要用到了哪些算法和模型?效果如何?
Harlon:我們會根據不同的應用場景使用不同的算法和模型,然後對模型結構進行優化和改進,文字檢測算法包括 CTPN、EAST、PMTD 等,CTPN 的特點是隻能檢測水平文字,而且對長文本和短文本都有很好的檢測效果,不容易發生長文本丟失的現象,特別適合於影視劇的臺詞檢測,但是 CTPN 對單個臺詞的檢測效果不太穩定,可能會存在漏檢的情況。
PMTD 其實是一個基於 Mask RCNN 的文本檢測方法,可以預測整個文本的 Mask,通過 Mask 推測包含文本的四邊形區域,這樣就可以兼容橫向、縱向、傾斜文本的檢測,適用範圍較廣,但是對密集傾斜文本會發生文本區域檢測混亂的情況。
DB 是去年推出的算法,基於分割檢測,它在論文中提出了一個叫做 DB 的模塊,也就是可微分模塊,通過該模塊替代分割的後處理部分,而且可以設定自適應閾值來提升網絡性能,因爲其把繁瑣的後處理直接用 DB 模塊來替代,相當於網絡直接可以運行,DB 算法在水平以及傾斜文本檢測上都可以達到很好的性能。
接下來介紹文字識別部分,現在主流的方法都是基於序列到序列的,比如 CRNN,或者基於注意力機制的編碼器 - 解碼器網絡,相比傳統的單字符識別算法,這兩種方法都是以文本行爲單位進行訓練,最大的特點就是不需要單字符的標註信息,可以大大提升標註效率,而且將字符識別與字符分割同時放在一個網絡中訓練,大大提升了算法性能。對於粘連情況比較嚴重的文本行,效果是非常好的。從實踐來看,以上兩種文本識別方法的效果是相當的,注意力機制模型的特點就是對英文、數字以及長文本的識別效果較好,CRNN 解碼很快且對中文識別效果較好。
InfoQ:我們都知道,識別率是衡量 OCR 識別是否精準的重要條件,你們是如何提升識別率的?其中的難點是什麼?目前的準確率是多少?
Harlon:首先介紹下 OCR 算法的整體評價指標:文字檢測算法使用的評價指標類似於物體檢測,根據 IOU 來判斷檢測框和標註框的重複程度得到召回率和準確率;文字識別算法使用的評價指標是整行識別率,也就是識別的文本串跟標註文本串完全一樣才認爲是正確的。
在算法研發的過程中,我們發現圖像中的文本樣式、字體、文本方向、語種、背景複雜多樣,這些都給 OCR 技術帶來了很大挑戰。此外,不同場景的文本特點不同,如果爲每個業務單獨開發一套算法,重複的工作量也非常大。基於此,我們構建了 OCR 解決方案,根據不同的業務特點進行微調,我們也配套開發了 OCR 技術模塊,比如文本仿真模塊,訓練、測試模塊以及數據清洗模塊。
針對不同的業務場景,我們會選擇合適的算法。以智能臺詞分析爲例,我們選擇的是對中文識別效果較好的 CRNN 模型。在影視劇特別是綜藝節目中,經常會出現不常見的字體及文字特效,比如《青春有你》、《熱血新說唱》等節目會使用活潑且有個性的字體,我們開發了文本仿真引擎用以模擬各種文本的特效,包括臺詞常見的陰影、描邊、發光體等效果,以及收集了 150 多種常用字體,用來生成各種樣式的仿真臺詞,最終生成了千萬級別的仿真數據用於強化模型的泛化能力。在下一階段的訓練中,我們又加入了一定量真實數據一起訓練,這樣得到的模型更加適用真實場景。最後,我們針對特殊情形做了很多優化,比如在雙語電影的臺詞識別方面,由於英文臺詞的字符數量比中文臺詞多很多,如果強行使用一個識別模型的話,整個模型解碼時對英文識別會出現預測長度偏小進而導致字符丟失的現象,針對這種情況,我們單獨開發了語種檢測算法,用於區分中文臺詞和英文臺詞,以及單獨的英文識別算法,這樣就可以保證整個臺詞識別算法的效果。
通過上述一系列優化,我們的臺詞智能分析服務在中文臺詞、英文臺詞上都得到了較優水平。同時,我們會根據算法的特點進行一些針對性優化,比如上述提到的 PMTD 算法,對比較密集的傾斜文本行檢測效果不太好,通過實驗發現這是由於生成的訓練數據不準確導致的,因爲傾斜的文本行雖然標註的時候是一個傾斜的四邊形,但是最後訓練的時候會轉換成矩形,導致面積擴大,如果傾斜行文本行過密,矩形區域裏面就會包含另外一個文本行,這樣的訓練效果是非常不好的,在這種情況下,我們通過限制傾斜文本行的長度以及對過長的傾斜文本行進行分段解決了這個問題,最後達到了比較好的效果。
InfoQ:接下來,愛奇藝還將做哪些事情提高 OCR 技術的整體效果?
Harlon:未來的規劃主要包括幾個方面:一是視頻中的文本識別和跟蹤,愛奇藝本身有大量的視頻數據,這些數據具有數據量大、時序性強的特點,如何在保證算法實時性的同時利用這些特點優化 OCR 算法的性能是值得關注的。
二是結合 NLP 技術優化整個 OCR 算法的性能。圖像中的大部分文字都有很強的語義信息,如何結合 NLP 優化 OCR 算法對易錯樣本的識別效果。
三是 OCR 算法移植到手機端。隨着愛奇藝業務的增長,整個 OCR 算法需要處理的數據量越來越大,如果將 OCR 算法移植到手機端,能緩解整個後臺服務的壓力,同時可以爲用戶帶來更好的體驗。
QA 部分
端到端的 OCR 框架有哪些注意事項?有什麼可以參考的嗎?
答:端到端的 OCR 框架,可以同時完成文字檢測和文字識別,需要注意:文字檢測和文字識別屬於兩個問題,訓練過程中,需要保證共享的特徵同時適用於兩個算法纔行,但是同時訓練這兩個任務,會導致 loss 震盪,整個網絡不收斂,因此一般的步驟是先訓練一個任務,穩定以後再把另一個任務加進去;參考:FOTS。
對於添加了水印或印章的圖片,是否有比較好的識別方式?
答:如果水印比較好去除,建議先去除水印,否則,可以生成一些帶水印或印章的仿真樣本,用於模型訓練,能加強模型對這種圖片的識別效果;
east 文本監測的優缺點有哪些?
答:優點:速度較快、支持任意方向文本檢測;缺點:相比最新的一些方法,性能有差距,對傾斜文字的檢測效果不太好
方便分享下模糊文本的識別嗎?
答:造成模糊樣本的原因有很多,比如本身的拍照環境較差導致樣本模糊等,可以用算法生成一部分模糊樣本,將其與清晰樣本結合起來進行訓練。需要注意的是模糊樣本的模糊程度,如果過於模糊可能文本信息已經沒有了,此時用來進行訓練可能就是髒數據了,這種情況是需要避免的。另外,模糊樣本和清晰樣本的比例需要掌握好,如果模糊樣本過多會影響模型對清晰樣本的識別效果。
從 0 到 1 搭建 OCR 有哪些坑可以繞開?
答:1)字符集:確定任務需要的字符集,生成仿真樣本時,查看字體是否包含所有需要的字符集,生成仿真樣本後,對樣本進行抽查;根據任務判斷字符集中是否需要加入空格這個字符;2)標註數據:根據任務需要確定標註規則,比如:基於單詞的檢測方法,需要將空格兩側的單詞分開標註;整行文字檢測方法,可以將包含空格的整行文字一起標註;3)優化方法:多嘗試優化方法,選擇對當前任務最優的方法;4)標註樣本數量:檢測算法對樣本的需求量較低,識別算法由於字符數較多,需要更多的樣本;
嘉賓介紹:
Harlon,愛奇藝智能平臺部助理研究員,來自愛奇藝智能平臺部 AI 服務組,從事 OCR 算法、視頻內容分析、智能審覈等研發工作。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/XShHrsashhAoOpjbwDmcsg