yolo3-keras
yolo3-keras copied to clipboard
关于损失函数的疑问
我看了一下在nets/loss.py中对于锚框中心点xy的损失计算为
xy_loss = object_mask * box_loss_scale * K.binary_crossentropy(raw_true_xy, raw_pred[...,0:2], from_logits=True)
其中raw_pred是yolo_head方法中返回的feats,也就是网络的原输出值。那么raw_pred[...,0:2]所代表的不应该是没有经过sigmod激活函数激活前的值吗?而不是sigmod激活过后在0~1的偏移量值。
而raw_true_xy = y_true[l][..., :2]*grid_shapes[l][:] - grid代表的是对于某一网格的偏移量值,是处在0~1之间的值,通过这两个tensor来做损失计算是否有问题呢?
望解答疑惑,十分感谢!
作者能看一下吗,希望得到回复啊啊啊啊啊
你要理解做sigmoid的意义…而且我并没有对真实框求反sigmoid
看完代码我所理解的是网络输出是没有经过解码的值,要在经过sigmod后让其处于0-1之间才能代表对某一网格的偏移量值。 而损失函数计算里面的raw_true_xy=y_true[l][..., :2]*grid_shapes[l][:] - grid是代表的对于某网格的偏移量值,我并不是说作者对真实框求反sigmod了.......
作者大大可以告诉我raw_pred[...,0:2]是网络输出没有经过解码的值吗,而raw_true_xy = y_true[l][..., :2]*grid_shapes[l][:] - grid代表的是对于某一网格的偏移量值吗,我爬我理解错啦
raw_pred[...,0:2]是尚未sigmiod的值,然后在K.binary_crossentropy会对其进行sigmoid然后再对比获得loss,raw_true_xy = y_true[l][..., :2]*grid_shapes[l][:] - grid代表的是真实框相对于左上角网格点的的偏移量