基于Tensorflow的Faster R-CNN目标检测算法之训练自己的Dataset及Model

此乃本人的第二篇csdn博客,上一篇介绍了用faster r-cnn在cpu下来运行一个demo,实现图片的目标检测。本博客就是要介绍如何修改faster r-cnn的源码,建立自己的数据集,然后训练模型,借鉴别人的代码为自己所用,进而实现实现自己的项目。

1. 用数据集测试预训练好的模型

我的第一篇博客是采用预训练好的模型来测试图片,这里采用VOC2007测试集来测试预训练好的模型的好坏,用大量的图片来测试模型检测目标的精度,模型还是第一篇博客里面的Resnet101(在ImageNet和VOC0712上训练过的模型)。需要执行test_faster_rcnn.sh脚本,看其代码会发现,其实所用的就是VOC2007的test测试集。

因此这里只需要一个预训练好的模型和VOC2007的test数据集即可。

1.修改源码

把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])

2. 下载VOC2007数据集

下面以voc2007为例
下载训练和验证集:
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
在同一个文件夹下解压:
tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar

最后把VOCdevkit文件夹拷贝到tf-fater-rcnn/data路径下,并重命名为VOCdevkit2007

3.执行测试脚本验证模型准确率

执行如下命令:
运行的参数中是GPU运行的参数设置,但是在经过第一篇博客的修改后,gpu_id参数设置为0的话,也是可以运行的。

./experiments/scripts/test_faster_rcnn.sh 0 pascal_voc_0712 res101

如果你成功得到了20类目标的AP的话,那说明你成功啦。如果报错需要看具体是什么错误,下面是我的报错记录。
疑问:只看命令可知就是用VOC0712的test测试集来测试模型的好坏。故:数据集名字是pascal_voc_0712。但是我用的测试集是voc2007啊,为什么是pascal_voc_0712?
在这里插入图片描述
查看上述代码可以发现,是执行第二部分,然后我们这里只用到了测试集,即TEST_IMDB,其实也就是VOC07的test测试集。

4.报错记录

1. 报错:找不到numpy
执行完命令之后,报错如下,numpy是python常用的库,我肯定安装了,查找源码发现脚本是默认用python2来运行的,需要改成python3.
在这里插入图片描述
将两处python改为python3:
在这里插入图片描述
2. 报错:ImportError: No module named ‘yaml’
再次执行命令,报错:ImportError: No module named ‘yaml’,需要安装yaml库:
sudo pip3 install pyyaml(不是pip3 install yaml,我最初就是这样安装的)
3. 报错:数据集不存在test.txt文件。
再次执行命令,报错:不存在test.txt文件,如下:
在这里插入图片描述
VOC2007数据集下载之后,只有这三个txt文件,所以第一种方案:需要把训练集的xml文件重新分配成训练集,测试集,验证集等4个txt文件。第二种方案:把VOC2007的三个文件都下载成功。
在这里插入图片描述
其实是我只下载了第一个和第三个,第二个下载不成功。将两个压缩包解压在一起,所以少了test.txt文件,去下面这个网站下载:
https://pjreddie.com/projects/pascal-voc-dataset-mirror/
4. 报错:default无此文件夹。
再次运行命令,报错:default无此文件夹,如下
在这里插入图片描述
找到此文件夹的母目录,明明存在default啊,但是ls之后,发现没有default,这就奇怪了,需要重新链接一下,然后ls查看是否有default文件夹,如果有就成功了---其实这是错误的,后来才发现,见下面的原因描述就知道了。

在这里插入图片描述
原因:output文件夹要在tf-faster-rcnn-master母目录之下才可以了,上述建立模型软链接的位置错了,所以报错找不到default文件夹。

转自其他博客:执行完demo.py程序后删除tf-faster-rcnn/output/res101/voc_2007_trainval+voc_2012_trainval下的default文件 ,然后再去执行测试文件,因为测试时还要创建一个default文件,那个和现在这个是不一样的,所以如果不删除这个现存的default文件会导致无法测试,显示default文件已存在,创建失败。当然测试完之后如果要运行demo.py文件的话,同样是要删除掉测试时创建的default文件的。(很奇怪,这是我在一个GitHub上的讨论中找到的答案)---但是我好像重新建立了模型的软链接之后就可以运行测试脚本了,by zhguoi。

5.成功运行

成功运行界面如下:
在这里插入图片描述
最终结果如下,给出每个类检测精度的平均值AP。
在这里插入图片描述
—技巧:在CPU下要预测完VOC测试集里面的那么多图片(4952张)还是太慢了,需要n个小时吧。这里我们直接修改test.txt文件,只留前20张图片,看测试效果如何:

在这里插入图片描述
在这里插入图片描述
测试完毕后同样会在output文件夹下建立一个路径为:/output/res101/voc_2007_test/default/res101_faster_rcnn_iter_110000/的文件夹,res101代表网络名称,voc_2007_test代表数据集,与训练不同,该文件夹下不再是模型文件。

总结:用训练好的模型去检测图片和数据集时,关键是要让运行的脚本代码找到模型所在的位置,即:tf-faster-rcnn/output/net名字/数据集名字/default —其下就是四个model文件。net名字和数据集名字在运行./test_faster_rcnn时需要指定,但是运行demo.py时需要在源码中进行修改/指定,默认是res101和pascal_voc_0712,如下所示。only by zhguoi

在这里插入图片描述在这里插入图片描述

2. 用VOC2007训练模型

这里用VOC2007的训练集来训练自己的模型,也就是说不用预训练好的模型了,要训练出自己的模型,但是还是需要预训练好的模型权重文件的。

因此此功能实现是需要:vgg16或res101模型的权重文件和voc2007的训练集就可以了。因为faster-rcnn本身就是用voc2007来训练的实现20类目标检测,所以代码中的类别等参数都不用修改,voc2007训练集也是现成的,所以很简单。

1. 下载模型权重文件并重命名

将其下载并放在data/imagenet_weights文件夹下,重命名,因为后面在调用权重数据的时候名字需要对应的上。
下面将以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

ResNet101为

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值