最简单的方式使用Discriminatively Trained Deformable Part Models训练自己的模型

最简单的方式使用 Discriminatively Trained Deformable Part Models 训练自己的模型(原创,适合没有linux基础和matlab基础的人)

最近尝试使用Pedro Felzenszwalb的Discriminatively Trained Deformable Part Models(http://www.cs.brown.edu/~pff/)训练自己的模型,因为基本没用过matlab和linux,所以开始比较糊涂,后来看了pozen的http://blog.csdn.net/pozen/article/details/7023742,收获很大,所以自己尝试了一下,现在已经跑起来了。

 

Pozen的工作还是主要讲怎么在windows下训练,其中怎么准备数据说的不是很清楚,我这里稍微补充一下吧。(注意:我是在linux下跑的,windows下还要参考pozen的工作)

 

首先,当然是下载 voc-release4.01.tgz。因为voc-release4.01.tgz自带的训练是结合VOCdevkit,所以为了尽可能少的改动代码,我们还是把这个下载了吧,至少还可以用它的负样例不是。下载地址:http://pascallin.ecs.soton.ac.uk/challenges/VOC/voc2011/VOCdevkit_25-May-2011.tar,如果用VOC的数据,请自行下载。

 

OK,都下载完,解压缩完,就可以更改代码了。

首先,按照Felzenszwalb的说明,需要修改'globals.m'。这里,需要修改以下几个地方

14   VOCyear = '2011';%选择你想使用的VOC的数据的年份,或者你不需要使用,就默认2011吧。

17   % directory for caching models, intermediate data, and results

18   cachedir = ['. /TrainVal/VOCdevkit/result/2011/'];%这里是放训练好的models、中间数据和结果的地方,训练好的模型就在这里。

37   % directory with PASCAL VOC development kit and dataset

38   VOCdevkit = ['D:/data/TrainVal/VOCdevkit/'];%顾名思义

 

 

voc-release4.01.tgz加载数据都是在pascal_data.m中完成的,看一下代码,我们会发现

try

  load([cachedir cls '_train_' year]);%cls是种类名,例如人就是person

catch

  % positive examples from train+val

也就是说,如果你之前已经加载好了数据,并且命名格式是cls_train_year,则直接进行训练,不会再重新加载数据。因此,我们只需自己把需要训练的数据按照要求的格式准备好就行了。那么,cls_train_year是什么格式的呢,通过分析,发现包含两种类型,POS和NEG。

POS中存储了正样例的相关信息,主要包含图像地址,图像中正样例标注框的起始点和结束点,其他的我们训练自己的数据一般用不到。因此,我们只需要将我们训练的正样例数据保存在以下格式中:

x1 y1 x2 y2 path

说明:x1,y1为正样例的外接矩形的起始点,x2,y2为正样例的外接矩形的结束点,path为这个图片的路径。然后使用如下代码读入到POS中。

function [pos] = pascal_data_pos(clspos,numTrainPos,cls)

%clspos为正样例文件的地址,numTrainPos正样例数目,cls为正样例的名称

% Get training data from the PASCAL dataset.

 pos = [];

 numpos = 0;

 [a,b,c,d,e]=textread(clspos,'%d%d%d%d%s');

  for i = 1:numTrainPos;

      numpos = numpos+1;

      pos(numpos).im = [e(numpos)];

      pos(numpos).x1 = a(numpos);

      pos(numpos).y1 = b(numpos);

      pos(numpos).x2 = c(numpos);

      pos(numpos).y2 = d(numpos);

      pos(numpos).flip = false;

      pos(numpos).trunc = 0;

  end

  year = '2011';

 save([cls '_train_' year], 'pos');

end  

NEG中存放了负样例信息,其实只是负样例的图像地址。同样放到一个文本文件中,然后用以下代码读取

function [neg] = pascal_data_neg(clsneg,numTrainNeg,cls)

  % negative examples from train (this seems enough!)

   [e]=textread(clsneg,'%s');

 %fid2=fopen(clsneg,'r');%得到文件号

  neg = [];

  numneg = 0;

  for i = 1:numTrainNeg;

      numneg = numneg+1;

      neg(numneg).im = e(numneg);

      neg(numneg).flip = false;

  end

 save([cls '_train_20120212' ],  'neg');

end

 

最后保存成cls_train_year的数据文件就行了。

pos = pascal_data_pos('trainpos.txt',3776,'pos');

neg = pascal_data_neg('trainneg.txt',2315,'neg');

save('person_train_2011','pos','neg');

数据准备完成后,还需要把imreadx中6行由ex.im改为ex.im{1},问题好像很简单,但是我是matlab白痴,所以就不解释了!

 

最后,按照作者的提示进行操作就行啦!

3. Run 'make' to compile learn.cc, the LSVM gradient descent code.

   (Run from a shell, not Matlab.)

4. Start matlab.

5. Run the 'compile' script to compile the helper functions.

   (you may need to edit compile.m to use a different convolution

    routine depending on your system)

6. Use the 'pascal' script to train and evaluate a model.

example:

> pascal('person', 3);   % train and evaluate a 6 component person model

 

 

以上就是我作为一个对linux和matlab都及其不熟悉的人使用Discriminatively Trained Deformable Part Models训练自己数据的方法,大家可以实践一下,有问题欢迎指出!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Transformer在许多NLP(自然语言处理)任务中取得了最先进的成果。 DETR(Detection Transformer)是Facebook提出的基于Transformer的端到端目标检测方法。DETR使用CNN+Transformer进行图像目标检测,该方法没有NMS后处理步骤、没有anchor。DETR总体思路是把目标检测看成一个set prediction的问题,并且使用Transformer来预测物体边界框的集合。本课程对DETR的原理与PyTorch实现代码进行精讲,来帮助大家掌握其详细原理和具体实现。 原理精讲部分包括:Transformer的架构概述、Transformer的Encoder 、Transformer的Decoder、DETR网络架构、DETR损失函数、DETR实验结果和分析。  代码精讲部分使用Jupyter Notebook对DETR的PyTorch代码进行逐行解读,包括:安装PyTorch、 DETR官方Demo,DETR的hands-on tutorial,DETR的代码精讲(数据准备、Backbone和位置编码、Transformer架构的实现)。相关课程: 《Transformer原理与代码精讲(PyTorch)》https://edu.csdn.net/course/detail/36697《Transformer原理与代码精讲(TensorFlow)》https://edu.csdn.net/course/detail/36699《ViT(Vision Transformer)原理与代码精讲》https://edu.csdn.net/course/detail/36719《DETR原理与代码精讲》https://edu.csdn.net/course/detail/36768《Swin Transformer实战目标检测:训练自己的数据集》https://edu.csdn.net/course/detail/36585《Swin Transformer实战实例分割:训练自己的数据集》https://edu.csdn.net/course/detail/36586《Swin Transformer原理与代码精讲》 https://download.csdn.net/course/detail/37045

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值