數(shù)平精準推薦|OCR技術之系統(tǒng)篇-創(chuàng)新互聯(lián)

導語:如果說算法和數(shù)據(jù)是跑車的發(fā)動機和汽油,那么系統(tǒng)則是變速箱,穩(wěn)定而靈活的變速箱,是圖像識別服務向前推進的基礎。算法、數(shù)據(jù)、系統(tǒng)三位一體,隨著算法的快速發(fā)展和數(shù)據(jù)的日益積累,系統(tǒng)也在高效而穩(wěn)定地升級。

成都創(chuàng)新互聯(lián)公司擁有一支富有激情的企業(yè)網站制作團隊,在互聯(lián)網網站建設行業(yè)深耕10余年,專業(yè)且經驗豐富。10余年網站優(yōu)化營銷經驗,我們已為成百上千中小企業(yè)提供了成都網站設計、網站建設解決方案,按需設計,設計滿意,售后服務無憂。所有客戶皆提供一年免費網站維護!

一、背景介紹

前面的系列文章分別介紹了算法和數(shù)據(jù),如果說算法和數(shù)據(jù)是跑車的發(fā)動機和汽油,那么系統(tǒng)則是變速箱,穩(wěn)定而靈活的變速箱,是圖像識別服務向前推進的基礎。算法、數(shù)據(jù)、系統(tǒng)三位一體,組合成完整的OCR在線服務。伴隨著算法的升級和業(yè)務的持續(xù)接入,系統(tǒng)也經歷了從單機版升級到分布式版本;從為了每個算法定制系統(tǒng)模塊,到分離框架和算法邏輯,提高算法的運行效率和模塊的可重用性;從單一的運行環(huán)境,升級到CPU/GPU異構并行。除了一般分布式系統(tǒng)所需要提供的功能,我們還結合算法和運維特性,增加了單點熱更新和集群快照等特性。


二、我們面臨的挑戰(zhàn)

圖像識別服務框架作為一個提供在線服務的系統(tǒng),既面臨一般的業(yè)務系統(tǒng)或平臺所面臨的挑戰(zhàn),也面臨作為算法系統(tǒng),需要支撐復雜算法和業(yè)務的挑戰(zhàn),主要表現(xiàn)在以下幾點:


1.高性能與高可靠

任何在線系統(tǒng)都面臨性能和可靠性的挑戰(zhàn)。在我們系統(tǒng)中,圖像識別服務作為在線服務,需要能夠迅速響應并返回,并且不管在框架層還是算法層,都要保證高可用性。

2.系統(tǒng)解耦&高可擴展性

作為一個分布式的算法系統(tǒng),算法模塊與框架的解耦,可以使算法與后臺人員更高效的同步開發(fā),分別對算法與框架進行更新迭代。而高可擴展性,既要求框架在集群上支持資源可擴展,又要求做到單機算法的迅速接入與替換。

3.復雜業(yè)務與算法的支撐

隨著業(yè)務的持續(xù)接入和算法的復雜化,需要在框架層靈活的支撐算法,高效的算法模塊重用以及迅速適配新算法并接入新業(yè)務。

4.不同運行環(huán)境的支持

算法系統(tǒng),尤其是圖像識別算法系統(tǒng),運行環(huán)境包括CPU與GPU,框架除了要支持不同環(huán)境的高效運行,也要支持不同環(huán)節(jié)運行在不同硬件環(huán)境,以保證資源合理高效的使用。

三、我們的解決方案

圖像識別從算法研究、模型訓練到規(guī)?;奶峁┓?,需要處理的流程比較多,我們將開發(fā)階段主要分為如下兩個階段:


算法研究&模型訓練:

算法人員進行算法研究、模型訓練,以及業(yè)務對接。算法無需關心框架以及系統(tǒng)的調度,只需輸出單個模塊的算法SO和訓練好的模型文件。

框架開發(fā)&算法集成:

后臺開發(fā)人員進行服務框架的開發(fā)及算法SO的集成運行,即把算法研究人員研究好的算法及模型文件集成到服務框架中,提供穩(wěn)定的在線圖像識別服務。

接下來將重點介紹系統(tǒng)的設計和實現(xiàn)。

四、圖像識別服務框架

4.1 系統(tǒng)架構

框架層使用Java編碼,算法層采用插件化設計,可以加載jar包、so或者其他腳本,這是一個多語言的混編系統(tǒng)。圖像識別算法一般都是計算密集型,并且一部分需要運行在GPU上,所以在算法層,我們使用CUDA C++編寫so,使用JNI掛載so進行算法的執(zhí)行和調度。如圖1,架構上主要分為三層:接入層、框架層、算法層,再加上評測系統(tǒng)、存儲系統(tǒng)、監(jiān)控告警系統(tǒng)、日志系統(tǒng)等周邊系統(tǒng)構成一套完整的圖像識別服務系統(tǒng)。

數(shù)平精準推薦 | OCR技術之系統(tǒng)篇

圖1  圖像識別服務框架系統(tǒng)構架圖

接入層:包括協(xié)議轉換、參數(shù)輸配和結果適配等

框架層:圖像識別服務運行的系統(tǒng)框架,加載運行算法SO,提供穩(wěn)定的識別服務,包括

  • Master:接收接入層的請求,進行請求拆分、請求調度、結果合并等

  • Worker:實際執(zhí)行算法的進程載體,主要包含算法SO/模型的加載、更新,進行算法的執(zhí)行

  • Zookeeper:存儲worker心跳信息、算法映射關系、算法執(zhí)行計劃、算法靜態(tài)/動態(tài)快照信息等

  • ConfigServer:監(jiān)聽worker心跳并實時更新動態(tài)動態(tài)路由表,觸發(fā)master更新路由規(guī)則及連接池


算法層:算法人員提供各種算法模型及算法so

周邊系統(tǒng)

  • 評測系統(tǒng):提供版本評測功能

  • 存儲系統(tǒng):非敏感圖片及badcase存儲

  • 監(jiān)控告警:監(jiān)控服務的運行狀態(tài),在異常時進行告警

  • 日志系統(tǒng):請求日志的存儲,為問題的跟蹤排查提供依據(jù)框架運行時


4.2 系統(tǒng)運行態(tài)

本節(jié)將結合實際的OCR預測請求剖析框架的運行態(tài)。

1)   一個OCR識別實例

如圖2,我們以STR(Scene Text Recognition,場景文字識別)為例,一個典型的使用場景為廣告圖片素材理解。在任務中,我們將識別圖片中文字,并給出具體坐標。

數(shù)平精準推薦 | OCR技術之系統(tǒng)篇

圖2  一個OCR識別實例

2)  系統(tǒng)運行態(tài)

如圖3,我們詳細剖析上述實例在框架中的運行過程

數(shù)平精準推薦 | OCR技術之系統(tǒng)篇

 圖3 系統(tǒng)運行態(tài)


1. 業(yè)務側的請求攜帶圖片內容(或圖片URL)、bid(標識不同的業(yè)務)及tid(標識不同算法大類)。

2.  在master節(jié)點找到對應的算法,然后找到相應執(zhí)行計劃,執(zhí)行計劃中定義了算法的執(zhí)行步驟;根據(jù)各個步驟找到相應的路由節(jié)點,master將請求拆分/打包/路由到相應的worker

3. master將原始圖片路由分發(fā)到檢測子系統(tǒng)。檢測過程運行在GPU上,算法so檢測出模塊中各個圖片框(如圖2中的“京東”、“內外真皮”等),切分好之后將結果返回給master

4. master將檢測結果拆分,并行分發(fā)到識別子系統(tǒng)。識別過程運行在GPU上,算法so將識別出單個圖片框的文字,分別返回給master

5.  master將識別結果匯總,一起發(fā)送到重排序子系統(tǒng)。重排序子系統(tǒng)運行在CPU上,算法so將結果返回給master

6.  master將最終結果封裝并返回

每個模塊在整個過程中的作用為:

  • 算法映射:由bid+tid映射到一個具體的子算法。相同的tid與不同的bid組合,可以支持不同業(yè)務對同類算法的定制

  • 執(zhí)行計劃:定義算法的執(zhí)行步驟,比如圖中STR圖片文字識別,包含三個步驟:檢測、識別和重排序

  • 動態(tài)快照:即動態(tài)路由表,定義了算法每個階段映射到的具體節(jié)點。worker上報心跳,由ConfigServer整理生成動態(tài)路由表,由Master節(jié)點監(jiān)聽路由表的變更

4.3  容災與集群熱更新

熱更新能力是一個系統(tǒng)提供可靠和穩(wěn)定服務的基礎功能,即可以保證系統(tǒng)的無損升級,又可以保障系統(tǒng)的容災能力。如圖4,系統(tǒng)主要借助zookeeper和worker的心跳機制實現(xiàn)集群熱更新。

數(shù)平精準推薦 | OCR技術之系統(tǒng)篇

圖4  集群熱更新

  • Worker:在啟動的時候與zookeeper建立臨時節(jié)點維持心跳信息

  • Configserver:監(jiān)聽worker在zookeeper的心跳信息,如果worker斷連或重連,configserver立刻感知到并修改動態(tài)快照

  • Master:監(jiān)聽zookeeper上的動態(tài)快照信息,動態(tài)快照變更立刻觸發(fā)路由規(guī)則及路由連接池的更新


通過這幾個角色的配合,在worker節(jié)點出現(xiàn)異常的情況下,master迅速就完成了切換,保證了系統(tǒng)的穩(wěn)定。這種機制也支持了集群的熱更新,在需要對某個worker進行更新時,先對worker進行下線,master感知后不向此worker發(fā)請求,完成更新啟動后,master再跟其重新建立連接并發(fā)送請求。

4.4 單點熱更新

單點熱更新,指的是在不重啟服務的前提下,對進程內單個或多個模塊進行替換升級。與其他業(yè)務系統(tǒng)不一樣的,在算法平臺下,考慮以下兩種場景:

1)  一個進程內加載了多個算法SO,需要對其中一個算法模塊進行更新;

2)   算法鏈上串行多個模塊,需要對其中一個模塊進行實驗或更新。

這兩種場景下,使用集群熱更新或者對進程進行重啟,就有點重了,所以我們實現(xiàn)了一套進程內單個so的動態(tài)更新方案。通過Java代碼是無法直接實現(xiàn)SO的動態(tài)加載的,如圖4,我們引入了代理so,通過在代理so進行(dlopen,dlsym和dlclose)操作,從而達到動態(tài)加載SO的目的。同時在代理so中,我們封裝了所有JNI轉換和算法需要使用的接口,很好的進行了框架和算法的解耦。除了so的動態(tài)加載,我們還實現(xiàn)了模型的動態(tài)加載。

數(shù)平精準推薦 | OCR技術之系統(tǒng)篇

圖5  單點熱更新


4.5 靜態(tài)快照

通常在分布式框架中,是不需要靜態(tài)快照的。但在算法系統(tǒng)中,我們通常需要頻繁上下線一批so,而這些so會分布在不同機器不同節(jié)點上。雖然簡單的通過上傳/刪除服務器上的本地so文件,可以觸發(fā)相關進程的動態(tài)加載/卸載,但這種操作繁復,在算法復雜,一個進程加載了很多so的時候,操作容易出錯。所以,這里我們需要在運維上對系統(tǒng)進行優(yōu)化,提高系統(tǒng)可運維性。

如圖5,我們在動態(tài)快照的同時還引入了靜態(tài)快照,靜態(tài)快照由運維通過腳本或配置文件寫入靜態(tài)路由表,將一個集群的預期初始狀態(tài)配置到zookeeper上。ConfigServer整理靜態(tài)快照和worker上報的心跳信息,生成最終的動態(tài)快照。

數(shù)平精準推薦 | OCR技術之系統(tǒng)篇

圖6  靜態(tài)快照

這種動靜態(tài)快照結合的集群快照機制相比只有動態(tài)快照在運維上會稍微復雜,但可以通過運維工具降低復雜度。動靜態(tài)集群快照機制優(yōu)勢也很明顯,第一、在復雜算法下,不容易出錯;第二、可以在動態(tài)快照之余快速上下線一些算法或者更改算法流程。

五、框架的一些思考

我們成功地將Java與CUDA C++混編系統(tǒng)作為圖像識別服務框架,并且支撐了眾多業(yè)務。成熟穩(wěn)定的框架,可以解放更多的人力用于算法開發(fā)和業(yè)務接入。依托于Java成熟的開源工具,可以迅速開發(fā)出框架和進行維護,使用Java作為框架調度層和網絡層,對比傳統(tǒng)C++框架并沒有性能差異;而使用CUDA C++編寫SO的方式,可以更好的適配GPU環(huán)境和深度學習框架,更高效地利用機器計算資源。當然,我們的系統(tǒng)還在持續(xù)進化,后續(xù)將進一步在資源利用率、調度效率、業(yè)務接入速度和運維精細化等方向繼續(xù)努力。


六、結束語

我們推出了OCR技術系列文章總共包括了《OCR技術之檢測篇》、《OCR技術之識別篇》、《OCR技術之數(shù)據(jù)篇》、《OCR技術之系統(tǒng)篇》等4篇文章,希望通過這些文章能夠與大家一同探討OCR領域的一些技術與應用。在后續(xù)的工作中,團隊也將繼續(xù)在OCR領域深耕細作,不斷前行,持續(xù)提升技術水平與服務質量,為OCR技術的發(fā)展貢獻微薄之力。


另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

當前標題:數(shù)平精準推薦|OCR技術之系統(tǒng)篇-創(chuàng)新互聯(lián)
網站鏈接:http://bm7419.com/article8/igcip.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供Google、軟件開發(fā)、虛擬主機、云服務器、微信公眾號、外貿網站建設

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網站網頁設計