zoukankan      html  css  js  c++  java
  • 锚框

    生成多个锚框(contrib.nd.MultiBoxPrior)

    每个像素点构造多个锚框,假设设定一组大小s1,...,sn和一组宽高比r1,...,rm。然后每个像素组合,就有hwnm个锚框,一般情况下,只要s1,和r1的组合。即:

    共wh(n+m-1)个锚框

    交并比(IoU)

    面试中有提问过。。。

    标注训练集的锚框

    为了训练检测模型,为每一个锚框标注两类信息(类别,与真实边界框的偏移量offset)

    目标检测过程:

    • 生成多个锚框
    • 计算每个锚框的预测类别和偏移量
    • 调整锚框位置
    • 筛选需要输出的预测边界框

    假设:

    生成的锚框为A1,A2,...,Ana,真实边界框为B1,B2,...,Bnb。(na>=nb)

    矩阵Xna*nb 是对应锚框与真实边界框的IoU,然后不停筛maxX即可,多余的na-nb,横着查max,看是否达到阀值:

    生成锚框的类别就弄好了,偏移量的计算:

    其中:

    A : 宽高 wa , ha , 中心 (xa , ya)

    B : 宽高 wb , hb , 中心 (xb , yb)

    若 A 没有分配真实框 B,则 A 为背景(负类锚框)

    %matplotlib inline
    import sys
    import gluonbook as gb
    from mxnet import image,nd,gluon,contrib
    import numpy as np
    np.set_printoptions(2)
    
    img = image.imread('./catdog.jpg').asnumpy()
    h, w = img.shape[0:2]
    h, w
    
    X = nd.random.uniform(shape=(1,3,h,w))
    Y = contrib.nd.MultiBoxPrior(X,sizes=[0.75,0.5,0.25],ratios=[1,2,0.5])
    Y.shape
    
    boxes = Y.reshape((h,w,5,4))
    boxes[25,250,:,:]
    
    # 画出一个像素的所有锚框
    def show_bboxes(axes, bboxes, labels=None, colors=None):
        def _make_list(obj, default_values=None):
            if obj is None:
                obj = default_values
            elif not isinstance(obj, (list, tuple)):
                obj = [obj]
            return obj
    
        labels = _make_list(labels)
        colors = _make_list(colors, ['b', 'g', 'r', 'm', 'c'])
        for i, bbox in enumerate(bboxes):
            color = colors[i % len(colors)]
            rect = gb.bbox_to_rect(bbox.asnumpy(), color)
            axes.add_patch(rect)
            if labels and len(labels) > i:
                text_color = 'k' if color == 'w' else 'w'
                axes.text(rect.xy[0], rect.xy[1], labels[i],
                          va='center', ha='center', fontsize=9, color=text_color,
                          bbox=dict(facecolor=color, lw=0))
    
    gb.set_figsize()
    bbox_scale = nd.array((w,h,w,h))
    fig = gb.plt.imshow(img)
    show_bboxes(fig.axes,boxes[250,250,:,:]*bbox_scale,['s=0.75, r=1', 's=0.5, r=1', 's=0.25, r=1', 's=0.75, r=2',
                 's=0.75, r=0.5'])

    labels = contrib.nd.MultiBoxTarget(anchors.expand_dims(axis=0),
                                       ground_truth.expand_dims(axis=0),
                                       nd.zeros((1, 3, 5)))
    # 标注类别
    labels[2]
    
    # mask变量,用来过滤掉背景的偏移量
    labels[1]
    
    # 偏移量
    labels[0]

  • 相关阅读:
    Mac下发布Unity3d中Android平台下出现“android (invokation failed)”的错误
    图片切换特过渡效果
    文件下载
    ASP.NET前台绑定后台变量方法总结
    C# aspx 数据绑定集中 Bind Eval DataBinder.Eval
    MVC 3 Excel文件下载
    ASP.NET中Get和Post的用法 Request.QueryString,Request.Form,Request.Params的区别
    删除掉前一天文件夹里面的文件
    友情链接
    博客园管理记录
  • 原文地址:https://www.cnblogs.com/TreeDream/p/10143318.html
Copyright © 2011-2022 走看看