代码来源:https://github.com/laisimiao/siamrpn.pytorch
结合博客关于SiamRPN代码的一些要点
下面是阅读上述SiamRPN代码时的笔记

1、template frame和detection frame经过相同的Siamese Network得到一个feature,然后经过RPN的classification branch和regression branch,其中template作为kernel在detection上做correlation操作。

2、分类分支的作用就是预测原图上的哪些anchor会与目标的IoU大于一定的阈值,他们对应最后的feature map上的点就是1;回归分支就是预测每个anchor与target box的xywh的偏移

preprocess data(数据预处理)

augmentation.py

  1. gray augmentation(可选): BGR->GRAY->BGR
  2. shift scale augmentation:
    1. if self.scale: (cx, cy, w, h)形式,中心点坐标不变,尺度缩放
    2. if self.shift: (x1, y1, x2, y2)形式,上下左右移动
    3. bbox 同样操作
  3. color augmentation
  4. blur augmentation
  5. flip augmentation

datasets.py(VIDYTBBLMDB)

  1. 在整个视频中随机抽取一帧作为模板帧,在模板帧前后 frame_range 的范围(不超过视频的长度)内随机抽取另一帧作为搜索帧
  2. 对模板帧和搜索帧做处理–>template_image, template_box, search_image, search_box(图片、目标框标签)
  3. 数据增强–>模板图像、搜索图像、搜索图像的bbox
  4. ⭐️ 设置 anchor,输出包含两种格式((x1, y1, x2, y2)、(cx, cy, w, h))
  5. ⭐️ 根据设置的 anchor 和真实的 bbox 来生成 cls, delta, delta_weight,即分类标签、回归标签、回归权重
  6. ⭐️ 最终输出的形式为{
    ‘template’: template,
    ‘search’: search,
    ‘label_cls’: cls,
    ‘label_loc’: delta,
    ‘label_loc_weight’: delta_weight
    }

⭐️ 表示不同于 SiamFC 的地方

SiamRPN(model.py)

    z       x|       |
backbone backbone\       /RpnHead/       \cls       reg

AlexNet

backbone

RpnHead

cls:z_ft        x_ft|           |Conv2d      Conv2d[N,2K*256,4,4][N, 256, 20, 20]\           /Conv2d|pred_cls(cross_entropy)
reg:z_ft        x_ft|           |Conv2d      Conv2d[N,4K*256,4,4][N, 256, 20, 20]\           /Conv2d|pred_reg(smooth L1)

SiamRPNTracker(track.py,测试过程)

  • 设置为 eval 模式

init(self, image, box)

  • 这部分就是利用第一帧的先验信息,包括第一帧图片和ground truth bbox,相当于一个one-shot detection,这个template frame就固定了,相当于一个kernel
  1. 只对于 z: crop 一块以 box 中心为中心、以 box 大小为基准稍大(s_z)的 patch,然后 resize 成 127 的大小,如果需要的话用颜色的平均值进行 pad
  2. 只对于 z: 送入 backbone

update(self, image)

  • 输入一张subsequent frame,然后根据预测值,加以scale和ratio的penalty,然后用cosine window来suppress large displacement,然后根据分类分数的最高值对应的anchor来回归预测目标位置
  1. 只对于 x: crop 一块以 box 中心为中心、以 s_x 为大小(s_x=s_z*255/127)的 patch,然后 resize 成 255 的大小,如果需要的话用颜色的平均值进行 pad
  2. 只对于 x: 送入 backbone
  3. 将 init 中得到的 z 的特征提取结果和上一步 x 的特征提取结果一起送入 rpnhead, 得到 outputs
  4. ⭐️ 将 outputs 的分类预测和回归预测转化为 score(通过softmax) 和 pred_bbox(修正后的anchor)
  5. ⭐️ scale penalty、aspect ratio penalty、window penalty
  6. 找到峰值点
  7. ⭐️ 调整 bbox 的大小(用学习率调整)和位置,输出 bbox
  8. 更新目标大小(size)和位置(center_pos),为下一帧做准备

train.py(训练过程)

  1. 构建 SiamRPN 模型
  2. 构建数据集(VIDYTBBLMDB类)和dataloader
  3. 导入预训练模型(siamrpn.backbone)
  4. 固定预训练模型的参数
  5. 设置优化器和学习率调整策略
  6. 从第10个epoch开始将预训练模型的参数解除固定
  7. 将模板和搜索区域送入网络:siamrpn(data[‘template’], data[‘search’]),得到输出 pred_cls, pred_reg
  8. 将输出 pred_cls, pred_reg 与 data[‘label_cls’]、data[‘label_loc’]、data[‘label_loc_weight’] 计算损失
  9. 记录损失和时间等信息
  10. 梯度反传和优化器更新,一个epoch结束前学习率更新
  11. 保存模型

【SOT】SiamRPN代码笔记相关推荐

  1. CSDN技术主题月----“深度学习”代码笔记专栏

    from: CSDN技术主题月----"深度学习"代码笔记专栏 2016-09-13 nigelyq 技术专题 Hi,各位用户 CSDN技术主题月代码笔记专栏会每月在CODE博客为 ...

  2. 看完师兄的代码笔记,我失眠了

    祝大家中秋节快乐! 最近很多公司的秋季招聘都已经启动了. 想必大家(尤其是经历过求职面试的)都知道,数据结构和算法在求职笔试/面试中的重要性. 纵观如今的互联网公司面试,清一色地都在重点考查这块,不开 ...

  3. LSTM TF核心实现代码笔记

    LSTM TF核心实现代码笔记 1. LSTM TF里的核心代码实现 2. 代码详细讲解 1. LSTM TF里的核心代码实现 LSTM网络的核心实现是在这个包里tensorflow/python.k ...

  4. 2018年最新Spring Boot视频教程附代码笔记资料(50G)

    1. Spring Boot  项目实战 ----- 技术栈博客企业前后端 链接:https://pan.baidu.com/s/1hueViq4 密码:4ma8 2.Spring Boot  项目实 ...

  5. Python Text Processing with NLTK 2.0 Cookbook代码笔记

    如下是<Python Text Processing with NLTK 2.0 Cookbook>一书部分章节的代码笔记. Tokenizing text into sentences ...

  6. Transformer课程 第8课NER案例代码笔记-IOB标记

    Transformer课程 第8课NER案例代码笔记-IOB标记 NER Tags and IOB Format 训练集和测试集都是包含餐厅相关文本(主要是评论和查询)的单个文件,其中每个单词都有一个 ...

  7. 2018尚硅谷SpringBoot视频教程附代码+笔记+课件(内含Docker)

    尚硅谷SpringBoot视频教程(内含Docker)附代码+笔记+课件 下载地址:百度网盘

  8. 吴恩达机器学习MATLAB代码笔记(1)梯度下降

    吴恩达机器学习MATLAB代码笔记(1)梯度下降 单变量线性回归 1.标记数据点(Plotting the Date) fprintf('Plotting Data') data = load('D: ...

  9. Transformer课程 第8课NER案例代码笔记-部署简介

    Transformer课程 第8课NER案例代码笔记 BERT微调器 NER是信息提取的子任务,旨在将非结构化文本中提到的命名实体定位并分类为预定义类别,如人名.组织.位置.医疗代码.时间表达式.数量 ...

  10. 【SFND_Lidar_Obstacle_Detection】代码笔记

    源代码链接: https://github.com/williamhyin/SFND_Lidar_Obstacle_Detection 激光雷达数据: x,y,z,indensity(可用于评价物体的 ...

最新文章

  1. 学金融买计算机配置,我是学金融投资的计算机等级考试哪个方向对我工作有用...
  2. 机器学习一 -- 什么是监督学习和无监督学习?
  3. oracle用户登录的认证方式
  4. httppost数据上传 unity_Unity中国增强版发布
  5. unity3d的执行顺序
  6. POJ - 2987 Firing(最大权闭合图)
  7. JDK环境变量配置(一次性成功)
  8. std::string的resize()与reserve()的区别
  9. 16产品经理需要具备的做事能力
  10. 鸿蒙历程及路标没有适配手机,鸿蒙2.0来了?华为开发者大会时间确认:Mate40会不会首发?...
  11. 随想录(以项目为中心的学习)
  12. 第七届蓝桥杯省赛--四平方和
  13. 详解汽轮机的TSI系统
  14. 致远项目管理SPM系统五大技术平台层-CMP能力概述
  15. 皇家彩世界教程iOS性能优化系列篇之“优化总体原则”
  16. 计算机电子表格编辑栏,#wps显示不出来excle#WPSexcel怎么把表格里的内容全部显示在编辑栏里...
  17. ESP8266开发之旅 阿里云物联网平台篇⑥ LED智能灯控制系统 全面讲解,上手一个小项目(MQTT客户端直连 + Web配网 + WebSocket局域网通信)
  18. jeeplus-一款款可一键生成前后端代码的开发平台
  19. 墨天轮沙龙 | 麦杰科技卢学东:openPlant 实时数据库系统及应用
  20. 使用构造方法 重载 Scanner键盘录入的方式,做一个两个int类型的相加 和三个double类型的计算器

热门文章

  1. Facebook母公司:混合现实走向市场还需要数年时间
  2. 芯片行业常用英文术语最详细总结(图文快速掌握)
  3. 搜索引擎基本工作原理
  4. 工作两三年了,整不明白架构图都画啥?
  5. input标签属性详解大全
  6. 各种深度摄像头的使用经验粗谈
  7. 无法启动程序因为计算机中丢失msvcr100,Win7系统计算机中Msvcr100.dll丢失的解决办法(两种方法)...
  8. 关于Linux UDP/TCP reuseport 二三事
  9. 松弛型内存模型(Relaxed memory models)的一个有趣的例子
  10. 恩尼格玛模拟器_用C语言编的恩格尼码模拟器