沈阳 网站开发小程序开发外包报价表
news/
2025/9/24 22:38:37/
文章来源:
沈阳 网站开发,小程序开发外包报价表,直播吧在线直播,wordpress 一键 样式3.5 损失函数
本文来自开源组织 DataWhale #x1f433; CV小组创作的目标检测入门教程。
对应开源项目 《动手学CV-Pytorch》 的第3章的内容#xff0c;教程中涉及的代码也可以在项目中找到#xff0c;后续会持续更新更多的优质内容#xff0c;欢迎⭐️。
如果使用我们…3.5 损失函数
本文来自开源组织 DataWhale CV小组创作的目标检测入门教程。
对应开源项目 《动手学CV-Pytorch》 的第3章的内容教程中涉及的代码也可以在项目中找到后续会持续更新更多的优质内容欢迎⭐️。
如果使用我们教程的内容或图片请在文章醒目位置注明我们的github主页链接https://github.com/datawhalechina/dive-into-cv-pytorch
3.5.1 Matching strategy (匹配策略)
我们分配了许多prior bboxes我们要想让其预测类别和目标框信息我们先要知道每个prior bbox和哪个目标对应从而才能判断预测的是否准确从而将训练进行下去。
不同方法 ground truth boxes 与 prior bboxes 的匹配策略大致都是类似的但是细节会有所不同。这里我们采用SSD中的匹配策略具体如下
第一个原则 从ground truth box出发寻找与每一个ground truth box有最大的jaccard overlap的prior bbox这样就能保证每一个groundtruth box一定与一个prior bbox对应起来(jaccard overlap就是IOU如图3-26所示前面介绍过)。 反之若一个prior bbox没有与任何ground truth进行匹配那么该prior bbox只能与背景匹配就是负样本。 图3-26 IOU一个图片中ground truth是非常少的而prior bbox却很多如果仅按第一个原则匹配很多prior bbox会是负样本正负样本极其不平衡所以需要第二个原则。
第二个原则 从prior bbox出发对剩余的还没有配对的prior bbox与任意一个ground truth box尝试配对只要两者之间的jaccard overlap大于阈值一般是0.5那么该prior bbox也与这个ground truth进行匹配。这意味着某个ground truth可能与多个Prior box匹配这是可以的。但是反过来却不可以因为一个prior bbox只能匹配一个ground truth如果多个ground truth与某个prior bbox的 IOU 大于阈值那么prior bbox只与IOU最大的那个ground truth进行匹配。
注意第二个原则一定在第一个原则之后进行仔细考虑一下这种情况如果某个ground truth所对应最大IOU的prior bbox小于阈值并且所匹配的prior bbox却与另外一个ground truth的IOU大于阈值那么该prior bbox应该匹配谁答案应该是前者首先要确保每个ground truth一定有一个prior bbox与之匹配。
用一个示例来说明上述的匹配原则 图3-27图像中有7个红色的框代表先验框黄色的是ground truths在这幅图像中有三个真实的目标。按照前面列出的步骤将生成以下匹配项 图3-283.5.2 损失函数
下面来介绍如何设计损失函数。
将总体的目标损失函数定义为 定位损失loc和置信度损失conf的加权和
L(x,c,l,g)1N(Lconf(x,c)αLloc(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是匹配到GTGround Truth的prior bbox数量如果N0则将损失设为0而 α 参数用于调整confidence loss和location loss之间的比例默认 α1。
confidence loss是在多类别置信度c上的softmax loss公式如下
Lconf(x,c)−∑i∈PosNxijplog(c^ip)−∑i∈Neglog(c^i0)Wherec^ipexp(cip)∑pexp(cip)(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)−i∈Pos∑Nxijplog(c^ip)−i∈Neg∑log(c^i0)Wherec^ip∑pexp(cip)exp(cip)(2)
其中i指代搜索框序号j指代真实框序号p指代类别序号p0表示背景。其中xijp{1,0}x^{p}_{ij}\left\{1,0\right\}xijp{1,0} 中取1表示第i个prior bbox匹配到第 j 个GT box而这个GT box的类别为 p 。CipC^{p}_{i}Cip 表示第i个搜索框对应类别p的预测概率。此处有一点需要关注公式前半部分是正样本Pos的损失即分类为某个类别的损失不包括背景后半部分是负样本Neg的损失也就是类别为背景的损失。
而location loss位置回归是典型的smooth L1 loss
Lloc(x,l,g)∑i∈Posm∈{cx,cy,w,h}N∑xijksmoothL1(lim−g^jm)(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)i∈Posm∈{cx,cy,w,h}∑N∑xijksmoothL1(lim−g^jm)(3)
g^jcx(gjcx−dicx)/diw\hat{g}^{c_x}_{j}(g^{c_x}_{j}-d^{c_x}_{i})/d^{w}_{i} g^jcx(gjcx−dicx)/diw
g^jcy(gjcy−dicy)/dih\hat{g}^{c_y}_{j}(g^{c_y}_{j}-d^{c_y}_{i})/d^{h}_{i} g^jcy(gjcy−dicy)/dih
g^jwlog(gjwdiw)\hat{g}^{w}_{j}log(\frac{g^{w}_{j}}{d^{w}_{i}}) g^jwlog(diwgjw)
g^jhlog(gjhdih)\hat{g}^{h}_{j}log(\frac{g^{h}_{j}}{d^{h}_{i}}) g^jhlog(dihgjh)
其中l为预测框g为ground truth。(cx,xy)为补偿(regress to offsets)后的默认框d的中心,(w,h)为默认框的宽和高。更详细的解释看-看下图 3.5.3 Hard negative mining:
值得注意的是一般情况下negative prior bboxes数量 positive prior bboxes数量直接训练会导致网络过于重视负样本预测效果很差。为了保证正负样本尽量平衡我们这里使用SSD使用的在线难例挖掘策略(hard negative mining)即依据confidience loss对属于负样本的prior bbox进行排序只挑选其中confidience loss高的bbox进行训练将正负样本的比例控制在positivenegative1:3。其核心作用就是只选择负样本中容易被分错类的困难负样本来进行网络训练来保证正负样本的平衡和训练的有效性。
举个例子假设在这 441 个 prior bbox 里经过匹配后得到正样本先验框P个负样本先验框 441−P 个。将负样本prior bbox按照prediction loss从大到小顺序排列后选择最高的M个prior bbox。这个M需要根据我们设定的正负样本的比例确定比如我们约定正负样本比例为1:3时。我们就取M3P这M个loss最大的负样本难例将会被作为真正参与计算loss的prior bboxes其余的负样本将不会参与分类损失的loss计算。
3.5.4 小结
本小节介绍的内容围绕如何进行训练展开主要是3块
先验框与GT框的匹配策略损失函数计算难例挖掘
这3部分是需要结合在一起理解我们再整个梳理下计算loss的步骤
1先验框与GT框的匹配
按照我们介绍的方案为每个先验框都分配好类别确定是正样本还是负样本。
2计算loss
按照我们定义的损失函数计算 分类loss 和 目标框回归loss
负样本不计算目标框的回归loss
3难例挖掘
上面计算的loss中分类loss的部分还不是最终的loss
因为负样本先验框过多我们要按一定的预设比例一般是1:3将loss最高的那部分负样本先验框拿出来其余的负样本忽略重新计算分类loss
完整loss计算过程的代码见model.py中的 MultiBoxLoss 类。
共勉这一小节是整个章节中最难理解也是代码最难啃的部分坚持就是胜利
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/916356.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!