Zzh-tju / CIoU

Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression (AAAI 2020)
GNU General Public License v3.0
319 stars 44 forks source link

请问论文中1/(w^2+h^2) 替换成1如何实现? #11

Open KoapT opened 3 years ago

KoapT commented 3 years ago

今天阅读您的论文,提到ciou loss中 v对h和w求偏导时的问题。 由于w和h可能会非常小,所以为避免梯度爆炸您将1/(w^2+h^2) 替换成了1。 请问这在pytorch、tf这类自动求导的框架中如何实现? 我看您的pytorch实现是增加了条件S:

S = (iou>0.5).float()
alpha= S*v/(1-iou+v)

是否能理解为,使用Iou>0.5这个条件,过滤掉了w和h很小的情况,从而1/(w^2+h^2) 不按照原论文替换为1?

Zzh-tju commented 3 years ago

因为我们发现在Pytorch中CIoU自动求导可以正常进行,限制在IoU>0.5是因为我们认为IoU<0.5长宽比不是那么重要。

KoapT commented 3 years ago

因为我们发现在Pytorch中CIoU自动求导可以正常进行,限制在IoU>0.5是因为我们认为IoU<0.5长宽比不是那么重要。

好的。谢谢回复! 我在用tf1实现yolov4的时候,也在ciou loss的地方遇到了nan of inf的error, 不知道是不是您文中所说的问题导致。 我实现ciou的时候没有读paper,照着博客瞎写的,没有S的限制,也没有停止alpha的梯度。 还是该直接读paper的。