Ubuntu16.04下caffe CPU版的图片训练和测试
一 数据准备
二、转换为lmdb格式
1、首先,在examples下面创建一个myfile的文件夹,来用存放配置文件和脚本文件。然后编写一个脚本create_filelist.sh,用来生成train.txt和test.txt清单文件
(caffe_src) root@ranxf-TEST:/workdisk/caffe/examples# mkdir myfile
(caffe_src) root@ranxf-TEST:/workdisk/caffe/examples/myfile# vim create_filelist.sh
#!/usr/bin/env sh
DATA=data/re/
MY=examples/myfile echo "Create train.txt..."
rm -rf $MY/train.txt
for i in
do
find $DATA/train -name $i*.jpg | cut -d '/' -f4- | sed "s/$/ $i/">>$MY/train.txt
done
echo “done” echo "Create test.txt..."
rm -rf $MY/test.txt
for i in
do
find $DATA/test -name $i*.jpg | cut -d '/' -f4- | sed "s/$/ $i/">>$MY/test.txt
done
echo "All done"
然后,运行此脚本(注意是在caffe根目录下)
(caffe_src) root@ranxf-TEST:/workdisk/caffe# sh examples/myfile/create_filelist.sh
Create train.txt...
done
Create test.txt...
All done
成功的话,就会在examples/myfile/ 文件夹下生成train.txt和test.txt两个文本文件,里面就是图片的列表清单。
2、接着再编写一个脚本文件,调用convert_imageset命令来转换数据格式。
# sudo vi examples/myfile/create_lmdb.sh
#!/usr/bin/env sh
MY=examples/myfile echo "Create train lmdb.."
rm -rf $MY/img_train_lmdb
build/tools/convert_imageset \
--shuffle \
--resize_height= \
--resize_width= \
/workdisk/caffe/data/re/ \
$MY/train.txt \
$MY/img_train_lmdb
echo "done" echo "Create test lmdb.."
rm -rf $MY/img_test_lmdb
build/tools/convert_imageset \
--shuffle \
--resize_width= \
--resize_height= \
/workdisk/caffe/data/re/ \
$MY/test.txt \
$MY/img_test_lmdb echo "All Done.."
(caffe_src) root@ranxf-TEST:/workdisk/caffe# ./examples/myfile/create_lmdb.sh
Create train lmdb..
I0910 ::20.354158 convert_imageset.cpp:] Shuffling data
I0910 ::20.354992 convert_imageset.cpp:] A total of images.
I0910 ::20.355206 db_lmdb.cpp:] Opened lmdb examples/myfile/img_train_lmdb
I0910 ::21.807344 convert_imageset.cpp:] Processed files.
done
Create test lmdb..
I0910 ::21.852502 convert_imageset.cpp:] Shuffling data
I0910 ::21.852725 convert_imageset.cpp:] A total of images.
I0910 ::21.852886 db_lmdb.cpp:] Opened lmdb examples/myfile/img_test_lmdb
I0910 ::22.201551 convert_imageset.cpp:] Processed files.
All Done..
因为图片大小不一,因此统一转换成256*256大小。运行成功后,会在 examples/myfile下面生成两个文件夹img_train_lmdb和img_test_lmdb,分别用于保存图片转换后的lmdb文件。
(caffe_src) root@ranxf-TEST:/workdisk/caffe/examples/myfile# ls
create_filelist.sh create_lmdb.sh img_test_lmdb img_train_lmdb test.txt train.txt
三、计算均值并保存
图片减去均值再训练,会提高训练速度和精度。因此,一般都会有这个操作。
caffe程序提供了一个计算均值的文件compute_image_mean.cpp,我们直接使用就可以了
(caffe_src) root@ranxf-TEST:/workdisk/caffe# build/tools/compute_image_mean examples/myfile/img_train_lmdb examples/myfile/mean.binaryproto
I0910 15:56:26.287912 7824 db_lmdb.cpp:35] Opened lmdb examples/myfile/img_train_lmdb
I0910 15:56:26.288938 7824 compute_image_mean.cpp:70] Starting iteration
I0910 15:56:26.352404 7824 compute_image_mean.cpp:101] Processed 400 files.
I0910 15:56:26.352833 7824 compute_image_mean.cpp:108] Write to examples/myfile/mean.binaryproto
I0910 15:56:26.354002 7824 compute_image_mean.cpp:114] Number of channels: 3
I0910 15:56:26.354115 7824 compute_image_mean.cpp:119] mean_value channel [0]: 100.254
I0910 15:56:26.365298 7824 compute_image_mean.cpp:119] mean_value channel [1]: 114.454
I0910 15:56:26.365384 7824 compute_image_mean.cpp:119] mean_value channel [2]: 121.707
(caffe_src) root@ranxf-TEST:/workdisk/caffe#
compute_image_mean带两个参数,第一个参数是lmdb训练数据位置,第二个参数设定均值文件的名字及保存路径。
运行成功后,会在 examples/myfile/ 下面生成一个mean.binaryproto的均值文件。
(caffe_src) root@ranxf-TEST:/workdisk/caffe/examples/myfile# ls
create_filelist.sh create_lmdb.sh img_test_lmdb img_train_lmdb mean.binaryproto test.txt train.txt
(caffe_src) root@ranxf-TEST:/workdisk/caffe/examples/myfile#
四、创建模型并编写配置文件
模型就用程序自带的caffenet模型,位置在 models/bvlc_reference_caffenet/文件夹下, 将需要的两个配置文件,复制到myfile文件夹内
(caffe_src) root@ranxf-TEST:/workdisk/caffe# cp models/bvlc_reference_caffenet/solver.prototxt examples/myfile/
(caffe_src) root@ranxf-TEST:/workdisk/caffe#
(caffe_src) root@ranxf-TEST:/workdisk/caffe# cp models/bvlc_reference_caffenet/train_val.prototxt examples/myfile/
修改其中的solver.prototxt
net: "examples/myfile/train_val.prototxt"
test_iter: 2
test_interval: 50
base_lr: 0.01
lr_policy: "step"
gamma: 0.1
stepsize: 100
display: 20
max_iter: 500
momentum: 0.9
weight_decay: 0.0005
solver_mode: CPU
原始配置文件内容为:
net: "models/bvlc_reference_caffenet/train_val.prototxt"
test_iter: 1000
test_interval: 1000
base_lr: 0.01
lr_policy: "step"
gamma: 0.1
stepsize: 100000
display: 20
max_iter: 450000
momentum: 0.9
weight_decay: 0.0005
snapshot: 10000
snapshot_prefix: "models/bvlc_reference_caffenet/caffenet_train"
solver_mode: GPU
100个测试数据,batch_size为50,因此test_iter设置为2,就能全cover了。在训练过程中,调整学习率,逐步变小。
修改train_val.protxt,只需要修改两个阶段的data层就可以了,其它可以不用管。就是修改两个data layer的mean_file和source这两个地方,其它都没有变化 。
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: 256
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_train_lmdb"
batch_size: 50
backend: LMDB
}
}
layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
param {
……………………
如果前面都没有问题,数据准备好了,配置文件也配置好了,这一步就比较简单了。
运行时间和最后的精确度,会根据机器配置,参数设置的不同而不同。我的是CPU运行500次10个小时20分钟,准确性69%,吐槽机器配置。
I0911 02:42:50.312186 9113 solver.cpp:464] Snapshotting to binary proto file examples/myfile/solver_iter_500.caffemodel
I0911 02:42:52.477775 9113 sgd_solver.cpp:284] Snapshotting solver state to binary proto file examples/myfile/solver_iter_500.solverstate
I0911 02:42:53.719158 9116 data_layer.cpp:73] Restarting data prefetching from start.
I0911 02:43:23.561343 9113 solver.cpp:327] Iteration 500, loss = 0.689866
I0911 02:43:23.648788 9113 solver.cpp:347] Iteration 500, Testing net (#0)
I0911 02:43:23.693032 9119 data_layer.cpp:73] Restarting data prefetching from start.
I0911 02:43:35.412401 9113 solver.cpp:414] Test net output #0: accuracy = 0.69
I0911 02:43:35.412444 9113 solver.cpp:414] Test net output #1: loss = 0.66485 (* 1 = 0.66485 loss)
I0911 02:43:35.412451 9113 solver.cpp:332] Optimization Done.
I0911 02:43:35.425511 9113 caffe.cpp:250] Optimization Done.
Ubuntu16.04下caffe CPU版的图片训练和测试的更多相关文章
- Ubuntu16.04下caffe CPU版的详细安装步骤
一.caffe简介 Caffe,是一个兼具表达性.速度和思维模块化的深度学习框架. 由伯克利人工智能研究小组和伯克利视觉和学习中心开发. 虽然其内核是用C++编写的,但Caffe有Python和Mat ...
- ubuntu16.04下caffe以cpu运行faster rcnn demo
参考https://haoyu.love/blog404.html 获取并修改代码 首先,我们需要获取源代码: git clone --recursive https://github.com/rbg ...
- Linux入门(13)——Ubuntu16.04下将图片和pdf互转
Ubuntu16.04下将图片和pdf互转 将图片转为PDF: convert 图片 PDF convert pic.jpg pic.pdf 将PDF转为图片: convert PDF 图片 conv ...
- Ubuntu16.04下Neo4j图数据库官网安装部署步骤(图文详解)(博主推荐)
不多说,直接上干货! 说在前面的话 首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu LTS \n \l r ...
- Ubuntu16.04下Mongodb(离线安装方式|非apt-get)安装部署步骤(图文详解)(博主推荐)
不多说,直接上干货! 说在前面的话 首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu LTS \n \l r ...
- ubuntu16.04下笔记本自带摄像头编译运行PTAM
ubuntu16.04下笔记本自带摄像头编译运行PTAM 转载请注明链接:https://i.cnblogs.com/EditPosts.aspx?postid=9014147 个人邮箱:feifan ...
- docker学习笔记(一)—— ubuntu16.04下安装docker
docker学习笔记(一)—— ubuntu16.04下安装docker 原创 2018年03月01日 14:53:00 标签: docker / ubuntu 1682 本文开发环境为Ubuntu ...
- ubuntu16.04下sublime text3安装和配置
ubuntu16.04下sublime text3安装和配置 2018年04月20日 10:31:08 zhengqijun_ 阅读数:1482 1.安装方法 1)使用ppa安装 sudo add-a ...
- ubuntu16.04下Hyperledger之搭建Fabric环境简单操作(五步启动e2e_cli)
如果你已经安装好go等工具.git及checkout相关代及下载相关镜像,您只需下面5步就能up e2e_cli~/go/src/github.com/hyperledger/fabric$ sudo ...
随机推荐
- ad2014注册出现:注册 - 激活错误 (0015.111)
将安装包内的(adlmact.dll & adlmact_libFNP.dll)这两个文件取出并覆盖即可.安装包内文件具体位置:在安装包内搜索“adlmact”出现的两个文件“adlmact_ ...
- flutter 网络请求以及数据处理
网络请求使用FutureBuilder来处理 import 'dart:convert'; Widget build(BuildContext context) { return FutureBuil ...
- Libvirt Live Migration 与 Pre-Copy 实现原理
目录 文章目录 目录 Libvirt 的 Live Migration 网络数据传输层 控制层 通过 libvirt 库实现虚拟机迁移的示例 KVM 的预拷贝(Pre-Copy)Live Migrat ...
- Maximum Likelihood 最大似然估计
Maximum Likelihood 最大似然估计 这个算法解决的问题是,当我们知道一组变量的密度分布函数与从总体采样的个体的时候,需要估计函数中的某些变量. 假设概率密度函数如下: 一般来说,为了计 ...
- $q服务——angular
$q是做为angular的一个服务而存在的,只是对promise异步编程模式的一个简化实现版,源码中剔除注释实现代码也就二百多行,下面开始介绍$q的API. 一.defer对象(延迟对象)可以通$q. ...
- 深度学习入门者的Python快速教程 - 基础篇
5.1 Python简介 本章将介绍Python的最基本语法,以及一些和深度学习还有计算机视觉最相关的基本使用. 5.1.1 Python简史 Python是一门解释型的高级编程语言,特点是简单明 ...
- bat默认以管理员身份运行
在Bat文件内容前插入以下一段代码: @echo off :: BatchGotAdmin :------------------------------------- REM --> Chec ...
- 第五周总结&实验·
本周总结 1.final声明的变量即成为常量,常量不可以修改. 2.子类能够 ...
- 详解Vue 如何监听Array的变化
详解Vue 如何监听Array的变化:https://www.jb51.net/article/162584.htm
- 关于eclipse设置JRebel
版本:eclipse ee Version: 2018-09 (4.9.0) jrebel:最新2019-2 1.在eclipse->help->eclipse Marketplace 2 ...