天天看點

OCR 101:你想要了解的都在這兒了開始值得注意的研究實際的例子代碼樣例

點選上方“AI公園”,關注公衆号,選擇加“星标“或“置頂”

因公衆号更改了推送規則,記得讀完點“在看”~下次AI公園的新文章就能及時出現在您的訂閱清單中

作者:Gidi Shperber

編譯:ronghuaiyang

導讀

OCR中的研究,工具和挑戰,都在這兒了。

OCR 101:你想要了解的都在這兒了開始值得注意的研究實際的例子代碼樣例

介紹

我喜歡OCR(光學字元識别)。對我來說,它代表了資料科學,尤其是計算機視覺的真正挑戰。這是一個現實世界的問題,它有很多方法,包括計算機視覺,pipeline調整,甚至一些自然語言處理。它也需要大量的工程設計。它概括了資料科學中的許多問題:破壞了強大的基準,過分強調方法的複雜性和“新穎性”,而不是關注現實世界的進步。

兩年前,我發表了一篇關于OCR的文章。像我的大多數文章一樣,這篇文章意在回顧這個領域的研究和實踐,闡明你能做什麼,不能做什麼,如何做,為什麼做,并提供實用的例子。

它的本質是,當時的深度學習OCR是好的,但還不夠好。現在,OCR 要好得多。但還是不太好。

但是,考慮到深度學習領域的活力,在我看來,它需要一個更新,甚至是完全重寫。就是這樣。如果你來到這裡,你可能對OCR感興趣。你要麼是一名學生,要麼是一名想要研究這個領域的研究員,要麼你有商業興趣。不管怎樣,這篇文章應該能讓你跟上進度。

開始

首先,讓我們理清我們的概念:

  • OCR - 光學字元識别。這是一個常見的術語,主要指文檔上的結構化文本。
  • STR - 場景文本識别。大多指的是在野外場景中更具有挑戰性的文本。為了簡單起見,我們将它們都稱為OCR。

如前所述,OCR描述了深度學習和一般資料科學領域的許多成就,但也面臨着挑戰。一方面,這是我們之前的巨大進步。同樣是令人印象深刻的同比進步。然而,OCR仍然沒有解決。

還有一些非常惱人的失敗案例,原因各不相同,大部分都是源于标準深度學習的根本原因 —— 缺乏泛化、易受噪聲影響等。是以,即使模型可以處理許多情況(不同的字型、方向、角度、曲線、背景),也有一些偏差是不能工作的(隻要它們不是手動引入到訓練集中):不流行的字型、符号、背景等等。

OCR 101:你想要了解的都在這兒了開始值得注意的研究實際的例子代碼樣例

任意形狀的文本 — 來自ICDAR 2019資料集

此外,還出現了一個偉大而有用的庫Easy OCR:https://github.com/JaidedAI/EasyOCR,它的目标是使最先進的OCR方法在開源中易于通路和使用。作為額外的好處,這個庫還解決了OCR中的多語言問題(目前包括大約80種語言和更多的語言)和模型的速度(仍處于早期階段)。這個庫并不完美,但它确實是一個很好的解決方案。稍後再詳細介紹。

是以,廢話不多說,讓我們看一下OCR目前的狀态。

值得注意的研究

一如既往,資料科學任務的邊界被研究擴充,而實踐在創新方面落後,但在穩健性方面領先。

在我之前的文章中,我回顧了3種方:

  1. 當時流行的經典計算機視覺方法
  2. 一般深度學習方法,檢測和識别,效率高,易于使用。
  3. 特定的深度學習方法,如CRNN和STN能取得良好的結果,但“太新,不能信任”。

在這篇文章中,我們可以說,特定的深度學習方法已經成熟,并且在研究和實踐中都占據主導地位。

任務

在上一篇文章中,我們使用了一些例子,它們在目前狀态下看起來可能很簡單:車牌識别,驗證碼識别等等。今天的模型更有效,我們可以讨論更困難的任務,例如:

  • 解析截圖
  • 解析商業手冊
  • 數字媒體解析
  • 街道文本檢測

Pipeline

在OCR上應用标準的目标檢測和分割方法後,方法開始變得更加具體,并針對文本屬性:

  • 文本是同構的,文本的每個子部分仍然是文本
  • 文本可能在不同的層次上被檢測到,字元,單詞,句子,段落等。

是以,現代的OCR方法“隔離”特定的文本特征,并使用不同模型的“pipeline”來處理它們。

在這裡,我們将專注于一個特定的設定,實際上是一個模型pipeline,除了視覺模型(特征提取器),還有一些更有用的元件:

OCR 101:你想要了解的都在這兒了開始值得注意的研究實際的例子代碼樣例

Pipeline的圖

  1. Pipeline的第一個部分是文本檢測。顯然,如果要使用不同的部分的文本,在識别實際字元之前檢測文本的位置可能是個好主意。這部分是與其他部分分開訓練的。
  2. Pipeline的第二個部分是可選的:轉換層。它的目标是處理各種扭曲的文本,并将其轉換為更“正常”的格式(參見pipeline圖)。
  3. 第三部分是視覺特征提取器,它可以是你最喜歡的深度模型。
  4. Pipeline的第四個部分是RNN,它的目的是學習重複的文本序列。
  5. 第五部分也就是最後一部分是CTC的損失。最近的文章用注意機制取代了它。

該pipeline除了檢測部分外,大多是端到端訓練,以減少複雜性。

Pipeline的問題

Pipeline中有不同的元件是很好的,但是它有一些缺點。每個元件都有它自己的偏差和超參數集,這導緻了另一個層次的複雜性。

資料集

衆所周知,所有好的資料科學工作的基礎都是資料集,而在OCR中,資料集是至關重要的:選擇的訓練和測試資料集對結果有重要的影響。多年來,OCR任務在十幾種不同的資料集中進行了磨砺。然而,它們中的大多數并沒有包含超過幾千張帶标注的圖像,這對于擴充來說似乎不夠。另一方面,OCR任務是最容易使用合成資料的任務之一。

讓我們看看有哪些重要的資料集可用:

“真實” 資料集

一些資料集利用了谷歌街景。這些資料集可以被劃分為規則或不規則(扭曲的、有角度的、圓角的)文本。

OCR 101:你想要了解的都在這兒了開始值得注意的研究實際的例子代碼樣例

SVHN — 街景編号,我們在上一篇文章的例子中使用過。

SVT — 街景文字,文字圖像來自谷歌街景。

ICDAR (2003, 2013,2015, 2019) — 為ICDAR和競賽建立的一些資料集,具有不同的重點。例如,2019年的資料集被稱為“任意形狀的文本”,這意味着,無論它變得多麼不規則都有可能。

生成資料集

目前流行的合成資料集有兩種,它們在大多數OCR工作中被使用。不一緻的使用使得作品之間的比較具有挑戰性。

MJ Synth — 包括相對簡單的單詞組成。資料集本身包括~9M的圖像。

Synth text — 具有更複雜的機制,它在第一階段應用分割和圖像深度估計,然後在推斷的表面上“種出”文本。資料集本身包含約5.5M的圖像。

OCR 101:你想要了解的都在這兒了開始值得注意的研究實際的例子代碼樣例

DALL-E — 這有點不确定,但是文本圖像生成(可能還有OCR)的未來似乎更加趨向于無監督。

OCR 101:你想要了解的都在這兒了開始值得注意的研究實際的例子代碼樣例

這些合成資料集還擅長生成不同的語言,甚至是比較難的語言,比如漢語、希伯來語和阿拉伯語。

度量

在讨論具體的研究論文之前,我們需要确定成功的标準。顯然有不止一種選擇。

首先,讓我們考慮一下文本檢測的方式,它可以使用标準的目标檢測名額,如平均平均精度,甚至标準精度和召回。

現在到了有趣的部分:識别。有兩個主要的名額:單詞級别的準确性和字元級别的準确性。特定的任務可能需要更高的準确性(例如文本塊的準确性)。目前最先進的方法在具有挑戰性的資料集上顯示了80%的準确性(我們将在後面讨論)。

字元級别本身用“歸一化編輯距離”來封裝,該距離度量單詞之間相似字元的比例。

研究論文

在這篇文章中,我們關注的是最佳實踐,而不是構想。我建議你去看看篇綜述:https://arxiv.org/pdf/1811.04256.pdf,你會發現有很多方法讓你很難做出選擇。

場景文本識别的問題是什麼?

這個工作名字很不一樣,文章https://arxiv.org/abs/1904.01906本身也很出色。這是一種前瞻性的調研,内容有:

  • 定義統一的訓練和測試集(經過一些優化後)。
  • 在資料集上測試基準的最佳實踐。
  • 對方法進行邏輯結構的整理,并“幫助”讀者了解使用什麼方法。
OCR 101:你想要了解的都在這兒了開始值得注意的研究實際的例子代碼樣例

固定測試集上OCR pipeline的分類

是以本文的重點是:

  1. 對于OCR來說,訓練資料集(可能被認為是“最好的”)是兩個合成資料集:MJ和Synthtext。此外,重要的特征不是數量而是多樣性(減少資料量不會對模型的性能造成太大的影響,但删除一個資料集卻會造成太大的影響)
  2. 測試資料集約為5個真實世界資料集。
  3. 論文論證了随着每次pipeline的更新,結果逐漸改善。最顯著的改進是從VGG到ResNet特征提取器的改動,精度從60%提高到80%。RNN和歸一化的補充将模型推高到了83%。CTC到注意力更新增加了1%的準确性,但推理時間增加了三倍。
OCR 101:你想要了解的都在這兒了開始值得注意的研究實際的例子代碼樣例

文本檢測

在本文的大部分内容中,我們将讨論文本識别,但你可能還記得,pipeline的第一部分是文本檢測。實作目前這一代的文本檢測模型有點棘手。以前,文本檢測作為目标檢測的一個分支。然而,目标檢測有一些設定是通用的目标,如汽車,人臉等。當引入文本檢測時,需要進行一些重要的更新。

其實質是文本既具有同質性,又具有局部性。這意味着,一方面,文本的每個部分都是文本本身,另一方面,文本的子集應該統一到更大的類别上(如把字元統一為單詞)。是以,基于分割的方法比基于目标檢測的方法更适合于文本檢測。

CRAFT

我們最喜歡的目标檢測方法被稱為CRAFT —  Character Region Awareness for Text Detection,它也被內建到easy OCR中。該方法應用了一個簡單的分割網絡,很好地使用了真實圖像和合成圖像,以及字元級和單詞級的标注。

OCR 101:你想要了解的都在這兒了開始值得注意的研究實際的例子代碼樣例

CRAFT模型概要

該模型在P和R上的h均值約為80%,在大多數資料集上也有很好的分詞效果,使模型的識别更加容易。

實際的例子

我們已經到了實際應用的階段。你應該用什麼?是以我們已經在前面回答了這個問題(Easy OCR…),但是讓我們檢視一些流行的解決方案。

開源

需要注意的一件非常重要的事情是,盡管OCR受到學術界缺乏健壯性的影響,但它卻享受着開源軟體的繁榮,它允許研究人員和實踐者在彼此的工作基礎上進行建構。以前的開源工具(如Tesseract,見下文)在資料收集和從頭開始的開發中遇到了困難。最近的庫,比如Easy OCR,通過一組建構塊,從資料生成到所有pipeline模型上可以有更多的調整。

工具

Tesseract

在很長一段時間裡,Tesseract OCR是領先的開源OCR工具(不考慮偶爾與論文相關的庫)。然而,這個工具是作為一個經典的計算機視覺工具建構的,并沒有很好地過渡到深度學習。

APIs

OCR是大型雲提供商谷歌、亞馬遜和微軟的一些早期計算機視覺API。這些API并不共享它們的能力基準,是以測試成為了我們的責任。

Easy OCR

在某種程度上,Easy OCR包是這篇文章的驅動。從不同的建構塊建構一個開源的、最先進的工具的能力是很厲害的。

下面是它的工作原理:

  1. 使用MJ-Synth包生成資料。
  2. 用于檢測的CRAFT模型(見上圖)。
  3. 根據“what is wrong”的論文(見上文)訓練一個調整後的pipeline,用于文本識别。
  4. 其他優化。
  5. 多語言:如上所述,OCR包含一些NLP元素。是以,處理不同的語言有不同之處,但我們也可以從工藝模型(可能還有其他檢測模型)的多語言中受益。識别模型是特定于語言的,但訓練過程是相同的。

最後一個問題是性能,這使得它在這個階段成為“go to OCR tech” 。你可以從下面看到,它們甚至比付費API結果還要好。

在Easy OCR中需要改進的一點是調整能力:雖然語言選擇很容易,但是可以根據不同的目的改變模型和再訓練。在下一篇文章中,我們将展示如何做到這一點。

OCR 101:你想要了解的都在這兒了開始值得注意的研究實際的例子代碼樣例

運作時間怎麼樣?

OCR的推斷可能會很慢,這并不奇怪。檢測模型是一個标準的深度學習模型,在GPU上運作約1秒(每張圖像),而識别模型需要一遍又一遍的運作檢測。在GPU上,一個包含許多目标的圖像可能需要幾十秒,更不用說CPU了。如果你想在你的手機或PC應用程式上運作OCR,使用較弱的硬體呢?

Easy OCR可以讓你學到:首先,這個庫引入了一些技巧,使推理更快(例如更緊湊的圖像切片形狀用于目辨別别)。此外,由于是子產品化的,你可以(目前需要一些代碼調整)內建你自己的模型,這樣就可以更小更快。

代碼樣例

是以,在讨論了不同的包和模型之後,是時候見證明際的結果了。這個notebook:https://colab.research.google.com/drive/1kNwHLmAtvwQjesqNZ9BenzRzXT9_S80W嘗試了Easy OCR vs Google OCR vs Tesseract的對比,我選擇了2張圖像:

OCR 101:你想要了解的都在這兒了開始值得注意的研究實際的例子代碼樣例
OCR 101:你想要了解的都在這兒了開始值得注意的研究實際的例子代碼樣例

一種是常見的OCR case —— 來自文檔的标準結構化文本,另一種是具有挑戰性的書籍封面集合:多種字型、背景、朝向(不是很多)等等。

我們将嘗試三種不同的方法:Easy OCR、Google OCR API(在大型技術雲API中被認為是最好的)和古老的Tesseract。

PDF

OCR 101:你想要了解的都在這兒了開始值得注意的研究實際的例子代碼樣例

在這類文本上,Tesseract和Google OCR的性能是完美的。這是有意義的,因為Google OCR可能在某種程度上基于Tesseract。

注意Google OCR對于這種文本有一個特殊的模式 — DOCUMENT_TEXT_DETECTION,應該用這個,而不是标準的TEXT_DETECTION。

Easy OCR的準确率約為95%。

有挑戰的圖像

OCR 101:你想要了解的都在這兒了開始值得注意的研究實際的例子代碼樣例

左:Google OCR,右:Easy OCR

總體而言,Easy OCR效果最好。具體來說,檢測部分捕獲了大約80%的目标,包括非常具有挑戰性的對角線目标。

Google OCR更糟,大約60%。

在識别方面,他們在字元級别上的識别率約為70%,這使得他們在單詞或書的級别上識别率不高。看起來,Google OCR在單本書上沒有100%正确的,而Easy OCR有一些可以。

我注意到的另外一件事是,Easy OCR在字元級别上表現更好,Google OCR在單詞級别上更好 —— 這讓我認為它可能在背景使用了字典。

OCR 101:你想要了解的都在這兒了開始值得注意的研究實際的例子代碼樣例

—END—

英文原文:https://towardsdatascience.com/ocr-101-all-you-need-to-know-e6a5c5d5875b

OCR 101:你想要了解的都在這兒了開始值得注意的研究實際的例子代碼樣例

請長按或掃描二維碼關注本公衆号

喜歡的話,請給我個在看吧!