现在拉下的工科太多了,现在得赶紧的补习,就先从学习目标检测实战开始。
本文分为3部分:
Tensorflow-gpu是在Anaconda PowerShell里用conda安装的,同时安装一些必要的库:cython、easydict、matplotlib、python-opencv等, 总之有些能用conda安装就用,不能用就pip,如 pywin32包
跑实验时,缺啥安装啥就行。
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
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。
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目录下 。文件夹目录
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\
目录下
都弄好以后,就可以训练了执行。
训练模型的参数可以在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文件,将训练生成的文件复制到该文件下,
对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
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/