依照ILSVRC2012在matconvnet-1.0-beta23 中用imagenet训练的情况,训练自己的数据

   在此,先要说一下,我只弄懂了怎么用自己的数据训练。但如何在训练好的模型上再继续用自己的数据训练,我还没弄懂所以,今天主要记录一下怎么来将自己的数据弄成imagenet接受的形式。
    下图是我的matconvnet-1.0-beta23,里面有个data文件夹,没有就自己创建一个data.

这里写图片描述
依照下图,在data文件夹中创建两个文件夹:ILSVRC2012和imagenet12-alexnet-bnorm-simplenn 。
这里写图片描述

我们先来看第一个ILSVRC2012文件夹,在此文件夹下载创建如下图所示的ILSVRC2012_devkit_t12和images两个文件夹。

这里写图片描述

这回,我们先来看看images文件夹,先看下图,在images 文件夹下再创建两个文件:train和val(可以看成就是测试数据test),可以看出,这里就是我们要放自己的图片数据的地方啦 。
这里写图片描述
我的训练数据分为3类,所以在train中,我创建了三个文件夹,n01, n02,n03,每个文件夹中分别放置类1,类2,类3的训练图片。其中,图片大小四256*256*3,格式为.JPEG。关于图片的命名,我的是如下图。前面是n0*_ ,代表类别,后面是0000…N是该图片在第* 类训练数据中的编号。关于为什么这么多0,要不要非得按照我的命明方式来,我建议还是按着来吧,毕竟我也是按照原有的ILSVRC2012数据套用的,没尝试其它命名方式行不行,反正我弄得这个可以跑通。我的训练数据有1134张,分为3类,每类378张图片。对于n01中,包含378张图片,所以我的图片名是从n01_00000001.JPEG 到 n01_00000378.JPEG;对于n02文件夹,也包含378张图片,所以我的图片名是从n02_00000001.JPEG 到 n02_00000378.JPEG;同理,n03文件夹中也包含378张图片,所以我的图片名是从n03_00000001.JPEG 到 n03_00000378.JPEG。
这里写图片描述
这里写图片描述
这里写图片描述
接下来是val文件夹中的测试数据。测试图片直接存储在val文件夹下,如下图,图片大小和格式与训练数据相同,命名为ILSVRC2012_val_000…N.JPEG,其中N是该图片在测试数据集中的编号。比如我自己的数据有756张测试图片,所以我的val中的图片命名是从ILSVRC2012_val_00000001.JPEG到ILSVRC2012_val_00000756.JPEG,按顺序存储着252张类1,252张类2,252张类3测试图片。
这里写图片描述

现在images文件夹下数据弄好了,我们来看ILSVRC2012下另一个文件夹:ILSVRC2012_devkit_t12。首先在ILSVRC2012_devkit_t12文件夹下创建一个名为data的文件夹,然后将images/val中测试图片按顺序对应的类标写在名为ILSVRC2012_validation_ground_truth的.txt文件中如下图。比如我前面说到我有756张测试图片,且分为3类,每类就有252张图,并且在val中图片ILSVRC2012_val_00000001.JPEG到ILSVRC2012_val_0000000252.JPEG都是类1的图片,图片ILSVRC2012_val_00000253.JPEG到ILSVRC2012_val_00000504.JPEG都是类2的图片,图片ILSVRC2012_val_00000505.JPEG到ILSVRC2012_val_00000756.JPEG都是类3的图片,那么在我的.txt文件中,会有252个1,252个2和252个3。

这里写图片描述
省略号
这里写图片描述
省略号
这里写图片描述

到此,我们的ILSVRC2012文件夹就准备好了,还差imagenet12-alexnet-bnorm-simplenn文件夹中的内容。下图可看到imagenet12-alexnet-bnorm-simplenn文件夹中包含两个.mat文件。先说第一个imdb.mat 。imdb.mat 下包含一个名为images的 struct,一个名为classes的struct,和一个名为imageDir的char。
这里写图片描述

这里写图片描述

(1)名为images的 struct下包含images.id (double),images.name(cell),images.set(double)和images.label(double)。
这里写图片描述

在此,为了说清楚,我来拿我自己的数据举例子。我的训练数据1134张,分为3类,每类也就是378张图片。我的测试数据756张,同样分为3类,每类252张。训练加测试一共是1890张图片。
(1.1)images.id 是一个1*1890的double,其中按顺序存储着1到1890数字。(干嘛用的我也不知道)

(1.2)images.name 是一个1*1890的cell。每一列存储的是图片的地址名,是从train和val文件开始的。比如:前1134个为 train/n01/n01_00000001.JPEG …train/n01/n01_00000378.JPEG…train/n02/n02_00000001.JPEG…train/n01/n01_00000378.JPEG…train/n03/n03_00000001.JPEG…train/n03/n03_00000378.JPEG; 同理,接在后面的是测试的,就是val/ILSVRC2012_val_00000001.JPEG到 val/ILSVRC2012_val_00000756.JPEG 。
这里写图片描述

这里写图片描述
(1.3)images.set是1*1890的double,其由数字1和2组成,训练数据集中有多少个图片,就有多少个1,测试集中有多少个图片,就有多少个2。在我的数据中,有1134个1和756个2。

(1.4)image.label是1*1890的double,存储的是文件夹n01,n02,n03和val中图片对应的类标。比如,我训练数据分为3类,每类图片数都是378;测试数据有756个,也分为3类,1—252是类1,253—504是类2,505—756是类3。那么在我的image.label中先是378个1,再是378个2,接着378个3,接着252个1,252个2,252个3。

(2)imdb.mat中classes(cell)包含两个cell,classes.name(cell)和classes.description(cell):
这里写图片描述
(2.1)classes.name是1*M的,其中M是你训练数据的类数。比如我有3个文件夹在train文件夹下,那我的classes.name如下图。
这里写图片描述

(2.2)classes.description也是1*M的,M是类数。里面就是描述你每个类的特征的。比如我的图片是表现心情的图片,分为happy ,sad ,neural 三类。
这里写图片描述

(3)imdb.mat下最后一个包含的是imageDir,里面是你存图片的地址。比如我们把我们的train和val图片存在了ILSVRC2012/images中, 我们的imageDir为 :home/your_name/data/ILSVRC2012/images .

接下来说imagenet12-alexnet-bnorm-simplenn文件夹中的另一个.mat文件:imageStats.mat,如下图:它包含内容如下:
这里写图片描述

这三个参数是根据你自己的数据生成的,这里我将生成自己的imageStats.mat的代码贴出来,读者自己改一下:创建个名为makeImageStats的函数,放在matcovnet下的examples/imagenet下,运行一下makeImageStats.m,生成自己的imagsStats.mat:
这里写图片描述

function [ output_args ] = makeImageStats( input_args )
%用来处理EEG数据,生成imagsStats.mat
load E:\matlabCode\EEG_上交\data_augmentation\35频带不加噪音\imdb.mat     %你自己的数据的imdb.mat的地址
train = find(images.set == 1) ;
  images = fullfile(imageDir, images.name(train(1:100:end))) ;
%   [averageImage, rgbMean, rgbCovariance] = getImageStats(images, ...
%                                                     'imageSize', [256 256], ...
%                                                     'numThreads', opts.numFetchThreads, ...
%                                                     'gpus', opts.train.gpus) ;
     [averageImage, rgbMean, rgbCovariance] = getImageStats(images, ...
                                                    'imageSize', [256 256], ...  %[256 256]
                                                    'numThreads', 12) ;
  save('E:\matlabCode\imageStats', 'averageImage', 'rgbMean', 'rgbCovariance') ; %生成的imageStats的存放地址



end

按照上面说的,将自己数据对应如下图的几样东东弄好,放入matcovnet的data文件夹下。
这里写图片描述

最后,运行examples/imagenet下的cnn_imagenet.m
这里写图片描述
训练模型开始,最终生成的模型存在imagenet12-alexnet-bnorm-simplenn中。
这里写图片描述

记录:
模型训练epoch在cnn_imagnet_init.m中设置
这里写图片描述

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值