关于yolov2的损失函数的问题?

2024-06-25 06:50:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我读了yolov2的实现。我有一些关于它的问题损失。低于是损失函数的伪代码,我希望我是对的。在

costs = np.zeros(output.shape)
for pred_box in all prediction box:  
    if (max iou pred_box has with all truth box < threshold):
        costs[pred_box][obj] = (sigmoid(obj)-0)^2 * 1
    else:
        costs[pred_box][obj] = 0
    costs[pred_box][x] = (sigmoid(x)-0.5)^2 * 0.01  
    costs[pred_box][y] = (sigmoid(y)-0.5)^2 * 0.01  
    costs[pred_box][w] = (w-0)^2 * 0.01  
    costs[pred_box][h] = (h-0)^2 * 0.01  
for truth_box all ground truth box:  
    pred_box = the one prediction box that is supposed to predict for truth_box
    costs[pred_box][obj] = (1-sigmoid(obj))^2 * 5  
    costs[pred_box][x] = (sigmoid(x)-truex)^2 * (2- truew*trueh/imagew*imageh)  
    costs[pred_box][y] = (sigmoid(y)-truey)^2 * (2- truew*trueh/imagew*imageh)  
    costs[pred_box][w] = (w-log(truew/anchorw))^2 * (2- truew*trueh/imagew*imageh)  
    costs[pred_box][h] = (h-log(trueh/anchorh))^2 * (2- truew*trueh/imagew*imageh)  
    costs[pred_box][classes] = softmax_euclidean  
total loss = sum(costs)

对此我有一些问题:

1.代码每10批随机调整列车图像大小到320到608之间,但锚盒没有调整大小因此,为什么不要调整定位点的大小。我的意思是你在13*13的特征地图中选择了一组最常见的定位点,这些定位点在19*19的特征地图中不常见,所以为什么不根据图像大小调整锚点大小呢。在

2.将成本应用于未指定真相的方框的x,y,w,h预测,这会促使w,h精确匹配锚定,x,y在单元格中居中,这是否有帮助?为什么那。为什么不将位置预测的成本仅应用于已分配的值,而忽略未分配的值。在

3.为什么不简单地应用(obj-0)^2作为所有无真相盒子的obj预测成本分配。输入yolov2,obj对没有指定真值的盒子的预测并不是全部的应用成本,只有那些没有指定真值并且与所有真值没有太多重叠的盒子才是应用成本。为什么,这很复杂。在


Tags: boxobjforall盒子成本truthpred
1条回答
网友
1楼 · 发布于 2024-06-25 06:50:34

1

在YOLOv2的实现中,使用随机裁剪来扩充训练数据。随机裁剪图像的一部分并将其展开,使其具有与原始图像相同的大小。在

这种对训练数据的扩充使得训练后的网络对于训练数据中没有看到的不同大小的对象具有鲁棒性。因此,锚箱不应通过此过程进行更换。在

请记住,锚框是在训练和预测之前对输入的对象形状的假设。但是,如果网络提出这样的假设,对于形状与假设大不相同的对象,它就变得不健壮。数据扩充解决了这个问题。在

2

这是因为我们不知道中心坐标和盒子形状的真相。当我们培训YOLO时,我们使用的概念是责任盒。它们是在培训过程中需要更新的方框。在

请参阅章节“ “my Medium post”的“负责”边界框。在

3 这是因为YOLO的输出来自卷积层的目录,而不是来自完全连接的激活。因此输出不受0和1之间的限制。所以我们用sigmoid函数来表示概率。在

相关问题 更多 >