win10+Tensorflow+Faster RCNN目标检测(1)环境配置及VOC2007数据集训练及测试

现在拉下的工科太多了,现在得赶紧的补习,就先从学习目标检测实战开始。

本文分为3部分:

  • 在win10系统上配置Tensorflow版本的Faster RCNN
  • 运行Faster RCNN程序,测试了图片
  • 过程中的踩坑记

     

一、相关准备阶段
 

1.设备环境

  • win10系统,显卡GeForce GTX 1050ti;
  • TensorFlow-GPU 1.10.0,CUDA 10.0,Cudnn 7.4.2;
  • python 3.5.4, opencv3.4.2, opencv-python 4.2.0.34

Tensorflow-gpu是在Anaconda PowerShell里用conda安装的,同时安装一些必要的库:cython、easydict、matplotlib、python-opencv等, 总之有些能用conda安装就用,不能用就pip,如 pywin32包

跑实验时,缺啥安装啥就行。

2、源码下载

Faster RCNN的下载地址(代码基于python3.5,我是在anaconda3中创建的虚拟环境):

https://github.com/dBeker/Faster-RCNN-TensorFlow-Python3.5

也可通过git下载,在命令行中打开cmd,cd到你的目录,输入:

git clone https://github.com/dBeker/Faster-RCNN-TensorFlow-Python3.5.git

下载完成后,项目的根目录为:Faster-RCNN-TensorFlow-Python3.5-master

3、【踩坑1】修改Faster-RCNN-TensorFlow-Python3.5-master\data/coco/PythonAPI/setup.py文件:在第15行加上

,
    Extension( 'lib.utils.cython_bbox',
               sources=['../../../lib/utils/bbox.c','../../../lib/utils/bbox.pyx'],
               include_dirs = [np.get_include(), '/lib/utils'], 
               extra_compile_args=[], )

否则后面出现的一下错误(这是个大坑啊)

由于没有bbox.c和blob.py文件。所以要先在Faster-RCNN-TensorFlow-Python3.5-master\lib\utils执行

cd到Faster-RCNN-TensorFlow-Python3.5-master\data\coco\PythonAPI目录下,打开cmd,运行编译提供的代码:

python setup.py build_ext --inplace
python setup.py build_ext install

 【踩坑】有可能编译失败,出现以下问题:

 

在D:\PYTHON\Paper2\Faster-RCNN-TensorFlow-Python3-master\data\coco\PythonAPI>下输入以下命令(我是在Anaconda3中进行的环境配置)

 

pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI
 

若还是不行: 

此时下载安装Microsoft Visual C++ Build Tools 2015,打开链接下载安装程序: Microsoft Visual C++ Build Tools 2015,双击visualcppbuildtools_full.exe,选择默认即可,点击安装,等待10分钟左右即可完成安装。

然后重新编译 

 

 生成cython_bbox.c和cython_bbox.pyx,如果生成的不是这个名字,也要改成这个名字,因为这是和前面的setup.py中添加的代码要一致。

 

【踩坑2】此时D:\PYTHON\Paper2\Faster-RCNN-TensorFlow-Python3-master\data\coco\PythonAPI\lib\utils目录下会生成一个pyd文件 

把这个文件复制到上面那张图的位置,其中我已经复制过了,有可能在那个地方没有存在,会出现刚才的那个bug。

4.下载数据集

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

 由于被墙,可以下载百度云盘的数据集,链接:https://pan.baidu.com/s/1Y_RzqLvW4CAzTEq4ICFVUA ,提取码:m9dl

将下载后的三个压缩包解压到同一个文件夹,同时选中这三个压缩包,选择解压到当前文件夹,可得到VOCDevkit文件夹,如图1所示,将VOCDevkit重命名为VOCDevkit2007,然后将这个文件夹复制到data目录下 。文件夹目录

5.VGG16模型下载:

VGG16模型的下载地址:http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz,也可去百度云盘下载,

链接:https://pan.baidu.com/s/11Ty10NJ-rgXkkvM92SVVKw ,提取码:d2jz

解压并改名为vgg16.ckpt(原来是vgg_16.ckpt)后存放在Faster-RCNN-TensorFlow-Python3.5-master\data\imagenet_weights\目录下

都弄好以后,就可以训练了执行。

6 .训练模型

训练模型的参数可以在Faster-RCNN-TensorFlow-Python3.5-master\lib\config文件夹里的config.py修改,包括训练的总步数、权重衰减、学习率、batch_size等参数。

tf.app.flags.DEFINE_float('weight_decay', 0.0005, "Weight decay, for regularization")
tf.app.flags.DEFINE_float('learning_rate', 0.001, "Learning rate")
tf.app.flags.DEFINE_float('momentum', 0.9, "Momentum")
tf.app.flags.DEFINE_float('gamma', 0.1, "Factor for reducing the learning rate")
 
tf.app.flags.DEFINE_integer('batch_size', 128, "Network batch size during training")
tf.app.flags.DEFINE_integer('max_iters', 40000, "Max iteration")
tf.app.flags.DEFINE_integer('step_size', 30000, "Step size for reducing the learning rate, currently only support one step")
tf.app.flags.DEFINE_integer('display', 20, "Iteration intervals for showing the loss during training, on command line interface")
 
tf.app.flags.DEFINE_string('initializer', "truncated", "Network initialization parameters")
tf.app.flags.DEFINE_string('pretrained_model', "./data/imagenet_weights/vgg16.ckpt", "Pretrained network weights")
 
tf.app.flags.DEFINE_boolean('bias_decay', False, "Whether to have weight decay on bias as well")
tf.app.flags.DEFINE_boolean('double_bias', True, "Whether to double the learning rate for bias")
tf.app.flags.DEFINE_boolean('use_all_gt', True, "Whether to use all ground truth bounding boxes for training, "
                                                "For COCO, setting USE_ALL_GT to False will exclude boxes that are flagged as ''iscrowd''")
tf.app.flags.DEFINE_integer('max_size', 1000, "Max pixel size of the longest side of a scaled input image")
tf.app.flags.DEFINE_integer('test_max_size', 1000, "Max pixel size of the longest side of a scaled input image")
tf.app.flags.DEFINE_integer('ims_per_batch', 1, "Images to use per minibatch")
tf.app.flags.DEFINE_integer('snapshot_iterations', 5000, "Iteration to take snapshot")

参数调整完后,在Faster-RCNN-TensorFlow-Python3.5-master的目录下,运行 python train.py,就可以训练生成模型了。

模型训练结束后,在 Faster-RCNN-TensorFlow-Python3.5-master\default\voc_2007_trainval\default目录下可以看到训练的模型,一个迭代了40000次(我自己设计为迭代20000次),迭代次数可在Faster-RCNN-TensorFlow-Python3.5-master\lib\config文件夹里的config.py修改。
 

在目录下新建output\vgg16\voc_2007_trainval\default文件,将训练生成的文件复制到该文件下,

7、测试模型 

对demo.py进行如下的修改

1、将NETS中的“vgg16_faster_rcnn_iter_70000.ckpt”改成“vgg16_faster_rcnn_iter_20000.ckpt”,如下所示;

NETS = {'vgg16': ('vgg16_faster_rcnn_iter_20000.ckpt',), 'res101': ('res101_faster_rcnn_iter_110000.ckpt',)}


2、将DATASETS中的“voc_2007_trainval+voc_2012_trainval”改为“voc_2007_trainval”,如下所示;

DATASETS = {'pascal_voc': ('voc_2007_trainval',), 'pascal_voc_0712': ('voc_2007_trainval',)}


3、将def parse_args()函数的两个default分别改成vgg16和pascal_voc,如下所示;
 

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='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

4###########,有教程说会出现这个问题,但是我自己测试是没有出现这个问题的。

  修改上述参数后,运行demo.py,出现错误:

E:\Software\Python\python.exe E:/liukang/Faster-RCNN-TensorFlow-Python3.5-master/demo.py --net vgg16
Traceback (most recent call last):
  File "E:/liukang/Faster-RCNN-TensorFlow-Python3.5-master/demo.py", line 142, in <module>
    tag='default', anchor_scales=[8, 16, 32])
  File "E:\liukang\Faster-RCNN-TensorFlow-Python3.5-master\lib\nets\network.py", line 283, in create_architecture
    weights_regularizer = tf.contrib.layers.l2_regularizer(cfg.FLAGS.weight_decay)
  File "E:\Software\Python\lib\site-packages\tensorflow\python\platform\flags.py", line 84, in __getattr__
    wrapped(_sys.argv)
  File "E:\Software\Python\lib\site-packages\absl\flags\_flagvalues.py", line 633, in __call__
    name, value, suggestions=suggestions)
absl.flags._exceptions.UnrecognizedFlagError: Unknown command line flag 'net'. Did you mean: network ?

解决方法:

新建一个py文件,把demo.py脚本内容复制到里面就好了;新建一个脚本temp.py,测试多张图片,运行的结果如图所示

 

 

参考:https://blog.csdn.net/kebi199312/article/details/88368904

https://www.cnblogs.com/roscangjie/p/10945001.html

https://www.pianshen.com/article/4203686680/

 

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值