【SOT】SiamRPN代码笔记

news/2024/7/24 10:17:55 标签: pytorch, 深度学习, python

代码来源: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. 保存模型

http://www.niftyadmin.cn/n/1585477.html

相关文章

android使用Pull解析来自服务器的xml文件时出现错误以及解决方案

直接上代码,代码中有详细注释: 1 public class CheckUpdateManager {2 private static final String TAG "CheckUpdateManager";3 private ProgressDialog mWaitDialog;4 private Context mContext;5 private boolean mIsSho…

【SOT】MDNet(在线更新)代码笔记

论文:Learning Multi-Domain Convolutional Neural Networks for Visual Tracking 代码:https://github.com/hyeonseobnam/py-MDNet 网络整体结构: 论文中的重点: 首先进行多领域学习。学习完成后,当给定一个测试序…

cv2.VideoWriter生成视频无法播放的原因(持续补充)

cv2.VideoWriter的使用方法 cv2.VideoWriter(filename, fourcc, fps, frameSize[, isColor])filename:视频保存路径fourcc:指定编码器fps:视频帧率frameSize:图像大小isColor:黑白画面还是彩色画面 示例 first_fram…

动态SQL实现与注意事项(有返回值与无返回值动态SQL 实现)

1、分类 当执行的SQL语句需传入变量时,必须使用SQL 动态语句实现; 动态语句分两种情况: (1)有返回值动态SQL (2)无返回值动态SQL 2、实现 假设存在一个学生表,具有UserID, UserNam…

NAT2021数据集

NAT2021数据集网站:https://vision4robotics.github.io/NAT2021/,用于夜晚场景的无监督单目标跟踪。 数据解压缩 下载下来的训练数据集直接解压缩会报错(不太明白为什么),所以需要先对压缩包进行修复。我采用的方式是…

Entity Framework Core 2.0的突破性变更

在之前的文章里,我们看到了EF Core 2.0的新特性和槽点。今天,我们来看一看EF Core的突破性变更。\\不支持EF Core 1.x数据库驱动器\\EF通过数据库驱动器为SQL Server、MySQL等数据库生成SQL。EF没有通用的OleDB或ODBC驱动器,所以只能使用专门…

【opencv】Layout of the output array img is incompatible with cv::Mat

找了一上午的问题!可算找到解决办法了哈哈哈哈,赶紧记录一下! 目录解决方法直通车出错的程序是下面这段,是目标跟踪的demo程序,在给定视频上测试,标注真值bbox与预测bbox。def main():# load configcfg.mer…

redis集群与分片(1)-redis服务器集群、客户端分片

下面是来自知乎大神的一段说明,个人觉得非常清晰,就收藏了。为什么集群?通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取。Redis是一个很好的Cache工具。大型网站应用,…