YOLOV8中文显示问题

跑了以一个YOLOV8具体的实例,并解决这个问题,我上传到了b站,链接如下:
【租界GPU服务器进行YOLOV8目标检测并解决中文报错问题】https://www.bilibili.com/video/BV1Pg4y1M72U?vd_source=7f1982c56a437c7b00c3695687b7086d

问题引出:

​ 最近再跑YOLOV8项目,跑到这份数据集的类名是中文类名,自己也没有太在意,知道的过程出现些报错,这些爆错如下:

/usr/local/lib/python3.8/dist-packages/ultralytics/yolo/utils/metrics.py:399: UserWarning: Glyph 24102 (\N{CJK UNIFIED IDEOGRAPH-5E26}) missing from current font.
  fig.savefig(save_dir, dpi=250)
/usr/local/lib/python3.8/dist-packages/ultralytics/yolo/utils/plotting.py:261: UserWarning: Glyph 24102 (\N{CJK UNIFIED IDEOGRAPH-5E26}) missing from current font.
  plt.savefig(save_dir / 'labels.jpg', dpi=200)

这些报错不仅出现在训练开始,在训练结束,以及验证结束也会出现,如下所示:

这个时候我意识到问题不对,但是程序并没有停止,想着看看跑完会如何:最后的结果是,所检测的图片的结果均完好

但是所生成的评价标准的各种图像的x,y轴名称是均发生了乱码,如下:

分析问题:

​ 首先对于目标检测的结果图没有问题,但是其评价指标的各种变量名出现了问题,观察报错路径是由python包中的matplotlib引起,且评估指标也是由matplotlib进行绘制,随意问题出在了matplotlib的中文显示。

​ 通过查找资料,只需要将中文字体加入近代码,并设置全局识别即可完美解决。

解决问题:

  1. 首先查询出本地存放matplotlib字体的路径
打开python 终端获取路径

import matplotlib    
print(matplotlib.matplotlib_fname())

#/usr/local/lib/python3.8/dist-packages/matplotlib/mpl-data/matplotlibrc

  1. 下载好的simhei.ttf放到/usr/local/lib/python3.8/dist-packages/matplotlib/mpl-data/fonts/ttf/目录
  1. 修改…/mpl-data/matplotlibrc配置文件
# 去掉前面的#  
font.family         : sans-serif   

# 去掉前面的#,并在冒号后面添加simhei(我的是小写,如果你下载的是大写的就大写)
font.sans-serif     : simhei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif  

# 去掉前面的#,并将True改为False
axes.unicode_minus  : False

8

  1. 删除matplotlib的缓冲目录
# python 终端获取缓存路径
import matplotlib
print(matplotlib.get_cachedir())
# /root/.cache/matplotlib
# 删除缓冲目录
rm -rf /root/.cache/matplotlib
  1. 修改/usr/local/lib/python3.8/dist-packages/ultralytics/yolo/utils/metrics.py文件

在其文件内加上

sn.set(font='simhei',font_scale=1.0 if nc < 50 else 0.8)
plt.rcParams['font.sans-serif'] = ['simhei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

6.修改/usr/local/lib/python3.8/dist-packages/ultralytics/yolo/utils/plotting.py文件

plt.rcParams['font.sans-serif'] = ['simhei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

10

效果展示:

改完后,无论是训练,验证,还是推理测试都没有发生任何的报错,如下所示

参考文献:

解决YOLOv5算法中的中文标签显示问题 http://t.csdn.cn/dCKU6

Matplotlib------画图详解及步骤(Matplotlib定义、添加刻度、Matplotlib中文乱码解决、添加网格、添加描述信息、添加图例、在一个坐标系中绘制多个图像、折线图) http://t.csdn.cn/hw8mf

Glyph 26426 missing from current font.解决matplotlib画图中文字体乱码问题 http://t.csdn.cn/cHjHw

python解决中文显示问题Glyph 24179 (\N{CJK UNIFIED IDEOGRAPH-5E73}) missing from current font. func(*args) http://t.csdn.cn/nGIGw

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐