兵马逐浪去,将象入海流。炮声震心动,惊起卧龙游。
我的博客园主页 --------- 我的知乎主页 --------- 我的github主页 --------- 我的csdn主页 --------- 我的新浪微博

caffe windows训练测试自己的图片

https://www.jianshu.com/p/607f1e51e3ab

geaus
2016.05.17 14:31:53字数 540阅读 4,272

前言:本文参考博客denny402
这里简要的介绍了下如何使用自己准备的图片数据来训练和测试网络。主要的几个步骤有,图片数据转换为lmdb格式,计算训练数据的均值,sovler文件和网络的简单修改,最后caffe训练。

数据准备

这里我照搬denny402准备的数据。其中共有5个类,每个类100张图片,每个类中用于测试的是20张图片(编号0-19),用于训练的是80张图片(编号20-99)。
首先我在caffe的根目录下的data目录新建文件夹my,将test和train两个目录拷贝到其中。
然后为train和test中的数据建立了两个txt的列表,分别是文件路径名和对应的label号,需要注意的是label号是从0开始,至4。

testlist.png


之后是使用convert_imageset.exe将图片转换为lmdb形式。如果你并没有生成这个exe,可以打开caffe的convert_imageset这个工程,右击生成,exe会保存在.\bin文件夹中。
然后调用下面的命令行生成两个数据集的lmdb。

 

//转换训练数据
.\bin\convert_imageset.exe
--shuffle\ //表示打乱数据的顺序
--resize_height=256\
--resize_width=256 \
.\data\my\ //存放train和test文件夹的路径
.\data\trainlist.txt //根据trainlist.txt读取图片
.\data\img_train_lmdb
//转换测试数据
.\bin\convert_imageset.exe
--shuffle\ //表示打乱数据的顺序
--resize_height=256\
--resize_width=256 \
.\data\my\
.\data\testlist.txt
.\data\img_test_lmdb

这样在data文件夹中会生成img_train_lmdb和img_test_lmdb两个文件夹分别保存了lmdb格式的数据。

计算图片均值

计算图片均值使用的是前一步生成的训练数据的lmdb求的。
同样如果需要使用的compute_image_mean.exe并没有生成,可以打开该工程,右击生成即可。生成后,使用下面的命令行得到均值文件。

.\bin\compute_image_mean.exe .\data\img_train_lmdb .\data\mean.binaryproto

这样就得到了训练数据的均值文件mean.binaryproto。

sovle.prototxt配置文件和train_val.prototxt模型修改

这里拷贝了models\bvlc_reference_caffenet\solver.prototxt和train_val.prototxt,并在其中简单修改。

//solver.prototxt
net: "data/train_val.prototxt"
test_iter: 2
test_interval: 50
base_lr: 0.001
lr_policy: "step"
gamma: 0.1
stepsize: 100
display: 20
max_iter: 500
momentum: 0.9
weight_decay: 0.005
solver_mode: GPU
//train_val.prototxt
name: "CaffeNet"
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
mirror: true
crop_size: 227
mean_file: "data/mean.binaryproto"
}
data_param {
source: "data/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: "data/mean.binaryproto"
}
data_param {
source: "data/img_test_lmdb"
batch_size: 50
backend: LMDB
}
}

主要的修改就是test iter和test batchsize,以及数据源的修改。前者是因为我们的数据量发生了改变。另外,在FC这个layer处也要修改下,将1000改为5,因为我们这里只有5个类别。

训练和测试

以上最终完成了程序caffe.exe运行的准备,最后在命令行中输入

.\bin\caffe.exe train -solver=.\data\solver.prototxt

等待程序运行结束后可以查看结果。我这里的accuracy大致为93%。

posted @   leoking01  阅读(60)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
#back-to-top { background-color: #00CD00; bottom: 0; box-shadow: 0 0 6px #00CD00; color: #444444; padding: 10px 10px; position: fixed; right: 50px; cursor: pointer; }
点击右上角即可分享
微信分享提示