[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

相关阅读