运行环境:cpu
训练图片大小为300*330,类别数11。
1.修改VGG_CNN_M_1024模型配置文件
1)solver.protxt文件
- stepsize原先为10000,根据需要更改。
2)train.protxt文件
- “input-data”层的‘num_class’数值改为11;
“rpn-data”层的feat_stride由原先的16改为8;“proposal”层的feat_stride也改为8;- 'roi-data'层的‘num_class’数值改为11;
roi_pool5层的spatial_scale改为0.125(即1/8,与前面的feat_stride对应);- cls_score层的num_output数值改为11(1+10);
- bbox_pred层的num_output数值改为44(11*4);
3)test.prototxt文件
- cls_score层的num_output数值改为11(1+10);
- bbox_pred层的num_output数值改为44(11*4);
roi_pool5层的spatial_scale改为0.125;
proposal层的param_str: "'feat_stride': 8";
4)lib/fast_rcnn文件夹中的config.py文件
- __C.TRAIN.SCALES = (300,) #原先为600
- __C.TRAIN.MAX_SIZE =330 #原先为1000
- __C.TRAIN.SNAPSHOT_ITERS = 自己想要的迭代次数,用于存储中间结果。原先为10000
- __C.TEST.SCALES = (300,)#原先为600
- __C.TEST.MAX_SIZE = 330 #原先为1000;
5)lib/rpn/generate_anchors.py
generate_anchors(base_size=16, ratios=[0.5, 1, 2],
scales=2**np.arange(3, 6)):
改为
base_size=8, ratios=[0.5, 1, 2],
scales=[8,12,16]):
6)lib/rpn/propsoal_layer.py
原先anchor_scales = layer_params.get('scales', (8, 16, 32))#(8, 16, 32)应该就是2**np.arange(3, 6)
所以改为anchor_scales = layer_params.get('scales', (8, 12, 16))
7)lib/datasets/pascal_voc.py文件
修改self._classes = ('__background__', # always index 0
'训练的数据类别')
'训练的数据类别')
现在想到的就是这些,可能还有需要修改的地方。
大家如果看到我还有遗漏未改的地方殷切希望帮我指出来,毕竟参数对训练太重要了!!!
测试模型时需要改的文件
1、faster_rcnn_test.pt
cls_score层的num_output改为11;
bbox_pred层的num_output改为44;
上面划掉的句子不能这么改,否则会导致训练时loss大且不收敛!