怎么让yolov5中的混淆矩阵更好看一点呢?

先看效果:

改之前的混淆矩阵,每个小矩形太大,里面的比例太小,整体一种框架大,内容小,占地方过于大,非常不美观的感觉:

改之后的混淆矩阵,方格调到适合里面数字的大小,整体“物尽其用”,占块也不大:

怎么做?

在yolov5 文件夹下的utils 文件中的metrics.py

混淆矩阵的输出主要是这个类,如果自己改变了置信度阈值和IOU阈值,除了在valid中改一下,这里也需要改一下,要不然得到的混淆矩阵并不是自己改动的阈值对应的,这里我改成了我用的0.2,0.35.

具体修改处,就是不断调整这些数值,改变字体和矩形框的大小来美化混淆矩阵:

fig, ax = plt.subplots(1, 1, figsize=(10, 5), tight_layout=True)#本来是12,9,修改小块矩阵的大小         nc, nn = self.nc, len(names)  # number of classes, names         sn.set(font_scale=1.0 if nc < 50 else 0.8)  # for label size         labels = (0 < nn < 99) and (nn == nc)  # apply names to ticklabels         ticklabels = (names + ['background']) if labels else "auto"         with warnings.catch_warnings():             warnings.simplefilter('ignore')  # suppress empty matrix RuntimeWarning: All-NaN slice encountered             # sn.set(font_scale=1.5)  # 将混淆矩阵中的数字字体变大             sn.heatmap(array,                        ax=ax,                        annot=nc < 30,#默认取值False,如果是True,在热力图每个方格写入数据;如果是矩阵,在热力图每个方格写入该矩阵对应位置数据                        annot_kws={                            "size": 20},#设置数字颜色,大小,位置等                        cmap='Blues', #设置颜色                        fmt='.2f',#字符串格式代码,矩阵上标识数字的数据格式,比如保留小数点后几位                        square=True,#默认为False                        vmin=0.0,#分别是热力图的颜色取值最大和最小范围,默认是根据data数据表里的取值确定                        xticklabels=ticklabels,                        yticklabels=ticklabels).set_facecolor((1, 1, 1))#控制每列/行标签名的输出         ax.set_xlabel('True',fontsize=20)         ax.set_ylabel('Predicted',fontsize=20)         ax.set_title('Confusion Matrix',fontsize=20)#本来没有fontsize=15,纵横坐标标题和小标题字体大小         fig.savefig(Path(save_dir) / 'confusion_matrix.png', dpi=250)         plt.close(fig)

这里介绍一下这个热力图函数以及相关参数解析:

seaborn.heatmap(

data,

vmin=None,

vmax=None,

cmap=None,

center=None,

robust=False,

annot=None,

fmt=’.2g’,

annot_kws=None,

linewidths=0,

linecolor=’white’,

cbar=True,

cbar_kws=None,

cbar_ax=None,  

square=False,

xticklabels=’auto’,

yticklabels=’auto’,

mask=None,

ax=None,

**kwargs)

解析:

cmap=None, # 设置颜色

center=None,# 数据表取值有差异时,设置热力图的色彩中心对齐值;通过设置center值,可以调整生成的图像颜色的整体深浅;设置center数据时,如果有数据溢出,则手动设置的vmax、vmin会自动改变

robust=False, #默认取值False;如果是False,且没设定vmin和vmax的值,热力图的颜色映射范围根据具有鲁棒性的分位数设定,而不是用极值设定

annot=None, #默认取值False;如果是True,在热力图每个方格写入数据;如果是矩阵,在热力图每个方格写入该矩阵对应位置数据

fmt=’.2g’, #字符串格式代码,矩阵上标识数字的数据格式,比如保留小数点后几位数字

annot_kws=None,# annot为True时,设置显示数字的颜色、大小、位置等。

linewidths=0, #定义热力图里“表示两两特征关系的矩阵小块”之间的间隔大小

linecolor=’white’, #切分热力图上每个矩阵小块的线的颜色,默认值是’white’

cbar=True, #是否在热力图侧边绘制颜色刻度条,默认值是True

cbar_kws=None, #热力图侧边绘制颜色刻度条时,相关字体设置,默认值是None

cbar_ax=None, #热力图侧边绘制颜色刻度条时,刻度条位置设置,默认值是None

square=False, #设置热力图矩阵小块形状,默认值是False

xticklabels=’auto’, yticklabels=’auto’, #控制每列/行标签名的输出

mask=None, #覆盖某些数据

ax=None, #设置作图的坐标轴,一般画多个子图时需要修改不同的子图的该值

但是混淆矩阵x,y坐标轴的类别名称的字体大小我不知道怎么调整,大家有知道的也可以教教我们,互相学习学习。

有参考到这一篇博客:

https://blog.csdn.net/weixin_44871341/article/details/108206391