zoukankan      html  css  js  c++  java
  • Siamese-RPN论文阅读

    High Performance Visual Tracking with Siamese Region Proposal Network

    商汤

    提出双孪生位置建议网络(Siamese-RPN)

    proposed Siamese region proposal network (Siamese-RPN)

    特点:

    1.有别于生成响应图,直接生成目标位置回归

    2.速度快,精度好

     

    网络结构:

    网络主干选择AlexNet(较早)

    1.分别对模板帧(第一帧)和检测帧做特征提取

    2.对于目标置信回归,取两个特征图,各自经过一次卷积,用小的特征图对大的特征图做卷积,卷积结果(通道数2*k个,k是anchor数量)用来预测不同长框比的anchor下是否有目标(具体看下代码)

    3.同理,位置回归得到4*k个通道的特征图

    损失函数:和大多数的检测一样,分类回归用的是交叉熵损失,位置回归用平滑L1损失

     

    训练集:

    ILSVRC (4000个训练集和550个验证集)

    Youtube-BB  100000(太大了,没有完全统计)

    训练方式:SGD(现在好像也比较少用)

    训练时IOU阈值:

    0.6以上为正样本,只取16个训练

    0.3以下为负样本,只取64个训练

    训练label

    模板:

     

    以目标为中心取A*A大小的patch,缩放到127*127

    搜索区域:

    2A*2A,缩放到255*255

    视频帧的挑选帧号距离不大于100

    训练机器1060,epoch50,10-2到10-6(0.0005衰减)

    测试上,两种选取机制

    1.只看中间7*7

    2.加惩罚项:cos窗+尺度长宽比惩罚

     

     

    实验结果(160FPS)

     

    后续:

    DaSiamRPN:训练集加入COCO与VOC,训练负样本;长程跟踪机制

    SiamRPN++:ResNet、特征融合

    SiamMask:掩码

    RPN的生成

    每个点分类是否为目标,回归x,y,w,h,其中x与y为目标中心坐标,而不是目标左上角坐标

    分类:2*k个,2代表是目标不是目标,最后通过softmax做预测与训练

    位置回归:x,y,w,h是最终计算的结果,不是直接回归的结果(CNN做卷积的时候都不知道自己卷的是哪里),回归的是相对的值

     

    label生成准备

    参数

    base=64#anchor的基础大小

    stride=16#anchor滑动的步长,输入图像与输出图像的比例

    scale=[1/3,1/2,1,2,3]#anchor的长宽比

    anchor:每个像素点打k个格子,k为scale长度,

    每个格子有固定的长宽比,计算方式:

    s=base*base

    w=sqrt(s/scale)

    h=w*scale

    保证w*h=base*base

     

    每个像素点都有k个anchor,n*n的特征图就有n*n*k个anchor(这里检测anchors)

    每个anchor都有各自的Xa,Ya,Wa,Ha->Xa0,Ya0,Xa1,Ya1

    label生成

    分类label:给一个目标GT,Xg,Yg,Wg,Hg -> Xg0,Yg0,Xg1,Yg1计算与每个anchor的IOU,大于Th=0.7为正样本,小于Tl=0.3为负样本

    回归label:

    diff_anchors=np.zeros_like(anchors).astype(np.float32)

    diff_anchors[:,0]=(gt[0]-anchors[:,0])/(anchors[:,2]+0.01)

    diff_anchors[:,1]=(gt[1]-anchors[:,1])/(anchors[:,3]+0.01)

    diff_anchors[:,2]=np.log(gt[2]/(anchors[:,2]+0.01))

    diff_anchors[:,3]=np.log(gt[3]/(anchors[:,3]+0.01))

    预测:

    输出2*k+4*k个通道的特征图,无BN层,无激活函数

    bboxes=np.zeros_like(delta)

    bboxes[:,0]=delta[:,0]*self.anchors[:,2]+self.anchors[:,0]

    bboxes[:,1]=delta[:,1]*self.anchors[:,3]+self.anchors[:,1]

    bboxes[:,2]=np.exp(delta[:,2])*self.anchors[:,2]

    bboxes[:,3]=np.exp(delta[:,3])*self.anchors[:,3]#[x,y,w,h]

  • 相关阅读:
    mysql高效分页
    mybatis插入值为空时需要制定类型
    NoClassDefFoundError
    mybatis动态sql中的两个内置参数(_parameter和_databaseId)
    Java位运算在程序设计中的使用:位掩码(BitMask)
    基于netty的聊天室(保持和获取客户端channel)
    Netty自定义协议半包编解码
    位运算基础
    JAVA加密系列(四)- 位运算加密(异或加密)
    位运算基础
  • 原文地址:https://www.cnblogs.com/zhengyuqian/p/10609737.html
Copyright © 2011-2022 走看看