RCNN : Rich feature hierarchies for accurate object detection and semantic segmentation ;Proceedings of the IEEE conference on computer vision and pattern recognition. 2014.
RCNN 主要步骤:
- 一张图像生成1K~2K个候选区域 ;
- 对每个候选区域,使用卷积神经网络进行提取特征 ;
- 每个候选区域所提取的特征送入每一类的SVM 分类器进行分类,判别是否属于该类 ;
- 使用边框回归修正候选框位置 ;
下面逐一介绍;
1、图片使用Selective search来选取2K到3K的候选框;
思路如下:
- 分割,把图像分割成一块一块的小区域;
- 将这些小区域合并,先合并可能性最高的两个区域,直到合并出一个区域位置;
- 输出曾经合并得到的区域位置,就是最后得到的候选框;
那么如何合并呢?可以根据颜色直方图、梯度直方图等等。这边不介绍了!
2、对每个候选区域,使用卷积神经网络进行提取特征 ;
根据上面的图我们可以看出,每一个候选框进去神经网络之前需要经过 warped ,使候选区域的输入都统一化到 224x224。这会引起失真,理由不明觉厉!提取特征的网络不介绍了!
3、每个候选区域所提取的特征送入每一类的SVM 分类器进行分类,判别是否属于该类 ;
分类器:每个框提取的特征对于每一类目标而言,都使用一个SVM二分类来进行判别,判断是不是属于这个类。因为很多框,势必有很多负样本,所以采用了 hard negative mining 方法。设定正样本:本类的真值标定框;标定负样本:每一个候选框,与每一类真实框的重叠IOU小于0.3,则认为是负样本。
4、使用边框回归修正候选框位置 ;
很多的论文中都用到了边框回归,但是只有RCNN中详细介绍了边框回归,个人觉得这也是我将这篇论文解读的最大动力!
所以接下来的重点就是边框回归!
什么是边框回归?
参考链接:https://blog.****.net/qq_21033779/article/details/80536736
对于目标检测里面的不管预测框(锚点)还是真实框,一般使用(x,y,w,h)来表示,(x,y)表示框的中心点,w,h表示宽和高。
这边注意的是:这个P是Region Proposal,真实输入的是这个Region Proposal 对应的卷积层的特征。G表示训练时候标定的真实框(Ground Truth)。这个预测的GT是映射到原图的检测框。
边框回归的目的:通过边框回归函数使预测的框更加接近真实框。也就是:给定P(x,y,w,h),通过一个映射函数f,使f(P(x,y,w,h))=G"(x,y,w,h),这个G"(x,y,w,h)和真实框 G(x,y,w,h)足够相似。、
为什么要做边框回归?
图片链接:https://blog.****.net/zijin0802034/article/details/77685438
绿色的框是真实框,而红色的框是RCNN选的后取框。这个红色的框是不准的(因为IOU的判定大于0.7,才会判定是飞机),所以这个框没有正确的检测出飞机。但是如果找到一个函数对这个红色的框进行微调,使它与真实框更加接近,那么就会IOU>0.7,这样定位就会更准确。
如何做边框回归:平移+尺度变换
Bounding Box Regression给定输入特征 X,学习一组参数 W,经过变换之后跟真实框非常接近。
输入的是:Region Proposal的特征;
输出的是:候选框要进行的平移和缩放 (Δx,Δy,Sw,Sh)。这边也可以说(dx(P),dy(P),dw(p),dh(P))。
要学习的是权值矩阵W,以使候选框进行(Δx,Δy,Δw,Sh)(Δx,Δy,Sw,Sh)变换后,尽可能和Ground Truth接近。
①先平移,得:
(Δx,Δy),这边Δx=Pwdx(P),Δy=Phdy(P),PwΔx=dxdp,也就是Δx∗dx=Pw∗dp,Δy类似!
Gx"=Pwdx(P)+PxGy"=Phdy(P)+Py②做尺度变换(Sw,Sh),得:
取Sw=exp(dw(P)),Sh=exp(dh(P)),那么:
Gw"=Pw∗exp(dw(P))Gh"=Ph∗exp(dh(P))所以说:边框回归就是学习dx(P),dy(P),dw(P),dh(P)。在RCNN的最后一层全连接层(后期出来的SS,模型等是在特征图)上面进行边框回归,输入的是P的特征,要学习的是该全连接层的参数W,使输出的预测框接近真实框。
然后边框回归的损失函数
Region Proposal 经过上诉变换可以得到预测框G",预测框与真实框要足够接近,这个接近距离被设计为损失函数。损失函数的目的:训练得到一个权重,输入框的特征向量,经过这一层,得到一个与最佳框最小误差的预测框。怎么足够接近呢?也就是Regional Proposal到真实框变换(tx,ty,tw,th)与上诉Regional Proposal到预测框的变换差距足够小。那么Region Proposal 到 真实框 的偏移量(tx,ty)和缩放尺寸(Sw,Sh) 可以计算为:
tx=Pw(Gx−Px)ty=Ph(Gy−Py)tw=log(PwGw)th=log(PhGh)
那么Loss设计为这样:
这边前面的 t∗表示上诉的(tx,ty,tw,th),而后面的W表示回归层的权重,ϕ5(Pi)表示输入框的特征向量,那么相乘表示预测框。训练让这个Loss最小就好啦!(这边是候选框,基于回归的那边大部分是提前订好某个特征图上每个像素点预测几个框,映射到原图上框很密集,个人认为那就是密集抽样!)
细节说明
偏移量除以宽高,缩放比有个log:
CNN具有尺度不变性(也就是不管这个图片大小尺寸),只要是同一张,卷积神经网络提取的特征应该是相同的。我个人理解是特征图上除以宽高,再乘以感受野(也就是相对原图的缩放比例),方便映射到原图上!缩放比:我们想要得到一个放缩的尺度,也就是说这里限制尺度必须大于0。我们学习的tw,th怎么保证满足大于0呢?直观的想法就是exp()函数。
参考链接:
- https://blog.****.net/weixin_34025151/article/details/87337738
- https://www.cnblogs.com/wangguchangqing/p/10393934.html
- https://blog.****.net/zijin0802034/article/details/77685438
- https://blog.****.net/shenxiaolu1984/article/details/51066975