转换数据,求均值:

转换数据

步骤大概是:建立一个train文件夹,里面放一个train.txt;建立一个test文件夹,里面放一个test.txt,然后分别运行以下两条bat命令:

SET GLOG_logtostderr=1

convert_imageset.exe train/ train/train.txt convert_data_train

pause

SET GLOG_logtostderr=1

convert_imageset.exe test/ test/test.txt convert_data_test

pause

当然,也会出现错误,可能有以下几点原因:

1、路径没有设置正确;2、txt里面包含了本来没有的文件;3、如果convert_data_train和convert_data_test文件夹本来就存在,那么也会报错。

生成的数据将会保存在:convert_data_train和convert_data_test文件夹内。

求均值:

SET GLOG_logtostderr=1

compute_image_mean.exe convert_data_train image_mean.binaryproto

pause

注意文件夹是不是存在的。

微调Finetune:

由于要用caffe做人脸识别,自己刚入手又不可能配置网络,那么只有下载已经有的模型进行微调。我对微调概念的理解就是,让这个caffemodel能够更加合你的数据。

然后被小坑了一下。我下载了vgg的模型,一个caffemodel,一个deploy.prototxt,然后上网查如何进行微调,思路是:自己的train,test数据转换–>求均值–>改写deploy.prototxt文件–>撰写solver.prototxt。

前两步都还好,没有问题,在改写的时候,要先加入数据层,也就是要删掉原来的:



然后加入一个数据层。看网上有一个教程是这么加的:

name: "vggface_train_test.prototxt"
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
mirror: true
crop_size: 224
mean_file: "vggface/face_mean.binaryproto"
}
data_param {
source: "vggface/face_train_lmdb"
batch_size: 20
backend: LMDB
}
}
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TEST
}
transform_param {
mirror: false
crop_size: 224
mean_file: "vggface/face_mean.binaryproto"
}
data_param {
source: "vggface/face_val_lmdb"
batch_size: 20
backend: LMDB
}
}

然后我第一次运行,提示只能定义一种layer,我把上面的layer改为了layers,继续运行时,发现提示有错,由于没有什么基础弄这个,查了一下,大意是说第四行有意料之外的字符。我又看了一些其他的finetune例子,修改了以上代码:

name: "vggface_train_test.prototxt"
layer {
name: "data"
type: DATA
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
mirror: true
crop_size: 224
mean_file: "vggface/face_mean.binaryproto"
}
data_param {
source: "vggface/face_train_lmdb"
batch_size: 20
backend: LMDB
}
}
layer {
name: "data"
type: DATA
top: "data"
top: "label"
include {
phase: TEST
}
transform_param {
mirror: false
crop_size: 224
mean_file: "vggface/face_mean.binaryproto"
}
data_param {
source: "vggface/face_val_lmdb"
batch_size: 20
backend: LMDB
}
}

神奇的成功了。把type后的这个改成了大写的DATA。但是原po主说他的那个在他的电脑上是对的,我也不知道怎么回事。如果有好心人看到了希望能够给我这个小白讲解一下。

这里还是给出finetune的bat命令以及solver文件:

bat:

Build\x64\Debug\caffe train –solver=vggface/solver.prototxt –weights=vggface/vgg_face.caffemodel

(注意自己的路径)

solver.prototxt:

net: "vggface/vggface_train_test.prototxt"
test_iter: 500
test_interval: 500
test_initialization: false
display: 40
average_loss: 40
base_lr: 0.00005
lr_policy: "step"
stepsize: 320000
gamma: 0.96
max_iter: 1000
momentum: 0.9
weight_decay: 0.0002
snapshot: 500
snapshot_prefix: "vggface/mymodel"
solver_mode: GPU

可自行修改。

fine-tune时用已经训练好的权值进行初始化,结果一般比直接训练会好很多,尤其是训练数据不多的情况下。solver文件中最重要的可能是学习率了,一般fine-tune时学习率比直接train时小一些,一般训练的学习率0.001~0.01之间,可以多试试。

提取某一层特征:

这个被大坑了一下。网上的教程大多是用extract_features.bin ,就连官方自带的教程也是extract_features.bin,我却没有找到。难道是我用的是微软的caffe导致的?(逃

然后在build文件夹里还是找到了一个好像是一样的exe文件:extract_features.exe

需要运行这个我们得准备几样东西:

1、一张图片(也可以是几张。。尺寸问题!要注意)

2、一个file_list.txt文件,而且后面要加个0(标签?不像啊)



3、一个imagenet_val文件,因为我用的网络是caffenet,而且这个东西就在extract例程的文件夹下,然后要改东西,依据自己的路径:



4、一个caffemodel,我下载了bvlc_reference_caffenet.caffemodel 。

然后就要开始了:

bat:

Build\x64\Debug\extract_features caffenet/bvlc_reference_caffenet.caffemodel caffenet/imagenet_val.prototxt conv5 caffenet/features 10 lmdb

==========================8月11日更新===================================

调参:

网络训练参数调节,可以参考mnist或者cifar10中的demo。
调参根据经验,或者参考docs/tutorial/solver.md
需要调节的参数(solver.prototxt)主要包括:
base_lr:初始学习率,这个是非常重要的一个参数;
momentum:一般设置为0.9,如果base_lr特别低的话也可以设置为0.99或0.999等
weight_decay:默认0.005,可以适当调整,类似于正则化项;
lr_policy:学习率变化策略,常见的有fixed(固定), inv,step等
详细的说明见 http://stackoverflow.com/questions/30033096/what-is-lr-policy-in-caffe
或者参考源代码src/caffe/solver.cpp中的GetLerningRate函数
常见的调参方式包括:examples/mnist中的各种方式 fixed,inv,step等,或者cifar10中的quick两步调参的方法。
主要是控制初始的学学习率,并对应的调节学习率的策略,batch size需要适当控制大小

防止某一层未注册:

也就是下面的:

I0808 16:09:36.428869 12912 layer_factory.hpp:77] Creating layer data
F0808 16:09:36.428869 12912 layer_factory.hpp:81] Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer type: MemoryData (known types: )
*** Check failure stack trace: ***

只要加上以下就好,适当调整。

#include "caffe/common.hpp"
#include "caffe/layers/input_layer.hpp"
#include "caffe/layers/inner_product_layer.hpp"
#include "caffe/layers/dropout_layer.hpp"
#include "caffe/layers/conv_layer.hpp"
#include "caffe/layers/relu_layer.hpp"
#include "caffe/layers/pooling_layer.hpp"
#include "caffe/layers/lrn_layer.hpp"
#include "caffe/layers/softmax_layer.hpp"
namespace caffe
{
extern INSTANTIATE_CLASS(InputLayer);
extern INSTANTIATE_CLASS(InnerProductLayer);
extern INSTANTIATE_CLASS(DropoutLayer);
extern INSTANTIATE_CLASS(ConvolutionLayer);
REGISTER_LAYER_CLASS(Convolution);
extern INSTANTIATE_CLASS(ReLULayer);
REGISTER_LAYER_CLASS(ReLU);
extern INSTANTIATE_CLASS(PoolingLayer);
REGISTER_LAYER_CLASS(Pooling);
extern INSTANTIATE_CLASS(LRNLayer);
REGISTER_LAYER_CLASS(LRN);
extern INSTANTIATE_CLASS(SoftmaxLayer);
REGISTER_LAYER_CLASS(Softmax);
}

Blob:

Blob是用以存储数据的4维数组,例如

对于数据:Number*Channel*Height*Width

对于卷积权重:Output*Input*Height*Width

对于卷积偏置:Output*1*1*1

一般在提取向量时,Blob变化的是:channel。

Layer和Layers:

一定一定注意进行区分,他们的格式类型颇有不同。

Caffe层的定义由2部分组成:层属性与层参数,例如(layer)

name:"conv1"
type:CONVOLUTION
bottom:"data"
top:"conv1"
convolution_param{
num_output:<span>20
kernel_size:5
stride:1
weight_filler{
type: "<span style="color: #c0504d;">xavier</span>"
}
}

这段配置文件的前4行是层属性,定义了层名称、层类型以及层连接结构(输入blob和输出blob);而后半部分是各种层参数。

2017-1-31更新

caffe中的层是根据top: “”排序的,和name无关。打个比方,你在fc7层后面接了2个fc8层,一个的top:“fc8_type”,另一个的top:”fc8_surface”,那么”fc8_surface”层是排在“fc8_type”前面的。为什么呢?

fc8_部分都是一样的,但是s的值转换为int是比t的值要小的,所以”fc8_surface”排前面。

最近在弄多loss方面的东西,注意这个细节防止数据输入错误。比如把层命名为:fc8_1_type什么的就会好很多啦。

Caffe-Windows下遇到过的问题、技巧、解决方案的更多相关文章

  1. 基于Windows下浏览器无法正常打开的解决方案

    Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable ...

  2. Caffe windows下安装攻略

    Caffe 是一个高效的深度学习框架,鉴于不想折腾装个双系统,最近鼓捣了下用caffe源码在windows进行编译.非常感谢Yangqing Jia博士的caffe开源代码.Neil Z.Shao's ...

  3. 【神经网络与深度学习】深度学习实战——caffe windows 下训练自己的网络模型

    1.相关准备 1.1 手写数字数据集 这篇博客上有.jpg格式的图片下载,附带标签信息,有需要的自行下载,博客附带百度云盘下载地址(手写数字.jpg 格式):http://blog.csdn.net/ ...

  4. windows下用pip安装软件超时解决方案

    以前介绍过ubuntu下更换更新源办法,详情见http://www.cnblogs.com/Alier/p/6358447.html 下面讲一下windows下面pip的配置更改,包括下载软件是超时错 ...

  5. windows下安装nodejs以及python2502,2503解决方案

    1. 2053和2052为什么会出现出现这个提示的时候,是在程序安装步骤 到达copy new file的时候 进入下一步进行报错,可以推测出应该是软件包在安装的时候,解压缩部署核心文件的时候出错. ...

  6. windows下安装mysql驱动mysql-python

    Windows下直接pip安装会出错 解决方案 到Python Extension Packages for Windows - Christoph Gohlke 下载MySQL_python‑1.2 ...

  7. Windows下编译vpx获得各个项目VS2010解决方案的步骤

    最近研究了一下几种常见的视频编码器:x264,x265,vpx.本文简单记录一下它们的编译方法. x264,x265,vpx这三个开源的视频编码器可以说是当今“最火”的视频编码器.x264现在占据着H ...

  8. 【caffe】create_cifar10.sh在windows下解决方案

    @tags caffe python windows下配置caffe后,create_cifar10.sh无法执行,因为是shell脚本.那就看懂脚本意思,用python重写一个: # create_ ...

  9. 【caffe】train_lenet.sh在windows下的解决方案

    @tags: caffe python 在windows下配置caffe后,跑mnist手写数字识别的例子.发现train_lenet.sh不能运行. 那就写个python脚本替代吧. step1 定 ...

  10. 【caffe】create_mnist.sh在windows下的解决方案

    @tags caffe 在windows下使用caffe时,如果先前没有啥经验,会考虑按照官方文档中的例子跑一跑.比如mnist手写数字识别. 然后就会遇到这个问题:windows下怎么执行/exam ...

随机推荐

  1. MyBatis的参数,不能传入null

    今天在调试的过程中发现一个bug,把传入的参数写到查询分析器中执行没有问题,但是在程序中执行就报错:org.springframework.jdbc.UncategorizedSQLException ...

  2. usaco feb04距离咨询

    [USACO FEB04]距离咨询 成绩   开启时间 2014年09月19日 星期五 10:08 折扣 0.8 折扣时间 2014年09月26日 星期五 10:08 允许迟交 是 关闭时间 2014 ...

  3. kafka exactly-once

    2018年,Apache Kafka以一种特殊的设计和方法实现了强语义的exactly-once和事务性. 这篇文章将讲解kafka中exactly-once和事务操作的原理,具体为 (1)exact ...

  4. 转:Linux字符编码方式

    首先,解释一下字符集: 汉字编码: * GB2312字集是简体字集,全称为GB2312(80)字集,共包括国标简体汉字6763个. * BIG5字集是台湾繁体字集,共包括国标繁体汉字13053个. * ...

  5. BUPT复试专题—密码(2009)

    题目描述   输入 有多组输入,每组: 第一行:由26个小写字母组成的串以空格隔开,如 b a c e u f g h i j k l m n o p q r s t v w x y z d v y ...

  6. [原创]安装Ubuntu Server 14.04后

    安装后许多软件都没有,需要进行安装. 官方指南:https://help.ubuntu.com/lts/serverguide/index.html 1.修改网络配置文件 用ifconfig查看本地网 ...

  7. 哈理工2015 暑假训练赛 zoj 2976 Light Bulbs

    MS    Memory Limit:65536KB    64bit IO Format:%lld & %llu SubmitStatusid=14946">Practice ...

  8. C语言宏定义技巧——多次包括头文件内容不同

    1.  头文件定义例如以下: /* declears in "funcs.h" */ FUNC_1(ID_FUN1_001) FUNC_1(ID_FUN1_002) FUNC_2( ...

  9. libxml/HTMLparser.h file not found

    在导入asihttprequest包时出问题导入了libxml2.dylib.可是却提示libxml/HTMLparser.h file not found. 这是由于你的开发环境默认的路径无法找到这 ...

  10. POJ1811_Prime Test【Miller Rabin素数測试】【Pollar Rho整数分解】

    Prime Test Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 29193 Accepted: 7392 Case Time ...