一、代码描述

  • 通过log文件提取mAP关键词
  • 提取响应mAP列表
  • 支持多图合一aparser可选参数

二、代码

import matplotlib.pyplot as plt
import os
import numpy as np
import argparse
import warnings# 获得当前目录下的所有log,并返回info字典,方便命名
def get_logs(path):logs = os.listdir(path)info_dict = dict()for log in logs:dict_name = log.split('.')[0]if dict_name == '1280_RefineHead_detach':dict_name = '1280_RD'elif dict_name == '1280_RefineHead_nodetach':dict_name = '1280_RND'elif dict_name == '2048_RefineHead_detach':dict_name = '2048_RD'else:dict_name = '2048_RND'info_dict[dict_name] = logreturn info_dict# 读取某一个log,并返回其中的bbox_mAP
def read_log(path):bbox_mAP = []with open(path,'r') as f:logs_data = f.readlines()for line in logs_data:ind = line.find('bbox_mAP:')if ind != -1:map50_95 = line.split(': ')[1].split(',')[0]bbox_mAP.append(np.float32(map50_95))return bbox_mAP# 从info_dict获取所有log的mAP
def get_bbox_mAPs(main_path,info_dict):detach_1280_mAP = []nodetach_1280_mAP = []detach_2048_mAP = []nodetach_2048_mAP = []for key,value in info_dict.items():log_path = os.path.join(main_path,value)bbox_mAP = read_log(log_path)if key == '1280_RD':detach_1280_mAP = bbox_mAPelif key == '1280_RND':nodetach_1280_mAP = bbox_mAPelif key == '2048_RD':detach_2048_mAP = bbox_mAPelse:nodetach_2048_mAP = bbox_mAPreturn detach_1280_mAP,nodetach_1280_mAP,detach_2048_mAP,nodetach_2048_mAP# 多合一模式
def MultiInOnePlot(args,info_dict,y1,y2,y3,y4):def plot_multi(list,labels,color_map,marker,index='fusion'):# 获取mAP最大值对应的坐标coordinates = []for y in list:coordinates.append([np.argmax(y),np.max(y)])plt.figure()for i,y in enumerate(list):plt.plot(np.arange(len(y)),y,f'-{color_map[i]}{marker[i]}',markersize=3,label=labels[i])plt.axvline(x=coordinates[i][0],color=f'{color_map[i]}',linestyle='--')plt.annotate(text='({},{:.2})'.format(coordinates[i][0],coordinates[i][1]),xy=coordinates[i])plt.xlabel('epoch',fontsize=15)plt.ylabel('mAP',fontsize=15)# plt.title('Multi-resolution and multi-strategy comparison',fontsize=15)if args.multi2one:passelse:plt.ylim((0.13, 0.43))plt.legend(loc='best',fontsize=10)plt.savefig(f'Multi_in_one_{index}',dpi=300)plt.show()# 获取绘图标签labels = []for label in info_dict.keys():labels.append(label)if args.multi2one:y_list = [[y1, y2],[y3,y4]]color_map = [['r','c'],['m', 'g']]marker = [['s','d'],['^','v']]labels = [[labels[0],labels[1]],[labels[2],labels[3]]]for index in range(2):plot_multi(y_list[index],labels[index],color_map[index],marker[index],str(index))else:y_list = [y1,y2,y3,y4]color_map = ['r', 'c', 'm', 'g']marker = ['s', 'd', '^', 'v']plot_multi(y_list, labels, color_map,marker)# 单图模式
def PlotOneByOne(info_dict,y1,y2,y3,y4):# 获取四条线的最大坐标位置list = [y1,y2,y3,y4]coordinates = []for y in list:coordinates.append([np.argmax(y), np.max(y)])# 设定画图要素labels = []for label in info_dict.keys():labels.append(label)color_map = ['r', 'c', 'm', 'g']marker = ['s', 'd', '^', 'v']plt.figure()for i in range(len(labels)):plt.plot(np.arange(len(list[i])), list[i], f'-{color_map[i]}{marker[i]}', markersize=4, label=labels[i])plt.axvline(x=coordinates[i][0], color='gray', linestyle='--')plt.annotate(text='({},{:.2})'.format(coordinates[i][0], coordinates[i][1]), xy=coordinates[i])plt.xlabel('epoch', fontsize=15),plt.ylabel('mAP', fontsize=15)plt.legend(loc='best',fontsize=13)plt.savefig(f'Single_{labels[i]}',dpi=300)plt.show()# 设置可选参数并解析参数
def parse_args():parser = argparse.ArgumentParser(description='Plot descriptions for mmdetlogs')parser.add_argument('main_path',default='log_data',type=str)parser.add_argument('--multi_in_one',action='store_true',help='whether plot in one figure')parser.add_argument('--multi2one', action='store_true', help='whether plot in one figure')if parser is None:warnings.warn('No valid os_path,please set the main_path.''Whatsmore pay attention to Type.Type is str')pars = parser.parse_args()return parsdef main():args = parse_args()main_path = args.main_pathinfo_dict = get_logs(main_path)detach_1280_mAP,nodetach_1280_mAP,detach_2048_mAP,nodetach_2048_mAP = \get_bbox_mAPs(main_path, info_dict)print(len(detach_1280_mAP),len(nodetach_1280_mAP),len(detach_2048_mAP),len(nodetach_2048_mAP))if args.multi_in_one:MultiInOnePlot(args,info_dict,detach_1280_mAP,nodetach_1280_mAP,detach_2048_mAP,nodetach_2048_mAP)else:PlotOneByOne(info_dict,detach_1280_mAP,nodetach_1280_mAP,detach_2048_mAP,nodetach_2048_mAP)if __name__ == '__main__':main()

三 效果


MMdetection绘制mAP-自用相关推荐

  1. pyecharts包绘制Map地图(笔记)

    最近写文章,需要绘制地图,开始想用Tableau做,但是Tableau绘制某些地图不太方便,需要边界经纬度,于是找到了pyecharts 由于pyecharts版本更新,以前的代码不兼容新版本 pye ...

  2. python绘制Map地图

    Ⅰ.原始数据 2022北京冬奥会奖牌榜 Ⅱ.程序 from pyecharts import options as opts from pyecharts.charts import Mapdata= ...

  3. python类处理可视化中国各省CO2排放数据,pyecharts绘制Timeline、Map、Pie、River、Treemap图

    文章目录 可视化展示 分析结果 1.1 Map-中国地图 1.2 Pie-时间线饼图 1.3 River-河流图 1.4 Treemap-矩形树图 2.1 PCA主成分分析降维+Kmeans聚类 2. ...

  4. 【深度学习】什么是目标检测中的平均精度均值(mAP)?

    计算机视觉界已经集中在度量 mAP 上,来比较目标检测系统的性能.在这篇文章中,我们将深入了解平均精度均值 (mAP) 是如何计算的,以及为什么 mAP 已成为目标检测的首选指标. 目标检测的快速概述 ...

  5. 【深度学习】——如何提高map值

    目录 代码获取 map原理 map提高技巧 技巧总结: 实战: 1.效果不佳map55.55% 1)单独调整get_dr_txt.py中的self.iou = 0.3 2)单独调整get_map,py ...

  6. 目标检测相关概念:IOU,precision, recall, AP, mAP

    1.IOU(交并比) IOU,交并比,顾名思义,就是预测框bounding box与真实框ground truth的交集比上并集.可以用来衡量检测物体位置的偏差.形象点可以看下图(用画图软件所画): ...

  7. Basemap绘制地图

    文章转自:http://blog.csdn.net/ouening/article/details/55227364 使用folium实现中国地图绘制,文章链接: python/folium绘制中国人 ...

  8. 目标检测评价指标:精确度mAP

    文章目录 1. GITHUB代码下载 2. 知识储备 2.1 IOU的概念 2.2 TP TN FP FN的概念 2.3 precision(精确度)和recall(召回率) 2.4 概念举例 2.5 ...

  9. 睿智的目标检测20——利用mAP计算目标检测精确度

    睿智的目标检测20--利用mAP计算目标检测精确度 学习前言 GITHUB代码下载 知识储备 1.IOU的概念 2.TP TN FP FN的概念 3.precision(精确度)和recall(召回率 ...

最新文章

  1. SCRUM敏捷实践—任务看板
  2. RGB HSV HLS三种色彩模式转换(C语言实现)
  3. linux用yum安装svn,linux下 yum安装svn
  4. 从P560小型机B181201B故障代码识别手把手详解
  5. 联邦学习隐私保护研究进展
  6. vue使用高德地图画电子围栏_Vue.js 中使用高德地图定位及渲染地图
  7. 任务状态段TSS和TSS描述符
  8. 自定义函数hello,并注册到hive源码中并重新编译
  9. c 语言 初始化数组,C CodeBase:初始化一个数组
  10. 虚拟机黑裙加载硬盘_适合练手,在虚拟机中安装黑群晖,想要组建NAS服务器的看这里...
  11. ORACLE表空间和表碎片分析及整理方法
  12. 计算机启动过程:MBR和BIOS
  13. android 照片裁剪_如何在Android上裁剪和编辑照片
  14. oracle中重做日志损坏,重做日志文件损坏的恢复笔记
  15. 怎么把两个PDF合并成一个?这几种操作轻松合并
  16. PHP中关于时间(戳)、时区、本地时间、UTC时间等梳理
  17. 昆石VOS2009/VOS3000 2.1.6.00 操作指南
  18. 基于Self-Hosted模式搭建K8S可观测平台Pixie(内附填坑方法)
  19. 什么是驱动?驱动程序的工作原理?
  20. Nginx 面试40问

热门文章

  1. 【Word】毕业论文使用的调格式技巧
  2. NBA球员数据爬虫练习
  3. 微信小程序实现素材旋转——非canvas
  4. java.lang.IllegalArgumentException: Malformed \uxxxx encoding
  5. 自建云存储:Nextcloud vs. ownCloud vs. Seafile
  6. 计算机科学方向的会议或期刊,计算机顶会和顶刊_计算机顶会_顶会
  7. x86 Kylin V10系统安装kvm并创建虚拟机
  8. 你知道国内有哪些网站提供免费的云服务器吗
  9. 鸟枪换炮,Android Studio的初体验——Android Studio系列(一)
  10. 由于navigation引起viewwillappear不被调用