保姆级教程:YOLOv5-7.0 中文标签训练与显示全流程(附字体配置与Pillow版本避坑指南)

发布时间:2026/6/3 4:12:12

保姆级教程:YOLOv5-7.0 中文标签训练与显示全流程(附字体配置与Pillow版本避坑指南) YOLOv5中文标签实战从数据标注到模型部署的全流程解析在计算机视觉领域YOLOv5因其出色的实时检测性能而广受欢迎。然而当面对中文场景时许多开发者都会遇到一个共同难题——如何让检测框正确显示中文标签这不仅涉及训练过程的调整还需要解决字体渲染、编码处理等一系列技术细节。本文将带你完整走通这个流程避开那些让新手头疼的坑。1. 环境准备与基础配置在开始之前确保你的开发环境满足以下条件Python 3.8或更高版本PyTorch 1.7CUDA 11.0如果使用GPU加速最新版本的YOLOv5代码库7.0及以上建议使用conda创建独立的Python环境conda create -n yolov5_cn python3.8 conda activate yolov5_cn pip install torch torchvision torchaudio git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt关键点注意不要随意降低Pillow版本许多教程建议降级到Pillow9.0来解决getsize问题但这会导致训练时出现其他兼容性问题。我们将在后面章节介绍更优雅的解决方案。2. 中文数据集准备与标注中文标签训练的第一步是准备合适的数据集。与英文数据集不同中文标注需要特别注意文件编码和标签格式。2.1 数据标注规范使用LabelImg等工具进行标注时确保标注文件保存为YOLO格式.txt标签直接使用中文名称所有文件使用UTF-8编码示例标注文件结构data/ ├── images/ │ ├── train/ │ │ ├── 图片1.jpg │ │ └── 图片2.jpg │ └── val/ │ ├── 图片3.jpg │ └── 图片4.jpg └── labels/ ├── train/ │ ├── 图片1.txt │ └── 图片2.txt └── val/ ├── 图片3.txt └── 图片4.txt2.2 数据集配置文件创建自定义的dataset.yaml文件时注意以下关键配置# 中文数据集示例配置 path: ../data train: images/train val: images/val names: 0: 行人 1: 汽车 2: 自行车 3: 交通灯重要提示YAML文件默认使用UTF-8编码但Windows系统可能默认使用GBK。为避免编码问题建议在代码中显式指定编码方式with open(data.yaml, encodingutf-8) as f: data yaml.safe_load(f)3. 核心代码修改与配置要让YOLOv5支持中文标签需要对源代码进行几处关键修改。这些修改主要集中在可视化相关的工具脚本中。3.1 字体配置修改在utils/plots.py文件中添加以下代码设置中文字体import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] # 设置中文字体 plt.rcParams[axes.unicode_minus] False # 解决负号显示问题同时找到Annotator类修改字体初始化部分self.font ImageFont.truetype(simhei.ttf, sizefont_size)提示将simhei.ttf字体文件放在项目根目录下或指定完整路径确保程序能找到字体文件3.2 解决Pillow 9.0的getsize问题新版本Pillow废弃了getsize方法正确的修改方式是# 原代码 text_width, text_height self.font.getsize(text) # 修改为 left, top, right, bottom self.font.getbbox(text) text_width right - left text_height bottom - top这种修改方式兼容所有Pillow版本避免了降级带来的潜在问题。3.3 训练脚本调整在train.py中确保数据加载时正确处理中文路径def yaml_load(filedata.yaml): with open(file, errorsignore, encodingutf-8) as f: return yaml.safe_load(f)4. 模型训练与验证完成上述配置后就可以开始训练支持中文标签的模型了。4.1 启动训练使用以下命令开始训练python train.py --data data.yaml --cfg models/yolov5s.yaml --weights yolov5s.pt --batch-size 16 --epochs 50训练过程中TensorBoard会显示各类指标。特别关注类别准确率确保每个中文标签类别都有良好表现验证集上的mAP平均精度4.2 常见训练问题排查问题现象可能原因解决方案标签显示为方框字体配置错误检查字体路径和plots.py修改训练时编码错误YAML文件编码问题确保使用UTF-8编码验证集指标异常标签不匹配检查data.yaml中的类别顺序5. 模型推理与中文显示训练完成后使用detect.py进行推理测试python detect.py --weights runs/train/exp/weights/best.pt --source test_images/ --view-img5.1 检测结果优化为了获得更好的中文显示效果可以考虑调整字体大小以适应不同分辨率的图像优化文本框颜色与背景的对比度添加文字背景增强可读性在plots.py中对应的修改位置# 在Annotator.box_label方法中 text f{self.class_names[int(cls)]} {conf:.2f} text_size self.font.getbbox(text) # 添加背景框 draw.rectangle([(xyxy[0], xyxy[1] - text_size[1]), (xyxy[0] text_size[0], xyxy[1])], fillcolor) draw.text((xyxy[0], xyxy[1] - text_size[1]), text, fill(255, 255, 255), fontself.font)6. 高级应用与性能优化掌握了基础的中文标签支持后可以进一步优化模型性能和使用体验。6.1 多语言支持扩展同样的方法可以扩展到其他语言只需准备对应的字体文件。例如支持日文self.font ImageFont.truetype(msgothic.ttc, sizefont_size)6.2 部署注意事项将模型部署到生产环境时注意确保部署环境也有相应的字体文件考虑使用更紧凑的字体减小渲染开销测试不同操作系统下的兼容性6.3 性能优化技巧使用OpenCV的GPU加速进行图像预处理对检测结果进行批处理渲染缓存字体对象避免重复加载实际项目中中文标签的清晰显示往往需要多次调整字体参数和渲染方式。建议从SimHei等常见中文字体开始逐步尝试其他字体以获得最佳视觉效果。

相关新闻