在向UltralyticsYOLO仓库提交错误报告时,创建一个有效的最小可复现示例(MRE)至关重要。MRE是一个独立的代码片段,能够清楚地展示遇到的问题。这有助于维护者和贡献者理解问题并更高效地进行修复。以下是创建MRE的指南:
隔离问题
创建MRE的第一步是隔离问题。移除任何与问题无直接关系的代码或依赖。专注于引起问题的特定代码部分,并移除任何不相关的部分。
使用公共模型和数据集
在创建MRE时,使用公众可用的模型和数据集来重现问题。例如,使用yolov8n.pt
模型和coco8.yaml
数据集。这确保了维护者和贡献者可以轻松地运行例子并调查问题,而无需访问专有数据或自定义模型。
包含所有必要的依赖项
确保MRE中包含所有必要的依赖项。如果代码依赖于外部库,请指定所需的包及其版本。理想情况下,使用yolo checks
列出依赖项,如果有ultralytics
安装,或者使用pip list
列出其他工具的依赖项。
编写清晰的问题描述
提供清晰、独立的問題描述。解释预期的行为和遇到的实际行为。如果可能,包括任何错误消息或相关日志。
正确格式化代码
python
# Python代码放在这里
使用代码块在问题描述中正确格式化代码。这使得其他人更容易阅读和理解代码。在GitHub上,可以通过将代码包裹在三个反引号('''
)中并指定语言来创建代码块:
测试MRE
在提交错误报告之前,测试MRE以确保它准确地重现问题。确保其他人可以无问题或修改地运行例子。
示例MRE
以下是一个使用磁共振成像(MRI)的示例MRE,用于报告一个假想的错误:
错误描述:
当在0通道图像上运行推理时,遇到了一个与输入张量维度相关的错误。
import torch from ultralytics import YOLO
# 加载模型
model = YOLO("yolov8n.pt")
# 加载一个0通道图像
image = torch.rand(1, 0, 640, 640)
# 运行模型
results = model(image)
错误消息:
RuntimeError: Expected input[1, 0, 640, 640] to have 3 channels, but got 0 channels instead
依赖项:
torch==2.3.0
ultralytics==8.2.0
在这个例子中,MRE用最少的代码清楚地说明了问题,使用了公共模型("yolov8n.pt"
),包含了所有必要的依赖项,并提供了清晰的问题描述和错误消息。