IDEA-Research / DINO

[ICLR 2023] Official implementation of the paper "DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection"
Apache License 2.0
2.15k stars 232 forks source link

训练自己的数据集,class_error为0。 #144

Open DFLyan opened 1 year ago

DFLyan commented 1 year ago

我在训练自己的数据集时,数据集有很多类,但我只想检测一个类,于是我把num_class设置成1进行训练,在处理数据的prepare中把需要检测的类的标注保留,并且归位一个类,改id为0。但是在训练中以及验证中,损失项class_error均为0.00,IoU指标也均为0。是我设置有问题,还是代码现在无法训练单类?期待您的回答。

HaoZhang534 commented 1 year ago

@DFLyan class_error为0是因为class_error是在匹配后的正样本上计算的,且只有一个类,那么分类一定是正确的。IoU为0可能是有bug,但是我们没有试过。建议你把预测的框可视化看一看。

DFLyan commented 1 year ago

@HaoZhang534 你好,我昨天对自己的数据集的json文件重新进行了处理,标签只保留了一类,然后用DINO进行了训练,发现AP结果就正常了。我估计,如果数据集不先处理好,而是在dataset里去筛选处理标签id,loss计算的时候没问题,但是进行ap、ar等指标计算的时候,代码里,id可能用的还是数据集原有的那些类别id,也就是说dataset的筛选没起到作用,于是计算指标就会有问题。我估计是这样哈。后面我再看看可视化下的情况,再在这里进行回复。