在网上找了很多关于运行tf-faster-rcnn的资料,首先感谢这位博主的博文对我的帮助很大https://blog.csdn.net/char_QwQ/article/details/80980505,本文主要是对我遇到的一些问题进行修改,方便以后使用,废话不多说直接进入正题。
系统 :ubuntu 16
内存:16G
GPU:GTX1070ti
代码链接:https://github.com/endernewton/tf-faster-rcnn.git
1.下载代码
$ git clone https://github.com/endernewton/tf-faster-rcnn.git
2.根据你的显卡更改对应的架构
更改代码的tf-faster-rcnn/lib/setup.py的第130行'nvcc': ['-arch=sm_52',换成一下对应列表中的代码(我的显卡是1070ti的代码是sm_61):
3.安装一些包
你的python可能没有opencv-python, easydict,需要提前安装(sudo apt-get install python-opencv,pip install easydict)
4.编译Cython
以下命令是在tf-faster-rcnn/lib路径下运行
make clean
make
cd ..
5.安装coco API
接着上面步骤继续输入命令:
cd data
git clone https://github.com/pdollar/coco.git
cd coco/PythonAPI
make
cd ../../..
6. 下载数据集:
下载训练集,验证集,测试集和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
解压这些数据集
tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar
把解压后的文件夹VOCdevkit重命名为VOCdevkit2007,然后把这个VOCdevkit2007文件夹剪切到tf-fater-rcnn/data路径下。
7.下载预训练模型:
链接:https://pan.baidu.com/s/1p0vqMdtqusmtuetnwKsq4g
密码:k4j7
8.建立预训练模型的软连接
在tf-faster-rcnn目录下建立output文件夹,并使用软连接来使用预训练模型,在tf-faster-rcnn路径下运行一下命令:
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 ../../..
你在运行以上命令完之后先看output文件下的voc_2007_trainval+voc_2012_trainval文件夹里面有没有default文件夹(这个是文件夹不是文件),打开default文件查看里面是不是训练好的网络文件,如果没有直接解压第7步中下载好的压缩文件,然后把解压后的voc_2007_trainval+voc_2012_trainval文件里面的default文件夹直接剪切到上面输命令行生成的voc_2007_trainval+voc_2012_trainval文件夹下面。
9.对图片进行测试
测试图片在data/demo中,在tf-faster-rcnn路径下运行以下命令:
GPU_ID=0
CUDA_VISIBLE_DEVICES=${GPU_ID} ./tools/demo.py
在运行以上命令之后我的电脑报错No module named ‘_tkinter’,解决方法可以在终端输入命令行:
sudo apt-get install python3-tk
安装完成后输入命令:
python
import _ tkinter
如果没有报错就安装成功了
安装成功以后再重新运行一次
CUDA_VISIBLE_DEVICES=${GPU_ID} ./tools/demo.py
会看到对demo中的图片进行目标检测
10.使用训练好的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])
改好之后再在终端运行一下命令:
GPU_ID=0
./experiments/scripts/test_faster_rcnn.sh $GPU_ID pascal_voc_0712 res101
运行结果:
11.训练模型
模型的权重数据存网盘
链接:https://pan.baidu.com/s/1muc93FNmYg5Ly_3pw4TTlQ
密码:se0w
在data目录下创建一个imagenet_weights文件夹,解压权重数据并把解压后的vgg_16.ckpt重命名为vgg16.ckpt,因为后面在调用权重数据的时候名字需要对应的上。
开始训练(这里最后的vgg16就是对应的权重数据,名字要对的上,0是GPU的ID,pascal_voc是训练使用的数据集):
./experiments/scripts/train_faster_rcnn.sh 0 pascal_voc vgg16
为了节省时间并排除错误,我把迭代次数只设置了100次,把./experiments/scripts/train_faster_rcnn.sh里的第22行把ITERS=70000改成ITERS=100,同时记得把./experiments/scripts/test_faster_rcnn.sh的ITERS也改成100。
训练结果:
由于仅仅迭代了100次,所以结果很差。
12.替换自己的数据
关于数据集的制作和注意地方留待以后更新