PaddleDetection
PaddleDetection copied to clipboard
PPYOLOE的_bbox_loss训练自己的数据集时计算损失报错ValueError: Target -6 is out of lower bound
问题确认 Search before asking
Bug组件 Bug Component
Training
Bug描述 Describe the Bug
在使用PPYOLOE训练自己的数据集时计算bbox_loss时出现以下错误
“”“
Traceback (most recent call last):
File ".\tools\train.py", line 211, in
出错的行是 “ ppyoloe_head.py中的 loss_dfl = self._df_loss(pred_dist_pos, assigned_ltrb_pos, self.reg_range[0]) * bbox_weight ”
我尝试打印了pred_dist_pos和assigned_ltrb_pos两个变量,发现assigned_ltrb_pos经常出现较大的值
不清楚是bug还是我在训练自己的数据集时缺少设置什么参数 pred_dist_pos和assigned_ltrb_pos又是在描述什么呢?
望解答
复现环境 Environment
nothing
Bug描述确认 Bug description confirmation
- [X] 我确认已经提供了Bug复现步骤、代码改动说明、以及环境信息,确认问题是可以复现的。I confirm that the bug replication steps, code change instructions, and environment information have been provided, and the problem can be reproduced.
是否愿意提交PR? Are you willing to submit a PR?
- [X] 我愿意提交PR!I'd like to help by submitting a PR!
我尝试进一步debug发现,assigned_ltrb值域是正常的,在reg_range的范围之内(默认0~17),但是为什么经过masked_select之后会出现值域之外的值,例如下图中assigned_ltrb_pos出现了28,60,92.......或者负数值
我对mask_select的理解是只会根据mask从原tensor中取值,不知道我是否理解有误
在CPU版本下masked_select能正常得到结果 我对环境是: paddlepaddle-gpu 2.3.2 CUDA11.2 cudnn 8.2
code: """ import paddle
print(paddle.version)
x = paddle.randn((10,))
mask = x >= 0
y = paddle.masked_select(x, mask)
print(x)
print(mask)
print(y)
"""
gpu是什么版本的
gpu是什么版本的
3050Ti ,驱动版本546.80
安装paddlepaddle-cpu使用的是: python -m pip install paddlepaddle==2.3.2 -i https://mirror.baidu.com/pypi/simple
安装paddlepaddle-gpu 2.3使用的是: python -m pip install paddlepaddle-gpu==2.3.2.post112 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html
后面我发现使用pd2.6时没有这个问题 安装paddlepaddle-gpu 2.6: python -m pip install paddlepaddle-gpu==2.6.1.post112 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html
但是我现在参加一个比赛最高只能使用2.3
这 应该是之前的paddle有bug 后面的版本修复的,,试一下dfl那个区间改成 [0-17]