深層学習モデルのパフォーマンス比較の散布図

カンファレンスのトップ記事では、モデルを比較する際に、モデルの効率、パラメータ量、精度、その他の指標を比較する必要があることがよくわかります。前回の記事では、モデルのパラメータ、FLOP、精度などの比較も行いました。私は個人的に比較のために 1 つのモデルのみを使用し、全員が共有できるようにコードをここに記録します。一方で、カンファレンスのトップ記事ではよく一連のモデルが比較対象に選ばれているのがわかりますが、このような図も作ってみました。以下に示すように。(文字の位置は必要に応じて調整できます)

コードは直接実行できます。

import matplotlib.pyplot as plt
import numpy as np

#数据归一化
def nm(list):
    l = []
    M = max(list)
    m = min(list)
    for i in range(len(list)):
        x = (list[i] - m) / (M - m)
        l.append(x)
    return l

# 准备数据
#原始数据
parameters = [35,55, 72, 67, 60, 51,45,39]  # 参数量数据
flops = [8,50, 65, 49, 35, 15,29,60]  # FLOPs数据 X轴
miou = [20,64, 55, 49, 59, 63,70,75]  # MIou值数据  Y轴
txt = ["A","B","C","D","E","F","G","H"] #散点名称

# 设置散点的直径
diameter = nm(parameters) #归一化
diameters = [m * 10 for m in parameters]  # 将MIou值进行缩放,乘以100以适当调整直径大小

#显示网格线
plt.grid()
plt.grid(color='b',linestyle='--', linewidth=0.5,alpha=0.5)

#设置坐标轴刻度
x_ticks = np.arange(0, 80, 5)
y_ticks = np.arange(10, 100, 5)
plt.xticks(x_ticks)
plt.yticks(y_ticks)

#设置散点之间连线
#红色的点
rx = [8,15,50,60]
ry = [20,63,64,75]
plt.scatter(rx , ry)
plt.plot(rx, ry,linestyle='solid',color='r')
#黄色的点
yx = [65,35]
yy = [55,59]
plt.scatter(yx , yy)
plt.plot(yx , yy,linestyle='solid',color='y')

# 设置颜色列表 需要写成颜色对应的十六进制数
colors =['#FF0000','#FF0000','#FFD700','#FF1493','#FFD700','#FF0000','#008080','#FF0000']
# colors = np.random.rand(len(miou)) #随机设置颜色

# 绘制散点图
plt.scatter(flops,miou, s=diameters, c=colors,alpha=0.5,marker='o',linewidths=3)
# plt.scatter(flops,miou, s=diameters, c=colors,alpha=0.4,)

# 设置标题和坐标轴标签
# plt.title("Scatter Plot: Parameter vs FLOPs")
plt.xlabel("FLOPs")
plt.ylabel("MIoU")

#显示各散点名称以及调整文字的位置
for i in range(len(miou)):
    if i == 1:
        plt.annotate(txt[i], xy=(flops[i], miou[i]), xytext=(flops[i] - 3.5, miou[i] - 0.5))
    elif i == 2:
        plt.annotate(txt[i], xy=(flops[i], miou[i]), xytext=(flops[i] - 5, miou[i] + 0.4))
    elif i == 3:
        plt.annotate(txt[i], xy=(flops[i], miou[i]), xytext=(flops[i] - 2, miou[i] + 0.25),c="b",weight='heavy')
    elif i == 5:
        plt.annotate(txt[i], xy=(flops[i], miou[i]), xytext=(flops[i] - 4, miou[i] + 0.4))
    elif i == 6:
        plt.annotate(txt[i], xy=(flops[i], miou[i]), xytext=(flops[i] - 3, miou[i] + 0.35),c="y",weight='heavy')
    else:
        plt.annotate(txt[i], xy=(flops[i], miou[i]), xytext=(flops[i] - 3, miou[i] + 0.4))

#保存图片
plt.savefig("figure.jpg",dpi=1000,bbox_inches = 'tight')#当前路径下

# 显示图表
plt.show()




 このコードは次のような画像を生成します(接続したい散在点を同じ色に設定できます) 

おすすめ

転載: blog.csdn.net/qq_39333636/article/details/131812995