MDNet代码运行(二) Train


代码链接py-mdnet

**环境配置**: python3.6.6
torch 1.1.0
opencv 3.0+

下载此代码:git clone 链接
这部分用到的代码为:pretrain下的所有和modules下的部分
这版新增了在imagenet下的训练,论文中没有提到
根据readme中的步骤来:
Download VGG-M (matconvnet model) and save as “models/imagenet-vgg-m.mat”

Pretraining on VOT-OTB:
Download VOT datasets into “datasets/VOT/vot201x”
说明:打开datasets/list/vot-otb.txt,里面有一个视频列表,在vot2013 2014 2015下挑选了一些视频序列,使得不与OTB 上的视频重复或者相似。顺便说一下从vot2013后数据集的groundtruth和otb不一样,vot有八个值,分别表示四个点的坐标,选取多边形区域进行标注,是不规则的,参考

prepro_vot.py(用于得到训练的image_path,gt)

with open(path,‘r’) as fp:
seq_list=fp.read().splitlines()
对于8个点的gt,代码做如下处理:在这里插入图片描述

train_mdnet.py

python pretrain/train_mdnet.py -d vot
运行次代码后的结果:
在这里插入图片描述
在这里插入图片描述
由最开始的mean precision 0.253到最后的0.970

PIL.Image.open()函数读取图片的格式是RGB,image_size=(480,270),将每个视频里的图片的顺序打乱得到随机索引,每个视频随机选8帧。
加载"models/imagenet-vgg-m.mat",和tracking不一样,这里的branches层(fc6)加载58个分支,截取一部分图:在这里插入图片描述
要学习的层为 [“conv”, “fc”]。即都要学习
初始化loss和更新参数,其他层lr为0.0001,fc层为0.001
训练50次,model.train(), 把视频顺序打乱,然后和tracking一样,随机选一个视频,从视频中随机选8帧,每帧提取4个正样本,12个负样本,总共32个正样本96个负样本,组成一个batch,提取样本后,在原图上截取相应的部分,然后resize107x107,将正样本、负样本输入到model中得到对应的分数,(32,96,107,107)->(32,96,25,25)->(32,256,5,5)->(32,512,3,3)->
(32,4608)->(32,512)->(32,512),分别得到pos_score,neg_score。
算lossloss = criterion(pos_score, neg_score)
model.zero_grad()
梯度裁剪
optimizer.step()
算 precision
训练完后保存共享层 的参数

总结为:加载预训练模型的共享层 然后训练多分支(多域,即最后一层),没有视频对应一个域,学习每个域的共享特征。得到正样本分数【32,2】负样本分数【96,2】计算损失在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值