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

 

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

 

 

数据的组织格式为:

 

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

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

 

 

 

 

 

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

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

 

 1 #!/usr/bin/env sh
 2 # Create the imagenet lmdb inputs
 3 # N.B. set the path to the imagenet train + val data dirs
 4
 5 EXAMPLE=../wangxiao
 6 DATA=../fine_tuning_data
 7 TOOLS=../build/tools
 8
 9 TRAIN_DATA_ROOT=../fine_tuning_data/training/data/
10 VAL_DATA_ROOT=../fine_tuning_data/validation/data/
11
12 #TRAIN_DATA_ROOT=/media/yukai/247317a3-e6b5-45d4-81d1-956930526746/---------------/Attribute reconginition/final_PETA_dataset/whole_benchmark/用于微调网络的数据/training/data/
13 #VAL_DATA_ROOT=/media/yukai/247317a3-e6b5-45d4-81d1-956930526746/---------------/Attribute reconginition/final_PETA_dataset/whole_benchmark/用于微调网络的数据/validation/data/
14
15 # Set RESIZE=true to resize the images to 256x256. Leave as false if images have
16 # already been resized using another tool.
17
18 # RESIZE=false  default parameter and wangxiao modify it in 2015.10.13 1:25
19
20 RESIZE=true
21 if $RESIZE; then
22   RESIZE_HEIGHT=256
23   RESIZE_WIDTH=256
24 else
25   RESIZE_HEIGHT=0
26   RESIZE_WIDTH=0
27 fi
28
29 if [ ! -d "$TRAIN_DATA_ROOT" ]; then
30   echo "Error: TRAIN_DATA_ROOT is not a path to a directory: $TRAIN_DATA_ROOT"
31   echo "Set the TRAIN_DATA_ROOT variable in create_imagenet.sh to the path" \
32        "where the ImageNet training data is stored."
33   exit 1
34 fi
35
36 if [ ! -d "$VAL_DATA_ROOT" ]; then
37   echo "Error: VAL_DATA_ROOT is not a path to a directory: $VAL_DATA_ROOT"
38   echo "Set the VAL_DATA_ROOT variable in create_imagenet.sh to the path" \
39        "where the ImageNet validation data is stored."
40   exit 1
41 fi
42
43 echo "Creating train lmdb..."
44
45 GLOG_logtostderr=1 $TOOLS/convert_imageset \
46     --resize_height=$RESIZE_HEIGHT \
47     --resize_width=$RESIZE_WIDTH \
48     --shuffle \
49     $TRAIN_DATA_ROOT \
50     $DATA/training/final_train_data.txt \
51     $EXAMPLE/PETA_train_lmdb
52
53 #echo "Creating val lmdb..."
54
55 #GLOG_logtostderr=1 $TOOLS/convert_imageset \
56 #    --resize_height=$RESIZE_HEIGHT \
57 #    --resize_width=$RESIZE_WIDTH \
58 #    --shuffle \
59 #    $VAL_DATA_ROOT \
60 #    $DATA/validation/final_test_data.txt \
61 #    $EXAMPLE/PETA_val_lmdb
62
63 echo "Done."

 

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

 

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

 

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

  caffe-master$:  sh ./make_imagenet_mean.sh

 1 #!/usr/bin/env sh
 2 # Compute the mean image from the imagenet training lmdb
 3 # N.B. this is available in data/ilsvrc12
 4
 5 EXAMPLE=../wangxiao
 6 DATA=./data
 7 TOOLS=../build/tools
 8
 9 #echo $TOOLS/compute_image_mean $EXAMPLE/HAT_train_lmdb \
10 #    $DATA/HAT_mean.binaryproto
11 $TOOLS/compute_image_mean $EXAMPLE/HAT_train_lmdb \
12     $DATA/HAT_mean.binaryproto
13 echo "Done."

 

然后就生成了 HAT_mean.binaryproto

 

 

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

然后就是查看 solver.prototxt:

 

 1 net: "models/bvlc_reference_caffenet/train_val.prototxt"
 2 test_iter: 1000
 3 test_interval: 1000
 4 base_lr: 0.01
 5 lr_policy: "step"
 6 gamma: 0.1
 7 stepsize: 100000
 8 display: 20
 9 max_iter: 450000
10 momentum: 0.9
11 weight_decay: 0.0005
12 snapshot: 10000
13 snapshot_prefix: "models/bvlc_reference_caffenet/caffenet_train"
14 solver_mode: GPU

 

打开 models/bvlc_reference_caffenet/train_val.prototxt

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

 1 name: "CaffeNet"
 2 layer {
 3   name: "data"
 4   type: "Data"
 5   top: "data"
 6   top: "label"
 7   include {
 8     phase: TRAIN
 9   }
10   transform_param {
11     mirror: true
12     crop_size: 227
13     mean_file: "wangxiao/HAT_data/HAT_mean.binaryproto"
14   }
15 # mean pixel / channel-wise mean instead of mean image
16 #  transform_param {
17 #    crop_size: 227
18 #    mean_value: 104
19 #    mean_value: 117
20 #    mean_value: 123
21 #    mirror: true
22 #  }
23   data_param {
24     source: "wangxiao/HAT_data/HAT_train_lmdb"
25     batch_size: 256
26     backend: LMDB
27   }
28 }
29 layer {
30   name: "data"
31   type: "Data"
32   top: "data"
33   top: "label"
34   include {
35     phase: TEST
36   }
37   transform_param {
38     mirror: false
39     crop_size: 227
40     mean_file: "wangxiao/HAT_data/HAT_mean.binaryproto"
41   }
42 # mean pixel / channel-wise mean instead of mean image
43 #  transform_param {
44 #    crop_size: 227
45 #    mean_value: 104
46 #    mean_value: 117
47 #    mean_value: 123
48 #    mirror: true
49 #  }
50   data_param {
51     source: "wangxiao/HAT_data/HAT_val_lmdb"
52     batch_size: 50
53     backend: LMDB
54   }
55 }

 

然后执行:

 

终端会有显示:

 1 I0103 13:44:21.027832  9543 net.cpp:297] Network initialization done.
 2 I0103 13:44:21.027839  9543 net.cpp:298] Memory required for data: 1757220868
 3 I0103 13:44:21.027928  9543 solver.cpp:66] Solver scaffolding done.
 4 I0103 13:44:21.028312  9543 caffe.cpp:212] Starting Optimization
 5 I0103 13:44:21.028326  9543 solver.cpp:294] Solving CaffeNet
 6 I0103 13:44:21.028333  9543 solver.cpp:295] Learning Rate Policy: step
 7 I0103 13:44:22.012593  9543 solver.cpp:243] Iteration 0, loss = 7.52783
 8 I0103 13:44:22.012660  9543 solver.cpp:259]     Train net output #0: loss = 7.52783 (* 1 = 7.52783 loss)
 9 I0103 13:44:22.012687  9543 solver.cpp:590] Iteration 0, lr = 0.01
10 I0103 13:44:41.812361  9543 solver.cpp:243] Iteration 20, loss = 3.9723
11 I0103 13:44:41.812413  9543 solver.cpp:259]     Train net output #0: loss = 3.9723 (* 1 = 3.9723 loss)
12 I0103 13:44:41.812428  9543 solver.cpp:590] Iteration 20, lr = 0.01
13 I0103 13:45:01.553021  9543 solver.cpp:243] Iteration 40, loss = 2.9715
14 I0103 13:45:01.553104  9543 solver.cpp:259]     Train net output #0: loss = 2.9715 (* 1 = 2.9715 loss)
15 I0103 13:45:01.553119  9543 solver.cpp:590] Iteration 40, lr = 0.01
16 I0103 13:45:21.574745  9543 solver.cpp:243] Iteration 60, loss = 2.91547
17 I0103 13:45:21.574798  9543 solver.cpp:259]     Train net output #0: loss = 2.91547 (* 1 = 2.91547 loss)
18 I0103 13:45:21.574811  9543 solver.cpp:590] Iteration 60, lr = 0.01
19 I0103 13:45:41.247493  9543 solver.cpp:243] Iteration 80, loss = 2.96451
20 I0103 13:45:41.247627  9543 solver.cpp:259]     Train net output #0: loss = 2.96451 (* 1 = 2.96451 loss)
21 I0103 13:45:41.247642  9543 solver.cpp:590] Iteration 80, lr = 0.01
22 I0103 13:46:00.941267  9543 solver.cpp:243] Iteration 100, loss = 2.85887
23 I0103 13:46:00.941318  9543 solver.cpp:259]     Train net output #0: loss = 2.85887 (* 1 = 2.85887 loss)
24 I0103 13:46:00.941332  9543 solver.cpp:590] Iteration 100, lr = 0.01
25 I0103 13:46:20.628329  9543 solver.cpp:243] Iteration 120, loss = 2.91318
26 I0103 13:46:20.628463  9543 solver.cpp:259]     Train net output #0: loss = 2.91318 (* 1 = 2.91318 loss)
27 I0103 13:46:20.628476  9543 solver.cpp:590] Iteration 120, lr = 0.01
28  I0103 13:46:40.621937  9543 solver.cpp:243] Iteration 140, loss = 3.06499
29 I0103 13:46:40.621989  9543 solver.cpp:259]     Train net output #0: loss = 3.06499 (* 1 = 3.06499 loss)
30 I0103 13:46:40.622004  9543 solver.cpp:590] Iteration 140, lr = 0.01
31 I0103 13:47:00.557921  9543 solver.cpp:243] Iteration 160, loss = 2.9818
32 I0103 13:47:00.558048  9543 solver.cpp:259]     Train net output #0: loss = 2.9818 (* 1 = 2.9818 loss)
33 I0103 13:47:00.558063  9543 solver.cpp:590] Iteration 160, lr = 0.01

 

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

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

 

 

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

 1 train_net: "models/bvlc_reference_caffenet/train_val.prototxt"
 2 # test_iter: 1000
 3 # test_interval: 1000
 4 base_lr: 0.0001
 5 lr_policy: "step"
 6 gamma: 0.1
 7 stepsize: 100000
 8 display: 20
 9 max_iter: 450000
10 momentum: 0.9
11 weight_decay: 0.0005
12 snapshot: 10000
13 snapshot_prefix: "models/bvlc_reference_caffenet/caffenet_train"
14 solver_mode: GPU

 

base_lr: 0.0001  每次可以改为0.1×base_lr, 这里的 0.0001 是我两次调整之后的数值。然后运行 resume_training.sh 
1 #!/usr/bin/env sh
2
3 ./build/tools/caffe train \
4     --solver=models/bvlc_reference_caffenet/solver.prototxt \
5     --snapshot=models/bvlc_reference_caffenet/caffenet_train_iter_88251.solverstate

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

继续看loss是否降低。。。

 

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

 

时间: 2024-10-12 22:12:19

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

服务器-如何把h5网页中的内容生成xml格式的文件?

问题描述 如何把h5网页中的内容生成xml格式的文件? h5网页中有四个输入框,分别是用户名,旧密码,新密码,确认新密码,和一个提交按钮,现在想通过点击提交按钮,把输入框的内容生成一个xml文件,然后上传到服务器中.这个xml文件怎么生成,谢谢! 解决方案 网页中显示xml,直接显示xml格式的文件网页(html)中直接显示xml原始文件,直接显示xml格式的文件 解决方案二: 自己组合成xml字符串,然后复制给表单的隐藏控件就行了

生成ZIP格式的文件

问题描述 在C#中..NetFramework4.0的环境下如何将指定文件夹(D:\ErrorLog\abc.txt)中的abc.txt文件生成zip格式的文件,用微软现有的库去实现,不能用到ICSharpZip.....,请各位大侠帮帮忙,有代码示例最好了,谢谢 解决方案

mediaplayer-android中MediaPlayer播放M3U8格式本地文件时,网络权限被禁止,仅在小米3,4上有

问题描述 android中MediaPlayer播放M3U8格式本地文件时,网络权限被禁止,仅在小米3,4上有 最近用Vitamio的Mediaplayer开发一款视频播放软件,在小米3和小米4上出现本地视频无法播放的问题:具体为: 当关闭小米3.4的移动网络和wifi之后,使用mediaplayer播放器播放已下载的视频会出现VitamioPlayer: error (1, -5),并且出现网络权限被拒的提示(注:联网权限都已经在manifest中注册)如下图错误提示: 当wifi和移动网络打

用Asp生成UTF-8格式的文件

ASP由于是一种古老的语言,它的一些功能对UTF-8支持非常差. 比如,你想生成一个UTF-8格式的文件,使用常用的 scrīpting.FileSystemObject 对象就不行. scripting.FileSystemObject 对象创建文件的函数,是下面方式: FileSystemObject.CreateTextFile(filename[,overwrite[,unicode]]) 其中的 unicode 属性是这样描述的: 可选项.Boolean 值指明是否以 Unicode

请教!!!openssl生成.cer格式证书文件问题

问题描述 今日任务需要解析ssl证书,看到openssl提供的接口都是需要用.cer格式的文件来进行解析.但是我需要解析的证书是从libpacp抓包工具抓下来的数据包,证书的结构都是网络上的直接抓下来的格式,不知道如何转换成.cer文件的格式.熟悉opensll的高手指点一下,多谢了 解决方案 解决方案二:就是openssl貌似只提供了解码DER编码的数字证书和解码pem编码的数字证书,我想知道如何把抓下来的数据包里的原始格式转换成另外两种.解决方案三:数据包的原始格式是怎么样的呀,这个只有你自

ASP UTF-8页面乱码+GB2312转UTF-8 +生成UTF-8格式的文件(编码)第1/2页_应用技巧

最好的方法: 先说一下基本的东西: <%@ codepage=65001%>UTF-8 <%@ codepage=936%>简体中文 <%@ codepage=950%>繁体中文 <%@ codepage=437 %>美国/加拿大英语 <%@ codepage=932 %>日文 <%@ codepage=949 %>韩文 <%@ codepage=866 %>俄文 codepage指定了IIS按什么编码读取传递过来的串串(

ASP UTF-8页面乱码+GB2312转UTF-8 +生成UTF-8格式的文件(编码)第1/2页

最好的方法: 先说一下基本的东西: <%@ codepage=65001%>UTF-8 <%@ codepage=936%>简体中文 <%@ codepage=950%>繁体中文 <%@ codepage=437 %>美国/加拿大英语 <%@ codepage=932 %>日文 <%@ codepage=949 %>韩文 <%@ codepage=866 %>俄文 codepage指定了IIS按什么编码读取传递过来的串串(

ASP动态网页生成静态Html网页文件技术

动态|静态|网页 网页生成静态Html文件有许多好处,比如生成html网页有利于被搜索引擎收录,不仅被收录的快还收录的全.前台脱离了数据访问,减轻对数据库访问的压力,加快网页打开速度. 所以吟清最近对生成html比较感兴趣,看了不少文章,也有一点点收获. 1,下面这个例子直接利用FSO把html代码写入到文件中然后生成.html格式的文件 <% filename="test.htm"  if request("body")<>""

mht是什么格式的文件?

  mht是什么格式的文件?在网络上,我们偶尔会看到mht文件,那么mht什么样的文件呢?其实,mht又叫web单一文件,通常情况下,把html和它相关的图片之类的东西打包成mht文件.接下来,小编为你详细介绍. mht是一种WEB电子邮件档案,能用浏览器打开的前提是你的机子上必须装有outlook Express !在我们点菜单->文件->另存为...后在选择保存类型时可以看到有这一项,其最大优点是所保存的网页只有一个文件,便于管理.而以(*.htm;*.html)保存的网页,你会看到其实有