之前实现过faster rcnn, 但是因为各种原因,有需要实现一次,而且发现许多博客都不全面。现在发现了一个比较全面的博客。自己根据这篇博客实现的也比较顺利。在此记录一下(照搬)。
原博客:https://blog.csdn.net/char_QwQ/article/details/80980505
文章代码连接:https://github.com/endernewton/tf-faster-rcnn
显卡:TiTan RTX/Qudro K2200(丽台k2200)。--我分别在两张显卡都实现过
Python 3.6 + TensorFlow-gpu 1.2.0rc2 + Cuda8.0 + Cudnn v5.1
一、克隆代码
git clone https://github.com/endernewton/tf-faster-rcnn.git
二、根据你的显卡更改下对应的计算单元。
在tf-faster-rcnn/lib/setup.py的第130行。TiTan RTX对应的是sm_52, K2200对应的是sm_30。在这可以查看每种显卡对应的计算单元:http://arnon.dk/matching-sm-architectures-arch-and-gencode-for-various-nvidia-cards/
三、编译Cython
仍然在lib路径下,编译Cython模块(确保你已经安装了easydict, 如果没有,pip install easydict):
. make clean
. make
. cd ..
四、安装COCO API.
这点按照GitHub的步骤走就ok,没啥错误:
. cd data
. git clone https://github.com/pdollar/coco.git
. cd coco/PythonAPI
. make
. cd ../../..
五、下载数据:
Download the training, validation, test data and VOCdevkit
1. wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
2. wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
3. wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar
Extract all of these tars into one directory named VOCdevkit
. tar xvf VOCtrainval_06-Nov-.tar
. tar xvf VOCtest_06-Nov-.tar
. tar xvf VOCdevkit_08-Jun-.tar
It should have this basic structure
. $VOCdevkit/ # development kit
. $VOCdevkit/VOCcode/ # VOC utility code
. $VOCdevkit/VOC2007 # image sets, annotations, etc.
. # ... and several other directories ...
Create symlinks for the PASCAL VOC dataset
. cd $FRCN_ROOT/data
. ln -s $VOCdevkit VOCdevkit2007
注:这里有个小问题,我的软连接似乎不起作用了,于是我直接把VOCdevkit文件拷贝到tf-faster-rnn/data路径下,并重命名为VOCdevkit2007,记得删除那个VOCdevkit的软连接。
六、下载预训练模型
需要*,如果翻不了墙就从网盘下载吧。
链接:https://pan.baidu.com/s/1F8VfDKjlq9x42ZDrrvfx2A 密码:8ahl
七、建立预训练模型的软连接
在tf-faster-rcnn目录下建立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 ../../..
八、对一些图片进行测试。
仍然按步骤走:
. GPU_ID=
. CUDA_VISIBLE_DEVICES=${GPU_ID} ./tools/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])
然后再按照步骤走就Ok了!
. GPU_ID=
. ./experiments/scripts/test_faster_rcnn.sh $GPU_ID pascal_voc_0712 res101
测试结果:
十、训练模型
这里按照步骤走可能会连不上外网,我把权重数据存网盘了。
网盘地址:https://pan.baidu.com/s/1aD0jlYGHhZQeeTvNJy0GGQ
密码:45ef
在data目录下创建一个imagenet_weights文件夹,解压权重数据并把解压后的vgg_16.ckpt重命名为vgg16.ckpy,因为后面在调用权重数据的时候需要对应的上。
开始训练(这里最后的vgg16就是对应的权重数据, 名字要对的上, 0是GPU的ID, pascal_voc是训练使用的数据集):
./experiments/scripts/train_faster_rcnn.sh pascal_voc vgg16
为了节省时间并排除错误,我把迭代次数只设置了20次,把
./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
训练过程的loss:
训练结果:
可以看到结果很差,因为就迭代了20轮。
十一、替换自己的数据
首先,在tf-faster-rcnn/lib/datasets目录下的pascal_voc.py里的第36行更改自己的类别,‘_background_'切记不可删掉,把后面的原来的20个label换成自己的,不用更改类别数目,也没有地方可以更改。
然后把你的xml文件放置在tf-faster-rcnn/data/VOCdevkit2007/Annotations路径下,记得把原来的删掉;同时把你的jpg文件放在
tf-faster/rcnn/data/VOCdevkit2007/VOC2007/JPEGImages路径下,xml和jpg替换完了,现在该txt了,把之前生成的四个txt文档放在tf-faster-rcnn/data/VOCdevkit2007/VOC2007/ImageSets/Layout 和tf-faster-rcnn/data/VOCdevkit2007/VOC2007/ImageSets/Main。
在开始训练之前,还需要把产生的模型以及cache删除掉,分别在tf-faster-rcnn/output/vgg16/voc_2007_trainval/default路径下和tf-faster-rcnn/data/cache路径下,然后就可以开始训练了:
./experiments/scripts/train_faster_rcnn.sh pascal_voc vgg16
因为我只训练了20轮,所以效果很差,不过能跑通就行了。
python3 + Tensorflow + Faster R-CNN训练自己的数据的更多相关文章
-
基于Tensorflow + Opencv 实现CNN自定义图像分类
摘要:本篇文章主要通过Tensorflow+Opencv实现CNN自定义图像分类案例,它能解决我们现实论文或实践中的图像分类问题,并与机器学习的图像分类算法进行对比实验. 本文分享自华为云社区< ...
-
写个神经网络,让她认得我`(๑•ᴗ•๑)(Tensorflow,opencv,dlib,cnn,人脸识别)
训练一个神经网络 能让她认得我 阅读原文 这段时间正在学习tensorflow的卷积神经网络部分,为了对卷积神经网络能够有一个更深的了解,自己动手实现一个例程是比较好的方式,所以就选了一个这样比较有点 ...
-
TensorFlow下利用MNIST训练模型识别手写数字
本文将参考TensorFlow中文社区官方文档使用mnist数据集训练一个多层卷积神经网络(LeNet5网络),并利用所训练的模型识别自己手写数字. 训练MNIST数据集,并保存训练模型 # Pyth ...
-
CNN tensorflow text classification CNN文本分类的例子
from:http://deeplearning.lipingyang.org/tensorflow-examples-text/ TensorFlow examples (text-based) T ...
-
faster r-cnn 在CPU配置下训练自己的数据
因为没有GPU,所以在CPU下训练自己的数据,中间遇到了各种各样的坑,还好没有放弃,特以此文记录此过程. 1.在CPU下配置faster r-cnn,参考博客:http://blog.csdn.net ...
-
R用户的福音︱TensorFlow:TensorFlow的R接口
------------------------------------------------------------ Matt︱R语言调用深度学习架构系列引文 R语言︱H2o深度学习的一些R语言实 ...
-
tensorflow faster rann
github 上大神的代码 https://github.com/endernewton/tf-faster-rcnn.git 在自己跑的过程中的问题: 1. 数据集的问题: 作者实现了 voc,co ...
-
用C++调用tensorflow在python下训练好的模型(centos7)
本文主要参考博客https://blog.csdn.net/luoyexuge/article/details/80399265 [1] bazel安装参考:https://blog.csdn.net ...
-
caffe学习三:使用Faster RCNN训练自己的数据
本文假设你已经完成了安装,并可以运行demo.py 不会安装且用PASCAL VOC数据集的请看另来两篇博客. caffe学习一:ubuntu16.04下跑Faster R-CNN demo (基于c ...
随机推荐
-
Hadoop示例程序WordCount详解及实例(转)
1.图解MapReduce 2.简历过程: Input: Hello World Bye World Hello Hadoop Bye Hadoop Bye Hadoop Hello Hadoop M ...
-
编解码-marshalling
JBoss的Marshalling序列化框架,它是JBoss内部使用的序列化框架,Netty提供了Marshalling编码和解码器,方便用户在Netty中使用Marshalling. JBoss M ...
-
自然数e这家伙怎么蹦跶出来的?
自然数e这家伙怎么蹦跶出来的? 之前看过一篇中文介绍自然数e的blog,引起了我的兴趣 原文是阮一峰大牛(我认为必须很有必要尊敬的称,大牛)嚼烂了吐出来的哈哈,只是我认为还是自己去看原文比較好 感觉非 ...
-
mac配置go使用gopm下载第三方包
打开zshrc文件 vim ~/.zshrc 输入变量 export GOPATH="/Users/chennan/go" #这个自定义 export GOBIN=$GOPATH/ ...
-
4939-Agent2-洛谷
传送门 emm... 这次没有原题了 (因为我懒) 就是一道很简单的树状数组 真的很简单很简单 只用到了一点点的差分 注意注意: 只用树状数组,不用差分会t掉的 所以.. 我不仅t了 还wa了 emm ...
-
【驱动】MTD子系统分析
MTD介绍 MTD,Memory Technology Device即内存技术设备 字符设备和块设备的区别在于前者只能被顺序读写,后者可以随机访问:同时,两者读写数据的基本单元不同. 字符设备,以字节 ...
-
ubuntu库文件路径pkgconfig
settings--->compiler and bug settings -->link settings 在左边添加libpthread.a ,右边添加 -lpthread即可. u ...
-
C#控件的Resize事件
1. 当控件大小发生改变时,就会触发该事件 所以适合动态调整UI的布局, 例如: 国际化,不同语言导致控件长度不同: 控件的内容是动态增加的,也可以使用. 2.必须是大小会发生改变的控件才会触发该事件 ...
-
Java的继承和多态
看了博客园里面的一个文章,关于java的继承和多态: class A ...{ public String show(D obj)...{ return ("A and D"); ...
-
在 Visual Studio中 使用Apache Cordova 开发安卓、iOS程序(自定义图标和闪屏)
方法1 1台安装有linux的电脑,虚拟机也行,并安装imagemagick软件包.我用的是linux mint,直接在软件管理器中安装即可 把https://github.com/shamork/c ...