当前位置:   article > 正文

关于YOLOv5训练结果results.txt绘制对比图_yolov5 result图

yolov5 result图

目录

用两个results.txt在一幅图中画2条对比曲线

用一个results.txt在一幅图中画多条对比曲线:


用两个results.txt在一幅图中画2条对比曲线
  1. # -*- coding:utf-8 -*-
  2. import matplotlib.pyplot as plt
  3. import numpy as np
  4. column = ['epoch', 'train_GIOU_loss', 'train_obj_loss', 'train_cls_loss', 'total', 'target', 'img_size', 'precision',
  5. 'recall', 'MAP@0.5', 'F1', 'val_GIOU_loss', 'val_obj_loss', 'val_cls_loss']
  6. def plot_result(result1, result2, title, yl):
  7. ind = column.index(title) # 获取索引
  8. plt.rcParams['font.sans-serif'] = 'Times New Roman'
  9. plt.figure(figsize=(10, 8), dpi=400)
  10. x = result1[range(0, 60, 5), 0]
  11. y1 = result1[range(0, 60, 5), ind]
  12. y2 = result2[range(0, 60, 5), ind]
  13. line1 = plt.plot(x, y1, color="#8B4513", linewidth=2, label="yolov5", marker='^')
  14. line2 = plt.plot(x, y2, color="#90EE90", linewidth=2, label="advanced yolov5", marker='^')
  15. plt.xticks(range(0, 60, 5), fontsize=14)
  16. plt.yticks(fontsize=14)
  17. plt.xlabel('epoch', fontsize=16)
  18. plt.ylabel(yl, fontsize=16)
  19. plt.legend(loc="best", fontsize=16, frameon=False)
  20. plt.savefig('总损失对比图')
  21. plt.show()
  22. # 获取results文件中的有效列并且新增epoch序号列
  23. def result2matrix(result_dir, epoch_num):
  24. data = np.genfromtxt(result_dir)
  25. result = data[0:epoch_num + 1, 2:15] # 获取数据
  26. print(f"\n一共{len(result)}个epoches的结果")
  27. epoch = np.arange(len(result)) # 生成epoch序号
  28. epoch = epoch.reshape(len(result), 1)
  29. result = np.hstack((epoch, result)) # 新添一列epoch
  30. return result
  31. def plot_yolov5_curves(txt_dir1, txt_dir2):
  32. output1 = result2matrix(txt_dir1, epoch_num=60)
  33. output2 = result2matrix(txt_dir2, epoch_num=60)
  34. plot_result(output1, output2, 'total', 'total_loss')
  35. '''
  36. 一共11个图,可根据自己要求拓展
  37. '''
  38. if __name__ == '__main__':
  39. dir1 = "results1.txt"
  40. dir2 = "results2.txt"
  41. plot_yolov5_curves(dir1, dir2)
用一个results.txt在一幅图中画多条对比曲线
  1. # -*- coding:utf-8 -*-
  2. import matplotlib.pyplot as plt
  3. import numpy as np
  4. column = ['epoch', 'train_GIOU_loss', 'train_obj_loss', 'train_cls_loss', 'train_landmark_loss', 'total', 'target', 'img_size', 'precision',
  5. 'recall', 'MAP@0.5', 'F1', 'val_GIOU_loss', 'val_obj_loss', 'val_cls_loss']
  6. # 同一幅图中画多条曲线
  7. def plot_result(result1, yl):
  8. ind1 = column.index('train_GIOU_loss') # 获取giou索引
  9. ind2 = column.index('train_obj_loss') # 获取obj索引索引
  10. ind3 = column.index('train_cls_loss') # 获取cls索引
  11. ind4 = column.index('train_landmark_loss') # 获取landmark索引
  12. ind5 = column.index('total') # 获取total索引
  13. plt.rcParams['font.sans-serif'] = 'Times New Roman'
  14. plt.figure(figsize=(10, 8), dpi=400)
  15. x = result1[range(0, 200, 10), 0]
  16. # 每条损失曲线对应的y值
  17. y1 = result1[range(0, 200, 10), ind1]
  18. y2 = result1[range(0, 200, 10), ind2]
  19. y3 = result1[range(0, 200, 10), ind3]
  20. y4 = result1[range(0, 200, 10), ind4]
  21. y5 = result1[range(0, 200, 10), ind5]
  22. # 画giou
  23. line1 = plt.plot(x, y1, color="#6F80BE", linewidth=2, label="CIoU_loss", marker='^')
  24. # 画obj
  25. line2 = plt.plot(x, y2, color="#67C2A3", linewidth=2, label="obj_loss", marker='8')
  26. # 画cls
  27. line3 = plt.plot(x, y3, color="#FC8A61", linewidth=2, label="cls_loss", marker='s')
  28. # 画landmark
  29. line4 = plt.plot(x, y4, color="#E889BD", linewidth=2, label="landmark_loss", marker='D')
  30. # 画total
  31. line5 = plt.plot(x, y5, color="#C82423", linewidth=2, label="total_loss", marker='>')
  32. plt.xticks(range(0, 200, 10), fontsize=14)
  33. plt.yticks(fontsize=14)
  34. plt.xlabel('epoch', fontsize=16)
  35. plt.ylabel(yl, fontsize=16)
  36. plt.legend(loc="best", fontsize=16, frameon=False)
  37. plt.savefig('损失对比图')
  38. plt.show()
  39. # 获取results文件中的有效列并且新增epoch序号列
  40. def result2matrix(result_dir, epoch_num):
  41. data = np.genfromtxt(result_dir)
  42. result = data[0:epoch_num + 1, 2:16] # 获取数据
  43. print(f"\n一共{len(result)}个epoches的结果")
  44. epoch = np.arange(len(result)) # 生成epoch序号
  45. epoch = epoch.reshape(len(result), 1)
  46. result = np.hstack((epoch, result)) # 新添一列epoch
  47. return result
  48. def plot_yolov5_curves(txt_dir1):
  49. output1 = result2matrix(txt_dir1, epoch_num=200)
  50. plot_result(output1, 'loss')
  51. '''
  52. 一共11个图,可根据自己要求拓展
  53. '''
  54. if __name__ == '__main__':
  55. dir1 = "results.txt"
  56. plot_yolov5_curves(dir1)

示例如下: 

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号