目标检测 --- Anchor的生成

本文主要介绍了Faster R-CNN中的Anchor机制,包括其在不同层输出分辨率上的设置,以及生成步骤。重点讲解了如何通过anchor_scales和anchor_ratios确定基础anchor的大小,并指出生成的anchor尺寸对应于训练分辨率而非原图大小。同时,讨论了生成的anchor中心点的定位原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Faster rcnn

1.1.概述

  • anchor本身的设置是基于各层输出分辨率上的各点,由各点回归出anchor的偏移量,预测anchor的类别;故anchor的布局需要和各层输出分辨率对应。
  • 输出分辨率各点anchor的数量和尺寸是可以调整的,其设置的合理与否,决定了网络的训练难易程度和模型的精度。
  • anchor大小的设置是对应到输入分辨率【即训练分辨率】大小,和原图大小和输出分辨率无关。
    在这里插入图片描述

1.2.anchor生成步骤

a) 在rpn网络初始化的同时,完成基础anchor的构建

class RPNHead(AnchorHead):

    def __init__(self, in_channels,
				 ......
                 seperable=False,
                 **kwargs):
		......
        super(RPNHead, self).__init__(2, in_channels, **kwargs)

class AnchorHead(nn.Module):
    def __init__(self,
                 num_classes,
                 .......
                 anchor_scales=[8, 16, 32],
                 anchor_ratios=[0.5, 1.0, 2.0],
                 anchor_strides=[4, 8, 16, 32, 64],
                 anchor_base_sizes=None,
				 ......
        super(AnchorHead, self).__init__()
        self.num_classes = num_classes
        self.anchor_scales = anchor_scales
        self.anchor_ratios = anchor_ratios
        self.anchor_strides = anchor_strides
        self.anchor_base_sizes = list(
            anchor_strides) if anchor_base_sizes is None else anchor_base_sizes
           
        self.anchor_generators = []
        for anchor_base in self.anchor_base_sizes:
            self.anchor_generators.append(
                AnchorGenerator(anchor_base, anchor_scales, anchor_ratios))
        self.num_anchors = len(self.anchor_ratios) * len(self.anchor_scales)
        
        #对于fpn的网络结构,如果各层设置多个self.anchor_scales,参考方案如下:
        # self.anchor_generators = []
        # if len(self.anchor_scales)>1:
        #     assert len(self.anchor_base_sizes) == len(self.anchor_scales)
        #     for i, anchor_base in enumerate(self.anchor_base_sizes):
        #         self.anchor_generators.append(
        #             AnchorGenerator(anchor_base,self.anchor_scales[i],anchor_ratios)
        #         )
        #     self.num_anchors = len(self.anchor_ratios) * len(self.anchor_scales[0])
        # else:
        #     for anchor_base in self.anchor_base_sizes:
        #         self.anchor_generators.append(
        #             AnchorGenerator(anchor_base, anchor_scales, anchor_ratios))
        #     self.num_anchors = len(self.anchor_ratios) * len(self.anchor_scales)

相关参数解释:

#anchor基础尺寸的缩放比例,是控制anchor大小最重要的参数
self.anchor_scales = anchor_scales  
#anchor的长宽比例设置
self.anchor_ratios = anchor_ratios 
#anchor步长设置【和下采样倍数对应,如果不对应将导致图片部分区域没有anchor或anchor的设置超过图片边缘】
self.anchor_strides = anchor_strides
#anchor基础尺寸,可以设置多个,一般等于各层下采样倍数【anchor_stride】即可,anchor的尺寸可以通过self.anchor_scales进行设置
self.anchor_base_sizes = list(anchor_strides
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值