matlab nnsetup,matlab 深度学习图像处理求助

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

这是我找的一个用Matconvnet使用imagenet模型训练自己的数据集的主函数的代码,但是运行的时候一直说输入参数太多报错,有没有大佬可以指点一下,感谢各位大佬。

function [net, info] = cnn_dicnn(varargin)

%CNN_DICNN Demonstrates fine-tuning a pre-trained CNN on imagenet dataset

run(fullfile(fileparts(mfilename('fullpath')),'matconvnet', 'matlab', 'vl_setupnn.m')) ;

% 修改读入文件夹的路径

opts.dataDir = fullfile('data','image') ;

opts.expDir = fullfile('exp', 'image') ;

% 导入预训练的model

opts.modelPath = fullfile('models','imagenet-vgg-f.mat')

[opts, varargin] = vl_argparse(opts, varargin) ;

opts.numFetchThreads = 12 ;

opts.lite = false ;

opts.imdbPath = fullfile(opts.expDir, 'imdb.mat');

opts.train = struct() ;

opts.train.gpus = [];

opts.train.batchSize = 8 ;

opts.train.numSubBatches = 4 ;

opts.train.learningRate = 1e-4 * [ones(1,10), 0.1*ones(1,5)];

opts = vl_argparse(opts, varargin) ;

if ~isfield(opts.train, 'gpus'), opts.train.gpus = []; end

% -------------------------------------------------------------------------

% Prepare model

% -------------------------------------------------------------------------

net = load(opts.modelPath);

% 修改一下这个model

net = prepareDINet(net,opts);

% -------------------------------------------------------------------------

% Prepare data

% -------------------------------------------------------------------------

% 准备数据格式

if exist(opts.imdbPath,'file')

imdb = load(opts.imdbPath) ;

else

imdb = cnn_image_setup_data('dataDir', opts.dataDir, 'lite', opts.lite) ;

mkdir(opts.expDir) ;

save(opts.imdbPath, '-struct', 'imdb') ;

end

imdb.images.set = imdb.images.sets;

% Set the class names in the network

net.meta.classes.name = imdb.classes.name ;

net.meta.classes.description = imdb.classes.name ;

% % 求训练集的均值

imageStatsPath = fullfile(opts.expDir, 'imageStats.mat') ;

if exist(imageStatsPath)

load(imageStatsPath, 'averageImage') ;

else

averageImage = getImageStats(opts, net.meta, imdb) ;

save(imageStatsPath, 'averageImage') ;

end

% % 用新的均值改变均值

net.meta.normalization.averageImage = averageImage;

% -------------------------------------------------------------------------

% Learn

% -------------------------------------------------------------------------

% 索引训练集==1 和测试集==3

opts.train.train = find(imdb.images.set==1) ;

opts.train.val = find(imdb.images.set==3) ;

% 训练

[net, info] = cnn_train_dag(net, imdb, getBatchFn(opts, net.meta), ...

'expDir', opts.expDir, ...

opts.train) ;

% -------------------------------------------------------------------------

% Deploy

% -------------------------------------------------------------------------

% 保存训练完的网络

net = cnn_imagenet_deploy(net) ;

modelPath = fullfile(opts.expDir, 'net-deployed.mat');

net_ = net.saveobj() ;

save(modelPath, '-struct', 'net_') ;

clear net_ ;

错误信息:

f5a863a47d6a09589db940d0e021c9b9.png

str='F:\\code\\matlab\\face\\face'; %图像存放路径 S=0.0;%行向量 dis=zeros(1,100,'double');%每一个人脸跟平均脸的距离 b=zeros(2700,400,'double');%人脸向量矩阵 for i=1:2700 B=imread([str,num2str(i),'.bmp']); %依次读取每一幅图像 m = size(B, 3); if m==1 I = B; else I=rgb2gray(B); end %在此处进行你的图像处理即可 A = I';%I的转置 C = A(:)';%矩阵转换为行向量,即一张图片对应一个行向量 b(i,:)=C; %S = S+C; end Avg=mean(b);%平均脸 %% %显示平均脸 AvgImg = reshape(Avg,20,20)'; AvgImgInt=uint8(AvgImg); imshow(AvgImgInt)%显示平均脸 %% %使用PCA分析b [coef,score,latent,t2] = princomp(b); %% % 通过latent,可以知道提取前几个主成分就可以了. figure(1); percent_explained = 100*latent/sum(latent); pareto(percent_explained); xlabel('Principal Component'); ylabel('Variance Explained (%)'); print -djpeg 2; %选取前10个主特征组成新的特征空间 pca10 = coef(:,1:10); %% %人脸的读取及重构 facestr='F:\\code\\matlab\\face\\'; %图像存放路径 faceagr=zeros(100,10,'double');%每一张非人脸图像映射到特征空间的系数 for i=1:2700 faceagr(i,:) = (b(i,:)-Avg)*pca10; end for i=1:2700 faceImg(i,:)=Avg+(pca10*(faceagr(i,:)'))';%人脸图像图像重构 faceJuli(i)=norm(b(i,:)-faceImg(i,:)); end avgJuli = mean(faceJuli); %分布图 figure(2); faceymin=min(faceJuli); faceymax=max(faceJuli); facex=linspace(faceymin,faceymax,20); %将最大最小区间分成20个等分点(19等分),然后分别计算各个区间的个数 faceyy=hist(faceJuli,facex); %计算各个区间的个数 faceyy=faceyy/length(faceJuli); %计算各个区间的个数 bar(facex,faceyy) %画出概率密度分布图 %% %非人脸的读取及重构 nofacestr='F:\\code\\matlab\\noface\\'; %图像存放路径 b1=zeros(4300,400,'double');%非人脸向量矩阵 for i=1:4300 B1=imread([nofacestr,num2str(i),'.bmp']); %依次读取每一幅图像 m = size(B1, 3); if m==1 I1 = B1; else I1=rgb2gray(B1); end %在此处进行你的图像处理即可 A1 = I1';%I的转置 C1 = A1(:)';%矩阵转换为行向量,即一张图片对应一个行向量 b1(i,:)=C1; %S = S+C; end %非人脸的映射 bb1=zeros(1000,10,'double');%每一张非人脸图像映射到特征空间的系数 for i=1:1000 bb1(i,:) = (b1(i,:)-Avg)*pca10; end for i=1:1000 nofaceImg(i,:)=Avg+(pca10*(bb1(i,:)'))';%非人脸图像重构 nofaceJuli(i)=norm(b1(i,:)-nofaceImg(i,:)); end nofaceavgJuli = mean(nofaceJuli); figure(3); nofaceymin=min(nofaceJuli); nofaceymax=max(nofaceJuli); nofacex=linspace(nofaceymin,nofaceymax,20); %将最大最小区间分成20个等分点(19等分),然后分别计算各个区间的个数 nofaceyy=hist(nofaceJuli,nofacex); %计算各个区间的个数 nofaceyy=nofaceyy/length(nofaceJuli); %计算各个区间的个数 bar(nofacex,nofaceyy) %画出概率密度分布图 %Img=reshape(X1,20,20)'; %ImgInt=uint8(Img); %imshow(ImgInt) str='F:\\code\\matlab\\face\\face'; %图像存放路径 S=0.0;%行向量 dis=zeros(1,100,'double');%每一个人脸跟平均脸的距离 b=zeros(2700,400,'double');%人脸向量矩阵 for i=1:2700 B=imread([str,num2str(i),'.bmp']); %依次读取每一幅图像 m = size(B, 3); if m==1 I = B; else I=rgb2gray(B); end %在此处进行你的图像处理即可 A = I';%I的转置 C = A(:)';%矩阵转换为行向量,即一张图片对应一个行向量 b(i,:)=C; %S = S+C; end Avg=mean(b);%平均脸 %% %显示平均脸 AvgImg = reshape(Avg,20,20)'; AvgImgInt=uint8(AvgImg); imshow(AvgImgInt)%显示平均脸 %% %使用PCA分析b [coef,score,latent,t2] = princomp(b); %% % 通过latent,可以知道提取前几个主成分就可以了. figure(1); percent_explained = 100*latent/sum(latent); pareto(percent_explained); xlabel('Principal Component'); ylabel('Variance Explained (%)'); print -djpeg 2; %选取前10个主特征组成新的特征空间 pca10 = coef(:,1:10); %% %人脸的读取及重构 facestr='F:\\code\\matlab\\face\\'; %图像存放路径 faceagr=zeros(100,10,'double');%每一张非人脸图像映射到特征空间的系数 for i=1:2700 faceagr(i,:) = (b(i,:)-Avg)*pca10; end for i=1:2700 faceImg(i,:)=Avg+(pca10*(faceagr(i,:)'))';%人脸图像图像重构 faceJuli(i)=norm(b(i,:)-faceImg(i,:)); end avgJuli = mean(faceJuli); %分布图 figure(2); faceymin=min(faceJuli); faceymax=max(faceJuli); facex=linspace(faceymin,faceymax,20); %将最大最小区间分成20个等分点(19等分),然后分别计算各个区间的个数 faceyy=hist(faceJuli,facex); %计算各个区间的个数 faceyy=faceyy/length(faceJuli); %计算各个区间的个数 bar(facex,faceyy) %画出概率密度分布图 %% %非人脸的读取及重构 nofacestr='F:\\code\\matlab\\noface\\'; %图像存放路径 b1=zeros(4300,400,'double');%非人脸向量矩阵 for i=1:4300 B1=imread([nofacestr,num2str(i),'.bmp']); %依次读取每一幅图像 m = size(B1, 3); if m==1 I1 = B1; else I1=rgb2gray(B1); end %在此处进行你的图像处理即可 A1 = I1';%I的转置 C1 = A1(:)';%矩阵转换为行向量,即一张图片对应一个行向量 b1(i,:)=C1; %S = S+C; end %非人脸的映射 bb1=zeros(1000,10,'double');%每一张非人脸图像映射到特征空间的系数 for i=1:1000 bb1(i,:) = (b1(i,:)-Avg)*pca10; end for i=1:1000 nofaceImg(i,:)=Avg+(pca10*(bb1(i,:)'))';%非人脸图像重构 nofaceJuli(i)=norm(b1(i,:)-nofaceImg(i,:)); end nofaceavgJuli = mean(nofaceJuli); figure(3); nofaceymin=min(nofaceJuli); nofaceymax=max(nofaceJuli); nofacex=linspace(nofaceymin,nofaceymax,20); %将最大最小区间分成20个等分点(19等分),然后分别计算各个区间的个数 nofaceyy=hist(nofaceJuli,nofacex); %计算各个区间的个数 nofaceyy=nofaceyy/length(nofaceJuli); %计算各个区间的个数 bar(nofacex,nofaceyy) %画出概率密度分布图 %Img=reshape(X1,20,20)'; %ImgInt=uint8(Img); %imshow(ImgInt)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值