利用神经网络进行目标检测,目前已经有很多方法,从RCNN到Fast-R-CNN再到Faster-R-CNN。YOLO SSD等等。本文主要记录一下RCNN、Fast-R-CNN、Faster-R-CNN的学习。
RCNN
在原始图片上利用RIO(Regions of Interest )进行处理。
- 在原始图片上使用selective search 搜索待检测区域,第一步是提取到2000个区域。(selective search使用区域划分方法,将图片划分成很小的区域,再通过相似度和区域大小进行聚合,在不同的颜色空间下计算。)
- 分别对2000个区域通过卷积提取特征并输出到全连接层
- 全连接层分别进行Bbox 回归,SVM的分类
(Bbox 回归:例如样本图片上A区域是标记是目标物 坐标(1,1,5,5) Bbox回归用于坐标位置的更新,SVM用于分类是否是目标物)
优化点:
1.2000个特征是独立进行CNN的,需要提取2000次特征。
2.对于原始图片需要非常多的候选区域
FAST R-CNN
在特征图上提取目标。
- 对输入图片进行卷积提取特征(例如fast r-cnn使用vgg16的conv5生成特征图)
- 特征图通过卷积后的特征映射得到ROI,并通过Rol Pooling对特征图转换成相同大小
- 因为特征图都被转为相同大小,进而就可以一起输出到全连接层进行回归和分类的任务了。
此处提一下SPP网络
spp网络引入了特征图pooling的方法,将特征图转成相同大小。
(Rol Pooling:对于特征块可能存在不同大小,通过该Pooling使得大小一致,即可统一处理了)
优化点:
区域选择依赖选择性搜索,该算法只能在cpu运行且速度慢。测试中预测需要2.3s,确定2000个区域则需要2s
Faster R-CNN
Faster R-CNN相比较Fast R-CNN主要优化了使用深层网络RPN确定区域代替Selective Search。
- 相同处理方式原图像首先通过CNN得到特征图
- 再通过RPN得到特征图块,由下图可以看到对于第一步特征图,使用一个滑动窗生成anchor。每个特征图中的点都会生成长宽大小不一的特征块,三种面积,三种长宽比,所以共有9种。例如对于4060的特征图,总共产生4060*9=21600个。
对于2w个框处理方式:
1.越界的框 去除 例如剩余约6000
2.NMS(非极大抑制)重叠的选择可能性>0.7 例如剩余约2000
3.按照是不是物体可能性倒序取top128个为前景,再取负例背景128个,共256个。
- - 有了以上的步骤就是进行分类任务。