in fvcore/transforms/transform.py [0:0]
def apply_image(self, img: np.ndarray, interp: str = None) -> np.ndarray:
"""
Resize the image(s).
Args:
img (ndarray): of shape NxHxWxC, or HxWxC or HxW. The array can be
of type uint8 in range [0, 255], or floating point in range
[0, 1] or [0, 255].
interp (str): interpolation methods. Options includes `nearest`, `linear`
(3D-only), `bilinear`, `bicubic` (4D-only), and `area`.
Details can be found in:
https://pytorch.org/docs/stable/nn.functional.html
Returns:
ndarray: resized image(s).
"""
if len(img.shape) == 4:
h, w = img.shape[1:3]
elif len(img.shape) in (2, 3):
h, w = img.shape[:2]
else:
raise ("Unsupported input with shape of {}".format(img.shape))
assert (
self.h == h and self.w == w
), "Input size mismatch h w {}:{} -> {}:{}".format(self.h, self.w, h, w)
interp_method = interp if interp is not None else self.interp
# Option of align_corners is only supported for linear, bilinear,
# and bicubic.
if interp_method in ["linear", "bilinear", "bicubic"]:
align_corners = False
else:
align_corners = None
# note: this is quite slow for int8 images because torch does not
# support it https://github.com/pytorch/pytorch/issues/5580
float_tensor = torch.nn.functional.interpolate(
to_float_tensor(img),
size=(self.new_h, self.new_w),
mode=interp_method,
align_corners=align_corners,
)
return to_numpy(float_tensor, img.shape, img.dtype)