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

posted @ 2019-05-24 11:41  m1racle  阅读(5768)  评论(5编辑  收藏  举报