matlab 批量提取CNN特征

无类别,图像混合放置:

clear
close all


addpath ./matlab

model= './models/bvlc_reference_caffenet/deploy.prototxt';
weights= './models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel';
mean = load('./matlab/+caffe/imagenet/ilsvrc_2012_mean.mat');
net = caffe.Net(model, weights, 'test'); % create net and load weights
mean_data = mean.mean_data;
  
net.blobs('data').reshape([227 227 3 1]);
net.reshape();

rt_img_dir='/ImageNet/ILSVRC2012_img_val/';
rt_data_dir='ImageNet/Fea/ILSVRC2012_img_val/';



%disp('Extracting CNN features...');
        
        frames = dir(fullfile(rt_img_dir, '*'));    frames(1)=[];  frames(1)=[];      
        c_num = length(frames);           
        gray_num=0;error_num_CMYK_JPEG=0;
%        database.path=[];  
        
  for jj = 1:c_num,
            imgpath = fullfile(rt_img_dir, frames(jj).name);
      try                    
      %% prepare the image
        im_data = caffe.io.load_image(imgpath);
        %% subtract mean_data (already in W x H x C, BGR)
        width = 256; height = 256;
        im_data = imresize(im_data, [width, height]); % resize using Matlab's imresize 
        feaSet.iscolor=1;
        if size(im_data,3)==1
         imdata=zeros([size(im_data),3]);
         imdata(:,:,1)=im_data;
         imdata(:,:,2)=im_data;
         imdata(:,:,3)=im_data;
         im_data=imdata;
         feaSet.iscolor=0;
         gray_num=gray_num+1;
        end
         im_data = im_data - (mean_data);   


        width = 227; height = 227;
        im_data = imresize(im_data, [width, height]); % resize using Matlab's imresize
 
        res = net.forward({im_data});
        fc6_data = net.blobs('fc6').get_data();
        fc7_data = net.blobs('fc7').get_data();
        
            
        feaSet.fc6_data = fc6_data;
        feaSet.fc7_data = fc7_data;
         
        [pdir, fname] = fileparts(frames(jj).name);                        
        fpath = fullfile(rt_data_dir, [fname, '.mat']);
            
        save(fpath, 'feaSet');
        %database.path = [database.path; fpath];
      catch
         str= fullfile(frames(jj).name);
         disp(str);
         error_num_CMYK_JPEG=error_num_CMYK_JPEG+1;
         error_CMYK_JPEG{error_num_CMYK_JPEG}=str;
      end
 end;    

    

有类别,不同类图像按不同文件夹放置

 

clear
close all


addpath ./matlab

model= './models/bvlc_reference_caffenet/deploy.prototxt';
weights= './models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel';
mean = load('./matlab/+caffe/imagenet/ilsvrc_2012_mean.mat');
net = caffe.Net(model, weights, 'test'); % create net and load weights
mean_data = mean.mean_data;
%% obtain params in diff layers and show
%pdata = net.params('conv1',1).get_data();
%vis_square(pdata,2,0.5);
  
net.blobs('data').reshape([227 227 3 1]);
net.reshape();

rt_img_dir='mageNet/ILSVRC2012_img_train/';
rt_data_dir='ImageNet/Fea/ILSVRC2012_img_train/';

 
disp('Extracting CNN features...');
subfolders = dir(rt_img_dir);

siftLens = [];

database = [];

database.imnum = 0; % total image number of the database
database.cname = {}; % name of each class
database.label = []; % label of each class
database.path = {}; % contain the pathes for each image of each class
database.nclass = 0;
error_num_CMYK_JPEG=0;
for ii = 1:length(subfolders),
    subname = subfolders(ii).name;
    
    if ~strcmp(subname, '.') & ~strcmp(subname, '..'),
        database.nclass = database.nclass + 1;
        
        database.cname{database.nclass} = subname;
        
        frames = dir(fullfile(rt_img_dir, subname, '*'));
        frames(1)=[];frames(1)=[];
        c_num = length(frames);           
        database.imnum = database.imnum + c_num;
        database.label = [database.label; ones(c_num, 1)*database.nclass];
        
        siftpath = fullfile(rt_data_dir, subname);        
        if ~isdir(siftpath),
            mkdir(siftpath);
        end;
        
        for jj = 1:c_num,
            imgpath = fullfile(rt_img_dir, subname, frames(jj).name);
     try          
            im_data = caffe.io.load_image(imgpath);
        %% subtract mean_data (already in W x H x C, BGR)
        width = 256; height = 256;
        im_data = imresize(im_data, [width, height]); % resize using Matlab's imresize 
        feaSet.iscolor=1;
        if size(im_data,3)==1
         imdata=zeros([size(im_data),3]);
         imdata(:,:,1)=im_data;
         imdata(:,:,2)=im_data;
         imdata(:,:,3)=im_data;
         im_data=imdata;
         feaSet.iscolor=0;
         gray_num=gray_num+1;
        end
        feaSet.label= database.nclass;
        
         im_data = im_data - (mean_data);   


        width = 227; height = 227;
        im_data = imresize(im_data, [width, height]); % resize using Matlab's imresize
 
        res = net.forward({im_data});
        fc6_data = net.blobs('fc6').get_data();
        fc7_data = net.blobs('fc7').get_data();
     
            
        feaSet.fc6_data = fc6_data;
        feaSet.fc7_data = fc7_data;
         
        [pdir, fname] = fileparts(frames(jj).name);                        
        fpath = fullfile(rt_data_dir, subname,  [fname, '.mat']);
            
        save(fpath, 'feaSet');
      catch
         str= fullfile(subname,frames(jj).name);
         disp(str);
         error_num_CMYK_JPEG=error_num_CMYK_JPEG+1;
         error_CMYK_JPEG{error_num_CMYK_JPEG}=str;
      end       

        end;    
    end;
end;
    


 
原文地址:https://www.cnblogs.com/jeffwilson/p/5122495.html