小鱼最近在caffe上用faster rcnn网络进行目标的检测,但是网络是先按设置好的训练迭代次数进行训练,得到训练模型之后进行一次性的测试(这里小鱼认为是验证更合理),最终网络得到的输出只有train net output的四个输出。下面为某次迭代的输出结果:
I1224 13:55:23.250411 16953 solver.cpp:229] Iteration 20000, loss = 0.179466
I1224 13:55:23.250457 16953 solver.cpp:245] Train net output #0: loss_bbox = 0.0858043 (* 1 = 0.0858043 loss)
I1224 13:55:23.250463 16953 solver.cpp:245] Train net output #1: loss_cls = 0.106088 (* 1 = 0.106088 loss)
I1224 13:55:23.250465 16953 solver.cpp:245] Train net output #2: rpn_cls_loss = 0.000335818 (* 1 = 0.000335818 loss)
I1224 13:55:23.250469 16953 solver.cpp:245] Train net output #3: rpn_loss_bbox = 0.00807029 (* 1 = 0.00807029 loss)
I1224 13:55:23.250474 16953 sgd_solver.cpp:106] Iteration 20000, lr = 0.001
但是只得到训练阶段的结果没有太大的意义,如果可以让网络边训练边测试,并且输出自己想要的结果那就完美了。
A.实现让网络边训练边测试方法
有两个地方需要改,第一是solver.prototxt文件
train_net: "models/pascal_voc/VGG16/faster_rcnn_end2end/train.prototxt"
test_net: "models/pascal_voc/VGG16/faster_rcnn_end2end/test.prototxt"
test_iter:10
test_interval:100
加入训练和测试的配置文件,并且加入训练多少次测试一次的参数。
其中test_iter为测试时要迭代的次数,iter_iter*batchsize要等于或大于测试集的数量
test_interval表示训练的时候每迭代多少次进行一次训练
关于改两个参数还有不懂可参考:test_iter test_interval等概念
第二个需要修改的地方为train.prototxt文件,加入你想要的输出层,比如这里是加入accuracy精度层
layer {
name: "accuracy"
type: "Accuracy"
bottom: "cls_score"
bottom: "labels