logo资料库

caffe学习笔记(合集)-薛开宇.pdf

第1页 / 共36页
第2页 / 共36页
第3页 / 共36页
第4页 / 共36页
第5页 / 共36页
第6页 / 共36页
第7页 / 共36页
第8页 / 共36页
资料共36页,剩余部分请下载后查看
学习笔记1_CIFAR-10在caffe上进行训练与学习-薛开宇
学习笔记2_用一个预训练模型提取特征-薛开宇
caffe学习笔记3用自己的数据训练和测试-薛开宇
学习笔记4_学习搭建自己的网络——MNIST在caffe上进行训练与学习-薛开宇
学习笔记5_逐层可视化图像特征-薛开宇
caffe学习笔记6在python界面上用训练好的Imagenet模型去分类图形-薛开宇
caffe学习笔记7如何改变模型参数将提取出的大量特征用全卷积的分类器表示-薛开宇
读书笔记 1 CIFAR-10 在 caffe 上进行训练与学习 2014.7.21 薛开宇 本次学习笔记作用,知道如何在 caffe 上训练与学习,如何看结果。 1.1 使用数据库:CIFAR-10 60000 张 32X32 彩色图像 10 类 50000 张训练 10000 张测试 1.2 准备 在终端运行以下指令: cd $CAFFE_ROOT/data/cifar10 ./get_cifar10.sh cd $CAFFE_ROOT/examples/cifar10 ./create_cifar10.sh 其中 CAFFE_ROOT 是 caffe-master 在你机子的地址 运行之后,将会在 examples 中出现数据库文件./cifar10-leveldb 和数据库图像均值二进制文 件./mean.binaryproto
1.3 模型 该 CNN 由卷积层,POOLing 层,非线性变换层,在顶端的局部对比归一化线性分类器组成。 该模型的定义在 CAFFE_ROOT/examples/cifar10 directory’s cifar10_quick_train.prototxt 中, 可以进行修改。其实后缀为 prototxt 很多都是用来修改配置的。 1.4 训练和测试 训练这个模型非常简单,当我们写好参数设置的文件 cifar10_quick_solver.prototxt 和定义的 文件 cifar10_quick_train.prototxt 和 cifar10_quick_test.prototxt 后,运行 train_quick.sh 或者在 终端输入下面的命令: cd $CAFFE_ROOT/examples/cifar10 ./train_quick.sh 即 可 , train_quick.sh 是 一 个 简 单 的 脚 本 , 会 把 执 行 的 信 息 显 示 出 来 , 培 训 的 工 具 是 train_net.bin,cifar10_quick_solver.prototxt 作为参数。 然后出现类似以下的信息: I0317 21:52:48.945710 2008298256 net.cpp:74] Creating Layer conv1 I0317 21:52:48.945716 2008298256 net.cpp:84] conv1 <- data I0317 21:52:48.945725 2008298256 net.cpp:110] conv1 -> conv1 I0317 21:52:49.298691 2008298256 net.cpp:125] Top shape: 100 32 32 32 (3276800) I0317 21:52:49.298719 2008298256 net.cpp:151] conv1 needs backward computation. 这是搭建模型的相关信息 接着: 0317 21:52:49.309370 2008298256 net.cpp:166] Network initialization done. I0317 21:52:49.309376 2008298256 net.cpp:167] Memory required for Data 23790808 I0317 21:52:49.309422 2008298256 solver.cpp:36] Solver scaffolding done. I0317 21:52:49.309447 2008298256 solver.cpp:47] Solving CIFAR10_quick_train 之后,训练开始 I0317 21:53:12.179772 2008298256 solver.cpp:208] Iteration 100, lr = 0.001 I0317 21:53:12.185698 2008298256 solver.cpp:65] Iteration 100, loss = 1.73643 ... I0317 21:54:41.150030 2008298256 solver.cpp:87] Iteration 500, Testing net I0317 21:54:47.129461 2008298256 solver.cpp:114] Test score #0: 0.5504 I0317 21:54:47.129500 2008298256 solver.cpp:114] Test score #1: 1.27805 其中每 100 次迭代次数显示一次训练时 lr(learning rate),和 loss(训练损失函数),每 500 次 测试一次,输出 score 0(准确率) 和 score 1(测试损失函数)
当 5000 次迭代之后,正确率约为 75%,模型的参数存储在二进制 protobuf 格式在 cifar10_quick_iter_5000 然后,这个模型就可以用来运行在新数据上了。 1.5 其他 另外,更改 cifar*solver.prototxt 文件可以使用 CPU 训练, # solver mode: CPU or GPU solver_mode: CPU 可以看看 CPU 和 GPU 训练的差别。 主要资料来源:caffe 官网教程
读书笔记 2 用一个预训练模型提取特征 2014.7.21 薛开宇 本学习笔记的作用在于为后面打基础,没有什么实际的东西可以观测到,要可视化特 征还要观看后面的教程。 2.1 制作一个数据库 先做一个临时文件夹存放东西。 mkdir examples/_temp 我们为两张在 images 文件夹的照片生成一个文件列表(默认为一张图片,cat1 是我随意加 上去的) find `pwd`/examples/images -type f -exec echo {} \; > examples/_temp/temp.txt 我们将使用 imagedatalayer 预计标签之后的每一个文件名,所以让我们添加一个 0 到每一行 的末尾 sed "s/$/ 0/" examples/_temp/temp.txt > examples/_temp/file_list.txt 这样,我们将得到两个文件 temp.txt 和 file_list.txt。 2.2.定义特征提取网络结构 在实践中,从一个数据集中减去均值图像对于提高分类准确性很重要,因此从 ILSVRC dataset 中下载均值图像数据库 data/ilsvrc12/get_ilsvrc_aux.sh 我们将使用其中的 data/ilsvrc212/imagenet_mean.binaryproto 去定义网络结构。 将定义结构的文件 cope 到我们的临时文件夹。
cp examples/feature_extraction/imagenet_val.prototxt examples/_temp 然后,我们进入 imagenet_val.prototxt 更改路径。更改其中$CAFFE_DIR 的地方 下图是我做的改动。 2.3.提取特征 执行指令 build/tools/extract_features.bin examples/imagenet/caffe_reference_imagenet_model examples/_temp/imagenet_val.prototxt fc7 examples/_temp/features 10 其中 fc7 是最高层的特征,我们也可以使用其他层提取,像 conv5 或 pool3 最后的参数是数据的批次 特征保存在 LevelDB examples/_temp/features ,可以运用到其他代码了。 这里可以发现,特征文件中 5 个文件和 cifar10 中的 leveldb 是相似的。 _temp 下 features Cifar10 下特征数据库 因此,这是我们训练时组建模型时必要的文件。 2.4.注意 当存在 features 文件夹时将出现错误,这时需要移除该文件夹。 资料来源: caffe 官网教程
学习笔记 3 用自己的数据训练和测试“CaffeNet” 2014.7.22 薛开宇 本次学习笔记作用比较大,也是重点,知道如何在 caffe 上搭建自己的数据库。 3.1 数据准备 本学习笔记有点脱离了原文,原文是用 ImageNet1000 类的数据库,而因为电脑内存不 足,只能自己模仿做一个小的数据库进行下去。 本来教程是假设已经下载了 ImageNet 训练数据和验证数据(非常大),并以下面的格式 存储在磁盘: /path/to/imagenet/train/n01440764/n01440764_10026.JPEG /path/to/imagenet/val/ILSVRC2012_val_00000001.JPEG 里面是各种的分类图。 因为实在太大,所以我们改为模仿搭建自己的数据库。 在 data 中新建文件夹 myself,本人在网上下载了训练猫的图片 50 张,测试猫 10 张,训练 鸟的图片 50 张,测试鸟 10 张。如图所示: 如果坚持用 Imagenet 的话,我们还需要一些标签数据进行训练,用以下指令可以下载, 如果不用,就可以不执行下面指令。 cd $CAFFE_ROOT/data/ilsvrc12/ ./get_ilsvrc_aux.sh
培训和测试的输入是用 train.txt 和 val.txt 描述的,这些文档列出所有文件和他们的标签。 注意,我们分类的名字是 ASCII 码的顺序,即 0-999,对应的分类名和数字的映射在 synset_words.txt(自己写)中。 运行以下指令: find -name *.jpeg |cut -d '/' -f2-3 > train.txt 注意路径 然后,因为样本数比较少,可以自行手动做分类标签。在 train.txt 的每个照片后用 0-999 分类。当样本过多,就自己编写指令批量处理。 同理,获得 val.txt Test.txt 和 val.txt 一样,不过后面不能标签,全部设置成 0。 我们还需要把图片的大小变成 256X256,但在一个集群环境,可以不明确的进行,使用 Mapreduce 就可以了,像杨青就是这样做的。如果我们希望更简单,用下面的命令: for name in /path/to/imagenet/val/*.JPEG; do convert -resize 256x256\! $name $name done 我做成了 sh,方便以后使用。
然后在 caffe-master 创建 myself 文件夹,然后将 imagenet 的 create_imagenet.sh. 复制到 该文件夹下进行修改,进行训练和测试路径的设置,运行该 sh. 最后得到 3.2 计算图像均值 模型需要我们从每张图片减去均值,所以我们必须获得训练的均值,用 tools/compute_image_mean.cpp 实现,这个 cpp 是一个很好的例子去熟悉如何操作多个组建, 例如协议的缓冲区,leveldbs,登录等。我们可以直接复制 imagenet 的 ./make_imagenet_mean.加以修改应用就行,注意路径。
分享到:
收藏