csuhan/s2anet

使用focal loss不好用,使用crossentropyloss正常

Opened this issue · 5 comments

非常感谢作者的工作

使用focal_loss不论是自己重新训练的模型还是在作者提供的12epoch模型上训练,结果是这样的,都预测为了第0类。

image

这是inference时候的调试结果

image

这是作者给的模型上训练的第13个epoch输出日志,刚开始loss_cls特别大:

image

这是训练过程中focal_loss的输入,随着迭代,target.sum()->0, 没有目标都变成了背景?:

image

后面我换成了crossentropyloss,结果正常,希望作者能够答疑解惑。

首先,请确保使用我们的预训练模型inference是正常的
接着,请检查learning rate等参数设置是否正确。我们使用4GPU/0.01lr。

使用你们的模型inference正常,参数设置也正常。就是损失函数使用FocalLoss训练有错误,我将配置文件的loss_cls更改为CrossEntropyLoss训练一切正常。loss_cls=dict(type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0)

因为我的系统环境版本问题,直接使用mmdet.ops下面的api会不兼容CUDA Error: no kernel image is available for execution on the device,相关操作例如nms DeformConv FocalLoss我都替换为了mmcv.ops下面的接口。我仔细检查了相关的接口调用与配置,应该没问题,不知道踩到了什么坑。

Focal loss的计算不一样,老版本的是按照num_cls=16算的,新版本的num_cls=15,你可以编译老版本的focal_loss,或者使用新版本的话,anchor_target你要修改部分代码,就是生成anchor的label部分

Focal loss的计算不一样,老版本的是按照num_cls=16算的,新版本的num_cls=15,你可以编译老版本的focal_loss,或者使用新版本的话,anchor_target你要修改部分代码,就是生成anchor的label部分

你好,您有尝试过使用Focal loss中的python版本[py_sigmoid_focal_loss]在这个框架中训练吗?为什么使用这个python版本的focal loss训练会直接报错呢。

Focal loss的计算不一样,老版本的是按照num_cls=16算的,新版本的num_cls=15,你可以编译老版本的focal_loss,或者使用新版本的话,anchor_target你要修改部分代码,就是生成anchor的label部分

你好,您有尝试过使用Focal loss中的python版本[py_sigmoid_focal_loss]在这个框架中训练吗?为什么使用这个python版本的focal loss训练会直接报错呢。

如果你直接用py_sigmoid_focal_loss训练出错的话,很有可能就是你得mmd版本的问题,或者你可以把你的联系方式通过邮箱发给我,交流一下