BoLiu's picture
Rename NeMo Retriever references to Nemotron (#3)
ea7747b verified
Raw
History Blame
2.05 kB
# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
import math
import torch
import torch.nn.functional as F
def pad_to_square(img: torch.Tensor, target_length: int, how="center") -> torch.Tensor:
"""
Pads the input image to a square shape with the specified size.
Args:
img (torch.Tensor): Input image tensor of shape (C, H, W).
size (int): The target size for both height and width.
Returns:
torch.Tensor: Padded image tensor of shape (C, size, size).
"""
_, h, w = img.shape
if how == "center":
pad_h = (target_length - h) // 2
pad_w = (target_length - w) // 2
return F.pad(
img, (pad_w, target_length - w - pad_w, pad_h, target_length - h - pad_h), value=1.0
)
elif how == "bottom_right":
pad_h = target_length - h
pad_w = target_length - w
return F.pad(img, (0, pad_w, 0, pad_h), value=1.0)
else:
raise ValueError(f"Unsupported padding method: {how}")
def interpolate_and_pad(
images: torch.Tensor, pad_color: torch.Tensor, infer_length: int
) -> torch.Tensor:
"""
Interpolates the input images to a specified height and pads them to a specified width.
Args:
images (torch.Tensor): Input image tensor of shape (B, C, H, W).
infer_height (int): The target height for interpolation.
pad_infer_width (int): The target width for padding.
Returns:
torch.Tensor: Interpolated and padded image tensor of shape (B, C, infer_height, pad_infer_width).
"""
pad_infer_width = int(math.ceil(infer_length / 128) * 128)
rs_images = F.interpolate(
images, size=(infer_length, infer_length), mode="bilinear", align_corners=True
)
padded = (
pad_color.reshape(1, -1, 1, 1)
.expand(images.shape[0], -1, infer_length, pad_infer_width)
.contiguous()
)
padded[..., :infer_length].copy_(rs_images)
return padded