DataWhale计算机视觉实践(目标检测)Task02
文章目录
文中图片和部分内容、代码转自:动手学CV-Pytorch
目标检测
一、损失函数
1. Matching strategy(匹配策略)
在上一部分内容中,分配了许多prior bboxes,要想让他们去预测类别和目标框信息,那就需要先知道每个prior bbox和哪个目标对应,从而才能判断预测的是否准确,从而将训练进行下去。
- SSD匹配策略:
- 第一个原则:从ground truth box出发,寻找与每一个ground truth box有最大的jaccard overlap(交互比)的prior bbox,这样能够保证每一个ground truth box一定与一个prior bbox对应起来。如果一个prior bbox没有与任何ground truth进行匹配,那么该prior bbox只能与背景匹配,也就是负样本。但是一个图片中ground truth是非常少的,按该原则去匹配,则会出现很多prior bbox是负样本,正负样本的数量极其不平衡。
- 第二个原则:同第一个原则相反,第二原则是从prior bbox出发,与任意一个ground truth box尝试配对,只要两者之间的jaccard overlap大于阈值(一般为0.5),那么该prior bbox 也与这个ground truth box进行匹配。这样意味着一个ground truth box可能会和多个prior box匹配。但是反过来不可以,一个prior bbox只能匹配一个ground truth box,如果一个prior bbox与多个ground truth box的IOU大于阈值,那么只取IOU最大的那个ground truth box进行匹配。
如上图所示,图像中有7个红色的框表示prior bbox,黄色的是ground truth box,这幅图像中有三个真实的目标,按照前面两个原则的步骤,将会生成以下匹配项:
2. 损失函数:
- 总体的目标损失函数定义为定位损失(loc)和置信度损失(conf)的加权和:
L ( x , c , l , g ) = 1 N ( L c o n f ( x , c ) + α L l o c ( x , l , g ) ) L(x,c,l,g) = \frac{1}{N}(L_{conf}(x,c) + \alpha L_{loc}(x,l,g)) L(x,c,l,g)=N1(Lconf(x,c)+αLloc(x,l,g))
其中,N是匹配到GT(ground Truth)的prior bbox数量,如果 N = 0 N=0 N=0,则将损失设为0,;而 α \alpha α参数用于调整confidence loss(置信度损失)和locatiion loss(定位损失)之间的比例,默认为 α = 1 \alpha=1 α=1。
- 置信度损失(confidence loss)是在多类别置信度(c)上的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 ) L_{conf}(x,c) = -\sum_{i \in P_{os}}^N x^p_{ij}log(\hat{c}_i^p) - \sum_{i \in N_{eg}}log(\hat{c}^0_i) Lconf(x,c)=−i∈Pos∑Nxijplog(c^ip)−i∈Neg∑log(c^i0)
w h e r e c ^ i p = e x p ( c i p ) ∑ p e x p ( c i p ) where\ \ \hat{c}_i^p = \frac{exp(c_i^p)}{\sum_pexp(c_i^p)} where c^ip=∑pexp(cip)exp(cip)
其中,i指代搜索框序号,j指代真实框序号,p指代类别序号,
p
=
0
p=0
p=0表示背景。其中
x
i
j
p
=
1
,
0
x_{ij}^p={1,0}
xijp=1,0中取1表示第i个prior bbox匹配到第j个GT box,二这个GT box的类别为p。
c
i
p
c_i^p
cip表示第i个搜索框对应类别p的预测概率。
因此,该公式的前半部分
−
∑
i
∈
P
o
s
N
x
i
j
p
l
o
g
(
c
^
i
p
)
-\sum_{i \in P_{os}}^N x^p_{ij}log(\hat{c}_i^p)
−∑i∈PosNxijplog(c^ip)是正样本的损失,即分类为某个类别的损失(不包括背景),后半部分
−
∑
i
∈
N
e
g
l
o
g
(
c
^
i
0
)
- \sum_{i \in N_{eg}}log(\hat{c}^0_i)
−∑i∈Neglog(c^i0)是负样本(Neg)的损失,即背景损失。
- 定位损失(位置回归location loss)是典型的smooth L1 loss:
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 ) L_{loc}(x,l,g) = \sum^N_{i \in P_{os},\ m \in {c_x,c_y,w,h}} \sum x^k_{ij} smooth_{L1}(l_i^m-\hat{g}_j^m) Lloc(x,l,g)=i∈Pos, m∈cx,cy,w,h∑N∑xijksmoothL1(lim−g^jm)
g ^ j c x = g j c x − d i c x d i w \hat{g}_j^{c_x} = \frac{g_j^{c_x} - d_i^{c_x}}{d_i^w} g^jcx=diwgjcx−dicx
g ^ j c y = g j c y − d i c y d i h \hat{g}_j^{c_y} = \frac{g_j^{c_y} - d_i^{c_y}}{d_i^h} g^jcy=dihgjcy−dicy
g ^ j w = l o g ( g j w d i w ) \hat{g}_j^w = log(\frac{g_j^w}{d_i^w}) g^jw=log(diwgjw)
g ^ j h = l o g ( g j h d i h ) \hat{g}_j^h = log(\frac{g_j^h}{d_i^h}) g^jh=log(dihgjh)
其中,l为预测框,g为ground truth box。 ( c x , c y ) (c_x,c_y) (cx,cy)为补偿(regress to offsets)后的默认框d的中心, ( w , h ) (w,h) (w,h)为默认框的宽和高。
3. Hard negative mining
使用SSD的在线难例挖掘策略(hard negative mining),即依据**置信度损失(confidence loss)**对属于负样本的prior bbox进行排序,只挑选其中置信度损失高的bbox进行训练,将正负样本的比例控制在 p o s i t i v e : n e g a t i v e = 1 : 3 positive \ : \ negative=1 \ : \ 3 positive : negative=1 : 3。其核心作用就是只选择负样本中容易被分错类的困难负样本来进行网络训练,来保证正负样本的平衡和训练的有效性。
总结
本部分主要是介绍一些损失函数的理解,以及相关公式的具体含义。涉及了三个方面:
- 先验框与GT框的匹配策略
- 两个原则–为每一个先验框都分配好类别,确定是正样本还是负样本。
- 损失函数计算
- 分类损失—置信度loss
- 目标框回归损失—定位loss
- 负样本不计算目标框的回归loss
- 难例挖掘
- 按照一定的预设比例,一般是 1 : 3 1 \ : \ 3 1 : 3,将loss最高的那部分负样本先验框取出,重新计算分类loss。