您当前的位置: 首页 >  目标检测
  • 3浏览

    0关注

    417博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

detectron2(目标检测框架)无死角玩转-09:源码详解(5)-anchor生成

江南才尽,年少无知! 发布时间:2020-02-11 22:01:26 ,浏览量:3

以下链接是个人关于detectron2(目标检测框架),所有见解,如有错误欢迎大家指出,我会第一时间纠正。有兴趣的朋友可以加微信:17575010159 相互讨论技术。若是帮助到了你什么,一定要记得点赞!因为这是对我最大的鼓励。 文末附带 \color{blue}{文末附带} 文末附带 公众号 − \color{blue}{公众号 -} 公众号− 海量资源。 \color{blue}{ 海量资源}。 海量资源。

detectron2(目标检测框架)无死角玩转-00:目录

前言

通过前面的一系列博客,已经把把大部分都讲解完成了,总的来说,还有两个点需要详细的讲解,一个为anchor,另外一个为 loss,该小结我们来讲解anchor,在讲解之前,推荐我之前的一篇博客,方便大家更加深入的了解anchor: 深度解剖(5):白话谈anchor(锚点),不懂来找我! 看过之后,我相信大家对于anchor算是有一定了解了,那么我们就开始深入的了解anchor,我们以 detectron2中 的RetinaNet为例子来讲解。

anchor生成

我们查看 configs\Base-RetinaNet.yaml 文件,可以看到如下:

  ANCHOR_GENERATOR: # anchor的生成
    SIZES: !!python/object/apply:eval ["[[x, x * 2**(1.0/3), x * 2**(2.0/3) ] for x in [32, 64, 128, 256, 512 ]]"]

在代码的运行中,其会变成一个列表,列表内容如下:

cfg.MODEL.ANCHOR_GENERATOR.SIZES = 
[[32, 40.3, 50.7], 
[64, 80.6, 101.5], 
[128, 161.2, 203.12], 
[256, 322.5, 406.3], 
[512, 645.0, 812.7]]

表示的是anchor初始的大小,后续还需要做一些列的变化,从这里可以知道,anchor的大小主要由 32,64,128,256,512 五个尺寸缩放而来,每个尺寸扩大了两次,分别为 X ⋅ 2 ( 1.0 / 3 ) X·2^{(1.0/3)} X⋅2(1.0/3) , X ⋅ 2 ( 2.0 / 3 ) X·2^{(2.0/3)} X⋅2(2.0/3)。从上面可以明显的看到,共生成 3x5 个 anchor 相关的数据,但是他有什么用呢?不急,我们先继续往下看。

打开源码 detectron2\modeling\anchor_generator.py,先找到如下部分代码:

class DefaultAnchorGenerator(nn.Module):
    """
    For a set of image sizes and feature maps, computes a set of anchors.
    """

    def __init__(self, cfg, input_shape: List[ShapeSpec]):
        super().__init__()
        # fmt: off
        sizes         = cfg.MODEL.ANCHOR_GENERATOR.SIZES

        # 默认[[0.5, 1.0, 2.0], [0.5, 1.0, 2.0], [0.5, 1.0, 2.0], [0.5, 1.0, 2.0], [0.5, 1.0, 2.0]]
        aspect_ratios = cfg.MODEL.ANCHOR_GENERATOR.ASPECT_RATIOS

        # 默认[8, 16, 32, 64, 128]
        self.strides  = [x.stride for x in input_shape]

        # 默认0.0
        self.offset   = cfg.MODEL.ANCHOR_GENERATOR.OFFSET

        # 检测self.offset是否符合标准
        assert 0.0             
关注
打赏
1592542134
查看更多评论
0.0425s