ubuntu+Tensorflow+Faster R-CNN训练自己的数据

ubuntu+Tensorflow+Faster R-CNN训练自己的数据

代码链接
显卡 GTX 1050Ti

一、下载代码

git clone https://github.com/endernewton/tf-faster-rcnn.git

二、根据你的显卡更改下对应的计算单元

在tf-faster-rcnn/lib/setup.py的第130行,GTX 1050对应的是sm_61。可自行查看显卡对应的计算单元
若没有安装vim,先安装pip install vim

vim tf-faster-rcnn/lib/setup.py

三、编译Cython

编译Cython模块(确保你已经安装了easydict,如果没有,pip install easydict)

cd tf-faster-rcnn/lib/
make clean
make
cd ..

在makes时,我出现了以下问题:
g++: error: unrecognized command line option ‘-R’
error: command ‘g++’ failed with exit status 1
Makefile:2: recipe for target ‘all’ failed
make: *** [all] Error 1
经过查资料,找到解决办法:
先将报错的nms.gpu_nms模块注释后重新make,打开setup.py,在120-137行,注释掉nms.gpu_nms模块:

#    Extension('nms.gpu_nms',
#        ['nms/nms_kernel.cu', 'nms/gpu_nms.pyx'],
#        library_dirs=[CUDA['lib64']],
#        libraries=['cudart'],
#        language='c++',
#        runtime_library_dirs=[CUDA['lib64']],
        # this syntax is specific to this build system
        # we're only going to use certain compiler args with nvcc and not with gcc
        # the implementation of this trick is in customize_compiler() below
#       extra_compile_args={'gcc': ["-Wno-unused-function"],
#                            'nvcc': ['-arch=sm_61',
#                                     '--ptxas-options=-v',
#                                    '-c',
#                                     '--compiler-options',
#                                     "'-fPIC'"]},
#       include_dirs = [numpy_include, CUDA['include']]
#
#    )

然后先编译其他三个模块bbox,nms.cpu_nms,pycocotools._mask。
在这里插入图片描述
等到编译结束后,再回过来将上面的注释去掉,重新编译,会发现出现刚才的问题,此时,直接复制出错的命令,将其中的“-R”换成“-Wl,-rpath=”(已验证)或者”-Wl,-R”(已验证),再直接运行修改后的命令(如下):

g++ -pthread -shared -B /home/slam/anaconda3/compiler_compat -L/home/slam/anaconda3/lib -Wl,-rpath=/home/slam/anaconda3/lib,--no-as-needed build/temp.linux-x86_64-3.6/nms/nms_kernel.o build/temp.linux-x86_64-3.6/nms/gpu_nms.o -L/usr/local/cuda/lib64 -L/home/slam/anaconda3/lib -R/usr/local/cuda/lib64 -lcudart -lpython3.6m -o /home/slam/tf-faster-rcnn/lib/nms/gpu_nms.cpython-36m-x86_64-linux-gnu.so

最后我们再重新运行一下make命令(注意此时setup.py恢复与以前一样),发现所有的模块都已经编译完成。

[caiyong.wang@localhost lib]$ make
python setup.py build_ext --inplace
running build_ext
skipping 'utils/bbox.c' Cython extension (up-to-date)
skipping 'nms/cpu_nms.c' Cython extension (up-to-date)
skipping 'nms/gpu_nms.cpp' Cython extension (up-to-date)
skipping 'pycocotools/_mask.c' Cython extension (up-to-date)
rm -rf build

四、安装COCO API。

这点按照GitHub的步骤走就ok,没啥错误:

cd data
git clone https://github.com/pdollar/coco.git
cd coco/PythonAPI
make
cd ../../..

五、下载数据

下载VOC数据集

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/                           # development kit
$VOCdevkit/VOCcode/                   # VOC utility code
$VOCdevkit/VOC2007                    # image sets, annotations, etc.
# ... and several other directories ...

修改数据集名称

cd $FRCN_ROOT/data
ln -s $VOCdevkit VOCdevkit2007

或者可以直接下载解压好把VOCdevkit文件夹拷贝到tf-fater-rcnn/data路径下,注意需要修改名称为VOCdevkit2007。

六、下载预训练模型

这里下载的是resnet101,也可以下载vgg16(自己下载vgg16

  # Resnet101 for voc pre-trained on 07+12 set
  ./data/scripts/fetch_faster_rcnn_models.sh
   cd data/imagenet_weights
   wget -v http://download.tensorflow.org/models/resnet_v1_101_2016_08_28.tar.gz
   tar -xzvf resnet_v1_101_2016_08_28.tar.gz
   mv resnet_v1_101.ckpt res101.ckpt
   cd ../..

七、测试

用几张图片进行测试,这里可以进行网络模型修改

GPU_ID=0
CUDA_VISIBLE_DEVICES=${GPU_ID} ./tools/demo.py

用resnet101进行测试

 GPU_ID=0
 ./experiments/scripts/test_faster_rcnn.sh $GPU_ID pascal_voc_0712 res101

八、训练

mkdir -p data/imagenet_weights
cd data/imagenet_weights 
wget -v http://download.tensorflow.org/models/resnet_v1_101_2016_08_28.tar.gz
tar -xzvf resnet_v1_101_2016_08_28.tar.gz
mv resnet_v1_101.ckpt res101.ckpt
cd ../..

开始训练(这里最后的res101就是对应的权重数据,名字要对的上,0是GPU的ID,pascal_voc是训练使用的数据集):

./experiments/scripts/train_faster_rcnn.sh 0 pascal_voc res101

训练过程
在这里插入图片描述
可以修改迭代次数比如迭代次数只设置了200次,把./experiments/scripts/train_faster_rcnn.sh里的第22行把ITERS=70000改成ITERS=200,同时记得把./experiments/scripts/test_faster_rcnn.sh的ITERS也改成200。
注意:因为我使用的是pascal_voc数据集,所以只需要更改对应数据集的ITERS的就行了,训练和测试的都要改,因为在train_faster_rcnn.sh的末尾会执行test_faster_rcnn.sh。

九,标注自己的数据集

这里参考这位博主博客
在替换数据之前,先介绍一下标注工具,用的labelImg或者labelme对数据进行标注。可自行查看如何标注,有博客详细介绍的。。。
重要的数据格式介绍,xml数据格式

<annotation>
	<folder>fire_data</folder>
	<filename>000001.jpg</filename>    #图像名称
	<path>/home/htu/yc/fire_data/000001.jpg</path>    #路径
	<source>
		<database>Unknown</database>
	</source>
	<size>
		<width>450</width>    #宽
		<height>253</height>    #高
		<depth>3</depth>    #RGB三通道
	</size>
	<segmented>0</segmented>
	<object>
		<name>fire</name>    #目标名称
		<pose>Unspecified</pose>    
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>    #BBOX值
			<xmin>146</xmin>
			<ymin>22</ymin>
			<xmax>207</xmax>
			<ymax>60</ymax>
		</bndbox>
	</object>
</annotation>

其中需要说明的是:图像名称一定要命名为000001.jpg,以及xml也要命名为000001.xml格式(事实上如果你对图像名称是六位数字组成的,xml也会自动生成六位数字)
xml数据准备完毕后,需要划分训练验证以及测试集划分代码这个代码是matlab的,下载后更改下VOC2007txt.m中的路径就能用了。执行结果会按比例对你的数据划分为训练集验证集以及测试集,同时会生成四个txt文档,分别是test.txt,train.txt,trainval.txt,val.txt。
首先,在tf-faster-rcnn/lib/datasets目录下的pascal_voc.py里第36行更改自己的类别,__background__切记不可删掉,把后面的原来的20个label换成自己的,不用更改类别数目,也没有地方可以更改。

然后把你的xml文件放置在
tf-faster-rcnn/data/VOCdevkit2007/VOC2007/Annotations路径下,记得把原来的删掉;同时把你的jpg文件放在
tf-faster-rcnn/data/VOCdevkit2007/VOC2007/JPEGImages路径下,xml和jpg替换完了,现在该txt了,把之前matlab生成是四个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 0 pascal_voc res101
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值