Ubuntu下如何训练自己的图像数据集
第一步:准备数据
首先需要准备两个文件夹,一个是train,一个是val.收集一定数量的图片,越多越好,要求同样的分辨率和扩展名.
train中,将图片分类存放至文件夹中,例如,000文件夹中全是赵XX ,001文件夹中全是钱XX,如下
val中,可以不按照文件夹存放,也可以如train一样按照文件夹存放,同样存放一定数量的图片,例如赵XX和钱XX的图片
接下来就是准备对应的索引文件train.txt和val.txt,里面包括:图片相对于txt文件的相对位置和编号,train.txt和val.txt格式一致,如下
其中,图片的对应关系一定不能错,train.txt中赵XX 是2,则val.txt中赵XX 的图片对应也必须是2.
第二步,图片转换
准备好图片后,就需要将图片转换成lmdb格式,需要修改examples/imagenet中的create_imagenet.sh.该文件如图所示
这一部分类似于C语言的define,可使用绝对路径来填写地址,也可以写相对路径
这一段是指在转换图片的过程中是否需要调整图片的尺寸,建议RESIZE为false,准备图片时就应该自行调整好所有图片的尺寸.
这一段是转换格式的命令,对应的格式为
GOLG_logtostderr 是否输出日志,
选择主程序 $TOOLS/convert_imageset
调整图片高度 --resize_height
调整图片宽度 --resize_weight
模式 shuffle
图片目录 $TRAIN_DATA_ROOT
索引文件 $TRAIN_DATA_ROOT/train.txt
转换后输出位置 $EXAMPLE/ilsvrc12_train_lmdb
怎么修改这一段要根据自己的文件所处的位置修改
然后运行 此时可以看到 它根据txt文件寻找到了一共2000张图片,所以如果此处报错 肯定是txt文件中地址写错了 如图
第三步,计算均值
需要修改examples/imagenet中的make_imagenet_mean.sh. 如图
前三行同上 类似于define 5.6行对应关系如下
选择主程序 $TOOLS/compute_image_mean
图片数据库位置 $EXAMPLE/ilsvrc12_train_lmdb
计算好的均值后输出位置 $EXAMPLE/imagenet_mean.binaryproto
运行
第四步,开始训练
需要修改examples/imagenet中的train_caffenet.sh
选择主程序 ./build/tools/caffe
目的 train
配置文件所在位置 --solver=………./solver.prototxt
该配置文件默认在./data/bvlc..reference…里面,建议复制solver.prototxt和train_val.prototxt到imagenet里面
接下来修改solver.prototxt文件
net: 网层配置文件位置
test_iter: 测试的批次
test_interval: 每多少次迭代测试一次
base_lr: 是基础学习率
lr_policy: 学习率变化
gamma: 学习率变化的比率
stepsize: 每多少次迭代减少学习率
display: 每多少次打印一次结果
max_iter: 最大迭代次数,
momentum: 学习的参数,不用变
weight_decay: 学习的参数,不用变
snapshot: 每多少次保存一次,方便中断后继续训练
snapshot_prefix: 保存位置
solver_mode: 使用什么设备训练,GPU或CPU
建议先保持默认参数 以后更深入了再自己修改.
修改train_val.prototxt
只修改mean_file和source的值 改成你自己的对应文件所在即可.
开始训练
训练到一定次数时,会保存.caffemodel文件,便是可以使用的训练好的模型文件.