华耀建设网站,深圳网站建设 乐云seo,做网站流量优化都是什么,wordpress中文变英文从rcnn#xff0c; fast rcnn, faster rcnn, yolo, r-fcn, ssd#xff0c;到cvpr的yolo9000。这些paper中损失函数都包含了边框回归#xff0c;除了rcnn详细介绍了#xff0c;其他的paper都是一笔带过#xff0c;或者直接引用rcnn就把损失函数写出来了。前三条网上解释比较…从rcnn fast rcnn, faster rcnn, yolo, r-fcn, ssd到cvpr的yolo9000。这些paper中损失函数都包含了边框回归除了rcnn详细介绍了其他的paper都是一笔带过或者直接引用rcnn就把损失函数写出来了。前三条网上解释比较多后面的两条我看了很多paper才得出这些结论。
为什么要边框回归什么是边框回归边框回归怎么做的边框回归为什么宽高坐标会设计这种形式为什么边框回归只能微调在离Ground Truth近的时候才能生效
为什么要边框回归
这里引用王斌师兄的理解如下图所示
对于上图绿色的框表示 Ground Truth, 红色的框为 Selective Search 提取的 Region Proposal。那么即便红色的框被分类器识别为飞机但是由于红色的框定位不准(IoU0.5) 那么这张图相当于没有正确的检测出飞机。 如果我们能对红色的框进行微调 使得经过微调后的窗口跟 Ground Truth 更接近 这样岂不是定位会更准确。 确实Bounding-box regression 就是用来微调这个窗口的。
边框回归是什么
对于窗口一般使用四维向量 (x,y,w,h)(x,y,w,h)(x,y,w,h) 来表示 分别表示窗口的中心点坐标和宽高。 对于下图, 红色的框 P 代表原始的 Proposal, 绿色的框 G 代表目标的 Ground Truth 我们的目标是寻找一种关系使得输入原始的窗口 P 经过映射得到一个跟真实窗口 G 更接近的回归窗口 G^\hat{G}G^。 边框回归的目的既是给定 (Px,Py,Pw,Ph)(P_{x},P_{y},P_{w},P_{h})(Px,Py,Pw,Ph) 寻找一种映射 fff 使得 f(Px,Py,Pw,Ph)(Gx^,Gy^,Gw^,Gh^)f(P_{x},P_{y},P_{w},P_{h}) (\hat{G_x},\hat{G_y},\hat{G_w},\hat{G_h})f(Px,Py,Pw,Ph)(Gx^,Gy^,Gw^,Gh^) 并且(Gx^,Gy^,Gw^,Gh^)≈(Gx,Gy,Gw,Gh)(\hat{G_x},\hat{G_y},\hat{G_w},\hat{G_h}) \approx (G_{x},G_{y},G_{w},G_{h})(Gx^,Gy^,Gw^,Gh^)≈(Gx,Gy,Gw,Gh)
边框回归怎么做的
RCNN论文Region-based Convolution Networks for Accurate Object detection and Segmentation
作者在完成了的生成候选区域——CNN提取特征——SVM进行分类以后为了进一步的提高定位效果在文章的附录C中介绍了 Bounding-box Regression 的处理。Bounding-box Regression 训练的过程中输入数据为N个训练对 (Pi,Gi),i1,2,...,N{(P^{i},G^{i})},i1,2,...,N(Pi,Gi),i1,2,...,N其中 pi(pxi,pyi,pwi,phi)p^i(p^i_x,p^i_y,p^i_w,p^i_h)pi(pxi,pyi,pwi,phi) 为proposal的位置前两个坐标表示proposal的中心坐标后面两个坐标分别表示proposal的width和height而 Gi(Gx,Gy,Gw,Gh)G^i(G_x,G_y,G_w,G_h)Gi(Gx,Gy,Gw,Gh) 表示groundtruth的位置 regression的目标就是学会一种映射将P转换为G。
那么经过何种变换才能从上图中的窗口 P 变为窗口 G^\hat{G}G^ 呢 比较简单的思路就是: 平移尺度放缩
作者设计了四种坐标映射方法其中前两个表示对 proposal 中心坐标的尺度不变的平移变换后面两个则是对 proposal 的 width 和 height 的对数空间的变换
先做平移 (Δx,Δy)(\Delta x,\Delta y)(Δx,Δy) ΔxPwdx(P),ΔyPhdy(P)\Delta x P_{w}d_{x}(P),\Delta y P_{h}d_{y}(P)ΔxPwdx(P),ΔyPhdy(P) 这是R-CNN论文的(d∗(P)w∗TΦ5(P)t∗d_{ \ast }(P) w_{ \ast }^{T}\Phi _{5}(P)t_{ \ast }d∗(P)w∗TΦ5(P)t∗)
G^xPwdx(P)Px,(1)\hat{G}_{x} P_{w}d_{x}(P) P_{x},\text{(1)}G^xPwdx(P)Px,(1)
G^yPhdy(P)Py,(2)\hat{G}_{y} P_{h}d_{y}(P) P_{y},\text{(2)}G^yPhdy(P)Py,(2)
然后再做尺度缩放 (Sw,Sh)(S_{w},S_{h})(Sw,Sh), Swexp(dw(P)),Shexp(dh(P))S_{w} exp(d_{w}(P)),S_{h} exp(d_{h}(P))Swexp(dw(P)),Shexp(dh(P)), 对应论文中
G^wPwexp(dw(P)),(3)\hat{G}_{w} P_{w}exp(d_{w}(P)),\text{(3)}G^wPwexp(dw(P)),(3)
G^hPhexp(dh(P)),(4)\hat{G}_{h} P_{h}exp(d_{h}(P)),\text{(4)}G^hPhexp(dh(P)),(4)
观察(1)-(4)我们发现 边框回归学习就是 dx(P),dy(P),dw(P),dh(P)d_{x}(P),d_{y}(P),d_{w}(P),d_{h}(P)dx(P),dy(P),dw(P),dh(P)这四个变换。下一步就是设计算法那得到这四个映射。
线性回归就是给定输入的特征向量 X, 学习一组参数 W, 使得经过线性回归后的值跟真实值 Y(Ground Truth)非常接近. 即 Y≈WXY \approx WXY≈WX 。 那么 Bounding-box 中我们的输入以及输出分别是什么呢
Input:
RegionProposal→P(Px,Py,Pw,Ph)RegionProposal\rightarrow P (P_{x},P_{y},P_{w},P_{h})RegionProposal→P(Px,Py,Pw,Ph)这个是什么 输入就是这四个数值吗不是其实真正的输入是这个窗口对应的 CNN 特征也就是 R-CNN 中的 Pool5 feature特征向量。 (注训练阶段输入还包括 Ground Truth 也就是下边提到的 t∗(tx,ty,tw,th)t_{ \ast } (t_{x},t_{y},t_{w},t_{h})t∗(tx,ty,tw,th)
Output:
outpue 为需要进行的平移变换和尺度缩放 dx(P),dy(P),dw(P),dh(P)d_{x}(P),d_{y}(P),d_{w}(P),d_{h}(P)dx(P),dy(P),dw(P),dh(P) 或者说是 Δx,Δy,Sw,Sh\Delta x,\Delta y,S_{w},S_{h}Δx,Δy,Sw,Sh 。 我们的最终输出不应该是 Ground Truth 吗 是的 但是有了这四个变换我们就可以直接得到 Ground Truth。
这里有个问题需要注意 根据(1)~(4)我们可以知道 P 经过 dx(P),dy(P),dw(P),dh(P)d_{x}(P),d_{y}(P),d_{w}(P),d_{h}(P)dx(P),dy(P),dw(P),dh(P) 得到的并不是真实值 G 而是预测值 G^\hat{G}G^。
在训练时这四个值 Δx,Δy,Sw,Sh\Delta x,\Delta y,S_{w},S_{h}Δx,Δy,Sw,Sh 的真实值应该是经过 Ground Truth 和 Proposal 计算得到的真正需要的平移量 (tx,ty)(t_{x},t_{y})(tx,ty) 和尺度缩放 (tw,th)(t_{w},t_{h})(tw,th) 。 这也就是 R-CNN 论文中的(6)~(9)
tx(Gx−Px)/Pw,(6)t_{x} (G_{x}−P_{x})/ P_{w},(6)tx(Gx−Px)/Pw,(6)
ty(Gy−Py)/Ph,(7)t_{y} (G_{y}−P_{y})/ P_{h},(7)ty(Gy−Py)/Ph,(7)
twlog(Gw/Pw),(8)t_{w} \log (G_{w}/ P_{w}),(8)twlog(Gw/Pw),(8)
thlog(Gh/Ph),(9)t_{h} \log (G_{h}/ P_{h}),(9)thlog(Gh/Ph),(9)
目标函数
目标函数可以表示为 d∗(P)w∗TΦ5(P)d_{ \ast }(P) w_{ \ast }^{T}\Phi _{5}(P)d∗(P)w∗TΦ5(P) Φ5(P)\Phi _{5}(P)Φ5(P) 是输入 Proposal 的特征向量w∗w_{ \ast }w∗是要学习的参数*表示 x,y,w,h 也就是每一个变换对应一个目标函数 , d∗(P)d_{ \ast }(P)d∗(P) 是得到的预测值。 我们要让预测值跟真实值 t∗(tx,ty,tw,th)t_{ \ast } (t_{x},t_{y},t_{w},t_{h})t∗(tx,ty,tw,th)差距最小 得到损失函数为
Loss∑iN(t∗i−w^∗Tϕ5(Pi))2.Loss \sum \limits_{i}^{N}(t_{ \ast }^{i}−\hat{w}_{ \ast }^{T}\phi _{5}(P^{i}))^2.Lossi∑N(t∗i−w^∗Tϕ5(Pi))2.
函数优化目标为
W∗argminw∗∑iN(t∗i−w^∗Tϕ5(Pi))2λ∣∣w^∗∣∣2.W_{ \ast } argmin_{w_{ \ast }} \sum \limits_{i}^{N}(t_{ \ast }^{i}−\hat{w}_{ \ast }^{T}\phi _{5}(P^{i}))^2 \lambda ||\hat{w}_{ \ast }||^2.W∗argminw∗i∑N(t∗i−w^∗Tϕ5(Pi))2λ∣∣w^∗∣∣2.
利用梯度下降法或者最小二乘法就可以得到 w∗w_{ \ast }w∗。
最终在进行实验时lambda 1000, 同时作者发现同一对中P和G相距过远时通过上面的变换是不能完成的而相距过远实际上也基本不会是同一物体因此作者在进行实验室对于 pair(P,G) 的选择是选择离P较近的G进行配对这里表示较近的方法是需要P和一个G的最大的IoU要大于0.6,否则则抛弃该P。
为什么宽高尺度会设计这种形式
重点解释一下为什么设计的 tx,tyt_{x},t_{y}tx,ty为什么除以宽高为什么 tw,tht_{w},t_{h}tw,th会有log形式
首先CNN具有尺度不变性 以下图为例
x,y 坐标除以宽高
上图的两个人具有不同的尺度因为他都是人我们得到的特征相同。假设我们得到的特征为 ϕ1,ϕ2\phi _{1},\phi _{2}ϕ1,ϕ2那么一个完好的特征应该具备 ϕ1ϕ\phi _{1} \phiϕ1ϕ。ok如果我们直接学习坐标差值以x坐标为例xi,pix_{i},p_{i}xi,pi 分别代表第i个框的x坐标学习到的映射为 fff, f(ϕ1)x1−p1f(\phi _{1}) x_{1}−p_{1}f(ϕ1)x1−p1同理 f(ϕ2)x2−p2f(\phi _{2}) x_{2}−p_{2}f(ϕ2)x2−p2。从上图显而易见x1−p1≠x2−p1x_{1}−p_{1} \neq x_{2}−p_{1}x1−p1x2−p1。也就是说同一个x对应多个y这明显不满足函数的定义。边框回归学习的是回归函数然而你的目标却不满足函数定义当然学习不到什么。
宽高坐标Log形式
我们想要得到一个放缩的尺度也就是说这里限制尺度必须大于0。我们学习的 tw,tht_{w},t_{h}tw,th怎么保证满足大于0呢直观的想法就是EXP函数如公式(3), (4)所示那么反过来推导就是Log函数的来源了。
为什么IoU较大认为是线性变换
当输入的 Proposal 与 Ground Truth 相差较小时(RCNN 设置的是 IoU0.6) 可以认为这种变换是一种线性变换 那么我们就可以用线性回归来建模对窗口进行微调 否则会导致训练的回归模型不 work当 Proposal跟 GT 离得较远就是复杂的非线性问题了此时用线性回归建模显然不合理。这里我来解释
Log函数明显不满足线性函数但是为什么当Proposal 和Ground Truth相差较小的时候就可以认为是一种线性变换呢大家还记得这个公式不参看高数1。
limx0log(1x)xlim_{x 0}log(1 x) xlimx0log(1x)x
现在回过来看公式(8):
twlog(Gw/Pw)log(GwPw−PwPw)log(1Gw−PwPw)t_{w} \log (G_{w}/ P_{w}) log(\frac{G_{w} P_{w}−P_{w}}{P_{w}}) log(1 \frac{G_{w}−P_{w}}{P_{w}})twlog(Gw/Pw)log(PwGwPw−Pw)log(1PwGw−Pw)
当且仅当 Gw−Pw0G_{w}−P_{w}0Gw−Pw0的时候才会是线性函数也就是宽度和高度必须近似相等。
对于IoU大于指定值这块我并不认同作者的说法。我个人理解只保证Region Proposal和Ground Truth的宽高相差不多就能满足回归条件。x,y位置到没有太多限制这点我们从YOLOv2可以看出原始的边框回归其实xy的位置相对来说对很大的。这也是YOLOv2的改进地方。