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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值