持续更新中……

DLT是香港科大的Naiyan Wang和Dit-Yan Yeung提出的,文章和代码见 http://winsty.net/dlt.html

相关论文是 Learning A Deep Compact Image Representation for Visual Tracking (NIPS2013')

论文本身并无太多亮点,可以说基本没讲啥。

大体思路是先用SDAE(Stacked Denoising AutoEncoder)对很多数据进行离线训练,离线训练的目的是提取特征。然后再用来在线跟踪。跟踪时使用粒子滤波来完成。

还是从研究代码开始吧。

run_individual.m只是只是提供了一些图像信息及参数,核心的函数在run_DLT.m里实现。

在这里必须吐槽一下MATLAB 2012a,如果系统语言为英文的话,居然没法在M文件编辑器里用中文写注释。

  1 function results=run_DLT(seq, res_path, bSaveImage)
  2     addpath('affineUtility');
  3     addpath('drawUtility');
  4     addpath('imageUtility');
  5     addpath('NN');
  6     rand('state',0);  randn('state',0);
  7
  8     %  如果opt未定义    9     if isfield(seq, 'opt')
 10         opt = seq.opt;
 11     else
 12         trackparam_DLT;
 13     end
 14     rect=seq.init_rect; % [水平左侧 垂直上方 宽度 高度 0]
 15     % 下面它会再蛋疼地改成 [水平中心 垂直中心 宽度 高度 0]
 16     p = [rect(1)+rect(3)/2, rect(2)+rect(4)/2, rect(3), rect(4), 0];
 17
 18     frame = imread(seq.s_frames{1});    % seq.s_frames 里放着所有图像的路径
 19     if size(frame,3)==3
 20         frame = double(rgb2gray(frame));
 21     end
 22
 23     scaleHeight = size(frame, 1) / opt.normalHeight;    % 读入图像的高度/标准图像的高度,下同 24     scaleWidth = size(frame, 2) / opt.normalWidth;
 25     p(1) = p(1) / scaleWidth;   % 将GT中的目标位置参数按比例转成标准图像大小的对应值 26     p(3) = p(3) / scaleWidth;
 27     p(2) = p(2) / scaleHeight;
 28     p(4) = p(4) / scaleHeight;
 29     frame = imresize(frame, [opt.normalHeight, opt.normalWidth]); % 将读入图像进行比例放缩 30     frame = double(frame) / 255;
 31
 32
 33     % paramOld [ 模板水平中心 模板垂直中心, 宽度/标准模板宽度(32)
 34     %               0, 模板宽高比/标准模板宽高比(1:1), 0  ]
 35     paramOld = [p(1), p(2), p(3)/opt.tmplsize(2), p(5), p(4) /p(3) / (opt.tmplsize(1) / opt.tmplsize(2)), 0];
 36     param0 = affparam2mat(paramOld);
 37     % param0 [ 模板水平中心 模板垂直中心, 宽度/标准模板宽度(32), 0, 高度/标准模板高度(32), 0 ] 39
 40
 41     if ~exist('opt','var')  opt = [];  end
 42     if ~isfield(opt,'minopt')
 43       opt.minopt = optimset; opt.minopt.MaxIter = 25; opt.minopt.Display='off';
 44     end
 45     reportRes = [];
 46
 47     % 处理模板( 变换后)  48     tmpl.mean = warpimg(frame, param0, opt.tmplsize); % tmlsize = 32X32
 49     tmpl.basis = [];
 50
 51     % 10个正样本,在模板内取  52     for i = 1 : opt.maxbasis / 10
 53         tmpl.basis(:, (i - 1) * 10 + 1 : i * 10) = samplePos_DLT(frame, param0, opt.tmplsize);
 54     end
 55     % 100个负样本(好像是在模板外随机……待验证)  56     p0 = paramOld(5);
 57     tmpl.basis(:, opt.maxbasis + 1 : 100 + opt.maxbasis) = sampleNeg(frame, param0, opt.tmplsize, 100, opt, 8);
 58
 59     param.est = param0;
 60     param.lastUpdate = 1;
 61
 62     wimgs = [];
 63
 64     % draw initial track window
 65     drawopt = drawtrackresult([], 0, frame, tmpl, param, []);
 66     drawopt.showcondens = 0;  drawopt.thcondens = 1/opt.numsample;
 67     if (bSaveImage)
 68         imwrite(frame2im(getframe(gcf)),sprintf('%s0000.jpg',res_path));
 69     end
 70
 71     % track the sequence from frame 2 onward
 72     duration = 0; tic;
 73     if (exist('dispstr','var'))  dispstr='';  end
 74     L = [ones(opt.maxbasis, 1); (-1) * ones(100, 1)];
 75
 76     % initialize NN and train
 77     nn = initDLT(tmpl, L);
 78     L = [];
 79     % add tmpl.basis to pos(:,11) cuz opt.maxbasis = 10
 80     pos = tmpl.basis(:, 1 : opt.maxbasis);
 81     pos(:, opt.maxbasis + 1) = tmpl.basis(:, 1);
 82     opts.numepochs = 5 ;
 83
 84     % image iteration start
 85     for f = 1:size(seq.s_frames,1)
 86       frame = imread(seq.s_frames{f});
 87
 88       % if RGB ->gray
 89       if size(frame,3)==3
 90         frame = double(rgb2gray(frame));
 91       end
 92       frame = imresize(frame, [opt.normalHeight, opt.normalWidth]);
 93       frame = double(frame) / 255;
 94
 95       % do tracking
 96        param = estwarp_condens_DLT(frame, tmpl, param, opt, nn, f);
 97
 98       % do update
 99
100       temp = warpimg(frame, param.est', opt.tmplsize);
101       pos(:, mod(f - 1, opt.maxbasis) + 1) = temp(:);
102       if  param.update
103           opts.batchsize = 10;
104           % Sample two set of negative samples at different range.
105           neg = sampleNeg(frame, param.est', opt.tmplsize, 49, opt, 8);
106           neg = [neg sampleNeg(frame, param.est', opt.tmplsize, 50, opt, 4)];
107           nn = nntrain(nn, [pos neg]', [ones(opt.maxbasis + 1, 1); zeros(99, 1)], opts);
108       end
109
110       duration = duration + toc;
111
112       res = affparam2geom(param.est);
113       p(1) = round(res(1));
114       p(2) = round(res(2));
115       p(3) = round(res(3) * opt.tmplsize(2));
116       p(4) = round(res(5) * (opt.tmplsize(1) / opt.tmplsize(2)) * p(3));
117       p(5) = res(4);
118       p(1) = p(1) * scaleWidth;
119       p(3) = p(3) * scaleWidth;
120       p(2) = p(2) * scaleHeight;
121       p(4) = p(4) * scaleHeight;
122       paramOld = [p(1), p(2), p(3)/opt.tmplsize(2), p(5), p(4) /p(3) / (opt.tmplsize(1) / opt.tmplsize(2)), 0];
123
124       reportRes = [reportRes;  affparam2mat(paramOld)];
125
126       tmpl.basis = [pos];
127       drawopt = drawtrackresult(drawopt, f, frame, tmpl, param, []);
128       if (bSaveImage)
129           imwrite(frame2im(getframe(gcf)),sprintf('%s/%04d.jpg',res_path,f));
130       end
131       tic;
132     end
133     duration = duration + toc
134     fprintf('%d frames took %.3f seconds : %.3fps\n',f,duration,f/duration);
135     results.res=reportRes;
136     results.type='ivtAff';
137     results.tmplsize = opt.tmplsize;
138     results.fps = f/duration;
139 end

转载于:https://www.cnblogs.com/zeadoit/p/4161427.html

DLT(DeepLearningTracker)学习与代码理解 (1)相关推荐

  1. 【HSI】高光谱的数据集分类深度学习实战及代码理解

    [HSI]高光谱的数据集分类深度学习实战及代码理解 文章目录 [HSI]高光谱的数据集分类深度学习实战及代码理解 一.配置文件编写 二.高光谱图像的处理 2.1图像数据变换 2.2 数据整合 2.3 ...

  2. MTCNN算法与代码理解—人脸检测和人脸对齐联合学习

    MTCNN算法与代码理解-人脸检测和人脸对齐联合学习 写在前面 主页:https://kpzhang93.github.io/MTCNN_face_detection_alignment/index. ...

  3. 【Pytorch深度学习实践】B站up刘二大人之BasicCNN Advanced CNN -代码理解与实现(9/9)

    这是刘二大人系列课程笔记的 最后一个笔记了,介绍的是 BasicCNN 和 AdvancedCNN ,我做图像,所以后面的RNN我可能暂时不会花时间去了解了: 写在前面: 本节把基础个高级CNN放在一 ...

  4. 如何阅读一份深度学习项目代码?

    犹豫很久要不要把读代码这个事情专门挑出来写成一篇推文.毕竟读代码嘛,大家可能都会读.而且笔者个人读的和写的代码量也并不足以到指导大家读代码的程度.但笔者还是决定大胆地写一点:就当是给自己设立今后读代码 ...

  5. 深度学习项目代码阅读建议

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|机器学习实验室 犹豫很久要不要把读代码这个事情专门挑出来写 ...

  6. 如何高效的学习TensorFlow代码?

    如何高效的学习TensorFlow代码? 如题,或者如何掌握TensorFlow,应用到任何领域? 添加评论分享 10 个回答 爱琳李,老李,明天就辍学了 8 人赞同 本来都忘了这个问题了,不过看到很 ...

  7. Deep Learning论文笔记之(五)CNN卷积神经网络代码理解

    Deep Learning论文笔记之(五)CNN卷积神经网络代码理解 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些论文,但 ...

  8. 【完结】你对深度学习模型的理解是否足够深刻,这12篇文章可以作为一个参考...

    文/编辑 | 言有三 好的模型结构是深度学习成功的关键因素之一,不仅是非常重要的学术研究方向,在工业界实践中也是模型是否能上线的关键.对各类底层深度学习模型设计和优化技术理解的深度是决定我们能否在深度 ...

  9. 怎样高效阅读一份深度学习项目代码?

    犹豫很久要不要把读代码这个事情专门挑出来写成一篇推文.毕竟读代码嘛,大家可能都会读.而且笔者个人读的和写的代码量也并不足以到指导大家读代码的程度.但笔者还是决定大胆地写一点:就当是给自己设立今后读代码 ...

最新文章

  1. 超强后浪:14岁考上研究生,如今17岁的他或将成为全国最小的博士生!
  2. Golang正则笔记 :使用正则表达式处理题库文本
  3. pymysql dataframe 写入sql
  4. 卸载一直在创建还原点_Win10电脑开机一直转圈无法进入系统的解决方法
  5. 魔兽世界·与你同行,一起追忆魔兽年华吧
  6. 上的网页显示拒绝访问_DLink家庭路由器上发现6个漏洞
  7. php pdo 封装类,php pdo封装类代码(支持事务)
  8. Java中大规模集合快速求和计算
  9. Spark GraphX算法 - PageRank算法
  10. Pycharm更改快速规整代码快捷键
  11. 强悍的 Linux —— grep 与 egrep
  12. FormsAuthentication使用指南
  13. 群晖如何建php网站_群晖nas使用教程31:搭建个人网站ZBLOG
  14. abaqus14安装_Abaqus安装方法
  15. 服务器虚拟化对硬件有要求,虚拟主机对硬件有要求吗
  16. 安装 OpenCC 简繁体中文转换
  17. [论文阅读]LDSA:Learning Dynamic Subtask Assignment in Cooperative Multi-Agent Reinforcement Learning
  18. PTA——鸡兔同笼zzuli
  19. 中文关键词提取tfidf算法改进bsaeline
  20. 收藏夹导出至html,分享win7电脑中三种导出浏览器收藏夹地址方法

热门文章

  1. HTML5学习笔记简明版(3):新元素之hgroup,header,footer,address,nav
  2. nginx rewrite中last和break的区别
  3. c# winform编程之多线程ui界面资源修改总结篇
  4. mongodb可视化工具连接报错
  5. iOS开发之自定义View的一些坑
  6. 大数据会说话也“慧”说话
  7. Vue.js全家桶高还原网易云音乐(Windows PC版)
  8. DNA Sorting(排序)
  9. Android Stability test occured SWT restart issue
  10. mysql忘记密码,如何重置密码