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


pred_cls = torch.sigmoid(prediction[..., 5:])# Cls pred.loss_cls = self.bce_loss(pred_cls[obj_mask], tcls[obj_mask])# 分类损失
问 , 它说这些分类用还是主要体现在对预测结果进行的处理和损失函数中 , 并不是网络架构中的一层 。
浅看了一下v2的代码:
# Convert final layer features to bounding box parameters.#feats: tensor, [None,125,13,13] , 最后一层的输出feats = feats.view(-1,grids[0],grids[1],num_anchors,num_classes+5) # [1, 13, 13, 125]-->[1, 13, 13, 5, 25]box_class_probs = torch.softmax(feats[..., 5:],-1)# [1,13,13,5,20]classification_loss = (self.class_scale * detectors_mask * torch.square(matching_classes - pred_class_prob)).sum() # [b,n,20]
将最后一层网络的输出转化为box参数 , 对输出的分类结果feats[...,5:] , 大小[1, 13, 13, 5, 20]的最后一维20求 , 得到 , 后面使用这个“预测值”计算平方和损失 。
与v2预训练-19分类网络时包含的层没有关系 。
4、v3的置信度真值取1而不再用IOU?
自己敲的那套代码里 , 还是使用IOU作置信度真值 , 并且将此时grid size下(如13*13)的三种都赋予置信度(IOU)且计算真值相对三个的 w, h 偏移量:
for i, anchor in enumerate(anchors):# 该特征图scale下的三个anchor框iou = IOU_center(anchor, (w, h))p_w, p_h = w / anchor[0], h / anchor[1]targets[feature_size][int(x_index), int(y_index), i] = np.array([iou, _x, _y, np.log(p_w), np.log(p_h), *one_hot(CLASS_NUM, int(cls))])
另一套代码 , 在此grid size下选取和真值框IOU(中心对齐)最大的一个进行赋值为1 , 而其它两个不再考虑 , 同背景一样为默认值0:
tconf = obj_mask.float() # 真实框的置信度 , 也就是1

【自用备份】YOLO学习问题

文章插图
对于-(batch, grid width, grid , ) , 也就是负责预测obj的对应的预测框 , 置信度真值为1 , 其它都为0 。【赋值在第5问的代码中】
第二种比较符合论文 。
5、v3的noobj部分的置信度损失是只算背景框还是背景框+大于IOU阈值却不是最大IOU的框 , 也就是“大于IOU阈值却不是最大IOU的框”的损失像v2一样忽略了吗?
应该和v2一样忽略了 , 截取一下相关代码:
ious = torch.stack([bbox_wh_iou(anchor, gwh) for anchor in anchors]) #每一种规格的anchor跟每个标签上的框的IOU得分obj_mask = ByteTensor(nB, nA, nG, nG).fill_(0)# obj , anchor包含物体, 即为1 , 默认为0 考虑前景noobj_mask = ByteTensor(nB, nA, nG, nG).fill_(1) # noobj, anchor不包含物体, 则为1 , 默认为1 考虑背景# Set masksobj_mask[b, best_n, gj, gi] = 1 # 实际包含物体的设置成1noobj_mask[b, best_n, gj, gi] = 0 # 相反# Set noobj mask to zero where iou exceeds ignore thresholdfor i, anchor_ious in enumerate(ious.t()): # IOU超过了指定的阈值就相当于有物体了noobj_mask[b[i], anchor_ious > ignore_thres, gj[i], gi[i]] = 0
mask的规格是(batch, , , ) , 假如有4个批次 , 可以想成4个13*13*3的长方体;ious是三个分别与每个真值框计算得到的IOU , 假如该图片有5个真值obj框 , 则ious尺寸为3*5;b是5个真值框的对应batch , 尺寸5*1;gi, gj是每一个真值框x, y的整数部分 , 尺寸都是5*1;是对应于5个真值框的最大IOU的 , 尺寸5*1 。