Caffe训练自己的数据之图片集的处理(根据前辈们的分享整理并自己实践的过程)

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;                % 显示运行时间

三、rename图片名称,所有类别都是连续命名(这里会遇到一些问题)

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











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值