最近很多朋友留言问我如何将检测结果写入json文件并且用于COCO API的评估,之前对于检测结果的格式已经做了简单的说明,这里提供一些简单的函数,直接调用将结果写入即可。

用于COCO API测试的文件格式

HUST小菜鸡:用于COCO API测试的结果的文件格式​zhuanlan.zhihu.com

使用COCO API进行结果评估

HUST小菜鸡:使用COCO API评估模型在COCO数据集上的结果​zhuanlan.zhihu.com

COCO utils给出了一些转换的函数

def det2json(dataset, results):json_results = []for idx in range(len(dataset)):img_id = dataset.img_ids[idx]result = results[idx]for label in range(len(result)):bboxes = result[label]for i in range(bboxes.shape[0]):data = dict()data['image_id'] = img_iddata['bbox'] = xyxy2xywh(bboxes[i])data['score'] = float(bboxes[i][4])data['category_id'] = dataset.cat_ids[label]json_results.append(data)return json_results

def results2json(dataset, results, out_file):result_files = dict()if isinstance(results[0], list):json_results = det2json(dataset, results)result_files['bbox'] = '{}.{}.json'.format(out_file, 'bbox')result_files['proposal'] = '{}.{}.json'.format(out_file, 'bbox')mmcv.dump(json_results, result_files['bbox'])elif isinstance(results[0], tuple):json_results = segm2json(dataset, results)result_files['bbox'] = '{}.{}.json'.format(out_file, 'bbox')result_files['proposal'] = '{}.{}.json'.format(out_file, 'bbox')result_files['segm'] = '{}.{}.json'.format(out_file, 'segm')mmcv.dump(json_results[0], result_files['bbox'])mmcv.dump(json_results[1], result_files['segm'])elif isinstance(results[0], np.ndarray):json_results = proposal2json(dataset, results)result_files['proposal'] = '{}.{}.json'.format(out_file, 'proposal')mmcv.dump(json_results, result_files['proposal'])else:raise TypeError('invalid type of results')return result_files

其他的实现方式也差不多和这个相同

    ......
省略部分未模型初始化等操作部分if not distributed:model = MMDataParallel(model, device_ids=[0])outputs = single_gpu_test(model, data_loader, args.show, args.save_img, args.save_img_dir)else:model = MMDistributedDataParallel(model.cuda())outputs = multi_gpu_test(model, data_loader, args.tmpdir)res = []for id, boxes in enumerate(outputs):boxes=boxes[0]if type(boxes) == list:boxes = boxes[0]boxes[:, [2, 3]] -= boxes[:, [0, 1]]if len(boxes) > 0:for box in boxes:temp = dict()temp['image_id'] = id+1temp['category_id'] = 1temp['bbox'] = box[:4].tolist()temp['score'] = float(box[4])res.append(temp)with open(args.out, 'w') as f:json.dump(res, f)

将结构体写入文件_将COCO检测结果写入json文件相关推荐

  1. import引入json文件_在React组件中导入Json文件

    我正在尝试在React组件中加载languages.json文件.当我想导入json文件时,我在第一步收到以下错误.这是错误: ERROR in ./app/languages.json Module ...

  2. python批量修改labelme(COCO)标注的json文件的label标签名称

    python批量修改labelme(COCO)标注的json文件的label标签名称 在深度学习的实践中,使用labelme标注软件标注好数据集之后,如果标签的名称标注错误或者需要修改,庞大的数据量依 ...

  3. 基于流式输入输出 使用Java借助GSON库 实现对大型asc文件的读入解析 并输出为JSON文件

    基于流式输入输出 使用Java借助GSON库 实现对大型asc文件的读入解析 并输出为JSON文件 致谢 1 为什么要使用流式输入输出(使用情景) 2 目标.主要思路及相关方法 2.1 目标 2.2 ...

  4. python 结构体数组 定义_一篇文章弄懂Python中所有数组数据类型

    前言 数组类型是各种编程语言中基本的数组结构了,本文来盘点下Python中各种"数组"类型的实现. list tuple array.array str bytes bytearr ...

  5. 结构体数组排列_学习RTOS(3)数据结构

    在 FreeRTOS 中存在着大量的基础数据结构列表和列表项的操作,列表和列表项是直接从 FreeRTOS 源码注释中的 list 和 list item 翻译过来的,其实就是对应我们 C 语言当中的 ...

  6. 内存映射文件 写入 卡住_在Java中使用内存映射文件时检测(写入)失败

    内存映射文件 写入 卡住 内存映射文件是一个很好的并且经常被忽视的工具. 我不会在这里详细介绍它们的工作方式(使用 力 Google Luke!),但我将快速总结其优势: 操作系统提供的延迟加载和写入 ...

  7. golang判断结构体为空_如何在Golang中检查结构是否为空?

    golang判断结构体为空 The size of an empty structure is zero in Golang. Here, empty structure means, there i ...

  8. go在方法中修改结构体的值_[Go]结构体及其方法

    结构体类型可以包含若干字段,每个字段通常都需要有确切的名字和类型.也可以不包含任何字段,这样并不是没有意义的,因为还可以为这些类型关联上一些方法,这里可以把方法看作事函数的特殊版本. 函数事独立的程序 ...

  9. 数组、指针、结构体的总结_吃鱼的小脸猫_新浪博客

    一.结构体和数组的区别 1.定义一个结构体是为方便保存不同类型的数据,而不同类型的数据放在一个结构体中 2.定义数组也是为方便存储大量数据,但数据必须是同一类型 3. 结构体中也包括结构体数组和结构体 ...

最新文章

  1. 如何自己动手建立最简单的动态网站
  2. pytorch笔记:Dataloader
  3. 定义100学生C语言,C语言考试试题:定义一个100位学生的结构体数组,按成绩从高到低进行排序...
  4. cview类 public_在MFC单文档的View类中,如何获得指向状态栏的指针
  5. 解决Sublime Text打开C++文件出现中文乱码
  6. windows下安装composer抛出Composer\Downloader\TransportException异常解决办法
  7. CRM Excel导出技术实现的调试截图
  8. 需求分析——识别系统需求中的三类事件
  9. git获得当前分支url_笔记本拿出来!软件工程师必须要知道的Git命令语句大汇总...
  10. WannaCry感染文件恢复方法,企业再也不用愁了!
  11. linux和安卓交互,Android中webview和js之间的交互及注意事项
  12. ati 缺少关键性文件_ATI显卡优化
  13. 保存的离线网页总是自动跳转怎么办???
  14. cad填充密度怎么调整_CAD填充图案放在哪里,这几步你要了解
  15. modbus功能码04实例_20种PLC元件编号和Modbus编号地址对应表
  16. java 16进制 负数_Java随笔:小心16进制负数
  17. 使用PS制作毛玻璃效果
  18. 火箭联盟修改车重教程,国服Wegame平台和外服Steam平台通用方法
  19. laravel维护模式 MaintenanceMode
  20. 小程序中的axio——flyio的使用

热门文章

  1. 微信小程序 点击按钮 退出
  2. ALIN10129-自查方案
  3. ubuntu远程连接windows工具rdesktop
  4. Ant Desgin Pro 修改登录后默认导航到的位置
  5. 2021-08-08
  6. 如何理解HTTP协议的 “无连接,无状态” 特点?
  7. 面向接口编程的优点_为什么我们要面向接口编程
  8. 快速排序的原理以及Java代码
  9. 2019CCPC湖南全国邀请赛-Chika and Friendly Pairs- 莫队+树状数组+离散化
  10. Erlang消息传递-tut15.erl