R-CNN小结
1.背景
物体检测(object detection)是计算机视觉非常重要的一个领域。RCNN作为该领域的开山鼻祖,在深度学习出现之前,传统方法始终无法处理好物体检测问题(会通过非常庞大的计算,来算出结果),在深度学习方法引入之后,物体检测领域就有了改变。最著名的是RCNN系列,另外还有YOLO、SSD系列。
首先总结一下RCNN。
2.步骤
RCNN算法分为4个步骤
- 候选区域生成: 一张图像生成1K~2K个候选区域 (采用Selective Search 方法)
- 特征提取: 对每个候选区域,使用深度卷积网络提取特征 (CNN)
- 类别判断/位置精修: 使用回归器精细修正候选框位置, 而特征送入每一类的SVM 分类器,判别是否属于该类,并且用NMS提出掉相似的框,保留最准确的框。

2.1候选区域生成
Selective Search算法:
可以认为这是一种非监督的方式,它就是看图像中每个pixel的相似程度,如图像中边缘特征比较明显的地方,像素之间明显的地方,根据这个,它会把图像分成很多区域块,根据这些区域块,会找出很多矩形框,也就是会生成2k候选框。然后Warp To Fixed Size将每个框,resize到相同大小大概2k个。流程如图:
2.2特征提取
2000张图片后面紧接着一个卷积神经网络,提取图像特征。
**问题一:为什么要resize成大小一样的2k张:
答:Selective Search 后接的是一个卷积神经网络,后面有fc层,最后向量的维度2000*4096是一样的,所以必须要输入图像一样。

2.3类别判断/位置精修(分类与回归,即SVM Classification + NMS + BBox Regression)
**以现在的眼光看过去,实际上SVM完全没有必要用到,完全可以上一步CNN得到特征后直接做分类与回归,而没有必要再用SVM再多一次。
**其中弄清楚一个很重要的问题NMS是什么,即非极大值抑制(Non-Maximum Suppression):
我们知道首先是通过2.1得到了2k个region proposal(候选区域), 经过2.2得到2k个feature vector(向量),经过SVM的到2k个result bbox,这个bbox它有一些属性,比如【id/socre(0-1)/】,首先id的意思就是第几个,score就是判断是不是手的概率,怎么判断呢,即设置一个阈值,比如0.8,小于它就提出掉不要了。通过阈值的筛选,最后2k个变成200个,NMS就是从这200个里面,评分最高的几类。

比如图中的检测手的任务,我们通过阈值剔除掉其余1.8k只手,就要用剩下两百个框通过NMS筛到只留四个框,分别代表四只手。
NMS数学及代码解释:

B是每个框(200个),S是B的得分情况,比如0.8,0.92,0.982,0.99......(200个) ,Nt是阈值
首先遍历一下B, 找到200个中最大的S,将找到的最大分值bm给到M,然后B - bm更新为199个,然后依次循环剩下的199个,分别与最大值bm做IOU计算,设置一个阈值,假如为0.3,大于0.3的我们就认为是在检测同一个物体,就会被剔除掉,实际上NMS更新出现在这里。
假如若检测将本之间重叠,比如:

这种情况剔除掉谁也不合适,都是需要检测的内容。
所以针对NMS的改进,用一个高斯分布:
e-iou(M, bi) ⁄ σ,即它会对相似度高的有抑制作用,相似度越高,会尽可能使之讲到阈值之下。
代码:https://github.com/passional/cv_tool/blob/main/nms.py
3.一些问题缺点
速度特别慢,主要是因为它把很多的内容拆成很多很多部分,比如必须需要用Selective Search纯手算proposal,然后需要把2000个proposal全部仍到CNN中去,去算feature vector,然后还没完,还要将feature vector扔到传统机器学习SVM去分类。
参考目录:RCNN-将CNN引入目标检测的开山之作-晓雷的文章
基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN-冠军的试练的博客
R-CNN小结的更多相关文章
- CNN 小结
CNN 小结 目录 CNN特征提取过程(卷积核描述的是特征信息, 此特征可能就是原图像中的某些像素, 但是卷积核并不找相似的地方在原始图像的哪里, 所以需要将卷积核不断地滑动, 得到的feature ...
- python 字符串前缀u, r, b小结
http://note.youdao.com/noteshare?id=a0da9c2d044d270fa8cb162b932c47e8
- 一些Asp.Net面试题答案
工作时间长了总是用同样的一些东西 其他的有些生疏 闲来看看面试题练习一下: 题目出处嘛...aspnet-tests-for-juniors 转载请注明来源:http://www.cnblogs ...
- RCNN--对象检测的又一伟大跨越 2(包括SPPnet、Fast RCNN)(持续更新)
继续上次的学习笔记,在RCNN之后是Fast RCNN,但是在Fast RCNN之前,我们先来看一个叫做SPP-net的网络架构. 一,SPP(空间金字塔池化,Spatial Pyramid Pool ...
- 行为识别(action recognition)相关资料
转自:http://blog.csdn.net/kezunhai/article/details/50176209 ================华丽分割线=================这部分来 ...
- LeetCode算法题-Invert Binary Tree
这是悦乐书的第194次更新,第199篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第55题(顺位题号是226).反转二叉树.例如: 输入: 4 / \ 2 7 / \ / ...
- SQL Server进阶(十一)临时表、表变量
临时表 本地临时表 适合开销昂贵 结果集是个非常小的集合 -- Local Temporary Tables IF OBJECT_ID('tempdb.dbo.#MyOrderTotalsByYe ...
- 【做题】CF1045(ABH)
原文链接https://www.cnblogs.com/cly-none/p/9697662.html 题目当然不会做完了,这里只讲有做&会做的. A. Last chance 题意:有\(n ...
- Controller如何写的更简化
Controller层相当于MVC中的C,也是安卓或者前端请求的接口. 首先说Controller为什么需要写的更加简化? 第一.Controller是不能复用的: 第二.即便是将Controller ...
- javase(10)_多线程基础
一.排队等待 1.下面的这个简单的 Java 程序完成四项不相关的任务.这样的程序有单个控制线程,控制在这四个任务之间线性地移动.此外,因为所需的资源 ― 打印机.磁盘.数据库和显示屏 -- 由于硬件 ...
随机推荐
- JS 将Table内容导出到Excel(样式设计)
转载请注明来源:https://www.cnblogs.com/hookjc/ function saveAsExcel(tableID){ var tb = new TableToExcel(tab ...
- having筛选结果集
题目要求:让你输出有两科及其以上挂科(60分及格)的学生的名单? name subject score 错误的做法: mysql> select name, count(scoure<60 ...
- 获取缓存文件大小并清理 By HL
通常用于删除缓存的时,计算缓存大小 //单个文件的大小 - (long long) fileSizeAtPath:(NSString*) filePath{ NSFileManager* manage ...
- 论文解读(IDEC)《Improved Deep Embedded Clustering with Local Structure Preservation》
Paper Information Title:<Improved Deep Embedded Clustering with Local Structure Preservation>A ...
- LPL Ban/Pick 选人阶段的遮罩效果是如何实现的?
最近 S11 LPL 春季赛开赛,在看比赛的过程中,我发现新赛季的 Ban/Pick 选人阶段,出现了一种新的,有意思的遮罩效果,如下图所示: 当然,它是一个动态的效果,当选人的过程中,会有一种呼吸的 ...
- 2、前端--初见前后端交互、CSS简介、基本选择器、组合选择器、属性选择器、分组与嵌套、伪类选择器
今日内容概要 初窥后端框架 css简介 css选择器 今日内容详细 初次体验前后端交互 # 代码无需掌握 只看效果即可 """后端框架:可以简单的理解为别人写好的一个非常 ...
- 探针配置失误,线上容器应用异常死锁后,kubernetes集群未及时响应自愈重启容器?
探针配置失误,线上容器应用异常死锁后,kubernetes集群未及时响应自愈重启容器? 探针配置失误,线上容器应用异常死锁后,kubernetes集群未及时响应自愈重启容器? 线上多个服务应用陷入了死 ...
- 再也不用担心重装VSCode了
1. 关于Settings Sync插件 Setings Sync插件可以同步你的VSCode配置到Github Gist,当你更换电脑重新搭建VSCode环境的时候,直接使用该插件拉取你之前同步的配 ...
- Java并发基础之AbstractQueuedSynchronizer(AQS)
AbstractQueuedSynchronizer同步器是实现JUC核心基础组件,因为 定义了一套多线程访问共享资源的同步器框架.前面几篇文章中JUC同步工具中都利用AQS构建自身的阻塞类.AQS解 ...
- 操作系统实验一:进程管理(含成功运行C语言源代码)
目录 操作系统实验一:进程管理 1.实验目的 2.实验内容 3.实验准备 3.1.1进程的含义 3.1.2进程的状态 3.1.3进程状态之间的转换 3.2 进程控制块PCB 3.2.1进程控制块的作用 ...