Ubuntu+GPU+Tensorflow运行tf-faster-rcnn【光纤分类项目】

系统配置 我所使用的环境总体来说为:

  1. Ubuntu 18.04
  2. cuda 9.0
  3. cudnn 7.5.0
  4. python 3.6.7
  5. tensorflow 1.10.0
  6. gcc 4.8.5(tf-faster-rcnn不支持6以上版本的gcc)
Ubuntu+GPU+Tensorflow运行tf-faster-rcnn【光纤分类项目】
文章图片
ubuntu系统配置
Ubuntu+GPU+Tensorflow运行tf-faster-rcnn【光纤分类项目】
文章图片
显卡配置:GeForce GTX 1060
Ubuntu+GPU+Tensorflow运行tf-faster-rcnn【光纤分类项目】
文章图片
显卡配置:GeForce GTX 1060
Ubuntu+GPU+Tensorflow运行tf-faster-rcnn【光纤分类项目】
文章图片
屏幕截图
Ubuntu+GPU+Tensorflow运行tf-faster-rcnn【光纤分类项目】
文章图片
屏幕截图
Ubuntu+GPU+Tensorflow运行tf-faster-rcnn【光纤分类项目】
文章图片
Cuda版本9.0
Ubuntu+GPU+Tensorflow运行tf-faster-rcnn【光纤分类项目】
文章图片
Cudnn版本7.5
Ubuntu+GPU+Tensorflow运行tf-faster-rcnn【光纤分类项目】
文章图片
Python版本3.6.7
Ubuntu+GPU+Tensorflow运行tf-faster-rcnn【光纤分类项目】
文章图片
Tensorflow版本1.10
Ubuntu+GPU+Tensorflow运行tf-faster-rcnn【光纤分类项目】
文章图片
gcc版本4.8.5 Github代码链接
本文使用的代码:https://github.com/endernewton/tf-faster-rcnn
官方代码:https://github.com/ShaoqingRen/faster_rcnn
半官方代码:https://github.com/rbgirshick/py-faster-rcnn
Faster-RCNN原文链接:https://arxiv.org/pdf/1506.01497.pdf
改进方案论文链接:https://arxiv.org/pdf/1702.02138.pdf
Demo运行过程
  1. 根据显卡更改下对应的计算单元:
    修改tf-faster-rcnn/lib/setup.py中第130行的arch参数,比如我的显卡是1070,算力是6.1,所以是sm_61
    显卡的算力可以查询下面网址: http://arnon.dk/matching-sm-architectures-arch-and-gencode-for-various-nvidia-cards/
    Ubuntu+GPU+Tensorflow运行tf-faster-rcnn【光纤分类项目】
    文章图片
    参考
  2. 编译Cython
    仍然在lib路径下,编译Cython模块(确保你已经安装了easydict,如果没有,pip install easydict):
make clean make cd ..

  1. 安装COCO API(代码需要API来访问COCO dataset)
    这点按照GitHub的步骤走就ok:
cd data git clone https://github.com/pdollar/coco.git cd coco/PythonAPI make cd ../../..

在执行git clone https://github.com/pdollar/coco.git 这个步骤时,终端报错:

Ubuntu+GPU+Tensorflow运行tf-faster-rcnn【光纤分类项目】
文章图片
报错信息
查找资料发现修改下载方式-https改为ssh,把’ https://git.openwrt.org/feed/packages.git’改为’ git://git.openwrt.org/feed/packages.git’,即改为如下指令就可以成功执行:
git clone git://github.com/pdollar/coco.git

  1. 配置数据(按照py-faster-rcnn的说明,设置VOC和COCO数据集,这些步骤包括下载数据和在数据文件夹中创建可选的软链接)
  • 下载训练集、验证集、测试集以及VOCdevkit
    在想要存放数据集的位置打开终端,输入下列命令:
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar

  • 将所有压缩包解压到一个名为VOCdevkit的文件夹中
tar xvf VOCtrainval_06-Nov-2007.tar tar xvf VOCtest_06-Nov-2007.tar tar xvf VOCdevkit_08-Jun-2007.tar

  • VOCdevkit文件夹应由如下构成
VOCdevkit/# development kit VOCdevkit/VOCcode/# VOC utility code VOCdevkit/VOC2007# image sets, annotations, etc. ... and several other directories ...

  • 创建数据集的软连接
cd tf-faster-rcnn-master/data ln -s $VOCdevkit VOCdevkit2007

  1. 下载预训练模型
    需要翻墙,如果翻不了墙就从网盘里下吧,下面提供一个预训练模型的网盘链接:
    预训练模型 提取码:8ahl
    (感谢提供下载链接的无私可爱人er)
    下载过后复制到data文件夹内对其进行解压:
tar zxvf voc_0712_80k-110k.tgz(在data文件夹中解压)

data文件夹解压之后如下图所示:

Ubuntu+GPU+Tensorflow运行tf-faster-rcnn【光纤分类项目】
文章图片
data文件夹
  1. 创建一个文件夹和一个软链接以使用预训练模型
    在tf-faster-rcnn根目录创建一个output文件夹并且在其中存放预训练模型的软链接,使用软连接来使用预训练模型,output文件夹中会在每次训练后存放训练好的模型,这里按照步骤走就行:
NET=res101 TRAIN_IMDB=voc_2007_trainval+voc_2012_trainval mkdir -p output/${NET}/${TRAIN_IMDB} cd output/${NET}/${TRAIN_IMDB} ln -s ../../../data/voc_2007_trainval+voc_2012_trainval ./default cd ../../..

  1. 对demo进行测试
    上面的Res101网络预训练模型是已经经过imagenet和voc0712数据集训练好的,用demo来调用output文件夹下的该模型,展示其实际检测效果。仍然按照步骤走:
GPU_ID=0 CUDA_VISIBLE_DEVICES=${GPU_ID} ./tools/demo.py

最终效果如图所示:

Ubuntu+GPU+Tensorflow运行tf-faster-rcnn【光纤分类项目】
文章图片
Demo.py效果图 使用训练好的faster模型对数据进行测试 这里有点地方需要改:首先把 tf-faster-rcnn/lib/datasets/voc_eval.py的第121行的
with open(cachefile,'w') as f

改成
with open(cachefile,'wb') as f

同时还要把第105行的
cachefile = os.path.join(cachedir, '%s_annots.pkl' % imagesetfile)

改成
cachefile = os.path.join(cachedir, '%s_annots.pkl' % imagesetfile.split("/")[-1].split(".")[0])

然后在tf-faster-rcnn根目录中输入下面命令:
GPU_ID=01 ./experiments/scripts/test_faster_rcnn.sh $GPU_ID pascal_voc_0712 res101

结果如图所示:
Ubuntu+GPU+Tensorflow运行tf-faster-rcnn【光纤分类项目】
文章图片
预训练模型测试结果 【Ubuntu+GPU+Tensorflow运行tf-faster-rcnn【光纤分类项目】】会在output文件夹下建立一个路径为:
/output/res101/voc_2007_test/default/res101_faster_rcnn_iter_110000/
的文件夹,res101代表网络名称,voc_2007_test代表数据集,与训练不同,该文件夹下不再是模型文件。
到此为止,所有步骤都成功的话则说明tf-faster-rcnn平台搭建完成!

    推荐阅读