如何修改YOLOv8检测结果以保留两位小数(简易方法)
实现YOLOv8检测结果保留两位小数的简易方法
方法一:在推理代码中直接处理(无需修改库)
这是最便捷的方式,不用改动YOLOv8源码,直接在你的推理脚本里对检测到的置信度做格式化处理:
1. 控制台输出或结果保存时格式化
from ultralytics import YOLO # 加载预训练模型 model = YOLO("yolov8n.pt") # 执行检测 results = model("your_image.jpg") # 遍历所有检测结果 for result in results: for box in result.boxes: # 获取类别名称 class_name = result.names[int(box.cls)] # 方式1:四舍五入保留两位小数 conf_score = round(box.conf.item(), 2) # 方式2:强制显示两位小数(如0.9转为0.90) # conf_score = "{:.2f}".format(box.conf.item()) # 输出格式化后的结果 print(f"{class_name} {conf_score}")
2. 自定义可视化显示两位小数
如果需要在检测图上显示两位小数的置信度,可以手动绘制检测框和文本:
from ultralytics import YOLO import cv2 model = YOLO("yolov8n.pt") results = model("your_image.jpg") img = cv2.imread("your_image.jpg") for result in results: for box in result.boxes: # 转换坐标为整数 x1, y1, x2, y2 = map(int, box.xyxy[0]) class_name = result.names[int(box.cls)] conf_score = round(box.conf.item(), 2) # 绘制检测框 cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2) # 绘制带两位小数置信度的标签 cv2.putText(img, f"{class_name} {conf_score}", (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 2) # 显示结果 cv2.imshow("YOLOv8 Detection", img) cv2.waitKey(0) cv2.destroyAllWindows()
方法二:修改YOLOv8源码实现全局生效
如果希望所有场景下的置信度都默认显示两位小数,可以修改库的核心文件:
1. 修改结果字符串输出格式
找到YOLOv8安装目录下的 ultralytics/utils/ops.py,定位到Boxes类的__repr__方法,将置信度的输出改为两位小数格式:
# 原代码示例 # return f"Boxes(boxes={self.xyxy}, scores={self.conf}, classes={self.cls})" # 修改后 formatted_conf = [round(c.item(), 2) for c in self.conf] return f"Boxes(boxes={self.xyxy}, scores={formatted_conf}, classes={self.cls})"
2. 修改可视化标签的小数显示
找到 ultralytics/utils/plots.py,定位到Annotator类中绘制标签的代码,将置信度的格式化从{conf:.1f}(或无指定)改为{conf:.2f}:
# 原代码示例 # label = f"{names[int(cls)]} {conf:.1f}" if conf else f"{names[int(cls)]}" # 修改后 label = f"{names[int(cls)]} {conf:.2f}" if conf else f"{names[int(cls)]}"
注意:修改源码后,如果后续更新YOLOv8库,改动会被覆盖,建议在虚拟环境中操作,或自定义子类继承原有类来实现修改。
内容的提问来源于stack exchange,提问作者0nespo
相关产品推荐
相关产品推荐

