用自己的数据训练Faster-RCNN,tensorflow版本(一)

我用的Faster-RCNN是tensorflow版本,fork自githubFaster-RCNN_TF

参考
http://www.cnblogs.com/CarryPotMan/p/5390336.html

1、按照Faster-RCNN_TF中的步骤,先在本地完成编译。

1.1、环境配置

按照该项目中的README.md ,将需要的几个依赖cython, python-opencv, easydict都安装好,并确保本地计算机中有tensorflow,没有的话自行安装;

1.2、克隆工程:在本地计算机的终端输入

git clone --recursive https://github.com/smallcorgi/Faster-RCNN_TF.git

下载下来的内容都在目录 Faster-RCNN_TF 下;

1.3、编译Cython模块

cd $FRCN_ROOT/lib # 首先进入目录Faster-RCNN_TF/lib
make #编译

编译成功之后,目录Faster-RCNN_TF/lib/nms 和 Faster-RCNN_TF/lib/roi_pooling_layer/ 和Faster-RCNN_TF/lib/utils下面会出现一些.so文件。

注意:如果在这时候,你将该工程原封不动的连带着.so文件一起移植到了另一台电脑上,想重新运行程序的时候,记住,要先删除这几个.so文件,并重新进行编译。因为编译生成的文件是只适应本台计算机的,换一台计算机之后,用原来的.so文件,就行不通了,程序会出错。并且,必须要先删除旧的.so文件,否则就会调用旧的.so文件,而不生成新的.so文件。

2、介绍一下pascal_voc数据集的数据读写接口

工程Faster-RCNN_TF中读取数据的接口都在目录Faster-RCNN_TF/lib/datasets下。

原工程提供了5种数据来训练网络,并分别给出了各自的数据读写接口。
5种数据分别是pascal_voc,coco,kitti,nissan,nthu,各自的数据读写接口分别是Faster-RCNN_TF/lib/datasets 中的pascal_voc.py,coco.py,kitti.py,nissan.py,nthu.py。

我们可以看到Faster-RCNN_TF/lib/datasets目录下还有一些.py文件,分别是:
factory.py:是个工厂类,用类生成imdb类并且返回数据库供网络训练和测试使用
imdb.py:是数据库读写类的基类,分装了许多db的操作,具体的一些文件读写需要继承继续读写

我们要用自己的数据进行训练,就得编写自己数据的读写接口,下面参考pascal_voc.py来编写。

2.1、首先说明一下pascal_voc数据集的格式

以VOC2007为例,数据都放在一个叫做VOCdevkit的目录中,我们来看一下目录VOCdevkit的结构:

VOCdevkit/
VOCdevkit/VOC2007/
VOCdevkit/VOC2007/Annotations #所有图片的XML文件,一张图片对应一个XML文件,XML文件中给出的图片gt的形式是左上角和右下角的坐标

VOCdevkit/VOC2007/ImageSets/          
VOCdevkit/VOC2007/ImageSets/Layout #里面有三个txt文件,分别是train.txt,trainval.txt,val.txt,存储的分别是训练图片的名字列表,训练验证集的图片名字列表,验证集图片的名字列表(名字均没有.jpg后缀)
VOCdevkit/VOC2007/ImageSets/Main
VOCdevkit/VOC2007/ImageSets/Segmentation

VOCdevkit/VOC2007/JPEGImages  #所有的图片

VOCdevkit/VOC2007/SegmentationClass  #segmentations by class

VOCdevkit/VOC2007/SegmentationObject  #segmentations by object

Faster-RCNN_TF工程主要用到的是目录Annotations中的XML文件、目录JPEGImages中的图片、目录ImageSets/Layout中的txt文件。

2.2、然后解释一下pascal_voc.py中每个的函数的作用
主函数 if name == ‘main在文件pascal_voc.py的最下面

if __name__ == '__main__':
    from datasets.pascal_voc import pascal_voc
    d = pascal_voc('trainval', '2007') #pascal_voc是一个类
    res = d.roidb
    from IPython import embed; embed()

类 pascal_voc中的函数:
class pascal_voc(imdb):
def init(self, image_set, year, devkit_path=None)在文件pascal_voc.py的最上面
是初始化函数,对应着的是pascal_voc的数据集访问格式
(我会按照这个初始化函数里面用到的子函数的顺序来介绍每个子函数的作用,这样看比较直观。在这个初始化函数init中用到的每个子函数我都会有一个标号,方便介绍。)

'''
是初始化函数,对应着的是pascal_voc的数据集访问格式

:param image_set: 是一个str,值是'train'或者'test'或者'trainval'或者'val',表示的意思是用(训练集)或者(测试集)或者(训练验证集)或者(验证集)里面的数据;
:param year: 是一个str,是VOC数据的年份,值是'2007'或者'2012'
:param devkit_path: pascal_voc数据集所在的路径
'''
'''
以下的image_set都以train为例
year都以2007为例
'''
def __init__(self, image_set, year, devkit_path=None): 
    imdb.__init__(self, 'voc_' + year + '_' + image_set) # 继承了类imdb的初始化函数__init__(),传进去的参数是voc_2007_train。类imdb在Faster-RCNN_TF_R2/lib/datasets/imdb.py里面被定义
    self._year = year 
  • 20
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值