【目标检测入门】损失函数设计

先验框与ground truth box的匹配策略

之前分配了许多先验框,我们要想让其预测类别和目标框信息,先要知道每个先验框和哪个目标对应,从而才能判断预测的是否准确,从而将训练进行下去。

不同方法的ground truth boxes 与先验框的匹配策略大致都是类似的,但是细节会有所不同。这里采用SSD中的匹配策略,具体如下:

  • 对于每一个ground truth box,找与之计算的IoU最大的先验框,这样保证了每一个ground truth box都一定与一个先验框对应。
  • 对上一步剩下的没有配对的先验框,每一个都与任意一个ground truth box尝试配对:二者的IoU大于阈值,则这个先验框与这个ground truth box对应.这样每个先验框可能有多个ground truth box满足条件,这时只与IoU最大的那个ground truth box匹配

之所以需要第二步是因为一个图片中ground truth是非常少的,而先验框却很多,如果仅按第一个原则匹配,很多先验框会是负样本,正负样本极其不平衡。

注意:第二个原则一定在第一个原则之后进行,仔细考虑一下这种情况,如果某个ground truth所对应最大IOU的先验框小于阈值,并且所匹配的先验框却与另外一个ground truth的IOU大于阈值,那么该先验框应该匹配谁,答案应该是前者,首先要确保每个ground truth一定有一个先验框与之匹配。

用一个示例来说明上述的匹配原则:
在这里插入图片描述
图像中有7个红色的框代表先验框,黄色的是ground truths,在这幅图像中有三个真实的目标。按照前面列出的步骤将生成以下匹配项:
在这里插入图片描述

损失函数

将总体的目标损失函数定义为 定位损失(loc)和置信度损失(conf)的加权和:
L ( x , c , l , g ) = 1 N ( L c o n f ( x , c ) + α L l o c ( x , l , g ) ) ( 1 ) L(x,c,l,g) = \frac{1}{N}(L_{conf}(x,c)+\alpha L_{loc} (x,l,g)) (1) L(x,c,l,g)=N1(Lconf(x,c)+αLloc(x,l,g))(1)
其中N是匹配到GT(Ground Truth)的prior bbox数量,如果N=0,则将损失设为0;而 α 参数用于调整confidence loss和location loss之间的比例,默认 α=1

confidence loss是在多类别置信度©上的softmax loss,公式如下:

L c o n f ( x , c ) = − ∑ i ∈ P o s N x i j p l o g ( c ^ i p ) − ∑ i ∈ N e g l o g ( c ^ i 0 ) W h e r e c ^ i p = e x p ( c i p ) ∑ p e x p ( c i p ) ( 2 ) L_{conf}(x,c) = -\sum_{i \in Pos}^N x^{p}_{ij} log(\hat{c}^{p}_{i}) - \sum_{i \in Neg} log(\hat{c}^{0}_{i}) Where \hat{c}^{p}_{i} = \frac{exp(c^{p}_{i})}{\sum_p exp(c^{p}_{i})} (2) Lconf(x,c)=iPosNxijplog(c^ip)iNeglog(c^i0)Wherec^ip=pexp(cip)exp(cip)(2)

其中i指代搜索框序号,j指代真实框序号,p指代类别序号,p=0表示背景。其中 x i j p = { 1 , 0 } x^{p}_{ij}=\left\{1,0\right\} xijp={ 1,0} 中取1表示第i个prior bbox匹配到第 j 个GT box,而这个GT box的类别为 p 。 C i p C^{p}_{i} Cip 表示第i个搜索框对应类别p的预测概率。此处有一点需要关注,公式前半部分是正样本(Pos)的损失,即分类为某个类别的损失(不包括背景),后半部分是负样本(Neg)的损失,也就是类别为背景的损失。

而location loss(位置回归)是典型的smooth L1 loss

在这里插入图片描述
在这里插入图片描述
smooth L1在x较小时,对x的梯度也会变小,而在x很大时,对x的梯度的绝对值达到上限 1,也不会太大以至于破坏网络参数,也就是:

  • 当预测框与 ground truth 差别过大时,梯度值不至于过大;
  • 当预测框与 ground truth 差别很小时,梯度值足够小。
    L l o c ( x , l , g ) = ∑ i ∈ P o s m ∈ { c x , c y , w , h } N ∑ x i j k s m o o t h L 1 ( l i m − g ^ j m ) ( 3 ) L_{loc}(x,l,g) = \sum_{i \in Pos m \in \left\{c_x,c_y,w,h\right\}}^N \sum x^{k}_{ij} smooth_{L1}(l^{m}_{i}-\hat{g}^{m}_{j}) (3) Lloc(x,l,g)=iPosm{ cx,cy,w,h}NxijksmoothL1(limg^jm)(3)

g ^ j c x = ( g j c x − d i c x ) / d i w \hat{g}^{c_x}_{j}=(g^{c_x}_{j}-d^{c_x}_{i})/d^{w}_{i} g^jcx=(gjcxdicx)/diw

g ^ j c y = ( g j c y − d i c y ) / d i h \hat{g}^{c_y}_{j}=(g^{c_y}_{j}-d^{c_y}_{i})/d^{h}_{i} g^jcy=(gjcydicy)/dih

g ^ j w = l o g ( g j w d i w ) \hat{g}^{w}_{j}=log(\frac{g^{w}_{j}}{d^{w}_{i}}) g^jw=log(diwgjw)

g ^ j h = l o g ( g j h d i h ) \hat{g}^{h}_{j}=log(\frac{g^{h}_{j}}{d^{h}_{i}}) g^jh=log(dihgjh)

其中,l为预测框,g为ground truth。(cx,xy)为补偿(regress to offsets)后的默认框d的中心,(w,h)为默认框的宽和高。更详细的解释:
在这里插入图片描述

Hard negative mining(难例挖掘)

值得注意的是,一般情况下negative prior bboxes数量 >> positive prior bboxes数量,直接训练会导致网络过于重视负样本,预测效果很差。为了保证正负样本尽量平衡,我们这里使用SSD使用的在线难例挖掘策略(hard negative mining),即依据confidience loss对属于负样本的prior bbox进行排序,只挑选其中confidience loss高的bbox进行训练,将正负样本的比例控制在positive:negative=1:3。其核心作用就是只选择负样本中容易被分错类的困难负样本来进行网络训练,来保证正负样本的平衡和训练的有效性。

举个例子:假设在这 441 个 prior bbox 里,经过匹配后得到正样本先验框P个,负样本先验框 441−P 个。将负样本prior bbox按照prediction loss从大到小顺序排列后选择最高的M个prior bbox。这个M需要根据我们设定的正负样本的比例确定,比如我们约定正负样本比例为1:3时。我们就取M=3P,这M个loss最大的负样本难例将会被作为真正参与计算loss的prior bboxes,其余的负样本将不会参与分类损失的loss计算。

猜你喜欢

转载自blog.csdn.net/i0o0iW/article/details/111565732