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 程序完成四项不相关的任务.这样的程序有单个控制线程,控制在这四个任务之间线性地移动.此外,因为所需的资源 ― 打印机.磁盘.数据库和显示屏 -- 由于硬件 ...
随机推荐
- SpringBoot + Log4j2使用配置 (转)
前言 后台程序开发及上线时,一般都会用到Log信息打印及Log日志记录,开发时通过Log信息打印可以快速的定位问题所在,帮助我们快捷开发.程序上线后如遇到Bug或错误,此时则需要日志记录来查找发现问题 ...
- DbUnit入门实战
原文地址: http://yangzb.iteye.com/blog/947292 相信做过单元测试的人都会对JUnit 非常的熟悉了, 今天要介绍的DbUnit(http://dbunit.sour ...
- JavaWeb开发获取客户IP地址
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11737637.html 本地调试如果使用的是localhost进行访问, 则会获取到 0:0: ...
- Solution -「国家集训队」「洛谷 P2619」Tree I
\(\mathcal{Description}\) Link. 给一个 \(n\) 个点 \(m\) 条边的带权无向图,边有权值和黑白颜色,求恰选出 \(K\) 条白边构成的最小生成树. ...
- 『无为则无心』Python面向对象 — 45、面向对象编程
目录 1.面向对象编程的概念 2.面向对象编程和面向过程编程的区别 (1)面向过程编程 (2)面向对象编程 3.举例理解面向对象 4.Python的面向对象编程 5.面向对象的几大核心特性 1.面向对 ...
- BeanFactory与FactoryBean有什么区别?
相同点:都是用来创建bean对象的 不同点:使用beanFactory创建对象的时候,必须要遵循严格的生命周期流程,太复杂了,如果想要简单的自定义某个对象的创建,同时创建好的对象想要交给spring来 ...
- 什么,有狗快跑!慢着,这次手把手教你怎么过安全狗!(sql注入篇)
前言 在记忆里上次绕安全狗还是在上次,开开心心把自己之前绕过狗的payload拿出来,发现全部被拦截了,事情一下子就严肃起来了,这就开整. 环境 本次环境如下sqli-lab的sql注入靶场 网站安全 ...
- flask框架安装使用
开篇 个人工作中需要用到flask,所以特地搭建了用一下,熟悉操作 一.centos云服务器环境下 falsk作为一个python的轻量级的web框架,基本上相当于一个内核,各种功能都需要扩展第三方来 ...
- kali各工具使用介绍
各工具kali官方简介(竖排):https://tools.kali.org/tools-listing 安装kali虚拟机可参考:https://www.cnblogs.com/lsdb/p/650 ...
- PentestBox在win10里打不开工具 显示无系统命令的解决方法
PentestBox详细安装过程:http://www.cnblogs.com/ESHLkangi/p/8336398.html 在使用PentestBox的时候出现了打不开工具的问题,最后看到一个大 ...