R-CNN(Region with CNN feature)原理
一、RCNN介绍
在b站看到一位大神up主发布的CNN原理和代码的教学视频,发现非常有帮助,于是将他所讲的内容总结了下来供大家学习讨论。
下面是up的视频、代码、博客的连接:
b站视频链接:https://space.bilibili.com/18161609/channel/index
github代码和PPT:https://github.com/WZMIAOMIAO/deep-learning-for-image-processing
up主的CSDN博客:https://blog.csdn.net/qq_37541097/article/details/103482003
引言
RCNN原论文:《Rich feature hierarchies for accurate object detection and semantic segmentation》,由Ross Girshick著,发表于 CVPR 2014。
作者Ross Girshick多次在PASCAL VOC的目标检测竞赛中折桂,曾在2010年带领团队获得终身成就奖。Ross Girshick是深度学习目标检测领域中的大牛,2014年以前都是使用传统目标检测法并进入了瓶颈期(准确率30%左右),从RCNN提出后一下子目标检测准确率提升了20%以上(50%左右),所以说R-CNN可以说是利用深度学习进行目标检测的开山之作。
二、RCNN算法步骤
RCNN目标检测算法总共分为四步:
1.将待检测图像生成1k到2k个候选区域(用Selective Search方法)
2.对每个候选区域,使用深度网络提取特征
3.将特征送入每一类的SVM分类器,判别是否属于该类
4.使用回归器精细修正候选框位置
接下来详细介绍每一步的具体原理和步骤。
1.候选区域的生成
1.1 Selective Search (SS) 算法:
传统的目标检测算法一般在图片上使用穷举法或者滑动窗口选出所有物体可能出现的区域框,对这些区域框提取特征并进行使用图像识别分类方法,得到所有分类成功的区域,最后通过非极大值抑制输出结果。
在图片上使用穷举法或者滑动窗口选出所有物体可能出现的区域框,就是在原始图片上进行不同尺度不同大小的滑窗,获取每个可能的位置。显然这么做复杂度太高,产生了很多的冗余候选区域,对于越大的图像就越容易造成维数灾难导致计算时间过大,在现实当中不可行。而SS算法的选择性搜索有效地去除冗余候选区域,使得计算量大大的减小。
选择性搜索算法:可以简单的理解为将图像分割成很多很多的小块,计算每两个相邻的区域小块的相似度,然后每次合并最相似的两块,最后得到的每一块区域都是SS算法所认为的一个完整的物体。
如何计算相似度?
基于图的图像分割方法(Graph-Based Image Segmentation),论文《Efficient Graph-Based Image Segmentation》,P. Felzenszwalb, D. Huttenlocher,International Journal of Computer Vision, Vol. 59, No. 2, September 2004
既然是聚类算法,那应该依据何种规则判定何时该合二为一,何时该继续划清界限呢?对于孤立的两个像素点,所不同的是灰度值,自然就用灰度的距离来衡量两点的相似性,比如使用RGB度量时的距离: ( r