标签:深度学习 Linux
Platform:ubuntu 16.04 LTS + CUDA 8.0 + OPENCV 2.4.13 + Python 2.7
demo已经成功跑完,但是训练数据集,或者更普遍的,训练自己的数据集该怎么搞呢? 请看下文,这里以Pascal VOC 2007为例:
下载Pascal VOC 2007
这里参照的是py-faster-rcnn的Beyond the demo: installation for training and testing models
下载三个文件
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
在data目录下,新建一个VOCdevkit2007
文件夹,将这三个文件解压至此:
tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar
下载ImageNet预训练模型
在py-faster-rcnn根目录下执行脚本:
./data/scripts/fetch_imagenet_models.sh
修改头文件protocol bufffers(以下简称protobuf)
faster rcnn有两种各种训练方式:
- Alternative training(alt-opt)
- Approximate joint training(end-to-end)
这一部分是我觉得最坑的地方,没有人告诉我要改这个,只要一执行训练脚本
./experiments/scripts/faster_rcnn_alt_opt.sh 0 ZF pascal_voc
或者
./experiments/scripts/faster_rcnn_end2end.sh 0 ZF pascal_voc
就会报错:
AttributeError: 'module' object has no attribute 'text_format'
查看Python脚本,原来是protobuf出了问题,这里需要修改lib/fast_rcnn/train.py的头文件,增加一行:
import google.protobuf.text_format
顺便吐槽一下这里搞了好久,应该是protobuf更新太快了,建议作者写出protobuf的版本!!!然后执行训练脚本就行了。
第一阶段迭代完成后报错:
TypeError: 'numpy.float64' object cannot be interpreted as an index
将numpy降级:
sudo pip install -U numpy==1.11.0
看到没有,这里还需要降级numpy,真是醉了
阅读Pascal VOC文档的一些所得:
- 该图像集分为训练/验证集和测试集两个部分,在跑faster-rcnn的时候是混在一起的,只通过ImageSets下的txt文件来区分图像到底属于哪个集合,实际上faster-rcnn只用到了Main文件夹下的txt文件,我们自己做图像集的时候可以只做这个文件夹下的内容。
- Main文件夹下的有train,trainval,val,test四个文件,这是所有图像的集合,可以打开看到这里没有加类标签。其他前面加上前缀类标的同名文件也是所有图像的集合,但后面如果是1代表是本类(正样本),-1代表不是本类(负样本),0代表不确定(模糊样本,多出现在test文件里)。从集合的观点可以这么理解,所有类样本名的集合构成了以上四个文件。制作这四个文件的脚本以后会发的~~