RetinaNet详解

网络结构

RetinaNet详解
这里默认333*3个anchor,图中标出以输入为672*640大小时,每层对应的尺度,以及每层对应anchor个数和每个特征层base anchor对应到原图的anchor大小.

边界框回归

在faster rcnn 中存在3个框,其中anchor, ground truth为已知固定的框, predict 为预测框

其中:

Anchor:(Ax,Ay,Aw,Ah)Anchor :(A_x,A_y,A_w,A_h)

Predict:(Px,Py,Pw,Ph)Predict :(P_x,P_y,P_w,P_h)

GroundTruth:(Gx,Gy,Gw,Gh)GroundTruth :(G_x,G_y,G_w,G_h)

目标:

边界框回归的目的即寻找一个FF,使得
F(Ax,Ay,Aw,Ah)=(Px,Py,Pw,Ph)(Gx,Gy,Gw,Gh)F(A_x,A_y,A_w,A_h) = (P_x,P_y,P_w,P_h) \approx (G_x,G_y,G_w,G_h)

方法:

  1. 平移
    Px=Awdx(A)+Ax P_x = A_w \cdot d_x(A)+A_x
    Py=Ahdy(A)+Ay P_y = A_h \cdot d_y(A) + A_y

  2. 放缩

Pw=Awedw(A) P_w = A_w \cdot e^{d_w(A)}
ph=Ahedh(A) p_h = A_h \cdot e^{d_h(A)}
当输入 anchor 和 groundtruth 相差不远可以近似使用线性回归模型转换

线性回归

d(A)=WTΦ(A) d_*(A) = W_*^T \cdot \Phi(A)

其中 =x,y,w,h* = x,y,w,h

Loss=iN(tiWTΦ(Ai))2 Loss = \sum_{i}^N (t_*^i - W_*^T \cdot \Phi(A^i))^2
其中 tt_* 为 Anchor 与 Groundtruth 的位置位移参数

tx=GxAxAw t_x = \frac {G_x - A_x}{A_w}
ty=GyAyAh t_y = \frac {G_y - A_y}{A_h}
tw=lnGwAw t_w = \ln \frac {G_w}{A_w}
th=lnGhAh t_h = \ln \frac {G_h}{A_h}

retinaNet网络回归部分学习到的参数即为tt_*

回归损失函数选择

l1 loss

  • 优点:梯度稳定
  • 缺点:中点不易求导

l2 loss

  • 优点:各点光滑
  • 缺点:误差累积,可能因为个别样本(远的样本)导致梯度爆炸

Smooth l1 loss:结合二者优缺点
Smoothl1loss(x)={0.5x2,x<1x0.5,other Smooth l1 loss(x)= \begin{cases} 0.5*x^{2}, |x|<1\\ |x|-0.5, other \end{cases}

分类损失函数选择

交叉熵损失函数:

CE=log(p) CE = -log(p)

focal loss:
FL=α(1p)γlog(p) FL = -\alpha (1-p)^{\gamma}log(p)
原理:在网络预测中,正负样本比相差大(由anchor开以推测出预测样本有几万个,而gt只有几个),并且负样本大多为简单样本,大量的简单样本损失累计会导致训练缓慢,所以对预测错误的样本添加权重,从而使简单样本损失降得更大,从而优化了训练。