算法详解之RCNN

news/2024/7/21 4:27:02 标签: 图像处理, 深度学习

图像检测流程

传统图像检测的基本流程:

输入——特征提取(手工/人为计算)——应用机器学习算法进行检测——输出检测结果

经典的特征提取算法(Sift/HOG/Fast/Surf/Orb)aa

CNN算法进行目标检测:

 

两步检测算法

First Trial-RCNN(2014)

详细流程:

  • 对输入图片进行Extract Region Proposal,即一张图片生成1k~2k个候选区域;
  • 将Region Proposal区域resize成相同大小输入CNN模型提取特征;
  • 将提取特征输入传统机器学习算法进行分类与回归,分类判别属于哪一类,回归是应用回归器精细修正候选框位置。

候选区域的生成:

使用了Selective Search1方法从一张图像生成约2000-3000个候选区域。基本思路如下:

  • 使用一种过分割手段,将图像分割成小区域;

  • 查看现有小区域,合并可能性最高的两个区域。重复直到整张图像合并成一个区域位置;

  • 输出所有曾经存在过的区域,所谓候选区域

候选区域生成和后续步骤相对独立,实际可以使用任意算法进行。

 

CNN部分(将图片裁剪为相同大小,得到相同维度的 vector)

 

NMS(非极大抑制)

NMS即non maximum suppression即非极大抑制,顾名思义就是抑制不是极大值的元素,搜索局部的极大值。

就像上面的图片一样,定位一个车辆,最后算法就找出了一堆的方框,我们需要判别哪些矩形框是没用的。

所谓非极大值抑制:先假设有6个矩形框,根据分类器类别分类概率做排序,从小到大分别属于车辆的概率分别为A<B<C<D<E<F。

  • (1) 从最大概率矩形框F开始,分别判断A、B、C、D、E与F的重叠度IOU是否大于某个设定的阈值;
  • (2) 假设B、D与F的重叠度超过阈值,那么就扔掉B、D;并标记第一个矩形框F,是我们保留下来的。
  • (3) 从剩下的矩形框A、C、E中,选择概率最大的E,然后判断A、C与E的重叠度,重叠度大于一定的阈值,那么就扔掉;并标记E是我们保留下来的第二个矩形框。
  • (4) 重复这个过程,找到所有被保留下来的矩形框。

Soft-NMS

作用: iou大时si小,起负相关作用,但初始si特别大时即使iou大,计算得到的si依旧很高,可以将两个都保留(区分两个挨的很近的不同物体)

阈值sigma通常为0.3

Fast R-CNN

Fast R-CNN的输入由两部分组成:一是待处理的整张图像;二是候选区域(region proposal)。

Fast R-CNN处理的第一步是对图像进行多次卷积核池化处理来获取卷积特征图。由于存在多个候选区域,系统会有一个甄别,判断出感兴趣区域,也就是Region of Interest, RoI。RoI池化层是SSP(Spatial Pyramid Pooling)层的特殊情况,它可以从特征图中提取一个固定长度的特征向量。每个特征向量,都会被输送到全连接(FC)层序列中,这个FC分支成两个同级输出层。其中一层的功能是进行分类,对目标关于K个对象类(包括全部”背景background”类)输出每一个RoI的概率分布,也就是产生softmax概率估计;另一层是为了输出K个对象中每一个类的四个实数值(bbox regression)。每4个值编码K个类中的每个类的精确边界框(bounding-box)位置。整个结构是使用多任务损失的端到端训练(trained end-to-end with a multi-task loss)(除去Region Proposal提取阶段)。

 


http://www.niftyadmin.cn/n/817235.html

相关文章

数据结构47:树的应用:表达式解析(二)

目录 一、建立表达式解析树&#xff1a;实例 二、利用表达式解析树求值&#xff1a;思路 一、建立表达式解析树&#xff1a;实例 全括号表达式&#xff1a;(3(4*5)) 二、利用表达式解析树求值&#xff1a;思路 从图示过程我们可以看到&#xff0c;创建树过程中关键的是对当前…

数据结构48:树的遍历

一、树的遍历Tree Traversals 对一个数据集中的所有数据进行访问的操作称为“遍历Traversals” 线性数据结构中&#xff0c;对其所有数据项的访问比较简单直接&#xff0c;按照顺序依次进行即可。但是由于树的非线性特点&#xff0c;使得遍历操作较为复杂。 我们按照节点访问…

数据结构49:优先队列与二叉树

目录 一、优先队列Priority Queue 二、二叉堆Binary Heap实现优先队列 三、用非嵌套列表实现二叉堆 四、完全二叉树的列表实现及性质 五、堆次序Heap Order 一、优先队列Priority Queue 前面我们介绍了一种FIFO的数据结构&#xff1a;队列。 队列有一种变体称为“优先队…

Python全栈 MongoDB 数据库(概念、安装、创建数据)

什么是关系型数据库&#xff1f;是建立在关系数据库模型基础上的数据库&#xff0c;借助于集合代数等概念和方法来处理数据库中的数据&#xff0c;同时也是一个被组织成一组拥有正式描述性的表格&#xff08;二维表&#xff09;&#xff0c;该形式的表格作用的实 …

算法详解之Fast RCNN

目录 一、解决的问题 二、算法概要 训练的过程 测试的过程 三、算法详解 四、实验结果 五、总结 一、解决的问题 R-CNN存在以下几个问题&#xff1a; 训练分多步。通过上一篇博文我们知道R-CNN的训练先要fine tuning一个预训练的网络&#xff0c;然后针对每个类别都训…

数据结构50:二叉查找树及操作

目录 一、二叉查找树Binary Search tree 二、二叉查找树BST的性质 三、二叉搜索树的实现“节点和链接结构 一、二叉查找树Binary Search tree 在ADT Map的实现方案中&#xff0c;可以采用不同的数据结构和搜索算法来保存和查找key&#xff0c;前面已经实现了两个方案&#…

恢复mysql 中root 用户的所有权限

今天在研究数据库的时候不小心吧root用户的权限全给关了。这就尴尬了。 找了半天的解决方案。 如果你的用grant all 无法设定某个用户的权限可以试试这个方法。 1停止mysql服务器。使用skip-grant-tables 登陆。 mysqld_safe --skip-grant-tables & mysql -uroot 2 手动修改…

数据结构51:二叉堆的python实现

目录 一、二叉堆操作的实现 二叉堆初始化 insert(key)方法 delMin()方法 一、二叉堆操作的实现 二叉堆初始化 采用一个列表来保存堆数据&#xff0c;其中表首下标为0的项无用&#xff0c;但为了后面代码可以用到简单的整数乘除法&#xff0c;仍保留它。 class BinHeap:d…