keras优化算法_自然场景文本识别(OCR),keras-yolo3-densenet-ocr
自然場景文本識別
我之前是做自然語言的,但公司有個ocr的項目必須要做,因此開始學習ocr相關知識,邊學邊做兩個多月,還有很多不太明白的地方,只能大概講一講經驗教訓。
自然場景文本分類包括兩個步驟,1、文本檢測:識別出文本框,2、文本識別:識別出字或者字符。
1、 文本檢測:
文本檢測和目標檢測類似但又有不同,目標檢測的物體形狀一般是不固定的,而文本框一般是矩形,另外文本檢測是二分類,而目標檢測是多分類。成熟的文本檢測算法有很多,我嘗試了ctpn,east以及yolo3(包括yolo3-tiny)等三種文本檢測算法。(目前只考慮水平文本,有很多其他算法可以檢測非水平文本,包括east)
2、 文本識別:
文本識別嘗試了crnn和densenet,總體來看性能差不多。
由于對qps有要求,因此嘗試使用tensorrt對模型進行推理優化,keras轉trt模型較好的路徑還是keras→onnx→trt,而不是keras→uff→trt,因為有很多操作uff都不支持。使用tensorrt后時延從120ms降到了90ms,可以說達到了目的。但是tensorrt只支持定長,只能將圖片壓縮到固定值(例如608*608),會損失一定精度,tensorrt6以后應該是支持變長的,后面有時間會研究一下這個問題。
因為要綜合考慮性能和效率,最終使用yolo3+densenet作為解決方案(從時延和性能上看yolo3都是遠遠好于ctpn和east(只考慮水平文本),這和我看到的一些信息不符,ctpn和east都是工業界運用比較多的算法了,但這里我沒看到任何優勢,如果有大神了解歡迎指正)。
使用tensorrt進行推理優化,平均時延大約90ms左右。程序是由python實現,改成c++,時延應該會更低一些。使用了10000條數據進行測試,使用hmean和編輯距離作為評價指標(https://github.com/liuheng92/OCR_EVALUATION.git),最好模型(yolo3-608-densenet)結果為:
"recall": 0.7576752977446645,
"precision": 0.7358534281487819,
"hmean": 0.7466049438527332
"distance": 28.814918508149184,
附代碼地址:https://github.com/zhaogangthu/keras-yolo3-ocr-tensorrt.git
另外我對推理加速問題很感興趣,如果有大神有過研究,歡迎指教。有其他問題也可一起討論。
——————————————————————————————————————
2020年9月25日更新
tensorrt已經支持動態輸入,請查看:
趙剛:tensorRT動態輸入(python)?zhuanlan.zhihu.com總結
以上是生活随笔為你收集整理的keras优化算法_自然场景文本识别(OCR),keras-yolo3-densenet-ocr的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ddos网页端漏洞(交换机ddos漏洞)
- 下一篇: numpy 数组抽取_清晰易懂的Nump