| from typing import Any |
|
|
| import torch |
| from torch import nn |
|
|
| from .base_postprocessor import BasePostprocessor |
|
|
|
|
| class DropoutPostProcessor(BasePostprocessor): |
| def __init__(self, config): |
| self.config = config |
| self.args = config.postprocessor.postprocessor_args |
| self.dropout_times = self.args.dropout_times |
|
|
| @torch.no_grad() |
| def postprocess(self, net: nn.Module, data: Any): |
| logits_list = [net.forward(data) for i in range(self.dropout_times)] |
| logits_mean = torch.zeros_like(logits_list[0], dtype=torch.float32) |
| for i in range(self.dropout_times): |
| logits_mean += logits_list[i] |
| logits_mean /= self.dropout_times |
| score = torch.softmax(logits_mean, dim=1) |
| conf, pred = torch.max(score, dim=1) |
| return pred, conf |
|
|