Coin163

首页 > 深度学习Caffe实战笔记(19)Windows平台 Faster-RCNN 制作自己的数据集

深度学习Caffe实战笔记(19)Windows平台 Faster-RCNN 制作自己的数据集

2021腾讯云限时秒杀,爆款1核2G云服务器298元/3年!(领取2860元代金券),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1062

2021阿里云最低价产品入口+领取代金券(老用户3折起),
入口地址https://www.aliyun.com/minisite/goods

万里长征第一步,就是要制作自己的数据集,过程还是比较繁琐的,特别是标注的过程,这篇博客先介绍如果制作voc2007自己的数据集用于faster-rcnn训练,下一篇博客介绍如何用faster-rcnn训练自己的数据。

1、准备图像
图像要用.jpg或者jpeg格式的,如果是png或者其它格式,自己转换一下就好,图像名称要用000001.jpg,只有和VOC2007数据集图像名称一致,才能最大限度的减少后面训练的麻烦,大家可以从网上下载一些批量重命名工具,我是用MATLAB代码实现转换的,我把MATLAB代码放在这里,如果大家需要请自行修改路径使用

%实现把图像重命名为VOC2007数据集一样的图像名
%D1是原始图像存放的文件夹,imwrite中的路径是保存的文件夹
%作者:UPC Yongbiao Gao Heroin 蒲衣翁
%csdn博客地址:http://blog.csdn.net/gybheroin
clc
clear
D1=dir('G:\Deep Feature extra\按年份数据\2011\2011test\*.jpg');

for i=1:length(D1)
    i
    I=imread(['G:\Deep Feature extra\按年份数据\2011\2011test\',D1(i).name]);
    re=imresize(I,[600,400]);%注意,这里我把图像归一化大小了,可选
    if(i<10)
        imwrite(re,['G:\fasterrcnn\data\',['00000',num2str(i),'.jpg']]);
    end
    if(10<=i&&i<100)
        imwrite(re,['G:\fasterrcnn\data\',['0000',num2str(i),'.jpg']]);
    end
    if(100<=i&&i<1000)
         imwrite(re,['G:\fasterrcnn\data\',['000',num2str(i),'.jpg']]);
    end
    if(1000<=i&&i<10000)
        i
        imwrite(re,['G:\fasterrcnn\data\',['00',num2str(i),'.jpg']]);
    end
    if(10000<=i&&i<100000)
        i
        imwrite(re,['G:\fasterrcnn\data\',['0',num2str(i),'.jpg']]);
    end
end

2、图像目标框标注
图像标注的工具网上应该有一些,但是博主喜欢自己动手丰衣足食,所以就用c#+emgucv自己写了一个标注软件,我把vs工程放在csdn资源上,想用我写的软件的同学请自行下载,代码中图像路径需要自己修改一下就行了:http://download.csdn.net/detail/gybheroin/9847647
图像标注软件界面如下:(一个小时写出来的东西,简陋一些,但是功能是没问题)

这里写图片描述

使用方法:在文本框中输入类别标签,鼠标在图像中拖动实现矩形框,保存按钮保存了标注的标签,如果框选错误,就点击取消按钮,重新标注。
标注文件格式如下,分别是图像名称,类别名称,目标框左上角和右下角坐标:

000001.jpg person 118 48 273 572
000002.jpg person 106 52 291 557
000003.jpg person 119 49 289 554
000004.jpg person 114 45 270 566
000005.jpg person 96 35 328 564
000006.jpg person 104 50 316 586

3、做成xml
做xml的代码我是使用了别人的资源,如果不嫌弃麻烦,可以自己写一个的,我参考的资源地址:http://download.csdn.net/detail/sinat_30071459/9531172

把图像放在一个文件夹中,把标注好的文件放在一个文件夹中,能自动生成xml文件,生成的xml文件格式如下:
这里写图片描述

4、生成txt索引文件
需要四个索引文件,分别是trainval.txt,train.txt,val.txt,test.txt,分别存放训练验证集,训练集,验证集,测试集,VOC2007中,训练验证集占50%,测试集占50%,训练集占训练验证集50%,验证集占训练验证集50。但是我标注的数据集比较小一点,所以我把相应的比例做了修改,大家可以参考我写的MATLAB代码:


%实现生成VOC的训练验证测试四个文本文件,我这个是按照顺序实现的,没有打乱顺序,如果需要请自行修改
%trainval占0.7,test占0.3.train占trainval的0.5,val占trainval的0.5
%这个地方是我自己设置的,标准的voc2007应该都是50%
%作者:UPC Yongbiao Gao Heroin 蒲衣翁 
%csdn博客地址:http://blog.csdn.net/gybheroin

clc
clear
train_val_percent=0.7;
test_percent=0.3;

D=dir('imgg/*.jpg');
ftrainval=fopen('trainval.txt','w');  
ftest=fopen('test.txt','w');  
ftrain=fopen('train.txt','w');  
fval=fopen('val.txt','w'); 

for i=1:length(D)*train_val_percent
    fprintf(ftrainval,'%s\n',D(i).name(1:end-4));
end
for i=length(D)*train_val_percent+1:length(D)
    fprintf(ftest,'%s\n',D(i).name(1:end-4));
end
for i=1:length(D)*train_val_percent*0.6
    fprintf(ftrain,'%s\n',D(i).name(1:end-4));
end
for i=length(D)*train_val_percent*0.6+1:length(D)*train_val_percent
    fprintf(fval,'%s\n',D(i).name(1:end-4));
end

然后新建一个文件夹ImageSets,再新建一个文件夹Main,把四个文件放进去。新建一个文件夹minedataset,把ImageSets,Annotation(存放了所有的xml文件)和JPEGImages(存放了所有训练验证测试图像)放进去,这样数据准备算是完成。

原文

万里长征第一步,就是要制作自己的数据集,过程还是比较繁琐的,特别是标注的过程,这篇博客先介绍如果制作voc2007自己的数据集用于faster-rcnn训练,下一篇博客介绍如何用faster-rcnn训练自己

------分隔线----------------------------