接上一篇博文,python3.5+Tensorflow+Faster R-CNN在ubuntu下训练数据,进行表面缺陷检测(一)
0.下载faster-rcnn源码:https://github.com/endernewton/tf-faster-rcnn ,解压
1.下载VOCdevkit文件,解压,改名为VOCdevkit2007。因为用我们自己制作的数据集,里面没用的文件我都删除了。
下载链接 提取码:wopy
复制到tf-faster-rcnn/文件夹下。
2.将上一篇博文制作好的数据集,放在文件夹VOCdevkit2007,然后文件夹结构如下图。(其实也可以通过创建链接的方式)
3.下载权值文件,百度云vgg_16 提取码:upw0, 解压。
新建一个.py文件(我在tf-faster-rcnn文件夹下)-->执行此py文件。会在VOCdevkit2007/VOC2007/ImageSets/Main下生成4个txt文件。注意文件路径,根据自己情况修改。
#create_4_txt.py
import os
import random
trainval_percent = 0.7
train_percent = 0.7
xmlfilepath = 'data/VOCdevkit2007/VOC2007/Annotations' #自行修改
txtsavepath = 'data/VOCdevkit2007/VOC2007/ImageSets/Main' #自行修改
total_xml = os.listdir(xmlfilepath)
num = len(total_xml)
list = range(num)
tv = int(num*trainval_percent)
tr = int(tv*train_percent)
trainval = random.sample(list,tv)
train = random.sample(trainval,tr)
ftrainval = open(txtsavepath+'/trainval.txt', 'w')
ftest = open(txtsavepath+'/test.txt', 'w')
ftrain = open(txtsavepath+'/train.txt', 'w')
fval = open(txtsavepath+'/val.txt', 'w')
for i in list:
name = total_xml[i][:-4]+'\n'
if i in trainval:
ftrainval.write(name)
if i in train:
ftrain.write(name)
else:
fval.write(name)
else:
ftest.write(name)
ftrainval.close()
ftrain.close()
fval.close()
ftest .close()
print('Well Done!!!')
其实生成的就是一些图片文件名,分别用于训练和测试。
0.进入tf-faster-rcnn\lib文件夹下,make一下
cd ~/tf-faster-rcnn/lib #文件路径,执行修改
make
1.tf-faster-rcnn\data下创建文件夹imagenet_weights,将解压的权值文件vgg16.ckpt(vgg_16.ckpt改名为vgg16.ckpt)拷贝进imagenet_weights。(当然,你也可以修改tf-faster-rcnn\experiments\scripts\train_faster_rcnn.sh中,--weight参数)
2.修改tf-faster-rcnn\experiments\scripts\train_faster_rcnn.sh
数据集是用的pascal_voc,所以我们修改pascal_voc条件下的参数,ITERS为迭代次数,根据情况自定义,
相应的,test_faster_rcnn.sh文件中,ITERS也要进行修改,不然后面测试会报错。
3.修改tf-faster-rcnn\lib\datasets\pascal_voc.py
根据自己的检测分类情况去改,我检测5类,分别为凹坑、划痕、。。。(英语不太好表达,直接用拼音,),注意
‘__background__’要保留。
4.修改 tf-faster-rcnn/lib/datasets/voc_eval.py的第121行,
with open(cachefile,'w') as f
改成:
with open(cachefile,'wb') as f
第105行的
cachefile = os.path.join(cachedir, '%s_annots.pkl' % imagesetfile)
改成:
cachefile = os.path.join(cachedir, '%s_annots.pkl' % imagesetfile.split("/")[-1].split(".")[0])
4.删除缓存
在开始训练之前,需要把cache删除掉,分别在tf-faster-rcnn/data/cache和tf-faster-rcnn/data/VOCdevkit2007/annotations_cache路径下,(首次训练没有,可不管)。
如果是重新开始训练,删除tf-faster-rcnn/output/vgg16/voc_2007_trainval/default路径下所有文件
如果是接着之前的结果继续训练,就不用删除。
cd ~/tf-faster-rcnn #路径执行修改
./experiments/scripts/train_faster_rcnn.sh 0 pascal_voc vgg16
训练是一个漫长的过程。。。
训练结束后,会自动调用train_faster_rcnn.sh进行测试。日志文件保存在experiments/logs文件夹下,可随时查看记录。
我只简单迭代了500次,试试效果。
训练阶段完毕!
下一篇,demo测试(其实很简单),待续。