- scaleFactor – Parameter specifying how much the image size is reduced at each image scale.
- minNeighbors – Parameter specifying how many neighbors each candidate rectangle should have to retain it.
eg.
车牌定位正常的图片居多, 但也有少数图片定位不出车牌. 专门把定位不出来的车牌照片挑出来, 设置了2组不同minNeighbors参数做试验对比. minNeighbors = 0 , 与minNeighbors = 5, 在minNeighbors = 5定位不到的情况下, minNeighbors = 0 定位得到, 但是除此之外, 无关区域太多, 且重叠的框很多.
切入正题:
由于目标检测对后续的OCR至关重要, 准确快速定位出来, 减少一些错误定位, 也能节省车牌识别整个流程的时间. 博主做了些目标检测算法的综述, 发现应用深度学习神经网络来做定位,能比传统机器学习方法优秀不少, 能做到更准确快速. 目前最优秀的目标检测方法是, RCNN一系列方法.
基于深度学习的目标检测,发展路径大致分两类, 一类是带有Region Proposal, 依次经过RCNN - FAST RCNN - FASTER RCNN - MASK RCNN发展. 一类是without Region Proposal, 这一类有SSD, YOLO. 其中Faster RCNN, 在目标检测领域得到了很多应用, 较为成熟, 有在卫星地图下的地形目标检测, 有人脸检测, 细胞检测等等, 效果卓越. 由于MASK -RCNN较新(其实最优秀, 最准确最快速), 但所能利用的资料不如FASTER RCNN多, 博主决定先将FASTER RCNN算法, 应用到车牌识别场景中.
由于手头没有可用GPU, 因此需要在CPU下训练, 原论文给的官方代码是Matlab版的, 以及RBG写的python版, 但都是GPU环境下的训练. 因此需要改动代码, 适应在CPU下跑. 这里在CPU下跑faster rcnn有很多坑, 专门开一个博客写这些坑. 包括配置caffe的问题, 如何准备自己的数据集等等.
博主的思路是, 在自己的电脑上跑通一遍小数据量, 小迭代次数的faster rcnn的训练, 排除一些可能遇到的问题, 填坑之后挂在到云服务器上进行训练. 可惜华为云的GPU只支持WIN系统. Win系统不太适合开发啊, 肺腑之言. 博主本科期间Win配置VS, OpenCV耗费很长时间, 且卒. 而Linux 几句命令就能搞定.
于是那就用CPU 吧, 也搜索了一波国内云服务, 阿里比较成熟. 阿里云的GPU支持各种主流系统, Windows, Linux ubuntu, Linux CentOS等等. 到后来, 训练出一个模型之后(不太成熟, 但有点效果), 发现CPU训练跑不动, 还是需要GPU.
放个跑通Faster RCNN demo 测试图:
这里解释一个概念, 也是我一开始容易混淆的, 目标定位与目标检测的区别, 引用CS231n课内容.
目标定位: 只针对一类目标, 在一张图片中找出某一类目标的位置, 比如dog在哪, 输出4个坐标.
目标检测: 针对多类别目标, 如上图demo所示, 在一张图片中, 找到好几种类目标, 如dog, horse, car, person, 并分别确定出位置.
论文解读:
论文传送门:
论文标题: Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
论文地址: https://arxiv.org/abs/1506.01497
Faster RCNN 大致思路是试用RPN(Region Proposal Networks) 可以筛选出一些高概率可能是目标区域的地方, 以供CNN进行分类. 这一步大大减少了sliding window 在整张图片漫无目的搜索的繁琐. Faster RCNN 由两部分组成, 第一部分是RPN网络, 产生Proposed Region. 第二部分是Fast RCNN detector, 利用这些proposed region做检测与分类. Faster R