caffe命令行的使用实例
来源:互联网 发布:ubuntu配置samba服务器 编辑:程序博客网 时间:2024/06/14 21:59
这次转战ubuntu虚拟机,用cpu only的模式搞事情。
首先做一下图片的文件格式转换,图像文件转对应db的方式:
convert_imageset [FLAGS] ROOTFOLDER/ LISTFILE DB_NAME
需要带四个参数:
FLAGS: 图片参数组,后面详细介绍
-gray: 是否以灰度图的方式打开图片。程序调用opencv库中的imread()函数来打开图片,默认为false
-shuffle: 是否随机打乱图片顺序。默认为false
-backend:需要转换成的db文件格式,可选为leveldb或lmdb,默认为lmdb
-resize_width/resize_height: 改变图片的大小。在运行中,要求所有图片的尺寸一致,因此需要改变图片大小。 程序调用opencv库的resize()函数来对图片放大缩小,默认为0,不改变
-check_size: 检查所有的数据是否有相同的尺寸。默认为false,不检查
-encoded: 是否将原图片编码放入最终的数据中,默认为false
-encode_type: 与前一个参数对应,将图片编码为哪一个格式:‘png’,’jpg’……
ROOTFOLDER/: 图片存放的绝对路径,从linux系统根目录开始
LISTFILE: 图片文件列表清单,一般为一个txt文件,一行一张图片
DB_NAME: 最终生成的db文件存放目录
然后再caffe根目录下的example的image文件夹里面看到几个照片。在caffe个目录下新建一个.sh文件
# /usr/bin/env shDATA=examples/imagesecho "Create train.txt..."rm -rf $DATA/train.txtfind $DATA -name *cat.jpg | cut -d '/' -f3 | sed "s/$/ 1/">>$DATA/train.txtfind $DATA -name *bike.jpg | cut -d '/' -f3 | sed "s/$/ 2/">>$DATA/tmp.txtcat $DATA/tmp.txt>>$DATA/train.txtrm -rf $DATA/tmp.txtecho "Done.."
执行一下,在images文件夹下会生成一个txt文件
cat.jpg 1
fish-bike.jpg 2
大概就是用来分类的。sh的编写方式以后再看。
一般文件比较少就手动写也没问题。
所以这个时候使用convert命令的时候就是直接写个shell好了
#!/usr/bin/en shDATA=examples/imagesrm -rf $DATA/img_train_lmdbbuild/tools/convert_imageset --shuffle \--resize_height=256 --resize_width=256 \/home/xxx/caffe/examples/images/ $DATA/train.txt $DATA/img_train_lmdb
其中/home/xxx/caffe/examples/images/
要写成图像位置的绝对路径,这个可以从文件的属性中找到
结果在目录下出现这两个文件就可以了
测试自己的数据
测试自己的数据首先必须要转换文件格式。
这里的先行条件是现在caff/examples下建立myfile文件夹。里面放上这里下载的图像库
在caffe根目录下编辑shell createfile.sh
#!/usr/bin/env shDATA=examples/myfile/reMY=examples/myfileecho "Create train.txt..."rm -rf $MY/train.txtfor i in 3 4 5 6 7 dofind $DATA/train -name $i*.jpg | cut -d '/' -f4-5 | sed "s/$/ $i/">>$MY/train.txtdoneecho "Create test.txt..."rm -rf $MY/test.txtfor i in 3 4 5 6 7dofind $DATA/test -name $i*.jpg | cut -d '/' -f4-5 | sed "s/$/ $i/">>$MY/test.txtdoneecho "All done"
成功的话会出现两个txt文件为文件和label的清单。
在写shell用于转化成lmdb文件
#!/usr/bin/env shMY=examples/myfileecho "Create train lmdb.."rm -rf $MY/img_train_lmdbbuild/tools/convert_imageset \--shuffle \--resize_height=256 \--resize_width=256 \/home/lwm/lwm/caffe-master/examples/myfile/re/ \$MY/train.txt \$MY/img_train_lmdbecho "Create test lmdb.."rm -rf $MY/img_test_lmdbbuild/tools/convert_imageset \--shuffle \--resize_width=256 \--resize_height=256 \/home/lwm/lwm/caffe-master/examples/myfile/re/ \$MY/test.txt \$MY/img_test_lmdbecho "All Done.."
这里注意更改文件夹路径。
因为图片大小不一,因此我统一转换成256*256大小。运行成功后,会在 examples/myfile下面生成两个文件夹img_train_lmdb和img_test_lmdb,分别用于保存图片转换后的lmdb文件。
然后就是计算均值,这样可以让图像减去均值在计算,可以提高训练的速度和精度。
直接运行
sudo build/tools/compute_image_mean examples/myfile/img_train_lmdb examples/myfile/mean.binaryproto
compute_image_mean带两个参数,第一个参数是lmdb训练数据位置,第二个参数设定均值文件的名字及保存路径。
运行成功后,会在 examples/myfile/ 下面生成一个mean.binaryproto的均值文件。
创建模型和配置文件:
这里用的是自带的caffenet,位置在 models/bvlc_reference_caffenet/文件夹下, 将需要的两个配置文件,复制到myfile文件夹内。
修改其中的solver文件,这里不是绝对路径
net: "examples/myfile/train_val.prototxt"test_iter: 2test_interval: 50base_lr: 0.001lr_policy: "step"gamma: 0.1stepsize: 100display: 20max_iter: 500momentum: 0.9weight_decay: 0.0005solver_mode: cpu
100个测试数据,batch_size为50,因此test_iter设置为2,就能全cover了。在训练过程中,调整学习率,逐步变小。
修改train_val.protxt,只需要修改两个阶段的data层就可以了,其它可以不用管。
name: "CaffeNet"layer { name: "data" type: "Data" top: "data" top: "label" include { phase: TRAIN } transform_param { mirror: true crop_size: 227 mean_file: "examples/myfile/mean.binaryproto" }# mean pixel / channel-wise mean instead of mean image# transform_param {# crop_size: 227# mean_value: 104# mean_value: 117# mean_value: 123# mirror: true# } data_param { source: "examples/myfile/img_train_lmdb" batch_size: 50 backend: LMDB }}layer { name: "data" type: "Data" top: "data" top: "label" include { phase: TEST } transform_param { mirror: false crop_size: 227 mean_file: "examples/myfile/mean.binaryproto" }# mean pixel / channel-wise mean instead of mean image# transform_param {# crop_size: 227# mean_value: 104# mean_value: 117# mean_value: 123# mirror: false# } data_param { source: "examples/myfile/img_test_lmdb" batch_size: 50 backend: LMDB }}
最后就是紧张刺激的训练和测试
sudo build/tools/caffe train -solver examples/myfile/solver.prototxt
由于用的cpu测试的,所以训练速度特别慢
搞一晚上万一跑完了呢~
出现Restarting data prefetching from start错误,听说是batch_size设置太大了,重新在设置batch_size为25。就好了。
最终结果百分之96,花的时间大概是四把英雄联盟的时间。
- caffe命令行的使用实例
- 【caffe-Windows】cifar实例编译之model的使用
- 【caffe-Windows】mnist实例编译之model的使用-classification
- 【caffe-Windows】mnist实例编译之model的使用-matlab
- 3【caffe-Windows】cifar实例编译之model的使用
- 【caffe-Windows】mnist实例编译之model的使用-classification
- 【caffe-Windows】cifar实例编译之model的使用
- 【caffe-Windows】cifar实例编译之model的使用
- 【caffe-Windows】cifar实例编译之model的使用
- 【caffe-Windows_3】cifar实例编译之model的使用
- Microsoft caffe(caffe-windows) cifar实例编译之model的使用
- caffe中关闭命令行的log输出
- caffe 的命令行训练与测试
- 【Caffe】caffe命令行及相关工具使用方法 《很认真的讲讲Caffe》
- 使用Caffe的问题
- caffe模型的使用
- caffe的具体使用
- Caffe的使用
- 64G的EXFAT格式的U盘如何格式化为FAT32
- 实训3/6 Python 字符串、列表
- Linux查看CPU和内存使用情况
- 自己装系统原来这么简单,你还老跑维修店?
- Android 命名规范整理
- caffe命令行的使用实例
- AppsFlyer SDK 接入
- CF#807 B. T-Shirt Hunt(水题)
- 关于数论乘法逆元及相关知识点
- 收集downloading特效
- 内存中小数的存储形式
- SQL学习
- 码农技术炒股之路——配置管理器、日志管理器
- java实现输入一个链表,反转链表后,输出链表的所有元素。