测试代码问题
Closed this issue · 2 comments
yuxiaoz commented
在fcos.py中,第83行,测试进行前传的时候,为什么要把测试得到的类别结果+1,这一块不是很明白。
cls_classes=cls_classes+1#[batch_size,sum(_h*_w)]
yuxiaoz commented
照运行的demo来看,应该是训练的过程中没有加入__background__一类,但是VOC_Dataset或者COCO_Dataset中有这一类,那么应该是训练的时候去掉了背景类?请教一下训练时背景类是在什么地方去掉的?
yuxiaoz commented
好像找到问题根源了,在loss.py的第178行。
target_pos=(torch.arange(1,class_num+1,device=target_pos.device)[None,:]==target_pos).float()#sparse-->onehot
这样做,也就是说, 默认类别从1开始了,直接把类别0去掉了。那如果换成自己的数据集,又没有在第0类加背景类的话,就太坑了。最后通过index去计算的分类loss,这也解释了,为什么COCO_Dataset明明定义了81类,但是模型分80类,不会报错。这也太不明显了,建议在readme中说明一下,要不然容易让大家训练自己的数据集走冤枉路。