You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

YOLOv7训练时报错TypeError: No loop matching...,求修复方法

解决YOLOv7训练时的TypeError: No loop matching the specified signature and casting was found for ufunc greater错误

错误场景

运行YOLOv7训练命令时触发该错误:

python train.py --workers 0 --weights yolov7_training.pt --data data\plane.yaml --batch-size 4 --device 0 --img 640 640 --name yolov7-plane --hyp data\hyp.scratch.custom.yaml --epochs 200 --cfg cfg\training\yolov7-plane.yaml

错误回溯指向TensorBoard的summary.py中np.greater(counts, 0, dtype=np.int32)行,本质是数据类型不兼容或numpy与TensorBoard版本冲突导致的ufunc运算失败。

修复方案

方案1:临时禁用类别直方图记录(最快解决)

直接修改train.py第268行,注释或删除TensorBoard的类别直方图添加代码:

# tb_writer.add_histogram('classes', c, 0)  # 注释掉该行

此方法不影响训练流程,仅取消类别分布的TensorBoard可视化记录。

方案2:修复numpy与TensorBoard版本兼容问题

  • 降级numpy版本:numpy 1.24+与部分旧版TensorBoard存在兼容性问题,执行以下命令降级到稳定兼容版本:
pip install numpy==1.23.5
  • 或修改TensorBoard源码:找到C:\Users\yildi\anaconda3\envs\yolov7-gpu-env\lib\site-packages\torch\utils\tensorboard\summary.py文件,将第386行的:
cum_counts = np.cumsum(np.greater(counts, 0, dtype=np.int32))

修改为:

cum_counts = np.cumsum(np.greater(counts.astype(np.int32), 0))

先将counts强制转换为int32类型,再执行比较运算,避免类型不匹配。

方案3:检查数据集合法性

确认数据集配置文件(plane.yaml)中的类别数量与标注文件中的类别ID完全匹配:

  • 确保yaml中nc参数值等于实际类别数
  • 标注文件中的类别ID未超出0~nc-1的范围
    异常的类别ID会导致类别张量c的数据异常,进而触发直方图生成错误。

内容的提问来源于stack exchange,提问作者KAAN YILDIZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 18:45:19