news 2026/3/2 2:38:16

YOLOFuse代码实例:自定义类别名称显示方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLOFuse代码实例:自定义类别名称显示方法

YOLOFuse代码实例:自定义类别名称显示方法

1. 引言

1.1 YOLOFuse 多模态目标检测框架

YOLOFuse 是一个基于 Ultralytics YOLO 架构构建的多模态目标检测框架,专为融合 RGB(可见光)与红外(IR)图像设计。通过双流网络结构,该框架能够在低光照、烟雾遮挡等复杂环境下显著提升目标检测的鲁棒性与精度。其核心优势在于支持多种融合策略——包括早期特征融合、中期特征融合以及决策级融合,适用于安防监控、夜间巡检、自动驾驶等多个实际应用场景。

本镜像已为您预装好所有依赖环境,基于 Ultralytics YOLO 框架构建,支持 RGB 与红外(IR)图像的双流融合检测。您无需配置复杂的 PyTorch 或 CUDA 环境,开箱即用。

在实际部署过程中,一个常见的需求是自定义类别名称显示,例如将默认的person改为更具业务语义的“行人”或“安保人员”。本文将详细介绍如何在 YOLOFuse 中实现这一功能,并结合代码示例说明修改逻辑和注意事项。


2. 类别名称显示机制解析

2.1 默认类别体系来源

YOLOFuse 继承了 Ultralytics YOLO 的类别管理方式,其默认类别标签来源于 COCO 数据集的 80 个类别,存储于ultralytics/cfg/datasets/coco.yaml文件中:

names: 0: person 1: bicycle 2: car ...

这些类名在推理阶段被加载到模型输出中,并用于绘制检测框时的文本标注。

2.2 自定义类别的必要性

在特定行业应用中,原始英文类别难以满足本地化展示需求。例如:

  • 安防系统需显示中文:“人”、“车辆”
  • 工业质检需映射为缺陷类型:“划痕”、“气泡”

因此,实现可配置的类别名称显示是工程落地的关键一步。


3. 实现自定义类别名称的方法

3.1 方法一:修改数据集配置文件(推荐)

最规范且兼容性强的方式是通过自定义.yaml配置文件重写类别名称。

步骤 1:创建自定义数据配置文件

在项目根目录/root/YOLOFuse下新建data/custom_classes.yaml

path: datasets/LLVIP train: images val: images test: images # 自定义类别名称(按索引顺序) names: 0: 行人 1: 自行车 2: 汽车 3: 摩托车 4: 飞机 5: 公交车 6: 火车 7: 卡车 8: 船 9: 红绿灯 # 可继续补充其余类别...

注意:类别数量和索引必须与原模型输出一致,否则会导致越界错误。

步骤 2:在推理脚本中加载自定义类别

打开infer_dual.py,找到模型初始化部分,修改如下:

from ultralytics import YOLO import cv2 # 加载模型 model = YOLO('runs/fuse/train/weights/best.pt') # 替换为你的权重路径 # 手动设置自定义类别名称 custom_names = { 0: '行人', 1: '自行车', 2: '汽车', 3: '摩托车', 4: '飞机', 5: '公交车', 6: '火车', 7: '卡车', 8: '船', 9: '红绿灯' } # 替换模型内部的names属性 model.names = custom_names
步骤 3:验证效果

运行推理命令:

cd /root/YOLOFuse python infer_dual.py

查看/root/YOLOFuse/runs/predict/exp中生成的图片,确认检测框上的标签已更新为中文。


3.2 方法二:动态传参覆盖(灵活适配)

若需根据不同场景动态切换类别名称(如白天/夜间模式),可通过函数参数传递。

修改infer_dual.py中的可视化逻辑

查找绘图相关代码段(通常调用cv2.putText或使用内置 plot 功能),替换原始 label 获取逻辑:

results = model(source=rgb_img, imgsz=640) for r in results: # 获取原始boxes对象 boxes = r.boxes.cpu().numpy() # 使用自定义名称映射 for box in boxes: cls_id = int(box.cls[0]) conf = box.conf[0] # 定义本地化名称 localized_names = ['行人', '非机动车', '机动车', '大型车辆', '飞行器'] class_name = localized_names[cls_id] if cls_id < len(localized_names) else f'类别_{cls_id}' # 获取坐标 x1, y1, x2, y2 = map(int, box.xyxy[0]) # 绘制矩形框 cv2.rectangle(rgb_img, (x1, y1), (x2, y2), (0, 255, 0), 2) # 添加文字(需支持中文) font = cv2.FONT_HERSHEY_SIMPLEX label = f'{class_name} {conf:.2f}' cv2.putText(rgb_img, label, (x1, y1 - 10), font, 0.5, (0, 255, 0), 2)

⚠️ 提示:OpenCV 默认不支持中文字符渲染。若出现乱码,请使用 PIL 实现图文叠加。


3.3 方法三:使用 PIL 绘制中文标签(解决乱码问题)

为了正确显示中文,建议采用 Python Imaging Library (PIL) 进行图像绘制。

示例代码:集成 PIL 中文绘制
from PIL import Image, ImageDraw, ImageFont import numpy as np def draw_chinese_labels(image, boxes, names_dict, font_path='/root/YOLOFuse/fonts/simhei.ttf'): """ 使用PIL绘制支持中文的检测结果 font_path: 中文字体路径(需提前上传) """ # 将OpenCV图像转为PIL格式 pil_image = Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) draw = ImageDraw.Draw(pil_image) # 加载中文字体(确保字体文件存在) try: font = ImageFont.truetype(font_path, 20) except IOError: font = ImageFont.load_default() for box in boxes: cls_id = int(box.cls[0]) conf = box.conf[0] x1, y1, x2, y2 = map(int, box.xyxy[0]) class_name = names_dict.get(cls_id, f'未知类别{cls_id}') label = f'{class_name} {conf:.2f}' # 绘制边框 draw.rectangle([x1, y1, x2, y2], outline="green", width=2) # 绘制背景矩形 text_bbox = draw.textbbox((x1, y1), label, font=font) draw.rectangle([text_bbox[0]-2, text_bbox[1]-2, text_bbox[2]+2, text_bbox[3]+2], fill="green") draw.text((x1, y1 - 20), label, fill="white", font=font) # 转回OpenCV格式 return cv2.cvtColor(np.array(pil_image), cv2.COLOR_RGB2BGR)
调用方式:
# 假设results来自model预测 for r in results: annotated_img = draw_chinese_labels( rgb_img, r.boxes.cpu().numpy(), names_dict={0: '行人', 1: '汽车'}, font_path='/root/YOLOFuse/fonts/simhei.ttf' ) cv2.imwrite('output_with_chinese.jpg', annotated_img)

✅ 建议:将常用中文字体(如simhei.ttfmsyh.ttc)上传至项目目录并统一管理。


4. 训练阶段的类别一致性保障

4.1 标注文件与类别对齐

尽管推理时可以更改显示名称,但训练所用的标签文件(.txt)仍应遵循原始类别索引规则。例如:

# labels/001.txt 0 0.45 0.60 0.10 0.20 # 表示类别ID=0(person),对应“行人”

只要在推理时将 ID=0 映射为“行人”,即可实现前后端统一。

4.2 多语言支持建议

对于国际化部署场景,可建立语言包机制:

LANGUAGES = { 'zh': {0: '行人', 1: '汽车'}, 'en': {0: 'Person', 1: 'Car'}, 'ja': {0: '人物', 1: '自動車'} } # 根据环境变量选择语言 import os lang = os.getenv('APP_LANGUAGE', 'zh') model.names = LANGUAGES[lang]

5. 总结

5.1 技术价值总结

本文围绕 YOLOFuse 框架中的自定义类别名称显示问题,系统性地介绍了三种实现方案:

  • 修改配置文件法:适合固定场景,符合 Ultralytics 规范;
  • 运行时覆盖法:灵活性高,便于快速调试;
  • PIL 绘图法:解决 OpenCV 中文乱码问题,确保视觉呈现完整。

5.2 最佳实践建议

  1. 优先使用model.names覆盖机制,保持与官方 API 兼容;
  2. 部署前测试字体可用性,避免因缺少中文字体导致空白标签;
  3. 维护独立的语言配置文件,便于多地区业务扩展;
  4. 训练与推理类别索引保持一致,防止逻辑错位。

通过上述方法,开发者可在不修改模型结构的前提下,高效实现本地化语义表达,提升系统的用户体验与专业度。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/26 2:42:13

Qwen1.5-0.5B-Chat自动化测试:单元测试与集成测试方案

Qwen1.5-0.5B-Chat自动化测试&#xff1a;单元测试与集成测试方案 1. 引言 1.1 业务场景描述 随着轻量级大模型在边缘设备和资源受限环境中的广泛应用&#xff0c;如何保障其服务的稳定性与可靠性成为工程落地的关键挑战。Qwen1.5-0.5B-Chat 作为通义千问系列中参数量最小但…

作者头像 李华
网站建设 2026/2/26 19:08:49

FRCRN语音降噪入门指南:Python环境配置详解

FRCRN语音降噪入门指南&#xff1a;Python环境配置详解 1. 引言 1.1 学习目标 本文旨在为初学者提供一份完整的 FRCRN语音降噪模型&#xff08;单麦-16k&#xff09; 的本地部署与推理实践指南。通过本教程&#xff0c;读者将能够&#xff1a; 理解FRCRN语音降噪模型的基本…

作者头像 李华
网站建设 2026/2/21 15:17:47

DeepSeek-R1-Distill-Qwen-1.5B Gradio集成:交互界面搭建教程

DeepSeek-R1-Distill-Qwen-1.5B Gradio集成&#xff1a;交互界面搭建教程 1. 引言 1.1 业务场景描述 在大模型应用快速发展的背景下&#xff0c;将高性能推理模型部署为可交互的Web服务已成为AI工程化的重要环节。DeepSeek-R1-Distill-Qwen-1.5B 是基于 DeepSeek-R1 强化学习…

作者头像 李华
网站建设 2026/2/27 8:15:43

CV-UNet Universal Matting部署教程:云端GPU加速方案

CV-UNet Universal Matting部署教程&#xff1a;云端GPU加速方案 1. 引言 随着图像处理需求的不断增长&#xff0c;自动抠图技术在电商、设计、影视后期等领域发挥着越来越重要的作用。CV-UNet Universal Matting 是一款基于 UNET 架构改进的通用图像抠图模型&#xff0c;具备…

作者头像 李华
网站建设 2026/3/1 17:06:12

AI动漫创作新范式:NewBie-image-Exp0.1结构化提示词实战指南

AI动漫创作新范式&#xff1a;NewBie-image-Exp0.1结构化提示词实战指南 1. 引言&#xff1a;开启结构化提示词的动漫生成新时代 随着AI生成内容&#xff08;AIGC&#xff09;技术的快速发展&#xff0c;动漫图像生成已从早期的模糊草图迈向高保真、可控性强的创作阶段。然而…

作者头像 李华
网站建设 2026/2/27 23:20:46

从边缘计算到混合语种优化|HY-MT1.5-7B翻译模型全场景应用

从边缘计算到混合语种优化&#xff5c;HY-MT1.5-7B翻译模型全场景应用 1. 引言&#xff1a;多语言翻译的现实挑战与技术演进 随着全球化进程加速&#xff0c;跨语言信息交互需求激增。传统翻译系统在面对混合语种输入、专业术语一致性和低延迟实时响应等场景时&#xff0c;往…

作者头像 李华