目标检测(区域提议方法):Selective Search 从原理到源码
1、主要思想
深度学习目标检测算法有两大主要分支,一支是以 R − C N N R-CNN R−CNN 为代表的 t w o − s t a g e two-stage two−stage 类算法,一支是以 Y O L O YOLO YOLO 和 S S D SSD SSD 为代表的 o n e − s t a g e one-stage one−stage 类算法。两类算法各有优劣,通常 o n e − s t a g e one-stage one−stage 类算法速度占优, t w o − s t a g e two-stage two−stage 类算法精度占优。两者的主要区别在于是否使用 区域提议方法 提供待检测目标的大致分布区域。
R − C N N R-CNN R−CNN 系列算法主要使用了两种区域提议方法,一种是 S e l e c t i v e S e a r c h Selective~Search Selective Search 算法(简称 S S SS SS 算法),一种是基于 C N N CNN CNN 的 R P N RPN RPN 网络。基于研究的目的,本文主要讨论 S e l e c t i v e S e a r c h Selective~Search Selective Search 算法。考虑到 纸上得来终觉浅 ,本文将结合 R C N N RCNN RCNN 中 S S SS SS 算法源码,以便加深对算法的理解。
2、原理
Q : S S Q:SS Q:SS 算法怎么想到的?
目标检测大致包含两个小任务:目标定位和目标分类。直接从图像中找到目标并准确分类通常很困难。因此考虑是否能够先给出目标位置,然后在图像中的每个目标的位置进行局部分类。这样就能够将两个问题分解开来逐个击破。
Q : Q: Q: 如何获取目标位置?
首先我们可能会想到用其他更简单的检测算法来获取所有目标的大致位置,但是这种方法会使最终检测算法受限于区域提议使用的检测算法的精度和召回率。
在不使用其他检测算法定位的基础上,考虑与位置相关的视觉算法,很自然地联想到图像分割。我们可以首先将图像分割成一块块可能包含目标的区域,然后对相应的区域进行分类和修整。 S S SS SS 算法选择了 F e l z e n s w a l b Felzenswalb Felzenswalb 分割算法进行分割。
S e l e c t i v e S e a r c h Selective~Search Selective Search 算法主要有三个优势:
- 捕捉不同尺度
- 多样化
- 计算快
基于颜色、纹理、大小和形状计算区域相似度,并形成分层分组。该算法主要包含两个部分: H i e r a r c h i c a l G r o u p i n g A l g o r i t h m Hierarchical~Grouping~Algorithm Hierarchical Grouping Algorithm、 D i v e r s i f i c a t i o n S t r a t e g i e s Diversification~Strategies Diversification Strategies。以下将结合源码分别对两部分进行解读。
2.1、Hierarchical Grouping Algorithm
2.1.1、算法流程
作者使用 F e l z e n s w a l b Felzenswalb Felzenswalb 分割算法来获取初始提议区域, 使用贪心算法对区域进行迭代分组,算法流程如下:
输入: R G B RGB RGB 图像
输出: 一组目标位置提议
- 使用 F e l z e n s w a l b Felzenswalb Felzenswalb 分割算法来获取初始提议区域 R = { r 1 , r 2 , . . . r n } R=\{r_1,r_2,...r_n\} R={ r1,r2,...rn}
- 提取相邻区域
- 初始化相似度集合 S = ∅ S=\empty S=∅
对每组相邻区域
- ( r i , r j ) (r_i,r_j) (r