caffe-ssd修改solver.cpp来绘制每一个类的pr曲线

caffe-ssd绘制每个类的pr曲线

1 solver.cpp

进入到caffe-ssd/src/caffe目录下,打开solver.cpp。查看第540行,不同版本可能所在行不同

if (param_.show_per_class_result()) {
        LOG(INFO) << "class" << label << ": " << APs[label];
      }

以上代码含义是:读取solver.prototxt配置文件中的show_per_class_result参数,若show_per_class_result:true,则在测试的LOG日志中打印每个类别的Average precision。变量APs是一个map,labels->AP。

这里我们把代码作如下修改,我们引入了一个config控制参数——show_pr:

      if (param_.show_per_class_result()) {
        LOG(INFO) << "class" << label << ": " << APs[label];
        if(param_.show_pr()) 
        {
          for(int i=0;i<p_r.size();i++)
          {
            LOG(INFO) << "p-r value: " << p_r[i]; // 打印11个点的precision p_r value(11points)
          }
         //write this vector to a txt file
         //FILE *f = NULL;
         //f = fopen("/home/bzhang/scripts/0.txt", "w");
         //for(int i=0;i<p_r.size();i++)
         //{
         //  fprintf(f, "%f\n", p_r[i]);
         //}
         //fclose(f);
        }  
      }

2 caffe.proto

对应在caffe-ssd/src/caffe/proto/caffe.proto目录中需要修改,在message SolverParameter中添加

optional bool show_pr = 45 [default = false];

重新make caffe-ssd

3 solver.prototxt

最后在solver.prototxt中将变量值设置为true,即可以在测试阶段打印11point value的每一个点的precision,如下:

eval_type: "detection"
ap_version: "11point"
show_per_class_result: true
show_pr_value: true
I0803 12:11:09.125557  5295 solver.cpp:332] Iteration 50000, loss = 1.73973
I0803 12:11:09.125603  5295 solver.cpp:433] Iteration 50000, Testing net (#0)
I0803 12:11:09.155922  5295 net.cpp:693] Ignoring source layer mbox_loss
I0803 12:11:09.688741  5295 blocking_queue.cpp:50] Data layer prefetch queue empty
I0803 12:11:33.173079  5295 solver.cpp:541] class1: 0.675248
I0803 12:11:33.173399  5295 solver.cpp:546] p-r value: 0
I0803 12:11:33.173429  5295 solver.cpp:546] p-r value: 0
I0803 12:11:33.173437  5295 solver.cpp:546] p-r value: 0.300709
I0803 12:11:33.173451  5295 solver.cpp:546] p-r value: 0.635739
I0803 12:11:33.173460  5295 solver.cpp:546] p-r value: 0.757143
I0803 12:11:33.173466  5295 solver.cpp:546] p-r value: 0.863636
I0803 12:11:33.173473  5295 solver.cpp:546] p-r value: 0.931035
I0803 12:11:33.173480  5295 solver.cpp:546] p-r value: 0.979167
I0803 12:11:33.173488  5295 solver.cpp:546] p-r value: 0.979167
I0803 12:11:33.173496  5295 solver.cpp:546] p-r value: 0.981132
I0803 12:11:33.173502  5295 solver.cpp:546] p-r value: 1
I0803 12:11:33.183303  5295 solver.cpp:541] class2: 0.666951
I0803 12:11:33.183322  5295 solver.cpp:546] p-r value: 0
I0803 12:11:33.183331  5295 solver.cpp:546] p-r value: 0
I0803 12:11:33.183337  5295 solver.cpp:546] p-r value: 0
I0803 12:11:33.183344  5295 solver.cpp:546] p-r value: 0.686239
I0803 12:11:33.183351  5295 solver.cpp:546] p-r value: 0.814721
I0803 12:11:33.183359  5295 solver.cpp:546] p-r value: 0.892977
I0803 12:11:33.183367  5295 solver.cpp:546] p-r value: 0.972973
I0803 12:11:33.183373  5295 solver.cpp:546] p-r value: 0.982456
I0803 12:11:33.183380  5295 solver.cpp:546] p-r value: 0.993548
I0803 12:11:33.183388  5295 solver.cpp:546] p-r value: 0.993548
I0803 12:11:33.183396  5295 solver.cpp:546] p-r value: 1
I0803 12:11:33.194922  5295 solver.cpp:541] class3: 0.581691
I0803 12:11:33.194939  5295 solver.cpp:546] p-r value: 0
I0803 12:11:33.194947  5295 solver.cpp:546] p-r value: 0
I0803 12:11:33.194954  5295 solver.cpp:546] p-r value: 0
I0803 12:11:33.194960  5295 solver.cpp:546] p-r value: 0.0258479
I0803 12:11:33.194967  5295 solver.cpp:546] p-r value: 0.677273
I0803 12:11:33.194975  5295 solver.cpp:546] p-r value: 0.854167
I0803 12:11:33.194981  5295 solver.cpp:546] p-r value: 0.910714
I0803 12:11:33.194988  5295 solver.cpp:546] p-r value: 0.948454
I0803 12:11:33.194994  5295 solver.cpp:546] p-r value: 0.982143
I0803 12:11:33.195001  5295 solver.cpp:546] p-r value: 1
I0803 12:11:33.195008  5295 solver.cpp:546] p-r value: 1
I0803 12:11:33.197314  5295 solver.cpp:541] class4: 0.694746
I0803 12:11:33.197352  5295 solver.cpp:546] p-r value: 0
I0803 12:11:33.197368  5295 solver.cpp:546] p-r value: 0
I0803 12:11:33.197376  5295 solver.cpp:546] p-r value: 0.476548
I0803 12:11:33.197386  5295 solver.cpp:546] p-r value: 0.692547
I0803 12:11:33.197392  5295 solver.cpp:546] p-r value: 0.797521
I0803 12:11:33.197401  5295 solver.cpp:546] p-r value: 0.861702
I0803 12:11:33.197408  5295 solver.cpp:546] p-r value: 0.916084
I0803 12:11:33.197417  5295 solver.cpp:546] p-r value: 0.93578
I0803 12:11:33.197423  5295 solver.cpp:546] p-r value: 0.962025
I0803 12:11:33.197432  5295 solver.cpp:546] p-r value: 1
I0803 12:11:33.197439  5295 solver.cpp:546] p-r value: 1
I0803 12:11:33.197823  5295 solver.cpp:541] class5: 0.727871
I0803 12:11:33.197835  5295 solver.cpp:546] p-r value: 0
I0803 12:11:33.197850  5295 solver.cpp:546] p-r value: 0
I0803 12:11:33.197857  5295 solver.cpp:546] p-r value: 0.547264
I0803 12:11:33.197865  5295 solver.cpp:546] p-r value: 0.813559
I0803 12:11:33.197873  5295 solver.cpp:546] p-r value: 0.88
I0803 12:11:33.197881  5295 solver.cpp:546] p-r value: 0.922078
I0803 12:11:33.197888  5295 solver.cpp:546] p-r value: 0.95082
I0803 12:11:33.197896  5295 solver.cpp:546] p-r value: 0.964286
I0803 12:11:33.197904  5295 solver.cpp:546] p-r value: 0.964286
I0803 12:11:33.197911  5295 solver.cpp:546] p-r value: 0.964286
I0803 12:11:33.197919  5295 solver.cpp:546] p-r value: 1
I0803 12:11:33.197928  5295 solver.cpp:563]     Test net output #0: detection_eval = 0.669301

利用每一个class的每一个precision来绘制pr曲线

绘制pr曲线

这里推荐自己写一个parsing log日志的脚本,将log日志的p-r value值读出,保存到另一个文件,供绘制pr曲线代码调用。

这里写图片描述

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值