20190524 今天又是元气满满的一天!html
0、前言
无论怎么说,先把faster_Rcnn学了吧!后续的会加入一些具体代码的总结。还有一些比较好的点。总之,无论有没有用,先学了再说吧!python
一、代码下载
只有一句话,开源是一种情怀。linux
下载地址:https://github.com/dBeker/Faster-RCNN-TensorFlow-Python3.5git
在这里下载的是windows,tensorflow框架下的faster-rcnn代码,固然在github里还有caffe版本,还有大多数是linux下的。linux必定要好好学一下!!!github
个人版本python版本3.6,tensorflow-gpu。windows
下载以后,先不要着急用pycharm打开运行。这些代码时在python3.5上编译好的,因此咱们在python3.6版本运行的时候须要从新编译!!浏览器
二、编译
一、将下载好的源码文件夹放在本身的目录下。而后启动一个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
二、继续在这个目录下运行 python setup.py build_ext install
三、而后切换到另一个目录下。
D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\lib\utils
而后在这个目录下运行 python setup.py build_ext --inplace
这个时候完成了编译。就能够关掉全部的东西。开启下一步。
三、下载数据集
一、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
直接将这三个网址复制到浏览器中。
二、将下载好的压缩吧解压以后放在指定文件夹:D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\data
这样基本就算是完成了。。
三、若是好奇会打开D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\data\VOCdevkit2007\VOC2007
在这个文件夹下存放着这几个文件夹。能够用excel打开Annotations里的xml文件,里面记录着图片的标注信息。JPEGImages文件夹下存放着图像样本集。
四、下载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。
五、运行Train程序
打开pycharm,找到本身的项目,运行train。
整个train过程会迭代4000次,速度仍是挺慢的,GTX1070,每10步0.5s,共计大概须要30min。这个没办法,没有好的GPU还玩个p。贫穷限制了个人自由!
总结:老老实实地按照github上的教程一步一步来,不要误操做。否则全都是坑。
运行完成之后会生成checkpoint文件,存放在D:\goodgoodstudy\FasterRCNNTensorFlowPython3.5master\default\voc_2007_trainval\default
在不改变存放路径的状况下会存在这个文件夹中。
六、运行demo程序
在运行demo程序的时候,会报错,缘由是由于咱们加载的模型的路径没有修改,因此会由于找不到模型报错。
有3处须要修改:
(1)默认加载的是res101,而我要用vgg16,数据集也要修改!
(2)(2)原来这里默认的是70000,我用GTX1070运行40000次,将近40min。因此若是没有好的显卡,那就没办法了。70000次时间过久了!
(3)这里的模型路径也要修改。确保是D:\goodgoodstudy\FasterRCNNTensorFlowPython3.5master\default\voc_2007_trainval\default否则会一直报错,找不到模型。
七、准备本身的数据集
在开始训练本身的数据集以前,必须确保demo和train程序已经跑通!
首先,准备本身的数据集。首先须要进行重命名,按照000001,0000002......下去,
rename程序放在这里,后续更新(批量重命名)
一、经过标注软件生成xml文件放在Annotations文件夹下,注意:注意标注的时候必定不要用大写,不要有空格,建议所有用小写字母和数字
D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\data\VOCdevkit2007\VOC2007\Annotations
二、讲本身的图片数据集放在
D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\data\VOCdevkit2007\VOC2007\JPEGImages, 注意:这里是.jpg格式图片,若是是其余格式须要在程序中修改
三、在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里的文件,否则测试的时候会报错!!特别是第二个文件!!!
由于这些文件多是以前为了跑通程序留下来的,如今咱们更新了数据集,因此,这里理所固然须要删除以后进行操做。
八、源码修改
一、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__是默认的背景,不须要修改,只须要修改后面的类别,改为本身的类别
二、训练的参数都在lib\config文件夹中,根据本身的须要进行修改和调试。也能够先按照默认的尝试一下~
第一次训练的时候我对config.py里面的数据也进行了修改,小试牛刀的时候我把batch_size改为64,,max_iters改为1000,snapshot_iterations改为500,每500次输出一次模型,后来第一次训练成功以后,再慢慢把数据改大。
后来我把batch_size改为256,,max_iters改为40000,snapshot_iterations改为5000。
九、测试本身的数据集
首先,将本身须要测试的数据集放在demo的文件夹中,D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\data\demo中
须要修该的地方:
一、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',)}
二、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进行修改
三、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",后面这个数就是你训练的时候的选择了几个类别,这个地方就是几,包括背景算在内。
四、demo.py第四处
im_names = ['001954.jpg', '002109.jpg', '002000.jpg', '001905.jpg', '002342.jpg'] #这里的im_names修改成demo文件夹下本身的测试图片的名字
五、那这里就存在一个问题,如何批量测试数据集呢?
六、此外,还会发现,这个demo程序只是将同一类的图像标在一张图上,那么如何实现将全部类标在一张图上。
七、标在一张图上,我想让不一样类别显示不一样颜色进行标记呢?
八、若是训练程序在服务器或者另一台电脑上操做,直接将checkpoint文件粘贴过来会出现问题?怎么办?
567这几个问题后续慢慢更新,最近须要总结的东西太多了,还有以前不少东西须要整理修改一下!
到此,faster_rcnn算是跑通了,原理也大概了解。可是对源码的解读还差得远,后续会对源码的一些细节进行总结。
十、推荐
推荐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稳定,并且支持无人值守。推荐入手!
八、我是尾巴
写了这么多篇博客,是真的丑。暑假必定要把djanggo学了,搭建一个好看点的博客!!!本身都忍不住吐槽本身,是真的难看!!!