使用的faster r-cnn代码github地址
https://github.com/endernewton/tf-faster-rcnn
git下载:
git clone https://github.com/endernewton/tf-faster-rcnn.git
首先根据自己的显卡调整默认计算能力,打开/lib/setup.py文件,第130行的'-arch=sm_52'改变成你自己显卡的计算能力值
比如本文使用的显卡是gtx1080ti,就改成'-arch=sm_61'
具体计算能力从如下地址查找
https://blog.csdn.net/huixingshao/article/details/82215703
之后进行编译,依次执行
cd tf-faster-rcnn/lib
make clean
make
cd ..
将下载好的VOC数据集放在/data文件夹下面
/data/VOCdevkit2007/VOC2007/
里面放入三个文件
如若自己创建的数据集,也可以建立软连接的形式
使用命令
ln -s 自建创建的数据集地址 VOCdevkit2007
例如
ln -s /home/omnisky/DATASET/自建数据集/VOCdevkit2007 VOCdevkit2007
下载预训练好的vgg16权重,依次执行
mkdir -p data/imagenet_weights
cd data/imagenet_weights
wget -v http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz
tar -xzvf vgg_16_2016_08_28.tar.gz
mv vgg_16.ckpt vgg16.ckpt
cd ../..
这时候下载好的vgg16预训练权重就存放在data/imagenet_weights文件夹中
如若下载不下来,请在百度网盘中下载,地址
https://pan.baidu.com/s/1dHW8-My1shD36Phsd9YMFg
分享码:gk10
如若你使用的是自己创建的VOC数据集,还需更改以下几个东西:
打开/lib/datasets/pascal_voc.py文件
将数据集类别名称改成你自己的
self._classes = ('__background__', # always index 0
'aeroplane', 'bicycle', 'bird', 'boat',
'bottle', 'bus', 'car', 'cat', 'chair',
'cow', 'diningtable', 'dog', 'horse',
'motorbike', 'person', 'pottedplant',
'sheep', 'sofa', 'train', 'tvmonitor')
其中'__background__',作为第一个不能删除
如若想修改一些参数配置,可打开/data/model/config.py文件
若想修改训练或者测试时的迭代次数,打开/experiments/scripts//experiments/train_faster_rcnn.sh或者test_faster_rcnn.sh文件,
其中的
pascal_voc)
TRAIN_IMDB="voc_2007_trainval"
TEST_IMDB="voc_2007_test"
STEPSIZE="[50000]"
ITERS=70000
ANCHORS="[8,16,32]"
RATIOS="[0.5,1,2]"
红色的数字是迭代次数,修改成你想要的,根据自己创建的数据集大小更改
如果,你已经训练过一次,在训练的话,需要删除以下几个文件才能进行下一次训练
清空/output/vgg16文件夹中的内容
清空/data/cache文件夹中的内容
最后执行命令进行训练
./experiments/scripts/train_faster_rcnn.sh 0 pascal_voc vgg16
训练完成后程序会自动的测试,但如果你不小心关闭或者出了一些问题不需要担心,以下方法可以再次进行测试
首先根据/out/vgg16/voc_2007_trainval文件中的不同迭代次数的权重选择你要测试使用的权重,
在/experiments/scripts//experiments/test_faster_rcnn.sh文件中更改
其中的
pascal_voc)
TRAIN_IMDB="voc_2007_trainval"
TEST_IMDB="voc_2007_test"
STEPSIZE="[50000]"
ITERS=70000
ANCHORS="[8,16,32]"
RATIOS="[0.5,1,2]"
红色的数字是迭代次数,修改成你想要的
之后执行命令进行测试
./experiments/scripts/test_faster_rcnn.sh 0 pascal_voc vgg16
如若想要检测出图片的话,需要执行/tools/demo.py文件
需要在demo.py文件中做出以下的更改
修改数据集类别名称
CLASSES = ('__background__',
'aeroplane', 'bicycle', 'bird', 'boat',
'bottle', 'bus', 'car', 'cat', 'chair',
'cow', 'diningtable', 'dog', 'horse',
'motorbike', 'person', 'pottedplant',
'sheep', 'sofa', 'train', 'tvmonitor')
其中第一类别'__background__',不能删除
修改数据集类别数量,在第141行
net.create_architecture("TEST", 21,tag='default', anchor_scales=[8, 16, 32])
其中红字是需要修改的,注意要算上'__background__'这一个类别,所以要在你自己数据集的总类别数上加1
修改需要测试的图片名称
在148行,将你要检测的图片名称加入im_names中
且将你要检测的图片放入/data/demo文件夹中
如若遇到tensorflow版本导致训练后的权重保存格式问题,可修改第120行的tfmodel
改成
tfmodel = os.path.join('/home/omnisky/project/tf-faster-rcnn/output/vgg16/voc_2007_trainval/default/vgg16_faster_rcnn_iter_70000.ckpt')
最后执行命令
python /tools/demo.py
将其中的148行的im_names = [……]删除,更改为下面的代码即可
test_image_path = '检测图片存储的位置'
im_names = os.listdir(test_image_path)
最后执行命令
python /tools/demo.py