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

来源:互联网 发布:linux清空文件夹内容 编辑:程序博客网 时间:2024/06/05 20:34

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开始的话就是123subdir = 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  endend


四、将图片按照4:1分为训练集和测试集,然后分别生成标签再混合(以test.txt为例)。

(matlab)
% batch write in txtclear allclcfile=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 contentsfor n=1:length(file)    fprintf('iter=%d\n',n)    txt=['\\' file(n).name ' 0' '\n'];    fprintf(fp,txt);endfclose(fp);


万一不小心把图片先混合了也没关系,可以计算一下类别跳跃的位置再改成这样,之后也要检查一下txt文件对不对。




五、制作lmdb或者leveldb











0 0
原创粉丝点击