Faster RCNN(py caffe)工程各个目录的作用:
- caffe-fast-rcnn:caffe框架目录;
- data:用来存放pretrained(预训练)模型以及读取文件的cache缓存,还有一些下载模型的脚本;
- experiments:存放配置文件以及运行的log文件,另外这个目录下有scripts,里面存放end2end和alt_opt两种训练方式的脚本;
- lib:用来存放一些python接口文件,如其下的datasets主要负责数据库读取,config负责一些训练的配置选项;
- models:里面存放了三个模型文件,小型网络ZF,中型网络VGG_CNN_M_1024以及大型网络VGG16,根据你的硬件条件来选择使用哪种网络,ZF和VGG_CNN_M_1024需要至少3G内存,VGG16需要更多的内存,但不会超过11G;
- output:这里存放的是训练完成后的输出目录,这是运行了训练后才会出现的目录;
- tools:里面存放的是训练和测试的Python文件;
一、简单修改,用Pascal Voc 2007 格式,仅替换其中的XML文件及图片等
用自己数据集图片标签等替换原来的pascal voc
- 用自己要训练的图片/数据集替换
FRCN_ROOT/data/VOCdevkit2007/VOC2007/JPEGImages/
下的图片; - 用自己数据集对应的标签替换
FRCN_ROOT/data/VOCdevkit2007/VOC2007/Annotations/
目录下的XML文件; - 用自己做的train.txt、val.txt、trainval.txt、待检测目标_train.txt、待检测目标_val.txt、待检测目标_trainval.txt(如:insulator_train.txt)等txt文件替换
FRCN_ROOT/data/VOCdevkit2007/VOC2007/ImageSets/Main/
目录下的txt文件;
修改prototxt配置文件
这些配置文件都在FRCN_ROOT/models/pascal_voc/
下。里面有三种网络结构:VGG16、VGG_CNN_M_1024、ZF,本文选择的是ZF 。每个网络结构中都有三个文件夹,分别是faster_rcnn_alt_opt、faster_rcnn_end2end、faster_rcnn;
(网上说:使用近似联合训练,比交替优化快1.5倍,但是准确率相近,所以推荐使用这种方法)所以,更改faster_rcnn_end2end文件夹下的train.prototxt和test.prototxt:
修改train.prototxt
所在目录:/home/xu/FRCN_ROOT/models/pascal_voc/ZF/faster_rcnn_end2end/test.prototxt
)中需要更改的地方有三处(按顺序寻找修改):
- 第一处是’input-data’层:
将num_output
原来的21(目标20种+背景1种=21)改为:数据集目标类别数+1:
-
第四处是roi-data层:
num_classes
的值改为:数据集目标类别数+1: -
第二处是cls_score层:
num_output
修改原理同第一处:
- 第三处是bbox_pred层,在这里需将
num_output
原来的84改为:(目标类别数+1)×4,原来的是(20+1)*4=84:
test.prototxt
- 其中没有input-data层,所以只需按照train中的修改cls_score层以及bbox_pred层即可:
修改lib/datasets/pascal_voc.py,将类别改成自己的类别
进入RCN_ROOT/lib/datasets/
,找到pascal_voc.py文件,将类别修改为自己数据集的目标类别:
datasets目录下主要有三个文件,分别是
(1) factory.py:这是一个工厂类,用类生成imdb类并且返回数据库供网络训练和测试使用;
(2) imdb.py:是数据库读写类的基类,封装了许多db的操作;
(3) pascl_voc.pyRoss用这个类来操作;
开始训练
cd FRCN_ROOT
./experiments/scripts/faster_rcnn_end2end.sh 0 ZF pascal_voc
由于训练过程太长,可以将训练过程产生的输出定向输入到log文件中,这样可方便查看。只需在上述命令中加入定向输入的命令即可,如下:
./experiments/scripts/faster_rcnn_end2end.sh 0 ZF pascal_voc > /home/xu/log/clothdirector.log 2>&1
!!!训练前需要将cache中的pki文件以及VOCdevkit2007中annotations_cache的缓存删掉。