matlab faster rcnn,Faster R-CNN系列之MATLAB篇

万里长征第一步,就是要制作自己的数据集,过程还是比较繁琐的,特别是标注的过程,这篇博客先介绍如果制作voc2007自己的数据集用于faster-rcnn训练,下一篇博客介绍如何用faster-rcnn训练自己的数据。 1、准备图像 图像要用.jpg或者jpeg格式的,如果是png或

我发现,我是个懒人。不对,我一直是个懒人。

但是!电光火石间!不知怎么地!我决定!我写个博客吧

yQ32qm.gif

=====================我是废话的分割线===================

最开始接触Faster R-CNN,先尝试跑的其实是PYTHON版,但是编译过程中出错了,我又从来没接触过python,自己稍稍处理了一下没成功,于是就放弃了,跑去跑MATLAB版了......看!再次证明我是有多懒!不过后来因为需要还是没躲过PYTHON,后续在别的博客中再详细说。

恩,首先是各种乱七八糟的Caffe之类的环境配置,因为之前都配好了这里就不说了,恩还有装MATLAB。

然后,就按https://github.com/ShaoqingRen/faster_rcnn这里的一步步来就好了。运行demo可以看到定位识别效果。

接下来重点说明一下怎么用自己的数据训练模型。

首先,要先把自己的数据做成VOC2007的格式。

1.标注图像。就是框图啦,把结果保存到TXT中,matlab代码如下:

close all;

clc

label = 'XXX';

folder_path ='pics/';

img_path_list = dir(folder_path);

img_name_tmp = {img_path_list.name};

img_name_all = img_name_tmp(3:end);

img_num = length(img_name_all); % get file num

if img_num > 0

for j=1:img_num

im_names{j} = [folder_path, img_name_all{j}];

end

end

%

f = fopen('XXX_label.txt','a+t');

for j = 1:length(im_names)

im = imread(im_names{j});

figure,imshow(im);

fprintf(f,'%s',img_name_tmp{j+2});

n=input('input the number of XXX:');

for i=1:n1

[I,RECT] = imcrop(); %RECT:[XMIN YMIN WIDTH HEIGHT]

fprintf(f, ' %s %f %f %f %f',label,RECT(1),RECT(2),RECT(1)+RECT(3),RECT(2)+RECT(4)); %[XMIN YMIN XMAX YMAX]

end

fprintf(f,'\n');

close;

end

fclose(f);

生成的txt文件内容大概是酱紫的:

000001.jpg xxx 2.510000 4.510000 256.490000 252.490000

000002.jpg xxx 302.510000 23.510000 346.490000 215.490000

2.生成XML,放到自己建的VOCxxx/Annotations中,matlab代码如下:

path_image='/home/vision/jinglihua/data_lable/xxx/';

path_label = 'xxx_label.txt';

label = 'xxx ';

files_all=dir(path_image);

fo = fopen(path_label);

msg = textread(path_label,'%s');

h=1;

for i = 3:length(files_all)

msg1 = fgetl(fo);

people = strfind(msg1,label);

label_num = length(people);

clear rec;

clear rec1;

path = ['./VOCxxx/Annotations/' msg{h}(1:end-4) '.xml'];

file=fopen(path,'w');

fprintf(file,'\n');

rec.folder = 'VOCxxx';

rec.filename = msg{h}

h = h +1;

rec.source.database = 'The XXX Database';

rec.source.annotation = 'The XXX Database';

rec.source.image = 'jinglihua';

rec.source.flickrid = '20160504';

rec.owner.flickrid = 'I do not know';

rec.owner.name = 'I do not know';

img = imread(['/home/vision/jinglihua/data_lable/xxx/' files_all(i).name]);

rec.size.width = int2str(size(img,2));

rec.size.height = int2str(size(img,1));

rec.size.depth = int2str(size(img,3));

rec.segmented = '0';

writexml(file,rec,1);

for j = 1:label_num

rec1.object.name = msg{h};

h = h +1;

rec1.object.pose = 'Unspecified';

rec1.object.truncated = '0';

rec1.object.difficult = '0';

rec1.object.bndbox.xmin = msg{h};

h = h +1;

rec1.object.bndbox.ymin = msg{h};

h = h +1;

rec1.object.bndbox.xmax = msg{h};

h = h +1;

rec1.object.bndbox.ymax = msg{h};

h = h +1;

writexml(file,rec1,1);

end

fprintf(file,'\n');

fclose(file);

end

fclose(fo);

%writexml.m

function xml = writexml(fid,rec,depth)

%WRITEXML Summary of this function goes here

% Detailed explanation goes here

fn=fieldnames(rec);

for i=1:length(fn)

f=rec.(fn{i});

if ~isempty(f)

if isstruct(f)

for j=1:length(f)

fprintf(fid,'%s',repmat(char(9),1,depth));

a=repmat(char(9),1,depth);

fprintf(fid,'\n',fn{i});

writexml(fid,rec.(fn{i})(j),depth+1);

fprintf(fid,'%s',repmat(char(9),1,depth));

fprintf(fid,'%s>\n',fn{i});

end

else

if ~iscell(f)

f={f};

end

for j=1:length(f)

fprintf(fid,'%s',repmat(char(9),1,depth));

fprintf(fid,'',fn{i});

if ischar(f{j})

fprintf(fid,'%s',f{j});

elseif isnumeric(f{j})&&numel(f{j})==1

fprintf(fid,'%s',num2str(f{j}));

else

error('unsupported type');

end

fprintf(fid,'%s>\n',fn{i});

end

end

end

end

3.生成训练集/验证集/测试集相关的4个txt文件,放到VOCxxx/ImageSets/Main中,matlab代码如下:

%writetxt.m

clear

close all

clc

file = dir('/home/vision/jinglihua/data_lable/VOCxxx/Annotations');

len = length(file)-2;

num_trainval=sort(randperm(len, floor(9*len/10)));

num_train=sort(num_trainval(randperm(length(num_trainval), floor(5*length(num_trainval)/6))));

num_val=setdiff(num_trainval,num_train);

num_test=setdiff(1:len,num_trainval);

path = '/home/vision/jinglihua/data_lable/VOCxxx/ImageSets/Main/';

fid=fopen(strcat(path, 'trainval.txt'),'a+');

for i=1:length(num_trainval)

s = sprintf('%s',file(num_trainval(i)+2).name);

fprintf(fid,[s(1:length(s)-4) '\n']);

end

fclose(fid);

fid=fopen(strcat(path, 'train.txt'),'a+');

for i=1:length(num_train)

s = sprintf('%s',file(num_train(i)+2).name);

fprintf(fid,[s(1:length(s)-4) '\n']);

end

fclose(fid);

fid=fopen(strcat(path, 'val.txt'),'a+');

for i=1:length(num_val)

s = sprintf('%s',file(num_val(i)+2).name);

fprintf(fid,[s(1:length(s)-4) '\n']);

end

fclose(fid);

fid=fopen(strcat(path, 'test.txt'),'a+');

for i=1:length(num_test)

s = sprintf('%s',file(num_test(i)+2).name);

fprintf(fid,[s(1:length(s)-4) '\n']);

end

fclose(fid);

4.把标注的图像源文件拷到VOCxxx/JPEGImages目录下。然后,当当当当!数据准备完成!VOCxxx目录下架构如下:

Fn2Ibi.png

5.训练过程。训练前需要修改一些文件,具体的情况http://blog.csdn.net/sinat_30071459/article/details/50546891这篇博客中讲的很清楚啦,按着来就好~

恩,MATLAB版的暂时就先写这么多啦啦啦

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值