JaryHuang / awesome_SSD_FPN_GIoU

This repository carries out some paper recurring work
106 stars 25 forks source link

使用GIOU损失出现了一个问题 #10

Open CHKswiftly opened 4 years ago

CHKswiftly commented 4 years ago

在使用SmoothL1为定位损失时,模型训练正常,但改为GIOU时,出现了one of the variables needed for gradient computation has been modified by an inplace operation问题,请问如何解决(我尝试了改变代码中 inplace=True 或者 x += y 等操作,但问题还是存在,请问Giou模块中还有哪些是inplace操作)。诚挚的感谢

JaryHuang commented 4 years ago

你好,请问你用的是什么版本的pytroch呢。我用的是0.4.1的没出现过这个问题。如果是其他版本的,麻烦贴一下报错的图看一下,我看看具体问题

CHKswiftly commented 4 years ago

你好,我使用的是1.0.0版本的pytorch,我是尝试在FSSD模型上使用GIOU损失,报错截图如下,非常感谢您的回答。 7H6PMN7YKMOXS6 YASH2)DI

ghost commented 4 years ago

我也遇到了这个问题请问你解决了吗

JaryHuang commented 4 years ago

你好,因为cuda版本问题,机子上一直没装1.0版本的pytorch,最近也因为自身问题好久没上来了,说声抱歉。这里的问题报错应该是损失函数内部的值替换问题,1.0之后对于参数值替换应该更严格,防止引起歧义。因此我建议是否对损失函数的各个有替换值的地方返回梯度看看是否可导呢?

ghost commented 4 years ago

你好,因为cuda版本问题,机子上一直没装1.0版本的pytorch,最近也因为自身问题好久没上来了,说声抱歉。这里的问题报错应该是损失函数内部的值替换问题,1.0之后对于参数值替换应该更严格,防止引起歧义。因此我建议是否对损失函数的各个有替换值的地方返回梯度看看是否可导呢?

我看了一下,是giou损失函数那边的问题,giou的loss没法反向传播,问题出在哪里我还是不知道......

ghost commented 4 years ago

你好,因为cuda版本问题,机子上一直没装1.0版本的pytorch,最近也因为自身问题好久没上来了,说声抱歉。这里的问题报错应该是损失函数内部的值替换问题,1.0之后对于参数值替换应该更严格,防止引起歧义。因此我建议是否对损失函数的各个有替换值的地方返回梯度看看是否可导呢?

之前的问题解决了,但是我发现giou loss不收敛,怎么回事?

longchao1 commented 4 years ago

giou loss无法反向传播,怎么解决,我把smoothl1换成giou几个epoch根本不降

longchao1 commented 4 years ago

@Peterchen111 ,问题解决了吗,求求助

ghost commented 4 years ago

@Peterchen111 ,问题解决了吗,求求助

应该是torch版本的问题,我在bbox_overlaps_giou 那边用了torch.autograd.Variable就可以了,至于loss为什么不降我还不知道。

hanjiangrui commented 4 years ago

@Peterchen111 ,问题解决了吗,求求助

应该是torch版本的问题,我在bbox_overlaps_giou 那边用了torch.autograd.Variable就可以了,至于loss为什么不降我还不知道。

你好,请问您是在哪里加的autograd.variable ,刚接触 比较菜,可以详细一些吗

XiaSunny commented 4 years ago

@JaryHuang @Peterchen111 @longchao1 我把smoothl1换成giou,loss也不下降,我的torch版本是0.3,请问下怎么回事?谢谢了。

DuckJ commented 4 years ago

你好,有点疑问, @JaryHuang ,这个GIoU loss写的没有问题么,计算loss时候,不是应该一个priors预测的框结果和对应相对位置的一个priors么,https://github.com/JaryHuang/awesome_SSD_FPN_GIoU/blob/master/utils/box/box_utils.py#L6返回的是每个预测的priors位置和GT的每个位置的GIoU,是一个NxK矩阵,实际中两种box的维度不都是(N,4)么,返回的不应该是一个(N,)维度的GIOU loss么? 我理解的有错么