使用mmdetection在自己写loss的时候遇到的坑

本文介绍MMDetection项目中关于模型计算损失的约定,强调如何在model的forward过程中定义并区分哪些损失用于反向传播,以及如何通过字典结构监控评估指标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

默认约定

如果你想把 MMDetection 修改为自己的项目,请遵循下面的约定。

损失

在 MMDetection 中,model(**data) 的返回值是一个字典,包含着所有的损失和评价指标,他们将会由 model(**data) 返回。

例如,在 bbox head 中,

class BBoxHead(nn.Module):
    ...
    def loss(self, ...):
        losses = dict()
        # 分类损失
        losses['loss_cls'] = self.loss_cls(...)
        # 分类准确率
        losses['acc'] = accuracy(...)
        # 边界框损失
        losses['loss_bbox'] = self.loss_bbox(...)
        return losses

'bbox_head.loss()' 在模型 forward 阶段会被调用。返回的字典中包含了 'loss_bbox','loss_cls','acc'。只有 'loss_bbox''loss_cls' 会被用于反向传播,'acc' 只会被作为评价指标来监控训练过程。

我们默认,只有那些键的名称中包含 'loss' 的值会被用于反向传播。这个行为可以通过修改 BaseDetector.train_step() 来改变。

所以写的需要当loss的东西,在键里面必须命名含有loss这个词

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值