基于安卓端车牌识别开发总结
作者:互联网
简介
在安卓下视频实时识别、基于深度学习,支持蓝黄新能源车牌,暂不支持双层车牌,在高通820手机上帧率20帧左右。
- DEMO下载
欢迎测试技术交流
- 识别率
在自己的测试数据集上识别率99%。尝试过将现有能找到的免费或开源的识别程序在该测试集跑都不超过90%,高出这些识别程序10个点。不管从测试数据还是主观测试,都要优于目前能找到的免费识别程序。
- 测试数据集构成
在ccpd上随机抽了部分蓝牌+网上收集含黄蓝黑牌手工标记数据+行车记录仪视频截取手工标记,三部分一共几百张图片,涵盖蓝绿黑特种车牌,不过其中因为ccpd原因有少量的错误标注。
技术分享
整个过程分为检测和识别,检测为修改的mtcnn,检测为不到10层普通conv多任务小网络
训练数据集:ccpd+网上收集含黄蓝黑牌手工标记数据+行车记录仪视频截取手工标记+人工生成,覆盖蓝绿黑特种车牌(双层车牌数据量极少只支持检测不支持识别,后续会优化支持)
- ccpd数据集
关于ccpd数据集这里说下,应该是国内目前最大的公开数据集,给做车牌识别提供了很大的支持,这里表示感谢。但是皖苏牌过多中文极不均衡,训练的时候需要注意,再就是只有蓝牌。不过除此以外多样性还是非常好的比如清晰度,光线,角度,遮挡。
还有要注意的就是里面的关键点标注不可用有大量的错误,不建议使用,bbox信息用之前也建议处理下
- 检测
使用mtcnn是因为检测就它比较熟同时适合在手机上跑。
人脸的mtcnn为正方形这里需要改成长方形,目前很多车牌检测输入图宽高比都位3:1或以上,因为要考虑车牌大角度我的建议是使用2:1
因为特征图输入是长方形,网络架构就需要用到1x3或1x5这样的卷积
因为车牌本身较人脸要简单很多,所以这里将onet给去掉,pnet,rnet足够,同时提高运行速度
rnet输出分类,bbox,关键点,这里关键点由人脸的5个点修改为4个,四个角各一个
其他的训练和常规mtcnn一致。最终结果检测效果不错
- 识别
因为考虑要做在手机上运行涉及的主流推理库支持所以尽量使用简单的网络排除掉lstm等
自己搭建的一个不到10层的多任务网络,没有用到特别技术
车牌最大8个数对应8个任务,每个任务对应一个数,蓝牌只有7位最后一位填固定值
为了识别大角度车牌,需要将检测后的车牌通过4个关键点进行透视变换
识别的宽高比同样为2:1 虽然车牌本身宽高比要大于这个但是为了防止关键点不准需要做一些冗余
剩下就是正常训练训练,后期可以加入arcloss训练进一步提高精度
识别这一步在真实样本基础上可以加上自己在线生成的样本,生成的样本够好能大幅提高精度
训练了大概200epoch左右,因为有在线生成样本所以epoch要比较多,1070 gpu 大概要几天时间
- 总结一下
训练期间尝试过各种网络修改,各种超参组合最后发现都不如在数据上优化收益大,这里经验是如果没有很强的理论支撑来调参还不如把精力用在数据的优化上。
标签:训练,检测,ccpd,安卓端,识别,车牌,关键点 来源: https://blog.csdn.net/42252343/article/details/96302574