利用caffe生成 lmdb 格式的文件,并对网络进行FineTuning

数据的组织格式为:

首先,所需要的脚本指令路径为:

/home/wangxiao/Downloads/caffe-master/examples/imagenet/

其中,生成lmdb的文件为: create_imagenet.sh

接下来的主要任务就是修改自己的data的存放路径了。

 #!/usr/bin/env sh
# Create the imagenet lmdb inputs
# N.B. set the path to the imagenet train + val data dirs EXAMPLE=../wangxiao
DATA=../fine_tuning_data
TOOLS=../build/tools TRAIN_DATA_ROOT=../fine_tuning_data/training/data/
VAL_DATA_ROOT=../fine_tuning_data/validation/data/ #TRAIN_DATA_ROOT=/media/yukai/247317a3-e6b5-45d4-81d1-/---------------/Attribute reconginition/final_PETA_dataset/whole_benchmark/用于微调网络的数据/training/data/
#VAL_DATA_ROOT=/media/yukai/247317a3-e6b5-45d4-81d1-/---------------/Attribute reconginition/final_PETA_dataset/whole_benchmark/用于微调网络的数据/validation/data/ # Set RESIZE=true to resize the images to 256x256. Leave as false if images have
# already been resized using another tool. # RESIZE=false default parameter and wangxiao modify it in 2015.10. : RESIZE=true
if $RESIZE; then
RESIZE_HEIGHT=
RESIZE_WIDTH=
else
RESIZE_HEIGHT=
RESIZE_WIDTH=
fi if [ ! -d "$TRAIN_DATA_ROOT" ]; then
echo "Error: TRAIN_DATA_ROOT is not a path to a directory: $TRAIN_DATA_ROOT"
echo "Set the TRAIN_DATA_ROOT variable in create_imagenet.sh to the path" \
"where the ImageNet training data is stored."
exit
fi if [ ! -d "$VAL_DATA_ROOT" ]; then
echo "Error: VAL_DATA_ROOT is not a path to a directory: $VAL_DATA_ROOT"
echo "Set the VAL_DATA_ROOT variable in create_imagenet.sh to the path" \
"where the ImageNet validation data is stored."
exit
fi echo "Creating train lmdb..." GLOG_logtostderr= $TOOLS/convert_imageset \
--resize_height=$RESIZE_HEIGHT \
--resize_width=$RESIZE_WIDTH \
--shuffle \
$TRAIN_DATA_ROOT \
$DATA/training/final_train_data.txt \
$EXAMPLE/PETA_train_lmdb #echo "Creating val lmdb..." #GLOG_logtostderr= $TOOLS/convert_imageset \
# --resize_height=$RESIZE_HEIGHT \
# --resize_width=$RESIZE_WIDTH \
# --shuffle \
# $VAL_DATA_ROOT \
# $DATA/validation/final_test_data.txt \
# $EXAMPLE/PETA_val_lmdb echo "Done."

都修改完成后,在终端执行:create_imagenet.sh,然后会有如此的提示,表示正在生成lmdb文件:

然后完成后,提示: Done. 然后可以看到已经生成了所需要的文件:

然后利用 make_imagenet_mean.sh 生成所需要的 mean file :

caffe-master$:  sh ./make_imagenet_mean.sh

 #!/usr/bin/env sh
# Compute the mean image from the imagenet training lmdb
# N.B. this is available in data/ilsvrc12 EXAMPLE=../wangxiao
DATA=./data
TOOLS=../build/tools #echo $TOOLS/compute_image_mean $EXAMPLE/HAT_train_lmdb \
# $DATA/HAT_mean.binaryproto
$TOOLS/compute_image_mean $EXAMPLE/HAT_train_lmdb \
$DATA/HAT_mean.binaryproto
echo "Done."

然后就生成了 HAT_mean.binaryproto

其中,caffe路径下:/home/wangxiao/Downloads/caffe-master/examples/imagenet/readme.md 对这个过程有一个详细的解释。

然后就是查看 solver.prototxt:

 net: "models/bvlc_reference_caffenet/train_val.prototxt"
test_iter:
test_interval:
base_lr: 0.01
lr_policy: "step"
gamma: 0.1
stepsize:
display:
max_iter:
momentum: 0.9
weight_decay: 0.0005
snapshot:
snapshot_prefix: "models/bvlc_reference_caffenet/caffenet_train"
solver_mode: GPU

打开 models/bvlc_reference_caffenet/train_val.prototxt

需要修改的也就到第55行:

 name: "CaffeNet"
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
mirror: true
crop_size:
mean_file: "wangxiao/HAT_data/HAT_mean.binaryproto"
}
# mean pixel / channel-wise mean instead of mean image
# transform_param {
# crop_size:
# mean_value:
# mean_value:
# mean_value:
# mirror: true
# }
data_param {
source: "wangxiao/HAT_data/HAT_train_lmdb"
batch_size:
backend: LMDB
}
}
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TEST
}
transform_param {
mirror: false
crop_size:
mean_file: "wangxiao/HAT_data/HAT_mean.binaryproto"
}
# mean pixel / channel-wise mean instead of mean image
# transform_param {
# crop_size:
# mean_value:
# mean_value:
# mean_value:
# mirror: true
# }
data_param {
source: "wangxiao/HAT_data/HAT_val_lmdb"
batch_size:
backend: LMDB
}
}

然后执行:

终端会有显示:

 I0103 ::21.027832   net.cpp:] Network initialization done.
I0103 ::21.027839 net.cpp:] Memory required for data:
I0103 ::21.027928 solver.cpp:] Solver scaffolding done.
I0103 ::21.028312 caffe.cpp:] Starting Optimization
I0103 ::21.028326 solver.cpp:] Solving CaffeNet
I0103 ::21.028333 solver.cpp:] Learning Rate Policy: step
I0103 ::22.012593 solver.cpp:] Iteration , loss = 7.52783
I0103 ::22.012660 solver.cpp:] Train net output #: loss = 7.52783 (* = 7.52783 loss)
I0103 ::22.012687 solver.cpp:] Iteration , lr = 0.01
I0103 ::41.812361 solver.cpp:] Iteration , loss = 3.9723
I0103 ::41.812413 solver.cpp:] Train net output #: loss = 3.9723 (* = 3.9723 loss)
I0103 ::41.812428 solver.cpp:] Iteration , lr = 0.01
I0103 ::01.553021 solver.cpp:] Iteration , loss = 2.9715
I0103 ::01.553104 solver.cpp:] Train net output #: loss = 2.9715 (* = 2.9715 loss)
I0103 ::01.553119 solver.cpp:] Iteration , lr = 0.01
I0103 ::21.574745 solver.cpp:] Iteration , loss = 2.91547
I0103 ::21.574798 solver.cpp:] Train net output #: loss = 2.91547 (* = 2.91547 loss)
I0103 ::21.574811 solver.cpp:] Iteration , lr = 0.01
I0103 ::41.247493 solver.cpp:] Iteration , loss = 2.96451
I0103 ::41.247627 solver.cpp:] Train net output #: loss = 2.96451 (* = 2.96451 loss)
I0103 ::41.247642 solver.cpp:] Iteration , lr = 0.01
I0103 ::00.941267 solver.cpp:] Iteration , loss = 2.85887
I0103 ::00.941318 solver.cpp:] Train net output #: loss = 2.85887 (* = 2.85887 loss)
I0103 ::00.941332 solver.cpp:] Iteration , lr = 0.01
I0103 ::20.628329 solver.cpp:] Iteration , loss = 2.91318
I0103 ::20.628463 solver.cpp:] Train net output #: loss = 2.91318 (* = 2.91318 loss)
I0103 ::20.628476 solver.cpp:] Iteration , lr = 0.01
I0103 ::40.621937 solver.cpp:] Iteration , loss = 3.06499
I0103 ::40.621989 solver.cpp:] Train net output #: loss = 3.06499 (* = 3.06499 loss)
I0103 ::40.622004 solver.cpp:] Iteration , lr = 0.01
I0103 ::00.557921 solver.cpp:] Iteration , loss = 2.9818
I0103 ::00.558048 solver.cpp:] Train net output #: loss = 2.9818 (* = 2.9818 loss)
I0103 ::00.558063 solver.cpp:] Iteration , lr = 0.01

因为设置的迭代次数为: 450000次,所以,接下来就是睡觉了。。。O(∩_∩)O~ 感谢木得兄刚刚的帮助。

------ 未完待续------

另外就是,当loss 后期变化不大的时候,可以试着调整学习率, 在Solver.prototext中:

 train_net: "models/bvlc_reference_caffenet/train_val.prototxt"
# test_iter:
# test_interval:
base_lr: 0.0001
lr_policy: "step"
gamma: 0.1
stepsize:
display:
max_iter:
momentum: 0.9
weight_decay: 0.0005
snapshot:
snapshot_prefix: "models/bvlc_reference_caffenet/caffenet_train"
solver_mode: GPU
base_lr: 0.0001  每次可以改为0.1×base_lr, 这里的 0.0001 是我两次调整之后的数值。
然后运行 resume_training.sh
 #!/usr/bin/env sh

 ./build/tools/caffe train \
--solver=models/bvlc_reference_caffenet/solver.prototxt \
--snapshot=models/bvlc_reference_caffenet/caffenet_train_iter_88251.solverstate

将snapshot改为之前中断时的结果即可,即: caffenet_train_iter_88251.solverstate

继续看loss是否降低。。。

--------------------------------- 未完待续 ---------------------------------

利用caffe生成 lmdb 格式的文件,并对网络进行FineTuning的更多相关文章

  1. (原)caffe中通过图像生成lmdb格式的数据

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5909121.html 参考网址: http://www.cnblogs.com/wangxiaocvp ...

  2. caffe生成voc格式lmdb

    要训练ssd基本都是在liu wei框架下改,生成lmdb这一关照葫芦画瓢总遇坑,记录之: 1. labelmap_voc.prototxt要根据自己的分类修改,比如人脸检测改成这样: item { ...

  3. keil MDK中如何生成*.bin格式的文件

    在Realview MDK的集成开发环境中,默认情况下可以生成*.axf格式的调试文件和*.hex格式的可执行文件.虽然这两个格式的文件非常有利于ULINK2仿真器的下载和调试,但是ADS的用户更习惯 ...

  4. 在MDK中怎样生成*.bin格式的文件?

    在Realview MDK的集成开发环境中.默认情况下能够生成*.axf格式的调试文件和*.hex格式的可运行文件. 尽管这两个格式的文件很有利于ULINK2仿真器的下载和调试,可是ADS的用户更习惯 ...

  5. 【Linux_Fedora_应用系列】_3_如何利用Smplayer播放WMV格式的文件

    在上一篇我们成功安装了视频播放器,并且成功安装里解码器[Linux_Fedora_应用系列]_2_如何安装视频播放器和视频文件解码 安装完的Smplayer的GUI的界面程序,可以播放FLV.AVI. ...

  6. 通过OpenSSL来生成二进制格式证书文件(pfx和cer)

    1.生成RSA字符串私钥 genrsa -out private-rsa.key 2.由1中私钥导出*.cer二进制公钥文件 req -new -x509 -key private-rsa.key - ...

  7. python脚本从excel表到处数据,生成指定格式的文件

    #coding:gbk #导入处理excel的模块 import xlrd #定义哪些字段须要推断,仅仅支持时间字段 toSureColArray = ['CREATE_TIME','MODIFY_T ...

  8. yii2 生成PDF格式的文件

    1 .先把mpdf-development.zip解压的类文件夹放到vendor目录里面,重命名为mpdf 2 .在vendor/composer/autoload_namespaces.php里面添 ...

  9. Caffe︱构建lmdb数据集、binaryproto均值文件及各类难辨的文件路径名设置细解

    Lmdb生成的过程简述 1.整理并约束尺寸,文件夹.图片放在不同的文件夹之下,注意图片的size需要规约到统一的格式,不然计算均值文件的时候会报错. 2.将内容生成列表放入txt文件中.两个txt文件 ...

随机推荐

  1. 提交自己的插件包(package)

    安装 把下列命令粘贴到终端上: mkdir -p ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins; curl -L htt ...

  2. 实现viewpager下的圆点滑动

    在Drawable目录下创建资源文件 使用shape标签画出背景圆点与当前圆点 背景圆点: <?xml version="1.0" encoding="utf-8& ...

  3. 等价表达式(noip2005)

    3.等价表达式 [问题描述]    兵兵班的同学都喜欢数学这一科目,中秋聚会这天,数学课代表给大家出了个有关代数表达式的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也 ...

  4. ACM - 动态规划专题 题目整理

    CodeForces 429B  Working out 预处理出从四个顶点到某个位置的最大权值,再枚举相遇点,相遇的时候只有两种情况,取最优解即可. #include<iostream> ...

  5. 补码复习的好例子---Int范围的科学解释

    Int范围的科学解释 这得从二进制的原码说起: 如果以最高位为符号位,二进制原码最大为0111111111111111=2的15次方减1=32767 最小为1111111111111111=-2的15 ...

  6. 需求分析(NABC)

    团队开发需求分析 队长:郭庆樑 成员:林彦汝.张金 经过讨论,我们决定做一个基于Windows的小游戏——躲避小球. 把这个项目实现,组长强调有两点: 1.可实现:2.有用户. 可以说,我们最大的特点 ...

  7. Linux VPS下SSH常用命令

    目录操作:rm -rf mydir /*删除mydir目录,不需要确认,直接删除*/mkdir dirname /*创建名为dirname的目录*/cd mydir /*进入mydir目录*/cd - ...

  8. 设备、像素和点 、 9切片技术 、 颜色和外观 、 NavigationBar的美化

    1 TMessage项目的输入面板界面 1.1 问题 IOS中经常会使用到九切片技术对图片进行处理.本案例使用九切片技术完成Tmessage项目的输入板界面,如图-1所示: 图-1 1.2 方案 首先 ...

  9. Golang 交叉编译

    各平台的GOOS和GOARCH参考 OS ARCH OS version linux 386 / amd64 / arm >= Linux 2.6 darwin 386 / amd64 OS X ...

  10. CentOS6 Squid代理服务器的安装与配置

    代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息.Squid是一个缓存Internet 数据的软件,其接收用户的下载申请,并自动处理所下载的数据.当一个用户想要下载一 ...