问题解决:YOLOv3 自动计算各个数据集中每个类别的数量

YOLOv3 自动计算各个数据集中每个类别的数量

虽然功能实现了,方法也很简单,但算不是最上层的方法。

步骤0:

已知:
进行批量测试的时候,使用./darknet detector valid cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_final.weights输出文本检测结果后,会在darknet/results文件夹中生成comp4_det_test_类名.txt(一个类别对应一个txt文件,有多少类别,就产生多少个txt文件)。

随便打开一个txt文件,里面的内容简单示例如下。每行都是一个目标。这样的话,看一下文件总共有多少行,就能得到这个类别对应的目标个数(直接打开每个类别的txt文件,鼠标点到最后一行,看一下右下角的行数)。

008681 0.999982 565.763733 1311.388672 633.671326 1377.522949
008683 0.999982 565.872070 1315.253906 635.104248 1377.797363
008690 0.999984 523.559265 1306.766113 585.476746 1366.243652
008692 0.999964 523.111206 1306.916748 586.848389 1367.439697
008705 0.999984 530.645020 1291.177368 596.593750 1356.693970
008724 0.999983 533.842834 1291.449829 603.227844 1355.802612

以下是darknet/example/detector.c中的validate_detector函数。如下第43行处的“comp4_det_test_“是最终生成的文件的前缀名,是哪个种类,后面就会加上种类名。

void validate_detector(char *datacfg, char *cfgfile, char *weightfile, char *outfile)
{
   
    int j;
    list *options = read_data_cfg(datacfg);
    char *valid_images = option_find_str(options, "valid", "data/test.list");
    char *name_list = option_find_str(options, "names", "data/names.list");
    char *prefix = option_find_str(options, "results", "results");
    char **names = get_labels(name_list);
    char *mapf = option_find_str(options, "map", 0);
    int *map = 0;
    if (mapf) map = read_map(mapf);

    network *net = load_network(cfgfile, weightfile, 0);
    set_batch_network(net, 1);
    fprintf(stderr, "Learning Rate: %g, Momentum: %g, Decay: %g\n", net->learning_rate, net->momentum, net->decay);
    srand(time(0));

    list *plist = get_paths(valid_images);
    char **paths = (char 
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值