Faster_Rcnn在windows下运行踩坑总结
Faster_Rcnn在windows下运行踩坑总结
20190524 今天又是元气满满的一天!
1、代码下载
2、编译
3、下载数据集
4、下载pre-train Model
5、运行train
6、运行demo文件
7、准备自己的数据集
8、修改源码
9、测试自己的数据集(未完待更)
10、推荐
0、前言
不管怎么说,先把faster_Rcnn学了吧!后续的会加入一些具体代码的总结。还有一些比较好的点。总之,不管有没有用,先学了再说吧!
1、代码下载
只有一句话,开源是一种情怀。
下载地址:https://github.com/dBeker/Faster-RCNN-TensorFlow-Python3.5
在这里下载的是windows,tensorflow框架下的faster-rcnn代码,当然在github里还有caffe版本,还有大多数是linux下的。linux一定要好好学一下!!!
我的版本python版本3.6,tensorflow-gpu。
下载之后,先不要着急用pycharm打开运行。这些代码时在python3.5上编译好的,所以我们在python3.6版本运行的时候需要重新编译!!
2、编译
1、将下载好的源码文件夹放在自己的目录下。然后启动一个cmd。
D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\data\coco\PythonAPI 下划线就是自己将源码放在位置,将这里改成自己的目录进入到 .\data\coco\PythonAPI
在.data\coco\PythonAPI下运行 python setup.py build_ext --inplace
特别注意:1必须确定自己进入的目录。D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\data\coco\PythonAPI
2运行 python setup.py build_ext --inplace
2、继续在这个目录下运行 python setup.py build_ext install
3、然后切换到另外一个目录下。
D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\lib\utils
然后在这个目录下运行 python setup.py build_ext --inplace
这个时候完成了编译。就可以关掉所有的东西。开启下一步。
3、下载数据集
1、Download the training, validation, test data and VOCdevkit
http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar
直接将这三个网址复制到浏览器中。
2、将下载好的压缩吧解压之后放在指定文件夹:D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\data
这样基本就算是完成了。。
3、如果好奇会打开D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\data\VOCdevkit2007\VOC2007
在这个文件夹下存放着这几个文件夹。可以用excel打开Annotations里的xml文件,里面记录着图片的标注信息。JPEGImages文件夹下存放着图像样本集。
4、下载pre-train Model
预训练模型下载地址:
https://github.com/tensorflow/models/tree/master/research/slim#pre-trained-models
这里有很多,我选用vgg-16
将下载好的模型放在指定文件夹下D:\goodgoodstudy\FasterRCNNTensorFlowPython3.5master\data\imagenet_weights\vgg16.ckpt
特别注意:下载好的模型名称是vgg_16.ckpt,实际程序里加载使用的是vgg16所以需要去掉下划线修改名称。
不然会报错:TypeError: argument of type 'NoneType' is not iterable。
5、运行Train程序
打开pycharm,找到自己的项目,运行train。
整个train过程会迭代4000次,速度还是挺慢的,GTX1070,每10步0.5s,共计大概需要30min。这个没办法,没有好的GPU还玩个p。贫穷限制了我的自由!
总结:老老实实地按照github上的教程一步一步来,不要误操作。不然全都是坑。
运行完成以后会生成checkpoint文件,存放在D:\goodgoodstudy\FasterRCNNTensorFlowPython3.5master\default\voc_2007_trainval\default
在不改变存放路径的情况下会存在这个文件夹中。
6、运行demo程序
在运行demo程序的时候,会报错,原因是因为我们加载的模型的路径没有修改,所以会因为找不到模型报错。
有3处需要修改:
(1)默认加载的是res101,而我要用vgg16,数据集也要修改!
(2)(2)原来这里默认的是70000,我用GTX1070运行40000次,将近40min。所以如果没有好的显卡,那就没办法了。70000次时间太久了!
(3)这里的模型路径也要修改。确保是D:\goodgoodstudy\FasterRCNNTensorFlowPython3.5master\default\voc_2007_trainval\default不然会一直报错,找不到模型。
7、准备自己的数据集
在开始训练自己的数据集之前,必须确保demo和train程序已经跑通!
首先,准备自己的数据集。首先需要进行重命名,按照000001,0000002......下去,
rename程序放在这里,后续更新(批量重命名)
1、通过标注软件生成xml文件放在Annotations文件夹下,注意:注意标注的时候一定不要用大写,不要有空格,建议全部用小写字母和数字
D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\data\VOCdevkit2007\VOC2007\Annotations
2、讲自己的图片数据集放在
D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\data\VOCdevkit2007\VOC2007\JPEGImages, 注意:这里是.jpg格式图片,如果是其他格式需要在程序中修改
3、在Imagesets下创建一个Main文件夹,这里存放一个txt文件,txt文件里存放的是图片的名字,每个一行。
根据JPEGImages的图像集生成txt程序
images_to_txt程序,后续更新
小结:
数据集存放的位置:..\data\VOCdevkit2007\VOC2007\下
Annotations .xml文件
ImageSets\Main (trainval、train、val、test).txt文件
JPEGImages .jpg文件
那么,接下来就是正式开始训练。
训练前,请务必删除Faster-RCNN-TensorFlow-Python3.5-master\default\voc_2007_trainval\default\里之前的模型
以及Faster-RCNN-TensorFlow-Python3.5-master\data\cache里的文件,不然测试的时候会报错!!特别是第二个文件!!!
因为这些文件可能是之前为了跑通程序留下来的,现在我们更新了数据集,所以,这里理所当然需要删除之后进行操作。
8、源码修改
1、Faster-RCNN-TensorFlow-Python3.5-master\lib\datasets\pascal_voc.py文件中class pascal_voc(imdb):类中修改类别
self._classes = ('__background__', # always index 0
'aeroplane', 'bicycle', 'bird', 'boat',
'bottle', 'bus', 'car', 'cat', 'chair',
'cow', 'diningtable', 'dog', 'horse',
'motorbike', 'person', 'pottedplant',
'sheep', 'sofa', 'train', 'tvmonitor') #在这里__background__是默认的背景,不需要修改,只需要修改后面的类别,改成自己的类别
2、训练的参数都在lib\config文件夹中,根据自己的需要进行修改和调试。也可以先按照默认的尝试一下~
第一次训练的时候我对config.py里面的数据也进行了修改,小试牛刀的时候我把batch_size改成64,,max_iters改成1000,snapshot_iterations改成500,每500次输出一次模型,后来第一次训练成功之后,再慢慢把数据改大。
后来我把batch_size改成256,,max_iters改成40000,snapshot_iterations改成5000。
9、测试自己的数据集
首先,将自己需要测试的数据集放在demo的文件夹中,D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\data\demo中
需要修该的地方:
1、demo.py第一处
# 分类类型,需要的分类类别 CLASSES = ('__background__', 'coal', 'gangue', 'unknown', 'undetermined', 'else', 'w') # 模型选择vgg16 和 resnet101,这里是自己训练好的模型 NETS = {'vgg16': ('vgg16_faster_rcnn_iter_35000.ckpt',), 'res101': ('res101_faster_rcnn_iter_110000.ckpt',)} # 数据集 DATASETS = {'pascal_voc': ('voc_2007_trainval',)}
2、demo.py第二处
def parse_args(): """Parse input arguments.""" parser = argparse.ArgumentParser(description='Tensorflow Faster R-CNN demo') # parser.add_argument('--net', dest='demo_net', help='Network to use [vgg16 res101]', # choices=NETS.keys(), default='res101') # parser.add_argument('--dataset', dest='dataset', help='Trained dataset [pascal_voc pascal_voc_0712]', # choices=DATASETS.keys(), default='pascal_voc_0712') # 在这里使用vgg16 parser.add_argument('--net', dest='demo_net', help='Network to use [vgg16 res101]', choices=NETS.keys(), default='vgg16') parser.add_argument('--dataset', dest='dataset', help='Trained dataset [pascal_voc pascal_voc_0712]', choices=DATASETS.keys(), default='pascal_voc') args = parser.parse_args() return args #在这个函数中,默认使用的vgg16,如果用别的网络需要在第一部中的nets中加入,另外需要将parse.add_argument()中最后的default进行修改
3、demo.py第三处
# load network if demonet == 'vgg16': net = vgg16(batch_size=1) # elif demonet == 'res101': # net = resnetv1(batch_size=1, num_layers=101) else: raise NotImplementedError # 这里注意修改数字7,有几个类别就是几 net.create_architecture(sess, "TEST", 7, tag='default', anchor_scales=[8, 16, 32]) #首先,第一步如果使用resnet,源码提供了50,101,152三种残差网络,如果使用需要将注释去掉,此外还可以选择num_layers. #另外,还需要需改net.create_architecture(sess, "TEST",后面这个数就是你训练的时候的选择了几个类别,这个地方就是几,包括背景算在内。
4、demo.py第四处
im_names = ['001954.jpg', '002109.jpg', '002000.jpg', '001905.jpg', '002342.jpg'] #这里的im_names修改为demo文件夹下自己的测试图片的名字
5、那这里就存在一个问题,如何批量测试数据集呢?
6、此外,还会发现,这个demo程序只是将同一类的图像标在一张图上,那么如何实现将所有类标在一张图上。
7、标在一张图上,我想让不同类别显示不同颜色进行标记呢?
8、如果训练程序在服务器或者另外一台电脑上操作,直接将checkpoint文件粘贴过来会出现问题?怎么办?
567这几个问题后续慢慢更新,最近需要总结的东西太多了,还有之前很多东西需要整理修改一下!
到此,faster_rcnn算是跑通了,原理也大概了解。但是对源码的解读还差得远,后续会对源码的一些细节进行总结。
10、推荐
推荐1:一款windows下使用linux命令行 https://www.cnblogs.com/zhangkanghui/p/10897626.html
花里胡哨,没什么卵用,但是作为0基础学习linux入门级。不会配置linux系统或者虚拟机上,或者双系统,可以暂时使用这个,基本功能都能实现。不过最好还是装个linux环境最好!
推荐2:一款远程连接计算机软件:Teamviewer https://www.teamviewer.com/zhcn/credentials/free-for-personal-use/
这样就可以远程连接计算机了,比qq稳定,而且支持无人值守。推荐入手!
8、我是尾巴
写了这么多篇博客,是真的丑。暑假一定要把djanggo学了,搭建一个好看点的博客!!!自己都忍不住吐槽自己,是真的难看!!!