庖丁解牛TLD(三)——算法初始化

上一讲我提到对于算法的初始化工作主要是在tldInit这个函数里实现的。主要分为如下几大步骤,1)初始化Detector。2)初始化Trajectory。3)训练Detector

1)初始化Detector

其中bb_scan为扫描grid区域,该函数输入为boundingBox,输出为一系列的RectBox,是根据boundingBox的大小参数对待搜素区域选择一系列的box作为备选的跟踪区域,box的位置和尺度都有变化,和RectBox相应的尺度。但RectBox有6个参数,前4个分别为Rect的左上角坐标(x1,y1)和右下角坐标(x2,y2)。后两个参数求大神解释(PS:后来在fern函数里找到了解释,分别为指向对应尺度特征的指针位置、每一行box的数量——用在搜索邻近box)!对于这个函数内部我还有一个疑惑,就是对ntuples函数功能的使用,哎,怎奈Matlab语法都不熟悉,只能慢慢啃了,感觉作者这里就是把RectBox的左上角的所有可能的坐标值传入该函数,得到左上角坐标位置的全部组合(不知道理解对了没)。

接下来的工作时特征的初始化,是在tldGenerateFeature函数里实现的。这个函数相对独立,作者这里为了产生效果较好的随机特征真是煞费苦心,输入的参数有两个,一个是nTREE = 10,一个是nFEATURE = 13。输出为nTREE组特征,每组特征为nFEATURE个点对,每一个点对有4个参数,分别两点坐标(x1,y1),(x2,y2),取值范围为(0~1)其中第一个点的分辨率为0.1,还不太明白这样设计的原因,待进一步分析代码,有高人指点一下更好。值得注意的是产生的点对不是横坐标相同x1 = x2,就是纵坐标相同y1 = y2。这里用图片显示一组特征,线段的两个端点


下一步工作为初始化detector。这个功能是用强大的fern函数写的,该函数有多个功能,根据传入参数的标志分别可以实现clear操作、init操作、update操作、evaluate操作、detect操作、get pattern操作。fern函数是用c写的,混合编程没有弄的太明白,还没能调试一下看看,只能看代码猜。在初始化detector的工作里,用到的是init操作。

2)初始化Trajectory

这部分没有什么要说明的,都是些零碎的初始化工作,matlab里面对一些必要的变量开辟一些空间和定义一些变量的值。具体分析Trajectory的工作的时候可以具体再分析

3)训练Detector

首先得到Target,作者注释说该Target只是用来显示,有待我后续验证。得到Target要调用函数img_patch,img_patch函数是获得一幅图像中目标区域box的像素信息patch。

接下来产生正样本数据集,调用tldGeneratePositiveData。其中第二个参数为RectBox和box的重复区域比例信息,保存在overlap参数中,由函数bb_overlap得到。tldGeneratePositiveData函数首先根据overlap的比例信息选出重复区域比例大于60%并且前num_closet  = 10个的最接近box的RectBox,相当于对RectBox进行筛选。并通过bb_hull函数得到这些RectBox的最大边界。接下来的工作比较重要,要得到Pattern,调用的函数为tldGetPattern。初始化的工作就是对最接近box的RectBox区域得到其patch,然后调用tldPatch2Pattern将像素信息转换为Pattern,具体的说就是归一化RectBox对应的patch的size(放缩至patch_size = 15*15),将2维的矩阵变成一维的向量信息,然后将向量信息均值设为0,调整为zero mean and unit variance(ZMUV),这个过程调用函数tldPatch2Pattern实现。接下来处理RectBox最大边界的模糊信息,再次用到img_patch函数,但这次调用的函数有很大的不同,还没太理解作者要做什么啊,怎么感觉还有平移旋转矩阵都出来了,晕啦(求高人指点)。该函数最后返回3个参数,pX为处理后的RectBox最大边界处理后的像素信息,pEx最近邻的RectBox的Pattern,bbP0为最近邻的RectBox。

然后再产生负样本数据tldGenerateNegativeData。得到远离box(重复区域比例小于20%)的num_patches = 100个Pattern保存到nX中,随机选中num_patches = 100个RectBox得到对应的patch保存到nEx中。这里调用了fern(5),即该函数的get pattern操作。

接下来对负样本进行分类,分类到训练集Training Set和验证集Validation Set中去。

接下来使用Training Set进行训练,先调用fern(2),更新,然后调用tldTrainNN最近邻训练数据。

接下来评估验证集Validation Set的阈值。调用tldNN验证。

至此,初始化的工作基本完成,限于本人水平有限,只能先对函数有个大概的认识,深深觉得先要静下心来把训练的算法搞清楚,再回过头来再看一编代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web测试容易忽略的地方

1.浏览器的后退按钮 提交表单一条已经成功提交的记录,back后再提交,看系统会如何处理。检查多次使用back健的情况在有back的地方,back,回到原来的页面,再back,重复几次,看是否会报错。 2.通过修…

[Android]你不知道的Android进程化(4)--进程通信AIDL框架

大家好,我系苍王。以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章。[Android]如何做一个崩溃率少于千分之三噶应用app--章节列表Google爸爸,听说要将一些插件化hook系统的变量属性禁用,…

在未启动程序情况 点击视图设计器 弹出未将对象引用窗体的解决方案

请问下 在未运行程序情况 点击视图设计器 弹出未将对象引用窗体 解决方案:1.看后台进程是不是相关的进程在启动,如果有关闭进程;重启vs,即可2.重启电脑转载于:https://www.cnblogs.com/yang12311/p/5593838.html

图像配准的步骤

目前,很难找到一种普适的方法能够应对所有的配准情况,任何一种配准算法都必须考虑图像的成像原理、几何变形、噪声影响、配准精度等因素。不过,从原理上将,配准算法可以大致分为以下四个步骤: (1&#xff0…

Jm86中的encode_one_macroblock注释

Jm86中的encode_one_macroblock注释 /*! ************************************************************************************** /brief* Mode Decision for a macroblock* //该函数的作用是编码一个宏块(包括帧间、帧内、帧内预测的方式)。*…

Python之路【第十七篇】:装饰器

写代码的时候有一个原则,开放封闭原则(面向对象):对某些东西开放,对某些封闭,在装饰器这里,函数内部是封闭的,不允许改变函数的内部。 装饰器用来装饰函数,可以让函数在执行之前或者执行之后&am…

HALCON示例程序measure_chip.hdev芯片封装检测

HALCON示例程序measure_chip.hdev芯片封装检测 示例程序源码(加注释) 关于显示类函数解释 dev_update_off () read_image (Image, ‘die_on_chip’) get_image_size (Image, Width, Height) dev_close_window () dev_open_window (0, 0, Width * 2, He…

工业机器人智能发展:视觉和触觉感应简化

机器人工业协会(Robotic Industries Association)指出,从2003到2005年间,北美机器人工业以20%的平均年增长率发展。在汽车市场需求疲软以及外国厂商的压力不断增加的背景下,这一成就是如何取得的?成本的普遍…

ASP站点无法访问怎么办

确保启用了目录浏览功能 转载于:https://www.cnblogs.com/acetaohai123/p/6571257.html

五、案例-指令参考-freemarker指令、表达式

案例-指令参考描述&#xff1a;本人自己测试写了一遍&#xff0c;如有错的地方&#xff0c;懂freemarker的朋友望指点指点&#xff01; 案例-指令参考 表达式 一、 Assign 1、<#assign name1"北京" name2"上海" name3"广东"> 调用&#xf…

PartitionMotionSearch()函数

encode_one_macroblock()函数中的运动估计分为两大块&#xff0c;对于宏块级的三种模式&#xff0c;分块后直接对patition依次调用PartitionMotionSearch()函数&#xff1b;而对于亚宏块级的&#xff08;含8x8, 8x4,4x8,4x4&#xff09;模式&#xff0c;首先将宏块拆分为4个88子…

201521123017 《Java程序设计》第4周学习总结

1. 本周学习总结 2. 书面作业 Q1.注释的应用 使用类的注释与方法的注释为前面编写的类与方法进行注释&#xff0c;并在Eclipse中查看。(截图) Q2.面向对象设计(大作业1&#xff0c;非常重要) 2.1 将在网上商城购物或者在班级博客进行学习这一过程&#xff0c;描述成一个故事。…

完整的VAL3程序

start() begin//延时10秒 delay(5)//初始化变量call init()//清空原有运动堆栈resetMotion()//建立上电任务taskCreate "robotpower",100,robotpower()wait(isPowered())//建立生产任务taskCreate "ProductionCycle",10,ProductionCycle()//建立安全区域…

iOS WebView 加载本地资源(图片,文件等)

NSString *path [[NSBundle mainBundle] pathForResource:"关于.docx" ofType:nil]; NSURL *url [NSURL fileURLWithPath:path]; NSLog("%", [self mimeType:url]); //webview加载本地文件&#xff0c;可以使用加载数据的方式 //第一个诶参数是一个N…

本文以H264视频流为例,讲解解码流数据的步骤。

本文以H264视频流为例&#xff0c;讲解解码流数据的步骤。 为突出重点&#xff0c;本文只专注于讨论解码视频流数据&#xff0c;不涉及其它&#xff08;如开发环境的配置等&#xff09;。如果您需要这方面的信息&#xff0c;请和我联系。 准备变量 定义AVCodecContext。如…

2008-2021年商业银行数据(农商行、城商行、国有行、股份制银行)

2008-2021年商业银行数据&#xff08;农商行、城商行、国有行、股份制银行&#xff09; 1、时间&#xff1a;2008-2021年 2、范围&#xff1a;1700银行 3 、指标&#xff1a;证券简称、year、证券代码、资产总计、负债合计、所有者权益合计、利润总额、净利润、贷款总额、存…

EPSON 任务同步 改写

有时需要在多个任务执行之前来使它们同步。如果预先知道执行每项任务所需要的时间&#xff0c;它们就可以通过简单地等待由最慢的任务产生的信号来实现同步。然而&#xff0c;如果不知道那个任务是最慢的&#xff0c;就需要使用一个更复杂的同步化机制&#xff0c;如下所示VAL …

线程池的简单使用

创建指定线程数量的线程池 private static ExecutorService scheduledTaskFactoryExecutor null;private boolean isCancled false;private static class ThreadFactoryTest implements ThreadFactory { Overridepublic Thread newThread(Runnable r) { Thread threa…

异常--自定义异常类

为什么要调用父类构造器? http://blog.csdn.net/rockpk008/article/details/52951856 转载于:https://www.cnblogs.com/dwj-ngu/p/6576382.html

利用ffmpeg来进行视频解码的完整示例代码

&#xff08;转&#xff09;利用ffmpeg来进行视频解码的完整示例代码&#xff08;H.264&#xff09; Decode() { FILE * inpf; int nWrite; int i,p; int nalLen; unsigned char * Buf; int got_picture, consumed_bytes; unsigned char *DisplayBuf; Displ…