from typing import Sequence import numpy as np def get_anchor_grid( num_rows: int, num_cols: int, scale_factor: float, anchor_widths: Sequence[float], aspect_ratios: Sequence[float], ) -> np.ndarray: anchor_grid = np.empty( [len(anchor_widths), len(aspect_ratios), num_rows, num_cols, 4], dtype=float) for (width_idx, ratio_idx, row, col) in np.ndindex(anchor_grid.shape[:-1]): anchor_point = ( col * scale_factor + scale_factor / 2, row * scale_factor + scale_factor / 2) width = anchor_widths[width_idx] ratio = aspect_ratios[ratio_idx] anchor_grid[width_idx, ratio_idx, row, col] = get_box( width, ratio, anchor_point) return anchor_grid def get_box(width: float, ratio: float, anchor_point: tuple[float, float]) -> np.ndarray: box = np.empty(4, dtype=float) box[0] = anchor_point[0] - (width / 2) box[1] = anchor_point[1] - (width * ratio / 2) box[2] = anchor_point[0] + (width / 2) box[3] = anchor_point[1] + (width * ratio / 2) return box