Faster_Rcnn在windows下运行踩坑总结

Faster_Rcnn在windows下运行踩坑总结

 20190524  今天又是元气满满的一天!html

一、代码下载

二、编译

三、下载数据集

四、下载pre-train Model

五、运行train

六、运行demo文件

七、准备本身的数据集

八、修改源码

九、测试本身的数据集(未完待更)

十、推荐

 

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学了,搭建一个好看点的博客!!!本身都忍不住吐槽本身,是真的难看!!!

相关文章
相关标签/搜索