目标检测算法: 对Faster RCNN论文的理解与实践

发布时间:2024-11-17 03:57

理解预算对实现财务目标的重要性 #生活技巧# #财务管理技巧# #预算制定#

为何会转战深度学习目标检测算法? 

博主目前在研究计算机视觉的车牌识别项目, 以前使用OpenCV里的LBP Cascade classifier进行目标定位, 发现效果不算太完美, 有时车牌定位不出来, 有时顺带定位出许多不是车牌的部分.  增加了1000多张车牌数据集重新训练cascade classifier, 效果改变不是特别大.   为了确保至少要将车牌区域选出来, 要调整相关detectMultiScale的scaleFactor, minNeighbors参数.

Python: cv2.CascadeClassifier.detectMultiScale(image[, scaleFactor[, minNeighbors[,

flags[, minSize[, maxSize]]]]]) → objects

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.

难以避免也会将无关区域也选出, 只有这样, 才能增加车牌区域被选出来的概率.  倘若不多选一些区域, 也许车牌区域就无法被筛选出来.  这种方法, 能定位到车牌的概率挺高, 博主做了统计, 可以达到94% 左右.  缺点是若候选区增多, 速度慢, 且无关区域也变多. 例如, 欲选出车牌区域, 还会附带选出20多个不是车牌的区域(false positives) .  大大降低OCR效率. 

车牌定位正常的图片居多, 但也有少数图片定位不出车牌. 专门把定位不出来的车牌照片挑出来, 设置了2组不同minNeighbors参数做试验对比.  minNeighbors = 0 , 与minNeighbors = 5,  在minNeighbors = 5定位不到的情况下, minNeighbors = 0 定位得到, 但是除此之外, 无关区域太多, 且重叠的框很多.

以上是试验, 下面详细分析一下minNeighbors 这个参数. minNeighbors 表示构成检测目标的相邻矩形的最小个数(默认为3个).如果组成检测目标的小矩形的个数和小于 minNeighbors - 1 都会被排除。如果minNeighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框. 但是别把minNeighbors调太大, 太大连正确的正样本都会被消除.

LBP Cascade classifier 使用滑动窗口以及图像金字塔获得多尺度候选区域, 图像金字塔, 即把图像进行多尺度放缩scaleFactor参数就是这个作用, 使滑动窗口在每一层上滑动, 这个方法的最大优点就是漏检率极低,因为它会对整幅图像都滑动,不会漏掉任何一个可能会目标区域的位置。但是这种优势,是用巨大的搜索空间和时间消耗换来的,检测效率自然会受到较大的影响.  这种方法属于传统计算机视觉的方法, 常用于人脸识别应用场景, 生成候选区域比较耗时. 下图是sliding window 的方式演示.

切入正题:

由于目标检测对后续的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 RCNN的结构如下图所示: 

网址:目标检测算法: 对Faster RCNN论文的理解与实践 https://www.yuejiaxmz.com/news/view/96949

相关内容

关于计算机维护的论文10000字,关于计算机维护的论文
计算机组装与维护论文(范文推荐6篇),计算机应用技术论文
计算机维修与维护毕业论文范文(通用10篇)
python+flask计算机毕业设计个人财务管理系统的设计与实现(程序+开题+论文)
构建厨房灶火监控与提醒系统:基于NanoDet的深度学习目标检测解决方案
纸基传感器可快速检测心脏病标志物
基于JAVA的家庭财务管理系统的设计与实现毕业论文
计算机组装与维护实训总结范文(精选16篇)
小学数学应用题教学“生活化”的理论与实践
生活垃圾焚烧发电PPP项目实务解析与建议

随便看看