利用caffe生成 lmdb 格式的文件,并对网络进行FineTuning
利用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的更多相关文章
- (原)caffe中通过图像生成lmdb格式的数据
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5909121.html 参考网址: http://www.cnblogs.com/wangxiaocvp ...
- caffe生成voc格式lmdb
要训练ssd基本都是在liu wei框架下改,生成lmdb这一关照葫芦画瓢总遇坑,记录之: 1. labelmap_voc.prototxt要根据自己的分类修改,比如人脸检测改成这样: item { ...
- keil MDK中如何生成*.bin格式的文件
在Realview MDK的集成开发环境中,默认情况下可以生成*.axf格式的调试文件和*.hex格式的可执行文件.虽然这两个格式的文件非常有利于ULINK2仿真器的下载和调试,但是ADS的用户更习惯 ...
- 在MDK中怎样生成*.bin格式的文件?
在Realview MDK的集成开发环境中.默认情况下能够生成*.axf格式的调试文件和*.hex格式的可运行文件. 尽管这两个格式的文件很有利于ULINK2仿真器的下载和调试,可是ADS的用户更习惯 ...
- 【Linux_Fedora_应用系列】_3_如何利用Smplayer播放WMV格式的文件
在上一篇我们成功安装了视频播放器,并且成功安装里解码器[Linux_Fedora_应用系列]_2_如何安装视频播放器和视频文件解码 安装完的Smplayer的GUI的界面程序,可以播放FLV.AVI. ...
- 通过OpenSSL来生成二进制格式证书文件(pfx和cer)
1.生成RSA字符串私钥 genrsa -out private-rsa.key 2.由1中私钥导出*.cer二进制公钥文件 req -new -x509 -key private-rsa.key - ...
- python脚本从excel表到处数据,生成指定格式的文件
#coding:gbk #导入处理excel的模块 import xlrd #定义哪些字段须要推断,仅仅支持时间字段 toSureColArray = ['CREATE_TIME','MODIFY_T ...
- yii2 生成PDF格式的文件
1 .先把mpdf-development.zip解压的类文件夹放到vendor目录里面,重命名为mpdf 2 .在vendor/composer/autoload_namespaces.php里面添 ...
- Caffe︱构建lmdb数据集、binaryproto均值文件及各类难辨的文件路径名设置细解
Lmdb生成的过程简述 1.整理并约束尺寸,文件夹.图片放在不同的文件夹之下,注意图片的size需要规约到统一的格式,不然计算均值文件的时候会报错. 2.将内容生成列表放入txt文件中.两个txt文件 ...
随机推荐
- iframe中的jquery ui modal dialog 覆盖父窗口
在iframe中 使用jquery ui dialog,弹出后可以覆盖父窗体 ///iframe中的jquery ui modal dialog 覆盖父窗口 function openDialog() ...
- Mac运行exe的几种方法,欢迎补充!
1. 用wine直接运行exe.安装wine后有个放exe的文件夹,双击后会自动包装运行.看起来挺方便的,就怕暂用资源比较大: http://www.youtube.com/watch?v=eYISV ...
- AFNETWorking3.x实战教程
上一篇文章介绍了优秀的第三方网络请求框架AFNETWorking2.0,本篇就通过一个实战例子来总结AFNetworking的使用. 本文参考http://www.raywenderlich.com/ ...
- ZOJ 1654 - Place the Robots (二分图最大匹配)
题意:在一个m*n的地图上,有空地,草和墙,其中空地和草能穿透攻击光线,而墙不能.每个机器人能够上下左右攻击,问在地图上最多能放多少个不互相攻击的机器人. 这个题和HDU 1045 - Fire N ...
- hdu 2075
PS:水得不能再水..刚开始还以为是大数..要用到快速幂...谁知道想太多...就普通int型.. 代码: #include "stdio.h" int main(){ int a ...
- RFIDler:一款定义RFID的读、写、仿真器的开源软件
很多类似于RFID这样的技术看起来都很神秘,实际上他是依赖于很多物理学原理的,比如”电磁感应原理”.是的,这些现象产生的各种信号足以令人发狂,看完这些模拟模拟信号后,我忽然发现二进制信息多么干净美丽. ...
- 又见蒙特卡洛——python模拟解决三门问题
三门问题很有意思,wiki用不同方法将原理讲的很透彻了,我跟喜欢其中这种理解方式:无论参赛者开始的选择如何,在被主持人问到是否更换时都选择更换.如果参赛者先选中山羊,换之后百分之百赢:如果参赛者先选中 ...
- Unity3D ShaderLab 简单的立方体图反射
Unity3D ShaderLab 简单的立方体图反射 反射是着色器模拟现实环境的一个关键因素,它能使我们的着色器渲染效果更加具备视觉冲击,因为他利用了我们周围的环境, 让着色器反射外界的场景信息并将 ...
- Magento 自定义URL 地址重写 分类分级显示
我们打算将URL在分类页面和产品页面分别定义为: domain.com/category/分类名.html domain.com/category/子分类名.html domain.com/goods ...
- matlab 相同函数名解决
http://jingyan.baidu.com/article/1612d500a23a8ce20e1eee07.html