Adapted from AdelaiDet: https://github.com/aim-uofa/AdelaiDet/blob/master/adet/utils/comm.py
(tensor, factor, offset="none")
| 26 | |
| 27 | |
| 28 | def aligned_bilinear(tensor, factor, offset="none"): |
| 29 | """Adapted from AdelaiDet: |
| 30 | https://github.com/aim-uofa/AdelaiDet/blob/master/adet/utils/comm.py |
| 31 | """ |
| 32 | assert tensor.dim() == 4 |
| 33 | assert factor >= 1 |
| 34 | assert int(factor) == factor |
| 35 | |
| 36 | if factor == 1: |
| 37 | return tensor |
| 38 | |
| 39 | h, w = tensor.size()[2:] |
| 40 | tensor = F.pad(tensor, pad=(0, 1, 0, 1), mode="replicate") |
| 41 | oh = factor * h + 1 |
| 42 | ow = factor * w + 1 |
| 43 | tensor = F.interpolate(tensor, size=(oh, ow), mode='bilinear', align_corners=True) |
| 44 | if offset == "half": |
| 45 | tensor = F.pad(tensor, pad=(factor // 2, 0, factor // 2, 0), mode="replicate") |
| 46 | |
| 47 | return tensor[:, :, :oh - 1, :ow - 1] |