|
# Conventions |
|
|
|
Please check the following conventions if you would like to modify MMDetection as your own project. |
|
|
|
## Loss |
|
|
|
In MMDetection, a `dict` containing losses and metrics will be returned by `model(**data)`. |
|
|
|
For example, in bbox head, |
|
|
|
```python |
|
class BBoxHead(nn.Module): |
|
... |
|
def loss(self, ...): |
|
losses = dict() |
|
# classification loss |
|
losses['loss_cls'] = self.loss_cls(...) |
|
# classification accuracy |
|
losses['acc'] = accuracy(...) |
|
# bbox regression loss |
|
losses['loss_bbox'] = self.loss_bbox(...) |
|
return losses |
|
``` |
|
|
|
`bbox_head.loss()` will be called during model forward. |
|
The returned dict contains `'loss_bbox'`, `'loss_cls'`, `'acc'` . |
|
Only `'loss_bbox'`, `'loss_cls'` will be used during back propagation, |
|
`'acc'` will only be used as a metric to monitor training process. |
|
|
|
By default, only values whose keys contain `'loss'` will be back propagated. |
|
This behavior could be changed by modifying `BaseDetector.train_step()`. |
|
|