RCNN 这个网络,有好几个需要训练的部分,但是用到损失函数的部分就是边界框回归(bounding box regression)那里了。其实这个部分我看几篇文章讲得都挺不错的,所以我的这篇文章纯粹是当做阅读笔记来写了。
和 SSD 一样,RCNN 的边界框回归也是使用的偏移量,使用的是线性回归来构建 RCNN 的损失函数,将 AlexNet 第五个池化层输出的 4096 个特征,进行下面的运算: d ∗ ( P i ) = w ∗ T Φ ( P i ) d_*(P^i) = w^T_*\Phi(P^i) d∗(Pi)=w∗TΦ(Pi)获得预测的偏移量,其中:
也就是最后计算出来的 d ∗ ( P i ) d_*(P^i) d∗(Pi) 是一个偏移量的数值。
然后就是总的损失函数公式: L l o c ( w ∗ ) = arg min ∑ i = 0 N ( t ∗ i − w ∗ T Φ ( P i ) ) 2 + λ ∣ ∣ w ∗ ∣ ∣ 2 L_{loc}(w_*) = \arg \min \sum_{i=0}^N \left( t_*^i - w_*^T \Phi(P^i) \right)^2 + \lambda\left| |w_*| \right|^2 Lloc(w∗)=argmini=0∑N(t∗i−w∗TΦ(Pi))2+λ∣∣w∗∣∣2将其中的部分替换可以得到: L l o c ( w ∗ ) = arg min ∑ i = 0 N ( t ∗ i − d ∗ ( P i ) ) 2 + λ ∣ ∣ w ∗ ∣ ∣ 2 L_{loc} (w_*)= \arg \min \sum_{i=0}^N \left( t_*^i - d_*(P^i) \right)^2 + \lambda\left| |w_*| \right|^2 Lloc(w∗)=argmini=0∑N(t∗i−d∗(Pi))2+λ∣∣w∗∣∣2其中:
其实我们可以看出来,这个公式是一个岭回归(ridge regression)的公式
直观来看,岭回归 = 最小二乘法 + L2 Norm
我们知道最小二乘法的的目的是求最小的误差平方,是一种线性回归模型,其最优化问题可以写成: min β ∣ ∣ Y − X β ∣ ∣ 2 \min_{\beta}||\mathbf{Y}- \mathbf{X}\beta||^2 βmin∣∣Y−Xβ∣∣2而岭回归则多了一个 L2 正则项,可以写成: min β ( ∣ ∣ Y − X β ∣ ∣ 2 + λ ∣ ∣ β ∣ ∣ 2 ) \min_{\beta}\left (||\mathbf{Y}- \mathbf{X}\beta||^2 + \mathbf{\lambda}||\beta||^2 \right ) βmin(∣∣Y−Xβ∣∣2+λ∣∣β∣∣2)这两者之间有什么区别呢?
两者同为线性回归,岭回归是在最小二乘法的基础上演进的,那么问题就来到了,最小二乘法有什么缺陷,需要通过岭回归来进行弥补呢?
我们知道最小二乘法成立的解是 Y = X β \mathbf{Y} = \mathbf{X}\beta Y=Xβ,也就是 X T Y = X T X β \mathbf{X^TY} = \mathbf{X^TX}\beta XTY=XTXβ,进行移项之后就可以得到: β = ( X T X ) − 1 X T Y ) \beta=\mathbf{(X^TX)^{-1}X^TY}) β=(XTX)−1XTY)这个式子成立的条件就是 X T X \mathbf{X^TX} XTX 是可逆的,但是可逆的前提就是 X \mathbf{X} X 是满秩的。
所以第一个结论:要使用最小二乘法,一定要保证 X \mathbf{X} X 是满秩的。
但是如果 X \mathbf{X} X 不是满秩,是不是就没办法进行线性回归了,也不尽然: β = ( X T X + λ I ) − 1 X T Y ) \beta=\mathbf{(X^TX + \lambda I)^{-1}X^TY}) β=(XTX+λI)−1XTY)通过引入 单位矩阵 I \mathbf{I} I 和参数 λ \lambda λ 就可以将 X T X + λ I \mathbf{X^TX + \lambda I} XTX+λI 变成可逆的了,也就是满足最小二乘法。这也是对岭回归进行求导之后获得的结果。
也就是说,我们一般在矩阵 X \mathbf{X} X 不是满秩的时候使用岭回归来替代最小二乘法,那么又有一个问题:
什么时候矩阵 X \mathbf{X} X 会出现不是满秩的情况?
多重共线性,当数据的多个特征相互之间有某种线性关系,体现到矩阵上,就是行或者列之间存在线性关系的话,就很有可能导致矩阵不是满秩的情况(秩的计算可以自行百度一下)。
所以总结一下:如果我们的模型中,特征之间的线性相关性比较高的话,就使用岭回归来代替最小二乘法。
下面这个区别解释也挺不错的:
从多变量回归的变量选择来说,普通的多元线性回归要做的是变量的剔除和筛选,而岭回归是一种shrinkage的方法,就是收缩。这是什么意思呢, 比如做普通线性回归时候,如果某个变量t检验不显著,我们通常会将它剔除再做回归,如此往复(stepwise),最终筛选留下得到一个我们满意回归方程,但是在做岭回归的时候,我们并没有做变量的剔除,而是将这个变量的系数beta向0”收缩“,使得这个变量在回归方程中的影响变的很小。 于普通的多元线性回归相比,岭回归的变化更加smooth,或者说continuous。从这点上来说活,岭回归只是shrinkage methods中的一种,大家常说的lasso回归(貌似叫套索回归)其实也属于这种方法。
作者:亲爱的龙哥 链接:https://www.zhihu.com/question/28221429/answer/50909208
来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
这就涉及到另外一个问题了,我们知道岭回归是一种线性回归模型,问题转换一下:
为什么 bounding box regression 可以看作是线性回归?
因为中心点坐标 x , y x,y x,y 的计算公式一眼就看出来是线性函数了,所以实际上,这个问题实际上就是什么情况下 w , h w, h w,h 的 log 函数可以近似成线性的?
我们可以对 t w t_w tw 与 t h t_h th 进行一些转换: { t w = log G w P w = log G w − P w + P w P w = log ( 1 + G w − P w P w ) t h = log G h P h = log G h − P h + P h P h = log ( 1 + G h − P h P h ) \left\{\begin{matrix} t_w = \log \frac{G_w}{P_w} = \log \frac{G_w - P_w + P_w}{P_w} = \log(1 + \frac{G_w - P_w}{P_w} ) \\ t_h = \log \frac{G_h}{P_h} = \log \frac{G_h - P_h + P_h}{P_h} = \log(1 + \frac{G_h - P_h}{P_h} ) \end{matrix}\right. {tw=logPwGw=logPwGw−Pw+Pw=log(1+PwGw−Pw)th=logPhGh=logPhGh−Ph+Ph=log(1+PhGh−Ph)我们也只知道下面这个式子是成立的: lim x → 0 log ( 1 + x ) x = 1 ⇒ lim x → 0 log ( 1 + x ) = x \lim _{x\rightarrow 0} \frac{\log(1+x)}{x} = 1 \space \space \space\space\space \Rightarrow \space \space \space\space\space \lim_{x\to 0} \log(1+x) = x x→0limxlog(1+x)=1 ⇒ x→0limlog(1+x)=x也就是说,在 x x x 趋近于零的时候, 可以将 log ( 1 + x ) \log(1+x) log(1+x) 近似成 x x x。
回到上面使用 log 函数求 w , h w, h w,h 的偏移量,我们可以看出来, G w − P w P w \frac{G_w - P_w}{P_w} PwGw−Pw 与 G h − P h P h \frac{G_h - P_h}{P_h} PhGh−Ph 就相当于 x x x,当它们趋向于零的时候,也就是 G w G_w Gw 与 P w P_w Pw, G h G_h Gh 与 P h P_h Ph 几乎相同的时候,也就是 IOU 近乎 1 的时候,表示 gt box 与 region proposals 非常接近的时候。RCNN 论文中给出 IOU > 0.6 的时候,就可以将 t w t_w tw 与 t h t_h th 视为线性变换:
{ t w ≈ G w − P w P w t h ≈ G h − P h P h \left\{\begin{matrix} t_w \approx \frac{G_w - P_w}{P_w} \\ t_h \approx \frac{G_h - P_h}{P_h} \end{matrix}\right. {tw≈PwGw−Pwth≈PhGh−Ph