为什么要采用回归器?回归器是什么有什么用?如何进行操作?
首先要明确目标检测不仅是要对目标进行识别,还要完成定位任务,所以最终获得的bounding-box也决定了目标检测的精度。
这里先解释一下什么叫定位精度:定位精度可以用算法得出的物体检测框与实际标注的物体边界框的IoU值来近似表示。
如下图所示,绿色框为实际标准的卡宴车辆框,即Ground Truth;黄色框为selective search算法得出的建议框,即Region Proposal。即使黄色框中物体被分类器识别为卡宴车辆,但是由于绿色框和黄色框IoU值并不大,所以最后的目标检测精度并不高。采用回归器是为了对建议框进行校正,使得校正后的Region Proposal与selective search更接近, 以提高最终的检测精度。论文中采用bounding-box回归使mAP提高了3~4%。
那么问题来了,回归器如何设计呢?
如上图,黄色框口P表示建议框Region Proposal,绿色窗口G表示实际框Ground Truth,红色窗口G^表示Region Proposal进行回归后的预测窗口,现在的目标是找到P到G^的线性变换【当Region Proposal与Ground Truth的IoU>0.6时可以认为是线性变换】,使得G^与G越相近,这就相当于一个简单的可以用最小二乘法解决的线性回归问题,具体往下看。
让我们先来定义P窗口的数学表达式:Pi=(Pix,Piy,Piw,Pih),其中(Pix,Piy)表示第一个i窗口的中心点坐标,Piw,Pih分别为第i个窗口的宽和高;G窗口的数学表达式为:Gi=(Gix,Giy,Giw,Gih);G^窗口的数学表达式为:G^i=(G^ix,G^iy,G^iw,G^ih)。以下省去i上标。
这里定义了四种变换函数,dx(P),dy(P),dw(P),dh(P)。dx(P)和dy(P)通过平移对x和y进行变化,dw(P)和dh(P)通过缩放对w和h进行变化,即下面四个式子所示:
G^x=Pwdx(P)+Px(1)
G^y=Phdy(P)+Py(2)
G^w=Pwexp(dw(P))(3)
G^h=Phexp(dh(P))(4)
每一个d?(P)【*表示x,y,w,h】都是一个AlexNet CNN网络Pool5层特征?5(P)的线性函数,即d?(P)=wT??5(P) ,这里wT?就是所需要学习的回归参数。损失函数即为:
Loss=argmin∑i=0N(ti??w^T??5(Pi))2+λ||w^?||2(5)
损失函数中加入正则项λ||w^?||2 是为了避免归回参数wT?过大。其中,回归目标t?由训练输入对(P,G)按下式计算得来:
tx=(Gx?Px)/Pw(6)
ty=(Gy?Py)/Ph(7)
tw=log(Gw/Pw)(8)
th=log(Gh/Ph)(9)
①构造样本对。为了提高每类样本框回归的有效性,对每类样本都仅仅采集与Ground Truth相交IoU最大的Region Proposal,并且IoU>0.6的Region Proposal作为样本对(Pi,Gi),一共产生20对样本对【20个类别】;
②每种类型的回归器单独训练,输入该类型样本对N个:{(Pi,Gi)}i=1?N以及Pii=1?N所对应的AlexNet CNN网络Pool5层特征?5(Pi)i=1?N;
③利用(6)-(9)式和输入样本对{(Pi,Gi)}i=1?N计算ti?i=1?N;
④利用?5(Pi)i=1?N和ti?i=1?N,根据损失函数(5)进行回归,得到使损失函数最小的参数wT?。