| from torch.nn import functional as F | |
| def compute_tensor_iu(seg, gt): | |
| seg = seg.squeeze(1) | |
| gt = gt.squeeze(1) | |
| intersection = (seg & gt).float().sum() | |
| union = (seg | gt).float().sum() | |
| return intersection, union | |
| def compute_tensor_iou(seg, gt): | |
| seg = seg.squeeze(1) | |
| gt = gt.squeeze(1) | |
| intersection = (seg & gt).float().sum((1, 2)) | |
| union = (seg | gt).float().sum((1, 2)) | |
| iou = (intersection + 1e-6) / (union + 1e-6) | |
| return iou | |
| def resize_min_side(im, size, method): | |
| h, w = im.shape[-2:] | |
| min_side = min(h, w) | |
| ratio = size / min_side | |
| if method == 'bilinear': | |
| return F.interpolate(im, scale_factor=ratio, mode=method, align_corners=False) | |
| else: | |
| return F.interpolate(im, scale_factor=ratio, mode=method) | |
| def resize_max_side(im, size, method): | |
| h, w = im.shape[-2:] | |
| max_side = max(h, w) | |
| ratio = size / max_side | |
| if method in ['bilinear', 'bicubic']: | |
| return F.interpolate(im, scale_factor=ratio, mode=method, align_corners=False) | |
| else: | |
| return F.interpolate(im, scale_factor=ratio, mode=method) | |