深度学习中的object detection——R-CNN\fast R-CNN、faster R-CNN
YouTube讲解视频
因为做回归任务的时候需要指定画几个框,但是我们在做物体检测的时候实现不知道需要画几个框。
不能用回归来做。
Region proposals
在这里,我们不再用sliding window的方式在图像上进行滑动,而是直接给出这个区域上可能出现的物体,找到一些建议框。
Delective Search
原理:根据图片的纹理或者一些规律,把图片分成不同的小区域,然后在一定范围内进行merge操作,得到第二幅图片,然后继续进行merge操作,得到了最后的有实际意义的框。
通过region proposal的操作知道了大概2k个候选框,然后对这些大小不一的框进行resize操作,再通过一个CNN对图片进行特征提取,最后从CNN中得到一些向量,之后用传统的方法进行分类,比如:SVM。
R-CNN的操作步骤
1、下载训练好的模型;
2、对模型进行微调。将原理全连接层输出的尺寸变成我们要做的20个目标检测和背景的识别,改成4096×21的。
3、把池化后采样的特征保存到磁盘上;
4、用二分类的SVM进行分类。那么光分类就需要20个SVM。
5、分别用保存下来的特征,第4步做了分类,这1步训练一个回归模型来定位。
经典的训练集
R-CNN是用PASCAL训练集来进行训练的。
R-CNN的缺点
1、训练时间长,没有做卷积的权重共享;
2、网络结果太复杂;
3、没有整合成一条线。
Fast R-CNN
首先,先对图像selective search找出候选框后,后面加一个CNN,便于对参数共享。
用全连接层做两个分支,一部分做回归,一部分用分类,再用两个加起来的loss对后向传播调整参数。
R-CNN与fast R-CNN对比
Faster R-CNN
因为fast R-CNN是分了两步,找候选框的时候花费的时间是2秒,而找到框之后测试的时候的速度是0.32秒,因此,在此基础上,将selective search的步骤也能够改进,再次提速。
将挑选候选框的步骤整合到网络中来,先将输入图像通过一个CNN,利用最后一层提取出来的特征进行region proposal操作,即RPN层,找完框之后就可以做分类和回归的任务。
改进
在最后一层卷积的特征图上做一个滑动窗口,找到我们需要的一系列的框,对于一个滑动窗口,它是3×3大小的,在它上面生成n个anchors(原始代码中n为9),即生成9种不同尺寸的候选框。为了保持生成的特征维度保持一样,就需要把9个大小不一的框映射成尺寸一致的特征图,这里用到了ROI-POOLING,即对于这9个框进行特征压缩,压缩成固定大小,再完成后续的任务。
可以看出,Faster R-CNN运行速度更快,且分类效果不变。