项目地址: git clone https://github.com/endernewton/tf-faster-rcnn.git
创建虚拟环境:conda create -n rcnn python=2.7
source activate rcnn # 切换环境
#安装tf1.2.1 cuda8 cudnn 6 python27 注意点:改为python3.6.5版本 不然Cython编译一直不通过,与python版本有关。大坑!!!
conda search tensorflow-gpu --info #查询可安装的tensorflow-gpu版本
conda install tensorflow-gpu=1.2 # conda 会默认安装cuda8 和cudnn6
pip install cython opencv-python easydict==1.6 #
pacman -S gcc # 给linux安装gcc编译工具
pip install matplotlib
pip install pillow
pip install pyyaml
后续按照git环境说明配置:
https://github.com/endernewton/tf-faster-rcnn#installation
步骤
1. 修改配置
cd tf-faster-rcnn/lib
vim setup.py
找到 -arch = sm_ 修改成相对应:
2.编译Cython
cd tf-faster-rcnn/lib
make clean
make
cd ..
EnvironmentError: The nvcc binary could not be located in your $PATH. Either add it to your path, or set $CUDAHOME
make: *** [Makefile:2:all] 错误 1
make 报错
解决方法:正确安装cuda 和cudnn 配置cuda cudnn环境变量,重启电脑。
build/temp.linux-x86_64-2.7/utils/bbox.o: file not recognized: file format not recognized
collect2: 错误:ld 返回 1
error: command 'gcc' failed with exit status 1
make: *** [Makefile:2:all] 错误 1
解决方法:换成python36
3.安装COCO API
cd data
git clone https://github.com/pdollar/coco.git
cd coco/PythonAPI
make
cd ../../..
4.下载数据
1、Download the training, validation, test data and 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
2、Extract all of these tars into one directory named VOCdevkit
tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar
3、It should have this basic structure
$VOCdevkit/ # development kit
$VOCdevkit/VOCcode/ # VOC utility code
$VOCdevkit/VOC2007 # image sets, annotations, etc.
… and several other directories …
4、Create symlinks for the PASCAL VOC dataset
cd $FRCN_ROOT/data
ln -s $VOCdevkit VOCdevkit2007
注意,第四步本人并没有采用github上提供的这种方法而是直接把建立好的文件夹复制过来。
5.下载预训练模型
这一步下载需要翻墙google下载点击res101 下载 voc_0712_80k-110k.tgz
tar -xvf voc_0712_80k-110k.tgz
解压
6.建立预训练模型的软连接
这一步的目的是在tf-faster-rcnn目录下建立output文件夹,并使用软连接来使用预训练模型,使用以下代码这里按照步骤走就行:直接复制运行
cd ..
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 ../../..
7.demo测试
GPU_ID=0
CUDA_VISIBLE_DEVICES=${GPU_ID} ./tools/demo.py
8.使用训练好的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/data/VOCdevkit2007/results/VOC2007/Main/
然后根目录下运行:
GPU_ID=0
./experiments/scripts/test_faster_rcnn.sh $GPU_ID pascal_voc_0712 res101
将运行 4000多步进行评估 最后看到结果,表示完成:
报错:
time python ./tools/test_net.py --imdb voc_2007_test --model output/res101/voc_2007_trainval+voc_2012_trainval/default/res101_faster_rcnn_iter_110000.ckpt --cfg experiments/cfgs/res101.yml --net res101 --set ANCHOR_SCALES '[8,16,32]' ANCHOR_RATIOS '[0.5,1,2]'
./experiments/scripts/test_faster_rcnn.sh:行67: time:未找到命令
解决:找到./experiments/scripts/test_faster_rcnn.sh:行67 删除 time,后面报错time 也是删除
报错:
ModuleNotFoundError: No module named 'pycocotools._mask'
解决:回到第三步骤,重新编译数据
9.训练模型
首先下载VGG模型,网盘下载地址https://pan.baidu.com/s/1aD0jlYGHhZQeeTvNJy0GGQ,密码:45ef。
在data目录下创建一个imagenet_weights文件夹,解压权重数据并把解压后的vgg_16.ckpt重命名为vgg16.ckpt,因为后面在调用权重数据的时候名字需要对应的上。
可以说到这里就可以进行训练了,但是为了节省时间并排除错误,我把迭代次数只设置了200次,具体操作为:
./experiments/scripts/train_faster_rcnn.sh里的第22行把ITERS=70000改成ITERS=20,
同时把./experiments/scripts/test_faster_rcnn.sh的ITERS也改成20。
注意:因为我使用的是pascal_voc数据集,所以只需要更改对应数据集的ITERS的就行了,训练和测试的都要改,因为在train_faster_rcnn.sh的末尾会执行test_faster_rcnn.sh。
开始训练(这里最后的vgg16就是对应的权重数据,名字要对的上,0是GPU的ID,pascal_voc是训练使用的数据集):
./experiments/scripts/train_faster_rcnn.sh 0 pascal_voc vgg16
训练过程的loss:
测试评估结果:
效果很差 毕竟才训练了20步
到此,算是整个项目跑通了。下一步,训练自己的数据模型,请看下节。
参考:
https://blog.csdn.net/hitzijiyingcai/article/details/81808091
https://blog.csdn.net/char_QwQ/article/details/80980505#commentsedit