| from typing import Any |
| from tqdm import tqdm |
|
|
| import torch |
| import torch.nn as nn |
| from torch.utils.data import DataLoader |
|
|
| import openood.utils.comm as comm |
|
|
|
|
| class BasePostprocessor: |
| def __init__(self, config): |
| self.config = config |
|
|
| def setup(self, net: nn.Module, id_loader_dict, ood_loader_dict): |
| pass |
|
|
| @torch.no_grad() |
| def postprocess(self, net: nn.Module, data: Any): |
| output = net(data) |
| score = torch.softmax(output, dim=1) |
| conf, pred = torch.max(score, dim=1) |
| return pred, conf |
|
|
| def inference(self, |
| net: nn.Module, |
| data_loader: DataLoader, |
| progress: bool = True): |
| pred_list, conf_list, label_list = [], [], [] |
| for batch in tqdm(data_loader, |
| disable=not progress or not comm.is_main_process()): |
| data = batch['data'].cuda() |
| label = batch['label'].cuda() |
| pred, conf = self.postprocess(net, data) |
|
|
| pred_list.append(pred.cpu()) |
| conf_list.append(conf.cpu()) |
| label_list.append(label.cpu()) |
|
|
| |
| pred_list = torch.cat(pred_list).numpy().astype(int) |
| conf_list = torch.cat(conf_list).numpy() |
| label_list = torch.cat(label_list).numpy().astype(int) |
|
|
| return pred_list, conf_list, label_list |
|
|