tld程序的参数

parameters.yml文件的内容:
%YAML:1.0
Parameters:
    min_win: 15
    patch_size: 15
    ncc_thesame: 0.95
    valid: 0.5
    num_trees: 10
    num_features: 13
    thr_fern: 0.6
    thr_nn: 0.65
    thr_nn_valid: 0.7
    num_closest_init: 10
    num_warps_init: 20
    noise_init: 5
    angle_init: 20
    shift_init: 0.02
    scale_init: 0.02
    num_closest_update: 10
    num_warps_update: 10
    noise_update: 5
    angle_update: 10
    shift_update: 0.02
    scale_update: 0.02
    overlap: 0.2
    num_patches: 100
    bb_x: 288
    bb_y: 36
    bb_w: 25
    bb_h: 42    

min_win: 设置最小的框框大小,1.我们的目标框必须比这个大,2.生成grid时所有比这个值小的都排除。所以如果这个太小了,可能导致,grid的数量增多,导致程序变慢。

模版设置大小,程序中设置patch_size=15*15,越大可能会越慢
thp=nstructs*thr_fern=10*0.6,detection的随机森林分类器过滤使用的阈值,加大可减少第三步模版匹配的个数,减少时间。
此外thp还在trainFF对good_box的measure值标准用,小于6则要更新分类器。
thrN=0.5*nstructs=5,update 随机森林分类器用的,对bad_box的measure分类,大于5则必须更新。

ncc_thesame:NNConf里用来判断待匹配模版是否和正模版中中最相似的那个的相似度是否大于ncc_thesame还是和负模版中 那个的相似度是否大于ncc_thesame。尤其如果和负模版的中最大相似度大于thesame,则认为该图像块在负模版库中。则输出printf("Patch in negative data..not traing");不进行学习。

关于代码NNConf中,计算csconf和rsconf的原理,他判断正相似度(和正模板库中最相似的值)的模版是否在正模版库的前半段。来计算csconf。原理得看论文。
参数中的valid就用在这里,  int   validatedPart = ceil(pEx.size()*valid);

  num_trees:设置nstructs即ferns数组的大小为10,即有10组,相当于取10次样本(而每次样本包含13个点对),这也导致,posteriors的行数是10
nstructs = (int)file["num_trees"]=10;

num_features:设置每组由几个点对组成,由13个点对组成,也即有2^13种可能性。所以posteriors每一行的列数为2^13.
structSize = (int)file["num_features"]=13;

thr_nn=0.65:trainNN里更新模版库用的阈值,如果某个good_box的相似度小于0.65,则说明该图像块和模板库差别大,但是他又是good_box里的,应该作为我们的模版库,所以加入正模板库。负模版库的更新阈值是0.5,它没有作为一个参数,而是直接写在程序里。

thr_nn_valid=0.7,evaluate里用了,,main没有调用这个函数,还有地方用了,见代码
classifier.NNConf(pattern,isin,dummy,tconf); //Conservative Similarity
tvalid = lastvalid;
if (tconf>classifier.thr_nn_valid){
tvalid =true;
}

num_closest_init=10,goodbox的大小。
num_closest_init = (int)file["num_closest_init"];

num_warps_init=20,对每个goodbox,都进行20次几何变形,这样我们可以由10个good_box产生200个px,代码见pX.push_back(make_pair(fern,1));1代表是good_box,然后用来更新随机森林分类器。
num_warps_init = (int)file["num_warps_init"];

    noise_init: 5
    angle_init: 20
    shift_init: 0.02
    scale_init: 0.02
这几个程序里未见使用。

num_closest_update=10,用在learn里getOverlappingBoxes(lastbox,num_closest_update),即跟踪到当前帧的目标的位置后,要重新生成good_box。代表生成10个。代码见generatePositiveData(frame1,num_warps_init);
num_closest_update = (int)file["num_closest_update"];

num_warps_update=10,不是20了?这很奇怪,同理这是 即跟踪到当前帧的目标的位置后,重新生成good_box后。要重新对那些good_box几何变形,生成pEx,和px代码见 if(good_boxes.size()>0)  generatePositiveData(img,num_warps_update);
generatePositiveData(img,num_warps_update);

    noise_update: 5
    angle_update: 10
    shift_update: 0.02
    scale_update: 0.02
程序未见使用。

bad_overlap =0.2,用来判断若重合度小于0.2,则是bad_box,代码见getOverlappingBoxes函数里else if (grid[i].overlap < bad_overlap){bad_boxes.push_back(i);
bad_overlap = (float)file["overlap"];

bad_patches =100,只是init里用,用来生成nEx,即初始时(trainFF)用来训练的负样本,限制nEx的数量为100,之后不再使用,之后trainFF用的负样本是,所有bad_box且在前面detection的随机森林分类器里measure_forest值大于1的,代码见
for (int i=0;i<bad_boxes.size();i++){
idx=bad_boxes[i];
if (tmp.conf[idx]>=1){
fern_examples_badbox.push_back(make_pair(tmp.patt[idx],0));
}
代码见generateNegativeData里
nEx=vector<Mat>(bad_patches);
for (int i=0;i<bad_patches;i++){
idx=bad_boxes[i];
patch = frame(grid[idx]);
getPattern(patch,nEx[i],dum1,dum2);
printf("NN: %d\n",(int)nEx.size());
bad_patches = (int)file["num_patches"];

    bb_x: 288
    bb_y: 36
    bb_w: 25
    bb_h: 42    
不再使用本来是作为视频中标注mub目标的初始位置使用的,后来改为了在每个视频文件夹里的init。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zlingh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值