简述过程:
1.得到图片数据.
2.利用python程序生成train.txt和test.txt 这两个txt里面每行是图片名+空格+类别(用数字表示类别)
3.用脚本转化为lmdb格式
4.修改模型参数,prototxt文件,训练,得到caffemodel
5.在opencv中运行一个C++程序调用训练好的模型,并输出测试结果(图片 类名)
详细步骤:
https://www.cnblogs.com/david97/p/8961850.html
caffe训练阶段,我是参考的这篇博客,除了刚开始获取train.txt和test.txt时没照着这个博客,其他全部照做
建议参考该博客,下面是我对主要步骤总结:(路径修改成自己的)
1.拿到图片数据,把图片放入train和test文件夹中。
2.利用获取文件名的python脚本,获取图片名到train.txt和test.txt中,根据文件名,利用查找替换功能在文件名后面写上标签,0 1(一定要从0开始,如果有三个类别就用0 1 2),放到create_img_db文件夹里
获取文件名到txt文件的python程序:(路径改成自己的)
import os
def ListFilesToTxt(dir, file, wildcard, recursion):
exts = wildcard.split(" ")
files = os.listdir(dir)
for name in files:
fullname = os.path.join(dir, name)
if (os.path.isdir(fullname) & recursion):
ListFilesToTxt(fullname, file, wildcard, recursion)
else:
for ext in exts:
if (name.endswith(ext)):
file.write(name + "\n")
break
def Test():
dir = "D:/images/total"
outfile = "D:/images/total/imgName.txt"
wildcard = ".txt .exe .dll .lib .bmp"
file = open(outfile, "w")
if not file:
print ("cannot open the file %s for writing" % outfile)
ListFilesToTxt(dir, file, wildcard, 1)
file.close()
Test()
3.修改并运行create_db.sh(D:\software_engineer\caffe-master\create_img_db),转lmdb格式,同时可以转换图片尺寸,并打乱顺序
(我开始用126*82的数据,最后测试的时候opencv报错,解决不了,后来在这里改成32*32就成功了,并且在我这个简单的例子中,缩小图片并没有影响准确率。另外,最后测试的时候图片不用改)
4.计算图像的均值(这一步可以不做,我没做)
5.在caffe-master\examples\testImg中准备好caffe文件(train_val.prototxt, solver.prototxt, deploy.prototxt),并修改里面的参数
6.训练 在 d/software_engineer/caffe-master/Build/x64/Release文件夹里面打开命令行(右键,git bash here),
执行./caffe.exe train --solver=D:/software_engineer/caffe-master/examples/testImg/solver.prototxt
7.测试(三种方法)
1. opencv3.3 DNN模块(很好用),代码见下一篇博客https://blog.csdn.net/sinat_41852207/article/details/88197593
2.(caffe自带测试分类工具)
3.用python程序
4.c++接口 我不会