转换数据,求均值:

转换数据

步骤大概是:建立一个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. kail Linux 安装Parallels Tools

    网上好多都是Parallels8的 针对Parallels 9 的还真不好找..... 自己捣鼓了一阵 终于可以安装了,但还是有错误,因为公司网络太不给力....回家再测试吧 1.在桌面新建一个文件夹 ...

  2. android Paint属性

    **       * Paint类介绍       *        * Paint即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了颜色,     * 样式等绘制信息,指定了如何绘制文本和图形 ...

  3. 《从零开始搭建游戏服务器》Eclipse和Tomcat安装配置

    我选择用来进行服务器开发的语言是Java,开发流程更接近于JavaWeb,所以需要先为开发配置一个开发环境,需要配置的主要是Eclipse和Tomcat(Web工程的容器或管理工具). 一.资源下载: ...

  4. .NET Core 3.0之创建基于Consul的Configuration扩展组件

    写在前面 经过前面三篇关于.NET Core Configuration的文章之后,本篇文章主要讨论如何扩展一个Configuration组件出来.如果前面三篇文章没有看到,可以点击如下地址访问 .N ...

  5. 42.QT-QSqlQuery类操作SQLite数据库(创建、查询、删除、修改)详解

    Qt 提供了 QtSql 模块来提供平台独立的基于 SQL 的数据库操作.这里我们所说的“平台 独立”,既包括操作系统平台,也包括各个数据库平台,Qt支持以下几种数据库: QT自带SQLITE数据库, ...

  6. 多个ajax执行混乱问题

    多个ajax执行混乱问题,之前拿ajax取代iframe做响应布局(左侧点击,右侧展示),当执行多个点击事件时会造成一个页面的初始化触发另一个页面的on click的function, 将ajax调为 ...

  7. js中的offsetParent,offsetLeft,offsetTop及jquery的offset(),position()比较

    1.offsetParent 元素的offsetParent并不是元素的父元素,判断元素的offsetParent要根据以下情况: 1)当DOM结构层次中的元素均没有进行css定位(设置positio ...

  8. [WASM] Run WebAssembly in Node.js using the node-loader

    WebAssembly is great for targeting performance bottlenecks in the browser. Now with node-loader, we ...

  9. Android Camera 拍照 三星BUG总结

    Android Camera 三星BUG  : 近期在Android项目中使用拍照功能 , 其他型号的手机执行成功了  只有在三星的相机上遇到了bug . BUG详细体现为 : (1) 摄像头拍照后图 ...

  10. 第04章-VTK基础(3)

    [译者:这个系列教程是以Kitware公司出版的<VTK User's Guide -11th edition>一书作的中文翻译(出版时间2010年,ISBN: 978-1-930934- ...