Caffe训练自己的数据之图片集的处理
(根据前辈们的分享整理并自己实践的过程,windows)
一、将收集好的数据先分类存放
二、resize所有图片为256*256
(matlab代码,记得更改为自己的路径)
clear;clc;close all;
tic; % 用于计算程序运行时间,和toc搭配使用
imagePath = 'C:\Users\sony\Documents\MATLAB\花蛤\'; % 图片存放路径,改成自己的文件夹
imageFiles = dir(imagePath);
numFiles = length(imageFiles);
parfor i=3:numFiles % 从3开始,因为前两个是当前路径‘.’和上一级路径‘..’
imageFile = strcat(imagePath,imageFiles(i).name);
A = imread(imageFile);
disp(imageFile); %输出当前处理的图片名称,出错时方便检查
B = imresize(A,[256 256]); % resize为256x256
imwrite(B,imageFile); % 覆盖原始图片,若需要另存为,则修改此处的imageFile为新的存储路径
end
%disp(j);
toc; % 显示运行时间
1、有些图片会报错说维度有问题,还不知道怎么解决所以我把那几张图片删了。。。
2、有些图片在下载的时候文件名是有特殊符号(我主要是 ( ) , = & 这五个)的,导致在批处理的时候程序不能正确读取,所以我先找到一款软件能够去除其中的特殊字符,如图,可以自己制定删除规则很方便。
3、开始rename(或者也可以结合excel 使用ren命令批处理)
(matlab代码,记得修改路径)
%%
clc;
clear;
maindir='C:\Users\sony\Documents\MATLAB\';
name_long=5; %图片名字的长度,如000123.jpg为6,最多9位,可修改
num_begin=1; %图像命名开始的数字如000123.jpg开始的话就是123
subdir = dir(maindir);
n=1;
for i = 1:length(subdir)
if ~strcmp(subdir(i).name ,'.') && ~strcmp(subdir(i).name,'..')
subsubdir = dir(strcat(maindir,subdir(i).name));
for j=1:length(subsubdir)
if ~strcmp(subsubdir(j).name ,'.') && ~strcmp(subsubdir(j).name,'..')
img=imread([maindir,subdir(i).name,'\',subsubdir(j).name]);
%imshow(img);
%disp(subdir(i).name);
%disp(subsubdir(j).name);
str=num2str(num_begin,'%09d');
newname=strcat(str,'.jpg');
newname=newname(end-(name_long+3):end);
system(['rename ' [maindir,subdir(i).name,'\',subsubdir(j).name] ' ' newname]);
num_begin=num_begin+1;
fprintf('当前处理文件夹%s',subdir(i).name);
fprintf('已经处理%d张图片\n',n);
n=n+1;
pause(0.1);%可以将暂停去掉
end
end
end
end
四、将图片按照4:1分为训练集和测试集,然后分别生成标签再混合(以test.txt为例)。
(matlab)
% batch write in txt
clear all
clc
file=dir('G:\caffe\caffe-windows\data\image\test');
temp=length(file);
file=file(3:temp);
fp=fopen('G:\caffe\caffe-windows\data\image\test.txt','at');
% 'at' open or create file for reading and writing; append data to end of file
% 'wt' discard existing contents
for n=1:length(file)
fprintf('iter=%d\n',n)
txt=['\\' file(n).name ' 0' '\n'];
fprintf(fp,txt);
end
fclose(fp);
万一不小心把图片先混合了也没关系,可以计算一下类别跳跃的位置再改成这样,之后也要检查一下txt文件对不对。
五、制作lmdb或者leveldb