针对Faster RCNN具体细节以及源码的解读之SmoothL1Loss层

从今天开始,阅读faster rcnn的相关代码,并记录我对faster rcnn中特别的层的理解。本篇主要是对smooth_L1_Loss层进行解读。
RBG大神认为CPU版本的太慢了,故有些操作CPU版压根就没有实现。smooth_L1_Loss是Faster RCNN提出来的计算距离的loss,文章中提到对噪声点更加鲁棒。
输入四个bottom,分别是predict,target,inside_weight, outside_weight.与论文并不完全一致,代码中实现的是更加general的版本。
公式为:

output=woutSmoothl1(xnew)
Smoothl1(x)=0.5(σx)2 or Smoothl1(x)=|x|0.5/σ2
xnew=xoldwin

LayerSetup
就是对记录相关参数并计算 σ2 ,并判断是否含有weights.
Resharp
就是针对diff_ , errors_ , ones_,进行reshape
Forward
先计算 win(b0b1) ,再计算 woutSmoothl1(win(b0b1)) ,最终将所有值加起来除以num得到loss。
Backward
backward的公式并不麻烦,公式如下:

Smoothl1(x)=σ2x or Smoothl1(x)=sign(x)
δlossδb0=woutwinSmoothl1(win(b0b1))
δlossδb1=woutwinSmoothl1(win(b0b1))
直接按照公式去做即可,不过有那么一点点不明白的地方,就是为什么对 b1 也求偏导呢??可能在看了AnchorTargetLayer层之后就会得到答案。

另:blog居然可以用类似与latex的版本,唉之前写的blog排版太丑了,这个好很多,也更加好用啦,哇咔咔。

你可能感兴趣的:(源码,object-det,FasterRCNN)