• 项目背景
    在yolo-v2生成D:\dahuangfeng\darknet-master\build\darknet\x64\backup路径下的权重文件
    后,我们先需要先修改D:\dahuangfeng\darknet-master\build\darknet\x64路径下的test_obj.cmd文件,将操作对象修改成我们需要测试的权重文件,
    然后运行test_obj.cmd程序,程序加载权重文件并开始运行,
    运行完毕后,取输出最后一行作为我们测试需要的结果,将其取样并写入指定txt文件并保存。

    然后按照上述步骤循环测试后面的权重文件。太多太累太麻烦,于是便想写一个批处理程序。
  • 预设步骤
    1、建立列表,将权重文件序号填写进去。
    2、读取列表,打开test_obj.cmd文件,运用正则化参数修改保存序号。
    3、运行test_obj.cmd文件,取最后行输出,用正则化参数提取数据并写入输出文件。

在visual studio中,打开detector.c文件,直接在validate_detector_recall()函数中加入“创建Test_Weight_Files.txt文件并将输出结果写入”的代码:

void validate_detector_recall(char *datacfg, char *cfgfile, char *weightfile)
{network net = parse_network_cfg_custom(cfgfile, 1);if(weightfile){load_weights(&net, weightfile);}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 *options = read_data_cfg(datacfg);char *valid_images = option_find_str(options, "valid", "data/train.txt");list *plist = get_paths(valid_images);char **paths = (char **)list_to_array(plist);layer l = net.layers[net.n-1];int classes = l.classes;int j, k;box *boxes = calloc(l.w*l.h*l.n, sizeof(box));float **probs = calloc(l.w*l.h*l.n, sizeof(float *));for(j = 0; j < l.w*l.h*l.n; ++j) probs[j] = calloc(classes, sizeof(float *));int m = plist->size;int i=0;float thresh = .2;// .001;float iou_thresh = .5;float nms = .4;int total = 0;int correct = 0;int proposals = 0;float avg_iou = 0;for(i = 0; i < m; ++i){char *path = paths[i];image orig = load_image_color(path, 0, 0);image sized = resize_image(orig, net.w, net.h);char *id = basecfg(path);network_predict(net, sized.data);get_region_boxes(l, 1, 1, thresh, probs, boxes, 1, 0);if (nms) do_nms(boxes, probs, l.w*l.h*l.n, 1, nms);char labelpath[4096];find_replace(path, "images", "labels", labelpath);find_replace(labelpath, "JPEGImages", "labels", labelpath);find_replace(labelpath, ".jpg", ".txt", labelpath);find_replace(labelpath, ".JPEG", ".txt", labelpath);find_replace(labelpath, ".png", ".txt", labelpath);int num_labels = 0;box_label *truth = read_boxes(labelpath, &num_labels);for(k = 0; k < l.w*l.h*l.n; ++k){if(probs[k][0] > thresh){++proposals;}}for (j = 0; j < num_labels; ++j) {++total;box t = { truth[j].x, truth[j].y, truth[j].w, truth[j].h };float best_iou = 0;for (k = 0; k < l.w*l.h*l.n; ++k) {float iou = box_iou(boxes[k], t);if (probs[k][0] > thresh && iou > best_iou) {best_iou = iou;}}avg_iou += best_iou;if(best_iou > iou_thresh){++correct;}}fprintf(stderr, "%5d %5d %5d\tRPs/Img: %.2f\tIOU: %.2f%%\tRecall:%.2f%%\n", i, correct, total, (float)proposals/(i+1), avg_iou*100/total, 100.*correct/total);free(id);free_image(orig);free_image(sized);}//创建Test_Weight_Files.txt文件并将输出结果写入FILE *fp = fopen("./Test_Weight_Files.txt", "a");char* token = strtok(weightfile, "/");token = strtok(NULL, "/");fprintf(fp, "%s\tRPs/Img: %.2f\tIOU: %.2f%%\tRecall:%.2f%%\n", token, (float)proposals / (i + 1), avg_iou * 100 / total, 100.*correct / total);fclose(fp);
}

然后修改我们的test_obj.cmd文件的信息:

20200309:生成可用以下python代码(其实可用代码提取生成的权重文件中数字,没做,莎哔了。。。)

# -*- coding: utf-8 -*-
"""
@File    : 20200308_dontla_auto_evaluate.py
@Time    : 2020/3/8 23:43
@Author  : Dontla
@Email   : sxana@qq.com
@Software: PyCharm
"""
import osepoch = ['100', '200', '300', '400', '500', '600', '700', '800', '900','1000', '2000', '3000', '4000', '5000', '6000', '7000', '8000', '9000','10000', '11000', '12000', '13000', '14000', '15000', '16000', '17000', '18000', '19000','20000', '21000', '22000', '23000', '24000', '25000', '26000', '27000', '28000', '29000','30000', '31000', '32000', '33000', '34000', '35000', '36000', '37000', '38000', '39000','40000', '41000', '42000', '43000', '44000', '45000', 'final']
file = open('./dontla_result.txt', 'w', encoding='utf-8')
for i in epoch:command = '.\darknet.exe detector recall data/obj.data yolo-obj.cfg backup/yolo-obj_{}.weights'.format(i)print(command)# print(command)# ..\darknet.exe detector recall data/obj.data yolo-obj.cfg backup/yolo-obj_100.weights# ..\darknet.exe detector recall data/obj.data yolo-obj.cfg backup/yolo-obj_200.weights# ...# result = os.popen(command)# res = result.read()# for line in res.splitlines():#     print(line)# file.write(''.join([i, '\t', result_list]))
file.close()



运行test_obj.cmd便可批量生成测试结果到Test_Weight_Files.txt文件中,全部输出完毕后,会自行停止,


  • 结果:虽然不如设想那样运用python去直接执行我们的操作,而是直接在c语言程序的函数中去增加处理代码,但还是顺利地实现了我们需要的功能。

参考文章1:c语言中的制表符\t与空格

参考文章2:用c语言创建一个txt文件,并且写入数据

参考文章3:C语言字符串处理的一些函数strok,strstr, strchr,strsub

参考文章4:C\C++编程中:相对路径+绝对路径

python yolo-v2 设计批处理程序对训练生成的权重文件进行自动化批量测试,并输出结果到指定txt文件相关推荐

  1. batch批处理程序easyadd——追加单行文本到指定txt文件末尾

    介绍 有时候需要打开记事本在末尾追加文本,如果手动找到txt文件,再打开txt文件,按 ctrl+home 到达文末,才能完成对txt文件的追加,比较繁琐.而且如果txt文件很大(比如词典文件),手动 ...

  2. python和ui设计_程序员,UI设计师,你们在哪里

    2013年12月,在虎嗅那年的F&M创新节上,我参与了他们一个"作者互动"环节的宣讲,简单介绍了一下电影产业的情况和发展. 结束时,我说:"电影行业有了一百年的历 ...

  3. 计算机毕设Python+Vue游戏论坛设计(程序+LW+部署)

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  4. python批量打印excel 按照顺序_从txt文件写入excel2007,后台打印顺序正常,但是打开excel实际数据没有按照顺序排列...

    openpyxl的版本是:openpyxl-2.5.0a1 我的目的是将txt中的文本写入excel中,其实是一个自己想实现的一个小功能 但是从txt文件写入excel2007,后台打印顺序正常,但是 ...

  5. Windows批处理程序编程学习笔记

    Windows批处理学习笔记(基础篇) 第一章 从零开始认识批处理(what why how) 1.1 什么是Windows批处理? 批处理程序全名为 Batch file programming 是 ...

  6. linux 设计一个程序,要求打开文件 pass 所有者,第二章 Linux 文件操作

    文档均来自网络,如有侵权请联系我删除文档 第二章 Linux 文件操作(4学时) 实验一文件属性和无缓冲I/O 实验目的 1.熟悉Linux文件系统属性控制 2.掌握不带缓存的文件I/O程序设计方法 ...

  7. python从txt拿取数据_python requests + xpath 获取分页详情页数据存入到txt文件中

    直接代码,如有不懂请加群讨论 # *-* coding:utf-8 *-* # import json import requests import pytesseract import time i ...

  8. tensorflow2caffe(3) : 如何将tensorflow框架下训练得到的权重转化为caffe框架下的权重参数

    版权声明:本文为博主原创文章,转载时请附加博文链接. https://blog.csdn.net/jiongnima/article/details/78382972 在前两期专栏tensorflow ...

  9. tensorflow2caffe(1) : 如何将tensorflow框架下训练得到的权重转化为caffe框架下的权重参数

    在前两期专栏tensorflow2caffe(1)和tensorflow2caffe(2)中,笔者向大家介绍了caffemodel文件类型下的参数架构和如何取出tensorflow框架下训练参数.在本 ...

最新文章

  1. 向上取整的方法_瓷砖测量的方法有哪些?瓷砖尺寸一般是多少?
  2. wxWidgets:wxStaticLine类用法
  3. 反射型XSS漏洞详解
  4. 【Breadth-first Search 】752. Open the Lock
  5. Activity初级:startActivityForResult、重写onActivityResult、setResult回传数据、requestCode请求码...
  6. 亮晶晶幼儿园家校沟通平台的设计与实现
  7. 解决ajax回调函数不执行success的问题
  8. 全国哀悼日,博友应该做的两件事
  9. 东北大学计算机考研专业842包括什么,东北大学2019年计算机考研842计算机专业基础考试大纲...
  10. 会议室预定管理系统_如何灵活安排会议室,会议预约管理系统帮到你
  11. C语言程序设计现代方法-第二版-第10章练习题
  12. 关于背单词的一点个人体会 (好文章)
  13. mysql 数据库分表三种方法
  14. jdbc字符串拼接单引号和双引号问题
  15. [10minutes]百家姓
  16. 使用tinify批量压缩图片
  17. The server quit without updating PID file 的解决
  18. 一款学生党实测好用的美赛论文翻译软件推荐
  19. 小说里的编程 【连载之二十五】元宇宙里月亮弯弯
  20. 380V配电柜三相四线电压电流温度监测远程监控无线采集方案

热门文章

  1. python pil png合成gif储存时变黑_使用 Python 玩转图片
  2. [概述] SAP增强基本含义及分类
  3. 七步确定一个优化项目的难易度
  4. SAP FI模块与SD、MM的接口配置
  5. sap 预制凭证与暂存凭证的区别
  6. 未到期的应收票据贴现时如何记账
  7. 浅谈SAP系统的预测模型与预测公式
  8. ABAP 程序中退出操作(CHECK, EXIT, RETURN, LEAVE PROGRAM...)
  9. 第12个双11,天猫的“造新”运动
  10. 集合上二元关系性质判定的实现(python实现)