[R-CNN]边界框回归
在R-CNN
算法中,使用SVM
分类器对候选建议进行分类后,使用对应类别的边界框回归器(bounding-box regression
)预测其坐标偏移值,这一操作能够进一步提高检测精度
定义
假定候选建议\(P=(P_{x}, P_{y}, P_{w}, P_{h})\)(\(x,y\)表示边界框中心坐标,\(w,h\)分别表示其宽和高)都有一个对应的标注边界框\(G=(G_{x}, G_{y}, G_{w}, G_{h})\)。\(P\)可经过转换得到近似\(G\):
\[ \hat{G}_{x} = P_{w}d_{w}(P) + P_{x} \\ \hat{G}_{y} = P_{h}d_{y}(P) + P_{y} \\ \hat{G}_{w} = P_{w}exp(d_{w}(P)) \\ \hat{G}_{h} = P_{h}exp(d_{h}(P)) \]
所以关键在于如何得到转换参数\(d_{\ast}(P)\)(其中\(\ast=x,y,w,h\))。将CNN
模型最后池化层输出的特征向量(\(\varnothing_{5}(P)\))作为输入函数,进行线性建模:
\[ d_{\ast}(P) = w_{\ast}^{T} \varnothing_{5}(P) \]
利用正则化最小二乘法(岭回归,就是均方误差+L2权重衰减
)来求解该线性回归问题
\[ w_{\ast}=\argmin (\sum_{i}^{N}(t_{\ast}^{i} - \hat{w}_{\ast}^{T} \varnothing_{5}(P^{i})^{2})) + \lambda \left \| \hat{w}_{\ast} \right \|^{2} \]
其中回归目标\(t_{\ast}\)通过预先设定的\((P, G)\)计算得到
\[ t_{x} = (G_{x} - P_{x}) / P_{w} \\ t_{y} = (G_{y} - P_{y}) / P_{h} \\ t_{w} = \log(G_{w} / P_{w}) \\ t_{h} = \log(G_{h} / P_{h}) \]
边界框回归器训练
在
R-CNN
算法中,使用AlexNet
作为CNN
模型,其第5
个池化层输出256*6*6
大小特征向量,所以权重\(w\)大小为\(9216\times 4\)文章设置了候选建议和标注边界框的
IoU
阈值为>0.6
文章设置了超参数\(\lambda=1000\)
使用随机梯度下降方法训练权重\(w\),其实现参考:R-CNN/py/bbox_regression.py