默认约定
如果你想把 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这个词