从E,P,T 下手调节代码,梳理作者思路
综合分析
E:
类别名的修改
训练集标注
训练集测试集的拆分
数据处理:训练尺寸:最小尺寸和最大尺寸
P:
预训练权重
rpn框数
T:
学习率
最大迭代次数
保存模型迭代次数
详细步骤
首先可以肯定的是代码以 experiments文件 中的 脚本文件scripts 开头
我们以 rfcn_end2end_ohem.sh 为案例开始梳理
期间调用了很多的配置文件需要我们修改,我们逐个分析:
一:运行文件
rfcn_end2end_ohem.sh 为第一个修改内容,它是一个运行整个程序的脚本文件,可以修改的地方是第一个pascal_voc中的iters迭代次数 ITERS
同时我们也看到了三个配置文件的路径
TRAIN_IMDB :训练集路径
TEST_IMDB:测试集路径
PT_DIR:配置路径
都需要进行修改,但这三个我们暂时不去理会
二:配置文件
同样在experiments文件下有一个叫cfgs的文件夹,其中放了相对脚本的配置文件
所以我们修改的是 rfcn_end2end_ohem.yml 其中可以修改的参数是
SNAPSHOT_ITERS:参数,循环多少次,保存一次模型
RPN_POST_NMS_TOP_N : 选取多少个rpn框
三:数据安放
这时候就需要我们对EPT思路有所理解了,E代表数据,所以我们就先处理数据
首先我们要建立一个类似下面的结构,Annotations 存放xml文件 ,JPEGimages 存放图片 , Main存放图片名字类型的txt
然后将整个ImageSets文件放入data文件夹下,阅读readme即可知详细位置
Please copy this folder to $RFCN_ROOT/data/VOCdevkit0712/VOC0712
根据readme内容可知,最后的路径在
四:修改类名
在lib文件夹下的 datasets/pascal_voc 是修改类名的py文件
同时在 fast_rcnn/config 中可以修改图片尺度大小的配置,完成多尺度训练
配置最大尺度和最小尺度
五:添加网络
在data文件中 的imagenet_models 下添加主干网络,没有则新建,阅读readme即可得到下载网址
./data/scripts/fetch_imagenet_models.sh
六:迭代修改
model/pascal_voc/ResNet-50/rfcn_end2ends/solver_ohem.prototxt :
①调整学习率,多少次降低一次学习率,打印跨数
②模型名称 snapshot_prefix = “ ”
model/pascal_voc/ResNet-50/rfcn_end2ends/train_agnostic_ohem.prototxt 和 test_agnostic.prototxt 相同
①类别数
②搜索PSROIPooling 修改num_output
③修改position sensitive ROI pooling 输出
output
group_size
文件分析:
data:
新建cache(贮存器) 所有的标签读取起来,然后放在一起
* 要常清理,默认有的话会直接读取,但我们的数据时有改变
* 还记录了对数据集的所有操作,相当于日志
imagenet_models:主干网络
main:分配好训练集和测试集的图片名,不需要后缀
experiments:
cfgs:配置参数
logs:观看日志可知后台是否在运行程序
scripts:代码运行文件
lib:库
rpn:pyc是py编译的中间过程,是rcnn的主要文件
datasets:
pascal_voc:
1.编辑类名
2.问题1:而此代码的pascal设置第一位是1,所以减一
问题2:有的图片设置位置超出区域后会转回来
可以设置临界点,比如大于20就规定20
fast_rcnn:
config:控制是否多尺度训
model:
pascal_voc:
ResNet-50:
rfcn_end2ends:
solver_ohem.prototxt
①调整学习率,多少次降低一次学习率,打印跨数
②模型名称 snapshot_prefix = “ ”
train_agnostic_ohem.prototxt
①类别数
②搜索ps 修改num_output
③修改position sensitive ROI pooling 输出
output
group_size