FANTrack代码阅读笔记

1.FANTrack系统结构图

在这里插入图片描述

用于相似性学习的Siamese网络:
在这里插入图片描述
bounding box分支:
在这里插入图片描述
appear 分支
在这里插入图片描述
关联网络
在这里插入图片描述

相似图的计算(用于得到最后的追踪结果,训练过程种不需要这一步)

在这里插入图片描述

2.FANTrack我理解的框架图

与mmMOT不同的是,FANTrack先分别得到Bbox相似性矩阵和表观相似性矩阵,并基于Bbox和appear特征分别计算它们的权重,再进行加权融合得到最终的相似度矩阵。而在mmMOT中,是先融合特征,再使用融合后的特征计算相似性矩阵。

FANTrack中也加入了对遮挡状态的预测,其实就是加进来了一个网络模型,由几个全连接层组成,用来预测遮挡状态,按文中的意思是可以提高性能的,我也可以尝试加入这个小的预测模型试一下。

在这里插入图片描述

3.FANTrack代码结构

这个代码没有像mmMOT一样模块化做得很好,把相同类型的全部放在了一个文件中,简单的对实现和框架构建做了分离,感觉添加模块可能会比较困难

在这里插入图片描述

4.代码解读

Tracker.py

完整的追踪流程,包括Kalman过滤器的预测、数据关联(特征计算、相似度计算、轨迹关联)、轨迹管理(新增、更新、删除)

追踪算法如下:

在这里插入图片描述

有三个类,Track、TrackedObject、Tracker,分别代表轨迹、以追踪的目标、追踪器

  • class Track:Kalman过滤器相关、轨迹相关
    • init:初始化,track_id、current_target、age、type等轨迹相关参数,F/H/P/Q/R等Kalman过滤器相关参数
    • 矩阵获取函数:get_P_matrix、get_R_matrix、get_Q_matrix
    • 轨迹更新:update()
    • 轨迹预测:predict()
  • class TrackedObject:已追踪成功的目标相关
    • init:初始化,track_id、occluded、truncated等
    • 写文件函数
    • 标签更新函数
  • def build_global_maps():根据simNet的输出结果构建全局/局部相似图
    • 在train.py和run simnet中调用了
  • class Tracker:追踪过程
    • init
      • 数据准备
      • 目标检测模型初始化:支持AVOD或RPN
      • 构建SimNet模型
      • 构建AssocNet模型
    • begin_tracking():主体的追踪流程
      • 计算start_frame和end_frame用于逐帧计算
      • 逐帧计算
        • 第1帧:为每个detection初始化新的轨迹,create_new_track()
        • 非第1帧
          • 预测:self.predict_tracks() (其实没有太明白predict是用来做什么的)
          • 关联:associations=self.get_associations(tragets,measurements)
          • 更新:self.update_tracks(tragets,measurements,associations)
        • 后处理:track.age+=1、结果写文档、可视化等
    • get_associations():计算关联关系,包括目标识别、计算相似度、数据关联三个大的过程
      • 坐标系转换
      • 相似图计算
        • 计算measurement_locations、target_centers等,用于构建全局、局部相似图
        • target和detections的Bbox向量和表观特征特征的获取
        • run simNet,根据原始表观特征和Bbox特征得到计算相似性的feature和weights;在这里也有用于消融实验的代码,包括使用马氏距离、不使用AVOD特征、不使用Bbox特征三种消融
        • 构建全局/局部相似图
      • 关联关系计算
        • run assocNet,得到m_pred_x,m_pred_y
        • 得到关联结果:associations、corr_scores
        • remap得到最终结果
    • 轨迹相关函数
      • create_new_track()
      • destory_track()
      • predict_tracks()
      • update_track(),根据关联结果完成轨迹的更新、创建和删除
    • 数据准备相关函数
      • get_meaurements()
      • get_gt_detections()
      • get_object_attribute()
      • get_predictions_from_avod()
    • 其它函数
      • check_none_associations() 处理measurements或targets为空的情况
      • get_associations() 根据AssocNet的预测结果得到关联结果
      • prepare_simnet_inputs() 根据measurements和tragets准备simNet的输入
Train.py

有一个类Trainer,用于训练不同模型

  • train_simnet()
    • 初始化:设置保存、变量初始化
    • 逐epoch训练
      • 训练
      • checkpoint保存
      • 验证:validation,损失
  • train_assocnet()
    • 初始化:设置保存、变量初始化
    • 逐epoch训练
      • 训练
      • checkpoint保存
      • 验证:validation,损失
  • run_simnet():运行simnet并保存输出(局部相似度图),作为AssocNet的输入
    • 调用create_similarity_maps()
  • create_similarity_maps()
    • 运行simnet得到特征、权重,target_center等
    • 构建local_corr_map(tracker.py->build_global_maps)
    • 得到输出
  • associations_results():根据预测值m_pred_x、m_pred_y得到最终关联结果
    • 涉及到全局坐标和局部坐标的转换
  • train_combine_network():两个网络联合训练
    • 初始化:设置保存、变量初始化
    • 逐epoch训练
      • 训练
      • checkpoint保存
      • 验证:validation,损失
model.py

关联模型,有一个类AssocModel

  • init():初始化,包括Bbox shape、appearance shape、center shape、correlation shape、locations等

  • build_simnet():simnet网络的搭建

    • 一些变量的初始化,包括t-1 targets的Bbox和表观向量、t目标的Bbox和表观向量、labels、tragets numbers等

      self.in_bbox_tar_ph = tf.placeholder(tf.float32, self.pos_shp_shape, 'in_bbox_tar')
      self.in_bbox_meas_ph = tf.placeholder(tf.float32, self.pos_shp_shape, 'in_bbox_meas')
      self.in_appear_tar_ph = tf.placeholder(tf.float32, self.appear_shape, 'in_appear_tar')
      self.in_appear_meas_ph = tf.placeholder(tf.float32, self.appear_shape, 'in_appear_meas')
      self.simnet_labels_ph = tf.placeholder(tf.float32, self.lab_shape, 'labels')
      self.training_ph = tf.placeholder(tf.bool, name = 'training')
      self.num_target_ph = tf.placeholder(tf.int32,shape=[1], name = 'num_targets')
      self.global_step = tf.placeholder(tf.int32, name = 'global_step')
      
      self.in_bbox_ph = tf.concat([self.in_bbox_tar_ph,self.in_bbox_meas_ph],
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值