提取caffenet的fc7层特征
1,Markdown编辑器是基于StackEdit修改而来,用它写博客,将会带来全新的体验哦!指导性的文章见链接等,详细语法参考帮助。
Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面。 —— [ 维基百科 ]
2,本文参考了用Caffe提取深度特征这篇博文,如果下文中关于提取特征 有重复的地方,就是引用这篇博文中的内容。
3,本文参考了caffe的lmdb和python lmdb使用博文,如果下文中关于LMDB 有重复的地方,就是引用这两篇博文中的内容。
在已有的网络架构上训练自己的数据
参照caffe学习系列:训练自己的图片集(超详细教程)就可以了。
步骤:
1, 准备数据集(包括训练数据和测试数据)
2, 计算数据集的均值文件
3, 修改网络最后一层的输出类别数,以及最后一层网络的名称,加大最后一层的参数学习速率
4, 调整solver的配置参数
5, 加载预训练模型的参数,启动训练。
展示网络结构
在caffe-master目录下的python下执行命令
python draw_net.py ../examples/myGeoimage1/train_val.prototxt ../examples/myGeoimage1/caffenet_train_val.png
执行命令,下载训练好的模型参数文件
./scripts/download_model_binary.py models/bvlc_reference_caffenet
执行命令,训练
./build/tools/caffe train -solver examples/myGeoimage1/solver.prototxt -weights models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel -gpu 0 > /home/linbiyuan/log/blogimgtrain.log 2>&1
> /home/linbiyuan/log/blogimgtrain.log 2>&1是将控制台输出重定向到日志中,以便查看。可以不写,直接在控制台输出就行。
提取特征
在实际操作中提取特征的命令如下(在caffe安装路径下进行):
./build/tools/extract_features models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel examples/myGeoimage1/train_val.prototxt fc7 examples/myGeoimage1/features 27
原始命令:
extract_features pretrained_net_param feature_extraction_proto_file \
extract_feature_blob_name1[,name2,...] save_feature_dataset_name1[,name2,...] \
num_mini_batches db_type [CPU/GPU] [DEVICE_ID=0]
参数分析:
1,./build/tools/feature_extraction.bin:caffe提供的提取图像特征的cpp文件
2,extract_features pretrained_net_param:已经训练好的模型(*.caffemodel)文件的路径
3,feature_extraction_proto_file:描述网络结构的prototxt文件的路径,程序会从参数2的*.caffemodel文件里找对应名称的layer读取参数。
4,extract_feature_blob_name1[,name2,…]:需要提取的blob名称,对应网络结构prototxt里的名称。blob名称可以有多个,用逗号分隔。每个blob提取出的特征会分开保存。
5,save_feature_dataset_name1[,name2,…]:保存提取出来的特征的数据库路径,可以有多个,和blob一一对应,以逗号分隔。如果用LMDB的话,路径必须是不存在的(已经存在的话要改名或者删除)。
6,num_mini_batches:这个参数比较重要,它控制了提取多少图像的特征,具体说明在文后。
7,db_type:保存特征使用的数据库类型,支持lmdb和leveldb两种(小写)。推荐使用lmdb,因为lmdb的访问速度更快,还支持多进程同时读取。
8,[CPU/GPU]:决定使用GPU还是CPU,直接写对应的三个大写字母就行。省略不写的话默认是CPU。
9,[DEVICE_ID=0]:决定使用哪个GPU,在多GPU的机器上跑的时候需要指定。省略不写的话默认使用0号GPU。
注意细节
- 提取特征时,网络是对test数据集进行操作:
1,特征提取命令中的num_mini_batches 参数的大小,它与*.prototxt文件中在Test模块数据层中设置的batch_size相乘的结果就是最终提取多少图片的特征。(也就是测试数据集大小)
2,有些网络定义文件是将Train和Test的参数写在同一个Prototxt里,这时候修改参数,注意不要改错地方,因为会有两个数据层模块,分别被包含在train和test中。
3,Dropout层在Test模式下不起作用,不必担心dropout影响结果。 - 减去均值图像
1,在训练、测试及提取特征时,输入的图像要减去均值。
2,应该减去的是train数据集的均值。 - 可以提取任意一层的特征
- 我提取的是caffenet的fc7层。
- 最后一层是fc8,定义num_out为分类数,一般不用这一层作为特征。
本文介绍如何使用Caffe框架提取CaffeNet模型的FC7层特征,并提供了详细的步骤指导,包括训练数据集、调整网络参数、提取特征的具体命令及注意事项。
1944

被折叠的 条评论
为什么被折叠?



