身份證識(shí)別服務(wù)性能優(yōu)化實(shí)踐
本文作者為中國(guó)移動(dòng)云能力中心云智團(tuán)隊(duì)圖像處理算法工程師周華健。身份證識(shí)別場(chǎng)景下服務(wù)調(diào)用量大,往往對(duì)于服務(wù)的吞吐量要求較高。本文主要從業(yè)務(wù)邏輯、模型、工程三個(gè)層面對(duì)身份證識(shí)別服務(wù)進(jìn)行優(yōu)化,取得了較大的性能提升。
1. 業(yè)務(wù)邏輯優(yōu)化

一個(gè)身份證通常包含了4個(gè)模型,身份證檢測(cè)模型,身份證方向判斷模型,身份證文字檢測(cè)模型,身份證文字識(shí)別模型。由于身份證檢測(cè)與身份證文字檢測(cè)模型任務(wù)類型相似,模型輸入圖像也可以一致,因此將二者的模型進(jìn)行合并。

這里采用一個(gè)骨干網(wǎng)+兩個(gè)分支的架構(gòu)實(shí)現(xiàn)模型的合并,采用輕量級(jí)模型mobilenetV3[1]作為模型的骨干網(wǎng),分別取DBNet[2](常用文字檢測(cè)算法)及PicoDet[3](百度輕量級(jí)檢測(cè)算法)的頭部分支作為模型的head。如此可以減少一個(gè)模型推理及其預(yù)處理的計(jì)算開(kāi)銷,提升效率。

2.模型效率優(yōu)化
為了提升模型推理的效率,在模型設(shè)計(jì)中廣泛使用分組卷積。分組卷積是一種高效的卷積。

假設(shè)標(biāo)準(zhǔn)卷積操作的輸入特征圖尺寸為{H,W,c1},卷積核尺寸為{h1,w1,c1},輸出特征圖尺寸為{H,W,c2},標(biāo)準(zhǔn)卷積層的參數(shù)量為:h1*w1*c1*c2。假設(shè)分組卷積操作將輸入特征圖按照通道數(shù)分成g組,則每組通道輸入特征圖的尺寸為{H,W,c1/g},對(duì)應(yīng)的卷積核尺寸為{h1,w1,c1/g},每組輸出特征圖尺寸為{H,W,c2/g}。將g組結(jié)果拼接,得到最終尺寸為{H,W,c2}的輸出特征圖。分組卷積層的參數(shù)量為h1*w1*(c1/g)*(c2/g)*g=h1*w1*c1*c2/g。在相同輸入輸出大小的情況下,分組卷積較標(biāo)準(zhǔn)卷積參數(shù)量及計(jì)算量減少為原來(lái)的1/g。
為了整體性能,這次優(yōu)化將所有的模型包括檢測(cè)模型、方向判斷模型、文字識(shí)別模型從標(biāo)準(zhǔn)卷積模型的骨干網(wǎng)升級(jí)為使用帶分組卷積的MobileNet系列骨干網(wǎng),大幅提升模型推理的效率。

3. 工程優(yōu)化
服務(wù)化框架的性能通常是被忽略的,舊版服務(wù)采用multimodel server。本次優(yōu)化選用Paddle C++ Serving[4]框架。Paddle C++ Serving采用brpc框進(jìn)行Client/Server端的通信。brpc是百度開(kāi)源的一款PRC網(wǎng)絡(luò)框架,具有高并發(fā)、低延時(shí)等特點(diǎn)的核心執(zhí)行引擎是一個(gè)有向無(wú)環(huán)圖(也稱作DAG圖),DAG圖中的每個(gè)節(jié)點(diǎn)(在PaddleServing中,借用模型中operator算子的概念,將DAG圖中的節(jié)點(diǎn)也稱為OP代表預(yù)估服務(wù)的一個(gè)環(huán)節(jié),可以理解為模型的前后處理環(huán)節(jié),DAG圖支持多個(gè)OP按照串并聯(lián)的方式進(jìn)行組合,從而實(shí)現(xiàn)在一個(gè)服務(wù)中完成多個(gè)模型的預(yù)測(cè)整合最終產(chǎn)出結(jié)果。
整個(gè)框架原理如下圖所示,可分為Client Side 和Server Side。

Client端通過(guò)Pybind API接口將Request請(qǐng)求,按照ProtoBuf協(xié)議進(jìn)行序列化后,經(jīng)由BRPC網(wǎng)絡(luò)框架Client端發(fā)送給Server端。Paddle C++ Serving中定義了Client Side 和 Server Side之間通信的Protobuf, Portobuf的序列化的結(jié)果體積要比XML、JSON小很多,速度比XML、JSON快很多。對(duì)于較小的圖片性能差異不大,但是對(duì)大圖像性能差異明顯。

Client端等待Server端的返回?cái)?shù)據(jù)并反序列化為正常的數(shù)據(jù),之后將結(jié)果返給Client調(diào)用方。Server端接收到序列化的Request請(qǐng)求后,反序列化正常數(shù)據(jù),進(jìn)入圖執(zhí)行引擎,按照定義好的DAG圖結(jié)構(gòu),執(zhí)行每個(gè)OP環(huán)節(jié)的操作。身份證識(shí)別模塊定義了3個(gè)C++實(shí)現(xiàn)的OP,分別是身份證檢測(cè)及文字檢測(cè)前后處理OP,方向判斷前后處理OP,文字識(shí)別前后處理OP,性能較multimodel server中python實(shí)現(xiàn)的前后處理更為優(yōu)越。

當(dāng)DAG圖中所有OP環(huán)節(jié)均執(zhí)行完成后,將結(jié)果數(shù)據(jù)序列化后返回給Client端。
Paddler Serving支持使用TensorRT推理引擎進(jìn)行推理,性能較其原生的paddleinference更為優(yōu)越。

4. 總結(jié)
本次從業(yè)務(wù)邏輯層面、模型層面、工程層面對(duì)身份證識(shí)別服務(wù)進(jìn)行優(yōu)化,精度輕微下降,性能得到了大幅提升,后續(xù)將繼續(xù)探索低精度推理等性能優(yōu)化技術(shù)以進(jìn)一步提升服務(wù)性能,降低運(yùn)營(yíng)成本。
5. 參考文獻(xiàn)
[1] Searching for MobileNetV3. https://arxiv.org/abs/1905.02244
[2] Real-time Scene Text Detection with Differentiable Binarization
??https://arxiv.org/pdf/1911.0894??
[3] PP-PicoDet: A Better Real-Time Object Detector on Mobile Devices
??https://arxiv.org/abs/2111.00902??
4] https://github.com/PaddlePaddle/Serving
本文轉(zhuǎn)載自 ??AI遇見(jiàn)云??,作者:周華健

















