目标检测笔记No.2锚框与模型

目标检测笔记No.2锚框与模型

  • 锚框
    • 什么是锚框
    • 锚框生成程序
      • 定义9个先验框
      • 程序
  • 网络模型
    • 简化的SSD模型
      • 回归与分类
    • SSD模型

锚框

什么是锚框

这个在论文(paper)中说法不太一样,如Faster RCNN中称之为anchor(锚),而SSD称之为prior bounding box(先验框),以下遇到的目标选择框,在还没有进行模型训练之前预设的选择框,使用先验框的说法。

锚框生成程序

在CV中,对图像先进行特征采集,一般使用CNN网络,这里使用VGG16模型,输入3×224×224的图像,输出512×7×7针对特征图,随后,对每一个cell 上生成9个先验框。
选择特征图进行先验框生成的原因:若在特征图上生成每一个cell生成9个先验框,一共有7×7×9个;若在原图上生成那么就要有224×224×9,没必要!我们的目的能够覆盖全图就可以,所以特征图是不错的选择。
这里先验框存储 使用 中间+宽高坐标 。

定义9个先验框

参数 说明
scale_anchor 先验框大小
ratio_anchor 先验框宽高比

先来个示意图,获得就是这9个先验框。

scale_anchor = [0.1, 0.2, 0.3] # 表示原图长/宽的0.1那么大
ratio_anchor = [1., 2., 0.5]

目标检测笔记No.2锚框与模型_第1张图片
目标检测笔记No.2锚框与模型_第2张图片
上图以中间点为例,并且已经将特征图所确定的先验框,映射到原图进行可视化展示。要的就是这个效果,随后不是所有的都留到最后,有一些与目标框毫无重叠的没有必要考虑,接下来的的步骤,那么可以利用IoU指标,设定阈值,初步设定为0.5,那么<0.5的框我们就直接分类为背景,哪些要回归目标的任务就让IoU>0.5的去实现。补充一点,这只是以一个点为例,每个cell都有9个框那么也要有441个框,那么原图可视化之后可谓密密麻麻!

程序

def create_prior_boxes():
        """
        VGG16最后的特征图尺寸为 7*7  具体间网络模型中简化的SSD示意图
        :return: prior boxes in center-size coordinates, a tensor of dimensions (441, 4)
        """
        fmap_dims = 7
        scale_anchor = [0.1, 0.2, 0.4]
        ratio_anchor = [1., 2., 0.5]

        prior_boxes = []
        for i in range(fmap_dims):
            for j in range(fmap_dims):
                cx = (j + 0.5) / fmap_dims
                cy = (i + 0.5) / fmap_dims

                for obj_scale in scale_anchor:
                    for ratio in ratio_anchor:
                        prior_boxes.append([cx, cy, obj_scale * sqrt(ratio), obj_scale / sqrt(ratio)])

        prior_boxes = torch.FloatTensor(prior_boxes)  # (441, 4).to(device)
        prior_boxes.clamp_(0, 1)  # (441, 4)

        return prior_boxes

网络模型

简化的SSD模型

目标检测笔记No.2锚框与模型_第3张图片

回归与分类

目标检测笔记No.2锚框与模型_第4张图片
就是设置CNN网络对应输出的通道数。

SSD模型

目标检测笔记No.2锚框与模型_第5张图片

说明推荐这篇博文链接: link.

参考链接: 动手学CV-Pytorch.

你可能感兴趣的:(目标检测或识别,pytorch,计算机视觉)