OpenCV|5步实现深度学习OpenCV对象检测:Faster-RCNN图片识别
文章插图
Faster-RCNN图片识别
Faster-RCNN对象检测算法是R-CNN对象检测的第三个版本算法 , 其前面还有Fast-RCNN与RCNN算法 , 由于R-CNN无法实现End-to-End训练 , Fast R-CNN Selective Search耗时比较长等原因 , 作者在此2版的基础上 , 更新到了Faster-RCNN对象检测算法 。
文章插图
对象检测
从下方结构图可以看出:Faster-RCNN对象检测算法将特征提取、proposal提取、Bounding Box Regression、Classification整合到一个网络中 , 对象检测速度不仅有了提示还避免了前2个版本的缺点 。
文章插图
Faster R-CNN
Faster R-CNN对象检测流程:1、特征提取(convolutional layer):Faster R-CNN使用卷积+relu+pooling池化层提取被检测对象的特征 。
2、区域预测网络(Region Proposal Network):RPN通过softmax函数判断锚点(anchors)属于某个特征 , 再利用边界框回归(bounding box regression)修正anchors获得精确的对象检测值 。
3、目标区池化(Roi Pooling):收集输入的特征数据和候选目标区域 , 利用此层信息提取目标区域特征数据 , 然后全连接层识别图片 。
4、分类(Classification):利用目标区域特征数据计算太识别图片 , 同时利用边界框回归获得对象检测的精确位置 。
文章插图
Faster R-CNN流程图
如何来实现Faster R-CNN , 以及Faster R-CNN的具体工作是如何实现的 , 小编也参考了很多网友的源码 , 无奈代码量太大(少的也得几千行) , 我们前期分享了如何使用opencv与MobileNet SSD的图像识别以及视频实时识别
MobileNet SSD视频流实时识别
MobileNet SSD图像识别
同样使用opencv也可以来实现Faster R-CNN的对象检测算法 , 很多代码都比较类似 , 小伙伴们也可以参考往期文章
使用OpenCV进行基于Faster R-CNN深度学习的对象检测Faster R-CNN prototxt 与Faster R-CNN model模型已经共享:
回复:RCNN 即可领取
模型一共2种:
faster_rcnn_inception_v2与faster_rcnn_resnet50 , 2种模型是在不同的训练集上训练的数据 , 其中faster_rcnn_inception_v2模型较小 , 速度较快 , 本期按照此模型来搭建对象检测 , 其faster_rcnn_resnet50模型跟faster_rcnn_inception_v2模型的代码完全一致 , 只是修改一下模型的路径便可
在本节中 , 我们将使用 OpenCV中的深度神经网络( dnn)模块与Faster R-CNN prototxt 与Faster R-CNN model来构建我们的对象检测器
1、模型以及第三方库
文章插图
模型以及第三方库
首先导入模型以及模型参数 , 若使用faster_rcnn_resnet50模型 ,12 、13行直接修改为faster_rcnn_resnet50模型的相对地址
2、定义模型识别类型
文章插图
定义模型识别类型
Faster R-CNN模型相比SSD来说 , 能够识别的种类 , 丰富了很多 , 大概有100个种类 , 几乎包含了生活中所能涉及的种类 , 当然 , 若你有强大的数据支撑 , 也可以来训练自己的模型(后期分享如何来训练自己的模型)
3、opencv建立神经网络
文章插图
opencv建立神经网络
对比51 、52行可以知道 , SSD模型是在caffe上训练的模型 , 而Faster R-CNN模型是tensorflow上训练的模型 , 但是强大的opencv库使用dnn函数就能很方便的加载预训练模型 , 且可以对比看出 , 其模型与参数文件前后有区别
4、计算blob , 进行神经网络的预测
文章插图
计算blob , 进行神经网络的预测
获取图片的长宽参数 , 重新调整图片长宽为300*300 , 来进行图片blob的计算 , 然后blob传入神经网络来进行计算 , 使用前向传播来预测图片
5、遍历预测值 , 提取设置阈值的对象
文章插图
遍历预测值 , 提取设置阈值的对象
此部分跟SSD对象检测代码完全一致 , 小伙伴们可参考往期文章 , 此模型需要加载在opencv3.4.2版本以上 。
关于此代码如何利用在视频检测上 , 如何通过多进程来加速神经网络 , 请参考往期文章
- 与用户|掌握好这4个步骤,实现了规模性的盈利
- 落地|“电竞之都”争夺战中,城市们该怎样实现产业落地?
- 美好生活|以人为本实现万物互融,中国视频社会化时代开启
- 手机|女神的自拍秘密,只需一部vivo S7便可以实现
- 自动任务|赶在三星 S21 发布之前实现语音解锁
- 产业|新主导力量来了,上海如何实现一次“革命性重塑”?
- Mate40Pro|华为Mate40Pro前置镜头有多强实现的这些功能国产机没人做到
- 突破|再传喜讯国产8英寸石墨烯晶圆亮相,中国芯再次实现新突破
- 如何基于Python实现自动化控制鼠标和键盘操作
- 小天才电话手表立体定位技术,真正实现无死角定位