赞
踩
get_anchors()函数功能:
为每张图像根据其特征图的大小生成锚点,并为每个锚点生成一个判断是否有效的布尔值(valid flag)。valid flag用于标记哪些锚点是在图像填充区域之外
参数:
featmap_sizes: 特征图的尺寸列表,每个元素都是一个二元组,表示特征图的高度和宽度。
img_metas:包含图像元数据的字典列表,例如图像的填充尺寸(pad_shape)。
device:指定生成的锚点张量应该存放在哪个设备上,例如’cuda’或’cpu’。
返回值:
anchor_list:每张图像的锚点列表,每个元素是一个张量,包含了该图像所有锚点的坐标。 valid_flag_list:标记对应锚点是否有效
步骤:
生成锚点:首先,使用anchor_generator的grid_priors方法为一组特征图尺寸生成多尺度的锚点。因为所有图像的特征图大小相同,所以这一步只需要执行一次。
复制锚点:接着,将这组多层次锚点复制给每张图像即batchsize张图片,组成anchor_list。
计算有效标志:落在填充区域的锚点被标记为无效,从而在后续的处理中被忽略。
代码详解:
def get_anchors(self, featmap_sizes, img_metas, device='cuda'): """Get anchors according to feature map sizes. Args: featmap_sizes (list[tuple]): Multi-level feature map sizes. img_metas (list[dict]): Image meta info. device (torch.device | str): Device for returned tensors Returns: tuple (list[Tensor]): - anchor_list (list[Tensor]): Anchors of each image. - valid_flag_list (list[Tensor]): Valid flags of each image. """ # 计算图像的数量 num_imgs = len(img_metas) # 由于所有图像的特征图大小相同,我们只需要计算一次锚点 multi_level_anchors = self.anchor_generator.grid_priors( featmap_sizes, device=device) # 为每张图像复制相同的锚点 anchor_list = [multi_level_anchors for _ in range(num_imgs)] # 对每张图像,计算多尺度锚点是否有效 valid_flag_list = [] for img_id, img_meta in enumerate(img_metas): # 根据图像的填充尺寸计算是否是有效猫点 multi_level_flags = self.anchor_generator.valid_flags( featmap_sizes, img_meta['pad_shape'], device) valid_flag_list.append(multi_level_flags) return anchor_list, valid_flag_list
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。