【自用备份】YOLO学习问题( 三 )


中间 # set mask 部分 , 找到第b个长方体 , 在13*13中找到(gj, gi) , 在3个中找到 , 赋予对应值;最下面 # set noobj... 部分 , ious.t()将ious转置后按列分成了5份3*1 , 对应每个真值框对3个框的IOU , ()将该5份拼成一个元组 , 并编号0 , 1 , 2 , 3 , 4 。
比如现在 i=0 , 对第0个真值框与3个框求的IOU而言 , 如果有大于阈值的 , 则找到第b[0]个长方体的(gj[0],gj[0])格子处 , 对应标记为有obj;也就是后面计算noobj损失的时候 , 不考虑该部分 , 而也没有考虑该部分 。(可以认为标记为0就是不考虑 , 不计算损失 。)
6、对于noobj的置信度 , 看其他人总结的v3损失函数 , 感觉可以直接和obj使用同一套真值 , 也就是负责预测物体为1 , 不负责预测物体为0 , 代码中为什么要将noobj与obj定义为相反?
哈 , 代码中写的是mask , 是前面的系数和的赋值情况 , 不是真值 。
tconf = obj_mask.float() # 真实框的置信度 , 也就是1loss_conf_obj = self.bce_loss(pred_conf[obj_mask], tconf[obj_mask])loss_conf_noobj = self.bce_loss(pred_conf[noobj_mask], tconf[noobj_mask])
可以看到 , 它只是索引而已 , 索引mask中==1的 , 至于置信度真值tconf是用的“同一套”嗷 。